Files
findthesource/Assets/Scripts/Dice.cs

307 lines
13 KiB
C#
Raw Normal View History

2022-10-30 15:02:17 +01:00
using System.Collections;
2023-02-10 14:06:30 +01:00
using System.Collections.Generic;
2022-10-30 15:02:17 +01:00
using UnityEngine;
2023-02-08 16:03:08 +01:00
using UnityEngine.UI;
2022-10-30 15:02:17 +01:00
public class Dice : MonoBehaviour {
public Sprite[] diceSides = new Sprite[6];
2022-11-02 11:15:11 +01:00
public SpriteRenderer hely1;
public SpriteRenderer hely2;
2023-04-12 21:22:45 +02:00
public SpriteRenderer animacio1;
public SpriteRenderer animacio2;
2023-02-12 16:53:09 +01:00
public Button dice1btnBtn;
public Button dice2btnBtn;
2022-11-04 13:05:20 +01:00
private Upgrade upgrade;
private Akciopont ap;
2022-11-07 17:56:31 +01:00
private Energia energiasav;
2023-01-26 21:25:20 +01:00
private Targyak targyak;
private Ugynok ugynok;
private movement movement;
2023-02-08 16:03:08 +01:00
public int[] diceResult = { 0, 0 };
2023-02-10 14:06:30 +01:00
public List<int> ujertek = new List<int>();
2022-11-02 12:52:21 +01:00
public int valasztottErtek; //a jatekos altal valasztott dobott ertek helye
2023-02-12 16:53:09 +01:00
private bool locked = false; //ne lehessen ujra kivalasztani a masikat ha mar tortent egy valasztas
2023-02-08 16:03:08 +01:00
public bool adrenalinMegerosites = false;
2023-01-26 21:25:20 +01:00
public GameObject adrenalinHasznalat;
2023-02-08 16:03:08 +01:00
public Button confirm;
public Button cancel;
2023-02-09 13:38:54 +01:00
public bool mehet = false;
2023-02-08 16:03:08 +01:00
public BoxCollider2D[] colliders;
2022-10-30 15:02:17 +01:00
//getters setters
public int[] getDices() { return diceResult; }
public int getValasztottErtek() { return valasztottErtek; }
public void setValasztottErtek(int ujErtek) { valasztottErtek = ujErtek; }
2022-11-07 17:25:24 +01:00
public bool getLocked() { return locked; }
public void setLocked(bool locked) { this.locked = locked; }
2023-01-24 18:39:30 +01:00
public int dobott = 0;
2023-02-12 16:53:09 +01:00
public bool dobottEgyszer = false; //tudjon ujra dobni vagy nem
2023-03-24 10:03:41 +01:00
public int ujradobasszamlalo;
2023-01-24 18:39:30 +01:00
private bool ugynokDobasErtek = false; //ertek valasztashoz hogy tudja az ugynok csapat miatt lett meghivva
2023-04-12 21:22:45 +02:00
private bool elsoDobas = true;
2023-02-10 14:06:30 +01:00
private void Awake() {
2022-11-04 13:05:20 +01:00
upgrade = FindObjectOfType<Upgrade>();
ap = FindObjectOfType<Akciopont>();
2022-11-07 17:56:31 +01:00
energiasav = FindObjectOfType<Energia>();
2023-01-26 21:25:20 +01:00
targyak = FindObjectOfType<Targyak>();
ugynok = FindObjectOfType<Ugynok>();
movement = FindObjectOfType<movement>();
2022-11-04 13:05:20 +01:00
}
public void ertekValasztas(GameObject gomb) {
2022-11-02 12:52:21 +01:00
if (diceResult[0] != 0 && diceResult[1] != 0 && !locked) { //megnezzuk hogy lett e mar dobva es nem valasztott meg a jatekos
if (gomb.name == "dice1btn") {
2022-11-02 12:52:21 +01:00
valasztottErtek = diceResult[0];
2022-11-04 13:05:20 +01:00
if (diceResult[0] < diceResult[1]) {
if(!ugynokDobasErtek){
upgrade.canUpgrade = true; //kisebb szam valasztasa eseten fejlesztes egyszer
2023-04-13 16:43:16 +02:00
//locked = true;
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Fejlesztes);
}else{
//ugynok csapat szama
ugynok.UgynokSorsolas(movement.jelenlegi_x, movement.jelenlegi_y, valasztottErtek);
//-1 energia
energiasav.csokkenEnergia(1);
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Akcio);
}
2022-11-07 17:56:31 +01:00
} else {
if(!ugynokDobasErtek){
energiasav.csokkenEnergia(1); //nagyobb szam valasztasa eseten -1 energia
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Akcio);
2023-04-13 16:43:16 +02:00
//locked = true;
}else{
//ugynok csapat szama
ugynok.UgynokSorsolas(movement.jelenlegi_x, movement.jelenlegi_y, valasztottErtek);
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Akcio);
}
2022-11-04 13:05:20 +01:00
}
2023-04-13 16:43:16 +02:00
//if(!ugynokDobasErtek)
locked = true;
} else if (gomb.name == "dice2btn") {
2022-11-02 12:52:21 +01:00
valasztottErtek = diceResult[1];
2022-11-04 13:05:20 +01:00
if (diceResult[1] < diceResult[0]) {
if(!ugynokDobasErtek){
upgrade.canUpgrade = true; //kisebb szam valasztasa eseten fejlesztes egyszer
2023-04-13 16:43:16 +02:00
//locked = true;
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Fejlesztes);
}else{
//ugynok csapat szama
ugynok.UgynokSorsolas(movement.jelenlegi_x, movement.jelenlegi_y, valasztottErtek);
//-1 energia
energiasav.csokkenEnergia(1);
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Akcio);
}
2022-11-07 17:56:31 +01:00
} else {
if(!ugynokDobasErtek){
energiasav.csokkenEnergia(1); //nagyobb szam valasztasa eseten -1 energia
2023-04-13 16:43:16 +02:00
//locked = true;
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Akcio);
}else{
//ugynok csapat szama
2023-04-13 16:43:16 +02:00
ugynok.UgynokSorsolas(movement.jelenlegi_x, movement.jelenlegi_y, valasztottErtek);
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.Akcio);
}
2022-11-04 13:05:20 +01:00
}
2023-04-13 16:43:16 +02:00
//if(!ugynokDobasErtek)
locked = true;
2022-11-02 12:52:21 +01:00
}
2022-11-04 13:05:20 +01:00
if(!ugynokDobasErtek)
ap.UpdateAkciopont(getValasztottErtek() + upgrade.akcio[upgrade.getAkcioIndex()]);
2023-04-13 16:43:16 +02:00
if(elsoDobas){
//jatek kezdeskor elso dobas ugynok csapat meghatarozas kezdo helyszinen
jatekmanager.Instance.UpdateGameState(jatekmanager.GameState.UgynokValasztas);
CallRenderDice(true);
elsoDobas = false;
2023-04-13 16:43:16 +02:00
}
2022-10-30 15:02:17 +01:00
}
2022-12-07 18:52:40 +01:00
Debug.Log("valasztott ertek: " + valasztottErtek + " locked status: " + locked);
2022-11-02 12:52:21 +01:00
}
2022-11-02 11:15:11 +01:00
2022-11-18 10:12:04 +01:00
public int RollDice() {
2022-12-14 10:32:38 +01:00
int randomDiceSide = Random.Range(0, 6);
2022-11-02 12:52:21 +01:00
int finalSide = randomDiceSide + 1;
2022-11-02 11:15:11 +01:00
Debug.Log(finalSide);
return finalSide;
}
public void CallRenderDice(bool ugynokDobas) => StartCoroutine(renderDice(ugynokDobas));
2023-02-08 16:03:08 +01:00
public IEnumerator renderDice(bool ugynokDobas) {
2023-02-12 16:53:09 +01:00
//ha zarolva van akkor ne tudjon ujra dobni / csak egyszer dobhasson (amig nincs feloldva a kovetkezo dobashoz)
//ha ugynok miatt kell dobni mikor mar nincs ujradobas tudjon dobni
if(dobottEgyszer && !ugynokDobas) yield break;
2023-02-12 16:53:09 +01:00
//dice gombok kikapcsolasa hogy amig nem vegez ne tudjon erteket valasztani
dice1btnBtn.enabled = false;
2023-04-12 21:22:45 +02:00
dice2btnBtn.enabled = false;
2023-02-12 16:53:09 +01:00
2022-11-02 11:15:11 +01:00
do {
2022-11-18 10:12:04 +01:00
diceResult[0] = RollDice();
diceResult[1] = RollDice();
2022-11-02 11:15:11 +01:00
} while (diceResult[0] == diceResult[1]);
2023-04-12 21:22:45 +02:00
//dice porgo animacio
StartCoroutine(AnimateTheDice(hely1, diceResult[0]));
StartCoroutine(AnimateTheDice(hely2, diceResult[1]));
2023-02-08 16:03:08 +01:00
//lassa a jatekos mit dobott
hely1.sprite = diceSides[diceResult[0]-1];
hely1.size = new Vector2(38, 38);
hely2.sprite = diceSides[diceResult[1]-1];
hely2.size = new Vector2(38, 38);
if(ugynokDobas){
ugynokDobasErtek = true;
setLocked(false);
}
2023-02-09 13:38:54 +01:00
//ha megvan a targy
2023-02-08 11:47:47 +01:00
if(targyak.adrenalinloket > 0) {
2023-02-08 16:03:08 +01:00
//helyszin collider kikapcsolas a gomb miatt
HelyszinKiBekapcs(true);
2023-02-08 11:47:47 +01:00
//text aktivalasa kerdesre hogy akarja e hasznalni a targyat
2023-02-08 16:03:08 +01:00
adrenalinHasznalat.gameObject.SetActive(true);
2023-02-08 11:47:47 +01:00
//ha igen gomb -> valtozo igaz, targy fv meghivas, deaktivalas
//VARNIA KELL A GOMBRA
2023-02-08 16:03:08 +01:00
var waitForButton = new WaitForUIButtons(confirm, cancel);
yield return waitForButton.Reset();
if(waitForButton.PressedButton == confirm){
adrenalinMegerosites = true;
}else{
adrenalinMegerosites = false;
2023-02-21 17:21:15 +01:00
HelyszinKiBekapcs(false); //nem hasznalja fel ezert visszakapcsoljuk
2023-02-08 16:03:08 +01:00
}
adrenalinHasznalat.gameObject.SetActive(false);
2023-02-08 11:47:47 +01:00
if (adrenalinMegerosites) {
2023-02-08 16:03:08 +01:00
targyak.CallAdrenalinLoket();
2023-02-10 14:06:30 +01:00
yield return new WaitUntil(() => ujertek.Count > 0);
2023-02-09 13:38:54 +01:00
if(mehet){
Debug.Log("belep mehet");
2023-02-10 14:06:30 +01:00
Debug.Log("List: 0: " + ujertek[0] + " 1: " + ujertek[1]);
2023-02-12 16:53:09 +01:00
//EGYENLO ERTEKEK VIZSGALATA
2023-02-10 16:13:26 +01:00
//ha tul nagy vagy tul kicsi erteket ad meg az elso kockanak valtsa at az erteket
if(targyak.ujertek1 > 6 && diceResult[1] != 6 && targyak.ujertek2 != 6){ //ha tul nagy szamot adott meg legyen 6 az ertek
targyak.ujertek1 = 6;
}else if(targyak.ujertek1 > 6 && (diceResult[1] == 6 || targyak.ujertek2 == 6)){ //ha a masik ertek 6 akkor legyen az ertek 5
targyak.ujertek1 = 5;
}else if(targyak.ujertek1 < 1 && diceResult[1] != 1 && targyak.ujertek2 != 1){
targyak.ujertek1 = 1;
}else if(targyak.ujertek1 < 1 && (diceResult[1] == 1 || targyak.ujertek2 == 1)){
targyak.ujertek1 = 2;
2023-02-19 17:24:34 +01:00
}else if(targyak.ujertek1 == targyak.ujertek2 || targyak.ujertek1 == diceResult[1]){ //ha egyenlo a ket uj ertek vagy az elso egyenlo a mar meglevo masodik kockaval
if(targyak.ujertek1 == 1){
targyak.ujertek1++;
}else if(targyak.ujertek1 == 6){
targyak.ujertek1--;
}else{
targyak.ujertek1--;
}
2023-02-10 16:13:26 +01:00
}
//
//ha tul nagy vagy tul kicsi erteket ad meg az masodik kockanak valtsa at az erteket
if(targyak.ujertek2 > 6 && diceResult[0] != 6 && targyak.ujertek1 != 6){ //ha tul nagy szamot adott meg legyen 6 az ertek
targyak.ujertek2 = 6;
}else if(targyak.ujertek2 > 6 && (diceResult[0] == 6 || targyak.ujertek1 == 6)){ //ha a masik ertek 6 akkor legyen az ertek 5
targyak.ujertek2 = 5;
}else if(targyak.ujertek2 < 1 && diceResult[0] != 1 && targyak.ujertek1 != 1){
targyak.ujertek2 = 1;
}else if(targyak.ujertek2 < 1 && (diceResult[0] == 1 || targyak.ujertek1 == 1)){
targyak.ujertek2 = 2;
2023-02-19 17:24:34 +01:00
}/*else if(targyak.ujertek1 == targyak.ujertek2 || targyak.ujertek2 == diceResult[0]){ //ha egyenlo a ket uj ertek vagy a masodik egyenlo a mar meglevo elso kockaval
if(targyak.ujertek2 == 1){
targyak.ujertek2++;
}else if(targyak.ujertek2 == 6){
targyak.ujertek2--;
}else{
targyak.ujertek2--;
}
} */
2023-02-10 16:13:26 +01:00
2023-02-09 13:38:54 +01:00
diceResult[0] = targyak.ujertek1;
diceResult[1] = targyak.ujertek2;
2023-02-12 16:53:09 +01:00
dobottEgyszer = true;
if(!ugynokDobas) //ha ugynok miatt van dobas ne vonjon le
ujradobasszamlalo++; //elhasznal egyet fent
2023-02-10 14:06:30 +01:00
}
2023-02-08 11:47:47 +01:00
}
//deaktivalas
adrenalinMegerosites = false;
}
2022-11-02 12:52:21 +01:00
hely1.sprite = diceSides[diceResult[0]-1];
2022-11-02 11:15:11 +01:00
hely1.size = new Vector2(38, 38);
2022-11-02 12:52:21 +01:00
hely2.sprite = diceSides[diceResult[1]-1];
2022-11-02 11:15:11 +01:00
hely2.size = new Vector2(38, 38);
2023-01-24 18:39:30 +01:00
dobott++;
2023-02-12 16:53:09 +01:00
//ha vegzett mindennel kapcsolja vissza az ertekvalasztast
dice1btnBtn.enabled = true;
dice2btnBtn.enabled = true;
if(!ugynokDobas){ //ha ugynok miatt van dobas ne vonjon le
ujradobasszamlalo--;
Debug.Log("ujradobasszamlalo: " + ujradobasszamlalo);
if(ujradobasszamlalo == 0){
dobottEgyszer = true;
}
}
2022-10-30 15:02:17 +01:00
}
2023-01-26 21:25:20 +01:00
2023-02-08 16:03:08 +01:00
public void HelyszinKiBekapcs(bool kikapcsolas){
if(kikapcsolas)
foreach(var item in colliders)
item.gameObject.SetActive(false);
else
foreach(var item in colliders)
item.gameObject.SetActive(true);
}
2023-01-26 21:25:20 +01:00
public void setAdrenalinMegerosites(bool adrenalinMegerosites) {
this.adrenalinMegerosites = adrenalinMegerosites;
}
2023-04-12 21:22:45 +02:00
private IEnumerator AnimateTheDice(SpriteRenderer rend, int diceErtek)
{
int randomDiceSide;
float time = 0f;
bool fusson = true;
while(fusson){
time += Time.time;
2023-04-13 16:43:16 +02:00
//Debug.Log("time: " + time);
2023-04-12 21:22:45 +02:00
if(time >= 200f) fusson = false;
randomDiceSide = Random.Range(0, 5);
rend.sprite = diceSides[Random.Range(0, 5)];
rend.size = new Vector2(38, 38);
yield return new WaitForSeconds(0.05f);
}
rend.sprite = diceSides[diceErtek - 1];
rend.size = new Vector2(38, 38);
}
2022-10-30 15:02:17 +01:00
}