This commit is contained in:
Gerard Gascón 2025-04-24 17:02:43 +02:00
commit fca6784fe7
571 changed files with 84105 additions and 0 deletions

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: aebfa4df6398159479244a82e7d43f98
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,206 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AttackManager : MonoBehaviour{
[SerializeField] HandManager hand = default;
public float maxHeight, minHeight;
public float selectSmoothTime = .1f;
[System.Serializable] public class Fingers{
public bool finger1;
public bool finger2;
public bool finger3;
public bool finger4;
public bool finger5;
}
public Fingers[] minimumForPaper = default;
public Fingers[] minimumForScisors = default;
[HideInInspector] public Fingers selectedScisor;
[HideInInspector] public Fingers selectedPaper;
public bool CanScisorAttack(){
bool temp = true;
foreach(Fingers f in minimumForScisors){
temp = true;
for (int i = 0; i < 5; i++){
switch (i){
case 0:
if (!hand.finger1 && f.finger1)
temp = false;
break;
case 1:
if (!hand.finger2 && f.finger2)
temp = false;
break;
case 2:
if (!hand.finger3 && f.finger3)
temp = false;
break;
case 3:
if (!hand.finger4 && f.finger4)
temp = false;
break;
case 4:
if (!hand.finger5 && f.finger5)
temp = false;
break;
}
}
if (temp){
selectedScisor = f;
break;
}
}
return temp;
}
public bool CanPaperAttack(){
bool temp = true;
foreach (Fingers f in minimumForPaper){
temp = true;
for (int i = 0; i < 5; i++){
switch (i){
case 0:
if (!hand.finger1 && f.finger1)
temp = false;
break;
case 1:
if (!hand.finger2 && f.finger2)
temp = false;
break;
case 2:
if (!hand.finger3 && f.finger3)
temp = false;
break;
case 3:
if (!hand.finger4 && f.finger4)
temp = false;
break;
case 4:
if (!hand.finger5 && f.finger5)
temp = false;
break;
}
}
if (temp){
selectedPaper = f;
break;
}
}
return temp;
}
public bool AttackingWithMeat(bool scisor, bool paper){
if (scisor){
for (int i = 0; i < 5; i++){
switch (i){
case 0:
if (selectedScisor.finger1 && hand.finger1Type == HandManager.FingerTypes.Meat)
return true;
break;
case 1:
if (selectedScisor.finger2 && hand.finger2Type == HandManager.FingerTypes.Meat)
return true;
break;
case 2:
if (selectedScisor.finger3 && hand.finger3Type == HandManager.FingerTypes.Meat)
return true;
break;
case 3:
if (selectedScisor.finger4 && hand.finger4Type == HandManager.FingerTypes.Meat)
return true;
break;
case 4:
if (selectedScisor.finger5 && hand.finger5Type == HandManager.FingerTypes.Meat)
return true;
break;
}
}
}else if (paper){
for (int i = 0; i < 5; i++){
switch (i){
case 0:
if (selectedPaper.finger1 && hand.finger1Type == HandManager.FingerTypes.Meat)
return true;
break;
case 1:
if (selectedPaper.finger2 && hand.finger2Type == HandManager.FingerTypes.Meat)
return true;
break;
case 2:
if (selectedPaper.finger3 && hand.finger3Type == HandManager.FingerTypes.Meat)
return true;
break;
case 3:
if (selectedPaper.finger4 && hand.finger4Type == HandManager.FingerTypes.Meat)
return true;
break;
case 4:
if (selectedPaper.finger5 && hand.finger5Type == HandManager.FingerTypes.Meat)
return true;
break;
}
}
}
return false;
}
public bool AttackingWithWood(bool scisor, bool paper){
if (scisor){
for (int i = 0; i < 5; i++){
switch (i){
case 0:
if (selectedScisor.finger1 && hand.finger1Type == HandManager.FingerTypes.Wood)
return true;
break;
case 1:
if (selectedScisor.finger2 && hand.finger2Type == HandManager.FingerTypes.Wood)
return true;
break;
case 2:
if (selectedScisor.finger3 && hand.finger3Type == HandManager.FingerTypes.Wood)
return true;
break;
case 3:
if (selectedScisor.finger4 && hand.finger4Type == HandManager.FingerTypes.Wood)
return true;
break;
case 4:
if (selectedScisor.finger5 && hand.finger5Type == HandManager.FingerTypes.Wood)
return true;
break;
}
}
}else if (paper){
for (int i = 0; i < 5; i++){
switch (i){
case 0:
if (selectedPaper.finger1 && hand.finger1Type == HandManager.FingerTypes.Wood)
return true;
break;
case 1:
if (selectedPaper.finger2 && hand.finger2Type == HandManager.FingerTypes.Wood)
return true;
break;
case 2:
if (selectedPaper.finger3 && hand.finger3Type == HandManager.FingerTypes.Wood)
return true;
break;
case 3:
if (selectedPaper.finger4 && hand.finger4Type == HandManager.FingerTypes.Wood)
return true;
break;
case 4:
if (selectedPaper.finger5 && hand.finger5Type == HandManager.FingerTypes.Wood)
return true;
break;
}
}
}
return false;
}
}

View file

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

View file

@ -0,0 +1,89 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class AttackSelectorUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler{
EnemyController enemy;
[System.Serializable] enum AttackType { Rock, Paper, Scisors}
[SerializeField] AttackType attackType = default;
AttackManager attack;
bool selected;
RectTransform rect;
float velocity;
[SerializeField] PlayerAttack playerAttack = default;
void Awake(){
attack = GetComponentInParent<AttackManager>();
rect = GetComponent<RectTransform>();
}
public void OnPointerEnter(PointerEventData eventData){
selected = true;
switch (CombatManager.instance.enemyType){
case CombatManager.EnemyType.Bear:
enemy = CombatManager.instance.bear;
break;
case CombatManager.EnemyType.Driada:
enemy = CombatManager.instance.driada;
break;
case CombatManager.EnemyType.Loca:
enemy = CombatManager.instance.loca;
break;
case CombatManager.EnemyType.Boss:
enemy = CombatManager.instance.boss;
break;
}
}
public void OnPointerExit(PointerEventData eventData){
selected = false;
}
// Update is called once per frame
void Update(){
if (selected){
if (attackType == AttackType.Paper){
if (attack.CanPaperAttack()){
rect.anchoredPosition = new Vector2(rect.anchoredPosition.x, Mathf.SmoothDamp(rect.anchoredPosition.y, attack.maxHeight, ref velocity, attack.selectSmoothTime));
if (Input.GetMouseButtonUp(0)){
playerAttack.open1 = attack.selectedPaper.finger1;
playerAttack.open2 = attack.selectedPaper.finger2;
playerAttack.open3 = attack.selectedPaper.finger3;
playerAttack.open4 = attack.selectedPaper.finger4;
playerAttack.open5 = attack.selectedPaper.finger5;
enemy.Attack(attack.AttackingWithMeat(false, true), attack.AttackingWithWood(false, true), 2);
playerAttack.Attack();
}
}
}else if (attackType == AttackType.Scisors){
if (attack.CanScisorAttack()){
rect.anchoredPosition = new Vector2(rect.anchoredPosition.x, Mathf.SmoothDamp(rect.anchoredPosition.y, attack.maxHeight, ref velocity, attack.selectSmoothTime));
if (Input.GetMouseButtonUp(0)){
playerAttack.open1 = attack.selectedScisor.finger1;
playerAttack.open2 = attack.selectedScisor.finger2;
playerAttack.open3 = attack.selectedScisor.finger3;
playerAttack.open4 = attack.selectedScisor.finger4;
playerAttack.open5 = attack.selectedScisor.finger5;
enemy.Attack(attack.AttackingWithMeat(true, false), attack.AttackingWithWood(true, false), 3);
playerAttack.Attack();
}
}
}else{
rect.anchoredPosition = new Vector2(rect.anchoredPosition.x, Mathf.SmoothDamp(rect.anchoredPosition.y, attack.maxHeight, ref velocity, attack.selectSmoothTime));
if (Input.GetMouseButtonUp(0)){
playerAttack.open1 = playerAttack.open2 = playerAttack.open3 = playerAttack.open4 = playerAttack.open5 = false;
enemy.Attack(attack.AttackingWithMeat(false, false), attack.AttackingWithWood(false, false), 1);
playerAttack.Attack();
}
}
}else{
rect.anchoredPosition = new Vector2(rect.anchoredPosition.x, Mathf.SmoothDamp(rect.anchoredPosition.y, attack.minHeight, ref velocity, attack.selectSmoothTime));
}
}
}

View file

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

View file

@ -0,0 +1,194 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class CombatManager : MonoBehaviour{
public enum EnemyType { Bear, Driada, Loca, Boss }
public EnemyType enemyType = default;
[Space]
public EnemyController bear = default;
public EnemyController driada = default;
public EnemyController loca = default;
public EnemyController boss = default;
[Space]
public GameObject bearHand = default;
public GameObject driadaHand = default;
public GameObject locaHand = default;
public GameObject bossHand = default;
[Space]
[SerializeField] GameObject bearBackground = default;
[SerializeField] GameObject driadaBackground = default;
[SerializeField] GameObject locaBackground = default;
[SerializeField] GameObject bossBackground = default;
[Space]
[SerializeField] Animator anim = default;
[SerializeField] CustomTMP_Animated dialogue = default;
[SerializeField] Dialogue bearDialogue = default;
[SerializeField] Dialogue driadaDialogue = default;
[SerializeField] Dialogue locaDialogue = default;
[SerializeField] Dialogue bossDialogue = default;
[Space]
[SerializeField] Animator bearHandAnim = default;
[SerializeField] Animator driadaHandAnim = default;
[SerializeField] Animator locaHandAnim = default;
[SerializeField] Animator bossHandAnim = default;
[SerializeField] Animator playerHandAnim = default;
int dialogueIndex;
bool dialogueStarted;
public static CombatManager instance;
void Awake(){
instance = this;
}
// Start is called before the first frame update
void Start(){
if(GameMaster.instance != null)
enemyType = (EnemyType)GameMaster.instance.enemyType[GameMaster.instance.currentGrid];
AudioManager.instance.StopAll();
AudioManager.instance.Play("FightNoBrass");
switch (enemyType){
case EnemyType.Bear:
driada.gameObject.SetActive(false);
loca.gameObject.SetActive(false);
driadaHand.SetActive(false);
locaHand.SetActive(false);
boss.gameObject.SetActive(false);
bossHand.SetActive(false);
driadaBackground.SetActive(false);
locaBackground.SetActive(false);
bossBackground.SetActive(false);
break;
case EnemyType.Driada:
bear.gameObject.SetActive(false);
loca.gameObject.SetActive(false);
bearHand.SetActive(false);
locaHand.SetActive(false);
boss.gameObject.SetActive(false);
bossHand.SetActive(false);
bearBackground.SetActive(false);
locaBackground.SetActive(false);
bossBackground.SetActive(false);
break;
case EnemyType.Loca:
driada.gameObject.SetActive(false);
bear.gameObject.SetActive(false);
driadaHand.SetActive(false);
bearHand.SetActive(false);
boss.gameObject.SetActive(false);
bossHand.SetActive(false);
driadaBackground.SetActive(false);
bearBackground.SetActive(false);
bossBackground.SetActive(false);
break;
case EnemyType.Boss:
AudioManager.instance.Stop("FightNoBrass");
AudioManager.instance.Play("fightFull");
driada.gameObject.SetActive(false);
bear.gameObject.SetActive(false);
loca.gameObject.SetActive(false);
locaHand.SetActive(false);
driadaHand.SetActive(false);
bearHand.SetActive(false);
driadaBackground.SetActive(false);
bearBackground.SetActive(false);
bearBackground.SetActive(false);
break;
}
}
public void OnStartDialogue(){
switch (enemyType){
case EnemyType.Bear:
dialogue.ReadText(bearDialogue.sentences[dialogueIndex]);
break;
case EnemyType.Driada:
dialogue.ReadText(driadaDialogue.sentences[dialogueIndex]);
break;
case EnemyType.Loca:
dialogue.ReadText(locaDialogue.sentences[dialogueIndex]);
break;
case EnemyType.Boss:
dialogue.ReadText(bossDialogue.sentences[dialogueIndex]);
break;
}
anim.SetTrigger("Enter");
dialogueStarted = true;
dialogueIndex++;
}
// Update is called once per frame
void Update(){
if (dialogueStarted){
if (Input.anyKeyDown){
switch (enemyType){
case EnemyType.Bear:
if (dialogueIndex == bearDialogue.sentences.Length){
StartGame(EnemyType.Bear);
break;
}
dialogue.ReadText(bearDialogue.sentences[dialogueIndex]);
break;
case EnemyType.Driada:
if (dialogueIndex == driadaDialogue.sentences.Length){
StartGame(EnemyType.Driada);
break;
}
dialogue.ReadText(driadaDialogue.sentences[dialogueIndex]);
break;
case EnemyType.Loca:
if (dialogueIndex == locaDialogue.sentences.Length){
StartGame(EnemyType.Loca);
break;
}
dialogue.ReadText(locaDialogue.sentences[dialogueIndex]);
break;
case EnemyType.Boss:
if (dialogueIndex == bossDialogue.sentences.Length){
StartGame(EnemyType.Boss);
break;
}
dialogue.ReadText(bossDialogue.sentences[dialogueIndex]);
break;
}
dialogueIndex++;
}
}
}
void StartGame(EnemyType enemy){
switch (enemy){
case EnemyType.Bear:
bearHandAnim.SetTrigger("Enter");
AudioManager.instance.Play("oso_risa");
break;
case EnemyType.Boss:
bossHandAnim.SetTrigger("Enter");
break;
case EnemyType.Driada:
driadaHandAnim.SetTrigger("Enter");
AudioManager.instance.Play("driada_risa");
break;
case EnemyType.Loca:
locaHandAnim.SetTrigger("Enter");
AudioManager.instance.Play("loca_risa");
break;
}
dialogueStarted = false;
anim.SetTrigger("Exit");
playerHandAnim.SetTrigger("Enter");
}
}

View file

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

View file

@ -0,0 +1,165 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class EnemyController : MonoBehaviour{
[SerializeField] Dialogue loseDialogue = default;
[SerializeField] HandManager playerHand = default;
[SerializeField] CustomTMP_Animated text = default;
[SerializeField] Animator textAnim = default;
[SerializeField, Range(0, 100)] int percentageWood = 0;
[SerializeField, Range(0, 100)] int percentageMeat = 0;
[Space]
[SerializeField] Sprite rock = default;
[SerializeField] Sprite paper = default;
[SerializeField] Sprite scisors = default;
[SerializeField] Sprite deathSprite = default;
[SerializeField] Animator playerAnim = default;
[SerializeField] Animator anim = default;
[SerializeField] Image image = default;
[SerializeField] GameObject[] heart = default;
int life = 3;
[SerializeField] GameObject[] playerHeart = default;
int playerLife = 3;
int enemyAttack;
int playerAttack;
bool lost;
public void Attack(bool attackingWithMeat, bool attackingWithWood, int attack){
float randomNumber = Random.Range(0f, 100f);
if(randomNumber > percentageWood && attackingWithWood){
Debug.Log("Wait, that's illegal");
}
if(randomNumber > percentageMeat && attackingWithMeat){
Debug.Log("Wait, that's illegal");
}
enemyAttack = Mathf.RoundToInt(Random.Range(100f, 300f) / 100f);
playerAttack = attack;
switch (enemyAttack){
case 1:
//Rock
if(playerAttack == 2){
anim.SetTrigger("Die");
}else if(playerAttack == 3){
playerAnim.SetTrigger("Die");
}
break;
case 2:
//Paper
if (playerAttack == 3){
anim.SetTrigger("Die");
}else if (playerAttack == 1){
playerAnim.SetTrigger("Die");
}
break;
case 3:
//Scisors
if (playerAttack == 1){
anim.SetTrigger("Die");
}else if (playerAttack == 2){
playerAnim.SetTrigger("Die");
}
break;
}
}
int count;
void Update(){
if(lost && count == 0){
if (Input.anyKeyDown){
textAnim.SetTrigger("Exit");
count = 1;
}
}
}
public void ShowArm(){
switch (enemyAttack){
case 1:
//Rock
image.sprite = rock;
if (playerAttack == 2){
heart[life - 1].SetActive(false);
life--;
if (life == 0){
OnDie();
}
}else if (playerAttack == 3){
playerHeart[playerLife - 1].SetActive(false);
playerLife--;
if (playerLife == 0){
Lose();
}
}
break;
case 2:
//Paper
image.sprite = paper;
if (playerAttack == 3){
heart[life - 1].SetActive(false);
life--;
if (life == 0){
OnDie();
}
}else if (playerAttack == 1){
playerHeart[playerLife - 1].SetActive(false);
playerLife--;
if (playerLife == 0){
Lose();
}
}
break;
case 3:
//Scisors
image.sprite = scisors;
if (playerAttack == 1){
heart[life - 1].SetActive(false);
life--;
if (life == 0){
OnDie();
}
}else if (playerAttack == 2){
playerHeart[playerLife - 1].SetActive(false);
playerLife--;
if (playerLife == 0){
Lose();
}
}
break;
}
}
void Lose(){
text.ReadText(loseDialogue.sentences[0]);
lost = true;
playerHand.canCut = true;
textAnim.SetTrigger("Enter");
playerHand.GetComponentInParent<Animator>().SetTrigger("EnterDeath");
}
public void Shake(){
image.sprite = rock;
}
void OnDie(){
if (!gameObject.activeSelf)
return;
GetComponent<Image>().sprite = deathSprite;
StartCoroutine(Die());
}
IEnumerator Die(){
yield return new WaitForSeconds(.5f);
GameMaster.instance.CompleteGrid(GameMaster.instance.currentGrid);
}
}

View file

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

View file

@ -0,0 +1,51 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameMaster : MonoBehaviour{
[HideInInspector] public int gridLength;
[HideInInspector] public int currentGrid;
[HideInInspector] public Dictionary<int, bool> grids;
[HideInInspector] public Dictionary<int, int> enemyType;
public static GameMaster instance;
public bool finger1;
public bool finger2;
public bool finger3;
public bool finger4;
public bool finger5;
// Start is called before the first frame update
void Awake(){
if(instance == null){
instance = this;
}else{
Destroy(gameObject);
return;
}
DontDestroyOnLoad(gameObject);
}
public void LoadGrid(int grid){
currentGrid = grid;
Loader.Load(2);
}
public void LoadBoss(int grid){
currentGrid = grid;
enemyType[grid] = 3;
Loader.Load(2);
}
public void CompleteGrid(int grid){
grids[grid] = true;
Loader.Load(1);
}
public void DestroyGameMaster(){
instance = null;
Destroy(gameObject);
}
}

View file

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

View file

@ -0,0 +1,56 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAttack : MonoBehaviour{
[SerializeField] Animator attack = default;
[SerializeField] Animator[] enemyAnim = default;
[SerializeField] Animator flash = default;
[SerializeField] EnemyController[] enemy = default;
[SerializeField] HandManager hand = default;
[Space]
public bool open1;
public bool open2;
public bool open3;
public bool open4;
public bool open5;
public void Attack(){
hand.open1 = false;
hand.open2 = false;
hand.open3 = false;
hand.open4 = false;
hand.open5 = false;
attack.SetTrigger("Attack");
foreach(Animator anim in enemyAnim){
anim.SetTrigger("Attack");
}
foreach(EnemyController e in enemy){
e.Shake();
}
}
public void CountdownSound(){
AudioManager.instance.PlayOneShot("cuentaAtras");
}
public void ShowArms(){
hand.open1 = open1;
hand.open2 = open2;
hand.open3 = open3;
hand.open4 = open4;
hand.open5 = open5;
GetComponent<HandManager>().enabled = true;
flash.SetTrigger("Flash");
AudioManager.instance.Play("lanzar");
foreach (EnemyController e in enemy){
e.ShowArm();
}
}
}

View file

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

View file

@ -0,0 +1,72 @@
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
namespace TMPro{
[System.Serializable] public class CTextRevealEvent : UnityEvent<char> { }
[System.Serializable] public class CDialogueEvent : UnityEvent { }
public class CustomTMP_Animated : TextMeshProUGUI{
float speed;
public CTextRevealEvent onTextReveal;
public CDialogueEvent onDialogueFinish;
public void ReadText(string newText){
text = string.Empty;
string[] subTexts = newText.Split('<', '>');
string displayText = "";
for (int i = 0; i < subTexts.Length; i++){
if (i % 2 == 0)
displayText += subTexts[i];
else if (!isCustomTag(subTexts[i].Replace(" ", "")))
displayText += $"<{subTexts[i]}>";
}
bool isCustomTag(string tag){
return tag.StartsWith("speed=") || tag.StartsWith("pause=");
}
text = displayText;
maxVisibleCharacters = 0;
StartCoroutine(Read());
IEnumerator Read(){
int subCounter = 0;
int visibleCounter = 0;
while (subCounter < subTexts.Length){
if (subCounter % 2 == 1){
yield return EvaluateTag(subTexts[subCounter].Replace(" ", ""));
}else{
while (visibleCounter < subTexts[subCounter].Length){
onTextReveal.Invoke(subTexts[subCounter][visibleCounter]);
visibleCounter++;
maxVisibleCharacters++;
AudioManager.instance.PlayOneShot("text");
yield return new WaitForSeconds(1f / speed);
}
visibleCounter = 0;
}
subCounter++;
}
yield return null;
WaitForSeconds EvaluateTag(string tag){
if (tag.Length > 0){
if (tag.StartsWith("speed=")){
speed = float.Parse(tag.Split('=')[1]);
}else if (tag.StartsWith("pause=")){
return new WaitForSeconds(float.Parse(tag.Split('=')[1]));
}
}
return null;
}
onDialogueFinish.Invoke();
}
}
}
}

View file

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

View file

@ -0,0 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DontDestroy : MonoBehaviour{
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
}

View file

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

8
Assets/Scripts/Hand.meta Normal file
View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 463ce90e8e909bf4988090ace0db0412
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,84 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class FakeFingerManager : MonoBehaviour, IPointerDownHandler, IBeginDragHandler, IEndDragHandler, IDragHandler, IDropHandler{
public HandManager.FingerTypes fingerType = HandManager.FingerTypes.Default;
[SerializeField] Canvas canvas = default;
RectTransform rectTransform;
CanvasGroup canvasGroup;
Vector2 defaultPos;
[SerializeField] float smoothTime = .5f;
[HideInInspector] public bool dragging;
[HideInInspector] public Vector2 posToGo;
Vector2 position;
[HideInInspector] public bool setPos;
[HideInInspector] public int index;
void Awake(){
rectTransform = GetComponent<RectTransform>();
canvasGroup = GetComponent<CanvasGroup>();
defaultPos = posToGo = rectTransform.anchoredPosition;
}
public void OnBeginDrag(PointerEventData eventData){
canvasGroup.blocksRaycasts = false;
canvasGroup.alpha = .6f;
dragging = true;
setPos = false;
}
public void OnDrag(PointerEventData eventData){
rectTransform.anchoredPosition += eventData.delta / canvas.scaleFactor;
}
public void OnEndDrag(PointerEventData eventData){
StartCoroutine(ResetToDefaultPos());
canvasGroup.blocksRaycasts = true;
canvasGroup.alpha = 1f;
}
public void OnPointerDown(PointerEventData eventData){
}
public void OnDrop(PointerEventData eventData){
}
void Update(){
if(!dragging)
rectTransform.anchoredPosition = Vector2.SmoothDamp(rectTransform.anchoredPosition, posToGo, ref position, smoothTime);
}
IEnumerator ResetToDefaultPos(){
yield return new WaitForSeconds(.1f);
if (!setPos){
/*switch(index){
case 1:
hand.finger1 = false;
break;
case 2:
hand.finger2 = false;
break;
case 3:
hand.finger3 = false;
break;
case 4:
hand.finger4 = false;
break;
case 5:
hand.finger5 = false;
break;
}*/
posToGo = defaultPos;
dragging = false;
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6f368aced5d00294f89e49eae6378ce0
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;
using UnityEngine.EventSystems;
public class Finger : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler{
[SerializeField, Range(1, 5)] int fingerIndex = 1;
bool selected;
HandManager hand;
void Awake(){
hand = GetComponentInParent<HandManager>();
}
public void OnPointerEnter(PointerEventData eventData){
selected = true;
}
public void OnPointerExit(PointerEventData eventData){
selected = false;
}
// Update is called once per frame
void Update(){
if (selected){
if (Input.GetMouseButtonDown(0)){
hand.Cut(fingerIndex);
//gameObject.SetActive(false);
}
}
}
}

View file

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

View file

@ -0,0 +1,42 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class FingerHandManager : MonoBehaviour, IDropHandler{
[SerializeField, Range(1, 5)] int fingerIndex = 1;
public void OnDrop(PointerEventData eventData){
if(eventData.pointerDrag != null){
FakeFingerManager finger = eventData.pointerDrag.GetComponent<FakeFingerManager>();
finger.setPos = true;
//finger.posToGo = GetComponent<RectTransform>().anchoredPosition;
finger.dragging = false;
finger.index = fingerIndex;
HandManager hand = GetComponentInParent<HandManager>();
switch (fingerIndex){
case 1:
hand.finger1 = true;
hand.finger1Type = finger.fingerType;
break;
case 2:
hand.finger2 = true;
hand.finger2Type = finger.fingerType;
break;
case 3:
hand.finger3 = true;
hand.finger3Type = finger.fingerType;
break;
case 4:
hand.finger4 = true;
hand.finger4Type = finger.fingerType;
break;
case 5:
hand.finger5 = true;
hand.finger5Type = finger.fingerType;
break;
}
}
}
}

View file

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

View file

@ -0,0 +1,267 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HandManager : MonoBehaviour {
public bool canCut;
[Space]
[SerializeField] HandManager attackHand = default;
[System.Serializable] public enum FingerTypes { Default, Wood, Meat }
public bool open1 = false;
public bool finger1 = true;
public FingerTypes finger1Type = FingerTypes.Default;
public bool open2 = false;
public bool finger2 = true;
public FingerTypes finger2Type = FingerTypes.Default;
public bool open3 = false;
public bool finger3 = true;
public FingerTypes finger3Type = FingerTypes.Default;
public bool open4 = false;
public bool finger4 = true;
public FingerTypes finger4Type = FingerTypes.Default;
public bool open5 = false;
public bool finger5 = true;
public FingerTypes finger5Type = FingerTypes.Default;
[Space]
[SerializeField] GameObject finger1Cutted = default;
[SerializeField] GameObject finger2Cutted = default;
[SerializeField] GameObject finger3Cutted = default;
[SerializeField] GameObject finger4Cutted = default;
[SerializeField] GameObject finger5Cutted = default;
[Space]
[SerializeField] Image finger1Image = default;
[SerializeField] Image finger2Image = default;
[SerializeField] Image finger3Image = default;
[SerializeField] Image finger4Image = default;
[SerializeField] Image finger5Image = default;
[Space]
[SerializeField] Sprite[] finger1DefaultSprite = default;
[SerializeField] Sprite[] finger1MeatSprite = default;
[SerializeField] Sprite[] finger1WoodSprite = default;
[SerializeField] Sprite[] finger2DefaultSprite = default;
[SerializeField] Sprite[] finger2MeatSprite = default;
[SerializeField] Sprite[] finger2WoodSprite = default;
[SerializeField] Sprite[] finger3DefaultSprite = default;
[SerializeField] Sprite[] finger3MeatSprite = default;
[SerializeField] Sprite[] finger3WoodSprite = default;
[SerializeField] Sprite[] finger4DefaultSprite = default;
[SerializeField] Sprite[] finger4MeatSprite = default;
[SerializeField] Sprite[] finger4WoodSprite = default;
[SerializeField] Sprite[] finger5DefaultSprite = default;
[SerializeField] Sprite[] finger5MeatSprite = default;
[SerializeField] Sprite[] finger5WoodSprite = default;
void Start(){
if (GameMaster.instance == null)
return;
finger1 = GameMaster.instance.finger1;
finger2 = GameMaster.instance.finger2;
finger3 = GameMaster.instance.finger3;
finger4 = GameMaster.instance.finger4;
finger5 = GameMaster.instance.finger5;
}
void Update(){
if(finger1Cutted != null){
finger1Cutted.SetActive(!finger1);
finger2Cutted.SetActive(!finger2);
finger3Cutted.SetActive(!finger3);
finger4Cutted.SetActive(!finger4);
finger5Cutted.SetActive(!finger5);
}
if (finger1){
finger1Image.enabled = true;
if (finger1Type == FingerTypes.Default){
finger1Image.sprite = open1 ? finger1DefaultSprite[0] : finger1DefaultSprite[1];
}else if (finger1Type == FingerTypes.Wood){
finger1Image.sprite = open1 ? finger1WoodSprite[0] : finger1WoodSprite[1];
}else{
finger1Image.sprite = open1 ? finger1MeatSprite[0] : finger1MeatSprite[1];
}
}else{
finger1Image.enabled = false;
}
if (finger2){
finger2Image.enabled = true;
if (finger2Type == FingerTypes.Default){
finger2Image.sprite = open2 ? finger2DefaultSprite[0] : finger2DefaultSprite[1];
}else if (finger2Type == FingerTypes.Wood){
finger2Image.sprite = open2 ? finger2WoodSprite[0] : finger2WoodSprite[1];
}else{
finger2Image.sprite = open2 ? finger2MeatSprite[0] : finger2MeatSprite[1];
}
}else{
finger2Image.enabled = false;
}
if (finger3){
finger3Image.enabled = true;
if (finger3Type == FingerTypes.Default){
finger3Image.sprite = open3 ? finger3DefaultSprite[0] : finger3DefaultSprite[1];
}else if (finger3Type == FingerTypes.Wood){
finger3Image.sprite = open3 ? finger3WoodSprite[0] : finger3WoodSprite[1];
}else{
finger3Image.sprite = open3 ? finger3MeatSprite[0] : finger3MeatSprite[1];
}
}else{
finger3Image.enabled = false;
}
if (finger4){
finger4Image.enabled = true;
if (finger4Type == FingerTypes.Default){
finger4Image.sprite = open4 ? finger4DefaultSprite[0] : finger4DefaultSprite[1];
}else if (finger4Type == FingerTypes.Wood){
finger4Image.sprite = open4 ? finger4WoodSprite[0] : finger4WoodSprite[1];
}else{
finger4Image.sprite = open4 ? finger4MeatSprite[0] : finger4MeatSprite[1];
}
}else{
finger4Image.enabled = false;
}
if (finger5){
finger5Image.enabled = true;
if (finger5Type == FingerTypes.Default){
finger5Image.sprite = open5 ? finger5DefaultSprite[0] : finger5DefaultSprite[1];
}else if (finger5Type == FingerTypes.Wood){
finger5Image.sprite = open5 ? finger5WoodSprite[0] : finger5WoodSprite[1];
}else{
finger5Image.sprite = open5 ? finger5MeatSprite[0] : finger5MeatSprite[1];
}
}else{
finger5Image.enabled = false;
}
UpdateOtherHand();
}
void UpdateOtherHand(){
if (attackHand == null)
return;
attackHand.finger1Type = finger1Type;
attackHand.finger2Type = finger2Type;
attackHand.finger3Type = finger3Type;
attackHand.finger4Type = finger4Type;
attackHand.finger5Type = finger5Type;
attackHand.finger1 = finger1;
attackHand.finger2 = finger2;
attackHand.finger3 = finger3;
attackHand.finger4 = finger4;
attackHand.finger5 = finger5;
}
public void StartGame(){
if (finger1){
finger1Image.enabled = true;
if (finger1Type == FingerTypes.Default){
finger1Image.sprite = open1 ? finger1DefaultSprite[0] : finger1DefaultSprite[1];
}else if (finger1Type == FingerTypes.Wood){
finger1Image.sprite = open1 ? finger1WoodSprite[0] : finger1WoodSprite[1];
}else{
finger1Image.sprite = open1 ? finger1MeatSprite[0] : finger1MeatSprite[1];
}
}else{
finger1Image.enabled = false;
}
if (finger2){
finger2Image.enabled = true;
if (finger2Type == FingerTypes.Default){
finger2Image.sprite = open2 ? finger2DefaultSprite[0] : finger2DefaultSprite[1];
}else if (finger2Type == FingerTypes.Wood){
finger2Image.sprite = open2 ? finger2WoodSprite[0] : finger2WoodSprite[1];
}else{
finger2Image.sprite = open2 ? finger2MeatSprite[0] : finger2MeatSprite[1];
}
}else{
finger2Image.enabled = false;
}
if (finger3){
finger3Image.enabled = true;
if (finger3Type == FingerTypes.Default){
finger3Image.sprite = open3 ? finger3DefaultSprite[0] : finger3DefaultSprite[1];
}else if (finger3Type == FingerTypes.Wood){
finger3Image.sprite = open3 ? finger3WoodSprite[0] : finger3WoodSprite[1];
}else{
finger3Image.sprite = open3 ? finger3MeatSprite[0] : finger3MeatSprite[1];
}
}else{
finger3Image.enabled = false;
}
if (finger4){
finger4Image.enabled = true;
if (finger4Type == FingerTypes.Default){
finger4Image.sprite = open4 ? finger4DefaultSprite[0] : finger4DefaultSprite[1];
}else if (finger4Type == FingerTypes.Wood){
finger4Image.sprite = open4 ? finger4WoodSprite[0] : finger4WoodSprite[1];
}else{
finger4Image.sprite = open4 ? finger4MeatSprite[0] : finger4MeatSprite[1];
}
}else{
finger4Image.enabled = false;
}
if (finger5){
finger5Image.enabled = true;
if (finger5Type == FingerTypes.Default){
finger5Image.sprite = open5 ? finger5DefaultSprite[0] : finger5DefaultSprite[1];
}else if (finger5Type == FingerTypes.Wood){
finger5Image.sprite = open5 ? finger5WoodSprite[0] : finger5WoodSprite[1];
}else{
finger5Image.sprite = open5 ? finger5MeatSprite[0] : finger5MeatSprite[1];
}
}else{
finger5Image.enabled = false;
}
}
public void Cut(int index){
if (!canCut)
return;
switch (index){
case 1:
finger1 = false;
GameMaster.instance.finger1 = false;
break;
case 2:
finger2 = false;
GameMaster.instance.finger2 = false;
break;
case 3:
finger3 = false;
GameMaster.instance.finger3 = false;
break;
case 4:
finger4 = false;
GameMaster.instance.finger4 = false;
break;
case 5:
finger5 = false;
GameMaster.instance.finger5 = false;
break;
}
GameMaster.instance.CompleteGrid(GameMaster.instance.currentGrid);
canCut = false;
}
}

View file

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

View file

@ -0,0 +1,63 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class MainMenuController : MonoBehaviour{
[SerializeField] Button playButton;
[SerializeField] Button creditsButton;
[SerializeField] Button settingsButton;
[SerializeField] Button settingsAcceptButton;
[SerializeField] Button exitButton;
[Space]
[SerializeField] GameObject title;
[SerializeField] GameObject menuButtons;
[SerializeField] GameObject settingsPanel;
// Start is called before the first frame update
void Start(){
AudioManager.instance.StopAll();
AudioManager.instance.Play("forest");
if (playButton != null)
playButton.onClick.AddListener(Play);
if (creditsButton != null)
creditsButton.onClick.AddListener(Credits);
if (settingsButton != null)
settingsButton.onClick.AddListener(Settings);
if (settingsAcceptButton != null)
settingsAcceptButton.onClick.AddListener(SettingsAccept);
if (exitButton != null)
exitButton.onClick.AddListener(Exit);
}
void Play(){
Loader.Load(1);
}
void Credits(){
//SceneManager.LoadScene("Credits");
}
void Settings(){
title.SetActive(false);
menuButtons.SetActive(false);
settingsPanel.SetActive(true);
}
void SettingsAccept(){
title.SetActive(true);
menuButtons.SetActive(true);
settingsPanel.SetActive(false);
}
void Exit(){
Application.Quit();
}
}

View file

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

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e072be93411028d40ba1aa23d1ab9239
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,71 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Grid : MonoBehaviour{
public bool empty = false;
[HideInInspector] public int index;
[System.Serializable] public enum Enemy { Oso, Driada, Loca }
public Enemy enemy;
[Space]
public bool isBoss = false;
public bool unlocked;
public bool connected;
[Space]
public Grid upGrid;
public Grid downGrid;
public Grid leftGrid;
public Grid rightGrid;
[Space]
public Grid upPathToUnlock;
public Grid downPathToUnlock;
public Grid leftPathToUnlock;
public Grid rightPathToUnlock;
BoxCollider2D boxCollider;
void Awake(){
float range = Random.Range(0f, 300f);
if(range < 100f){
enemy = Enemy.Oso;
}else if(range >= 100f && range < 200f){
enemy = Enemy.Driada;
}else{
enemy = Enemy.Loca;
}
boxCollider = GetComponent<BoxCollider2D>();
}
public void UpdateEnemies(Enemy enemyType){
enemy = enemyType;
}
public void Connect(){
}
void Update(){
if (unlocked){
boxCollider.enabled = false;
if(upPathToUnlock != null){
upGrid = upPathToUnlock;
}
if (downPathToUnlock != null){
downGrid = downPathToUnlock;
}
if (leftPathToUnlock != null){
leftGrid = leftPathToUnlock;
}
if (rightPathToUnlock != null){
rightGrid = rightPathToUnlock;
}
}
}
}

View file

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

View file

@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Level : MonoBehaviour{
public Grid[] grids;
public static Level instance;
void Awake(){
instance = this;
}
void Start(){
if(GameMaster.instance.grids != null){
for (int i = 0; i < grids.Length; i++){
grids[i].unlocked = GameMaster.instance.grids[i];
grids[i].enemy = (Grid.Enemy)GameMaster.instance.enemyType[i];
}
}else{
GameMaster.instance.grids = new Dictionary<int, bool>();
GameMaster.instance.enemyType = new Dictionary<int, int>();
for (int i = 0; i < grids.Length; i++){
GameMaster.instance.grids.Add(i, grids[i].unlocked);
GameMaster.instance.enemyType.Add(i, (int)grids[i].enemy);
}
}
}
}

View file

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

View file

@ -0,0 +1,120 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour{
[SerializeField] Grid startGrid = default;
[SerializeField] float speed = 5f;
float currentStep;
Grid currentGrid;
Grid lastGrid;
Animator anim;
SpriteRenderer spriteRenderer;
[SerializeField] float timeToLoad = 1f;
float currentTime;
// Start is called before the first frame update
void Awake(){
currentGrid = lastGrid = startGrid;
anim = GetComponent<Animator>();
spriteRenderer = GetComponent<SpriteRenderer>();
AudioManager.instance.StopAll();
AudioManager.instance.Play("forest");
}
// Update is called once per frame
void Update(){
if (Input.GetKeyDown(KeyCode.W)){
anim.SetTrigger("runBack");
if(transform.position == currentGrid.transform.position){
if(currentGrid.upGrid != null){
lastGrid = currentGrid;
currentGrid = currentGrid.upGrid;
currentStep = 0;
StartCoroutine(ChangeIddle("iddleBack"));
}
}
}else if (Input.GetKeyDown(KeyCode.S)){
anim.SetTrigger("runFront");
if (transform.position == currentGrid.transform.position){
if (currentGrid.downGrid != null){
lastGrid = currentGrid;
currentGrid = currentGrid.downGrid;
currentStep = 0;
StartCoroutine(ChangeIddle("iddleFront"));
}
}
}else if (Input.GetKeyDown(KeyCode.A)){
anim.SetTrigger("runSide");
spriteRenderer.flipX = true;
if (transform.position == currentGrid.transform.position){
if (currentGrid.leftGrid != null){
lastGrid = currentGrid;
currentGrid = currentGrid.leftGrid;
currentStep = 0;
StartCoroutine(ChangeIddle("iddleSide"));
}
}
}else if (Input.GetKeyDown(KeyCode.D)){
anim.SetTrigger("runSide");
spriteRenderer.flipX = false;
if (transform.position == currentGrid.transform.position){
if (currentGrid.rightGrid != null){
lastGrid = currentGrid;
currentGrid = currentGrid.rightGrid;
currentStep = 0;
StartCoroutine(ChangeIddle("iddleSide"));
}
}
}
currentStep += speed * .5f * Time.deltaTime;
currentStep = Mathf.Clamp(currentStep, 0, 1);
transform.position = Vector3.Lerp(lastGrid.transform.position, currentGrid.transform.position, currentStep);
}
void OnTriggerStay2D(Collider2D col){
if (col.CompareTag("AttackGrid")){
currentTime += Time.deltaTime;
if (col.GetComponent<Grid>().isBoss){
//Load Boss
if (currentTime > timeToLoad){
GameMaster.instance.LoadBoss(col.GetComponent<Grid>().index);
}
}
else{
//Load RandomCombat
if (currentTime > timeToLoad){
GameMaster.instance.LoadGrid(col.GetComponent<Grid>().index);
}
}
}
}
IEnumerator ChangeIddle(string triggerId){
yield return new WaitForSeconds(0.05f);
Color alphaColor = spriteRenderer.color;
while(alphaColor.a > 0){
alphaColor.a -= 0.15f;
spriteRenderer.color = alphaColor;
yield return new WaitForSeconds(0.01f);
}
yield return new WaitForSeconds(0.7f);
anim.SetTrigger(triggerId);
while (alphaColor.a < 1){
alphaColor.a += 0.15f;
spriteRenderer.color = alphaColor;
yield return new WaitForSeconds(0.01f);
}
}
}

View file

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