Inheritance: IGameMessage
Example #1
0
        public override void Message(IGameMessage msg)
        {
            HitBoxMessage boxes = msg as HitBoxMessage;

            if (boxes != null)
            {
                foreach (CollisionBox box in boxes.AddBoxes)
                {
                    box.SetParent(this);
                    AddBox(box);
                }

                enabledBoxes.Clear();
                foreach (var name in boxes.EnableBoxes)
                {
                    if (!boxIDsByName.ContainsKey(name))
                    {
                        throw new GameRunException(String.Format("The {0} entity wanted to enable a hitbox named {1}, which doesn't exist.", Parent.Name, name));
                    }

                    enabledBoxes.Add(boxIDsByName[name]);
                }

                return;
            }
        }
        public static Effect ParseEffect(XElement node)
        {
            Effect effect               = entity => {};
            List <CollisionBox> rects   = new List <CollisionBox>();
            HashSet <string>    enables = new HashSet <string>();
            bool clear = false;

            foreach (XElement prop in node.Elements())
            {
                switch (prop.Name.LocalName)
                {
                case "Enabled":
                    bool b = prop.GetValue <bool>();
                    effect += entity =>
                    {
                        CollisionComponent col = entity.GetComponent <CollisionComponent>();
                        if (col != null)
                        {
                            col.Enabled = b;
                        }
                    };
                    break;

                case "Hitbox":
                    rects.Add(new CollisionBox(prop));
                    break;

                case "EnableBox":
                    XAttribute nameAttrEn = prop.RequireAttribute("name");
                    enables.Add(nameAttrEn.Value);
                    break;

                case "Clear":
                    clear = true;
                    break;
                }
            }

            if (rects.Count > 0 || enables.Count > 0 || clear)
            {
                effect += entity =>
                {
                    HitBoxMessage msg = new HitBoxMessage(entity, rects, enables, clear);
                    entity.SendMessage(msg);
                }
            }
            ;

            return(effect);
        }
    }
Example #3
0
        public static Effect ParseEffect(XElement node)
        {
            Effect effect = entity => {};
            List<CollisionBox> rects = new List<CollisionBox>();
            HashSet<string> enables = new HashSet<string>();
            bool clear = false;

            foreach (XElement prop in node.Elements())
            {
                switch (prop.Name.LocalName)
                {
                    case "Enabled":
                        bool b = prop.GetValue<bool>();
                        effect += entity =>
                        {
                            CollisionComponent col = entity.GetComponent<CollisionComponent>();
                            if (col != null) col.Enabled = b;
                        };
                        break;

                    case "Hitbox":
                        rects.Add(new CollisionBox(prop));
                        break;

                    case "EnableBox":
                        XAttribute nameAttrEn = prop.RequireAttribute("name");
                        enables.Add(nameAttrEn.Value);
                        break;

                    case "Clear":
                        clear = true;
                        break;
                }
            }

            if (rects.Count > 0 || enables.Count > 0 || clear) effect += entity =>
            {
                HitBoxMessage msg = new HitBoxMessage(entity, rects, enables, clear);
                entity.SendMessage(msg);
            };

            return effect;
        }