public override void Save(IEvent eventObj) { if (eventObj is GameObjectsCreationEvent ev) { var stepId = DatabaseEventRecordingProvider.StepId; var items = new List <GameObjectsStepState>(); foreach (var gameObject in ev.GameObjects) { var objects = new List <GameObject> { gameObject }; var dataHolder = new GameObjectsStepState { GameObjectId = gameObject.Id, StepId = stepId, TypeName = gameObject.GetType().Name, X = gameObject.Coordinates.X, Y = gameObject.Coordinates.Y, Hp = gameObject.Hp, StatusId = (int)gameObject.Status, }; if (objects.OfType <IGrowable>().Any()) { var growable = objects.OfType <IGrowable>().Single(); dataHolder.CurrentAge = growable.CurrentAge; } if (objects.OfType <IGender>().Any()) { var genderObj = objects.OfType <IGender>().Single(); dataHolder.GenderTypeId = (int)genderObj.GenderType; dataHolder.CurrentPregnancyTime = genderObj.CurrentPregnancyTime; dataHolder.IsPregnant = genderObj.IsPregnant; } items.Add(dataHolder); } GameObjectsStepStateRepo.Create(items); } else { throw new InvalidDataException($"{eventObj} is invalid event"); } }
private void FillGameObjectsStepStateData(List <GameObject> gameObjects) { List <GameObjectsStepState> items = new List <GameObjectsStepState>(); var stepId = StepId; foreach (var gameObject in gameObjects) { var objects = new List <GameObject> { gameObject }; var dataHolder = new GameObjectsStepState { GameObjectId = gameObject.Id, StepId = stepId, TypeName = gameObject.GetType().Name, X = gameObject.Coordinates.X, Y = gameObject.Coordinates.Y, Hp = gameObject.Hp, StatusId = (int)gameObject.Status, }; if (objects.OfType <IGrowable>().Any()) { var growable = objects.OfType <IGrowable>().Single(); dataHolder.CurrentAge = growable.CurrentAge; } if (objects.OfType <IGender>().Any()) { var genderObj = objects.OfType <IGender>().Single(); dataHolder.GenderTypeId = (int)genderObj.GenderType; dataHolder.CurrentPregnancyTime = genderObj.CurrentPregnancyTime; dataHolder.IsPregnant = genderObj.IsPregnant; } items.Add(dataHolder); } _gameObjectsStepStateRepo.Create(items); }