Skip to content

Commit

Permalink
feat: start, next & prepare overlays scripting
Browse files Browse the repository at this point in the history
  • Loading branch information
David Arutiunian committed Jun 2, 2020
1 parent a1ed90b commit 3833494
Show file tree
Hide file tree
Showing 100 changed files with 2,917 additions and 512 deletions.
484 changes: 287 additions & 197 deletions Assets/Scenes/SampleScene.unity

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Assets/Scripts/BaseGameState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ void GameState.Update()

protected GameObject[] GenerateTriangles(Rotation[] rotations)
{
var generator = new TriangleGenerator(game.GridLayout.transform, game.TriangleTemplate);
var generator = new TriangleGenerator(game.GameGrid.transform, game.TriangleTemplate);
return generator.Create(rotations);
}

Expand Down
19 changes: 1 addition & 18 deletions Assets/Scripts/CountdownController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,12 @@ void Awake()
// Start is called before the first frame update
void Start()
{
BindGameEvents();
Restart();
GameEvents.instance.OnCountRestart += DoOnCountRestart;
}

// Update is called once per frame
void Update()
{

}

private void Restart()
Expand All @@ -34,12 +32,6 @@ private void Restart()
StartCoroutine(CountdownStart());
}

private void BindGameEvents()
{
GameEvents.instance.OnWin += DoOnWin;
GameEvents.instance.OnCountRestart += DoOnCountRestart;
}

private void DoOnCountRestart()
{
SetReady();
Expand All @@ -49,15 +41,6 @@ private void DoOnCountRestart()
Restart();
}

private void DoOnWin()
{
SetPreparing();
Hide();
StopAllCoroutines();
ResetTimer();
Restart();
}

private IEnumerator CountdownStart()
{
while (IsRunning())
Expand Down
23 changes: 23 additions & 0 deletions Assets/Scripts/FailState.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using UnityEngine;

public class FailState : BaseGameState
{
public FailState(MonoBehaviour behaviour, GameContext game) : base(behaviour, game)
{
}

public override void Unbind()
{
game.FailOverlay.SetActive(false);
}

protected override void DoOnStart()
{
game.FailOverlay.SetActive(true);
Debug.Log($"========== FailState LEVEL={GameStore.instance.GetAbsoluteWeight() + 1} STEP={GameStore.instance.step} ==========");
}

protected override void DoOnUpdate()
{
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 14 additions & 1 deletion Assets/Scripts/GameContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,20 @@

public interface GameContext
{
GameObject GridLayout { get; }

GameObject GameOverlay { get; }

GameObject WinOverlay { get; }

GameObject FailOverlay { get; }

GameObject MenuOverlay { get; }

GameObject RememberOverlay { get; }

GameObject RepeatOverlay { get; }

GameObject GameGrid { get; }

GameObject TriangleTemplate { get; }

Expand Down
135 changes: 110 additions & 25 deletions Assets/Scripts/GameController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@

public class GameController : MonoBehaviour
{
public GameObject GridLayout;
public GameObject GameOverlay;
public GameObject WinOverlay;
public GameObject FailOverlay;
public GameObject MenuOverlay;
public GameObject RememberOverlay;
public GameObject RepeatOverlay;
public GameObject GameGrid;

public GameObject TriangleTemplate;

public Sprite TriangleSuccess;
Expand All @@ -11,13 +18,21 @@ public class GameController : MonoBehaviour
private PrepareState prepare;
private PlayingState playing;
private WinState win;
private MenuState menu;
private RememberState remember;
private RepeatState repeat;
private FailState fail;
private GameState state;

public GameController()
{
prepare = new PrepareState(this, new GameController.Context(this));
playing = new PlayingState(this, new GameController.Context(this));
win = new WinState(this, new GameController.Context(this));
menu = new MenuState(this, new GameController.Context(this));
remember = new RememberState(this, new GameController.Context(this));
repeat = new RepeatState(this, new GameController.Context(this));
fail = new FailState(this, new GameController.Context(this));
}

internal class Context : GameContext
Expand All @@ -29,22 +44,38 @@ public Context(GameController controller)
this.controller = controller;
}

public GameObject GridLayout => controller.GridLayout;

public GameObject GameGrid => controller.GameGrid;
public GameObject TriangleTemplate => controller.TriangleTemplate;

public Sprite TriangleSuccess => controller.TriangleSuccess;

public Sprite TriangleError => controller.TriangleError;
public GameObject GameOverlay => controller.GameOverlay;
public GameObject WinOverlay => controller.WinOverlay;
public GameObject FailOverlay => controller.FailOverlay;
public GameObject MenuOverlay => controller.MenuOverlay;
public GameObject RememberOverlay => controller.RememberOverlay;
public GameObject RepeatOverlay => controller.RepeatOverlay;
}

// Start is called before the first frame update
void Start()
{
BindGameEvents();
GameEvents.instance.OnMenu += DoOnMenu;

state = prepare;
state.Start();
GameEvents.instance.OnPrepare += DoOnPrepare;
GameEvents.instance.OnPrepareEnd += DoOnPrepareEnd;

GameEvents.instance.OnWin += DoOnWin;
GameEvents.instance.OnWinEnd += DoOnWinEnd;

GameEvents.instance.OnLoose += DoOnLoose;

GameEvents.instance.OnRemember += DoOnRemember;
GameEvents.instance.OnRememberEnd += DoOnRememberEnd;

GameEvents.instance.OnRepeat += DoOnRepeat;
GameEvents.instance.OnRepeatEnd += DoOnRepeatEnd;

DoOnMenu();
}

// Update is called once per frame
Expand All @@ -53,55 +84,109 @@ void Update()
state.Update();
}

private void BindGameEvents()
private void DoOnMenu()
{
GameEvents.instance.OnReady += DoOnReady;
GameEvents.instance.OnRestart += DoOnRestart;
GameEvents.instance.OnWin += DoOnWin;
GameEvents.instance.OnWinEnd += DoOnWinEnd;
GameStore.instance.ResetAfterMenu();

if (state != null)
{
state.Unbind();
}
state = menu;
state.Start();
}

private void DoOnReady()
/* #################### Remember State #################### */

private void DoOnRemember()
{
GameStore.instance.ResetAfterReady();
GameStore.instance.ResetAfterRemember();

state.Unbind();
state = playing;
state = remember;
state.Start();

GameEvents.instance.TriggerCountRestart();
}

private void DoOnWin()
private void DoOnRememberEnd()
{
GameStore.instance.ResetAfterWin();
GameStore.instance.ResetAfterRememberEnd();
GameEvents.instance.TriggerPrepare();
}

/* #################### Prepare State #################### */

private void DoOnPrepare()
{
GameStore.instance.ResetAfterPrepare();

state.Unbind();
state = win;
state = prepare;
state.Start();

GameEvents.instance.TriggerCountRestart();
}

private void DoOnWinEnd()
private void DoOnPrepareEnd()
{
GameStore.instance.ResetAfterWinEnd();
GameStore.instance.ResetAfterPrepareEnd();
GameEvents.instance.TriggerRepeat();
}

/* #################### Repeat State #################### */

private void DoOnRepeat()
{
GameStore.instance.ResetAfterRepeat();

state.Unbind();
state = prepare;
state = repeat;
state.Start();

GameEvents.instance.TriggerCountRestart();
}

private void DoOnRestart()
private void DoOnRepeatEnd()
{
GameStore.instance.ResetAfterRestart();
GameStore.instance.ResetAfterRepeatEnd();

state.Unbind();
state = prepare;
state = playing;
state.Start();

GameEvents.instance.TriggerCountRestart();
}

/* #################### Win State #################### */

private void DoOnWin()
{
GameStore.instance.ResetAfterWin();

state.Unbind();
state = win;
state.Start();

GameEvents.instance.TriggerCountRestart();
}

private void DoOnWinEnd()
{
GameStore.instance.ResetAfterWinEnd();
GameEvents.instance.TriggerRemember();
}

/* #################### Fail State #################### */

private void DoOnLoose()
{
GameStore.instance.ResetAfterLoose();

state.Unbind();
state = fail;
state.Start();

GameEvents.instance.TriggerCounterStop();
}
}
Loading

0 comments on commit 3833494

Please sign in to comment.