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); }
/// <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)); } }
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); }
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); } }
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(); } }
public void GameChangedHandler(GameDisplayType gameDisplayType, GameChange gameChange) { gameDeskControl.GameChangedHandler(gameDisplayType, gameChange); }
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; }
private Task GamechangeEvent_OnEvent(object sender, GameChange <GoFishGame> e) { return(SendGameChange(e.Result, e.Game)); }
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); }
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); }
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(); }
/// <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); }