private void removeOrganism(KilledOrganism killedOrganism)
{
OrganismState killedState = _newWorldState.GetOrganismState(killedOrganism.ID);
if (killedOrganism.DeathReason == PopulationChangeReason.Error ||
killedOrganism.DeathReason == PopulationChangeReason.Timeout ||
killedOrganism.DeathReason == PopulationChangeReason.SecurityViolation ||
killedOrganism.DeathReason == PopulationChangeReason.OrganismBlacklisted)
{
OnEngineStateChanged(EngineStateChangedEventArgs.AnimalDestroyed(killedState, killedOrganism.DeathReason));
}
// Tell the developer the details
if (killedOrganism.DeathReason == PopulationChangeReason.Error ||
killedOrganism.DeathReason == PopulationChangeReason.SecurityViolation)
{
if (!string.IsNullOrEmpty(killedOrganism.ExtraInformation))
{
string developerMessage = "**** An exception occurred in a '" + ((Species) killedState.Species).Name +
"': \r\n" + killedOrganism.ExtraInformation;
OnEngineStateChanged(new EngineStateChangedEventArgs(EngineStateChangeType.DeveloperInformation,
developerMessage));
}
}
if (killedOrganism.DeathReason == PopulationChangeReason.Error &&
string.IsNullOrEmpty(killedOrganism.ExtraInformation))
{
OrganismState state = _newWorldState.GetOrganismState(killedOrganism.ID);
state.Kill(killedOrganism.DeathReason);
}
else
{
uncountOrganism(killedState, killedOrganism.DeathReason);
// Remove it from the Host
Scheduler.Remove(killedOrganism.ID);
// Remove it from the world state
_newWorldState.RemoveOrganism(killedOrganism.ID);
}
}