// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-09-02 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using UnityEngine; namespace G { /// /// 挥光 /// 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(); _collider = this.GetComponent(); _originLayer = this.gameObject.layer; } private void Start() { var rootGO = this.transform.root.gameObject; _scriptHit = pt_hit.GetComponent(); _scriptCha = rootGO.GetComponent(); Physics.IgnoreCollision(rootGO.GetComponent(), _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; } } }