Newer
Older
Dreamsturbia-Project-IADE-Unity3D / Assets / Scripts / Player / Abilities / PushAndPull.cs
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();
                }
            }

        }
        
    }
    


}