Esempio n. 1
0
    public void RemoveEntityAt(FEntity entity)
    {
        FEvent loc = entity.PropagateEvent(new FEvent(FEventCodes.GET_LOCATION, "x", -1, "y", -1));

        string key = ((int)loc.Get("x")) + "," + ((int)loc.Get("y"));

        if (!entityLocationMap.ContainsKey(key))
        {
            // Debug.Log("Could not find item");
            return;
        }
        entityLocationMap[key].Remove(entity);
    }
Esempio n. 2
0
    public bool TryMoveEntity(FEntity ch, int tox, int toy)
    {
        FEvent moveIntoEvent = new FEvent(FEventCodes.ENTITY_TRY_MOVE_INTO);

        moveIntoEvent.Add("x", tox);
        moveIntoEvent.Add("y", toy);
        moveIntoEvent.Add("entity", ch);
        moveIntoEvent.Add("moveCancelled", false);

        FEvent loc1 = ch.PropagateEvent(new FEvent(FEventCodes.GET_LOCATION, "x", -1, "y", -1));
        int    dist = Mathf.Max(Mathf.Abs((int)loc1.Get("x") - tox), Mathf.Abs((int)loc1.Get("y") - toy));

        if (dist > 1)
        {
            Debug.Log(loc1.Get("x") + "," + loc1.Get("y"));
            List <MapTile> tiles = GameMap.instance.PathToFrom((int)loc1.Get("x"), (int)loc1.Get("y"), tox, toy);
            Debug.Log(tiles[0].x + "," + tiles[0].y);
            return(TryMoveEntity(ch, tiles[0].x, tiles[0].y));
        }

        List <FEntity> entitiesAtNewLocation = map.GetEntitiesAt(tox, toy);

        foreach (FEntity entity in entitiesAtNewLocation)
        {
            moveIntoEvent = entity.PropagateEvent(moveIntoEvent);
        }

        if ((bool)moveIntoEvent.Get("moveCancelled"))
        {
            //Nope
            if (moveIntoEvent.Get("moveBlockedByEntity") != null)
            {
                //End turn
                FEntity entity      = (FEntity)moveIntoEvent.Get("blockingEntity");
                FEvent  meleeAttack = ch.PropagateEvent(new FEvent(FEventCodes.ENTITY_MELEE_ATTACK, "target", entity, "damage", 0));
            }
            EndTurn();
            return(false);
        }

        FEvent moveEvent = new FEvent(FEventCodes.ENTITY_MOVE);

        moveEvent.Add("x", tox);
        moveEvent.Add("y", toy);

        moveEvent = ch.PropagateEvent(moveEvent);
        EndTurn();

        return(true);
    }
    public void RefreshWindow(List <FEntity> entities)
    {
        int num = 1;

        entityList = entities;

        if (texts != null)
        {
            for (int i = 0; i < texts.Count; i++)
            {
                Destroy(texts[i].gameObject);
            }
        }

        texts = new List <TMPro.TextMeshProUGUI>();

        foreach (FEntity entity in entities)
        {
            TMPro.TextMeshProUGUI textEntry = Instantiate(itemPrefab);
            texts.Add(textEntry);
            FEvent name = entity.PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME));
            textEntry.text = num + ". " + name.Get("fullstring") as string;
            textEntry.rectTransform.parent = listParent;
            textEntry.color = normalColor;
            num++;
        }
    }
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.ENTITY_RECEIVE_MAGICAL_ATTACK)
     {
         if (ev.data.ContainsKey("type"))
         {
             if ((Stat.ELEMENT)ev.Get("type") == eLEMENT)
             {
                 int dmg = (int)ev.Get("damage");
                 dmg = (int)Mathf.Round((float)dmg * modifier);
                 ev.Set("damage", dmg);
             }
         }
     }
     return(ev);
 }
Esempio n. 5
0
    public void UpdateInterface()
    {
        StatBlockComponent stats = playerEntity.GetComponent <StatBlockComponent>();

        hpText.text = "HP: " + stats.hp + "/" + stats.max_hp;

        FEvent         list        = playerEntity.PropagateEvent(new FEvent(FEventCodes.GET_WIELDED_LIST, "list", new List <FEntity>()));
        List <FEntity> items       = list.Get("list") as List <FEntity>;
        string         listOfItems = "";

        for (int i = 0; i < items.Count; i++)
        {
            string nameOfItem = items[i].PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME)).Get("name") as string;
            listOfItems += nameOfItem;
            if (i < items.Count - 1)
            {
                listOfItems += ", ";
            }
        }
        wieldingText.text = "Equipped: " + listOfItems;

        FEvent        groundList  = GameMap.instance.PropagateEventToTile(new FEvent(FEventCodes.GET_VISIBLE_LIST, "list", new List <string>()), playerEntity);
        List <string> onFloor     = groundList.Get("list") as List <string>;
        string        listOnFloor = "";

        for (int i = 0; i < onFloor.Count; i++)
        {
            listOnFloor += onFloor[i];
            if (i < onFloor.Count - 1)
            {
                listOnFloor += ", ";
            }
        }
        onGroundText.text = "Here: " + listOnFloor;
    }
 public override FEvent PropagateEvent(FEvent e)
 {
     if (e.eventName == FEventCodes.ENTITY_MELEE_ATTACK)
     {
         int dmg = e.Get("damage") == null ? 0 : (int)e.Get("damage");
         dmg += damage;
         e.Set("damage", dmg);
     }
     if (e.eventName == FEventCodes.THROWN)
     {
         //Collect a damage event as if we were attacking?
         FEvent attack = parentEntity.PropagateEvent(new FEvent(FEventCodes.ENTITY_MELEE_ATTACK));
         GameMap.instance.PropagateEventToTile(new FEvent(FEventCodes.ENTITY_RECEIVE_THROWN_ATTACK, "attacker", this.parentEntity, "damage", (int)attack.Get("damage")), parentEntity, true);
     }
     return(e);
 }
Esempio n. 7
0
 public void SelectInventoryItem(int item)
 {
     if (item < 1 || item > inventory.Count)
     {
         return;
     }
     else
     {
         //Get affordances
         FEvent        getaffs = inventory[item - 1].PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_AFFORDANCES, "list", new List <string>()));
         List <string> affs    = getaffs.Get("list") as List <string>;
         string        suff    = "";
         for (int i = 0; i < affs.Count; i++)
         {
             if (i == 0)
             {
                 suff += " (";
             }
             suff += affs[i];
             if (i < affs.Count - 1)
             {
                 suff += ", ";
             }
             else
             {
                 suff += ")";
             }
         }
         selectedIndex = item;
         //Select the item
         ItemListWindow.instance.SelectItem(item - 1, suff);
         selectedInventoryItem = inventory[item - 1];
     }
 }
Esempio n. 8
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (ev.eventName == FEventCodes.ENTITY_MELEE_ATTACK)
        {
            FEntity target = (FEntity)ev.Get("target");

            FEvent nameEvent = parentEntity.PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME, "name", "????"));
            string ourName   = (string)nameEvent.Get("fullstring");
            nameEvent = target.PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME, "name", "????"));
            string theirName = (string)nameEvent.Get("fullstring");

            MessageLog.instance.Log(ourName + " attacks the " + theirName + "!");


            target.PropagateEvent(new FEvent(FEventCodes.ENTITY_RECEIVE_MELEE_ATTACK, "attacker", this.parentEntity, "damage", (int)ev.Get("damage")));
        }
        return(ev);
    }
Esempio n. 9
0
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.GET_ENTITY_AFFORDANCES)
     {
         List <string> affs = ev.Get("list") as List <string>;
         affs.Add("[t]hrow");
     }
     return(ev);
 }
Esempio n. 10
0
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.ENTITY_RECEIVE_MELEE_ATTACK)
     {
         FEntity attacker = ev.Get("attacker") as FEntity;
         attacker.PropagateEvent(new FEvent(FEventCodes.ENTITY_RECEIVE_MAGICAL_ATTACK, "damage", thornsAmount, "attacker", parentEntity, "element", Stat.ELEMENT.NONE));
     }
     return(ev);
 }
Esempio n. 11
0
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.GET_ALL_PICKABLES)
     {
         List <FEntity> l = ev.Get("items") as List <FEntity>;
         l.Add(parentEntity);
         ev.Set("items", l);
     }
     return(ev);
 }
Esempio n. 12
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (ev.eventName == FEventCodes.ENTITY_MELEE_ATTACK)
        {
            FEntity target = ev.Get("target") as FEntity;
            target.PropagateEvent(new FEvent(FEventCodes.INFLICT_BLEEDING));
        }

        return(ev);
    }
Esempio n. 13
0
    public int StraightLineDistanceBetween(FEntity e1, FEntity e2)
    {
        // LocationComponent l1 = e1.GetComponent<LocationComponent>();
        // LocationComponent l2 = e2.GetComponent<LocationComponent>();
        FEvent loc1 = e1.PropagateEvent(new FEvent(FEventCodes.GET_LOCATION, "x", -1, "y", -1));
        FEvent loc2 = e2.PropagateEvent(new FEvent(FEventCodes.GET_LOCATION, "x", -1, "y", -1));

        return(Mathf.Max(Mathf.Abs(((int)loc1.Get("x") - ((int)loc2.Get("x")))), ((int)loc1.Get("y") - ((int)loc2.Get("y")))));
        // return (e1.gameObject.transform.position-e2.gameObject.transform.position).magnitude;
    }
Esempio n. 14
0
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.GET_ENTITY_NAME)
     {
         FEvent mods = parentEntity.PropagateEvent(new FEvent(FEventCodes.GET_NAME_MODIFIERS, "prefixes", new List <string>(), "suffixes", new List <string>()));
         string pref = "";
         foreach (string s in mods.Get("prefixes") as List <string> )
         {
             pref += s + " ";
         }
         string suff = "";
         foreach (string s in mods.Get("suffixes") as List <string> )
         {
             suff += s + " ";
         }
         ev.Set("name", pref + _name + suff);
         ev.Set("namecolor", hexColor);
         ev.Set("fullstring", pref + "<#" + hexColor + ">" + _name + "<#ffffff>" + suff);
     }
     if (ev.eventName == FEventCodes.GET_VISIBLE_LIST)
     {
         FEvent mods = parentEntity.PropagateEvent(new FEvent(FEventCodes.GET_NAME_MODIFIERS, "prefixes", new List <string>(), "suffixes", new List <string>()));
         string pref = "";
         foreach (string s in mods.Get("prefixes") as List <string> )
         {
             pref += s + " ";
         }
         string suff = "";
         foreach (string s in mods.Get("suffixes") as List <string> )
         {
             suff += s + " ";
         }
         if (suff.Length > 0)
         {
             suff = " " + suff;
         }
         List <string> list = ev.Get("list") as List <string>;
         list.Add(pref + "<#" + hexColor + ">" + _name + "<#ffffff>" + suff);
         ev.Set("list", list);
     }
     return(ev);
 }
Esempio n. 15
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (dead && ev.eventName == FEventCodes.GET_NAME_MODIFIERS)
        {
            List <string> ss = (ev.Get("suffixes") as List <string>);
            ss.Add("(dead)");
            ev.Set("suffixes", ss);
        }

        if (dead)
        {
            return(ev);
        }

        if (ev.eventName == FEventCodes.ENTITY_TRY_MOVE_INTO)
        {
            FEntity mover = (FEntity)ev.Get("entity");

            //If the player tries to move into us, fight them
            if (mover.HasComponent(typeof(PlayerComponent)))
            {
                //Request attack
                ev.Set("moveBlockedByEntity", true);
                ev.Set("moveCancelled", true);
                ev.Set("blockingEntity", this.parentEntity);
                return(ev);
            }
            else
            {
                ev.Set("moveCancelled", true);
            }
        }
        else if (ev.eventName == FEventCodes.ENTITY_DIED)
        {
            //Change the avatar
            dead = true;
            parentEntity.PropagateEvent(new FEvent(FEventCodes.CHANGE_SPRITE, "spriteName", deathSpriteName));
            parentEntity.PropagateEvent(new FEvent(FEventCodes.CHANGE_SPRITE_LAYER, "spriteLayer", Model.instance.backgroundLayerName));
        }

        return(ev);
    }
Esempio n. 16
0
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.ENTITY_MELEE_ATTACK)
     {
         if (Random.Range(0f, 1f) < disarmChance)
         {
             (ev.Get("target") as FEntity).PropagateEvent(new FEvent(FEventCodes.DISARM_WEAPON));
         }
     }
     return(ev);
 }
Esempio n. 17
0
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.PICKED_UP)
     {
         spriteRenderer.enabled = false;
     }
     if (ev.eventName == FEventCodes.THROWN || ev.eventName == FEventCodes.DROP_ITEM_HERE)
     {
         spriteRenderer.enabled = true;
     }
     if (ev.eventName == FEventCodes.CHANGE_SPRITE)
     {
         SetSprite((string)ev.Get("spriteName"));
     }
     if (ev.eventName == FEventCodes.CHANGE_SPRITE_LAYER)
     {
         SetSpriteLayer((string)ev.Get("spriteLayer"));
     }
     return(ev);
 }
Esempio n. 18
0
    public void ShowInventory()
    {
        FEvent         getInventory     = playerEntity.PropagateEvent(new FEvent(FEventCodes.GET_CARRIED_LIST, "list", new List <FEntity>()));
        List <FEntity> inventoryOptions = getInventory.Get("list") as List <FEntity>;
        FEvent         wieldedList      = playerEntity.PropagateEvent(new FEvent(FEventCodes.GET_WIELDED_LIST, "list", new List <FEntity>()));

        inventory = new List <FEntity>();
        inventory.AddRange(wieldedList.Get("list") as List <FEntity>);
        inventory.AddRange(inventoryOptions);
        ItemListWindow.instance.OpenWindow("Inventory", "Number: Select\tESC: Close", inventory);
    }
Esempio n. 19
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (ev.eventName == FEventCodes.ENTITY_MELEE_ATTACK)
        {
            int dmg = ev.Get("damage") == null ? 0 : (int)ev.Get("damage");
            dmg -= penalty;
            ev.Set("damage", dmg);
        }

        /*
         *  I think this is the only example of this in the game, but I like it a lot.
         *  Rusty weapons are called "Rusty <name>" and the word rusty is in a nice brown. Mmm!
         */
        if (ev.eventName == FEventCodes.GET_NAME_MODIFIERS)
        {
            List <string> ps = (ev.Get("prefixes") as List <string>);
            ps.Add("<#AB5236>rusty<#ffffff>");
            ev.Set("prefixes", ps);
        }
        return(ev);
    }
Esempio n. 20
0
 public void SelectItem(int item, string suffix = "")
 {
     if (selected > -1)
     {
         texts[selected].color = normalColor;
         FEvent name = entityList[selected].PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME));
         texts[selected].text = (selected + 1) + ". " + name.Get("fullstring") as string;
     }
     selected = item;
     texts[selected].color = selectedColor;
     texts[selected].text  = texts[selected].text + suffix;
 }
Esempio n. 21
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (ev.eventName == FEventCodes.ENTITY_RECEIVE_MELEE_ATTACK || ev.eventName == FEventCodes.ENTITY_RECEIVE_THROWN_ATTACK)
        {
            int dmg = (int)ev.Get("damage");
            dmg -= damageReduction;
            dmg  = dmg < 0 ? 0 : dmg;
            ev.Set("damage", dmg);
        }

        return(ev);
    }
 /*
  * Potions were one of the last things I implemented before stopping on the example. This is a good example of a branch
  * point for detail in an ECS. A potion could be a container filled with a liquid, and the liquid has effects when it
  * touches things (the floor, a human, a zombie). However that felt too detailed/granular, so instead potions are things
  * that can be drunk or thrown, and then apply affects to the things they're drunk by or thrown at. So you can't find
  * a fountain of healing liquid or find someone who cries tears of healing (or maybe you could but it'd be another case
  * rather than reusing the same healing liquid in a new context).
  */
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.DRINK)
     {
         //INGEST
         FEntity drinker = ev.Get("drinker") as FEntity;
         drinker.PropagateEvent(new FEvent(FEventCodes.HEAL_HP, "amount", 5));
     }
     else if (ev.eventName == FEventCodes.CONTAINER_BREAK)
     {
         //BROKE
         GameMap.instance.PropagateEventToTile(new FEvent(FEventCodes.HEAL_HP, "amount", 5), parentEntity, true);
     }
     return(ev);
 }
Esempio n. 23
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (ev.eventName == FEventCodes.ENTITY_MELEE_ATTACK && Random.Range(0f, 1f) < mugChance)
        {
            FEntity        target        = (FEntity)ev.Get("target");
            List <FEntity> targetCarries = target.PropagateEvent(new FEvent(FEventCodes.GET_CARRIED_LIST, "list", new List <FEntity>())).Get("list") as List <FEntity>;
            if (targetCarries.Count > 0)
            {
                FEntity stolenItem = targetCarries[Random.Range(0, targetCarries.Count)];
                //Take the item
                target.PropagateEvent(new FEvent(FEventCodes.TRY_PICK_UP_OBJECT, "object", stolenItem));
                stolenItem.PropagateEvent(new FEvent(FEventCodes.PICKED_UP, "carrier", parentEntity));
                parentEntity.PropagateEvent(new FEvent(FEventCodes.RECEIVE_ITEM, "item", stolenItem));

                Debug.Log("Stolen item");
                // MessageLog.instance.Log("")
            }
        }
        return(ev);
    }
Esempio n. 24
0
    internal List <FEntity> GetPickUppableItemsAt(FEntity entity, bool excludeSelf = true)
    {
        string key = GetPosition(entity);

        List <FEntity> res = new List <FEntity>();

        foreach (FEntity fe in entityLocationMap[key])
        {
            //We probably never want to pick stuff up off the thing we're looking at?
            if (excludeSelf && fe == entity)
            {
                continue;
            }

            FEvent takeables = fe.PropagateEvent(new FEvent(FEventCodes.GET_ALL_PICKABLES, "items", new List <FEntity>()));
            foreach (FEntity item in takeables.Get("items") as List <FEntity> )
            {
                res.Add(item);
            }
        }
        return(res);
    }
Esempio n. 25
0
    public void DrinkSelected()
    {
        if (selectedInventoryItem == null || !selectedInventoryItem.HasComponent(typeof(Drinkable)))
        {
            return;
        }

        string _n = selectedInventoryItem.PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME)).Get("name") as string;

        MessageLog.instance.Log("You drink the " + _n + ".");

        FEvent drink = selectedInventoryItem.PropagateEvent(new FEvent(FEventCodes.DRINK, "drinker", playerEntity, "consumed", false));

        if ((bool)drink.Get("consumed"))
        {
            inventory.Remove(selectedInventoryItem);
            playerEntity.PropagateEvent(new FEvent(FEventCodes.CONSUME_ITEM, "item", selectedInventoryItem));
        }
        selectedInventoryItem = null;
        selectedIndex         = -1;

        ItemListWindow.instance.RefreshWindow(inventory);
    }
Esempio n. 26
0
 public override FEvent PropagateEvent(FEvent ev)
 {
     if (ev.eventName == FEventCodes.WAS_EQUIPPED)
     {
         equipped = true;
     }
     if (ev.eventName == FEventCodes.WAS_UNEQUIPPED)
     {
         equipped = false;
     }
     if (ev.eventName == FEventCodes.GET_ENTITY_AFFORDANCES)
     {
         List <string> affs = ev.Get("list") as List <string>;
         if (!equipped)
         {
             affs.Add("[e]quip");
         }
         else
         {
             affs.Add("[u]nequip");
         }
     }
     return(ev);
 }
Esempio n. 27
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (ev.eventName == FEventCodes.TRY_PICK_UP_OBJECT)
        {
            FEntity entity = ev.Get("object") as FEntity;
            if (contents.Contains(entity))
            {
                contents.Remove(entity);
            }
        }
        if (ev.eventName == FEventCodes.LOSE_ITEM || ev.eventName == FEventCodes.CONSUME_ITEM || ev.eventName == FEventCodes.EQUIP_ITEM)
        {
            FEntity entity = ev.Get("item") as FEntity;
            if (contents.Contains(entity))
            {
                contents.Remove(entity);
            }
        }
        if (ev.eventName == FEventCodes.RECEIVE_ITEM || ev.eventName == FEventCodes.UNEQUIP_ITEM)
        {
            string name = (ev.Get("item") as FEntity).PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME)).Get("fullstring") as string;
            // Debug.Log("Added item to my inventory: "+name);
            FEntity entity = (FEntity)ev.Get("item");
            contents.Add(entity);
            return(ev);
        }
        else if (ev.eventName == FEventCodes.GET_VISIBLE_LIST || ev.eventName == FEventCodes.GET_ALL_PICKABLES)
        {
            //nothing to do here because we probably can't see our contents
            //q: is this a container's property? i'm not really sure.
            if (concealed)
            {
                return(ev);
            }
            else
            {
                foreach (FEntity ent in contents)
                {
                    ev = ent.PropagateEvent(ev);
                }
            }
        }
        else if (ev.eventName == FEventCodes.GET_CARRIED_LIST)
        {
            List <FEntity> list = ev.Get("list") as List <FEntity>;
            foreach (FEntity en in contents)
            {
                list.Add(en);
            }
            ev.Set("list", list);
        }
        else
        {
            foreach (FEntity fe in contents)
            {
                //Hmm.
            }
        }

        return(ev);
    }
Esempio n. 28
0
    public override FEvent PropagateEvent(FEvent ev)
    {
        if (ev.eventName == FEventCodes.GET_NAME_MODIFIERS ||
            ev.eventName == FEventCodes.GET_LOCATION)
        {
            return(ev);
        }

        if (ev.eventName == FEventCodes.ENTITY_DIED)
        {
            foreach (EntitySlot slot in slots.Values)
            {
                if (slot.slot != null)
                {
                    parentEntity.PropagateEvent(new FEvent(FEventCodes.UNEQUIP_ITEM, "item", slot.slot));
                }
            }
        }

        if (ev.eventName == FEventCodes.DISARM_WEAPON)
        {
            List <FEntity> weapons = new List <FEntity>();
            //What can be disarmed?
            foreach (EntitySlot slot in slots.Values)
            {
                if (slot.slot != null && slot.slot.HasComponent(typeof(MeleeWeaponComponent)))
                {
                    weapons.Add(slot.slot);
                }
            }

            if (weapons.Count > 0)
            {
                FEntity disarmTarget = weapons[Random.Range(0, weapons.Count)];
                parentEntity.PropagateEvent(new FEvent(FEventCodes.UNEQUIP_ITEM, "item", disarmTarget));

                FEvent lev = parentEntity.PropagateEvent(new FEvent(FEventCodes.GET_LOCATION, "x", -1, "y", -1));
                parentEntity.PropagateEvent(new FEvent(FEventCodes.LOSE_ITEM, "item", disarmTarget, "x", (int)lev.Get("x"), "y", (int)lev.Get("y")));
                disarmTarget.PropagateEvent(new FEvent(FEventCodes.DROP_ITEM_HERE, "item", disarmTarget, "x", (int)lev.Get("x"), "y", (int)lev.Get("y")));

                FEvent name = disarmTarget.PropagateEvent(new FEvent(FEventCodes.GET_ENTITY_NAME));
                MessageLog.instance.Log(You("drop the " + name.Get("fullstring") as string));
            }

            return(ev);
        }

        if (ev.eventName == FEventCodes.ENTITY_SPAWN || ev.eventName == FEventCodes.GET_ENTITY_NAME)
        {
            //Ok so we clearly need better logic to determine what events propagate to children.
            return(ev);
        }

        foreach (EntitySlot slot in slots.Values)
        {
            if (slot.slot != null)
            {
                ev = slot.slot.PropagateEvent(ev);
            }
        }

        // if(ev.eventName == FEventCodes.TRY_PICK_UP_OBJECT){
        //     FEntity entity = ev.Get("object") as FEntity;
        //     foreach(EntitySlot slot in slots.Values){
        //         if(slot.slot != null && slot.slot == entity){
        //             slot.slot = null;
        //             entity.PropagateEvent(new FEvent(FEventCodes.WAS_UNEQUIPPED));
        //         }
        //     }
        // }

        if (ev.eventName == FEventCodes.EQUIP_ITEM)
        {
            string sn = ev.Get("slotName") as string;
            if (sn == null)
            {
                Debug.LogWarning("No slot provided for equip request");
                foreach (EntitySlot s in slots.Values)
                {
                    if (s.slot == null)
                    {
                        sn = s.slotName;
                    }
                }
            }
            if (sn == null)
            {
                return(ev);
            }

            FEntity en = ev.Get("item") as FEntity;
            if (EquipInSlot(sn, en))
            {
                en.PropagateEvent(new FEvent(FEventCodes.WAS_EQUIPPED));
            }
        }
        if (ev.eventName == FEventCodes.UNEQUIP_ITEM)
        {
            FEntity en = ev.Get("item") as FEntity;
            foreach (EntitySlot slot in slots.Values)
            {
                if (slot.slot != null && slot.slot == en)
                {
                    slot.slot = null;
                    en.PropagateEvent(new FEvent(FEventCodes.WAS_UNEQUIPPED));
                }
            }
        }
        //This is actually identical to unequipping it, but I duplicated it for clarity >_>
        if (ev.eventName == FEventCodes.LOSE_ITEM)
        {
            FEntity en = ev.Get("item") as FEntity;
            foreach (EntitySlot slot in slots.Values)
            {
                if (slot.slot != null && slot.slot == en)
                {
                    slot.slot = null;
                    en.PropagateEvent(new FEvent(FEventCodes.WAS_UNEQUIPPED));
                }
            }
        }

        if (ev.eventName == FEventCodes.GET_WIELDED_LIST)
        {
            List <FEntity> names = (List <FEntity>)ev.Get("list");
            foreach (EntitySlot slot in slots.Values)
            {
                if (slot.slot == null)
                {
                    continue;
                }
                names.Add(slot.slot);
            }
            ev.Set("list", names);
        }

        return(ev);
    }
Esempio n. 29
0
    public string GetPosition(FEntity entity)
    {
        FEvent loc = entity.PropagateEvent(new FEvent(FEventCodes.GET_LOCATION, "x", -1, "y", -1));

        return(((int)loc.Get("x")) + "," + ((int)loc.Get("y")));
    }
Esempio n. 30
0
    public Vector3 GetMapLocation(FEntity entity)
    {
        FEvent loc = entity.PropagateEvent(new FEvent(FEventCodes.GET_LOCATION, "x", -1, "y", -1));

        return(GetMapLocation(((int)loc.Get("x")), ((int)loc.Get("y"))));
    }