Advertisement
GoodNoodle

PlayerController.cs

Jul 18th, 2023
1,025
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.48 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using UnityEngine;
  6. using UnityEngine.TextCore.Text;
  7. using UnityEngine.UI;
  8. using static Creature;
  9.  
  10.  
  11.  
  12. public class PlayerController : MonoBehaviour, ISavable,ISwitchable
  13. {
  14.     private Vector2 input;
  15.  
  16.     private Charecter charecter;
  17.  
  18.     public static PlayerController i;
  19.  
  20.     public Sprite openedChestSprite;
  21.  
  22.     private BuddyController buddyController;
  23.  
  24.     public Party creatureparty { get; private set; }
  25.  
  26.  
  27.     public bool playerActive = true;
  28.  
  29.     public Text swapText;
  30.  
  31.     public GameObject torch;
  32.  
  33.     public CharecterAnimator theanim;
  34.  
  35.     private void Awake()
  36.     {
  37.         i = this;
  38.  
  39.         creatureparty = GetComponent<Party>();
  40.  
  41.         charecter = GetComponent<Charecter>();        
  42.     }
  43.  
  44.     private void Start()
  45.     {
  46.      
  47.        // controllerScript.enabled = true;
  48.     }
  49.  
  50.     public void HandleUpdate()
  51.     {
  52.         if (!playerActive) return;
  53.         if (!charecter.IsMoving)
  54.         {
  55.             input.x = Input.GetAxisRaw("Horizontal");
  56.             input.y = Input.GetAxisRaw("Vertical");
  57.  
  58.             // remove diagonal movement
  59.            // if (input.x != 0) input.y = 0;
  60.  
  61.           //  if (input != Vector2.zero)
  62.            // {
  63.            //     StartCoroutine(charecter.Move(input, OnMoveOver));
  64.            // }
  65.  
  66.             if (buddyController != null )
  67.             {
  68.                 if (CharecterSwap.istogether == true) {buddyController.Follow(transform.position);}
  69.                
  70.                
  71.             }
  72.  
  73.            if(Math.Abs(input.x) == 1 || Math.Abs(input.y) == 1)
  74.            StartCoroutine(charecter.Move(input, OnMoveOver));
  75.            
  76.         }
  77.  
  78.         charecter.HandleUpdate();
  79.  
  80.         if (Input.GetKeyDown(KeyCode.Z))
  81.             StartCoroutine(Interact());
  82.     }
  83.  
  84.     IEnumerator Interact()
  85.     {
  86.         var facingDir = new Vector3(charecter.Animator.MoveX, charecter.Animator.MoveY);
  87.         var interactPos = transform.position + facingDir;
  88.  
  89.         //Debug.Log($"{charecter.Animator.MoveX} {charecter.Animator.MoveY}");
  90.  
  91.         var collider = Physics2D.OverlapCircle(interactPos, 0.3f, GameLayers.I.InteractableLayer | GameLayers.I.WaterLayer);
  92.         Debug.DrawLine(transform.position, interactPos, Color.green, 0.5f);
  93.         if (collider != null)
  94.         {
  95.              if(collider.gameObject.GetComponent<Torch>() != null)
  96.              {
  97.                 collider.gameObject.SetActive(false);
  98.                 torch = collider.gameObject;
  99.                 torch.transform.parent = this.transform;
  100.                 theanim.IsSHoldingTorch= true;
  101.              }
  102.  
  103.             yield return collider.GetComponent<Interactable>()?.Interact(transform);
  104.         }
  105.  
  106.      
  107.        
  108.          collider = Physics2D.OverlapCircle(interactPos, 0.3f, GameLayers.I.MoveableObjects);
  109.         if(collider != null)
  110.         {
  111.             yield return collider.GetComponent<MovableObject>().Move(facingDir);
  112.         }
  113.  
  114.     }
  115.  
  116.     IPlayerTriggerable currentlyInTrigger;
  117.  
  118.     private void OnMoveOver()
  119.     {
  120.       var colliders =  Physics2D.OverlapCircleAll(transform.position - new Vector3(0, charecter.OffsetY), 0.2f, GameLayers.I.TriggerableLayers);
  121.  
  122.         IPlayerTriggerable triggerable = null;
  123.         foreach (var collider in colliders)
  124.         {
  125.              triggerable = collider.GetComponent<IPlayerTriggerable>();
  126.             if (triggerable != null)
  127.             {
  128.  
  129.                 if (triggerable == currentlyInTrigger && !triggerable.triggerRepeatedly)
  130.                     break;
  131.  
  132.  
  133.                 triggerable.OnPlayerTriggered(this);
  134.                 currentlyInTrigger = triggerable;
  135.                 break;
  136.             }
  137.         }
  138.  
  139.         if (colliders.Count() == 0 || triggerable != currentlyInTrigger)
  140.             currentlyInTrigger = null;
  141.     }
  142.  
  143.     public object CaptureState()
  144.     {
  145.         var saveData = new PlayerSaveData()
  146.         {
  147.             pos = new float[] { transform.position.x, transform.position.y },
  148.             creatures = creatureparty.Creatures.Select(p => p.GetSaveData()).ToList()
  149.         };
  150.  
  151.         float[] pos = new float[] {transform.position.x, transform.position.y};
  152.         return saveData;
  153.     }
  154.  
  155.     public void RestoreState(object state)
  156.     {
  157.         var savedata = (PlayerSaveData)state;
  158.  
  159.         var pos = savedata.pos;
  160.         transform.position = new Vector3(pos[0], pos[1]);
  161.  
  162.       creatureparty.Creatures = savedata.creatures.Select(s => new Creature(s)).ToList();
  163.     }
  164.  
  165.     public void SetBuddy(BuddyController buddy)
  166.     {
  167.         buddyController = buddy;
  168.      
  169.     }
  170.  
  171.     public void OnSwitch(bool isSwitched)
  172.     {
  173.         playerActive = isSwitched;
  174.  
  175.        // controllerScript.enabled = false;
  176.        // inventoryScript.enabled = false;
  177.        // buddyScript.enabled= true;
  178.     }
  179.  
  180.     public void IsSeperated()
  181.     {
  182.         // turn off buddy script
  183.        buddyController.GetComponent<BuddyController>().enabled = false;
  184.  
  185.         swapText.text = "Stay";
  186.     }
  187.  
  188.     public void IsTogether()
  189.     {
  190.         // turn on buddy script
  191.         swapText.text = "Follow";
  192.         buddyController.GetComponent<BuddyController>().enabled = true;
  193.     }
  194.  
  195.     public Charecter Charecter => charecter;
  196.  
  197.     public string Name { get;  set; }
  198.  
  199.     public Transform thecurrentChar => this.transform;
  200. }
  201.  
  202.  
  203. [Serializable]
  204. public class PlayerSaveData
  205. {
  206.     public float[] pos;
  207.     public List<CreatureSaveData> creatures;
  208. }
  209.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement