This commit is contained in:
Gerard Gascón 2025-04-24 17:26:56 +02:00
commit e0a842f222
796 changed files with 361371 additions and 0 deletions

View file

@ -0,0 +1,41 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerDeath : MonoBehaviour
{
bool invincible = true;
private void Start()
{
StartCoroutine(vincible(0.3f));
}
IEnumerator vincible(float t)
{
yield return new WaitForSeconds(t);
invincible = false;
}
private void OnTriggerEnter(Collider other)
{
if (!invincible)
{
if (other.gameObject.layer == 6)
{
Kill();
}
}
}
public void Kill()
{
GetComponentInChildren<Animator>().SetBool("Die", true);
GameManager.Instance.player.GetComponent<PlayerManager>().Player1.enabled = false;
GameManager.Instance.player.GetComponent<PlayerManager>().Player2.enabled = false;
Instantiate(GameManager.Instance.player.GetComponent<PlayerManager>().impactParticles, transform.position, Quaternion.identity);
GameManager.Instance.StopGame();
GetComponent<PlayerMovement>().enabled = false;
Debug.Log("You lose");
GameManager.Instance.Lose();
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a033c899e7de82e439d272b5ebc82dfb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,91 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
public class PlayerManager : MonoBehaviour{
//public CinemachineVirtualCamera followCamera;
public ParticleSystem impactParticles;
PlayerMovement currentPlayer;
[Space]
[SerializeField] PlayerMovement player1;
[SerializeField] PlayerMovement player2;
public PlayerMovement Player1
{
get
{
return player1;
}
}
public PlayerMovement Player2
{
get
{
return player2;
}
}
[Space]
[SerializeField, Range(0f, 1f)] float defaultTime = 1f;
[SerializeField, Range(0f, 1f)] float slowTime = .1f;
[HideInInspector] public PlayerMovement playerMoving;
// Start is called before the first frame update
public void Init(){
currentPlayer = player1;
//followCamera.Follow = player1.transform;
}
// Update is called once per frame
void Update(){
}
private void ActivityHandle()
{
//if (Input.GetKeyDown(KeyCode.Space))
//{
// if (currentPlayer == player1)
// {
// //followCamera.Follow = player2.transform;
// currentPlayer.active = false;
// currentPlayer = player2;
// currentPlayer.active = true;
// }
// else
// {
// //followCamera.Follow = player1.transform;
// currentPlayer.active = false;
// currentPlayer = player1;
// currentPlayer.active = true;
// }
//}
}
public void Move(PlayerMovement player){
Time.timeScale = defaultTime;
playerMoving = player;
}
public void Stop(){
Time.timeScale = slowTime;
playerMoving = null;
}
public GameObject getClosestPlayer(Vector3 position)
{
if (Vector3.Magnitude(position - player1.transform.position) < Vector3.Magnitude(position - player2.transform.position))
return player1.gameObject;
return player2.gameObject;
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e213d3a02631a474f8046be5a688d1f8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,139 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MyTypes.MyPawn{
public bool player1;
[Space]
[SerializeField] PlayerManager playerManager;
Vector2 velocity;
bool moving;
Vector2 positionToGo;
Vector2 directionFacing = Vector2.up;
float rotationVelocity;
// Start is called before the first frame update
void Awake(){
positionToGo = new Vector2(transform.position.x, transform.position.z);
}
// Update is called once per frame
void Update(){
if (!player1)
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
positionToGo += Vector2.up;
directionFacing = Vector2.up;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._UP);
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
positionToGo += Vector2.down;
directionFacing = Vector2.down;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._DOWN);
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
positionToGo += Vector2.left;
directionFacing = Vector2.left;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._LEFT);
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
positionToGo += Vector2.right;
directionFacing = Vector2.right;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._RIGHT);
}
if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.RightArrow))
AudioManager.instance.PlayOneShot("Pez");
}
else
{
if (Input.GetKeyDown(KeyCode.W))
{
positionToGo += Vector2.up;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._UP);
directionFacing = Vector2.up;
}
else if (Input.GetKeyDown(KeyCode.S))
{
positionToGo += Vector2.down;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._DOWN);
directionFacing = Vector2.down;
}
else if (Input.GetKeyDown(KeyCode.A))
{
positionToGo += Vector2.left;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._LEFT);
directionFacing = Vector2.left;
}
else if (Input.GetKeyDown(KeyCode.D))
{
positionToGo += Vector2.right;
GameManager.Instance.movePawn(this, MyTypes.MyDirection._RIGHT);
directionFacing = Vector2.right;
}
if(Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.W))
AudioManager.instance.PlayOneShot("Pez");
}
//Vector2 currentPosition = Vector2.SmoothDamp(new Vector2(transform.position.x, transform.position.z), positionToGo, ref velocity, .1f, Mathf.Infinity, Time.unscaledDeltaTime);
//transform.position = new Vector3(currentPosition.x, transform.position.y, currentPosition.y);
float targetAngle = Mathf.Atan2(directionFacing.x, directionFacing.y) * Mathf.Rad2Deg;
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref rotationVelocity, .1f, Mathf.Infinity, Time.unscaledDeltaTime);
transform.rotation = Quaternion.Euler(0f, angle, 0f);
}
private void oldMovement()
{
if (playerManager.playerMoving == null || playerManager.playerMoving == this)
{
if (!moving)
{
Vector2 movement = Vector2.zero;
if (Input.GetButtonDown("Up"))
movement = Vector2.up;
else if (Input.GetButtonDown("Down"))
movement = Vector2.down;
else if (Input.GetButtonDown("Left"))
movement = Vector2.left;
else if (Input.GetButtonDown("Right"))
movement = Vector2.right;
if (movement.sqrMagnitude > .1f)
{
moving = true;
directionFacing = movement;
playerManager.Move(this);
}
positionToGo = new Vector2(positionToGo.x + movement.x, positionToGo.y + movement.y);
}
else
{
Vector2 currentPosition = Vector2.SmoothDamp(new Vector2(transform.position.x, transform.position.z), positionToGo, ref velocity, .1f, Mathf.Infinity, Time.unscaledDeltaTime);
transform.position = new Vector3(currentPosition.x, transform.position.y, currentPosition.y);
if (Vector2.Distance(currentPosition, positionToGo) < .05f)
{
transform.position = new Vector3(positionToGo.x, transform.position.y, positionToGo.y);
moving = false;
playerManager.Stop();
}
}
}
float targetAngle = Mathf.Atan2(directionFacing.x, directionFacing.y) * Mathf.Rad2Deg;
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref rotationVelocity, .1f, Mathf.Infinity, Time.unscaledDeltaTime);
transform.rotation = Quaternion.Euler(0f, angle, 0f);
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 645bc137feec1104a9aa937afda9ba5e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,50 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerRope : MonoBehaviour{
[SerializeField] Transform player1, player2;
LineRenderer rope;
[SerializeField] LayerMask enemyMask = -1;
[SerializeField] LayerMask spikesMask = -1;
[SerializeField] PlayerManager playerManager;
// Start is called before the first frame update
void Awake(){
rope = GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update(){
float toleranceThreshold = .5f;
Vector3[] points = new Vector3[2];
points[0] = player1.position;
points[1] = player2.position;
rope.SetPositions(points);
Vector3 dir = (player2.position - player1.position).normalized;
Physics.Raycast(player1.position+dir*toleranceThreshold, dir, out RaycastHit enemyHit, Vector3.Distance(player1.position, player2.position)-toleranceThreshold*2, enemyMask);
if (enemyHit.collider){
ScreenShake.Shake(1f, .25f);
AudioManager.instance.PlayOneShot("KillPenguin");
Instantiate(playerManager.impactParticles, enemyHit.collider.transform.position, Quaternion.identity);
enemyHit.collider.gameObject.GetComponent<EnemyBehavior>().Kill();
}
Physics.Raycast(player1.position, dir, out RaycastHit spikeHit, Vector3.Distance(player1.position, player2.position), spikesMask);
if (spikeHit.collider && spikeHit.collider.gameObject.GetComponent<SpikeBehavior>().Harming){
AudioManager.instance.PlayOneShot("Cuerda");
ScreenShake.Shake(2f, .5f);
GameManager.Instance.player.GetComponent<PlayerManager>().Player1.gameObject.GetComponent<PlayerDeath>().Kill();
GameManager.Instance.player.GetComponent<PlayerManager>().Player2.gameObject.GetComponent<PlayerDeath>().Kill();
Destroy(gameObject);
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5a0c81a25f3791a43b822ff75d775fd4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: