114 lines
3.0 KiB
C#
Raw Permalink Normal View History

using UnityEngine;
2025-01-20 16:00:53 +01:00
using UnityEngine.SceneManagement;
2025-02-17 12:27:09 +01:00
using System.IO;
2025-02-17 12:27:09 +01:00
public class Player : MonoBehaviour
{
public Rigidbody2D rigidBody;
2025-01-20 16:00:53 +01:00
public GameObject playerObject;
2024-12-16 16:19:59 +01:00
public ParticleSystem particle;
2025-02-17 12:27:09 +01:00
public LevelsLoader levelsLoader;
2025-01-20 16:00:53 +01:00
public bool isColliding = true;
2025-01-06 16:11:40 +01:00
public AudioSource audioSource;
2025-02-03 16:30:19 +01:00
private bool hasStarted = false;
private bool canJump = true;
2025-01-06 16:11:40 +01:00
public void Start()
{
2025-02-17 12:27:09 +01:00
levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent<LevelsLoader>();
levelsLoader.IncreaseTotalAttempts();
audioSource.clip = Resources.Load<AudioClip>(Path.Combine("Musics", levelsLoader.levelCurrent.musicName));
audioSource.Play();
2024-12-16 16:19:59 +01:00
var mainModule = particle.main;
mainModule.simulationSpace = ParticleSystemSimulationSpace.World;
2024-12-16 16:19:59 +01:00
particle.transform.parent = null;
2025-02-03 16:30:19 +01:00
Invoke(nameof(EnableInput), 0.1f);
}
private void EnableInput()
{
hasStarted = true;
}
public void Update()
{
2025-02-03 16:30:19 +01:00
rigidBody.linearVelocity = new Vector2(8.6f, rigidBody.linearVelocity.y);
2025-02-03 16:30:19 +01:00
if (hasStarted && isColliding && Input.GetKey(KeyCode.Space) && canJump)
{
2025-02-03 16:30:19 +01:00
Jump();
}
if (!IsJumping())
{
AlignRotation();
2024-12-16 16:19:59 +01:00
particle.gameObject.SetActive(true);
}
else
{
2024-12-16 16:19:59 +01:00
particle.gameObject.SetActive(false);
transform.Rotate(Vector3.back * 360 * Time.deltaTime);
}
UpdateParticlePositionAndRotation();
UpdateParticleSystemSpeed();
}
private void Jump()
{
rigidBody.linearVelocity = new Vector2(rigidBody.linearVelocity.x, 0);
rigidBody.AddForce(Vector2.up * 26.6581f, ForceMode2D.Impulse);
2025-02-17 12:27:09 +01:00
levelsLoader.IncreaseTotalJumps();
}
private bool IsJumping()
{
2025-01-20 16:00:53 +01:00
return !isColliding;
}
private void AlignRotation()
{
Vector3 rotation = transform.rotation.eulerAngles;
rotation.z = Mathf.Round(rotation.z / 90) * 90;
transform.rotation = Quaternion.Euler(rotation);
}
private void UpdateParticlePositionAndRotation()
{
2025-01-06 16:11:40 +01:00
particle.transform.position = transform.position + new Vector3(-0.19f, -0.64f, -10);
2024-12-16 16:19:59 +01:00
particle.transform.rotation = Quaternion.Euler(0, 0, 150.464f);
}
private void UpdateParticleSystemSpeed()
{
2024-12-16 16:19:59 +01:00
var velocityOverLifetime = particle.velocityOverLifetime;
velocityOverLifetime.x = rigidBody.linearVelocity.x;
}
2025-01-20 16:00:53 +01:00
public void OnCollisionEnter2D(Collision2D collision)
{
isColliding = true;
2025-02-03 16:30:19 +01:00
canJump = true;
2025-01-20 16:00:53 +01:00
2025-02-03 16:30:19 +01:00
if (collision.gameObject.CompareTag("Kill"))
2025-01-20 16:00:53 +01:00
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
2025-01-20 17:02:37 +01:00
2025-02-03 16:30:19 +01:00
if (collision.gameObject.CompareTag("Win"))
2025-01-20 17:02:37 +01:00
{
SceneManager.LoadScene("HomeScene");
}
2025-01-20 16:00:53 +01:00
}
public void OnCollisionExit2D(Collision2D collision)
{
isColliding = false;
}
}