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); } }
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; }