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

162 lines
3.8 KiB
C#

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-09-02
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "Bullet_punch" company="Kimch"></copyright>
// <summary></summary>
// ***********************************************************************
namespace G
{
using UnityEngine;
/// <summary>
///
/// </summary>
public class Bullet_punch : MonoBehaviour
{
public Transform pt_thrust;
private Transform _myTransform;
private Vector3 _originScale = new Vector3(0.5f, 2f, 0.5f);
private Vector3 _growVector = new Vector3(1f, 0f, 1f);
private Color _targetColor = new Color(0.5f, 0.5f, 0.5f, 0f);
private Renderer _myRenderer;
private Material _myMaterial;
private SphereCollider _myCollider;
private short _efon;
private float _delay;
private int _addforce;
private Transform cha1;
private Cha_Skill script_cha;
private Transform _enemy;
private float _stepFactor = 1f;
private float _upAngle;
private bool _boom;
private void Awake()
{
_myTransform = this.transform;
_myRenderer = this.GetComponent<Renderer>();
_myMaterial = _myRenderer.material;
_myCollider = this.GetComponent<SphereCollider>();
cha1 = GameObject.FindWithTag("Player").transform;
script_cha = cha1.GetComponent<Cha_Skill>();
this.gameObject.SetActive(false);
}
public void PunchOff()
{
_delay = 4f;
_efon = 0;
_myCollider.enabled = false;
_myRenderer.enabled = false;
this.gameObject.SetActive(false);
_myTransform.localScale = _originScale;
//pt_thrust.particleEmitter().emit = false;
}
public void PunchShoot(float delay, int addforce, Transform mon, float step, float upangle, float collidersize, bool boom)
{
this.gameObject.SetActive(true);
_delay = delay;
_efon = 1;
_enemy = mon;
_addforce = addforce;
_myCollider.enabled = false;
_stepFactor = step;
_upAngle = upangle;
_myCollider.radius = collidersize;
_boom = boom;
}
private void Update()
{
if (_efon <= 0)
{
return;
}
if (_efon == 1)
{
Vector3 direction;
if (_enemy != null)
{
direction = _enemy.position - cha1.position;
}
else
{
direction = cha1.forward * 0.1f;
}
if (direction != Vector3.zero)
{
cha1.rotation = Quaternion.LookRotation(direction);
}
cha1.position += (direction * 10f + cha1.right * _stepFactor) * (Time.deltaTime * 0.5f);
if (_delay > 0f)
{
_delay -= Time.deltaTime;
}
else
{
if (_addforce > 0)
{
cha1.GetComponent<Rigidbody>().AddForce(cha1.transform.forward * _addforce);
}
_efon = 2;
_myTransform.position = cha1.position + Vector3.up * (0.1f + _upAngle * 0.1f) + cha1.forward * 0.15f;
_myTransform.up = -cha1.forward - Vector3.up * _upAngle;
_myTransform.localScale = _originScale;
_myRenderer.enabled = true;
_myCollider.enabled = true;
_myMaterial.color = Color.gray;
//pt_thrust.particleEmitter().emit = true;
if (_boom)
{
script_cha.BoomOn(1, false);
}
}
}
else if (_efon == 2)
{
Vector3 localScale = _myTransform.localScale;
if (localScale.x > 3f)
{
_efon = 0;
_myRenderer.enabled = false;
this.gameObject.SetActive(false);
_myTransform.position = Vector3.one * 4f;
}
else
{
if (localScale.x > 1f)
{
//pt_thrust.particleEmitter().emit = false;
_myCollider.enabled = false;
}
}
}
_myTransform.localScale += _growVector * (Time.deltaTime * 6f);
var transColor = _myMaterial.color;
transColor = Color.Lerp(transColor, _targetColor, Time.deltaTime * 5f);
_myMaterial.color = transColor;
}
}
}