using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Abilities/PushAndPull")] public class PushAndPull : Abilities { [SerializeField] private float minDistance; [SerializeField] private float maxDistance; [SerializeField] private float endDistance; [SerializeField] private float moveForce; Rigidbody selectedObject = null; PlayerController p; public override void Effects(PlayerController player) { RaycastHit hit; p = player; if (player.manaScript.mana > manaCost) { if (Physics.Raycast(new Vector3(player.transform.position.x, player.transform.position.y - 0.5f, player.transform.position.z), player.transform.forward, out hit, 5f) && p.currentTarget == null) { if (hit.collider.tag == "Box") { player.currentTarget = hit.collider.GetComponent<BoxScript>(); player.currentTarget.CheckPos(); } selectedObject = hit.rigidbody; player.currentTarget.Manipulation(true); } if (p.currentTarget != null) { if (Vector3.Distance(p.transform.position, p.currentTarget.transform.position) < minDistance) { selectedObject.AddForce(p.transform.forward * moveForce, ForceMode.VelocityChange); } if (Vector3.Distance(p.transform.position, p.currentTarget.transform.position) > maxDistance) { selectedObject.AddForce((p.transform.position - p.currentTarget.transform.position)* moveForce, ForceMode.VelocityChange); } if (Vector3.Distance(p.transform.position, p.currentTarget.transform.position) < maxDistance && Vector3.Distance(p.transform.position, p.currentTarget.transform.position) > minDistance) selectedObject.velocity = Vector3.zero; if (Vector3.Distance(p.transform.position, p.currentTarget.transform.position) > endDistance) { p.EndPushAndPull(); } } } } }