예제 #1
0
    //Вызывается при нажатии на кнопку загрузки определенного сохранения, открывает файл, генерирует кампанию из полученного сида и передает ее на UI для отрисовки
    public void loadSave(int index)
    {
        Stream          stream    = File.Open(savePath + "/save" + index + ".xml", FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();

        curSaveIndex = index;
        cl_campaign loaded = (cl_campaign)formatter.Deserialize(stream);

        stream.Close();
        loaded.generate(true, loaded.seed);
        curCampaign = loaded;
        ui.openCampaign(curCampaign);
    }
예제 #2
0
    //Вызывается при создании, либо обновлении статуса кампании, сохраняет ее в указанный файл
    public void saveGame(cl_campaign camp, bool newSave, int index)
    {
        if (newSave)
        {
            index = savescount + 1;
            savescount++;
        }
        Stream          stream    = File.Open(savePath + "/save" + index + ".xml", FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();

        formatter.Serialize(stream, camp);
        stream.Close();
    }
예제 #3
0
 //Вызывается при нажатии кнопки "New Game", проверяет, не превышено ли максимальное количество сохранений, если нет - генерирует новую кампанию, сохраняет ее и передает на UI для отрисовки
 public void newGame()
 {
     checkSaves();
     if (savescount < 3)
     {
         curCampaign = new cl_campaign();
         curCampaign.generate(false, 0);
         ui.openCampaign(curCampaign);
         curSaveIndex = savescount + 1;
         saveGame(curCampaign, true, 4);
     }
     else
     {
         InitLoadMenu();
     }
 }
예제 #4
0
    //Метод, используемый для отрисовки кампании на UI, очищает соответствующее поле, определяет его размеры, создает и расставляет необходимые кнопки, добавляет евент открытия соответствующего уровня при их нажатии,
    //отображает статус уровня, исходя из текущего прогресса, рисует линии между открытыми и пройденными уровнями
    public void openCampaign(cl_campaign curCampaign)
    {
        switchToGameView(false);
        setMenuScreen(2);

        foreach (Transform child in menuScreens[2].transform)
        {
            if (child.name != "Back")
            {
                Destroy(child.gameObject);
            }
        }

        float maxX = Menu.transform.GetComponent <RectTransform>().rect.width / 2 - LevelButPrefab.transform.GetComponent <RectTransform>().rect.width;
        float maxY = Menu.transform.GetComponent <RectTransform>().rect.height / 2 - LevelButPrefab.transform.GetComponent <RectTransform>().rect.height;

        float prevX = 0;

        GameObject[]  buts   = new GameObject[curCampaign.levels.Count];
        System.Random rndObj = new System.Random(curCampaign.seed);

        for (int i = 0; i < curCampaign.levels.Count; i++)
        {
            buts[i] = Instantiate(LevelButPrefab, menuScreens[2].transform);

            if (prevX > 0)
            {
                buts[i].transform.GetComponent <RectTransform>().localPosition = new Vector3(rndObj.Next(System.Convert.ToInt32(-maxX), 0), -maxY + i * (maxY * 2 / curCampaign.levels.Count), 0);
            }
            else
            {
                buts[i].transform.GetComponent <RectTransform>().localPosition = new Vector3(rndObj.Next(0, System.Convert.ToInt32(maxX)), -maxY + i * (maxY * 2 / curCampaign.levels.Count), 0);
            }

            prevX = buts[i].transform.GetComponent <RectTransform>().localPosition.x;
            buts[i].transform.Find("Text").GetComponent <Text>().text = (i + 1) + "\nlevel";

            int flag = i;
            buts[i].GetComponent <Button>().onClick.AddListener(delegate() { gameC.openLevel(flag); });

            switch (curCampaign.states[i])
            {
            case 0:
                buts[i].GetComponent <Button>().interactable = false;
                break;

            case 1:

                break;

            case 2:
                buts[i].GetComponent <Image>().color = Color.green;
                break;
            }

            if (i != 0 && curCampaign.states[i] != 0)
            {
                GameObject   lineObj = new GameObject();
                LineRenderer lr      = lineObj.AddComponent <LineRenderer>();
                lineObj.transform.parent   = menuScreens[2].transform;
                lineObj.transform.position = buts[i - 1].transform.position;
                lr.material   = lineMaterial;
                lr.startWidth = 0.2f;
                lr.endWidth   = 0.2f;
                lr.SetPositions(new Vector3[] { new Vector3(buts[i - 1].transform.position.x, buts[i - 1].transform.position.y, 0), new Vector3(buts[i].transform.position.x, buts[i].transform.position.y, 0) });
            }
        }
    }