예제 #1
0
        public IPickableGameActor RemoveFromInventory()
        {
            IPickableGameActor tool = Tool;

            Tool = null;
            return(tool);
        }
예제 #2
0
        private bool PerformPickup(IAtlas atlas, ITilesetTable tilesetTable)
        {
            // check tile in front of
            List <GameActorPosition> targets = GetInteractableTilesInFrontOf(atlas);

            // if no tile, check objects
            if (targets.Count == 0)
            {
                targets = GetInteractableObjectsInFrontOf(atlas);
            }
            if (targets.Count == 0)
            {
                return(false);
            }

            foreach (GameActorPosition target in targets)
            {
                IPickableGameActor interactableTarget = target.Actor as IPickableGameActor;
                if (interactableTarget == null)
                {
                    continue;
                }
                GameAction pickUpAction = new PickUp(this);
                interactableTarget.PickUp(atlas, pickUpAction, target.Position, tilesetTable);

                RemoveSpeed(target);
                return(true);
            }
            return(false);
        }
예제 #3
0
        public bool AddToInventory(IPickableGameActor item)
        {
            if (Tool != null)
            {
                return(false);
            }

            Tool = item;
            return(true);
        }
예제 #4
0
        public override void Resolve(GameActorPosition target, IAtlas atlas)
        {
            ICanPickGameObject picker   = Sender as ICanPickGameObject;
            IPickableGameActor pickItem = target.Actor as IPickableGameActor;

            if (picker == null || pickItem == null)
            {
                return;
            }

            if (picker.AddToInventory(pickItem))
            {
                atlas.Remove(target);
            }
        }
예제 #5
0
        private void RegisterSignals()
        {
            Func <IAtlas, float> inventoryItem = x =>
            {
                IPickableGameActor tool = x.GetAvatars().First().Tool;
                return(tool != null ? tool.TilesetId : 0);
            };

            Func <IAtlas, float> avatarEnergy = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.Energy : -1);
            };

            Func <IAtlas, float> avatarRested = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.Rested : -1);
            };

            Func <IAtlas, float> puppetControl = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.PuppetControlled ? 1 : 0 : -1);
            };

            SignalDispatchers = new Dictionary <string, Func <IAtlas, float> >();

            SignalDispatchers.Add("Item", inventoryItem);
            SignalDispatchers.Add("Energy", avatarEnergy);
            SignalDispatchers.Add("Rested", avatarRested);
            SignalDispatchers.Add("Puppet", puppetControl);
            // if you add a new signal, change the SignalCount variable accordingly

            Debug.Assert(TWConfig.Instance.SignalCount == SignalDispatchers.Count, "Number of signals has to be defined in SignalCount!");
        }
예제 #6
0
        private void RegisterSignals()
        {
            Func <IAtlas, float> inventoryItem = x =>
            {
                IPickableGameActor tool = x.GetAvatars().First().Tool;
                return(tool != null ? tool.TilesetId : 0);
            };

            Func <IAtlas, float> avatarEnergy = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.Energy : -1);
            };

            Func <IAtlas, float> avatarRested = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.Rested : -1);
            };

            Func <IAtlas, float> puppetControl = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.PuppetControlled ? 1 : 0 : -1);
            };

            Func <IAtlas, float> avatarPositionX = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.Position.X : 0f);
            };

            Func <IAtlas, float> avatarPositionY = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.Position.Y : 0f);
            };

            Func <IAtlas, float> avatarRotation = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                // in radians, zero = avatar is lookning on the top
                return(avatar != null ? avatar.Rotation % (2 * (float)Math.PI) : 0f);
            };

            Func <IAtlas, float> avatarReward = x =>
            {
                IAvatar avatar = x.GetAvatars().FirstOrDefault();
                return(avatar != null ? avatar.Reward : 0);
            };

            SignalDispatchers = new Dictionary <string, Func <IAtlas, float> >();

            SignalDispatchers.Add("Item", inventoryItem);
            SignalDispatchers.Add("Energy", avatarEnergy);
            SignalDispatchers.Add("Rested", avatarRested);
            SignalDispatchers.Add("Puppet", puppetControl);
            SignalDispatchers.Add("AbsPosX", avatarPositionX);
            SignalDispatchers.Add("AbsPosY", avatarPositionY);
            SignalDispatchers.Add("Rotation", avatarRotation);
            SignalDispatchers.Add("Reward", avatarReward);
            // if you add a new signal, change the SignalCount variable accordingly

            Debug.Assert(TWConfig.Instance.SignalCount == SignalDispatchers.Count, "Number of signals has to be defined in SignalCount!");
        }
예제 #7
0
        public bool AddToInventory(IPickableGameActor item)
        {
            if (Tool != null)
                return false;

            Tool = item;
            return true;
        }