using System.Collections; using System.Collections.Generic; using UnityEngine; public class MagnetEmbedPowerUpEffect : PowerUpEffect { private GameObject _player; private PlayerObjectShared _playerObjectShared; public float magnetPowerForce; public float magnetPowerRange; public float magnetPowerCooldown; private bool _magnetPowerCooldown; private TimerHelper _magnetPowerCooldownTimer; // Start is called before the first frame update void Start() { _player = GameEngine.mainPlayer; _playerObjectShared = _player.GetComponent(); _magnetPowerCooldown = false; _magnetPowerCooldownTimer = new TimerHelper(magnetPowerCooldown, false); } public override void OnPickUp() { } public override void ApplyEffect() { } public override bool OnUseEffect() { if (!_magnetPowerCooldown) { foreach (BlackHoleForce currentBHF in BlackHoleManager.blackHoleForceObjects) { GameObject currentObject = currentBHF.gameObject; if (currentObject.tag != "Player") { Vector3 directionToObject = gameObject.transform.position - currentObject.transform.position; float distanceToObject = directionToObject.magnitude; if (distanceToObject <= magnetPowerRange) { Rigidbody currentRigidBody = currentObject.GetComponent(); if (currentRigidBody != null) { currentRigidBody.AddForce(directionToObject * magnetPowerForce, ForceMode.VelocityChange); } } } } _magnetPowerCooldown = true; _magnetPowerCooldownTimer.RestartTimer(); return true; } else { return false; } } public override float CooldownStatus() { return _magnetPowerCooldownTimer.Position; } public override bool PowerUpReady() { if (_magnetPowerCooldown) { return false; } else { return true; } } // Update is called once per frame void Update() { if (_magnetPowerCooldown) { if (_magnetPowerCooldownTimer.HasTicked(Time.deltaTime)) { _magnetPowerCooldown = false; } } } }