Example #1
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();                                                                                                             // 스크립트 로딩 완료 이벤트
    }
Example #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();													// 스크립트 로딩 완료 이벤트
    }