示例#1
0
 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);
 }
示例#2
0
        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);
            }
        }
示例#3
0
        // 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);
        }