private IEnumerable <CharacterReadModel> GetCharacters(int userId) { User user = _userService.GetUser(Convert.ToInt32(userId)); IEnumerable <CharacterReadModel> models = _mapper.Map <IEnumerable <CharacterReadModel> >(user.Characters); if (user.SelectedCharacter != null) { CharacterReadModel selectedChar = models.FirstOrDefault(x => x.Id == user.SelectedCharacter.Id); selectedChar.IsActive = true; } return(models); }
//TODO be explicit- dispatch actions like DIALOGUE_INITIATED, dialogue_advanced and have the gae reducer translate these into //more specific ui changes such as "message set" and "character se". gets confusing otherwsie. public void InitiateStory(string characterName) { string playerId = GameState.Instance.PlayerState.id; ServerResponse response = CharacterController.InitiateStory(characterName, playerId); if (!response.error) { Debug.Log($"Success: Initiating dialogue"); CharacterReadModel character = (CharacterReadModel)ModelRepository.Get(response.modelName, response.aggregateIdentifier); GameReducer.Reduce(ActionTypes.MESSAGE_SET, character.currentText); GameReducer.Reduce(ActionTypes.CHARACTER_SET, character); } else { Debug.Log("Failed"); } }
public void AdvanceStory(string userInput) { string characterName = GameState.Instance.CharacterState.currentCharacterName; string playerId = GameState.Instance.PlayerState.id; ServerResponse response = CharacterController.AdvanceStory(characterName, playerId, userInput); if (!response.error) { Debug.Log($"Success: Advanced dialogue"); CharacterReadModel character = (CharacterReadModel)ModelRepository.Get(response.modelName, response.aggregateIdentifier); GameReducer.Reduce(ActionTypes.MESSAGE_SET, character.currentText); if (character.currentStorylineCompleted == true) { GameReducer.Reduce(ActionTypes.CURRENT_STORYLINE_COMPLETED, ""); } } else { Debug.Log("Failed"); } }
public override void Reduce(Event evt, ModelTable table) { Type type = evt.GetType(); if (type == typeof(CharacterCreated)) { CharacterCreated characterCreated = (CharacterCreated)evt; table.InsertModel(characterCreated.name, new CharacterReadModel(characterCreated.name, characterCreated.greeting)); return; } if (type == typeof(StoryInitiated)) { StoryInitiated dialogueInitiated = (StoryInitiated)evt; CharacterReadModel character = (CharacterReadModel)table.GetModel(dialogueInitiated.characterName); character.currentText = dialogueInitiated.initialNode.text; character.currentStorylineCompleted = false; table.UpdateModel(dialogueInitiated.characterName, character); //not necessary, since we are mutating the reference, //but like to be explicit and will soon move to immutable structs for readmodels. return; } if (type == typeof(StoryAdvanced)) { StoryAdvanced dialogueAdvanced = (StoryAdvanced)evt; CharacterReadModel character = (CharacterReadModel)table.GetModel(dialogueAdvanced.characterName); character.currentText = dialogueAdvanced.newNode.text; table.UpdateModel(dialogueAdvanced.characterName, character); return; } if (type == typeof(StoryCompleted)) { StoryCompleted storylineCompleted = (StoryCompleted)evt; CharacterReadModel character = (CharacterReadModel)table.GetModel(storylineCompleted.characterName); character.currentText = character.goodbye; character.currentStorylineCompleted = true; table.UpdateModel(storylineCompleted.characterName, character); } }