|
|
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Random = System.Random;
-
- public class PlayerController : MonoBehaviour
- {
- public float walkSpeed;
- public GameObject model;
-
- public float speedMulitplier;
- private float randomizer;
- private float directionRandmoizer;
-
- private Vector2 receivedInput;
- private float moveDelta;
- private float lastMoveTime;
- // Start is called before the first frame update
- void Start()
- {
- randomizer = UnityEngine.Random.Range(0,10);
- }
-
- public void SetMovement(Vector2 input)
- {
- receivedInput = input;
- }
-
- public void UpdatePosition()
- {
- moveDelta = Time.time - lastMoveTime;
- lastMoveTime = Time.time;
-
-
- if (receivedInput.magnitude == 0)
- return;
-
- float HorseX, HorseZ;
- HorseZ = receivedInput.y;
- HorseX = receivedInput.x;
-
- if (Mathf.Abs(HorseZ) == Mathf.Min(Mathf.Abs(HorseZ), Mathf.Abs(HorseX)))
- HorseZ += directionRandmoizer;
- else
- HorseX += directionRandmoizer;
-
- float rotateTo = RotateObject(HorseX, HorseZ);
-
- HorseZ *= walkSpeed * speedMulitplier * moveDelta;
- HorseX *= walkSpeed * speedMulitplier * moveDelta;
-
-
- transform.Translate(HorseX, 0, HorseZ);
-
- //Vector3 dir = Quaternion.Euler(-90, rotateTo, 0) * Vector3.forward;
- //model.transform.forward = dir;
- //LeanTween.rotateY(model, rotateTo, 0.1f);
-
- }
-
- public float RotateObject(float xInput, float zInput)
- {
- float to = model.transform.rotation.eulerAngles.y;
- //Debug.Log(to);
- if (receivedInput.x != 0 || receivedInput.y != 0)
- {
- if (zInput > 0 && xInput == 0)
- to = 0;
- else if (zInput < 0 && xInput == 0)
- to = 180;
- else if (zInput == 0 && xInput > 0)
- to = 90;
- else if (zInput == 0 && xInput < 0)
- to = 270;
- else if (zInput > 0 && xInput > 0)
- to = 45;
- else if (zInput < 0 && xInput > 0)
- to = 135;
- else if (zInput < 0 && xInput < 0)
- to = 225;
- else if (zInput > 0 && xInput < 0)
- to = 315;
- }
-
- return to;
- }
-
- public void MoveObject(float wait)
- {
- StartCoroutine(RandomWait(wait));
- }
-
- public IEnumerator RandomWait(float wait)
- {
- yield return new WaitForSeconds(UnityEngine.Random.Range(0, wait * randomizer/10));
-
- Vector3 rotateDir = new Vector3(90 * Math.Sign(receivedInput.y), 0, -90 * Math.Sign(receivedInput.x));
- model.transform.Rotate(rotateDir, Space.World);
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- speedMulitplier = (Mathf.Sin(Time.time * UnityEngine.Random.Range(0.9f,1.1f) + randomizer) + 2);
- directionRandmoizer = Mathf.Cos(Time.time + randomizer / 2) * 0.3f;
- UpdatePosition();
- }
- }
|