using com.jbrettob.traps; using UnityEngine; using com.jbrettob; using com.jbrettob.data.vo.items.mechanics; using com.jbrettob.enemies; using System.Collections.Generic; using com.jbrettob.data.vo.items; public class SlowMechanic:AbstractGameMechanic { private float _timer = 0f; private bool _initialized; private Trap _trap; private SlowMechanicData _data; private Enemy _enemy; private float _oldMovementSpeed; public void setData(SlowMechanicData data) { setData(data, null); } public void setData(SlowMechanicData data, Trap trap) { if (_initialized) return; _trap = trap; _data = data; _timer = _data.slowTime; _initialized = true; } void Start() { _enemy = gameObject.GetComponent(); if (_enemy != null) { _oldMovementSpeed = _enemy.movementSpeed; _enemy.movementSpeed *= _data.slowInPercentage; } } void Update() { if (_trap != null && !_trap.isPlaced()) return; if (_enemy == null) { for (int i = 0 ; i < getTargetsInRange().Count; i++) { addSlow(getTargetsInRange()[i]); } } else { if (_timer <= 0) { if (_enemy != null) { _enemy.movementSpeed = _oldMovementSpeed; Destroy(this); } } else { _timer -= Time.deltaTime * TimeScale.TIME; } } } private void addSlow(Enemy enemy) { SlowMechanic slow = enemy.gameObject.GetSafeComponent(); slow.setData(_data); } private List getTargetsInRange() { List target = new List(); float distance = _data.slowRange; float tempDistance; for (int i = 0; i < SpawnManager.getInstance().enemies.Count; i++) { tempDistance = Vector3.Distance(gameObject.transform.position, SpawnManager.getInstance().enemies[i].transform.position); if (tempDistance < distance) { target.Add(SpawnManager.getInstance().enemies[i]); } } return target; } void OnDrawGizmos() { if (!debug && _enemy != null) return; Gizmos.color = Color.cyan; Gizmos.DrawWireSphere(transform.position, _data.slowRange); } }