internal void Activate(CritterWrapper critterWrapper) { if (!critterWrapper.IsWaiting) { return; } Critter critter = null; try { Point possibleCritterPosition = GetStartingCritterPosition(); critter = Critter.CreateCritter(critterWrapper.File, critterWrapper.Brain, this, possibleCritterPosition); critter.MaximumAge = maximumCritterAge; critterWrapper.Critter = critter; runningCritters.Add(critterWrapper); displayCritters.Add(critterWrapper); } catch (Exception e) { Logger.OutputToLog("Critter " + critterWrapper.CritterName + " by " + critterWrapper.CritterCreator + " in file " + critterWrapper.File + " failed to activate: " + e, Logger.LogLevel.Error); if (critter != null) { critter.Die("Crashed"); } CritterWorldForm.AddMarqueeMessage(critterWrapper.CritterName + " by " + critterWrapper.CritterCreator + " crashed."); } }
public void CleanupDead() { lock (allObjects) { for (int i = 0; i < allObjects.Count; i++) { if (allObjects[i].IsDead) { if (allObjects[i] is Critter) { for (int j = 0; j < runningCritters.Count; j++) { if (runningCritters[j].Critter == allObjects[i]) { CritterWrapper critter = runningCritters[j]; runningCritters.RemoveAt(j); if (critter.Critter.IsGoalReached) { recordFinishedCritter(critter); leaderboard.AddFinisher(critter.CritterName, (string)critter.Critter.CritterBrain.Creator, critter.Critter.TimeToGoal); } else { deadCritters.Add(critter); } break; } } } allObjects.RemoveAt(i); } } } }
private void recordFinishedCritter(CritterWrapper critter) { // crude insertion sort now; improve later for (int k = 0; k < finishedCritters.Count; k++) { if (critter.Critter.TimeToGoal < finishedCritters[k].Critter.TimeToGoal) { finishedCritters.Insert(k, critter); return; } } finishedCritters.Add(critter); }
private void dataGridViewRunning_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { DataGridViewRow row = dataGridViewRunning.Rows[e.RowIndex]; CritterWrapper item = (CritterWrapper)row.DataBoundItem; Form form = item.Brain.Form; if (form == null) { string msg = "Critter " + item.CritterName + " by " + item.CritterCreator + " in file " + item.File + " does not have an edit form."; MessageBox.Show(msg, "Edit Failure", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { form.ShowDialog(); } }
public void CheckActiveCritterCount() { lock (runningCritters) { if (runningCritters.Count < maximumActiveCritterCount || maximumActiveCritterCount <= 0) { lock (waitingCritters) { if (waitingCritters.Count() > 0) { CritterWrapper critter = waitingCritters[0]; waitingCritters.RemoveAt(0); Activate(critter); } } } } }