public override IEnumerable <Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
        {
            if (mi.Button != Game.Settings.Game.MouseButtonPreference.Action)
            {
                world.CancelInputMode();
            }
            else
            {
                var technician = this.technicians.OrderBy(e => (e.CenterPosition - world.Map.CenterOfCell(cell)).Length).FirstOrDefault();

                if (technician == null)
                {
                    yield break;
                }

                var actor = world.ActorMap.GetActorsAt(cell).FirstOrDefault(a => TechnicianUtils.CanEnter(technician, a));

                if (actor == null)
                {
                    yield break;
                }

                yield return(new(TechnicianEnterOrderTargeter.Id, technician, Target.FromActor(actor), true));
            }
        }
Ejemplo n.º 2
0
        public override bool Tick(Actor self)
        {
            if (!this.IsCanceling && !TechnicianUtils.CanEnter(self, this.target))
            {
                this.Cancel(self, true);
            }

            return(base.Tick(self));
        }
Ejemplo n.º 3
0
        public override bool CanTargetActor(Actor self, Actor target, TargetModifiers modifiers, ref string cursor)
        {
            if (TechnicianUtils.CanEnter(self, target))
            {
                cursor = cursorAllowed;
                return(true);
            }

            cursor = cursorForbidden;
            return(false);
        }
Ejemplo n.º 4
0
        public override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
        {
            var technician = technicians.OrderBy(e => (e.CenterPosition - world.Map.CenterOfCell(cell)).Length).FirstOrDefault();

            if (technician == null)
            {
                return(null);
            }

            var actor = world.ActorMap.GetActorsAt(cell).FirstOrDefault(a => TechnicianUtils.CanEnter(technician, a));
            var info  = technician.Info.TraitInfo <TechnicianInfo>();

            return(actor != null ? info.Cursor : info.BlockedCursor);
        }