// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-09-02 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using UnityEngine; namespace G { public class Ef_swing1_ride : MonoBehaviour { private int uvAnimationTileX; private int uvAnimationTileY; private int framesPerSecond = 20; private int index; private int oldindex = -1; private float starttime; private int lastframe; private bool efon; private float delay; private int impactframe = 1; private Rigidbody cha_rigidbody; public Transform pt_hit; private Vector2 size; private Vector2 offset; private float uIndex; private int vIndex; private Pt_hit script_pthit; private short layerindex; private bool layerchange; private bool pton; private short rndefamount; private int addforce; private Renderer myrenderer; private Collider mycollider; private void Awake() { myrenderer = this.GetComponent(); mycollider = this.GetComponent(); } private void Start() { GameObject gameObject = this.transform.root.gameObject; cha_rigidbody = gameObject.GetComponent(); script_pthit = pt_hit.GetComponent(); Physics.IgnoreCollision(gameObject.GetComponent(), mycollider); starttime = 0f; myrenderer.enabled = false; mycollider.isTrigger = true; mycollider.enabled = false; delay = 0f; this.gameObject.SetActive(false); } public void SwingOn(float _delay, int cnt_x, int cnt_y, int uvspeed, int impact, int _addforce) { this.gameObject.layer = GameLayer.NormalAttack; 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 (rndefamount > GlobalUtils.RndHundred) { this.gameObject.layer = layerindex; } } } public void SwingOff() { efon = false; this.gameObject.SetActive(false); myrenderer.enabled = false; mycollider.enabled = false; pton = false; oldindex = -1; index = 0; starttime = 0f; } private void Update() { if (efon) { if (delay > 0f) { delay -= Time.deltaTime; } else { if (addforce > 0) { cha_rigidbody.AddForce(base.transform.root.forward * addforce); } myrenderer.enabled = true; starttime = 0f; efon = false; } } if (!myrenderer.enabled) { return; } starttime += Time.deltaTime; index = (int)(starttime * framesPerSecond); uIndex = index % uvAnimationTileX; vIndex = index / uvAnimationTileX; if (index == oldindex) { return; } if (index >= lastframe) { myrenderer.enabled = false; base.gameObject.SetActive(false); mycollider.enabled = false; pton = false; oldindex = -1; } else if (index == impactframe || index == impactframe + 1) { mycollider.enabled = true; if (!pton) { script_pthit.ParticleOn(); pton = true; } } else { mycollider.enabled = false; } offset = Vector2.right * uIndex * size.x + Vector2.up * (1f - size.y - vIndex * size.y); myrenderer.material.mainTextureOffset = offset; myrenderer.material.mainTextureScale = size; oldindex = index; } } }