private void UndoInteraction(ISpaceField spaceField) { var field = fields[spaceField.X, spaceField.Y]; if (field.HasAgent) { foreach (var agent in field.Agents.ToArray()) { var interaction = agent.Interaction; if (interaction.ActionResult != InteractionResult.Collision) { field.IsDestroyed = true; interaction.ActionResult = InteractionResult.Collision; field.RemoveAnchors(); //Console.WriteLine($"Rem {spaceField.X}, {spaceField.Y}"); UndoInteraction(interaction.From); var sourceField = fields[interaction.From.X, interaction.From.Y]; //Console.WriteLine($"Set {interaction.From.X}, {interaction.From.Y}"); sourceField.AddAnchor(agent.Anchor); agent.Anchor.Field = sourceField; } } } }
public override void Paint(Graphics graphics) { var agent = Simulation.Agents.FirstOrDefault(); if (agent != null) { ISpaceField field = agent.Interaction.From ?? agent.Anchor.Field; float size = ViewRadius * 2 + 1; graphics.FillRectangle(Brush, field.X - ViewRadius, field.Y - ViewRadius, size, size); } }
protected SpaceField <TAgent> this[ISpaceField f] => fields[f.X, f.Y];
public void MoveAgentAnchor(AgentSpaceAnchor <TAgent> anchor, ISpaceField field) { this[anchor.Field].RemoveAnchor(anchor); fields[field.X, field.Y].AddAnchor(anchor); anchor.Field = field; }
public AgentSpaceAnchor(TAgent agent, ISpaceField field) : base(field) { Agent = agent; }
public SpaceAnchor(ISpaceField field) { Field = field; }