public void StartPlayerTurn() { // if there is stil hp after damage, then player is alive if (thisHitPoints > 0) { thisPlayerState = State.eActivated; thisUiManager.UpdatePlayerTurn(); // because npc won't be activated thisUiManager.ToggleAllCardsEmittable(true); } else { // enter zen mode thisPlayerState = State.eIdle; // activate npc thisNpcBehavior.StartNpcTurn(); } }
protected void UpdateStateSwitch() { switch (thisNpcState) { case State.eIdle: { } break; case State.eActivated: { /* this state is an interrim wake state * that completes some one-time things before selection*/ //thisUiManager.StopAnySlash(thisPlayerBehavior.gameObject); thisUiManager.ToggleAllCardsEmittable(false); // once activated, update clickable list first UpdateClickableList(); // prevent player from having another turn thisOneMoreRoundAllowed = false; thisNpcState = State.eZeroSelected; } break; case State.eZeroSelected: { if (!thisGameHasEnded) { thisStateTimer -= Time.deltaTime; if (thisStateTimer < 0) { RandomlyFlipOneCard(); InitializeStateTimer(); thisNpcState = State.eOneSelected; return; } if (thisStateTimer < thisActionLag / 2) { // during half of the action lag, update the turn prompt thisUiManager.UpdateNpcTurn(); // makes all cards emittable when cursor hovered on cards //thisUiManager.MakeAllCardsEmittable(); return; } } } break; case State.eOneSelected: { thisStateTimer -= Time.deltaTime; if (thisStateTimer < 0) { // check if cards in memory are flippable // note: current this assumes that there must be two cards in memory, not considering time countdown // this also assumes that the two in memory should be the same in flippability // note: the public method returns if the card has been flipped; true means it is not flippable bool oneFlipped = thisMemoryList[0].GetComponent <CardScript>().GetIfCardHasBeenFlipped(); bool anotherFlipped = thisMemoryList[1].GetComponent <CardScript>().GetIfCardHasBeenFlipped(); // if they are both flippable, they must be different from each other if (!oneFlipped && !anotherFlipped) { if (CheckIfTwoTilesAreTheSame(thisMemoryList[0], thisSelectionList[0])) { // if the first one in memory matches the already selected one // add the one in the memory as the second selected one so that they can match FlipTheParticularCard(thisMemoryList[0]); //print("Npc flipped the matched one" + thisMemoryList[0].name +" \n"); // reset timer InitializeStateTimerToDisplayDuration(); UpdateMemoryFromSelfSelection(); // switch to next state thisNpcState = State.eTwoSelected; } else if (CheckIfTwoTilesAreTheSame(thisMemoryList[1], thisSelectionList[0])) { FlipTheParticularCard(thisMemoryList[1]); //print("Npc flipped the matched one" + thisMemoryList[1].name + " \n"); InitializeStateTimerToDisplayDuration(); UpdateMemoryFromSelfSelection(); thisNpcState = State.eTwoSelected; } else { RandomlyFlipOneCard(); //print("Npc flipped another random one\n"); InitializeStateTimerToDisplayDuration(); UpdateMemoryFromSelfSelection(); thisNpcState = State.eTwoSelected; } } else { RandomlyFlipOneCard(); //print("Npc flipped another random one\n"); InitializeStateTimerToDisplayDuration(); UpdateMemoryFromSelfSelection(); thisNpcState = State.eTwoSelected; } } } break; case State.eTwoSelected: { // when timer goes off, cards will be flipped back thisStateTimer -= Time.deltaTime; if (thisStateTimer < 0) { // check pairs CheckSelectedPairs(); ClearSelection(); if (thisOneMoreRoundAllowed) { StartNpcTurn(); InitializeStateTimer(); return; } else { if (thisIsNowLerpingToShuffle) { thisNpcState = State.eWaitDuringLerping; // make prompt to indicate shuffling thisUiManager.UpdateShuffling(); return; } else { // makes all cards emittable when cursor hovered on cards thisUiManager.ToggleAllCardsEmittable(true); thisNpcState = State.eIdle; thisPlayerBehavior.StartPlayerTurn(); InitializeStateTimer(); } } } } break; case State.eWaitDuringLerping: { if (!thisIsNowLerpingToShuffle) { // makes all cards emittable when cursor hovered on cards thisUiManager.ToggleAllCardsEmittable(true); thisNpcState = State.eIdle; thisPlayerBehavior.StartPlayerTurn(); InitializeStateTimer(); } } break; } }