public int EvaluateHealth(Action action) { switch (action.Type) { case ActionType.Fine: return (int) (ActionsReactions[action.Item].HealthPlus*action.Duration.TotalSeconds*2 - ActionsReactions[action.Item].HealthMinus*action.Duration.TotalSeconds); case ActionType.Sad: return (int) (ActionsReactions[action.Item].HealthPlus*action.Duration.TotalSeconds/2 - ActionsReactions[action.Item].HealthMinus*action.Duration.TotalSeconds); case ActionType.Neutral: return (int) (ActionsReactions[action.Item].HealthPlus*action.Duration.TotalSeconds - ActionsReactions[action.Item].HealthMinus*action.Duration.TotalSeconds); case ActionType.Harmful: return (int) ((-1)*Math.Abs((ActionsReactions[action.Item].HealthPlus*action.Duration.TotalSeconds - ActionsReactions[action.Item].HealthMinus*action.Duration.TotalSeconds*2))); default: return 0; } }
public StateDelta Evaluate(Action action) { int satiety = EvaluateSatiety(action); int happiness = EvaluateHappiness(action); int health = EvaluateHealth(action); return new StateDelta(happiness, health, satiety); }
public int EvaluateSatiety(Action action) { return 0; }
public EventReaction ReactForAction(Action action) { Console.Write("Animal is affected by {0} {1}... ", action.Type, action.Item); if (GetActionReaction(action) == EventReaction.Dead) { if (InternalState.RemainingLifeTime.TotalSeconds/InternalState.RemainingLifeTimeLimit.TotalSeconds < 0.5) { return EventReaction.Dead; } Console.Write("Animal absconded from action"); } int remainingLifeTime = (int) InternalState.RemainingLifeTime.TotalSeconds; InternalState.Change(ActionsEvaluator.Evaluate(action)); if (InternalState.RemainingLifeTime.TotalSeconds <= 0) { return EventReaction.Dead; } Console.Write("{0} to life time", InternalState.RemainingLifeTime.TotalSeconds - remainingLifeTime); Console.WriteLine("\n\nAnimal's remaining life time: {0} sec.\n", InternalState.RemainingLifeTime.TotalSeconds); Thread.Sleep(action.Duration); return EventReaction.Alive; }
protected EventReaction GetActionReaction(Action action) { if (action.Type == ActionType.Killing) { return EventReaction.Dead; } return EventReaction.Alive; }