public static AcceptorTask GetAcceptor(PerformerTask task, ITaskAcceptor acceptor) { // TODO: linq foreach (var acceptorTask in acceptor.AcceptableTasks.EnabledTasks) { AcceptorTask a = acceptorTask.Value; if (task.GetType() == a.AcceptedTask) { return(a); } } return(null); }
public static void Set(PerformerTask newTask) { if (!newTask.Enabled) { return; } task = newTask; roadTask = task is ConstructRoad; bool seedTask = task is PlantSeed; System.Type[] taskTypes; if (roadTask) { taskTypes = new [] { typeof(Road) }; } else if (seedTask) { taskTypes = new [] { typeof(Seed) }; } else { taskTypes = task.GetType().GetGenericArguments(); } if (taskTypes.Length > 0) { string renderer = UnitRenderer.GetRenderer(DataManager.GetUnitSymbol(taskTypes[0])); visual = ObjectPool.Instantiate(renderer) as UnitRenderer; visual.SetAlpha(0.33f); GameCursor.Instance.SetVisual(task, visual); } GameCursor.Instance.onClick += OnClick; if (roadTask) { Events.instance.AddListener <ClickConnectionEvent> (OnClickConnectionEvent); Events.instance.AddListener <MouseEnterConnectionEvent> (OnMouseEnterConnectionEvent); Events.instance.AddListener <MouseExitConnectionEvent> (OnMouseExitConnectionEvent); } else { Events.instance.AddListener <ClickPointEvent> (OnClickPointEvent); Events.instance.AddListener <MouseEnterPointEvent> (OnMouseEnterPointEvent); Events.instance.AddListener <MouseExitPointEvent> (OnMouseExitPointEvent); } }
// Finds the nearest path element with the given task public bool NearestPathElementWithTask(PathElement origin, PerformerTask task, out PathElement destination) { System.Type taskType = task.GetType(); GridPoint point = ConnectionToPoint(origin); destination = Pathfinder.FindNearestPoint( point, (GridPoint p) => { if (TaskMatcher .GetEnabled(performer, p.Object as ITaskAcceptor) .Find(x => x.GetType() == taskType) != null) { return(true); } foreach (Connection c in p.Connections) { ITaskAcceptor acceptor = c.Object as ITaskAcceptor; if (acceptor == null) { continue; } if (TaskMatcher .GetEnabled(performer, acceptor) .Find(x => x.GetType() == taskType) != null) { return(true); } } return(false); } ); return(destination != null); }