From d89a37a6dbca13fa9768410248b6529e48324457 Mon Sep 17 00:00:00 2001 From: Joshua Reason Date: Tue, 28 May 2019 22:37:46 +1000 Subject: [PATCH] Got combined blocks moving faster than single blocks so that animate in the same amount of time + fixed bug where players were waiting for other players to finish an action --- .../Plugins/IngameDebugConsole/Android.meta | 8 -- .../Plugins/IngameDebugConsole/Prefabs.meta | 8 -- .../Plugins/IngameDebugConsole/Scripts.meta | 8 -- .../IngameDebugConsole/Sprites/Unused.meta | 8 -- Assets/Scripts/BlockInput.cs | 3 +- .../{Models.meta => Scripts/Components.meta} | 2 +- Assets/Scripts/Logic/BlockReader.cs | 14 ++-- Assets/Scripts/Logic/Blocks/CombinedBlock.cs | 12 ++- Assets/Scripts/Logic/Blocks/EditableBlock.cs | 1 + Assets/Scripts/Logic/Blocks/LogicBlock.cs | 20 +++-- Assets/Scripts/LogicBlocks.meta | 8 -- Assets/Scripts/Managers/GameManager.cs | 79 ++++++++++++++----- 12 files changed, 98 insertions(+), 73 deletions(-) delete mode 100644 Assets/Plugins/IngameDebugConsole/Android.meta delete mode 100644 Assets/Plugins/IngameDebugConsole/Prefabs.meta delete mode 100644 Assets/Plugins/IngameDebugConsole/Scripts.meta delete mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta rename Assets/{Models.meta => Scripts/Components.meta} (77%) delete mode 100644 Assets/Scripts/LogicBlocks.meta diff --git a/Assets/Plugins/IngameDebugConsole/Android.meta b/Assets/Plugins/IngameDebugConsole/Android.meta deleted file mode 100644 index 12049b6..0000000 --- a/Assets/Plugins/IngameDebugConsole/Android.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3d7d7a61a5341904eb3c65af025b1d86 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs.meta b/Assets/Plugins/IngameDebugConsole/Prefabs.meta deleted file mode 100644 index 6aa8bf2..0000000 --- a/Assets/Plugins/IngameDebugConsole/Prefabs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7dbc36665bc0d684db9a4447e27a7a4b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts.meta b/Assets/Plugins/IngameDebugConsole/Scripts.meta deleted file mode 100644 index 72dcaac..0000000 --- a/Assets/Plugins/IngameDebugConsole/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 860c08388401a6d4e858fe4910ea9337 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta b/Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta deleted file mode 100644 index f3769b1..0000000 --- a/Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f6caae32d463529478f2186f47c2e3fe -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/BlockInput.cs b/Assets/Scripts/BlockInput.cs index 2b4e642..6750d7e 100644 --- a/Assets/Scripts/BlockInput.cs +++ b/Assets/Scripts/BlockInput.cs @@ -20,7 +20,8 @@ public class BlockInput : MonoBehaviour [ContextMenu("Read Next")] public void ReadNext() { - blockReader.Read(character, waitTime); + float TotalAnimationTime; + blockReader.Read(character, waitTime,out TotalAnimationTime); } public void ReadAll() diff --git a/Assets/Models.meta b/Assets/Scripts/Components.meta similarity index 77% rename from Assets/Models.meta rename to Assets/Scripts/Components.meta index 5346456..5a95b09 100644 --- a/Assets/Models.meta +++ b/Assets/Scripts/Components.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 296bd90e667df1f4697823a0aa45acf0 +guid: 8d7394d70ec233849a60a26da5f23b75 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Logic/BlockReader.cs b/Assets/Scripts/Logic/BlockReader.cs index 8dd5dca..157426a 100644 --- a/Assets/Scripts/Logic/BlockReader.cs +++ b/Assets/Scripts/Logic/BlockReader.cs @@ -56,28 +56,32 @@ public class BlockReader /// /// Character to control /// Returns false if other readers should wait for this one to run again - public bool Read(Character character,float animationTime) + public bool Read(Character character,float speedMultiplier, out float TotalAnimationTime) { - //return that this is done if no more blocks left in chain + //return that this is done if no more blocks left in chain if (LogicChain.Count <= currentBlockIndex) + { + TotalAnimationTime = 0; return true; + } //get current Block LogicBlock currentBlock = LogicChain[currentBlockIndex]; //apply blocks to character - currentBlock.Run(character, animationTime); + bool runAgainNot = currentBlock.Run(character, speedMultiplier,out TotalAnimationTime); //if the block is finished reset it and move on to next one //(it might not be finished if it is a for loop or something) - if (currentBlock.isFinished()) + bool isFinished = currentBlock.isFinished(); + if (isFinished) { currentBlock.Reset(); currentBlockIndex++; } //Should other readers wait for this one - return (currentBlock.isFinished() || currentBlock.WaitUntilFinished); + return (runAgainNot || !currentBlock.WaitUntilFinished); } /// diff --git a/Assets/Scripts/Logic/Blocks/CombinedBlock.cs b/Assets/Scripts/Logic/Blocks/CombinedBlock.cs index bcbeaed..ad25590 100644 --- a/Assets/Scripts/Logic/Blocks/CombinedBlock.cs +++ b/Assets/Scripts/Logic/Blocks/CombinedBlock.cs @@ -16,15 +16,21 @@ public class CombinedBlock : LogicBlock public BlockReader blockReader = new BlockReader(); #endregion Inspector Variables + #region ReadOnly Variables + public override bool WaitUntilFinished { get { if (blockReader != null && blockReader.CurrentBlock != null) return (blockReader.CurrentBlock.WaitUntilFinished || base.WaitUntilFinished); else return base.WaitUntilFinished; } } + #endregion + #region Private Variables - + #endregion Private Variables - public override bool Run(Character player, float animationTime) + public override bool Run(Character player, float animationTime, out float TotalAnimationTime) { BlockLogic(player,animationTime); + blockReader.Read(player, animationTime / SpeedMultiplier, out TotalAnimationTime); + if (blockReader.Finished) { blockReader.Reset(); @@ -36,7 +42,7 @@ public class CombinedBlock : LogicBlock protected override void BlockLogic(Character player, float animationTime) { - blockReader.Read(player,animationTime); + } diff --git a/Assets/Scripts/Logic/Blocks/EditableBlock.cs b/Assets/Scripts/Logic/Blocks/EditableBlock.cs index dca4a9c..d115cd6 100644 --- a/Assets/Scripts/Logic/Blocks/EditableBlock.cs +++ b/Assets/Scripts/Logic/Blocks/EditableBlock.cs @@ -27,4 +27,5 @@ public class EditableBlock : CombinedBlock } + } diff --git a/Assets/Scripts/Logic/Blocks/LogicBlock.cs b/Assets/Scripts/Logic/Blocks/LogicBlock.cs index 8b78e6f..392ff85 100644 --- a/Assets/Scripts/Logic/Blocks/LogicBlock.cs +++ b/Assets/Scripts/Logic/Blocks/LogicBlock.cs @@ -22,12 +22,16 @@ public abstract class LogicBlock : ScriptableObject [SerializeField] [Header("Base Settings")] [Tooltip("Wait until this block is resolved before moving to next")] - public bool WaitUntilFinished = false; + protected bool _WaitUntilFinished = false; [SerializeField] [Tooltip("Amount of times to run this Block before moving to next")] protected int RepeatAmount = 1; + [SerializeField] + [Tooltip("Speed this block will be played back at. (Default = 1)")] + protected float SpeedMultiplier = 1; + #endregion Inspector Fields #region ReadOnly Variables @@ -35,6 +39,8 @@ public abstract class LogicBlock : ScriptableObject [HideInInspector] public bool hasBeenRemoved = false; + + public virtual bool WaitUntilFinished { get { return _WaitUntilFinished; } } #endregion #region private variables @@ -52,10 +58,11 @@ public abstract class LogicBlock : ScriptableObject /// /// Player which will be affected by the block /// returns true if block is finished - public virtual bool Run(Character player, float animationTime) + public virtual bool Run(Character player, float animationSpeed, out float TotalAnimationTime) { RepeatCount++; - BlockLogic(player, animationTime); + TotalAnimationTime = animationSpeed / SpeedMultiplier; + BlockLogic(player, TotalAnimationTime); if(GlobalVariables.playerMoves == true){ player.DisplayBlock(this); @@ -106,7 +113,6 @@ public abstract class LogicBlock : ScriptableObject return (RepeatCount == RepeatAmount); } - #region Serialisation Functions /// /// Copies data from BlockToken to this Block @@ -116,9 +122,10 @@ public abstract class LogicBlock : ScriptableObject { Color = token.Color; _DisplayName = token._DisplayName; - WaitUntilFinished = token.WaitUntilFinished; + _WaitUntilFinished = token.WaitUntilFinished; RepeatAmount = token.RepeatAmount; name = token.ObjectName; + SpeedMultiplier = token.SpeedMultiplier; } /// @@ -135,6 +142,7 @@ public abstract class LogicBlock : ScriptableObject token.WaitUntilFinished = WaitUntilFinished; token.RepeatAmount = RepeatAmount; token.ObjectName = name; + token.SpeedMultiplier = SpeedMultiplier; return token; } @@ -187,6 +195,8 @@ public class BlockToken public int RepeatAmount; + public float SpeedMultiplier; + public BlockToken(LogicBlock block) { blockType = block.GetType(); diff --git a/Assets/Scripts/LogicBlocks.meta b/Assets/Scripts/LogicBlocks.meta deleted file mode 100644 index 98af9d1..0000000 --- a/Assets/Scripts/LogicBlocks.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8936b441d7647f74884c94f97bfb8931 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Managers/GameManager.cs b/Assets/Scripts/Managers/GameManager.cs index 88c03f7..c6f98d5 100644 --- a/Assets/Scripts/Managers/GameManager.cs +++ b/Assets/Scripts/Managers/GameManager.cs @@ -105,31 +105,46 @@ public class GameManager : MonoBehaviour { playerArray.ForEach(p => p.recievedList = false); + //while (playerArray.Any(p => !p.blockReader.Finished)) + //{ + // foreach (PlayerData player in playerArray) + // { + // if (!player.waiting) + // { + // if (player.blockReader.CurrentBlock != null && !player.blockReader.CurrentBlock.hasBeenRemoved) + // { + // //Debug.Log("used Block: " + player.blockReader.CurrentBlock.name); + // player.client.Inventory.Remove(player.blockReader.CurrentBlock); + // player.blockReader.CurrentBlock.hasBeenRemoved = true; + // } + // player.waiting = player.blockReader.Read(player.character, AnimationTime); + // } + // } + // + // yield return new WaitForSeconds(AnimationTime); + // + // + // + // if (playerArray.All(p => p.waiting)) + // { + // playerArray.ForEach(p => p.waiting = false); + // Debug.Log("Finished one move"); + // } + //} + + Debug.Log("Doing Round Routine"); + while (playerArray.Any(p => !p.blockReader.Finished)) { + Debug.Log("One Move"); foreach (PlayerData player in playerArray) - { - if (!player.waiting) - { - if (player.blockReader.CurrentBlock != null && !player.blockReader.CurrentBlock.hasBeenRemoved) - { - //Debug.Log("used Block: " + player.blockReader.CurrentBlock.name); - player.client.Inventory.Remove(player.blockReader.CurrentBlock); - player.blockReader.CurrentBlock.hasBeenRemoved = true; - } - player.waiting = player.blockReader.Read(player.character, AnimationTime); - } - } + StartCoroutine(RunOnce(player)); - yield return new WaitForSeconds(AnimationTime); + //wait until all players have finished + yield return new WaitUntil(() => playerArray.All(p => p.waiting)); gamemode.FinishedMove(playerArray.ToArray()); - if (playerArray.All(p => p.waiting)) - { - playerArray.ForEach(p => p.waiting = false); - Debug.Log("Finished one move"); - } } if (gamemode.isGameOver(playerArray.ToArray())) @@ -175,6 +190,34 @@ public class GameManager : MonoBehaviour { server.server.RegisterHandler(LogicProtocols.SendLogicList, RecieveLogicList); } + + private IEnumerator RunOnce(PlayerData data) + { + + + data.waiting = false; + bool blockFinished = false; + float waitTime; + while (!blockFinished && !data.blockReader.Finished) + { + Debug.Log(data.client + "Moving once"); + + if (data.blockReader.CurrentBlock != null && !data.blockReader.CurrentBlock.hasBeenRemoved) + { + data.client.Inventory.Remove(data.blockReader.CurrentBlock); + data.blockReader.CurrentBlock.hasBeenRemoved = true; + } + + blockFinished = data.blockReader.Read(data.character, AnimationTime,out waitTime); + + Debug.Log("Waiting: " + waitTime); + yield return new WaitForSeconds(waitTime); + } + + data.waiting = true; + } + + } public class PlayerData