コード例 #1
0
ファイル: PickupUnit.cs プロジェクト: huwpascoe/OpenRA
        public override Activity Tick(Actor self)
        {
            if (cargo.IsDead || !carryall.IsBusy)
            {
                carryall.UnreserveCarryable();
                return(NextActivity);
            }

            switch (state)
            {
            case State.Intercept:
                state = State.LockCarryable;
                return(Util.SequenceActivities(movement.MoveWithinRange(Target.FromActor(cargo), WDist.FromCells(4)), this));

            case State.LockCarryable:
                // Last check
                if (carryable.StandbyForPickup(self))
                {
                    state = State.MoveToCarryable;
                    return(this);
                }

                // We got cancelled
                carryall.UnreserveCarryable();
                return(NextActivity);

            case State.MoveToCarryable:                     // We arrived, move on top
                if (self.Location == cargo.Location)
                {
                    state = State.Turn;
                    return(this);
                }

                return(Util.SequenceActivities(movement.MoveTo(cargo.Location, 0), this));

            case State.Turn:                     // Align facing and Land
                if (selfFacing.Facing != cargoFacing.Facing)
                {
                    return(Util.SequenceActivities(new Turn(self, cargoFacing.Facing), this));
                }
                state = State.Pickup;
                return(Util.SequenceActivities(new HeliLand(self, false), new Wait(10), this));

            case State.Pickup:
                // Remove our carryable from world
                self.World.AddFrameEndTask(w => cargo.World.Remove(cargo));
                carryall.AttachCarryable(cargo);
                state = State.TakeOff;
                return(this);

            case State.TakeOff:
                if (HeliFly.AdjustAltitude(self, aircraft, aircraft.Info.CruiseAltitude))
                {
                    return(this);
                }
                return(NextActivity);
            }

            return(NextActivity);
        }
コード例 #2
0
ファイル: DeliverUnit.cs プロジェクト: Walkman-Mirror/OpenRA
        public override Activity Tick(Actor self)
        {
            if (cargo.IsDead || !carryall.IsBusy)
            {
                carryall.UnreserveCarryable();
                return(NextActivity);
            }

            switch (state)
            {
            case State.Transport:
                var targetl = GetLocationToDrop(carryable.Destination);
                state = State.Land;
                return(ActivityUtils.SequenceActivities(movement.MoveTo(targetl, 0), this));

            case State.Land:
                if (!CanDropHere())
                {
                    state = State.Transport;
                    return(this);
                }

                if (HeliFly.AdjustAltitude(self, aircraft, aircraft.Info.LandAltitude))
                {
                    return(this);
                }
                state = State.Release;
                return(ActivityUtils.SequenceActivities(new Wait(15), this));

            case State.Release:
                if (!CanDropHere())
                {
                    state = State.Transport;
                    return(this);
                }

                Release();
                return(NextActivity);
            }

            return(NextActivity);
        }