Esempio n. 1
0
    //-----------------------------------------------------------------

    /// <summary>
    /// 세션 로드
    /// </summary>
    /// <param name="filepath"></param>
    /// <returns></returns>
    public static FSNSession Load(string filepath)
    {
        var newsession = new FSNSession();

        var        rawdata = FSNUtils.LoadTextData(filepath);
        JSONObject json    = JSONObject.Create(rawdata);

        if (json != null)
        {
            // Script 관련
            newsession.ScriptName    = json[c_field_scriptName].str;
            newsession.ScriptHashKey = json[c_field_scriptHash].str;
            newsession.SnapshotIndex = (int)json[c_field_snapshotIndex].n;

            // 플래그 테이블
            var flagtable = json[c_field_flagTable];
            foreach (var key in flagtable.keys)
            {
                newsession.SetFlagValue(key, flagtable[key].b, true);
            }

            // 값 테이블
            var valuetable = json[c_field_valueTable];
            foreach (var key in valuetable.keys)
            {
                newsession.SetNumberValue(key, valuetable[key].n, true);
            }
        }
        else
        {
            Debug.LogErrorFormat("[FSNSession] error loading session file : {0}", filepath);
        }

        return(newsession);
    }
Esempio n. 2
0
        //---------------------------------------------------------------------------------------

        /// <summary>
        /// 헤더 정보 먼저 처리
        /// </summary>
        /// <param name="scriptData"></param>
        /// <param name="session"></param>
        static void ProcessHeaders(string scriptData, FSNScriptSequence sequence, FSNSession session)
        {
            var    strstream  = new System.IO.StringReader(scriptData);
            string line       = null;
            int    linenumber = 0;                        // 줄 번호

            while ((line = strstream.ReadLine()) != null) // 줄 단위로 읽는다.
            {
                linenumber++;
                FSNDebug.currentProcessingScriptLine = linenumber;                       // 디버깅 정보 설정

                if (line.Length > 0 && line.Substring(0, 1) == c_token_PreProcessor)     // 프리프로세서 기호에만 반응한다
                {
                    var commandAndParam = line.Substring(1).Split(c_whiteSpaceArray, 2); // 명령어 파라미터 구분
                    var command         = commandAndParam[0];
                    var paramStr        = commandAndParam.Length > 1? commandAndParam[1] : "";

                    // 아직까지는 header 커맨드밖에 없으므로 간단하게 if로만 체크한다. 더 늘어나면 리팩토링이 필요해질듯...
                    if (command == "헤더" || command == "header")
                    {
                        sequence.Header.FromAsset(paramStr.Trim());
                    }
                    else
                    {
                        Debug.LogErrorFormat("[FSNSequence] line {0} : unknown preprocessor command {1}", linenumber, command);
                    }
                }
            }

            // 읽어들인 헤더 정보를 바탕으로 플래그/변수 기본값들 세팅하기 (선언되어있지 않은 경우에만)

            foreach (var pair in sequence.Header.FlagDeclarations)                    // 플래그 선언
            {
                if (!session.FlagIsDeclared(pair.Key))                                // 아직 선언되지 않은 경우만 세팅
                {
                    bool value = string.IsNullOrEmpty(pair.Value)?
                                 false : FSNUtils.StringToValue <bool>(pair.Value);                 // 초기값까지 선언한 경우 값 해독, 아니면 기본값 false
                    session.SetFlagValue(pair.Key, value, true);
                }
            }

            foreach (var pair in sequence.Header.ValueDeclarations)                   // 값 선언
            {
                if (!session.ValueIsDeclared(pair.Key))                               // 아직 선언되지 않은 경우만 세팅
                {
                    float value = string.IsNullOrEmpty(pair.Value)?
                                  0 : FSNUtils.StringToValue <float>(pair.Value);                   // 초기값까지 선언한 경우 값 해독, 아니면 기본값 false
                    session.SetNumberValue(pair.Key, value, true);
                }
            }
        }
Esempio n. 3
0
        //---------------------------------------------------------------------------------------
        /// <summary>
        /// 헤더 정보 먼저 처리
        /// </summary>
        /// <param name="scriptData"></param>
        /// <param name="session"></param>
        static void ProcessHeaders(string scriptData, FSNScriptSequence sequence, FSNSession session)
        {
            var strstream	= new System.IO.StringReader(scriptData);
            string line		= null;
            int linenumber	= 0;    // 줄 번호

            while ((line = strstream.ReadLine()) != null)               // 줄 단위로 읽는다.
            {
                linenumber++;
                FSNDebug.currentProcessingScriptLine    = linenumber;   // 디버깅 정보 설정

                if (line.Length > 0 && line.Substring(0,1) == c_token_PreProcessor)		// 프리프로세서 기호에만 반응한다
                {
                    var commandAndParam = line.Substring(1).Split(c_whiteSpaceArray, 2);            // 명령어 파라미터 구분
                    var command         = commandAndParam[0];
                    var paramStr        = commandAndParam.Length > 1? commandAndParam[1] : "";

                    // 아직까지는 header 커맨드밖에 없으므로 간단하게 if로만 체크한다. 더 늘어나면 리팩토링이 필요해질듯...
                    if (command == "헤더" || command == "header")
                    {
                        sequence.Header.FromAsset(paramStr.Trim());
                    }
                    else
                    {
                        Debug.LogErrorFormat("[FSNSequence] line {0} : unknown preprocessor command {1}", linenumber, command);
                    }
                }
            }

            // 읽어들인 헤더 정보를 바탕으로 플래그/변수 기본값들 세팅하기 (선언되어있지 않은 경우에만)

            foreach (var pair in sequence.Header.FlagDeclarations)        // 플래그 선언
            {
                if (!session.FlagIsDeclared(pair.Key))                          // 아직 선언되지 않은 경우만 세팅
                {
                    bool value  = string.IsNullOrEmpty(pair.Value)?
                        false : FSNUtils.StringToValue<bool>(pair.Value);   // 초기값까지 선언한 경우 값 해독, 아니면 기본값 false
                    session.SetFlagValue(pair.Key, value, true);
                }
            }

            foreach (var pair in sequence.Header.ValueDeclarations)       // 값 선언
            {
                if (!session.ValueIsDeclared(pair.Key))                         // 아직 선언되지 않은 경우만 세팅
                {
                    float value = string.IsNullOrEmpty(pair.Value)?
                        0 : FSNUtils.StringToValue<float>(pair.Value);      // 초기값까지 선언한 경우 값 해독, 아니면 기본값 false
                    session.SetNumberValue(pair.Key, value, true);
                }
            }
        }
Esempio n. 4
0
    //-----------------------------------------------------------------
    /// <summary>
    /// 세션 로드
    /// </summary>
    /// <param name="filepath"></param>
    /// <returns></returns>
    public static FSNSession Load(string filepath)
    {
        var newsession		= new FSNSession();

        var rawdata			= FSNUtils.LoadTextData(filepath);
        JSONObject json		= JSONObject.Create(rawdata);

        if (json != null)
        {
            // Script 관련
            newsession.ScriptName		= json[c_field_scriptName].str;
            newsession.ScriptHashKey	= json[c_field_scriptHash].str;
            newsession.SnapshotIndex	= (int)json[c_field_snapshotIndex].n;

            // 플래그 테이블
            var flagtable				= json[c_field_flagTable];
            foreach(var key in flagtable.keys)
            {
                newsession.SetFlagValue(key, flagtable[key].b, true);
            }

            // 값 테이블
            var valuetable				= json[c_field_valueTable];
            foreach(var key in valuetable.keys)
            {
                newsession.SetNumberValue(key, valuetable[key].n, true);
            }
        }
        else
        {
            Debug.LogErrorFormat("[FSNSession] error loading session file : {0}", filepath);
        }

        return newsession;
    }