using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Abilities/PushAndPull2")] public class PushAndPull2 : Abilities { [SerializeField] private float minDistance; [SerializeField] private float moveForce; [SerializeField] private float enemyMoveForce; [SerializeField] private float endDistance; [SerializeField] private float range; Rigidbody selectedObject = null; PlayerController p; public override void Effects(PlayerController player) { RaycastHit hit; p = player; if (player.manaScript.mana > 0.5f) { player.manaScript.Consume(manaCost * Time.deltaTime * player.timeMultiplier); if (Physics.Raycast(new Vector3(player.transform.position.x, player.transform.position.y - 0.5f, player.transform.position.z), player.transform.forward, out hit, range) && p.currentTarget == null) { if (hit.collider.tag == "Box" || hit.collider.tag == "Enemy") { selectedObject = hit.rigidbody; if (hit.collider.tag == "Box") { player.currentTarget = hit.collider.GetComponent<BoxScript>(); player.currentTarget.CheckPos(); player.currentTarget.Manipulation(true); } } } if (p.currentTarget != null) { if (p.currentTarget.CompareTag("Box")) { if (Vector3.Distance(player.transform.position, p.currentTarget.transform.position) > minDistance) selectedObject.velocity = new Vector3(player.transform.position.x - p.currentTarget.transform.position.x, 0, player.transform.position.z - p.currentTarget.transform.position.z).normalized * moveForce * p.directionPushAndPull; else { if (player.directionPushAndPull == 1) selectedObject.velocity = Vector3.zero; else selectedObject.velocity = new Vector3(player.transform.position.x - p.currentTarget.transform.position.x, 0 , player.transform.position.z - p.currentTarget.transform.position.z).normalized * moveForce * p.directionPushAndPull; } } if (Vector3.Distance(player.transform.position, p.currentTarget.transform.position) > endDistance) player.EndPushAndPull(); } if(selectedObject != null && selectedObject.gameObject.CompareTag("Enemy")) { selectedObject.velocity += (player.transform.position - selectedObject.gameObject.transform.position).normalized * enemyMoveForce * player.directionPushAndPull; if (Vector3.Distance(player.transform.position, selectedObject.gameObject.transform.position) > 10) selectedObject = null; } } else player.EndPushAndPull(); } }