Newer
Older
Dreamsturbia-Project-IADE-Unity3D / Assets / Scripts / Player / Abilities / PushAndPull2.cs
@Rackday Rackday on 21 Aug 2024 3 KB Project Added
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. [CreateAssetMenu(menuName = "Abilities/PushAndPull2")]
  5. public class PushAndPull2 : Abilities
  6. {
  7. [SerializeField] private float minDistance;
  8. [SerializeField] private float moveForce;
  9. [SerializeField] private float enemyMoveForce;
  10. [SerializeField] private float endDistance;
  11. [SerializeField] private float range;
  12. Rigidbody selectedObject = null;
  13. PlayerController p;
  14. public override void Effects(PlayerController player)
  15. {
  16. RaycastHit hit;
  17. p = player;
  18. if (player.manaScript.mana > 0.5f)
  19. {
  20. player.manaScript.Consume(manaCost * Time.deltaTime * player.timeMultiplier);
  21. 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)
  22. {
  23. if (hit.collider.tag == "Box" || hit.collider.tag == "Enemy")
  24. {
  25. selectedObject = hit.rigidbody;
  26. if (hit.collider.tag == "Box")
  27. {
  28. player.currentTarget = hit.collider.GetComponent<BoxScript>(); player.currentTarget.CheckPos();
  29. player.currentTarget.Manipulation(true);
  30. }
  31. }
  32. }
  33. if (p.currentTarget != null)
  34. {
  35. if (p.currentTarget.CompareTag("Box"))
  36. {
  37. if (Vector3.Distance(player.transform.position, p.currentTarget.transform.position) > minDistance)
  38. 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;
  39. else
  40. {
  41. if (player.directionPushAndPull == 1)
  42. selectedObject.velocity = Vector3.zero;
  43. 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;
  44. }
  45. }
  46. if (Vector3.Distance(player.transform.position, p.currentTarget.transform.position) > endDistance) player.EndPushAndPull();
  47. }
  48. if(selectedObject != null && selectedObject.gameObject.CompareTag("Enemy"))
  49. {
  50. selectedObject.velocity += (player.transform.position - selectedObject.gameObject.transform.position).normalized * enemyMoveForce * player.directionPushAndPull;
  51. if (Vector3.Distance(player.transform.position, selectedObject.gameObject.transform.position) > 10)
  52. selectedObject = null;
  53. }
  54. }
  55. else player.EndPushAndPull();
  56. }
  57. }