2025-05-18 01:04:31 +08:00

142 lines
3.0 KiB
C#

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-08-28
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "SpiritSword_p3" company="Kimch"></copyright>
// <summary></summary>
// ***********************************************************************
namespace G
{
using UnityEngine;
public class SpiritSword_p3 : MonoBehaviour
{
private bool fireon;
private Transform mytransform;
private Transform target;
private Transform myparent;
private Vector3 targetpos;
private Vector3 directionVector;
private float f_speed;
private Collider mycollider;
private TrailRenderer mytrail;
private Vector3 n_pos;
private bool finish;
private void Awake()
{
mytransform = base.transform;
mycollider = base.GetComponent<Collider>();
mytrail = GetComponent<TrailRenderer>();
}
private void OnEnable()
{
finish = false;
mycollider.enabled = false;
f_speed = 0.4f;
mytrail.enabled = true;
}
private void Start()
{
myparent = mytransform.parent;
mytransform.parent = null;
}
public void FireSword(Transform _enemy)
{
mycollider.enabled = true;
target = _enemy;
targetpos = target.position;
directionVector = targetpos - mytransform.position;
directionVector.y = 0f;
if (directionVector != Vector3.zero)
{
mytransform.forward = directionVector;
}
f_speed = 0.4f;
fireon = true;
}
public void FinishSword()
{
mycollider.enabled = false;
fireon = false;
f_speed = 0f;
finish = true;
}
public void SetPos(int _index)
{
switch (_index)
{
case 0:
n_pos = new Vector3(1f, 0f, 1f) * 0.13f;
break;
case 1:
n_pos = new Vector3(1f, 0f, -1f) * 0.13f;
break;
case 2:
n_pos = new Vector3(-1f, 0f, 1f) * 0.13f;
break;
case 3:
n_pos = new Vector3(-1f, 0f, -1f) * 0.13f;
break;
}
}
private void Update()
{
if (finish)
{
mytransform.position += Vector3.up * 3f * Time.deltaTime;
Vector3 position = mytransform.position;
if (position.y > 1f)
{
finish = false;
mytrail.enabled = false;
this.gameObject.SetActive(false);
CancelInvoke();
}
}
else if (fireon)
{
f_speed -= Time.deltaTime;
if (f_speed < 0f)
{
fireon = false;
return;
}
mytransform.up = directionVector;
mytransform.position += directionVector * Time.deltaTime * f_speed * 20f;
}
else
{
mycollider.enabled = false;
directionVector = myparent.position - mytransform.position + myparent.forward * n_pos.z + myparent.right * n_pos.x;
if (directionVector != Vector3.zero)
{
mytransform.rotation = Quaternion.Lerp(mytransform.rotation, Quaternion.LookRotation(directionVector), Time.deltaTime * 12f);
}
mytransform.position += directionVector * 3f * Time.deltaTime;
f_speed = 0f;
}
}
}
}