static void _fillSettingTable(Segments.Setting seg, FSNScriptSequence.Parser.ICommandGenerateProtocol protocol)
    {
        var param = protocol.parameters;

        if (param != null)
        {
            int settingCount = param.Length / 2;                                                // 2개 짝이 안맞는 파라미터값들은 버린다.
            for (int i = 0; i < settingCount; i += 2)
            {
                var name = FSNInGameSetting.ConvertPropertyNameAlias(param[i]);
                seg[name] = param[i + 1];
            }
        }
    }
예제 #2
0
    /// <summary>
    /// 스크립트 실행
    /// </summary>
    /// <param name="filepath"></param>
    /// <param name="session">실행 중에 사용할 Session. 지정하지 않을 경우 새 세션을 사용</param>
    /// <param name="snapshotIndex">불러오기 시에만 사용. 시작할 Snapshot Index를 지정</param>
    public void RunScript(string filepath, ExecuteType exeType = ExecuteType.NewStart, int snapshotIndex = 0)
    {
        FSNResourceCache.StartLoadingSession(FSNResourceCache.Category.Script);                     // 리소스 로딩 세션 시작

        if (exeType == ExecuteType.NewStart)                                                        // 새 세션을 열어야하는 경우 미리 세션 생성하기 (새 게임)
        {
            m_seqEngine.PrepareNewSession();
        }

        FSNScriptSequence scriptSeq = FSNScriptSequence.Parser.FromAsset(filepath, m_seqEngine.CurrentSession);                 // 스크립트 해석

        // TODO : header 적용, 여기에 코드를 삽입하는 것이 맞는지는 잘 모르겠음. 리팩토링이 필요할수도.

        // 인게임 세팅

        var stchain = new FSNInGameSetting.Chain(FSNInGameSetting.DefaultInGameSetting);                // 디폴트 속성을 베이스로 chain 만들기

        foreach (var pair in scriptSeq.Header.InGameSettings)
        {
            var alias = FSNInGameSetting.ConvertPropertyNameAlias(pair.Key);
            stchain.SetPropertyByString(alias, pair.Value);
        }
        m_inGameSetting = stchain.Freeze();                                                                                                             // 속성값 고정, 현재 엔진의 디폴트 속성을 덮어씌운다.
        //

        var sshotSeq = FSNSnapshotSequence.Builder.BuildSnapshotSequence(scriptSeq);                // Snapshot 시퀀스 생성

        FSNResourceCache.EndLoadingSession();                                                       // 리소스 로딩 세션 종료

        bool overwriteScriptInfoToSession = exeType != ExecuteType.LoadFromSession;                 // 불러오기한 경우가 아니면 스크립트 정보를 세션에 덮어써야한다.

        m_seqEngine.StartSnapshotSequence(sshotSeq, overwriteScriptInfoToSession, snapshotIndex);   // 실행


        ControlSystem.ScriptLoadComplete();                                                                                                             // 스크립트 로딩 완료 이벤트
    }