이라 쓰고 뇌피셜이라 읽으니 재미로만 볼 것


참고 //

1. 프로그래밍에서는 특정한 기능을 수행하기 위해 메소드라는 것을 만들며
이는 기본적으로 "결과값 함수명(매개변수){내용}" 의 기본 틀을 가짐
그래서 어떤 매개변수를 집어넣으면 내용을 거쳐서 결과값이 나온다라고 이해하면 ㅇㅋ


2. 프로그래밍에서는 특정한 값을 저장하기 위해 변수라는 것을 만들며
이 때 이름은 만든 의도를 충분히 파악하기 위해 구체적으로 작성함
그래서 status라던가 data라던가 pos(position) 같은 이름이 바로 그런 것


GRESULT BuildIncarnation()
{
    // 메소드의 호출 결과를 임시저장하는 변수
    // 이걸로 메소드가 정상적으로 작동했는지 안했는지 판단할 것
    GStatus returnStatus;
    GStatus status;

    // 마지막 위치를 마지막 기록으로부터 불러온다
    last_pos = 
        g_IPS->LocateLastPos(g_DB::LastRecord);

    // 마지막 위치를 가지고 새로운 데이터셋 파일을 쓰기 모드로 생성, 단 이름이 겹치는 파일이 존재하지 않을 때
    GDataSet target = CreateDataSet(last_pos,
        &res,
        OPEN_NEW | GENERIC_WRITE,
        TRUE,
        WRITE_IF_NOT_EXISTING,
        ATTRIBUTE_NORMAL,
        NULL,
        "Senadina");

    // 마지막 위치를 가지고 화면 상에 사용자가 볼 수 있게 세팅
    // 보통 전역변수의 앞에는 g_ 를 붙여서 전역변수임을 표시함
    /* 여기서 코랄리의 코드가 문제가 될 수 있는 부분은 보통 코딩할 때
       메소드의 {} 대괄호 안에 외부의 값을 가져오려면 가급적 매개변수를 통해야 함.
       그게 사실은 조금 번거롭기 때문에, 코드의 아주 바깥쪽에 전역변수(Global Variable)라고 해서
       코드의 언제 어디서든 값을 가져올 수 있게 하는 기법이 있음.
       근데 문제는 전역변수를 쓰면 값이 어디서 어디로 흐르는지 정확하게 추적하기가 어려워지고,
       멀티스레딩 등으로 고도화하기가 곤란해짐.
       그래서 아주 제한적인 용도로만 사용해야하고 남용하면 안 됨. */

    g_DB->m_GUI->SetLocation(last_pos, 0);

    // 위에서 생성한 데이터셋에 장비를 생성
    g_DB->m_GUI->CreateEquipment(&target);

    // param은 일반적으로 parameter의 약어. 즉, 패러미터가 정상적으로 존재할 경우의 의미
    if (m_param) {

        // 시스템 시간으로부터 시간을 불러온 다음 결과값 저장
        GData time_data =
            m_data.inputValue(g_sysTime, &returnStatus);

        // 결과값을 확인해 이상이 있으면 에러메시지 출력
        GcheckErr(returnStatus,
            "ERROR_GET_TIME_DATA");

        // 아마 time_data가 사람이 좀 보기 번거로운 형식일 것이므로 사람이 보기 좋게 변환
        GTime time = time_data.AsTime();

        // Mesh는 3D 폴리곤의 집합체를 일컫는 것으로 m_data로부터 output 한다는 것은
           위의 데이터셋을 이용해 세나디아의 3D 모델을 뽑는게 아닐까 예상
        GData output = 
            m_data.outputValue(outputMesh,
                        &returnStatus);

        // 마찬가지로 결과값 확인 후 이상 있으면 에러메시지 출력
        GCheckErr(returnStatus,
            "ERROR_COMPUTE");

        // 메쉬가 정상적으로 생성됐으면 메쉬를 조작해야하므로 가상의 오브젝트를 생성
        GCreator dataCreator;
        GObject output_data = 
            dataCreator.create(&returnStatus);
        GCheckErr(returnStatus,
            "ERROR_CREATE_OUTPUT_DATA");

        // 시간 정보와 코드를 이용해 가상의 세나디아 생성
        createIncarnation(time, output_data,
            returnStatus);
        GCheckErr(returnStatus,
            "ERROR_CREATE_INCARNATION");
        output.set(output_data);

        // 다 생성한 다음에는 불필요한 데이터 정리
        data.setClean();
    } else
            return UNKNOWN_PARAMETER;

    // 생성한 데이터를 노드에 등록
    // 여기서는 자료구조로서의 트리(나무)의 가지로 예상
    GDataSet incarnation(m_incarnation, 0, "Any");
    status = incarnation.registerNode("Senadina",
                            target->id,
                            target_creator);
    if (!status) {
        return ERROR_REGISTER_NODE;
    }

    // 여기까지 문제없으면 성공적으로 종료
    return SUCCESS;
}


이 시발 내거 주석 달기도 귀찮은데 나도 술취했나