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

    }
}