示例#1
0
        private static void InstantiateCrate(XmlNode objectNode, Dictionary <int, XmlNode> dictProperties, ref Dictionary <BorderCrate, int> borderCrates,
                                             ref Dictionary <int, TriggerIronCrate> triggerCrates, ref Dictionary <int, TriggerNitroCrate> triggerNitros, ref List <ICheckpointLoadable> objectLoadable, ref List <CheckpointCrate> checkpoints)
        {
            string xString = objectNode.Attributes["x"].Value;
            float  xPos    = float.Parse(xString, System.Globalization.CultureInfo.InvariantCulture);

            string yString = objectNode.Attributes["y"].Value;
            float  yPos    = float.Parse(yString, System.Globalization.CultureInfo.InvariantCulture);

            Vector2 pos           = new Vector2(xPos + (int.Parse(objectNode.Attributes["width"].Value) / 2), yPos - (int.Parse(objectNode.Attributes["height"].Value) / 2));
            int     globalIdCrate = int.Parse(objectNode.Attributes["gid"].Value) - 1;

            XmlNode     properties    = dictProperties[globalIdCrate];
            XmlNodeList childList     = properties.ChildNodes;
            XmlNode     propertyCrate = SearchNodeWithAttribute(ref childList, "name", "crateType");
            CrateType   type          = (CrateType)int.Parse(propertyCrate.Attributes["value"].Value);

            Crate c = null;

            switch (type)
            {
            case CrateType.Apple:
                c = new AppleCrate(pos);
                break;

            case CrateType.Random:
                c = new RandomCrate(pos);
                break;

            case CrateType.Life:
                c = new LifeCrate(pos);
                break;

            case CrateType.Aku:
                c = new AkuAkuCrate(pos);
                break;

            case CrateType.Bounce_Apple:
                c = new AppleBounceCrate(pos);
                break;

            case CrateType.Bounce_Wooden:
                c = new WoodenBounceCrate(pos);
                break;

            case CrateType.Bounce_Iron:
                c = new IronBounceCrate(pos);
                break;

            case CrateType.Iron:
                c = new IronCrate(pos);
                break;

            case CrateType.Trigger_Iron:

                c = new TriggerIronCrate(pos);
                XmlNode idCrate = objectNode.FirstChild.LastChild;
                int     id      = int.Parse(idCrate.Attributes["value"].Value);
                triggerCrates.Add(id, (TriggerIronCrate)c);
                break;

            case CrateType.Tnt:
                c = new TntCrate(pos);
                break;

            case CrateType.Nitro:
                c = new NitroCrate(pos);

                if (objectNode.HasChildNodes)
                {
                    XmlNodeList list = objectNode.FirstChild.ChildNodes;
                    XmlNode     node = SearchNodeWithAttribute(ref list, "name", "vTriggerNitroId");
                    if (node != null)
                    {
                        int idN = int.Parse(node.Attributes["value"].Value);
                        if (idN > 0)
                        {
                            triggerNitros[idN].AddNitroCrate((NitroCrate)c);
                        }
                    }
                }

                break;

            case CrateType.Border_Crate:

                XmlNode   borderTypeNode = objectNode.FirstChild.FirstChild;
                CrateType borderType;

                if (borderTypeNode.Attributes["name"].Value.Equals("borderCrate"))
                {
                    borderType = (CrateType)int.Parse(borderTypeNode.Attributes["value"].Value);
                }
                else
                {
                    borderType = CrateType.Iron;
                }

                BorderCrate b = new BorderCrate(pos, borderType);
                borderCrates.Add(b, int.Parse(objectNode.FirstChild.LastChild.Attributes["value"].Value));
                objectLoadable.Add(b);
                return;

            case CrateType.Trigger_Iron_Nitro:
                c = new TriggerNitroCrate(pos);
                XmlNode idNitroCrate = objectNode.FirstChild.LastChild;
                int     idTrigger    = int.Parse(idNitroCrate.Attributes["value"].Value);
                triggerNitros.Add(idTrigger, (TriggerNitroCrate)c);
                break;

            case CrateType.Checkpoint_Crate:
                checkpoints.Add(new CheckpointCrate(pos));
                return;
            }

            if (c != null)
            {
                objectLoadable.Add(c);
            }
            //if (c != null && objectNode.HasChildNodes)
            //{
            //    if (objectNode.FirstChild.FirstChild.Attributes["name"].Value == "useGravity")
            //        c.UseGroundableGravity = bool.Parse(objectNode.FirstChild.FirstChild.Attributes["value"].Value);
            //}
        }
示例#2
0
 public void AddCrate(BorderCrate crate)
 {
     cratesToActive.Add(crate);
 }