private void RecreateLevel()
    {
        _carrentBrushType  = EPipeType.None;
        _carrentBrushColor = -1;
        _carrentBrushParam = -1;
        _intBrush          = PIPE_TYPE_NONE_ID;
        _indexStart        = -1;
        _drawState         = EMoveType.None;

        _textures = new Texture[_w * _h];
        _neededStates.Clear();
        for (int i = 0; i < _w; ++i)
        {
            List <SSlotData> rowN = new List <SSlotData>();
            for (int j = 0; j < _h; ++j)
            {
                int id = GetSlotIndex(i, j);
                _textures[id] = _statesTexs[PIPE_TYPE_NONE_ID];

                SSlotData neededSlot = new SSlotData();
                neededSlot.x  = i;
                neededSlot.y  = j;
                neededSlot.c  = -1;
                neededSlot.p  = -1;
                neededSlot.pt = EPipeType.None;
                rowN.Add(neededSlot);
            }
            _neededStates.Add(rowN);
        }
    }
예제 #2
0
    private void LoadStartLevelData()
    {
        StartLevelData = new LevelData();
        TextAsset levelXml = Resources.Load <TextAsset>("Data/startleveldata");

        XmlDocument xmlDoc = new XmlDocument();                      // xmlDoc is the new xml document.

        xmlDoc.LoadXml(levelXml.text);                               // load the file.
        XmlNodeList slotsList = xmlDoc.GetElementsByTagName("slot"); // array of the slots nodes.

        foreach (XmlNode slotInfo in slotsList)
        {
            SSlotData sData = new SSlotData();
            sData.x  = int.Parse(slotInfo.Attributes["x"].Value);
            sData.y  = int.Parse(slotInfo.Attributes["y"].Value);
            sData.pt = (EPipeType)System.Enum.Parse(typeof(EPipeType), slotInfo.Attributes["pt"].Value);
            sData.p  = int.Parse(slotInfo.Attributes["p"].Value);
            sData.c  = int.Parse(slotInfo.Attributes["c"].Value);
            StartLevelData.Slots.Add(sData);
        }

        StartLevelData.ReshufflePowerups     = Consts.POWERUPS_RESHUFFLE_AT_START;
        StartLevelData.BreakePowerups        = Consts.POWERUPS_BREAKE_AT_START;
        StartLevelData.ChainPowerups         = Consts.POWERUPS_CHAIN_AT_START;
        StartLevelData.DestroyColorsPowerups = Consts.POWERUPS_DESTROY_COLOR_AT_START;
        StartLevelData.AddsViewed            = false; // set true for paid version
    }
예제 #3
0
 public void InitSavedSlot(SSlotData sData)
 {
     // for saved slots with pipe
     X           = sData.x;
     Y           = sData.y;
     Id          = X * 100 + Y;
     name        = "Slot_" + X + "_" + Y;
     WaitForPipe = false;
 }
예제 #4
0
    public static LevelData ConvertToLevelData(CreatureMixLevelData cmLevelData, int level)
    {
        LevelData res = new LevelData();

        res.Type       = cmLevelData.Type;
        res.Moves      = cmLevelData.Moves;
        res.CollectAim = cmLevelData.CollectAim;
        res.Colors     = new List <int>();
        for (int i = 0; i < cmLevelData.Colors.Count; ++i)
        {
            res.Colors.Add(cmLevelData.Colors[i]);
        }
        res.Slots = new List <SSlotData>();
        for (int i = 0; i < cmLevelData.NeededStates.Count; ++i)
        {
            res.Slots.Add(cmLevelData.NeededStates[i]);
        }
        res.Aims       = new List <Vector3Int>();
        res.CreatureId = cmLevelData.CreatureId;
        for (int i = 0; i < cmLevelData.Aims.Count; ++i)
        {
            res.Aims.Add(new Vector3Int(cmLevelData.Aims[i].x, cmLevelData.Aims[i].y, 0));
        }
        if (IsEmptyLevel(res.Slots))
        {
            res.AddNewPipes = true;
            UnityEngine.Random.InitState(level);
            res.Slots.Clear();
            for (int i = 0; i < GameBoard.WIDTH; ++i)
            {
                for (int j = 0; j < GameBoard.HEIGHT; ++j)
                {
                    if (UnityEngine.Random.Range(0, 100) <= 33)
                    {
                        SSlotData sData = new SSlotData();
                        sData.x  = i;
                        sData.y  = j;
                        sData.pt = EPipeType.Colored;
                        sData.p  = 0;
                        sData.c  = -1;
                        res.Slots.Add(sData);
                    }
                }
            }
        }
        res.AddNewPipes = cmLevelData.AddNewPipes;
        // enemies
        res.EnemiesQueue = new List <QueueElement>();
        for (int i = 0; i < cmLevelData.Queue.Count; ++i)
        {
            res.EnemiesQueue.Add(cmLevelData.Queue[i]);
        }
        //
        return(res);
    }
예제 #5
0
    public static LevelData GenerateCreatureMixLevel(int level)
    {
        UnityEngine.Random.InitState(level);
        LevelData res = new LevelData();

        res.Type        = ELevelType.Battle;
        res.AddNewPipes = true;
        res.Colors      = new List <int>();
        res.Moves       = 0;
        res.CollectAim  = 0;
        // aims
        res.Aims = new List <Vector3Int>();
        res.Aims.Add(new Vector3Int(0, UnityEngine.Random.Range(2, 5), 0));
        res.Aims.Add(new Vector3Int(1, UnityEngine.Random.Range(2, 5), 0));
        res.Aims.Add(new Vector3Int(2, UnityEngine.Random.Range(2, 5), 0));
        res.Aims.Add(new Vector3Int(3, UnityEngine.Random.Range(2, 5), 0));

        res.CreatureId = UnityEngine.Random.Range(0, 3);

        // start pipes
        res.Slots = new List <SSlotData>();
        for (int i = 0; i < GameBoard.WIDTH; ++i)
        {
            for (int j = 0; j < GameBoard.HEIGHT; ++j)
            {
                if (UnityEngine.Random.Range(0, 100) <= 33)
                {
                    SSlotData sData = new SSlotData();
                    sData.x  = i;
                    sData.y  = j;
                    sData.pt = EPipeType.Colored;
                    sData.p  = 0;
                    sData.c  = -1;
                    res.Slots.Add(sData);
                }
            }
        }
        // enemies
        res.EnemiesQueue = new List <QueueElement>();
        QueueElement startElement = new QueueElement("enemy_1", 0, 0, "");

        res.EnemiesQueue.Add(startElement);
        for (int i = 0; i < 5; ++i)
        {
            QueueElement element = new QueueElement("enemy_1", i * 2, 0, "");
            res.EnemiesQueue.Add(element);
        }
        //
        return(res);
    }
    private void ReloadLevel()
    {
        if (_myLevel.NeededStates == null)
        {
            RecreateLevel();
            return;
        }
        _w            = GameBoard.WIDTH;
        _h            = GameBoard.HEIGHT;;
        _textures     = new Texture[_w * _h];
        _neededStates = new List <List <SSlotData> >();

        for (int i = 0; i < _w; ++i)
        {
            List <SSlotData> rowN = new List <SSlotData>();
            for (int j = 0; j < _h; ++j)
            {
                int id = GetSlotIndex(i, j);

                SSlotData savedNeededSlot = _myLevel.NeededStates[id];
                SSlotData neededSlot      = new SSlotData();
                neededSlot.x  = i;
                neededSlot.y  = j;
                neededSlot.c  = savedNeededSlot.c;
                neededSlot.p  = savedNeededSlot.p;
                neededSlot.pt = savedNeededSlot.pt;
                rowN.Add(neededSlot);
                int intNeededIndex = PipeParamsToEditorsInt(neededSlot.pt, neededSlot.c, neededSlot.p);
                _textures[id] = _statesTexs[intNeededIndex];
            }
            _neededStates.Add(rowN);
        }
        // queue
        _queue.Clear();
        for (int i = 0; i < _myLevel.Queue.Count; ++i)
        {
            _queue.Add(_myLevel.Queue[i]);
        }
        if (_queue.Count > 0)
        {
            _currentQueueIndex = 0;
        }
        else
        {
            _currentQueueIndex = -1;
        }
        //
    }
    private void SaveLevel()
    {
        if (_myLevel.NeededStates == null)
        {
            _myLevel.NeededStates = new List <SSlotData>();
        }
        _myLevel.NeededStates = new List <SSlotData>();

        //for (int j = 0; j < _h; ++j)
        //{
        //for (int i = 0; i < _w; ++i)
        //{
        for (int j = _h - 1; j >= 0; --j)
        {
            for (int i = 0; i < _w; ++i)
            {
                SSlotData neededData = _neededStates[i][j];
                SSlotData neededSlot = new SSlotData();
                neededSlot.x  = i;
                neededSlot.y  = j;
                neededSlot.c  = neededData.c;
                neededSlot.p  = neededData.p;
                neededSlot.pt = neededData.pt;
                _myLevel.NeededStates.Add(neededSlot);
            }
        }
        // queue
        if (_myLevel.Queue == null)
        {
            _myLevel.Queue = new List <QueueElement>();
        }
        _myLevel.Queue.Clear();
        for (int i = 0; i < _queue.Count; ++i)
        {
            _myLevel.Queue.Add(_queue[i]);
        }
        //
        EditorUtility.SetDirty(_myLevel);
    }