- 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();
- }
- }
- }
-
- }
-
- }