Esempio n. 1
0
        public void AddWeaponToEntity(int eid)
        {
            Core.Entity         e = new Core.Entity(_entityID);
            Core.EntityReturner er;

            int weaponID = e.UID;

            Components.CreatureDetailsComp cdc = (Components.CreatureDetailsComp)GetSingleComponentByID(eid, Core.ComponentTypes.CreatureDetails);

            if (cdc.CreatureType != Types.CreatureTypes.Troll)
            {
                er = Core.EntityFactory.CreateSword();
            }
            else
            {
                er = Core.EntityFactory.CreateTrollClub();
            }


            Entities.Add(_entityID, er.ComponentList);
            EntityBitLookUp.Add(_entityID, er.LookUpBit);
            JustEntities.Add(_entityID, e);

            _entityID++;

            // add weapon to entity
            Core.InventoryAddEventArgs addEvent = new Core.InventoryAddEventArgs(Core.EventTypes.InventoryAdd, eid, weaponID);
            Core.EventBus.Publish(Core.EventTypes.InventoryAdd, addEvent);
        }
Esempio n. 2
0
        public void AddPotionToEntity(int eid)
        {
            Core.Entity         e = new Core.Entity(_entityID);
            Core.EntityReturner er;

            int potionID = e.UID;

            er = Core.EntityFactory.CreateHealthPotion();

            Entities.Add(_entityID, er.ComponentList);
            EntityBitLookUp.Add(_entityID, er.LookUpBit);
            JustEntities.Add(_entityID, e);

            _entityID++;

            // add potion to entity
            Core.InventoryAddEventArgs addEvent = new Core.InventoryAddEventArgs(Core.EventTypes.InventoryAdd, eid, potionID);
            Core.EventBus.Publish(Core.EventTypes.InventoryAdd, addEvent);
        }
Esempio n. 3
0
        public void OnMessage(Core.MessageEventArgs e)
        {
            switch (e.MessageType)
            {
            case Core.EventTypes.InventoryAdd:

                Core.InventoryAddEventArgs msg = (Core.InventoryAddEventArgs)e;

                int entPickingUp = msg.EntPickingUp;
                int pickedUpObj  = msg.PickedUpObject;

                List <Components.Component> pickedUpObjComps = _entityManager.GetCompsByID(pickedUpObj);
                List <Components.Component> entComps         = _entityManager.GetCompsByID(entPickingUp);

                Components.InventoryComp invComp
                    = (Components.InventoryComp)_entityManager.GetSingleComponentByID(entPickingUp, Core.ComponentTypes.Inventory);

                if (invComp != null)
                {
                    Components.PositionComp posComp =
                        (Components.PositionComp)pickedUpObjComps.Find(x => x.CompType == Core.ComponentTypes.Position);
                    Components.CollectableComp collectComp =
                        (Components.CollectableComp)pickedUpObjComps.Find(x => x.CompType == Core.ComponentTypes.Collectable);
                    Components.ItemValueComp vC = (Components.ItemValueComp)pickedUpObjComps.Find(x => x.CompType == Core.ComponentTypes.ItemValue);

                    //Components.Component c = _entityManager.GetSingleComponentByID(collectComp.)

                    bool hasValue = (vC != null);

                    if (collectComp.Active)
                    {
                        //is it treasure?
                        if (collectComp.Treasure)
                        {
                            //TODO stackable treasure

                            if (vC != null)
                            {
                                invComp.ValueCarried += vC.ItemValue;
                            }

                            // remove position comps from picked up object
                            _entityManager.RemoveCompFromEnt(pickedUpObj, Core.ComponentTypes.Position);
                            collectComp.Active = false;
                            _entityManager.RemoveEntFromPosition(posComp.X, posComp.Y, pickedUpObj);

                            invComp.Treasure.Add(pickedUpObj);
                        }
                        else
                        {
                            // is it stackable? - not currently used
                            //TODO stackable collectables
                            if (collectComp.Stackable)
                            {
                            }
                            else
                            {
                                Game.MessageLog.Add("picking up item");
                                // System.Threading.Thread.Sleep(1000);
                                if (posComp != null)
                                {
                                    _entityManager.RemoveEntFromPosition(posComp.X, posComp.Y, pickedUpObj);
                                    _entityManager.RemoveCompFromEnt(pickedUpObj, Core.ComponentTypes.Position);
                                    pickedUpObjComps.Remove(posComp);
                                }
                                invComp.Inventory.Add(pickedUpObj);
                            }
                        }
                    }
                }
                break;
            }
        }