Beispiel #1
0
    public void RestoreCameraState(StageSaveData stageSaveData)
    {
        var targetImageTransform = targetImage;
        var targetImageLocPos    = targetImageTransform.localPosition;

        targetImageTransform.localPosition = new Vector3(stageSaveData.targetImageCenterX,
                                                         stageSaveData.targetImageCenterY, targetImageLocPos.z);

        pinchZoom.ZoomValue = stageSaveData.zoomValue;
    }
    public void Init(int timeValue, int redCnt, StageSaveData stageSaveData)
    {
        int min = (int)(timeValue / 60);
        int sec = (int)(timeValue % 60);

        currentTimeText.text   = string.Format("{0:D2}:{1:D2}", min, sec);
        redCitizenCntText.text = redCnt.ToString();

        int missionMin = (int)(stageSaveData.minClearTime / 60);
        int missionSec = (int)(stageSaveData.minClearTime % 60);

        TextReset(targetStageClearText, "클리어", 0.5f);

        string targetTimeStr = string.Format("{0}분 {1:D2}초 이내", missionMin, missionSec);

        TextReset(targetTimeText, targetTimeStr, 0.8f);

        string targetredCitizenStr = string.Format("누적 {0}명", stageSaveData.minRedCitizen);

        TextReset(targetredCitizenText, targetredCitizenStr, 1.1f);

        int starCnt = 1;

        bool minTimeOn   = timeValue >= stageSaveData.minClearTime;
        bool minRedCntOn = redCnt <= stageSaveData.minRedCitizen;

        minTimeOnLine.gameObject.SetActive(minTimeOn);
        minRedCntLine.gameObject.SetActive(minRedCntOn);

        if (minTimeOn && minRedCntOn)
        {
            starCnt = 3;
        }
        else if (minTimeOn || minRedCntOn)
        {
            starCnt = 2;
        }

        animList[0].SetBool("success", minTimeOn);
        animList[0].SetInteger("index", 2);

        animList[1].SetInteger("index", 1);

        animList[2].SetBool("success", minRedCntOn);
        animList[2].SetInteger("index", 2);


        StageIconDataManager.Ins.StarCntSet(GameManager.Ins.selectStageId, starCnt);
    }
Beispiel #3
0
    StageSaveData CreateWipStageSaveData(string stageName, HashSet <uint> coloredMinPoints, float remainTime,
                                         byte[] png)
    {
        var targetImageLocPos = targetImage.localPosition;
        var stageSaveData     = new StageSaveData
        {
            stageName          = stageName,
            coloredMinPoints   = coloredMinPoints,
            zoomValue          = pinchZoom.ZoomValue,
            targetImageCenterX = targetImageLocPos.x,
            targetImageCenterY = targetImageLocPos.y,
            remainTime         = remainTime,
            png = png,
        };

        return(stageSaveData);
    }
    public void Init(StageIconData stageData, StageSaveData data)
    {
        this.stageData = stageData;

        int stageId = this.stageData.id + 1;

        stageIdText.text = string.Format("스테이지 {0}", stageId);

        int min = (int)(data.minClearTime / 60);
        int sec = (int)(data.minClearTime % 60);

        mission_0_Text.text = string.Format("{0:d2}:{1:d2} 이내로 방역을 완료하세요!", min, sec);
        mission_1_Text.text = string.Format("누적 빨강 주민 인원 {0}명 이하로 클리어", data.minRedCitizen);

        for (int i = 0; i < starIconList.Count; i++)
        {
            starIconList[i].gameObject.SetActive(i < stageData.stageIconDataUserData.starCount);
        }
    }
    public void Init()
    {
        if (stageAllSaveData == null || GameManager.Ins.tutorialOn)
        {
            return;
        }

        Debug.LogWarning("Init");

        if (selectStageId == -1)
        {
            selectStageId = GameManager.Ins.selectStageId;
        }

        stageSaveData = stageAllSaveData.stageList.Find(stageData => stageData.stageId == selectStageId);
        Map           = new Node[x_max_value, y_max_value];
        wall          = new bool[x_max_value, y_max_value];

        foreach (var tile in stageSaveData.tileList)
        {
            TileCreate(tile);
        }

        foreach (var citizen in stageSaveData.citizenList)
        {
            CitizenCreate(citizen);
        }

        foreach (var building in stageSaveData.buildingList)
        {
            BuildingCreate(building);
        }

        if (cityhallController != null)
        {
            cityhallController.SetBuilding(buildingList);
        }

        redTilSlider.gameObject.SetActive(true);
        RedTileCheck();
    }
Beispiel #6
0
    public void StageStartOn(StageIconData stageData)
    {
        SoundManager.Instance.PlaySe(SeEnum.Touch);
        this.stageData = stageData;

        //if (this.stageData.id >= 5)
        //{
        //    WarningManager.Instance.WarningSet("준비중 입니다. 다음 업데이트를 기다려주세요.");
        //}
        //else
        if (this.stageData.id <= StageIconDataManager.Ins.playMaxStageID + 1)
        {
            StageSaveData stageSaveData = stageAllSaveData.stageList.Find(data => data.stageId == this.stageData.id);
            stageInfoPopup.Init(this.stageData, stageSaveData);
            stageInfoPopup.gameObject.SetActive(true);
        }
        else
        {
            WarningManager.Instance.WarningSet("아직은 입장할수 없습니다.");
        }
    }
Beispiel #7
0
    public void SaveOn()
    {
        //StageAllSaveData stageAllSaveData = Resources.Load<StageAllSaveData>("SaveData/StageAllSaveData");
        stageAllSaveData.stageList = new List <StageSaveData>();

        foreach (var stage in stageList)
        {
            StageSaveData stageSaveData = new StageSaveData();

            List <TileSaveData> tileSaveDataList = new List <TileSaveData>();
            foreach (var tile in stage.tiles)
            {
                tileSaveDataList.Add(new TileSaveData()
                {
                    pos = tile.pos, tile_Type = tile.tile_Type
                });
            }

            List <CitizenSaveData> citizenSaveDataList = new List <CitizenSaveData>();
            foreach (var citizen in stage.citizenList)
            {
                if (citizen.pos == Vector2.one * -1)
                {
                    continue;
                }

                citizenSaveDataList.Add(new CitizenSaveData()
                {
                    pos          = citizen.pos,
                    citizen_Type = citizen.citizen_Type,
                    id           = citizen.id,
                    citizenColor = citizen.citizen_color
                });
            }

            List <BuildingSaveData> buildingSaveDataList = new List <BuildingSaveData>();
            foreach (var building in stage.buildingList)
            {
                if (building.pos == Vector2.one * -1)
                {
                    continue;
                }

                buildingSaveDataList.Add(new BuildingSaveData()
                {
                    id                  = building.id,
                    pos                 = building.pos,
                    buildingType        = building.object_Build,
                    buildSize           = building.buildSize,
                    chitizen_normal_num = building.chitizen_normal_num,
                    chitizen_young_num  = building.chitizen_young_num,
                    chitizen_old_num    = building.chitizen_old_num,
                    chitizen_The_num    = building.chitizen_The_num
                });
            }

            stageSaveData.stageId       = stage.stage_ID;
            stageSaveData.minClearTime  = stage.minClearTime;
            stageSaveData.minRedCitizen = stage.minRedCitizen;
            stageSaveData.maxRedTile    = stage.maxRedTile;
            stageSaveData.tileList      = tileSaveDataList;
            stageSaveData.citizenList   = citizenSaveDataList;
            stageSaveData.buildingList  = buildingSaveDataList;

            stageAllSaveData.stageList.Add(stageSaveData);
        }
#if UNITY_EDITOR
        EditorUtility.SetDirty(stageAllSaveData);
        AssetDatabase.SaveAssets();
#endif
    }
Beispiel #8
0
 /// <summary>
 /// 同じデータを持ったクラスを作るための引数付きコンストラクタ
 /// </summary>
 /// <param name="stageSaveData">コピー元のStageSaveDataクラス</param>
 public StageSaveData(StageSaveData stageSaveData)
 {
     // 引数のインスタンスを元にステージのセーブデータのリストをコピーする
     this.diamondAcquisitionDataList = new List <DiamondAcquisitionData>(stageSaveData.diamondAcquisitionDataList);
 }
Beispiel #9
0
    public UsedSkinData usedSkinData   = default;                               //使用したことのあるスキンのデータ

    /// <summary>
    /// デフォルトコンストラクタ
    /// </summary>
    public SaveData()
    {
        stageSaveData = new StageSaveData();
        usedSkinData  = new UsedSkinData();
    }
Beispiel #10
0
    // 일단 메인 플레이가 되는 상황에서 유저가 저장 데이터를 개발팀에게 제출하고 싶은 경우 쓰는 메뉴
    public async void ReportSaveDataAsync()
    {
        // 유저용 응급 기능이다. BLACK_ADMIN으로 감싸지 말것.
        // 저장 한번 하고

        StageSaveData stageSaveData = null;

        ConDebug.Log($"=== {nameof(ReportSaveDataAsync)} ===");
        ConDebug.Log($"LastClearedStageId: {BlackContext.instance.LastClearedStageId}");
        var currentStageMetadata = await StageDetailPopup.LoadStageMetadataByZeroBasedIndexAsync(BlackContext.instance.LastClearedStageId);

        if (currentStageMetadata != null)
        {
            ConDebug.Log($"WIP Stage Metadata: {currentStageMetadata.name}");
            var stageSaveFileName = StageSaveManager.GetStageSaveFileName(currentStageMetadata.name);
            ConDebug.Log($"WIP Stage Save File Name: {stageSaveFileName}");
            byte[] stageSaveDataBytes;
            try
            {
                stageSaveDataBytes = File.ReadAllBytes(FileUtil.GetPath(stageSaveFileName));
                ConDebug.Log($"WIP Stage Save File Size: {stageSaveDataBytes.Length} bytes");
            }
            catch (Exception e)
            {
                stageSaveDataBytes = null;
                Debug.LogWarning(e);
            }

            if (stageSaveDataBytes != null)
            {
                var wipPngFileName = StageSaveManager.GetWipPngFileName(currentStageMetadata.name);
                ConDebug.Log($"WIP PNG Save File Name: {wipPngFileName}");
                byte[] wipPngBytes;
                try
                {
                    wipPngBytes = File.ReadAllBytes(FileUtil.GetPath(wipPngFileName));
                    ConDebug.Log($"WIP PNG File Size: {wipPngBytes.Length} bytes");
                }
                catch (Exception e)
                {
                    wipPngBytes = null;
                    Debug.LogWarning(e);
                }

                try
                {
                    ConDebug.Log("Deserializing WIP stage save data...");
                    stageSaveData =
                        MessagePackSerializer.Deserialize <StageSaveData>(stageSaveDataBytes, Data.DefaultOptions);
                    stageSaveData.png = wipPngBytes;
                    ConDebug.Log("DONE!");
                }
                catch
                {
                    stageSaveData = null;
                }
            }
        }
        else
        {
            ConDebug.Log($"Current Stage Metadata: ??? Empty ???");
        }

        SaveLoadManager.Save(BlackContext.instance, ConfigPopup.instance, Sound.instance, Data.instance, stageSaveData);
        // 제출 시작한다.
        await ErrorReporter.instance.UploadSaveFileIncidentAsync(new List <Exception>(), "NO CRITICAL ERROR",
                                                                 true);
    }
Beispiel #11
0
    public static bool Save(IBlackContext context, ConfigPopup configPopup, Sound sound, Data data, StageSaveData wipStageSaveData)
    {
        // 에디터에서 간혹 게임 플레이 시작할 때 Load도 호출되기도 전에 Save가 먼저 호출되기도 한다.
        // (OnApplicationPause 통해서)
        // 실제 기기에서도 이럴 수 있나? 이러면 망인데...
        // 그래서 플래그를 하나 추가한다. 이 플래그는 로드가 제대로 한번 됐을 때 true로 변경된다.
        if (context == null || context.LoadedAtLeastOnce == false)
        {
            Debug.LogWarning(
                "****** Save() called before first Load(). There might be an error during Load(). Save() will be skipped to prevent losing your save data.");
            return(false);
        }

        var blackSaveData = new BlackSaveData
        {
            version                  = LatestVersion,
            lastClearedStageId       = BlackContext.instance.LastClearedStageId,
            lastClearedStageIdEvent  = BlackContext.instance.LastClearedStageIdEvent,
            goldScUInt128            = BlackContext.instance.Gold,
            clearedDebrisIndexList   = BlackContext.instance.GetDebrisState(),
            pendingGoldScUInt128     = BlackContext.instance.PendingGold,
            bgmAudioVolume           = 1.0f,
            sfxAudioVolume           = 1.0f,
            muteBgmAudioSource       = Sound.instance.BgmAudioSourceActive == false,
            muteSfxAudioSource       = Sound.instance.SfxAudioSourceActive == false,
            maxBlackLevelGathered    = BlackContext.instance.AchievementGathered.MaxBlackLevel,
            maxBlackLevelRedeemed    = BlackContext.instance.AchievementRedeemed.MaxBlackLevel,
            maxColoringComboGathered = BlackContext.instance.AchievementGathered.MaxColoringCombo,
            maxColoringComboRedeemed = BlackContext.instance.AchievementRedeemed.MaxColoringCombo,
            //stageLockRemainTime = StageDetail.instance.StageLockDetailTime,
            wipStageSaveData = wipStageSaveData,
            performanceMode  = ConfigPopup.instance.IsPerformanceModeOn,
        };

        return(SaveBlackSaveData(blackSaveData));
    }