Files
BITFALL/Assets/Plugins/FImpossible Creations/Plugins - Level Design/PGG/Demos - PGG/Demos Assets/Scripts/SimpleWSADMovement.cs

113 lines
3.6 KiB
C#
Raw Normal View History

2023-11-30 00:23:23 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace FIMSpace.Generating
{
public class SimpleWSADMovement : MonoBehaviour
{
public static SimpleWSADMovement Instance;
private void Awake()
{
Instance = this;
}
public float Speed = 10f;
public GameObject Projectile;
public float ProjectileSpeed = 5f;
public bool FreezeGravity = true;
public bool JumpOnSpace = false;
void Start()
{
rig = GetComponent<Rigidbody>();
}
private Rigidbody rig;
private Vector3 translation;
private Quaternion tgtRotation;
private float sd_acc = 0f;
private float acceleration = 0f;
private float triggerJump = 0f;
void Update()
{
Vector3 moveDir = Vector3.zero;
if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)) moveDir += Vector3.forward;
if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) moveDir += Vector3.back;
if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) moveDir += Vector3.left;
if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) moveDir += Vector3.right;
if (JumpOnSpace)
{
if (Input.GetKeyDown(KeyCode.Space))
triggerJump = 3f;
}
else
{
if (Input.GetKey(KeyCode.Space) || Input.GetMouseButtonDown(0))
CreateProjectile();
}
if (moveDir != Vector3.zero)
{
moveDir.Normalize();
moveDir = Vector3.ProjectOnPlane(Camera.main.transform.TransformDirection(moveDir), Vector3.up).normalized;
acceleration = Mathf.SmoothDamp(acceleration, 1f, ref sd_acc, 0.1f, 10000f, Time.deltaTime);
tgtRotation = Quaternion.LookRotation(moveDir);
}
else
{
acceleration = Mathf.SmoothDamp(acceleration, 0f, ref sd_acc, 0.1f, 10000f, Time.deltaTime);
}
float speed = Speed;
if (Input.GetKey(KeyCode.LeftShift)) speed *= 2f;
translation = (moveDir * speed * acceleration);
}
void CreateProjectile()
{
if (Projectile == null) return;
GameObject pr = GameObject.Instantiate(Projectile);
Vector3 target = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Vector3.Distance(Camera.main.transform.position, transform.position)));
Vector3 dir = Vector3.ProjectOnPlane(target - transform.position, Vector3.up);
dir.Normalize();
pr.transform.position = transform.position + Vector3.up * 0.5f + dir * 0.65f;
pr.GetComponent<SimpleProjectile>().Velocity = dir * ProjectileSpeed;
}
private void FixedUpdate()
{
if (FreezeGravity)
rig.velocity = translation;
else
{
if ( triggerJump > 0f)
{
rig.velocity = new Vector3(rig.velocity.x, triggerJump, rig.velocity.z);
triggerJump = 0f;
}
rig.velocity = new Vector3(translation.x, rig.velocity.y, translation.z);
}
rig.maxAngularVelocity = 10f;
if (rig.velocity.sqrMagnitude > 0.05f)
rig.angularVelocity = FEngineering.QToAngularVelocity(rig.rotation, tgtRotation, true);
else
rig.angularVelocity = Vector3.zero;
}
}
}