public VisualizerTurn GetTurn(string playerBoard)
        {
            GameState  gameState  = new GameState();
            GameChange gameChange = new GameChange();

            gameState.PlayerNames["player"] = new Player()
            {
                Character = new Character()
                {
                    Name     = "player",
                    IsDead   = true,
                    Position = new Position()
                    {
                        BoardId = playerBoard,
                        X       = 0,
                        Y       = 0
                    }
                }
            };

            gameChange.CharacterChanges["player"] = new CharacterChange()
            {
                Died      = true,
                Respawned = false,
                Decision  = new CharacterDecision()
            };

            VisualizerTurn turn = new VisualizerTurn()
            {
                Change = gameChange,
                State  = gameState,
            };

            return(turn);
        }
Exemple #2
0
        /// <summary>
        /// Translate from test change to change
        /// </summary>
        /// <param name="testChange"></param>
        /// <returns></returns>
        private GameChange GetChange(TestGameChange testChange)
        {
            var gameChange = new GameChange();

            foreach (TestCharacterChange testCharacterChange in testChange.CharacterChanges)
            {
                var characterChange = new CharacterChange();
                characterChange.Died      = testCharacterChange.Died;
                characterChange.Respawned = testCharacterChange.Respawned;
                characterChange.Decision  = new CharacterDecision()
                {
                    DecisionType = testCharacterChange.DecisionType
                };

                if (testCharacterChange.Path != null)
                {
                    foreach (var testPosition in testCharacterChange.Path)
                    {
                        characterChange.Path.Add(new PPosition()
                        {
                            X       = testPosition.X,
                            Y       = testPosition.Y,
                            BoardId = testPosition.BoardID,
                        });
                    }
                }

                gameChange.CharacterChanges.Add(
                    testCharacterChange.Entity,
                    characterChange);
            }

            return(gameChange);
        }
        /// <summary>
        /// Create a task batch from a turn
        /// </summary>
        /// <param name="turn">the turn</param>
        /// <param name="sceneConfiguration">
        /// configuration of this scene
        /// </param>
        /// <param name="boardPositionLookUp">lookup service</param>
        /// <returns></returns>
        internal static TasksBatch ToTasksBatch(
            this VisualizerTurn turn,
            SceneConfiguration sceneConfiguration,
            BoardPositionLookUp boardPositionLookUp)
        {
            GameChange gameChange = turn.Change;
            GameState  gameState  = turn.State;

            TasksBatch batch = new TasksBatch();
            var        ignoreForHubUpdate = new HashSet <string>();

            ProcessCharacterChanges(
                sceneConfiguration,
                boardPositionLookUp,
                gameChange,
                gameState,
                batch,
                ignoreForHubUpdate);

            ProcessTileChanges(sceneConfiguration, gameState, gameChange, batch);

            ProcessGameState(batch, sceneConfiguration, gameState, ignoreForHubUpdate);

            return(batch);
        }
        private static void ProcessTileChanges(
            SceneConfiguration configuration,
            GameState gameState,
            GameChange gameChange,
            TasksBatch batch)
        {
            if (gameChange == null || gameState == null)
            {
                return;
            }

            if (!gameState.BoardNames.ContainsKey(configuration.BoardName))
            {
                return;
            }

            IO.Models.Board board = gameState.BoardNames[configuration.BoardName];

            foreach (var change in gameChange.TileItemChanges)
            {
                if (change.BoardId != configuration.BoardName)
                {
                    continue;
                }

                Tile tile = board.Grid[change.X * board.Height + change.Y];
                batch.Add(
                    new UpdateTileItemTask(
                        new Vector2Int(change.X, change.Y),
                        tile.Items.Count > 0));
            }
        }
Exemple #5
0
        private void OnGameStateChanged(GameChange gameChange)
        {
            EventHandler <GameStateChangedEventArgs> temp = GameStateChanged;

            if (temp != null)
            {
                if (synchronizingObject != null)
                {
                    synchronizingObject.Invoke(temp, new object[] { new GameStateChangedEventArgs(_board.State, gameChange, CurrentPlayer) });
                }
                else
                {
                    temp(this, new GameStateChangedEventArgs(_board.State, gameChange, CurrentPlayer));
                }
            }

            switch (gameChange)
            {
            case GameChange.Reset:
                OnGameReset();
                break;

            case GameChange.Over:
                OnGameOver();
                break;
            }
        }
        private VisualizerTurn GetTurn(string playerBoard)
        {
            var state = new GameState();

            var board = new IO.Models.Board()
            {
                Width  = 1,
                Height = 1
            };

            var item = new Tile();

            item.Items.Add(new Item());

            board.Grid.Add(item);

            state.BoardNames[playerBoard] = board;

            var change = new GameChange();

            change.TileItemChanges.Add(new Position()
            {
                X       = 0,
                Y       = 0,
                BoardId = playerBoard
            });

            var turn = new VisualizerTurn()
            {
                State  = state,
                Change = change
            };

            return(turn);
        }
        public VisualizerTurn GetTurn(string playerBoard)
        {
            GameState  gameState  = new GameState();
            GameChange gameChange = new GameChange();

            gameState.PlayerNames["player"] = new Player()
            {
                Character = new Character()
                {
                    Name          = "player",
                    IsDead        = false,
                    CurrentHealth = 100,
                    Level         = 100,
                    Experience    = 100,
                    Position      = new Position()
                    {
                        BoardId = playerBoard,
                        X       = 0,
                        Y       = 0
                    }
                }
            };

            var playerChange = new CharacterChange()
            {
                Died      = false,
                Respawned = false,
                Decision  = new CharacterDecision()
                {
                    DecisionType = DecisionType.Attack,
                },
            };

            playerChange.AttackLocations.Add(new Position()
            {
                X       = 0,
                Y       = 0,
                BoardId = playerBoard
            });
            playerChange.AttackLocations.Add(new Position()
            {
                X       = 0,
                Y       = 1,
                BoardId = playerBoard
            });

            gameChange.CharacterChanges["player"] = playerChange;

            VisualizerTurn turn = new VisualizerTurn()
            {
                Change = gameChange,
                State  = gameState,
            };

            return(turn);
        }
Exemple #8
0
        public void AddToList(string key, ItemType type, string name, GameChange change)
        {
            Func <List <GameChange> > ObjectC = () => new List <GameChange>()
            {
                change
            };

            var hash = new Random($"{type}{name}{key}".GetHashCode()).Next().ToString();

            lock (sync)
            {
                if (listOfTags.ContainsKey(change.ModName))
                {
                    if (!listOfTags[change.ModName].Any(c => c == type))
                    {
                        listOfTags[change.ModName].Add(type);
                    }
                }
                else
                {
                    listOfTags.Add(change.ModName, new List <ItemType> {
                        type
                    });
                }
            }

            conflictIndex.AddOrUpdate(hash,
                                      addValue: new ModListChanges {
                Mod = new ConcurrentStack <string>(new List <string> {
                    change.ModName
                }), ChangeList = new ConcurrentStack <GameChange>(new ConcurrentStack <GameChange>(ObjectC()))
            },
                                      updateValueFactory: (val, value) =>
            {
                var current = conflictIndex.GetOrAdd(hash, value);

                if (!current.Mod.Any(q => q == change.ModName))
                {
                    current.Mod.Push(change.ModName);
                }

                current.ChangeList.Push(change);
                return(current);
            });

            DetailIndex.AddOrUpdate(hash,
                                    addValue: new DetailChanges()
            {
                Name = name, PropertyKey = key, Type = type.ToString()
            },
                                    updateValueFactory: (val, value) =>
            {
                return(DetailIndex.GetOrAdd(hash, value));
            });
        }
        private static void ProcessCharacterChanges(
            SceneConfiguration sceneConfiguration,
            BoardPositionLookUp boardPositionLookUp,
            GameChange gameChange,
            GameState gameState,
            TasksBatch batch,
            HashSet <string> ignoreForHubUpdate)
        {
            if (gameChange == null || gameState == null)
            {
                return;
            }

            foreach (var pair in gameChange.CharacterChanges)
            {
                string          entity          = pair.Key;
                Character       character       = null;
                CharacterChange characterChange = pair.Value;
                bool            isMonster       = false;

                if (gameState.PlayerNames.ContainsKey(entity))
                {
                    // if the entity is a player
                    character = gameState.PlayerNames[entity].Character;
                }
                else if (gameState.MonsterNames.ContainsKey(entity))
                {
                    // if the entity is a monster
                    character = gameState.MonsterNames[entity].Character;
                    isMonster = true;
                }
                else
                {
                    throw new Exception($"Don't know how to handle entity {entity}");
                }

                ProcessCharacter(
                    batch, entity,
                    character,
                    characterChange,
                    gameState,
                    sceneConfiguration,
                    boardPositionLookUp,
                    ignoreForHubUpdate,
                    isMonster);
            }
        }
Exemple #10
0
 public void LoadChanges()
 {
     foreach (var mod in ListOfGameData)
     {
         foreach (var obj in mod.items.Values)
         {
             Parallel.ForEach(obj.modData, (item) =>
             {
                 var change = new GameChange {
                     State = obj.GetState().ToString(), ModName = Path.GetFileName(mod.Filename), Value = item.Value
                 };
                 AddToList(item.Key, obj.type, obj.Name, change);
             });
         }
         mod.items.Clear();
     }
 }
Exemple #11
0
 public void GameChangedHandler(GameDisplayType gameDisplayType, GameChange gameChange)
 {
     gameDeskControl.GameChangedHandler(gameDisplayType, gameChange);
 }
Exemple #12
0
        public void SendNetworkEvent(int ID, long when, EventType what, int posX, int posY)
        {
            networkBufferSize++;

            if (networkConnection == null)
            {
                // buffer events until connection is available
                queue.Enqueue(new NetworkEvent(networkBufferSize, when, ID, what, posX, posY));
            }
            else
            {
                // put buffered events to the queue for sending
                if (queue.Count > 0)
                {
                    while (queue.Count > 0)
                    {
                        NetworkEvent ne = queue.Dequeue();
                        networkConnection.AddEventToBuffer(ne.SimulationTime, ne.GameObjectID, ne.EventType, ne.PosX, ne.PosY);
                    }
                }

                // send
                networkConnection.AddEventToBuffer(when, ID, what, posX, posY);

                if (what == EventType.gameWon)
                {
                    gameChange = GameChange.Won;
                }
            }
        }
 public GameStateChangedEventArgs(GameState gameState, GameChange change, Player playerTurn)
 {
     GameChange    = change;
     GameState     = gameState;
     CurrentPlayer = playerTurn;
 }
Exemple #14
0
 private Task GamechangeEvent_OnEvent(object sender, GameChange <GoFishGame> e)
 {
     return(SendGameChange(e.Result, e.Game));
 }
Exemple #15
0
        private VisualizerTurn GetTurn(string playerBoard)
        {
            GameState  gameState  = new GameState();
            GameChange gameChange = new GameChange();

            gameState.PlayerNames["player"] = new Player()
            {
                Character = new Character()
                {
                    CurrentHealth = 17,
                    Level         = 17,
                    Experience    = 17,
                    Position      = new Position()
                    {
                        BoardId = playerBoard,
                        X       = 1,
                        Y       = 1
                    }
                }
            };

            gameState.MonsterNames["monster"] = new Monster()
            {
                Character = new Character()
                {
                    CurrentHealth = 17,
                    Level         = 17,
                    Experience    = 17,
                    Sprite        = "monster.png",
                    Position      = new Position()
                    {
                        BoardId = playerBoard,
                        X       = 0,
                        Y       = 1
                    }
                }
            };

            gameChange.CharacterChanges["player"] = new CharacterChange()
            {
                Respawned = true,
                Died      = false,
                Decision  = new CharacterDecision()
                {
                    DecisionType = DecisionType.None
                }
            };

            gameChange.CharacterChanges["monster"] = new CharacterChange()
            {
                Respawned = true,
                Died      = false,
                Decision  = new CharacterDecision()
                {
                    DecisionType = DecisionType.None
                }
            };

            VisualizerTurn turn = new VisualizerTurn()
            {
                Change = gameChange,
                State  = gameState,
            };

            return(turn);
        }
Exemple #16
0
 public GameChangeMessage(GameChange gameChange, TimeSpan elapsedFromStartOfGame)
 {
     ElapsedFromStartOfGame = elapsedFromStartOfGame;
     GameChange = gameChange;
 }
        /// <summary>
        /// Generate a turn for a given board
        /// </summary>
        /// <param name="boardName">the board name</param>
        /// <returns></returns>
        private VisualizerTurn GetTurn(string boardName)
        {
            // prepare data
            VisualizerTurn turn = new VisualizerTurn();

            // setup game state
            GameState gameState = new GameState();

            gameState.BoardNames[boardName] = new IO.Models.Board()
            {
                Width  = 1,
                Height = 2,
            };

            gameState.PlayerNames["player"] = new Player()
            {
                Character = new Character()
                {
                    Name          = "player",
                    CurrentHealth = 17,
                    Position      = new Position()
                    {
                        X       = 0,
                        Y       = 1,
                        BoardId = boardName
                    }
                }
            };

            GameChange gameChange = new GameChange();

            CharacterChange characterChange = new CharacterChange()
            {
                Died      = false,
                Respawned = false,
                Decision  = new CharacterDecision()
                {
                    DecisionType = DecisionType.Move
                }
            };

            characterChange.Path.Add(new Position()
            {
                X       = 0,
                Y       = 0,
                BoardId = boardName
            });

            characterChange.Path.Add(new Position()
            {
                X       = 1,
                Y       = 0,
                BoardId = boardName
            });

            gameChange.CharacterChanges["player"] = characterChange;

            turn.State  = gameState;
            turn.Change = gameChange;

            return(turn);
        }
Exemple #18
0
        public void LoadBaseChanges(GameData mod)
        {
            var nodes = new ConcurrentStack <GameData.Item>();

            Parallel.ForEach(mod.items.Values, (obj) =>
            {
                if (obj.GetState() != State.ORIGINAL && (this.Filter == null || this.Filter.Test(obj)) && ((obj.GetState() != State.OWNED || true) && (obj.GetState() != State.MODIFIED || true)) && ((obj.GetState() != State.REMOVED || false) && (obj.GetState() != State.LOCKED && obj.GetState() != State.LOCKED_REMOVED) && (obj.GetState() != State.REMOVED || obj.OriginalName != null)))
                {
                    nodes.Push(obj);
                }
            });

            Parallel.ForEach(nodes, (obj1) =>
            {
                State state1 = obj1.GetState();
                if (state1 != State.OWNED)
                {
                    foreach (string referenceList in obj1.referenceLists())
                    {
                        Desc desc = GameData.getDesc(obj1.type, referenceList);
                        if (!(desc.defaultValue is GameData.TripleInt))
                        {
                            desc = (Desc)null;
                        }
                        foreach (KeyValuePair <string, GameData.TripleInt> keyValuePair in obj1.referenceData(referenceList, true))
                        {
                            State state2 = obj1.GetState(referenceList, keyValuePair.Key);
                            switch (state2)
                            {
                            case State.ORIGINAL:
                            case State.LOCKED:
                            case State.LOCKED_REMOVED:
                                continue;

                            default:
                                GameData.Item obj2 = mod.getItem(keyValuePair.Key);
                                GameChange changeData;
                                if (state2 == State.REMOVED)
                                {
                                    changeData = new GameChange {
                                        State = state2.ToString(), ModName = Path.GetFileName(mod.Filename), Value = keyValuePair.Value
                                    }
                                }
                                ;
                                else
                                {
                                    continue;
                                }

                                AddToList(keyValuePair.Key, obj1.type, obj1.Name, changeData);

                                continue;
                            }
                        }
                    }
                    foreach (KeyValuePair <string, GameData.Instance> keyValuePair1 in obj1.InstanceData())
                    {
                        State state2 = keyValuePair1.Value.GetState();
                        ChangeData changeData;
                        switch (state2)
                        {
                        case State.ORIGINAL:
                        case State.LOCKED:
                        case State.LOCKED_REMOVED:
                            continue;

                        case State.OWNED:
                            changeData = new ChangeData(ChangeType.NEWINST, keyValuePair1.Key, state2);
                            break;

                        default:
                            changeData = new ChangeData(ChangeType.MODINST, keyValuePair1.Key, state2);
                            break;
                        }
                        changeData.Text = "Instance : " + keyValuePair1.Key;

                        if (state2 == State.MODIFIED)
                        {
                            foreach (KeyValuePair <string, object> keyValuePair2 in (GameData.Item)keyValuePair1.Value)
                            {
                                if (keyValuePair1.Value.GetState(keyValuePair2.Key) == State.MODIFIED)
                                {
                                    changeData.Add((Changes) new ChangeData(ChangeType.INSTVALUE, keyValuePair1.Key, keyValuePair2.Key, keyValuePair1.Value.OriginalValue(keyValuePair2.Key), keyValuePair1.Value[keyValuePair2.Key], state2));
                                }
                            }
                        }
                        obj1.ChangeData = changeData;
                    }
                }
            });

            nodes.Clear();
        }
Exemple #19
0
        /// <summary>
        /// May be called from first or second player!!
        /// </summary>
        /// <param name="gameChange"></param>
        public void GameChangedHandler(GameDisplayType gameDisplayType, GameChange gameChange)
        {
            if (gameMode == GameMode.SinglePlayer)
            {
                if (game.GameStatus == Lib.GameStatus.Running)
                {
                    if (gameChange == GameChange.Won)
                    {
                        if (quest.RoundsNo > 1)
                        {
                            if (!quest.IsLast())
                            {
                                ShowQuestion(inquirySinglePlayerPlayNextRoundOfLeague, new string[] { "Yes", "No" });
                            }
                            else
                            {
                                MessageBoxShow("Congratulations! You've won the round and completed the league!");
                            }
                        }
                        else
                        {
                            MessageBoxShow("Congratulations! You've won the round!");
                        }

                        FirstPlayerIsFinishing();

                        // Sending results
                        try
                        {
                            AppendMessage(storeSinglePlayerRoundResult(this.getTime()));
                        }
                        catch
                        {
                            AppendMessage("Unexpected error: Cannot store results to the server.");
                        }

                    }
                    else if (gameChange == GameChange.StopCountingTime)
                    {
                        this.PauseTime();
                    }
                    else if (gameChange == GameChange.Lost)
                    {
                        FirstPlayerIsFinishing();
                        this.ShowQuestion(inquirySinglePlayerRestart, new string[] { "Yes", "No" }); // answer is processed in UserInquirer.cs
                    }
                }
            }
            else if (gameMode == GameMode.TwoPlayers)
            {
                if (gameDisplayType == GameDisplayType.FirstPlayer)
                {
                    if (game.GameStatus == Lib.GameStatus.Running)
                    {
                        if (gameChange == GameChange.Won)
                        {
                            MessageBoxShow("You have won the duel!");
                        }
                        else if (gameChange == GameChange.Lost)
                        {
                            MessageBoxShow("Your opponent have won the duel!");
                        }

                        FirstPlayerIsFinishing();
                    }
                }
                else
                {
                    if (gameOpponent.GameStatus == GameStatus.Running)
                    {
                        if (gameChange == GameChange.Restart)
                        {
                            this.RestartGame(GameDisplayType.SecondPlayer); // restart opponent game desk
                        }
                    }
                }
            }
            else
            {
                throw new NotImplementedException("not implemented");
            }
        }
        private VisualizerTurn GetTurn(string playerBoard)
        {
            GameState  gameState  = new GameState();
            GameChange gameChange = new GameChange();

            gameState.PlayerNames["player"] = new Player()
            {
                Character = new Character()
                {
                    CurrentHealth = 10,
                    Level         = 22,
                    Experience    = 0,
                    Position      = new Position()
                    {
                        BoardId = playerBoard,
                        X       = 0,
                        Y       = 0
                    },

                    Weapon = new Weapon()
                    {
                        Sprite = "mm26_wearables/weapons/wands/4.png"
                    }
                },

                Hat = new Hat()
                {
                    Sprite = "mm26_wearables/clothes/alchemist_head.png"
                },
                Clothes = new Clothes()
                {
                    Sprite = "mm26_wearables/clothes/alchemist_head.png"
                },
                Shoes = new Shoes()
                {
                    Sprite = "mm26_wearables/clothes/alchemist_head.png"
                },
                Accessory = new Accessory()
                {
                    Sprite = "mm26_wearables/clothes/alchemist_head.png"
                }
            };

            gameChange.CharacterChanges["player"] = new CharacterChange()
            {
                Respawned = false,
                Died      = false,
                Decision  = new CharacterDecision()
                {
                    DecisionType = DecisionType.Equip
                },
                HatChanged = true,
            };

            var turn = new VisualizerTurn()
            {
                State  = gameState,
                Change = gameChange
            };

            return(turn);
        }
        /// <summary>
        /// Make turn for a given board
        /// </summary>
        /// <param name="playerBoard">the board to make for</param>
        /// <returns></returns>
        private VisualizerTurn GetBoard(string playerBoard)
        {
            GameState  gameState  = new GameState();
            GameChange gameChange = new GameChange();

            gameState.BoardNames[playerBoard] = new IO.Models.Board()
            {
                Width  = 2,
                Height = 2
            };

            gameState.PlayerNames["player"] = new Player()
            {
                Character = new Character()
                {
                    CurrentHealth = 17,
                    Level         = 17,
                    Experience    = 17,
                    Position      = new Position()
                    {
                        BoardId = playerBoard,
                        X       = 1,
                        Y       = 1
                    }
                }
            };

            gameState.MonsterNames["monster"] = new Monster()
            {
                Character = new Character()
                {
                    CurrentHealth = 17,
                    Level         = 17,
                    Experience    = 17,
                    Sprite        = "monster.png",
                    Position      = new Position()
                    {
                        BoardId = playerBoard,
                        X       = 0,
                        Y       = 1
                    }
                }
            };

            gameChange.CharacterChanges["player"] = new CharacterChange()
            {
                Died      = false,
                Respawned = false,
                Decision  = new CharacterDecision()
                {
                    DecisionType = DecisionType.Portal
                }
            };

            gameChange.CharacterChanges["monster"] = new CharacterChange()
            {
                Died      = false,
                Respawned = false,
                Decision  = new CharacterDecision()
                {
                    DecisionType = DecisionType.Portal
                }
            };

            VisualizerTurn turn = new VisualizerTurn()
            {
                State  = gameState,
                Change = gameChange,
            };

            return(turn);
        }