Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class PlayerController : MonoBehaviour
- {
- public float Speed = 1.0f;
- public float MoveDistance = 2.0f;
- public enum MOVEMENTTYPE
- {
- MOVING,
- PUSHING,
- IDLE
- };
- public MOVEMENTTYPE MovementState;
- // public Transform transform;
- // Use this for initialization
- void Start()
- {
- MovementState = MOVEMENTTYPE.IDLE;
- }
- // Update is called once per frame
- void Update()
- {
- switch (MovementState)
- {
- case MOVEMENTTYPE.IDLE:
- HandleInput();
- break;
- case MOVEMENTTYPE.MOVING:
- break;
- case MOVEMENTTYPE.PUSHING:
- break;
- }
- }
- public void HandleInput()
- {
- Vector3 movement_vector = new Vector3(0f, 0f, 0f);
- if (MovementState == MOVEMENTTYPE.MOVING) return;
- if (Input.GetAxis("Horizontal") > 0f)
- {
- movement_vector = new Vector3(MoveDistance, 0f, 0f);
- }
- else if (Input.GetAxis("Horizontal") < 0f)
- {
- movement_vector = new Vector3(-MoveDistance, 0f, 0f);
- }
- else if (Input.GetAxis("Vertical") > 0f)
- {
- movement_vector = new Vector3(0f, 0f, MoveDistance);
- }
- else if (Input.GetAxis("Vertical") < 0f)
- {
- movement_vector = new Vector3(0f, 0f, -MoveDistance);
- }
- if (movement_vector.magnitude != MoveDistance) return;
- StartCoroutine(Move(FixToGrid(transform.position + movement_vector)));
- }
- private IEnumerator Move(Vector3 targetPos)
- {
- MovementState = MOVEMENTTYPE.MOVING;
- var dir = Vector3.Normalize(targetPos - transform.position);
- while(Vector3.Distance(transform.position,targetPos) > 0.1f)
- {
- transform.position += dir * Time.deltaTime * Speed;
- yield return null;
- }
- MovementState = MOVEMENTTYPE.IDLE;
- }
- public Vector3 FixToGrid(Vector3 _vector)
- {
- return new Vector3(
- Mathf.Round(_vector.x),
- Mathf.Round(_vector.y),
- Mathf.Round(_vector.z));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement