private static void ProcessCharacter( TasksBatch batch, string entity, Character character, CharacterChange characterChange, GameState gameState, SceneConfiguration sceneConfiguration, BoardPositionLookUp boardPositionLookUp, HashSet <string> ignoreForHubUpdate, bool isMonster) { var position = new Vector3Int( character.Position.X, character.Position.Y, 0); if (characterChange.Died) { if (character.Position.BoardId == sceneConfiguration.BoardName) { #if UNITY_EDITOR Debug.Log("Character Dies"); #endif ignoreForHubUpdate.Add(entity); batch.Add(new DespawnTask(entity)); batch.Add(new EffectTask(EffectType.Death, position)); } return; } else if (characterChange.Respawned) { if (character.Position.BoardId == sceneConfiguration.BoardName) { ignoreForHubUpdate.Add(entity); if (isMonster) { batch.Add(new SpawnMonsterTask(entity, position, character.Sprite) { Health = character.CurrentHealth, Level = character.Level, Experience = character.Experience }); } else { batch.Add(new SpawnPlayerTask(entity, position) { Health = character.CurrentHealth, Level = character.Level, Experience = character.Experience }); } batch.Add(new EffectTask(EffectType.Spawn, position)); } return; } switch (characterChange.Decision.DecisionType) { case DecisionType.Move: if (character.Position.BoardId != sceneConfiguration.BoardName) { return; } Vector3[] path = GetPath(characterChange.Path, boardPositionLookUp); batch.Add(new FollowPathTask(entity, path)); break; case DecisionType.Portal: ignoreForHubUpdate.Add(entity); if (character.Position.BoardId != sceneConfiguration.BoardName) { batch.Add(new DespawnTask(entity)); } else { if (isMonster) { batch.Add(new SpawnMonsterTask(entity, position, character.Sprite) { Health = character.CurrentHealth, Level = character.Level, Experience = character.Experience }); } else { batch.Add(new SpawnPlayerTask(entity, position) { Health = character.CurrentHealth, Level = character.Level, Experience = character.Experience }); } } batch.Add(new EffectTask(EffectType.Portal, position)); break; case DecisionType.Attack: if (character.Position.BoardId == sceneConfiguration.BoardName) { foreach (var location in characterChange.AttackLocations) { var attackPosition = new Vector3Int() { x = location.X, y = location.Y, z = 0 }; batch.Add(new EffectTask(EffectType.Attack, attackPosition)); } } break; case DecisionType.Equip: if (character.Position.BoardId == sceneConfiguration.BoardName && !isMonster) { ignoreForHubUpdate.Add(entity); Player player = gameState.PlayerNames[entity]; batch.Add(new UpdateInventoryTask(entity) { clothes_changed = characterChange.ClothesChanged, hat_changed = characterChange.HatChanged, shoes_changed = characterChange.ShoesChanged, weapon_changed = characterChange.WeaponChanged, accesory_changed = characterChange.AccessoryChanged, Top = player.Clothes?.Sprite, Bottom = player.Shoes?.Sprite, Head = player.Hat?.Sprite, Weapon = character.Weapon?.Sprite, Accessory = player.Accessory?.Sprite }); return; } break; case DecisionType.None: break; default: Debug.LogWarningFormat("Unrecognized decision type {0}", characterChange.Decision.DecisionType); break; } }
void Start() { cc = gameObject.GetComponentInParent<CharacterChange>(); }
/// <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); }