This commit is contained in:
Gerard Gascón 2025-04-24 17:09:22 +02:00
commit 16da8e4dde
333 changed files with 109229 additions and 0 deletions

View file

@ -0,0 +1,34 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BigBulletController : MonoBehaviour{
public float speed;
// Update is called once per frame
void Update(){
transform.Translate(Vector2.right * speed * Time.deltaTime);
}
void OnTriggerEnter2D(Collider2D col){
if(col.gameObject.tag == "Enemy"){
ObjectPooler.Instance.SpawnFromPool("EnemyDeath", col.transform.position, Quaternion.identity);
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
}
if (col.gameObject.tag == "BigEnemy"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
}
if (col.gameObject.tag == "CircleEnemy"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
}
if (col.gameObject.tag == "RocketEnemy"){
ObjectPooler.Instance.SpawnFromPool("RocketEnemyDeath", col.transform.position, Quaternion.identity);
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
}
if(col.gameObject.tag == "Wall"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
gameObject.SetActive(false);
}
}
}

View file

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

View file

@ -0,0 +1,34 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletController : MonoBehaviour{
public float speed;
// Update is called once per frame
void Update(){
transform.Translate(Vector2.right * speed * Time.deltaTime);
}
void OnTriggerEnter2D(Collider2D col){
if(col.gameObject.tag == "Enemy"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
gameObject.SetActive(false);
}
if(col.gameObject.tag == "BigEnemy"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
}
if (col.gameObject.tag == "CircleEnemy"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
}
if (col.gameObject.tag == "RocketEnemy"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
gameObject.SetActive(false);
}
if (col.gameObject.tag == "Wall"){
ObjectPooler.Instance.SpawnFromPool("BulletImpact", transform.position, Quaternion.identity);
gameObject.SetActive(false);
}
}
}

View file

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

View file

@ -0,0 +1,161 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour{
[Header("Statistics")]
public float speed;
public float shootingSpeed;
public float invulnerableTime = 2f;
[HideInInspector]
public float defaultSpeed;
[HideInInspector]
public int gunSelected;
[Header("Guns")]
public GameObject[] gun;
GameController gameController;
Animator anim;
PlayerHealth health;
bool dead;
Rigidbody2D rb2d;
PlayerInput playerInput;
string currentControlScheme;
Vector2 aim;
Vector2 mov;
#region Input
public void PlayerMove(InputAction.CallbackContext state){
mov = state.ReadValue<Vector2>();
}
public void PlayerAim(InputAction.CallbackContext state){
aim = state.ReadValue<Vector2>();
}
#endregion
// Start is called before the first frame update
void Awake(){
playerInput = GetComponent<PlayerInput>();
gameController = FindObjectOfType<GameController>();
anim = GetComponent<Animator>();
health = GetComponent<PlayerHealth>();
defaultSpeed = speed;
rb2d = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update(){
RotateGun();
if(health.hp <= 0 && !dead){
Time.timeScale = 0;
ObjectPooler.Instance.SpawnFromPool("PlayerDeath", transform.position, Quaternion.identity);
Camera.main.GetComponent<Animator>().SetBool("GameOver", true);
dead = true;
AudioManager.instance.Stop("MainTheme");
gameObject.SetActive(false);
}
if(playerInput.currentControlScheme != currentControlScheme){
currentControlScheme = playerInput.currentControlScheme;
}
}
void RotateGun(){
if(currentControlScheme == "Gamepad"){
if(aim.magnitude > .1f){
Quaternion newRot = Quaternion.Euler(0f, 0f, Mathf.Atan2(aim.y, aim.x) * Mathf.Rad2Deg);
gun[gunSelected].transform.rotation = newRot;
}
}else{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(aim) - transform.position;
float rotZ = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
gun[gunSelected].transform.rotation = Quaternion.Euler(0f, 0f, rotZ);
}
}
void FixedUpdate(){
rb2d.MovePosition(rb2d.position + (Vector2.ClampMagnitude(mov, 1f) * speed * Time.deltaTime));
}
void OnTriggerEnter2D(Collider2D col){
if(col.CompareTag("Gun1")){
gunSelected = 0;
for (int i = 0; i < gun.Length; i++){
if (i == gunSelected){
gun[i].SetActive(true);
}else{
gun[i].SetActive(false);
}
}
}
if(col.CompareTag("Gun2")){
gunSelected = 1;
for (int i = 0; i < gun.Length; i++){
if (i == gunSelected){
gun[i].SetActive(true);
}else{
gun[i].SetActive(false);
}
}
}
if(col.CompareTag("Gun3")){
gunSelected = 2;
for (int i = 0; i < gun.Length; i++){
if (i == gunSelected){
gun[i].SetActive(true);
}else{
gun[i].SetActive(false);
}
}
}
}
bool damaged;
void OnCollisionEnter2D(Collision2D col){
if(col.gameObject.CompareTag("Enemy") && !damaged || col.gameObject.CompareTag("BigEnemy") && !damaged){
anim.SetBool("Damaged", true);
if(gameController.level == 2){
health.TakeDamage(6);
}else if(gameController.level == 3){
health.TakeDamage(7);
}else{
health.TakeDamage(5);
}
AudioManager.instance.Play("Hit");
Invoke(nameof(Damaged), invulnerableTime);
damaged = true;
}
if (col.gameObject.CompareTag("RocketEnemy")){
anim.SetBool("Damaged", true);
if (gameController.level == 2){
health.TakeDamage(10);
}else if (gameController.level == 3){
health.TakeDamage(13);
}else{
health.TakeDamage(7);
}
AudioManager.instance.Play("Hit");
Invoke(nameof(Damaged), invulnerableTime);
damaged = true;
}
}
void Damaged(){
anim.SetBool("Damaged", false);
damaged = false;
}
void OnCollisionStay2D(Collision2D col){
if(col.gameObject.CompareTag("CircleEnemy") && !damaged){
if(col.gameObject.GetComponent<CircleEnemyController>().hp == 2){
health.TakeDamage(0.1f);
}else if(col.gameObject.GetComponent<CircleEnemyController>().hp == 1){
health.TakeDamage(0.05f);
}
}
}
}

View file

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

View file

@ -0,0 +1,25 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerHealth : MonoBehaviour{
public int maxHp;
[HideInInspector]
public float hp;
public GameObject healthBar;
// Start is called before the first frame update
void Start(){
hp = maxHp;
}
public void TakeDamage(float damage){
hp -= damage;
if (hp > 0 && hp > damage){
healthBar.transform.localScale = new Vector2(hp / maxHp, healthBar.transform.localScale.y);
}else if (hp < damage){
healthBar.transform.localScale = new Vector2(0, healthBar.transform.localScale.y);
}
}
}

View file

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

View file

@ -0,0 +1,67 @@
//#define TEST_DEATH
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Shoot : MonoBehaviour{
public float[] timeBetweenShots;
public Transform[] firePoint;
public Transform secondaryFirePoint;
PlayerController player;
float shotCounter;
bool shooting;
// Start is called before the first frame update
void Start(){
player = GetComponent<PlayerController>();
}
public void PlayerShoot(InputAction.CallbackContext state){
if (state.performed){
shooting = true;
#if TEST_DEATH
FindObjectOfType<HealthBar>().hp = 0f;
#endif
}
if (state.canceled){
shooting = false;
}
}
// Update is called once per frame
void Update(){
if (shooting && player.gunSelected == 0){
shotCounter -= Time.deltaTime;
if (shotCounter <= 0){
shotCounter = timeBetweenShots[0];
AudioManager.instance.Play("Shoot");
ObjectPooler.Instance.SpawnFromPool("Bullet", firePoint[0].position, firePoint[0].rotation);
player.speed = player.shootingSpeed;
}
}else if(shooting && player.gunSelected == 1){
shotCounter -= Time.deltaTime;
if (shotCounter <= 0){
shotCounter = timeBetweenShots[1];
AudioManager.instance.Play("Shoot");
ObjectPooler.Instance.SpawnFromPool("BigBullet", firePoint[1].position, firePoint[1].rotation);
player.speed = player.shootingSpeed;
}
}else if(shooting && player.gunSelected == 2){
shotCounter -= Time.deltaTime;
if (shotCounter <= 0){
shotCounter = timeBetweenShots[2];
AudioManager.instance.Play("Shoot");
ObjectPooler.Instance.SpawnFromPool("Bullet", firePoint[2].position, firePoint[2].rotation);
ObjectPooler.Instance.SpawnFromPool("Bullet", secondaryFirePoint.position, secondaryFirePoint.rotation);
player.speed = player.shootingSpeed;
}
}else{
shotCounter = 0;
player.speed = player.defaultSpeed;
}
}
}

View file

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