public static bool AgentCanMoveAcross(Path path, Node node, Agent agent) { MovementOverride moveOR = (agent == null) ? null : path.movementOverrides.FirstOrDefault(o => o.agentType == agent.agentType); MovementType checkMove; if (moveOR == null) { // No overrides. Use normal path direction checkMove = path.pathDirection; } else { // Use override value for this agent checkMove = moveOR.movement; } // Everyone can move on a two-way if (checkMove == MovementType.TwoWay) { return(true); } // One-way allows moving from FROM to TO if (checkMove == MovementType.OneWay && path.fromNode == node) { return(true); } // Reverse allows moving from TO to FROM if (checkMove == MovementType.Reverse && path.toNode == node) { return(true); } // If we're here, it means it's impassable return(false); }
public void AddOverride(int agentType, MovementType movementType) { MovementOverride existingOverrideForAgent = movementOverrides.First(o => o.agentType == agentType); if (existingOverrideForAgent == null) { MovementOverride newOverride = new MovementOverride() { agentType = agentType, movement = movementType }; movementOverrides.Add(newOverride); } else { existingOverrideForAgent.movement = movementType; } }
public void RemoveOverride(int agentType) { MovementOverride existingOverrideForAgent = movementOverrides.First(o => o.agentType == agentType); if (existingOverrideForAgent != null) { movementOverrides.Remove(existingOverrideForAgent); } }