229 lines
4.8 KiB
C#
229 lines
4.8 KiB
C#
![]() |
// ***********************************************************************
|
|||
|
// Assembly : Game
|
|||
|
// Author : Kimch
|
|||
|
// Created : 2020-09-02
|
|||
|
// Description :
|
|||
|
// Last Modified By :
|
|||
|
// Last Modified On :
|
|||
|
// ***********************************************************************
|
|||
|
// <copyright file= "Ef_swing1" company="Kimch"></copyright>
|
|||
|
// <summary></summary>
|
|||
|
// ***********************************************************************
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace G
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 挥光
|
|||
|
/// </summary>
|
|||
|
public class Ef_swing1 : MonoBehaviour
|
|||
|
{
|
|||
|
public Transform pt_hit;
|
|||
|
public Material[] attribute_mat = new Material[5];
|
|||
|
|
|||
|
private int _uvAnimationTileX;
|
|||
|
private int _uvAnimationTileY;
|
|||
|
private Vector2 _size;
|
|||
|
private Vector2 _offset;
|
|||
|
|
|||
|
private int _index;
|
|||
|
private int _lastIndex = -1;
|
|||
|
|
|||
|
private int _framesPerSecond = 20;
|
|||
|
private int _lastFrame;
|
|||
|
|
|||
|
private int _impactFrame = 1;
|
|||
|
private float _startTime;
|
|||
|
private float _delay;
|
|||
|
|
|||
|
private int _originLayer = GameLayer.NormalAttack;
|
|||
|
private int _layerIndex;
|
|||
|
private bool _layerChange;
|
|||
|
|
|||
|
private bool _efon;
|
|||
|
private bool _pton;
|
|||
|
|
|||
|
private int _random;
|
|||
|
|
|||
|
private int _addForce;
|
|||
|
|
|||
|
private Renderer _renderer;
|
|||
|
private Collider _collider;
|
|||
|
|
|||
|
private EntityPlayer _scriptCha;
|
|||
|
private Pt_hit _scriptHit;
|
|||
|
|
|||
|
private void Awake()
|
|||
|
{
|
|||
|
_renderer = this.GetComponentInChildren<Renderer>();
|
|||
|
_collider = this.GetComponent<Collider>();
|
|||
|
|
|||
|
_originLayer = this.gameObject.layer;
|
|||
|
}
|
|||
|
|
|||
|
private void Start()
|
|||
|
{
|
|||
|
var rootGO = this.transform.root.gameObject;
|
|||
|
_scriptHit = pt_hit.GetComponent<Pt_hit>();
|
|||
|
_scriptCha = rootGO.GetComponent<EntityMainPlayer>();
|
|||
|
|
|||
|
Physics.IgnoreCollision(rootGO.GetComponent<Collider>(), _collider);
|
|||
|
_startTime = 0f;
|
|||
|
_delay = 0f;
|
|||
|
_renderer.enabled = false;
|
|||
|
_collider.isTrigger = true;
|
|||
|
_collider.enabled = false;
|
|||
|
this.gameObject.SetActive(false);
|
|||
|
}
|
|||
|
|
|||
|
public void SwingOn(float delay, int cnt_x, int cnt_y, int uvSpeed, int impact, int addForce)
|
|||
|
{
|
|||
|
this.gameObject.layer = _originLayer;
|
|||
|
this.gameObject.SetActive(true);
|
|||
|
|
|||
|
_delay = delay;
|
|||
|
_efon = true;
|
|||
|
_uvAnimationTileX = cnt_x;
|
|||
|
_uvAnimationTileY = cnt_y;
|
|||
|
_lastFrame = _uvAnimationTileX * _uvAnimationTileY;
|
|||
|
_framesPerSecond = uvSpeed;
|
|||
|
_impactFrame = impact;
|
|||
|
_addForce = addForce;
|
|||
|
_size = new Vector2(1f / _uvAnimationTileX, 1f / _uvAnimationTileY);
|
|||
|
|
|||
|
if (_layerChange)
|
|||
|
{
|
|||
|
if (_random > GlobalUtils.RndHundred)
|
|||
|
{
|
|||
|
this.gameObject.layer = _layerIndex;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void SwingOff()
|
|||
|
{
|
|||
|
this.gameObject.SetActive(false);
|
|||
|
_renderer.enabled = false;
|
|||
|
_collider.enabled = false;
|
|||
|
_efon = false;
|
|||
|
_pton = false;
|
|||
|
_index = 0;
|
|||
|
_lastIndex = -1;
|
|||
|
_startTime = 0f;
|
|||
|
}
|
|||
|
|
|||
|
public void RndEfOn(int index, int amount)
|
|||
|
{
|
|||
|
_random = amount;
|
|||
|
//switch (amount)
|
|||
|
//{
|
|||
|
// case 2:
|
|||
|
// _random = 5;
|
|||
|
// break;
|
|||
|
// case 3:
|
|||
|
// _random = 10;
|
|||
|
// break;
|
|||
|
// case 4:
|
|||
|
// _random = 20;
|
|||
|
// break;
|
|||
|
//}
|
|||
|
//_random = 100;
|
|||
|
|
|||
|
switch (index)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
_layerIndex = GameLayer.NormalAttack;
|
|||
|
_layerChange = false;
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
_layerIndex = GameLayer.BurnAttack;
|
|||
|
_layerChange = true;
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
_layerIndex = GameLayer.ColdAttack;
|
|||
|
_layerChange = true;
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
_layerIndex = GameLayer.ShockAttack;
|
|||
|
_layerChange = true;
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
_layerIndex = GameLayer.DarkAttack;
|
|||
|
_layerChange = true;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ChangeAttribute(int index, int amount)
|
|||
|
{
|
|||
|
if (attribute_mat != null && index < attribute_mat.Length)
|
|||
|
_renderer.material = attribute_mat[index];
|
|||
|
RndEfOn(index, amount);
|
|||
|
}
|
|||
|
|
|||
|
private void Update()
|
|||
|
{
|
|||
|
if (_efon)
|
|||
|
{
|
|||
|
if (_delay > 0f)
|
|||
|
{
|
|||
|
_delay -= Time.deltaTime;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (_addForce > 0)
|
|||
|
{
|
|||
|
_scriptCha.AddForwardForce(_addForce);
|
|||
|
}
|
|||
|
|
|||
|
_efon = false;
|
|||
|
_startTime = 0f;
|
|||
|
_renderer.enabled = true;
|
|||
|
_scriptCha.SwingStart();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (!_renderer.enabled)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
_startTime += Time.deltaTime;
|
|||
|
_index = (int)(_startTime * _framesPerSecond);
|
|||
|
|
|||
|
if (_index == _lastIndex)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
if (_index >= _lastFrame)
|
|||
|
{
|
|||
|
_renderer.enabled = false;
|
|||
|
this.gameObject.SetActive(false);
|
|||
|
_collider.enabled = false;
|
|||
|
_pton = false;
|
|||
|
_lastIndex = -1;
|
|||
|
}
|
|||
|
else if (_index == _impactFrame || _index == _impactFrame + 1)
|
|||
|
{
|
|||
|
_collider.enabled = true;
|
|||
|
if (!_pton)
|
|||
|
{
|
|||
|
_scriptHit.ParticleOn();
|
|||
|
_pton = true;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_collider.enabled = false;
|
|||
|
}
|
|||
|
|
|||
|
int _uIndex = _index % _uvAnimationTileX;
|
|||
|
int _vIndex = _index / _uvAnimationTileX;
|
|||
|
_offset = Vector2.right * _uIndex * _size.x + Vector2.up * (1f - _size.y - _vIndex * _size.y);
|
|||
|
_renderer.material.mainTextureOffset = _offset;
|
|||
|
_renderer.material.mainTextureScale = _size;
|
|||
|
_lastIndex = _index;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|