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 ;
2023-04-09 17:21:06 +02:00
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
2022-11-02 13:15:47 +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
2023-04-09 17:21:06 +02: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 > ( ) ;
2023-04-09 17:21:06 +02:00
ugynok = FindObjectOfType < Ugynok > ( ) ;
movement = FindObjectOfType < movement > ( ) ;
2022-11-04 13:05:20 +01:00
}
2022-11-02 13:15:47 +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
2022-11-02 13:15:47 +01:00
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 ] ) {
2023-04-09 17:21:06 +02:00
if ( ! ugynokDobasErtek ) {
upgrade . canUpgrade = true ; //kisebb szam valasztasa eseten fejlesztes egyszer
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 {
2023-04-09 17:21:06 +02:00
if ( ! ugynokDobasErtek ) {
energiasav . csokkenEnergia ( 1 ) ; //nagyobb szam valasztasa eseten -1 energia
jatekmanager . Instance . UpdateGameState ( jatekmanager . GameState . Akcio ) ;
} 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
}
2022-11-02 13:15:47 +01:00
2022-11-02 12:52:21 +01:00
locked = true ;
2022-11-02 13:15:47 +01:00
} 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 ] ) {
2023-04-09 17:21:06 +02:00
if ( ! ugynokDobasErtek ) {
upgrade . canUpgrade = true ; //kisebb szam valasztasa eseten fejlesztes egyszer
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 {
2023-04-09 17:21:06 +02:00
if ( ! ugynokDobasErtek ) {
energiasav . csokkenEnergia ( 1 ) ; //nagyobb szam valasztasa eseten -1 energia
jatekmanager . Instance . UpdateGameState ( jatekmanager . GameState . Akcio ) ;
} 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
}
2022-11-02 12:52:21 +01:00
locked = true ;
}
2022-11-04 13:05:20 +01:00
2023-04-09 17:21:06 +02:00
if ( ! ugynokDobasErtek )
ap . UpdateAkciopont ( getValasztottErtek ( ) + upgrade . akcio [ upgrade . getAkcioIndex ( ) ] ) ;
2023-04-12 21:22:45 +02:00
/ * if ( elsoDobas ) {
2023-04-09 17:21:06 +02:00
//jatek kezdeskor elso dobas ugynok csapat meghatarozas kezdo helyszinen
jatekmanager . Instance . UpdateGameState ( jatekmanager . GameState . UgynokValasztas ) ;
CallRenderDice ( true ) ;
elsoDobas = false ;
2023-04-12 21:22:45 +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 ;
}
2023-04-09 17:21:06 +02:00
public void CallRenderDice ( bool ugynokDobas ) = > StartCoroutine ( renderDice ( ugynokDobas ) ) ;
2023-02-08 16:03:08 +01:00
2023-04-09 17:21:06 +02: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)
2023-04-09 17:21:06 +02:00
//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 ) ;
2023-04-09 17:21:06 +02:00
if ( ugynokDobas ) {
ugynokDobasErtek = true ;
setLocked ( false ) ;
}
2023-02-12 16:53:09 +01:00
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 ;
2023-04-09 17:21:06 +02:00
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 ;
2023-04-09 17:21:06 +02:00
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 ;
Debug . Log ( "time: " + time ) ;
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
}