コード例 #1
0
        ActionState ProcessAction(HaulAction action)
        {
            var dir = action.Direction;

            if (this.ActionTicksUsed == 1)
            {
                var obs = this.Environment.GetContents(this.Location + dir);

                this.ActionTotalTicks = obs.OfType <LivingObject>().Count() + 2;
            }

            if (this.ActionTicksUsed < this.ActionTotalTicks)
            {
                return(ActionState.Ok);
            }

            var itemID = action.ItemID;
            var item   = this.World.FindObject <ItemObject>(itemID);

            var report = new HaulActionReport(this, dir, item);

            if (item == null)
            {
                SendFailReport(report, "object doesn't exist");
                return(ActionState.Fail);
            }

            if (this.CarriedItem == null)
            {
                SendFailReport(report, "not carrying anything");
                return(ActionState.Fail);
            }

            Debug.Assert(this.CarriedItem.Container == this);

            if (this.CarriedItem != item)
            {
                SendFailReport(report, "already carrying another item");
                return(ActionState.Fail);
            }

            var ok = MoveDir(dir);

            if (!ok)
            {
                SendFailReport(new HaulActionReport(this, action.Direction, item), "could not move (blocked?)");
                return(ActionState.Fail);
            }

            SendReport(report);

            return(ActionState.Done);
        }
コード例 #2
0
        void HandleReport(HaulActionReport report)
        {
            var living   = m_world.FindObject <LivingObject>(report.LivingObjectID);
            var itemName = GetPrintableItemName(report.ItemObjectID);

            if (report.Success == false)
            {
                Events.AddGameEvent(living, "{0} failed to haul {1} to {2}: {3}", living, itemName, report.Direction, report.FailReason);
            }
            //else
            //	Events.AddGameEvent(living, "{0} hauled {1} to {2}", living, itemName, report.Direction);
        }
コード例 #3
0
ファイル: Haul.cs プロジェクト: Fulborg/dwarrowdelf
        ActionState ProcessAction(HaulAction action)
        {
            var dir = action.Direction;

            if (this.ActionTicksUsed == 1)
            {
                var obs = this.Environment.GetContents(this.Location + dir);

                this.ActionTotalTicks = obs.OfType<LivingObject>().Count() + 2;
            }

            if (this.ActionTicksUsed < this.ActionTotalTicks)
                return ActionState.Ok;

            var itemID = action.ItemID;
            var item = this.World.FindObject<ItemObject>(itemID);

            var report = new HaulActionReport(this, dir, item);

            if (item == null)
            {
                SendFailReport(report, "object doesn't exist");
                return ActionState.Fail;
            }

            if (this.CarriedItem == null)
            {
                SendFailReport(report, "not carrying anything");
                return ActionState.Fail;
            }

            Debug.Assert(this.CarriedItem.Parent == this);

            if (this.CarriedItem != item)
            {
                SendFailReport(report, "already carrying another item");
                return ActionState.Fail;
            }

            var ok = MoveDir(dir);

            if (!ok)
            {
                SendFailReport(new HaulActionReport(this, action.Direction, item), "could not move (blocked?)");
                return ActionState.Fail;
            }

            SendReport(report);

            return ActionState.Done;
        }
コード例 #4
0
ファイル: ReportHandler.cs プロジェクト: Fulborg/dwarrowdelf
        void HandleReport(HaulActionReport report)
        {
            var living = m_world.FindObject<LivingObject>(report.LivingObjectID);
            var itemName = GetPrintableItemName(report.ItemObjectID);

            if (report.Success == false)
                Events.AddGameEvent(living, "{0} failed to haul {1} to {2}: {3}", living, itemName, report.Direction, report.FailReason);
            //else
            //	Events.AddGameEvent(living, "{0} hauled {1} to {2}", living, itemName, report.Direction);
        }