From 94d3744a2b9181011d2a358d8bf865cdf63ec52a Mon Sep 17 00:00:00 2001 From: Maciej Kwidzinski Date: Tue, 6 Apr 2021 00:09:02 +0200 Subject: [PATCH 1/2] Display timing structures as nested brackets --- .../Steal.meta => Resources/Fonts.meta} | 2 +- Assets/Resources/Fonts/cyberdyne.ttf | Bin 0 -> 26744 bytes Assets/Resources/Fonts/cyberdyne.ttf.meta | 22 ++++ Assets/Scenes/Runner Game.unity | 123 +++++++++++++++++- Assets/Scripts/Config/GameConfig.cs | 5 +- Assets/Scripts/Model/Game.cs | 8 +- Assets/Scripts/View/GUI/Brackets.meta | 8 ++ .../View/GUI/Brackets/ActionBracket.cs | 51 ++++++++ .../View/GUI/Brackets/ActionBracket.cs.meta | 11 ++ Assets/Scripts/View/GUI/Brackets/Bracket.cs | 98 ++++++++++++++ .../Scripts/View/GUI/Brackets/Bracket.cs.meta | 11 ++ .../HorizontalLayoutWithAnchoredSize.cs | 38 ++++++ .../HorizontalLayoutWithAnchoredSize.cs.meta | 11 ++ .../View/GUI/Brackets/RunnerGameBracket.cs | 39 ++++++ .../GUI/Brackets/RunnerGameBracket.cs.meta | 11 ++ .../Scripts/View/GUI/Brackets/TurnBracket.cs | 17 +++ .../View/GUI/Brackets/TurnBracket.cs.meta | 11 ++ Assets/Scripts/View/GUI/CorpViewConfig.cs | 6 +- Assets/Scripts/View/GUI/GameFlowView.cs | 5 +- .../Scripts/View/GUI/GameObjectExtensions.cs | 18 ++- .../View/GUI/RectTransformExtensions.cs | 21 +++ .../View/GUI/RectTransformExtensions.cs.meta | 11 ++ Assets/Scripts/View/GUI/RunnerViewConfig.cs | 18 +-- .../View/GUI/TimeCross/DayNightCycle.cs | 5 +- .../Scripts/View/GUI/TimeCross/FutureTrack.cs | 4 +- .../Scripts/View/GUI/TimeCross/PresentBox.cs | 9 +- .../Scripts/View/GUI/TimeCross/TimeCross.cs | 8 +- 27 files changed, 530 insertions(+), 41 deletions(-) rename Assets/{Scripts/Model/Choices/Steal.meta => Resources/Fonts.meta} (77%) create mode 100644 Assets/Resources/Fonts/cyberdyne.ttf create mode 100644 Assets/Resources/Fonts/cyberdyne.ttf.meta create mode 100644 Assets/Scripts/View/GUI/Brackets.meta create mode 100644 Assets/Scripts/View/GUI/Brackets/ActionBracket.cs create mode 100644 Assets/Scripts/View/GUI/Brackets/ActionBracket.cs.meta create mode 100644 Assets/Scripts/View/GUI/Brackets/Bracket.cs create mode 100644 Assets/Scripts/View/GUI/Brackets/Bracket.cs.meta create mode 100644 Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs create mode 100644 Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs.meta create mode 100644 Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs create mode 100644 Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs.meta create mode 100644 Assets/Scripts/View/GUI/Brackets/TurnBracket.cs create mode 100644 Assets/Scripts/View/GUI/Brackets/TurnBracket.cs.meta create mode 100644 Assets/Scripts/View/GUI/RectTransformExtensions.cs create mode 100644 Assets/Scripts/View/GUI/RectTransformExtensions.cs.meta diff --git a/Assets/Scripts/Model/Choices/Steal.meta b/Assets/Resources/Fonts.meta similarity index 77% rename from Assets/Scripts/Model/Choices/Steal.meta rename to Assets/Resources/Fonts.meta index 4c5fc5a..1b2f197 100644 --- a/Assets/Scripts/Model/Choices/Steal.meta +++ b/Assets/Resources/Fonts.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ea92e0400d884f24da7a1fd20ab7d203 +guid: 0accb89c98af4554ab34b128e2c543ef folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Resources/Fonts/cyberdyne.ttf b/Assets/Resources/Fonts/cyberdyne.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d6a4d3190469f94362e714e1a5772bafb103772a GIT binary patch literal 26744 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 gameMenu.Resume(); var perception = new RunnerPerception(); @@ -44,6 +46,7 @@ void Start() flowLog.Display(game); var corpView = new CorpViewConfig().Display(game, parts); new RunnerViewConfig().Display(game.runner, flowView, corpView, parts); + new RunnerGameBracket(FindOrFail("Game bracket"), game); game.Start(corpDeck, runnerDeck); } diff --git a/Assets/Scripts/Model/Game.cs b/Assets/Scripts/Model/Game.cs index 56838d2..cb76130 100644 --- a/Assets/Scripts/Model/Game.cs +++ b/Assets/Scripts/Model/Game.cs @@ -13,8 +13,8 @@ public class Game public readonly Runner runner; private readonly Zone playArea; public readonly Checkpoint checkpoint; - public event EventHandler CurrentTurn = delegate { }; - public event EventHandler NextTurn = delegate { }; + public event Action CurrentTurn = delegate { }; + public event Action NextTurn = delegate { }; public event Action Finished = delegate { }; private bool ended = false; private Queue turns = new Queue(); @@ -82,8 +82,8 @@ async private Task StartTurns() private async Task StartNextTurn() { var currentTurn = turns.Dequeue(); - CurrentTurn(this, currentTurn); - NextTurn(this, turns.Peek()); + CurrentTurn(currentTurn); + NextTurn(turns.Peek()); await currentTurn.Start(); } diff --git a/Assets/Scripts/View/GUI/Brackets.meta b/Assets/Scripts/View/GUI/Brackets.meta new file mode 100644 index 0000000..58dd747 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b85d29d05b181614ea70167cf01f14bb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/View/GUI/Brackets/ActionBracket.cs b/Assets/Scripts/View/GUI/Brackets/ActionBracket.cs new file mode 100644 index 0000000..4c9dd61 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/ActionBracket.cs @@ -0,0 +1,51 @@ +using model.play; +using model.timing; +using System.Threading.Tasks; + +namespace view.gui.brackets +{ + public class ActionBracket + { + private readonly ITurn turn; + private readonly int actionOrder; + private readonly Bracket bracket; + + public ActionBracket(ITurn turn, int actionOrder, Bracket bracket) + { + this.turn = turn; + this.actionOrder = actionOrder; + this.bracket = bracket; + turn.TakingAction += UpdateActivation; + turn.ActionTaken += UpdateEffect; + } + + async private Task UpdateActivation(ITurn turn) + { + if (IsPresent()) + { + bracket.Open(); + } + await Task.CompletedTask; + } + + private bool IsPresent() + { + return turn.Clicks.Spent == actionOrder - 1; + } + + private bool IsPast() + { + return turn.Clicks.Spent >= actionOrder; + } + + async private Task UpdateEffect(ITurn turn, Ability action) + { + if (IsPast()) + { + bracket.Collapse(); + } + // action.effect.Graphics; + await Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/View/GUI/Brackets/ActionBracket.cs.meta b/Assets/Scripts/View/GUI/Brackets/ActionBracket.cs.meta new file mode 100644 index 0000000..b24deca --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/ActionBracket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74c1b4483aebac9438462adc385cc481 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/View/GUI/Brackets/Bracket.cs b/Assets/Scripts/View/GUI/Brackets/Bracket.cs new file mode 100644 index 0000000..9538493 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/Bracket.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace view.gui.brackets +{ + public class Bracket + { + private static Font FONT = Resources.Load("Fonts/cyberdyne"); + private static float EDGE_WIDTH_RATIO = 0.05f; + + private readonly GameObject container; + private GameObject opening; + private GameObject content; + private GameObject closing; + + public Bracket(string name, GameObject container) : this(name, container, siblingIndex: 0) { } + + public Bracket(string name, GameObject container, int siblingIndex) + { + this.container = container; + opening = RenderOpening(siblingIndex, name); + content = RenderContent(siblingIndex + 1); + closing = RenderClosing(siblingIndex + 2); + Collapse(); + } + + private GameObject RenderOpening(int siblingIndex, string name) + { + var gameObject = new GameObject("Opening").AttachTo(container); + gameObject.transform.SetSiblingIndex(siblingIndex); + var image = gameObject.AddComponent(); + image.color = Color.magenta; + var rect = gameObject.GetComponent(); + rect.anchorMin = new Vector2(0.00f, 0.05f); + rect.anchorMax = new Vector2(EDGE_WIDTH_RATIO, 0.95f); + rect.offsetMin = Vector2.zero; + rect.offsetMax = Vector2.zero; + var label = new GameObject("Label").AttachTo(gameObject); + var text = label.AddComponent(); + text.font = FONT; + text.supportRichText = false; + text.alignByGeometry = true; + text.alignment = TextAnchor.MiddleCenter; + text.verticalOverflow = VerticalWrapMode.Overflow; + text.horizontalOverflow = HorizontalWrapMode.Overflow; + text.raycastTarget = false; + text.maskable = false; + text.text = name; + label.GetComponent().Expand(); + label.transform.rotation *= Quaternion.Euler(0.0f, 0.0f, 90.0f); + return gameObject; + } + + private GameObject RenderContent(int siblingIndex) + { + var gameObject = new GameObject("Content").AttachTo(container); + gameObject.transform.SetSiblingIndex(siblingIndex); + var image = gameObject.AddComponent(); + image.color = Color.white - new Color(0, 0, 0, 0.50f); + var rect = gameObject.GetComponent(); + rect.anchorMin = new Vector2(0.00f, 0.15f); + rect.anchorMax = new Vector2(0.30f, 0.85f); + rect.offsetMin = Vector2.zero; + rect.offsetMax = Vector2.zero; + return gameObject; + } + + private GameObject RenderClosing(int siblingIndex) + { + var gameObject = new GameObject("Closing").AttachTo(container); + gameObject.transform.SetSiblingIndex(siblingIndex); + var image = gameObject.AddComponent(); + image.color = Color.cyan; + var rect = gameObject.GetComponent(); + rect.anchorMin = new Vector2(0.00f, 0.05f); + rect.anchorMax = new Vector2(EDGE_WIDTH_RATIO, 0.95f); + rect.offsetMin = Vector2.zero; + rect.offsetMax = Vector2.zero; + return gameObject; + } + + public Bracket Nest(string name) + { + var nestedIndex = closing.transform.GetSiblingIndex() - 1; + return new Bracket(name, container, nestedIndex); + } + + public void Open() + { + content.SetActive(true); + } + + public void Collapse() + { + content.SetActive(false); + } + } +} diff --git a/Assets/Scripts/View/GUI/Brackets/Bracket.cs.meta b/Assets/Scripts/View/GUI/Brackets/Bracket.cs.meta new file mode 100644 index 0000000..eea7ddb --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/Bracket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4863ac71791743f4ea9298830c089109 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs b/Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs new file mode 100644 index 0000000..bf91087 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace view.gui.brackets +{ + public class HorizontalLayoutWithAnchoredSize : MonoBehaviour, ILayoutGroup + { + public void LayOutHorizontally() + { + var offset = 0.0f; + foreach (Transform child in gameObject.transform) + { + if (!child.gameObject.activeSelf) + { + continue; + } + if (child.gameObject.TryGetComponent(out var rect)) + { + rect.offsetMin = new Vector2(offset, 0); + rect.offsetMax = new Vector2(offset, 0); + UnityEngine.Debug.Log("Rect width: " + rect.rect.width); + offset += rect.rect.width; + } + } + UnityEngine.Debug.Log("Shifted for max offset of " + offset); + } + + void ILayoutController.SetLayoutHorizontal() + { + LayOutHorizontally(); + } + + void ILayoutController.SetLayoutVertical() + { + LayOutHorizontally(); + } + } +} diff --git a/Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs.meta b/Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs.meta new file mode 100644 index 0000000..62cdd49 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/HorizontalLayoutWithAnchoredSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ada83a59a3a8dd4d98836dfa50d977a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs b/Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs new file mode 100644 index 0000000..e1c31a1 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs @@ -0,0 +1,39 @@ +using model; +using model.timing; +using UnityEngine; + +namespace view.gui.brackets +{ + class RunnerGameBracket + { + private Bracket bracket; + + public RunnerGameBracket(GameObject container, Game game) + { + bracket = new Bracket("Game", container); + container.AddComponent(); + game.CurrentTurn += DisplayTurn; + } + + private void DisplayTurn(ITurn turn) + { + switch (turn.Side) + { + case Side.RUNNER: DisplayRunnerTurn(turn); break; + case Side.CORP: DisplayCorpTurn(turn); break; + } + } + + private void DisplayRunnerTurn(ITurn turn) + { + var turnContainer = bracket.Nest("Runner turn"); + new TurnBracket(turnContainer, turn); + } + + private void DisplayCorpTurn(ITurn turn) + { + var turnContainer = bracket.Nest("Corp turn"); + new TurnBracket(turnContainer, turn); + } + } +} diff --git a/Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs.meta b/Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs.meta new file mode 100644 index 0000000..bfb4578 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/RunnerGameBracket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07c1b3d73b990434cb2fa1b202fdfc4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/View/GUI/Brackets/TurnBracket.cs b/Assets/Scripts/View/GUI/Brackets/TurnBracket.cs new file mode 100644 index 0000000..ff209d9 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/TurnBracket.cs @@ -0,0 +1,17 @@ +using model.timing; + +namespace view.gui.brackets +{ + internal class TurnBracket + { + public TurnBracket(Bracket bracket, ITurn turn) + { + for (int i = 0; i < turn.Clicks.NextReplenishment; i++) + { + int actionOrder = i + 1; + var actionBracket = bracket.Nest("Action " + actionOrder); + new ActionBracket(turn, actionOrder, actionBracket); + } + } + } +} diff --git a/Assets/Scripts/View/GUI/Brackets/TurnBracket.cs.meta b/Assets/Scripts/View/GUI/Brackets/TurnBracket.cs.meta new file mode 100644 index 0000000..eff5985 --- /dev/null +++ b/Assets/Scripts/View/GUI/Brackets/TurnBracket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5c871437f95405459f879515a137a67 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/View/GUI/CorpViewConfig.cs b/Assets/Scripts/View/GUI/CorpViewConfig.cs index 5019a92..2bc4bed 100644 --- a/Assets/Scripts/View/GUI/CorpViewConfig.cs +++ b/Assets/Scripts/View/GUI/CorpViewConfig.cs @@ -1,5 +1,5 @@ using model; -using UnityEngine; +using static view.gui.GameObjectExtensions; namespace view.gui { @@ -8,10 +8,10 @@ public class CorpViewConfig public CorpView Display(Game game, BoardParts parts) { var zones = game.corp.zones; - var credits = GameObject.Find("Corp/Credits"); + var credits = FindOrFail("Corp/Credits"); game.corp.credits.Changed += credits.AddComponent().UpdateBalance; game.corp.credits.Changed += credits.AddComponent().UpdateBalance; - var servers = new ServerRow(GameObject.Find("Servers"), parts, zones); + var servers = new ServerRow(FindOrFail("Servers"), parts, zones); var archivesBox = servers.Box(zones.archives); archivesBox.Printer.Sideways = true; var rd = servers.Box(zones.rd).Printer.PrintCorpFacedown("Top of R&D"); diff --git a/Assets/Scripts/View/GUI/GameFlowView.cs b/Assets/Scripts/View/GUI/GameFlowView.cs index 4eaa1fe..b31d3a6 100644 --- a/Assets/Scripts/View/GUI/GameFlowView.cs +++ b/Assets/Scripts/View/GUI/GameFlowView.cs @@ -3,6 +3,7 @@ using model.timing; using UnityEngine; using view.gui.timecross; +using static view.gui.GameObjectExtensions; namespace view.gui { @@ -23,8 +24,8 @@ public void Display(GameObject board, Game game) private PaidWindowView WirePaidWindow(PaidWindow window) { - var pass = GameObject.Find("Pass").AddComponent(); - PaidChoice = GameObject.Find("Paid choice").AddComponent(); + var pass = FindOrFail("Pass").AddComponent(); + PaidChoice = FindOrFail("Paid choice").AddComponent(); return new PaidWindowView(window, pass, PaidChoice); } diff --git a/Assets/Scripts/View/GUI/GameObjectExtensions.cs b/Assets/Scripts/View/GUI/GameObjectExtensions.cs index c20ef36..eb5eaec 100644 --- a/Assets/Scripts/View/GUI/GameObjectExtensions.cs +++ b/Assets/Scripts/View/GUI/GameObjectExtensions.cs @@ -1,12 +1,24 @@ -using UnityEngine; +using System; +using UnityEngine; namespace view.gui { public static class GameObjectExtensions { - public static void AttachTo(this GameObject child, GameObject parent) + public static GameObject AttachTo(this GameObject child, GameObject parent) { child.transform.SetParent(parent.transform, false); + return child; + } + + public static GameObject FindOrFail(string name) + { + var gameObject = GameObject.Find(name); + if (gameObject == null) + { + throw new SystemException("Cannot find game object named " + name + ". Maybe it's inactive?"); + } + return gameObject; } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/View/GUI/RectTransformExtensions.cs b/Assets/Scripts/View/GUI/RectTransformExtensions.cs new file mode 100644 index 0000000..f91d9f5 --- /dev/null +++ b/Assets/Scripts/View/GUI/RectTransformExtensions.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace view.gui +{ + public static class RectTransformExtensions + { + public static RectTransform AddCleanRectangle(this GameObject gameObject) + { + return gameObject.AddComponent().Expand(); + } + + public static RectTransform Expand(this RectTransform rect) + { + rect.anchorMin = Vector2.zero; + rect.anchorMax = Vector2.one; + rect.offsetMin = Vector2.zero; + rect.offsetMax = Vector2.zero; + return rect; + } + } +} diff --git a/Assets/Scripts/View/GUI/RectTransformExtensions.cs.meta b/Assets/Scripts/View/GUI/RectTransformExtensions.cs.meta new file mode 100644 index 0000000..d664f08 --- /dev/null +++ b/Assets/Scripts/View/GUI/RectTransformExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: baee744988816e148b3c46458f7ed243 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/View/GUI/RunnerViewConfig.cs b/Assets/Scripts/View/GUI/RunnerViewConfig.cs index 4f96beb..21774fe 100644 --- a/Assets/Scripts/View/GUI/RunnerViewConfig.cs +++ b/Assets/Scripts/View/GUI/RunnerViewConfig.cs @@ -1,6 +1,6 @@ using controller; using model; -using UnityEngine; +using static view.gui.GameObjectExtensions; namespace view.gui { @@ -9,18 +9,18 @@ public class RunnerViewConfig public void Display(Runner runner, GameFlowView flowView, CorpView corpView, BoardParts parts) { var presentBox = flowView.TimeCross.PresentBox; - RigGrid rigGrid = new RigGrid(GameObject.Find("Rig"), runner, flowView.PaidChoice, parts); - HeapPile heapPile = new HeapPile(GameObject.Find("Heap"), runner, parts); - GripFan gripFan = new GripFan(GameObject.Find("Grip"), runner, presentBox.RunnerActionPhase.AddComponent(), rigGrid.DropZone, heapPile.DropZone, parts); - new StackPile(GameObject.Find("Stack"), runner, gripFan.DropZone, parts); - new ZoneBox(GameObject.Find("Runner/Left hand/Score"), parts).Represent(runner.zones.score.zone); - runner.zones.identity.Added += (zone, identity) => parts.Print(GameObject.Find("Runner/Right hand/Core/Identity")).Print(identity); + RigGrid rigGrid = new RigGrid(FindOrFail("Rig"), runner, flowView.PaidChoice, parts); + HeapPile heapPile = new HeapPile(FindOrFail("Heap"), runner, parts); + GripFan gripFan = new GripFan(FindOrFail("Grip"), runner, presentBox.RunnerActionPhase.AddComponent(), rigGrid.DropZone, heapPile.DropZone, parts); + new StackPile(FindOrFail("Stack"), runner, gripFan.DropZone, parts); + new ZoneBox(FindOrFail("Runner/Left hand/Score"), parts).Represent(runner.zones.score.zone); + runner.zones.identity.Added += (zone, identity) => parts.Print(FindOrFail("Runner/Right hand/Core/Identity")).Print(identity); new RunInitiation( - gameObject: GameObject.Find("Run"), + gameObject: FindOrFail("Run"), serverRow: corpView.serverRow, runner: runner ); - var credits = GameObject.Find("Runner/Credits"); + var credits = FindOrFail("Runner/Credits"); presentBox .BankCredit .AddComponent() diff --git a/Assets/Scripts/View/GUI/TimeCross/DayNightCycle.cs b/Assets/Scripts/View/GUI/TimeCross/DayNightCycle.cs index bbd6146..d7e82a8 100644 --- a/Assets/Scripts/View/GUI/TimeCross/DayNightCycle.cs +++ b/Assets/Scripts/View/GUI/TimeCross/DayNightCycle.cs @@ -2,6 +2,7 @@ using UnityEngine.UI; using model; using model.timing; +using static view.gui.GameObjectExtensions; namespace view.gui.timecross { @@ -11,14 +12,14 @@ public class DayNightCycle private Color midnight = new Color(23, 17, 44, 255) / 255; private Sprite dayCity = Resources.Load("Images/Background/photo-of-cityscape-on-a-gloomy-day-2137195"); private Sprite nightCity = Resources.Load("Images/Background/high-rise-photography-of-city-2039630"); - private Image background = GameObject.Find("Board").GetComponent(); + private Image background = FindOrFail("Board").GetComponent(); public void Wire(Game game) { game.CurrentTurn += UpdateBackground; } - void UpdateBackground(object sender, ITurn turn) + void UpdateBackground(ITurn turn) { switch (turn.Side) { diff --git a/Assets/Scripts/View/GUI/TimeCross/FutureTrack.cs b/Assets/Scripts/View/GUI/TimeCross/FutureTrack.cs index 07b69f0..521fb14 100644 --- a/Assets/Scripts/View/GUI/TimeCross/FutureTrack.cs +++ b/Assets/Scripts/View/GUI/TimeCross/FutureTrack.cs @@ -53,13 +53,13 @@ void Awake() background = gameObject.AddComponent(); } - internal void DisplayCurrent(object sender, ITurn turn) + internal void DisplayCurrent(ITurn turn) { dayNight.Paint(background, turn.Side); TrackClicks(turn, UpdateRemainingClicks); } - internal void DisplayNext(object sender, ITurn turn) + internal void DisplayNext(ITurn turn) { dayNight.Paint(background, turn.Side); TrackClicks(turn, UpdateNextClicks); diff --git a/Assets/Scripts/View/GUI/TimeCross/PresentBox.cs b/Assets/Scripts/View/GUI/TimeCross/PresentBox.cs index 08e4988..3dde621 100644 --- a/Assets/Scripts/View/GUI/TimeCross/PresentBox.cs +++ b/Assets/Scripts/View/GUI/TimeCross/PresentBox.cs @@ -5,6 +5,7 @@ using model.timing; using UnityEngine; using UnityEngine.UI; +using static view.gui.GameObjectExtensions; namespace view.gui.timecross { @@ -31,10 +32,10 @@ internal void Wire(Game game, DayNightCycle dayNight, FutureTrack future) private void WireRunnerActionPhase(Game game) { - RunnerActionPhase = GameObject.Find("Runner action phase"); + RunnerActionPhase = FindOrFail("Runner action phase"); var background = RunnerActionPhase.GetComponent(); dayNight.Paint(background, Side.RUNNER); - BankCredit = GameObject.Find("Bank/Credit"); + BankCredit = FindOrFail("Bank/Credit"); SetRunnerActions(false); game.runner.turn.TakingAction += BeginRunnerAction; game.runner.turn.ActionTaken += EndRunnerAction; @@ -48,7 +49,7 @@ private void SetRunnerActions(bool takingAction) private void WireCorpActionPhase(Game game) { - corpActionPhase = GameObject.Find("Corp action phase"); + corpActionPhase = FindOrFail("Corp action phase"); var background = corpActionPhase.GetComponent(); dayNight.Paint(background, Side.CORP); corpActionPhase.SetActive(false); @@ -58,7 +59,7 @@ private void WireCorpActionPhase(Game game) private void WireDiscardPhase(Game game) { - discardPhase = GameObject.Find("Discard phase"); + discardPhase = FindOrFail("Discard phase"); discardBackground = discardPhase.GetComponent(); discardPhase.SetActive(false); game.runner.zones.grip.DiscardingOne += RenderRunnerDiscarding; diff --git a/Assets/Scripts/View/GUI/TimeCross/TimeCross.cs b/Assets/Scripts/View/GUI/TimeCross/TimeCross.cs index d0d7bd4..f6e2b33 100644 --- a/Assets/Scripts/View/GUI/TimeCross/TimeCross.cs +++ b/Assets/Scripts/View/GUI/TimeCross/TimeCross.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using static view.gui.GameObjectExtensions; using model; namespace view.gui.timecross @@ -9,12 +9,12 @@ public class TimeCross public TimeCross(Game game, DayNightCycle dayNight) { - var pastTrack = GameObject.Find("Past").AddComponent(); + var pastTrack = FindOrFail("Past").AddComponent(); pastTrack.DayNight = dayNight; pastTrack.Wire(game); - var futureTrack = GameObject.Find("Future").AddComponent(); + var futureTrack = FindOrFail("Future").AddComponent(); futureTrack.Wire(game, dayNight); - PresentBox = GameObject.Find("Present").AddComponent(); + PresentBox = FindOrFail("Present").AddComponent(); PresentBox.Wire(game, dayNight, futureTrack); } } From 53417bd37ca6407fc2a2fd7673beb2a6d412f189 Mon Sep 17 00:00:00 2001 From: Maciej Kwidzinski Date: Tue, 6 Apr 2021 19:15:01 +0200 Subject: [PATCH 2/2] Add vertical margin to nested brackets --- Assets/Scripts/View/GUI/Brackets/Bracket.cs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Assets/Scripts/View/GUI/Brackets/Bracket.cs b/Assets/Scripts/View/GUI/Brackets/Bracket.cs index 9538493..3262449 100644 --- a/Assets/Scripts/View/GUI/Brackets/Bracket.cs +++ b/Assets/Scripts/View/GUI/Brackets/Bracket.cs @@ -12,12 +12,14 @@ public class Bracket private GameObject opening; private GameObject content; private GameObject closing; + private float margin; - public Bracket(string name, GameObject container) : this(name, container, siblingIndex: 0) { } + public Bracket(string name, GameObject container) : this(name, container, siblingIndex: 0, margin: 0.00f) { } - public Bracket(string name, GameObject container, int siblingIndex) + private Bracket(string name, GameObject container, int siblingIndex, float margin) { this.container = container; + this.margin = margin; opening = RenderOpening(siblingIndex, name); content = RenderContent(siblingIndex + 1); closing = RenderClosing(siblingIndex + 2); @@ -31,8 +33,8 @@ private GameObject RenderOpening(int siblingIndex, string name) var image = gameObject.AddComponent(); image.color = Color.magenta; var rect = gameObject.GetComponent(); - rect.anchorMin = new Vector2(0.00f, 0.05f); - rect.anchorMax = new Vector2(EDGE_WIDTH_RATIO, 0.95f); + rect.anchorMin = new Vector2(0.00f, margin); + rect.anchorMax = new Vector2(EDGE_WIDTH_RATIO, 1.00f - margin); rect.offsetMin = Vector2.zero; rect.offsetMax = Vector2.zero; var label = new GameObject("Label").AttachTo(gameObject); @@ -58,8 +60,8 @@ private GameObject RenderContent(int siblingIndex) var image = gameObject.AddComponent(); image.color = Color.white - new Color(0, 0, 0, 0.50f); var rect = gameObject.GetComponent(); - rect.anchorMin = new Vector2(0.00f, 0.15f); - rect.anchorMax = new Vector2(0.30f, 0.85f); + rect.anchorMin = new Vector2(0.00f, margin); + rect.anchorMax = new Vector2(0.30f, 1.00f - margin); rect.offsetMin = Vector2.zero; rect.offsetMax = Vector2.zero; return gameObject; @@ -72,8 +74,8 @@ private GameObject RenderClosing(int siblingIndex) var image = gameObject.AddComponent(); image.color = Color.cyan; var rect = gameObject.GetComponent(); - rect.anchorMin = new Vector2(0.00f, 0.05f); - rect.anchorMax = new Vector2(EDGE_WIDTH_RATIO, 0.95f); + rect.anchorMin = new Vector2(0.00f, margin); + rect.anchorMax = new Vector2(EDGE_WIDTH_RATIO, 1.00f - margin); rect.offsetMin = Vector2.zero; rect.offsetMax = Vector2.zero; return gameObject; @@ -82,7 +84,7 @@ private GameObject RenderClosing(int siblingIndex) public Bracket Nest(string name) { var nestedIndex = closing.transform.GetSiblingIndex() - 1; - return new Bracket(name, container, nestedIndex); + return new Bracket(name, container, nestedIndex, margin + 0.08f); } public void Open()