/// <summary>
    /// Check grid to decrease every bomb timer with every user action.
    /// If any bomb timer reaches to 0, then send this information to end the game.
    /// </summary>
    public BombEvent BombCheck(ref HexagonGrid grid)
    {
        BombEvent bombEvent = new BombEvent(false, new List <BombElement>());

        for (int x = 0; x < grid.width; x++)
        {
            for (int y = 0; y < grid.height; y++)
            {
                if (!(bool)grid.GetElement(x, y)?.bombInfo.hasBomb) // If hexagon element does not have bomb then continue
                {
                    continue;
                }
                HexagonElement hexagonElement = (HexagonElement)grid.GetElement(x, y);
                int            bombTimer      = hexagonElement.bombInfo.bombLeftMove;
                bombTimer--;
                if (bombTimer <= 0) // Bomb time reaches to zero end the game
                {
                    bombEvent.isBombeExploded = true;
                    Debug.Log("Bomb exploded at: (" + x + ", " + y + ")");
                }
                grid.SetElement(x, y, new HexagonElement(hexagonElement.matchType, new BombInfo(hexagonElement.bombInfo.hasBomb, bombTimer)));
                bombEvent.bombElements.Add(new BombElement(new Vector2(x, y), new BombInfo(true, bombTimer))); // Send list of bomb info with their timer to renew UI and such
            }
        }
        return(bombEvent);
    }
Esempio n. 2
0
 public ExplodeEvent(bool IsActionValid, int turnNo, List <ExplodeElement> explodeElements)
 {
     this.IsActionValid   = IsActionValid;
     this.turnNo          = turnNo;
     this.explodeElements = explodeElements;
     this.bombEvent       = new BombEvent();
 }
    /// <summary>
    /// With match element, clone mock grids to simulate the situation if the match is valid or not.
    /// Search mock grids to find a match with specified rules. If there is match, add matches to the explode events, send turn numbe rof the mock grid and bomb events.
    /// </summary>
    /// <param name="matchElement">Threee coord values for the match.</param>
    /// <param name="simulate">If match is valid, make it a valid simulation by changing original grid with the mock one.</param>
    /// <returns>Explode event</returns>
    public ExplodeEvent Explode(MatchElement?matchElement, bool isTurnClockwise = false, bool simulate = true)
    {
        // Create mock grid to simulate request
        List <HexagonGrid> mockGrids = new List <HexagonGrid>();

        for (int i = 0; i < 2; i++)
        {
            mockGrids.Add((HexagonGrid)this.grid.Clone());
        }

        // Turn mock grids. First one with 120 degree, secone one with 240 degree.
        if (matchElement != null && matchElement?.coords != null)
        {
            int firstIndex = isTurnClockwise ? 0 : 2;
            int lastIndex  = isTurnClockwise ? 2 : 0;
            for (int mockIndex = 0; mockIndex < 2; mockIndex++)
            {
                for (int turn = 0; turn < mockIndex + 1; turn++)
                {
                    HexagonElement element = (HexagonElement)mockGrids[mockIndex].GetElement((int)matchElement?.coords[firstIndex].x, (int)matchElement?.coords[firstIndex].y);
                    mockGrids[mockIndex].grid[(int)matchElement?.coords[firstIndex].x, (int)matchElement?.coords[firstIndex].y] = mockGrids[mockIndex].grid[(int)matchElement?.coords[1].x, (int)matchElement?.coords[1].y];
                    mockGrids[mockIndex].grid[(int)matchElement?.coords[1].x, (int)matchElement?.coords[1].y] = mockGrids[mockIndex].grid[(int)matchElement?.coords[lastIndex].x, (int)matchElement?.coords[lastIndex].y];
                    mockGrids[mockIndex].grid[(int)matchElement?.coords[lastIndex].x, (int)matchElement?.coords[lastIndex].y] = element;
                }
            }
        }

        // Check explode events on the mock grids to see if the action is valid or not.
        // Every rule has to be tried to be sure the match.
        List <ExplodeElement> explodeElements = new List <ExplodeElement>();
        int selectedMockGridNo = 0;

        CheckGridWithrulesToFindMatch(mockGrids, explodeElements, ref selectedMockGridNo);

        // If action is valid and not for game over check
        if (explodeElements.Count > 0 && simulate)
        {
            this.grid = mockGrids[selectedMockGridNo];
        }

        ExplodeEvent explodeEvent = new ExplodeEvent(explodeElements.Count > 0, selectedMockGridNo + 1, explodeElements);

        // If action is valid and not for game over check
        if (simulate)
        {
            scoring.SetScore(explodeEvent);
        }

        // If action is valid and done by user then check for bomb timers and explosion.
        if (matchElement != null && matchElement?.coords != null && matchElement?.coords.Count > 0 && simulate)
        {
            BombEvent bombEvent = scoring.BombCheck(ref this.grid);
            explodeEvent.bombEvent = bombEvent;
        }


        return(explodeEvent);
    }
        private void updateTick(object sender, UpdateTickedEventArgs e)
        {
            if (!Context.IsWorldReady)
            {
                return;
            }

            // Make Death Events not as bad
            if (Game1.killScreen && markedForDeath == false)
            {
                markedForDeath = true;
            }
            if (Game1.killScreen == false && markedForDeath && !Game1.eventUp && (Game1.player.currentLocation.name.Equals("Hospital") || Game1.player.currentLocation.name.Equals("Mine") || Game1.player.currentLocation is IslandLocation))
            {
                BuffManager.buffPlayer(new BuffOption("rush", "Adrenaline", true, 100).add_attack(6).addShortDesc("Buff Attack +6").setGlow(Color.OrangeRed));
                BuffManager.buffPlayer(new BuffOption("pain", "Pain Medicine", true, 100).add_defense(3).addShortDesc("Buff Defense +3"));
                BuffManager.buffPlayer(new BuffOption("speed", "Fight or Flight", true, 100).add_speed(4).addShortDesc("Buff Speed +4").setGlow(Color.LightBlue));
                markedForDeath = false;
            }
            // End of Death Event

            if (e.IsMultipleOf(15))
            {
                BuffManager.UpdateTick();
                Spawner.UpdateTick();
                actionManager.Update();

                if (!Game1.player.currentLocation.name.Equals("Hospital"))
                {
                    if (!IsBusyDoingSomething())
                    {
                        BombEvent.UpdateTick();
                    }
                }
            }

            if (e.IsOneSecond)
            {
                //MineBuffManager.UpdateTick();
                augmentManager.UpdateTick();
                BuffManager.Update();

                if (!Game1.player.currentLocation.name.Equals("Hospital") || Game1.player.currentLocation.Name.Equals("FarmHouse"))
                {
                    if (!IsBusyDoingSomething() &&
                        !Game1.paused &&
                        !Game1.menuUp &&
                        !Game1.isTimePaused &&
                        Game1.shouldTimePass())
                    {
                        MeteorStorm.UpdateTick();
                        FireballEvent.UpdateTick();
                    }
                }
            }
        }
Esempio n. 5
0
    public void AddBombEvent(BombEvent bombEvent)
    {
        m_events.Add(bombEvent);
        string name = "事件" + m_events.Count;

        m_eventNames.Add(name);
        m_dpdEventList.ClearOptions();
        m_dpdEventList.AddOptions(m_eventNames);
        m_dpdEventList.value = m_events.Count;
    }
Esempio n. 6
0
 void BombEventHandler(BombEvent e)
 {
     if (e.isExplode)
     {
         --bomb_cnt;
         if (bomb_cnt == 0)
         {
             GetComponent <RawImage>().enabled = false;
         }
     }
     else
     {
         ++bomb_cnt;
         GetComponent <RawImage>().enabled = true;
     }
 }
Esempio n. 7
0
    private bool ParseXml(string filePath)
    {
        try
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(filePath);
            XmlElement eRoot = (XmlElement)xmlDocument.SelectSingleNode("MapData");

            foreach (XmlElement element in eRoot.ChildNodes)
            {
                //处理地图信息
                if (element.Name == "Map")
                {
                    int    len         = int.Parse(DecryptAttribute(element, "len"));
                    int    wid         = int.Parse(DecryptAttribute(element, "wid"));
                    string textureName = (DecryptAttribute(element, "TexturePath"));

                    //int len = int.Parse(element.GetAttribute("len"));
                    //int wid = int.Parse(element.GetAttribute("wid"));
                    //string textureName = element.GetAttribute("TexturePath");
                    MapManager.Instance.CreateMap(len, wid, textureName);
                }
                else if (element.Name == "EntitiesList")
                {
                    List <Entity> entities = new List <Entity>();
                    foreach (XmlElement eEntity in element.ChildNodes)
                    {
                        //实体属性
                        XmlElement eEntityAtr = (XmlElement)eEntity.SelectSingleNode("EntityAtr");

                        //位置
                        float x = float.Parse(DecryptAttribute(eEntityAtr, "posX"));
                        float y = float.Parse(DecryptAttribute(eEntityAtr, "posY"));
                        float z = float.Parse(DecryptAttribute(eEntityAtr, "posZ"));

                        //float x = float.Parse(eEntityAtr.GetAttribute("posX"));
                        //float y = float.Parse(eEntityAtr.GetAttribute("posY"));
                        //float z = float.Parse(eEntityAtr.GetAttribute("posZ"));

                        Vector3 pos = new Vector3(x, y, z);

                        //旋转
                        x = float.Parse(DecryptAttribute(eEntityAtr, "quaX"));
                        y = float.Parse(DecryptAttribute(eEntityAtr, "quaY"));
                        z = float.Parse(DecryptAttribute(eEntityAtr, "quaZ"));
                        float w = float.Parse(DecryptAttribute(eEntityAtr, "quaW"));

                        //x = float.Parse(eEntityAtr.GetAttribute("quaX"));
                        //y = float.Parse(eEntityAtr.GetAttribute("quaY"));
                        //z = float.Parse(eEntityAtr.GetAttribute("quaZ"));
                        //float w = float.Parse(eEntityAtr.GetAttribute("quaW"));

                        Quaternion qua = new Quaternion(x, y, z, w);

                        //模型
                        string modelName = DecryptAttribute(eEntityAtr, "Model");
                        //string modelName = eEntityAtr.GetAttribute("Model");

                        //类型
                        string temp = DecryptAttribute(eEntityAtr, "Type");
                        //string temp = eEntityAtr.GetAttribute("Type");
                        EntityType entityType = EntityType.Zero;
                        if (temp == "NPC")
                        {
                            entityType = EntityType.NPC;
                        }
                        else if (temp == "Monster")
                        {
                            entityType = EntityType.Monster;
                        }
                        else if (temp == "Building")
                        {
                            entityType = EntityType.Building;
                        }
                        //地图块索引
                        int mapCubeIndex = int.Parse(DecryptAttribute(eEntityAtr, "MapCubeIndex"));
                        //int mapCubeIndex = int.Parse(eEntityAtr.GetAttribute("MapCubeIndex"));
                        //路径索引
                        int pathIndex = int.Parse(DecryptAttribute(eEntityAtr, "PathIndex"));
                        //int pathIndex = int.Parse(eEntityAtr.GetAttribute("PathIndex"));

                        int eventIndex = int.Parse(DecryptAttribute(eEntityAtr, "EventIndex"));

                        //游戏属性
                        XmlElement eGameAtr  = (XmlElement)eEntity.SelectSingleNode("GameAtr");
                        float      HP        = int.Parse(DecryptAttribute(eGameAtr, "HP"));
                        float      AtkValue  = float.Parse(DecryptAttribute(eGameAtr, "AtkValue"));
                        float      DefValue  = float.Parse(DecryptAttribute(eGameAtr, "DefValue"));
                        float      AtkSpeed  = float.Parse(DecryptAttribute(eGameAtr, "AtkSpeed"));
                        float      AtkRange  = float.Parse(DecryptAttribute(eGameAtr, "AtkRange"));
                        float      MoveSpeed = float.Parse(DecryptAttribute(eGameAtr, "MoveSpeed"));
                        bool       IsMove    = bool.Parse(DecryptAttribute(eGameAtr, "IsMove"));
                        bool       IsAtk     = bool.Parse(DecryptAttribute(eGameAtr, "IsAtk"));

                        //float HP = int.Parse(eGameAtr.GetAttribute("HP"));
                        //float AtkValue = float.Parse(eGameAtr.GetAttribute("AtkValue"));
                        //float DefValue = float.Parse(eGameAtr.GetAttribute("DefValue"));
                        //float AtkSpeed = float.Parse(eGameAtr.GetAttribute("AtkSpeed"));
                        //float AtkRange = float.Parse(eGameAtr.GetAttribute("AtkRange"));
                        //float MoveSpeed = float.Parse(eGameAtr.GetAttribute("MoveSpeed"));
                        //bool IsMove = bool.Parse(eGameAtr.GetAttribute("IsMove"));
                        //bool IsAtk = bool.Parse(eGameAtr.GetAttribute("IsAtk"));

                        //添加到当前实体管理类
                        EntityManager.Instance.AddEntity(pos, qua, entityType, modelName, mapCubeIndex, pathIndex, eventIndex, HP, AtkValue, DefValue, AtkSpeed, AtkRange, MoveSpeed, IsMove, IsAtk);
                        //更新地图块的状态
                        MapManager.Instance.GetMapCube(mapCubeIndex).m_isEmpty = false;
                    }
                }
                else if (element.Name == "PathList")
                {
                    //根据当前地图信息生成寻路数据
                    PathManager.Instance.GeneratePointMsg();

                    //读取并加载存档中的路径信息
                    foreach (XmlElement ePath in element.ChildNodes)
                    {
                        //状态信息
                        int  index   = int.Parse(DecryptAttribute(ePath, "Index"));
                        bool isEmpty = bool.Parse(DecryptAttribute(ePath, "IsEmpty"));

                        //int index = int.Parse(ePath.GetAttribute("Index"));
                        //bool isEmpty = bool.Parse(ePath.GetAttribute("IsEmpty"));

                        //关键点信息
                        XmlElement     eKeyPointList    = (XmlElement)ePath.SelectSingleNode("KeyPointList");
                        List <Vector2> tempKeyPointList = new List <Vector2>();
                        foreach (XmlElement eKeyPoint in eKeyPointList.ChildNodes)
                        {
                            Vector2 tempKeyPoint = new Vector2
                            {
                                x = int.Parse(DecryptAttribute(eKeyPoint, "x")),
                                y = int.Parse(DecryptAttribute(eKeyPoint, "y"))
                                    //x = int.Parse(eKeyPoint.GetAttribute("x")),
                                    //y = int.Parse(eKeyPoint.GetAttribute("y"))
                            };
                            tempKeyPointList.Add(tempKeyPoint);
                        }

                        //点信息
                        XmlElement     ePointList    = (XmlElement)ePath.SelectSingleNode("PointList");
                        List <Vector2> tempPointList = new List <Vector2>();
                        foreach (XmlElement ePoint in ePointList.ChildNodes)
                        {
                            Vector2 tempPoint = new Vector2
                            {
                                x = int.Parse(DecryptAttribute(ePoint, "x")),
                                y = int.Parse(DecryptAttribute(ePoint, "y"))
                                    //x = int.Parse(ePoint.GetAttribute("x")),
                                    //y = int.Parse(ePoint.GetAttribute("y"))
                            };
                            tempPointList.Add(tempPoint);
                        }
                        //添加到当前路径管理类
                        PathManager.Instance.AddPath(index, isEmpty, tempKeyPointList, tempPointList);
                    }
                }
                else if (element.Name == "EventList")
                {
                    foreach (XmlElement eEvent in element.ChildNodes)
                    {
                        int    index = int.Parse(DecryptAttribute(eEvent, "Index"));
                        string type  = DecryptAttribute(eEvent, "Type");
                        if (type.CompareTo("Birth") == 0)
                        {
                            Debug.Log("BIRTHEVENT: " + type);
                            float      cd         = float.Parse(DecryptAttribute(eEvent, "CD"));
                            float      time       = float.Parse(DecryptAttribute(eEvent, "Time"));
                            bool       isInfinite = bool.Parse(DecryptAttribute(eEvent, "IsInfinite"));
                            BirthEvent birthEvent = new BirthEvent(cd, time, isInfinite);
                            EventManager.Instance.AddBirthEvent(birthEvent);
                        }
                        else if (type.CompareTo("Bomb") == 0)
                        {
                            float     delay     = float.Parse(DecryptAttribute(eEvent, "Delay"));
                            float     hurt      = float.Parse(DecryptAttribute(eEvent, "Hurt"));
                            bool      isDetroy  = bool.Parse(DecryptAttribute(eEvent, "IsDestroy"));
                            BombEvent bombEvent = new BombEvent(delay, hurt, isDetroy);
                            EventManager.Instance.AddBombEvent(bombEvent);
                        }
                        else if (type.CompareTo("Speed") == 0)
                        {
                            float      speed      = float.Parse(DecryptAttribute(eEvent, "Speed"));
                            float      time       = float.Parse(DecryptAttribute(eEvent, "Time"));
                            bool       isInfinite = bool.Parse(DecryptAttribute(eEvent, "IsInfinite"));
                            SpeedEvent speedEvent = new SpeedEvent(speed, time, isInfinite);
                            EventManager.Instance.AddSpeedEvent(speedEvent);
                        }
                        else if (type.CompareTo("Telepo") == 0)
                        {
                            int           teleportID    = int.Parse(DecryptAttribute(eEvent, "TeleportID"));
                            float         cd            = float.Parse(DecryptAttribute(eEvent, "CD"));
                            float         time          = float.Parse(DecryptAttribute(eEvent, "Time"));
                            bool          isInfinite    = bool.Parse(DecryptAttribute(eEvent, "IsInfinite"));
                            TeleportEvent teleportEvent = new TeleportEvent(teleportID, cd, time, isInfinite);
                            EventManager.Instance.AddTeleportEvent(teleportEvent);
                        }
                    }
                }
                else if (element.Name == "Music")
                {
                    if (element.HasAttributes)
                    {
                        string name   = DecryptAttribute(element, "Name");
                        float  volume = float.Parse(DecryptAttribute(element, "Volume"));
                        //string name = element.GetAttribute("Name");
                        //float volume = float.Parse(element.GetAttribute("Volume"));
                        MusicManager.Instance.SetMusic(name, volume);
                    }
                }
            }
            return(true);
        }
        catch
        {
            LogManager.Instance.Log("加载地图失败!");
            return(false);
        }
    }
Esempio n. 8
0
    private bool CreateXml(string filePath)
    {
        try
        {
            XmlDocument    xmlDocument    = new XmlDocument();
            XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", null);
            xmlDocument.AppendChild(xmlDeclaration);

            XmlElement eRoot = xmlDocument.CreateElement("MapData");
            xmlDocument.AppendChild(eRoot);

            //保存地图信息
            XmlElement eMap = xmlDocument.CreateElement("Map");
            Map        map  = MapManager.Instance.m_map;

            EncryptAttribute(eMap, "TexturePath", map.m_textureName.ToString());
            EncryptAttribute(eMap, "wid", map.m_width.ToString());
            EncryptAttribute(eMap, "len", map.m_length.ToString());

            //eMap.SetAttribute("TexturePath", map.m_textureName.ToString());
            //eMap.SetAttribute("wid", map.m_width.ToString());
            //eMap.SetAttribute("len", map.m_length.ToString());

            eRoot.AppendChild(eMap);

            //保存实体信息
            XmlElement eEntitiesList = xmlDocument.CreateElement("EntitiesList");
            foreach (Entity entity in EntityManager.Instance.GetEntities())
            {
                XmlElement eEntity = xmlDocument.CreateElement("Entity");
                eEntitiesList.AppendChild(eEntity);

                //实体属性(逆序设置,顺序输出)
                XmlElement eEntityAtr = xmlDocument.CreateElement("EntityAtr");

                EncryptAttribute(eEntityAtr, "EventIndex", entity.m_eventIndex.ToString());
                EncryptAttribute(eEntityAtr, "PathIndex", entity.m_pathIndex.ToString());
                EncryptAttribute(eEntityAtr, "MapCubeIndex", entity.m_mapCubeIndex.ToString());
                EncryptAttribute(eEntityAtr, "Type", entity.m_type.ToString());
                EncryptAttribute(eEntityAtr, "Model", entity.m_modelName);

                EncryptAttribute(eEntityAtr, "quaW", entity.m_quaternion.w.ToString());
                EncryptAttribute(eEntityAtr, "quaZ", entity.m_quaternion.z.ToString());
                EncryptAttribute(eEntityAtr, "quaY", entity.m_quaternion.y.ToString());
                EncryptAttribute(eEntityAtr, "quaX", entity.m_quaternion.x.ToString());

                EncryptAttribute(eEntityAtr, "posZ", entity.m_position.z.ToString());
                EncryptAttribute(eEntityAtr, "posY", entity.m_position.y.ToString());
                EncryptAttribute(eEntityAtr, "posX", entity.m_position.x.ToString());

                //eEntityAtr.SetAttribute("PathIndex", entity.m_pathIndex.ToString());
                //eEntityAtr.SetAttribute("MapCubeIndex", entity.m_mapCubeIndex.ToString());
                //eEntityAtr.SetAttribute("Type", entity.m_type.ToString());
                //eEntityAtr.SetAttribute("Model", entity.m_modelName);

                //eEntityAtr.SetAttribute("quaW", entity.m_quaternion.w.ToString());
                //eEntityAtr.SetAttribute("quaZ", entity.m_quaternion.z.ToString());
                //eEntityAtr.SetAttribute("quaY", entity.m_quaternion.y.ToString());
                //eEntityAtr.SetAttribute("quaX", entity.m_quaternion.x.ToString());

                //eEntityAtr.SetAttribute("posZ", entity.m_position.z.ToString());
                //eEntityAtr.SetAttribute("posY", entity.m_position.y.ToString());
                //eEntityAtr.SetAttribute("posX", entity.m_position.x.ToString());

                //游戏属性
                XmlElement eGameAtr = xmlDocument.CreateElement("GameAtr");

                EncryptAttribute(eGameAtr, "IsAtk", entity.IsAtk.ToString());
                EncryptAttribute(eGameAtr, "IsMove", entity.IsMove.ToString());
                EncryptAttribute(eGameAtr, "MoveSpeed", entity.MoveSpeed.ToString());
                EncryptAttribute(eGameAtr, "AtkRange", entity.AtkRange.ToString());
                EncryptAttribute(eGameAtr, "AtkSpeed", entity.AtkSpeed.ToString());
                EncryptAttribute(eGameAtr, "DefValue", entity.DefValue.ToString());
                EncryptAttribute(eGameAtr, "AtkValue", entity.HP.ToString());
                EncryptAttribute(eGameAtr, "HP", entity.HP.ToString());

                //eGameAtr.SetAttribute("IsAtk", entity.IsAtk.ToString());
                //eGameAtr.SetAttribute("IsMove", entity.IsMove.ToString());
                //eGameAtr.SetAttribute("MoveSpeed", entity.MoveSpeed.ToString());
                //eGameAtr.SetAttribute("AtkRange", entity.AtkRange.ToString());
                //eGameAtr.SetAttribute("AtkSpeed", entity.AtkSpeed.ToString());
                //eGameAtr.SetAttribute("DefValue", entity.DefValue.ToString());
                //eGameAtr.SetAttribute("AtkValue", entity.HP.ToString());
                //eGameAtr.SetAttribute("HP", entity.HP.ToString());

                eEntity.AppendChild(eEntityAtr);
                eEntity.AppendChild(eGameAtr);
            }
            eRoot.AppendChild(eEntitiesList);

            //保存路径信息
            XmlElement ePathList = xmlDocument.CreateElement("PathList");
            foreach (Path path in PathManager.Instance.GetPaths())
            {
                //单个路径节点
                XmlElement ePath = xmlDocument.CreateElement("Path");

                //路径的状态信息
                EncryptAttribute(ePath, "IsEmpty", path.m_isEmpty.ToString());
                EncryptAttribute(ePath, "Index", path.m_index.ToString());

                //ePath.SetAttribute("IsEmpty", path.m_isEmpty.ToString());
                //ePath.SetAttribute("Index", path.m_index.ToString());


                //路径的关键点信息
                XmlElement eKeyPointList = xmlDocument.CreateElement("KeyPointList");
                foreach (Point keyPoint in path.m_keyPoints)
                {
                    XmlElement eKeyPoint = xmlDocument.CreateElement("KeyPoint");
                    EncryptAttribute(eKeyPoint, "y", keyPoint.m_y.ToString());
                    EncryptAttribute(eKeyPoint, "x", keyPoint.m_x.ToString());

                    //eKeyPoint.SetAttribute("y", keyPoint.m_y.ToString());
                    //eKeyPoint.SetAttribute("x", keyPoint.m_x.ToString());

                    eKeyPointList.AppendChild(eKeyPoint);
                }
                ePath.AppendChild(eKeyPointList);

                //路径的点信息
                XmlElement ePointList = xmlDocument.CreateElement("PointList");
                foreach (Point point in path.m_points)
                {
                    XmlElement ePoint = xmlDocument.CreateElement("Point");
                    EncryptAttribute(ePoint, "y", point.m_y.ToString());
                    EncryptAttribute(ePoint, "x", point.m_x.ToString());

                    //ePoint.SetAttribute("y", point.m_y.ToString());
                    //ePoint.SetAttribute("x", point.m_x.ToString());

                    ePointList.AppendChild(ePoint);
                }
                ePath.AppendChild(ePointList);

                ePathList.AppendChild(ePath);
            }
            eRoot.AppendChild(ePathList);

            //保存事件信息
            XmlElement eEventList = xmlDocument.CreateElement("EventList");
            foreach (Event @event in EventManager.Instance.GetEvents())
            {
                XmlElement eEvent = xmlDocument.CreateElement("Event");

                EncryptAttribute(eEvent, "Index", @event.m_index.ToString());
                string type = @event.Type;
                //Debug.Log("事件的类型是: " + type);
                EncryptAttribute(eEvent, "Type", type);

                if (type == "Birth")
                {
                    BirthEvent birthEvent = (BirthEvent)@event;
                    EncryptAttribute(eEvent, "CD", birthEvent.m_cd.ToString());
                    EncryptAttribute(eEvent, "Time", birthEvent.m_time.ToString());
                    EncryptAttribute(eEvent, "IsInfinite", birthEvent.m_isInfinite.ToString());
                }
                else if (type == "Bomb")
                {
                    BombEvent bombEvent = (BombEvent)@event;
                    EncryptAttribute(eEvent, "Delay", bombEvent.m_delay.ToString());
                    EncryptAttribute(eEvent, "Hurt", bombEvent.m_hurt.ToString());
                    EncryptAttribute(eEvent, "IsDestroy", bombEvent.m_isDestory.ToString());
                }
                else if (type == "Speed")
                {
                    SpeedEvent speedEvent = (SpeedEvent)@event;
                    EncryptAttribute(eEvent, "Speed", speedEvent.m_speed.ToString());
                    EncryptAttribute(eEvent, "Time", speedEvent.m_time.ToString());
                    EncryptAttribute(eEvent, "IsInfinite", speedEvent.m_isInfinite.ToString());
                }
                else if (type == "Teleport")
                {
                    TeleportEvent teleportEvent = (TeleportEvent)@event;
                    EncryptAttribute(eEvent, "TeleportID", teleportEvent.m_teleportID.ToString());
                    EncryptAttribute(eEvent, "CD", teleportEvent.m_cd.ToString());
                    EncryptAttribute(eEvent, "Time", teleportEvent.m_time.ToString());
                    EncryptAttribute(eEvent, "IsInfinite", teleportEvent.m_isInfinite.ToString());
                }
                eEventList.AppendChild(eEvent);
            }
            eRoot.AppendChild(eEventList);

            //保存音乐信息
            XmlElement eMusic = xmlDocument.CreateElement("Music");
            Music      music  = MusicManager.Instance.m_music;
            if (music != null)
            {
                EncryptAttribute(eMusic, "Volume", music.m_volume.ToString());
                EncryptAttribute(eMusic, "Name", music.m_name);

                //eMusic.SetAttribute("Volume", music.m_volume.ToString());
                //eMusic.SetAttribute("Name", music.m_name);
            }
            eRoot.AppendChild(eMusic);

            //保存XML文件
            xmlDocument.Save(filePath);
            return(true);
        }
        catch
        {
            LogManager.Instance.Log("保存地图失败!");
            return(false);
        }
    }
Esempio n. 9
0
    //显示事件属性
    private void DisplayEvent()
    {
        m_objBirthEvent.SetActive(false);
        m_objBombEvent.SetActive(false);
        m_objSpeedEvent.SetActive(false);
        m_objTeleportEvent.SetActive(false);

        string    eventType = m_currEvent.Type;
        Transform tempTransform;

        if (eventType == "Birth")
        {
            m_objBirthEvent.SetActive(true);
            BirthEvent birthEvent = (BirthEvent)m_currEvent;
            tempTransform = m_objBirthEvent.transform.Find("Index");
            tempTransform.Find("Text").GetComponent <Text>().text = birthEvent.m_index.ToString();
            tempTransform = m_objBirthEvent.transform.Find("CD");
            tempTransform.GetComponentInChildren <InputField>().text = birthEvent.m_cd.ToString();
            tempTransform = m_objBirthEvent.transform.Find("Time");
            tempTransform.GetComponentInChildren <InputField>().text = birthEvent.m_time.ToString();
            tempTransform = m_objBirthEvent.transform.Find("IsInfinite");
            tempTransform.GetComponentInChildren <Toggle>().isOn = birthEvent.m_isInfinite;
        }
        else if (eventType == "Bomb")
        {
            m_objBombEvent.SetActive(true);
            BombEvent bombEvent = (BombEvent)m_currEvent;
            tempTransform = m_objBombEvent.transform.Find("Index");
            tempTransform.Find("Text").GetComponent <Text>().text = bombEvent.m_index.ToString();
            tempTransform = m_objBombEvent.transform.Find("Delay");
            tempTransform.GetComponentInChildren <InputField>().text = bombEvent.m_delay.ToString();
            tempTransform = m_objBombEvent.transform.Find("Hurt");
            tempTransform.GetComponentInChildren <InputField>().text = bombEvent.m_hurt.ToString();
            tempTransform = m_objBombEvent.transform.Find("IsDestroy");
            tempTransform.GetComponentInChildren <Toggle>().isOn = bombEvent.m_isDestory;
        }
        else if (eventType == "Speed")
        {
            m_objSpeedEvent.SetActive(true);
            SpeedEvent speedEvent = (SpeedEvent)m_currEvent;
            tempTransform = m_objSpeedEvent.transform.Find("Index");
            tempTransform.Find("Text").GetComponent <Text>().text = speedEvent.m_index.ToString();
            tempTransform = m_objSpeedEvent.transform.Find("Speed");
            tempTransform.GetComponentInChildren <InputField>().text = speedEvent.m_speed.ToString();
            tempTransform = m_objSpeedEvent.transform.Find("Time");
            tempTransform.GetComponentInChildren <InputField>().text = speedEvent.m_time.ToString();
            tempTransform = m_objSpeedEvent.transform.Find("IsInfinite");
            tempTransform.GetComponentInChildren <Toggle>().isOn = speedEvent.m_isInfinite;
        }
        else if (eventType == "Teleport")
        {
            m_objTeleportEvent.SetActive(true);
            TeleportEvent teleportEvent = (TeleportEvent)m_currEvent;
            tempTransform = m_objTeleportEvent.transform.Find("Index");
            tempTransform.Find("Text").GetComponent <Text>().text = teleportEvent.m_index.ToString();
            tempTransform = m_objTeleportEvent.transform.Find("TeleportID");
            tempTransform.GetComponentInChildren <InputField>().text = teleportEvent.m_teleportID.ToString();
            tempTransform = m_objTeleportEvent.transform.Find("CD");
            tempTransform.GetComponentInChildren <InputField>().text = teleportEvent.m_cd.ToString();
            tempTransform = m_objTeleportEvent.transform.Find("Time");
            tempTransform.GetComponentInChildren <InputField>().text = teleportEvent.m_time.ToString();
            tempTransform = m_objTeleportEvent.transform.Find("IsInfinite");
            tempTransform.GetComponentInChildren <Toggle>().isOn = teleportEvent.m_isInfinite;
        }
        else
        {
            LogManager.Instance.Log("事件类型不存在!");
            return;
        }
    }