コード例 #1
0
    private void loadGame(
        int slot,
        GameObject player_game_object = null,
        PlayerEntity player_entity    = null
        )
    {
        SaveDataService.use_slot = slot;
        //var game_stage_service = StorageService.load<GameStageService>(slot, "Stage");
        var stage_save_data = SaveDataService.loadStage(slot);

        if (player_game_object != null &&
            player_entity != null &&
            stage_save_data != null
            )
        {
            DontDestroyOnLoad(player_game_object);

            MessageBroker.Default.Publish <SceneChangeSimple>(new SceneChangeSimple {
                add_scene    = "Maze",
                del_scene    = "Select",
                active_scene = "Maze",
                post_action  = () => {
                    SceneService.EnableAllGameObjects("Maze", new List <string>());

                    // キャラデータを新シーンで展開
                    UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(
                        player_game_object,
                        UnityEngine.SceneManagement.SceneManager.GetSceneByName("Maze")
                        );

                    Debug.Log("SelectSceneManager.loadGame()");
                    Debug.Log("SelectSceneManager.loadGame() : player_entity.lv : " + player_entity.lv);
                    Debug.Log("SelectSceneManager.loadGame() : player_entity.exp : " + player_entity.exp);
                    PlayerService.nextLevel(player_entity.lv - 1);
                    PlayerService.nextLevel(player_entity.lv);
                    PlayerService.nextLevel(player_entity.lv + 1);

                    player_game_object.transform.position = player_default_position;
                    player_game_object.GetComponent <Animator>().enabled         = true;
                    player_game_object.GetComponent <BoxCollider>().enabled      = true;
                    player_game_object.GetComponent <NavMeshAgent>().enabled     = true;
                    player_game_object.GetComponent <PlayerController>().enabled = true;
                    PlayerService.init(player_game_object, player_entity);

                    Debug.Log("SelectSceneManager.loadGame() : player_entity.equip : " + player_entity.equip.name);

                    // 装備しなおし
                    MessageBroker.Default.Publish <EquipEvent>(new EquipEvent {
                        id = player_entity.equip.id,
                        go = player_game_object,
                        update_service_data = true,
                    });

                    // ステージデータを新シーンで展開
                    GameStageService.room_clear_count = stage_save_data.room_clear_count;
                    GameStageService.enemy_strength   = stage_save_data.enemy_strength;
                    GameStageService.enemy_num        = stage_save_data.enemy_num;

                    // GUI起動
                    MessageBroker.Default.Publish <ChangeGuiMode>(new ChangeGuiMode {
                        mode = GuiState.Room
                    });
                },
            });

            return;
        }

        MessageBroker.Default.Publish <SceneChangeSimple>(new SceneChangeSimple {
            add_scene    = "Maze",
            del_scene    = "Select",
            active_scene = "Maze",
            post_action  = () => {
                SceneService.EnableAllGameObjects("Maze", new List <string>());

                // 新しいプレイヤーを生成、初期武器ID取得
                int equip_id = PlayerService.init(null, null);

                // 初期武器を装備
                MessageBroker.Default.Publish <ChangeEquipEvent>(new ChangeEquipEvent {
                    id = equip_id,
                });

                // 新規ステージデータ設定
                GameStageService.room_clear_count = room_clear_count_default;
                GameStageService.enemy_strength   = enemy_strength_default;
                GameStageService.enemy_num        = enemy_num_default;

                // GUI起動
                MessageBroker.Default.Publish <ChangeGuiMode>(new ChangeGuiMode {
                    mode = GuiState.Room
                });
            },
        });
    }