reconfigured collision
also made some adjustments to player behavior and controller
This commit is contained in:
@@ -9,7 +9,7 @@ public class Launch : MonoBehaviour {
|
||||
[SerializeField] private float horizSpeed;
|
||||
[SerializeField] private float vertSpeed;
|
||||
|
||||
public void ThrowTambourine(int facing) {
|
||||
public void ThrowTambourine(float facing) {
|
||||
GameObject newTambourine = Instantiate(tambourine, this.gameObject.transform.position, this.gameObject.transform.rotation);
|
||||
// multiply horizSpeed by facing if not using moving launch point
|
||||
newTambourine.GetComponent<Rigidbody2D>().AddForce(new Vector2(horizSpeed * facing, vertSpeed), ForceMode2D.Impulse);
|
||||
|
||||
@@ -22,14 +22,16 @@ public class PlayerBehavior : MonoBehaviour
|
||||
[Header("Tambourine:")]
|
||||
[SerializeField] private Launch launcher;
|
||||
[HideInInspector] public bool hasTambourine = true;
|
||||
GameObject tambourine;
|
||||
|
||||
[Header("Grappling:")]
|
||||
[SerializeField] public Tutorial_GrapplingGun grapplingGun;
|
||||
[SerializeField] public Tutorial_GrapplingRope grapplingRope;
|
||||
private GameObject grappleSurface;
|
||||
|
||||
[Header("State Control:")]
|
||||
private StateController stateController;
|
||||
[Header("Controllers:")]
|
||||
[SerializeField] private PlayerMovement playerController;
|
||||
[SerializeField] private StateController stateController;
|
||||
|
||||
|
||||
void Start()
|
||||
@@ -42,59 +44,24 @@ public class PlayerBehavior : MonoBehaviour
|
||||
void Update()
|
||||
{
|
||||
|
||||
// jump
|
||||
// if (Input.GetKeyDown(KeyCode.Space)) {
|
||||
if (playerInput.actions["Jump"].WasPressedThisFrame() && IsGrounded())
|
||||
{
|
||||
_rb.AddForce(Vector2.up * jumpSpeed, ForceMode2D.Impulse);
|
||||
}
|
||||
|
||||
// throw tambourine
|
||||
// if (Input.GetKeyDown(KeyCode.K)) {
|
||||
if (playerInput.actions["ThrowTambourine"].WasPressedThisFrame())
|
||||
{
|
||||
if (hasTambourine && !grapplingRope.isGrappling)
|
||||
{
|
||||
launcher.ThrowTambourine(forward);
|
||||
hasTambourine = false;
|
||||
}
|
||||
ThrowTambourine();
|
||||
}
|
||||
|
||||
// grapple
|
||||
GameObject tambourine = GameObject.FindGameObjectWithTag("tambourine");
|
||||
tambourine = GameObject.FindGameObjectWithTag("tambourine");
|
||||
// if (Input.GetKeyDown(KeyCode.L)) {
|
||||
if (playerInput.actions["Grapple"].WasPressedThisFrame())
|
||||
{
|
||||
if (tambourine != null)
|
||||
{ // grapple to tambourine
|
||||
if (!grapplingRope.isGrappling && tambourine.GetComponent<TambourineBehavior>().pinned)
|
||||
{
|
||||
grapplingGun.GrappleToTambourine(tambourine);
|
||||
grapplingRope.isGrappling = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (grappleSurface != null)
|
||||
{
|
||||
grapplingGun.GrappleToSurface(grappleSurface.transform.position);
|
||||
grapplingRope.isGrappling = true;
|
||||
}
|
||||
}
|
||||
AttemptGrapple();
|
||||
}
|
||||
// if (Input.GetKeyUp(KeyCode.L)) {
|
||||
if (playerInput.actions["Grapple"].WasReleasedThisFrame())
|
||||
{
|
||||
if (tambourine != null && grapplingRope.isGrappling)
|
||||
{
|
||||
tambourine.GetComponent<TambourineBehavior>().DestroySelf();
|
||||
}
|
||||
grapplingGun.ReleaseGrapple();
|
||||
}
|
||||
// if (Input.GetKey(KeyCode.L)) {
|
||||
if (playerInput.actions["Grapple"].IsPressed())
|
||||
{
|
||||
Debug.DrawRay(transform.position, new Vector2(0.500f * forward, 0.866f), Color.green);
|
||||
LetGoOfGrapple();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,52 +78,38 @@ public class PlayerBehavior : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
// void FixedUpdate() {
|
||||
// if (grapplingRope.isGrappling && _hInput != 0 && !IsGrounded()) {
|
||||
// // print("grappling force");
|
||||
// _rb.AddForce(new Vector2(_hInput * (airSpeed / 3), 0));
|
||||
// } else if (_hInput != 0 && !IsGrounded()) {
|
||||
// _rb.AddForce(new Vector2(_hInput * airSpeed, 0));
|
||||
// } else if (_hInput != 0) {
|
||||
// // print("normal movement");
|
||||
// _rb.AddForce(new Vector2(_hInput * moveSpeed, 0));
|
||||
// // _rb.velocity = new Vector2(_hInput * moveSpeed, _rb.velocity.y);
|
||||
// }
|
||||
// }
|
||||
void ThrowTambourine() {
|
||||
if (hasTambourine && !grapplingRope.isGrappling)
|
||||
{
|
||||
launcher.ThrowTambourine(forward);
|
||||
hasTambourine = false;
|
||||
}
|
||||
}
|
||||
|
||||
void OnTriggerEnter2D(Collider2D col)
|
||||
{
|
||||
if (col.tag == "grappleSurface")
|
||||
{
|
||||
grappleSurface = col.gameObject;
|
||||
void AttemptGrapple() {
|
||||
if (tambourine != null)
|
||||
{ // grapple to tambourine
|
||||
if (!grapplingRope.isGrappling && tambourine.GetComponent<TambourineBehavior>().pinned)
|
||||
{
|
||||
grapplingGun.GrappleToTambourine(tambourine);
|
||||
grapplingRope.isGrappling = true;
|
||||
}
|
||||
}
|
||||
else if (col.tag == "instaDeath")
|
||||
else
|
||||
{
|
||||
stateController.ToggleDeathCanvas();
|
||||
Destroy(this.gameObject);
|
||||
if (grappleSurface != null)
|
||||
{
|
||||
grapplingGun.GrappleToSurface(grappleSurface.transform.position);
|
||||
grapplingRope.isGrappling = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnTriggerExit2D(Collider2D col)
|
||||
{
|
||||
if (col.tag == "grappleSurface")
|
||||
{
|
||||
grappleSurface = null;
|
||||
}
|
||||
}
|
||||
|
||||
bool IsGrounded()
|
||||
{
|
||||
if (Physics2D.BoxCast(transform.position, boxSize, 0, -transform.up, maxDistanceFromGround, groundLayer))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.color = Color.red;
|
||||
Gizmos.DrawCube(transform.position - transform.up * maxDistanceFromGround, boxSize);
|
||||
void LetGoOfGrapple() {
|
||||
if (tambourine != null && grapplingRope.isGrappling)
|
||||
{
|
||||
tambourine.GetComponent<TambourineBehavior>().DestroySelf();
|
||||
}
|
||||
grapplingGun.ReleaseGrapple();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,11 @@ public class PlayerMovement : MonoBehaviour
|
||||
|
||||
public float maxRunSpeed;
|
||||
public float runAcceleration;
|
||||
public float snappiness = 1;
|
||||
public float jumpSpeed;
|
||||
[Range(0,1)] public float airSpeedMultiplier;
|
||||
private bool onGround = false;
|
||||
private float forward = 1;
|
||||
|
||||
float hangTimeThreshold = 0.1f;
|
||||
float hangTimeAccel = 0;
|
||||
@@ -15,6 +19,22 @@ public class PlayerMovement : MonoBehaviour
|
||||
|
||||
private Vector2 movement = Vector2.zero;
|
||||
|
||||
public LayerMask groundLayer;
|
||||
public Vector2 boxSize;
|
||||
public float maxDistanceFromGround;
|
||||
|
||||
[Header("Grappling:")]
|
||||
[SerializeField] public Tutorial_GrapplingGun grapplingGun;
|
||||
[SerializeField] public Tutorial_GrapplingRope grapplingRope;
|
||||
private GameObject grappleSurface;
|
||||
|
||||
[Header("Tambourine:")]
|
||||
[SerializeField] private Launch launcher;
|
||||
[HideInInspector] public bool hasTambourine = true;
|
||||
|
||||
[Header("State Control:")]
|
||||
[SerializeField] private StateController stateController;
|
||||
|
||||
void OnValidate()
|
||||
{
|
||||
this.runAcceleration = Mathf.Clamp(runAcceleration, 0.1f, this.maxRunSpeed);
|
||||
@@ -23,6 +43,7 @@ public class PlayerMovement : MonoBehaviour
|
||||
void Start()
|
||||
{
|
||||
this.rb = this.GetComponent<Rigidbody2D>();
|
||||
stateController = GameObject.Find("StateController").GetComponent<StateController>();
|
||||
}
|
||||
|
||||
void OnMove(InputValue value)
|
||||
@@ -31,6 +52,12 @@ public class PlayerMovement : MonoBehaviour
|
||||
//Debug.Log(this.movement);
|
||||
}
|
||||
|
||||
void OnJump() {
|
||||
if (IsGrounded()) {
|
||||
rb.AddForce(Vector2.up * jumpSpeed, ForceMode2D.Impulse);
|
||||
}
|
||||
}
|
||||
|
||||
void FixedUpdate()
|
||||
{
|
||||
Run(1);
|
||||
@@ -46,29 +73,76 @@ public class PlayerMovement : MonoBehaviour
|
||||
float targetSpeed = this.movement.x * this.maxRunSpeed;
|
||||
|
||||
float speedDiff = targetSpeed - this.rb.velocity.x;
|
||||
forward = Mathf.Sign(speedDiff);
|
||||
|
||||
float accel = 0.5f;
|
||||
float accel = AccelerationRate() * snappiness;
|
||||
|
||||
float accelRate = (Mathf.Abs(targetSpeed) > 0.1) ? accel : -accel;
|
||||
|
||||
float velPower = 1.0f;
|
||||
|
||||
float move = Mathf.Pow(Mathf.Abs(speedDiff) * accelRate, velPower) * Mathf.Sign(speedDiff);
|
||||
float move = Mathf.Pow(Mathf.Abs(speedDiff) * accelRate, velPower) * forward;
|
||||
|
||||
this.rb.AddForce(move * Vector2.right, ForceMode2D.Force);
|
||||
this.onGround = IsGrounded();
|
||||
|
||||
float frictionAmount = 0.5f;
|
||||
|
||||
this.onGround = true;
|
||||
// accelerate
|
||||
if (onGround && (Mathf.Abs(this.movement.x) > 0.1f)) {
|
||||
this.rb.AddForce(move * Vector2.right, ForceMode2D.Force);
|
||||
} else if (!onGround && (Mathf.Abs(this.movement.x) > 0.1f)) {
|
||||
this.rb.AddForce(move * Vector2.right * airSpeedMultiplier, ForceMode2D.Force);
|
||||
}
|
||||
|
||||
if (this.onGround && (Mathf.Abs(this.movement.x) < 0.1f))
|
||||
// decelerate until stopped
|
||||
if (Mathf.Abs(this.movement.x) < 0.1f)
|
||||
{
|
||||
float amount = Mathf.Min(
|
||||
Mathf.Abs(this.rb.velocity.x),
|
||||
Mathf.Abs(frictionAmount)
|
||||
);
|
||||
amount *= Mathf.Sign(this.rb.velocity.x);
|
||||
this.rb.AddForce(-amount * Vector2.right, ForceMode2D.Impulse);
|
||||
if (Mathf.Abs(rb.velocity.x) > 0.1f) {
|
||||
float amount = Mathf.Min(
|
||||
Mathf.Abs(this.rb.velocity.x),
|
||||
Mathf.Abs(frictionAmount)
|
||||
);
|
||||
amount *= Mathf.Sign(this.rb.velocity.x);
|
||||
this.rb.AddForce(-amount * Vector2.right * snappiness, ForceMode2D.Impulse);
|
||||
} else {
|
||||
this.rb.velocity = new Vector2(0, rb.velocity.y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnTriggerEnter2D(Collider2D col)
|
||||
{
|
||||
if (col.tag == "grappleSurface")
|
||||
{
|
||||
grappleSurface = col.gameObject;
|
||||
}
|
||||
else if (col.tag == "instaDeath")
|
||||
{
|
||||
this.stateController.SetDeathCanvasActive(true);
|
||||
Destroy(this.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
void OnTriggerExit2D(Collider2D col)
|
||||
{
|
||||
if (col.tag == "grappleSurface")
|
||||
{
|
||||
grappleSurface = null;
|
||||
}
|
||||
}
|
||||
|
||||
bool IsGrounded()
|
||||
{
|
||||
if (Physics2D.BoxCast(transform.position, boxSize, 0, -transform.up, maxDistanceFromGround, groundLayer))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.color = Color.red;
|
||||
Gizmos.DrawCube(transform.position - transform.up * maxDistanceFromGround, boxSize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,11 +14,11 @@ public class StateController : MonoBehaviour {
|
||||
}
|
||||
|
||||
public void RespawnPlayer() {
|
||||
ToggleDeathCanvas();
|
||||
SetDeathCanvasActive(false);
|
||||
Instantiate(player, spawnPoint.transform.position, spawnPoint.transform.rotation);
|
||||
}
|
||||
|
||||
public void ToggleDeathCanvas() {
|
||||
deathCanvas.SetActive(!deathCanvas.activeSelf);
|
||||
public void SetDeathCanvasActive(bool activeState) {
|
||||
deathCanvas.SetActive(activeState);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user