青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

Controlling Players and Characters(35)

You're coming to the end of the long haul. You’ve finished the private data and
functions, and the public functions are left:

public:
    cCharController()
    {
        ZeroMemory(
thissizeof(*this));
    }

    ~cCharController()
    {
        shutdown();
    }

    
void free()
    {
        delete m_root_char;
        m_root_char = NULL;

        m_num_char = 0;
    }

    
void shutdown()
    {
        free();

        delete[] m_mesh_anim;
        m_mesh_anim = NULL;
        m_num_mesh_anim = 0;

        delete[] m_char_anim;
        m_char_anim = NULL;
        m_num_char_anim = 0;

        m_spell_controller    = NULL;
        m_def_file[0]         = '\0';
        m_weapon_mesh_path[0] = '\0';
        m_texture_path[0]     = '\0';
    }
///////////////////////////////////////////////////////////////////////////////////////////////////

void cCharController::init(ID3DXFont* font, PCSTR def_file,
                           sItem* mil, sSpell* msl,
                           
long num_mesh_anim, PCSTR* mesh_names,
                           PCSTR weapon_mesh_path, PCSTR texture_path,
                           
long num_char_anim, sCharAnimInfo* char_anims)
{
    free();

    
if(mesh_names == NULL || def_file == NULL)
        
return;

    m_font = font;

    strcpy(m_def_file, def_file);

    m_mil = mil;
    m_msl = msl;

    
// copy over mesh path and texture path (or set default)
    strcpy(m_weapon_mesh_path, weapon_mesh_path ? weapon_mesh_path : ".\\");
    strcpy(m_texture_path, texture_path ? texture_path : ".\\");

    
// get mesh names
    if((m_num_mesh_anim = num_mesh_anim) != 0)
    {
        m_mesh_anim = 
new sMeshAnim[num_mesh_anim];

        
for(long i = 0; i < m_num_mesh_anim; i++)
            strcpy(m_mesh_anim[i].filename, mesh_names[i]);
    }

    
// get animation data
    if((m_num_char_anim = num_char_anim) != 0)
    {
        m_char_anim = 
new sCharAnimInfo[m_num_char_anim];

        
for(long i = 0; i < m_num_char_anim; i++)
            memcpy(&m_char_anim[i], &char_anims[i], 
sizeof(sCharAnimInfo));
    }
}

In addition to the typical class constructor and destructor are the init and shutdown pair
of functions. For the controller to operate, it must first be initialized with a call to init.
When you’re done with the character controller class, a call to shutdown is in order.

Somewhat similar in nature to shutdown, the free function completely
removes all characters in the list of active characters. This function is useful for
clearing the list when a character leaves a level and a whole new set of characters
need to be added to the list.

Speaking of adding characters to the list, here comes the function that does it all.

With the add_char function, you need to provide a unique identification number, the MCL
character definition number to use, the character’s type to assign (CHAR_PC, CHAR_NPC,
or CHAR_MONSTER), the artificial intelligence to use, and the character’s coordinates and
Y-axis angle used to point the character in a specific direction.

Following add_char are two functions that remove a character in the list. The remove function
takes a character’s unique identification number as an argument,
and the remove_char function takes a pointer to the character structure.

///////////////////////////////////////////////////////////////////////////////////////////////////

bool cCharController::add_char(long id, long def, long type, long ai,
                               
float pos_x, float pos_y, float pos_z,
                               
float direction)
{
    FILE* fp;
    
if((fp = fopen(m_def_file, "rb")) == NULL)
        
return false;

    sCharacter* character = 
new sCharacter;

    character->def           = def;
    character->id            = id;
    character->type          = type;
    character->ai            = ai;
    character->pos_x         = pos_x;
    character->pos_y         = pos_y;
    character->pos_z         = pos_z;
    character->direction     = direction;
    character->update_enable = 
true;
    character->charge        = rand()%101;

    sCharDef& char_def = character->char_def;

    fseek(fp, 
sizeof(sCharDef) * def, SEEK_SET);
    fread(&char_def, 1, 
sizeof(sCharDef), fp);
    fclose(fp);

    character->health_points = char_def.health_points;
    character->mana_points   = char_def.mana_points;

    
// load character ics
    if(char_def.item_filename)
    {
        character->char_ics = 
new cCharIcs;
        character->char_ics->load(char_def.item_filename);
    }

    sMeshAnim& mesh_anim = m_mesh_anim[char_def.mesh_index];

    
// load mesh and animation if needed
    if(mesh_anim.count == 0)
    {
        mesh_anim.mesh.load(mesh_anim.filename, m_texture_path);
        mesh_anim.anim.load(mesh_anim.filename, &mesh_anim.mesh);
        
        
for(long i = 0; i < m_num_char_anim; i++)
            mesh_anim.anim.set_loop(m_char_anim[i].is_loop, m_char_anim[i].name);
    }

    character->
object.create(&mesh_anim.mesh);
    mesh_anim.count++;

    
// load and configure weapon (if any)
    if(m_mil && char_def.weapon != -1 && m_mil[char_def.weapon].mesh_filename)
    {
        
char path[MAX_PATH];
        sprintf(path, "%s%s", m_weapon_mesh_path, m_mil[char_def.weapon].mesh_filename);
        character->weapon_mesh.load(path, m_texture_path);

        character->weapon_object.create(&character->weapon_mesh);
        character->weapon_object.attach_to_object(&character->
object, "WeaponHand");
    }

    
// link into head of list
    if(m_root_char)
        m_root_char->prev = character;

    character->next = m_root_char;
    m_root_char = character;

    
return true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////

void cCharController::remove_char(sCharacter* character)
{
    
if(character == NULL)
        
return;

    
// decrease mesh count and release if no more

    sMeshAnim& mesh_anim = m_mesh_anim[character->char_def.mesh_index];

    
if(--mesh_anim.count == 0)
    {
        mesh_anim.mesh.free();
        mesh_anim.anim.free();
    }

    
// remove from list
    if(character->prev)
        character->prev->next = character->next;
    
else
        m_root_char = character->next;

    
if(character->next)
        character->next->prev = character->prev;

    character->prev = character->next = NULL;
    delete character;
}

///////////////////////////////////////////////////////////////////////////////////////////////////

void remove(long char_id)
{
     
return remove_char(get_char(char_id));
}

posted on 2007-12-04 17:27 lovedday 閱讀(230) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美色123| 国产精品裸体一区二区三区| 国产三级精品三级| 欧美一级淫片播放口| 亚洲欧美色婷婷| 欧美午夜精彩| 麻豆久久久9性大片| 另类激情亚洲| 精品福利av| 欧美电影免费| 欧美高清不卡| 亚洲视频欧美在线| 欧美影院精品一区| 午夜亚洲福利| 在线日韩欧美| 欧美亚洲日本网站| 午夜伦欧美伦电影理论片| 国产一区二区成人| 欧美激情视频在线播放| 国产精品chinese| 久久久久看片| 欧美成人中文| 欧美一区二区观看视频| 久久免费视频一区| 亚洲图片欧美午夜| 久久精品国产亚洲精品 | 国产一二三精品| 久久手机精品视频| 欧美激情第三页| 久久激情视频免费观看| 麻豆精品在线视频| 欧美在线啊v| 亚洲在线播放电影| 亚洲精品综合精品自拍| 老司机精品视频一区二区三区| 日韩视频一区二区三区在线播放免费观看 | 精品电影在线观看| 亚洲人成网站色ww在线| 国产精品手机在线| 91久久夜色精品国产九色| 久久婷婷人人澡人人喊人人爽 | 亚洲图片激情小说| 亚洲第一主播视频| 欧美77777| 老司机67194精品线观看| 韩日精品在线| 这里只有精品电影| 最新成人av在线| 久久精品国产亚洲aⅴ| 国产亚洲精品久久久久婷婷瑜伽| 亚洲欧美亚洲| 午夜精品久久| 国产亚洲精久久久久久| 久久精品国产亚洲5555| 欧美日本亚洲视频| 免费日韩成人| 国产日韩欧美另类| 中文亚洲字幕| 亚洲一区二区在线视频 | 一本色道久久综合狠狠躁篇的优点 | 亚洲国产99| 久久不射中文字幕| 久久久免费av| 国内精品**久久毛片app| 亚洲欧美成人网| 性色av一区二区三区红粉影视| 亚洲欧美日韩国产| 性高湖久久久久久久久| 欧美午夜精品久久久久久久| 亚洲国产三级在线| 亚洲欧洲精品一区二区| 欧美电影免费观看网站| 亚洲高清免费在线| 99在线热播精品免费99热| 欧美精品久久久久久久久老牛影院 | 欧美色大人视频| 亚洲精品在线视频| 亚洲先锋成人| 久久精品国产第一区二区三区| 亚洲国产精品女人久久久| 久久久久久免费| 欧美a级片网站| 亚洲日本一区二区| 西瓜成人精品人成网站| 久久精品盗摄| 国产一区日韩一区| 老司机午夜精品视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美精品一区二区三区在线看午夜 | 美女视频网站黄色亚洲| 亚洲专区一区二区三区| 国产日韩欧美一区二区| 久久久噜噜噜久久| 亚洲区在线播放| 午夜国产不卡在线观看视频| 国产一区二区三区久久悠悠色av| 99精品99| 久久精品视频免费播放| 亚洲国产影院| 欧美日一区二区三区在线观看国产免| 嫩模写真一区二区三区三州| 国产精品成av人在线视午夜片| 欧美成人免费va影院高清| 99国产精品国产精品久久| 久久国产精品亚洲77777| 亚洲一区欧美二区| 国产综合一区二区| 欧美激情va永久在线播放| 亚洲私拍自拍| 在线视频精品一区| 国产日韩欧美在线看| 欧美大胆人体视频| 亚洲在线观看免费| 亚洲精品一区二区三区av| 亚洲国产日韩在线| 国产美女精品视频| 亚洲一区在线观看视频 | 免费视频一区| 亚洲午夜久久久久久久久电影网| 一区二区三区视频免费在线观看| 美女爽到呻吟久久久久| 欧美 日韩 国产 一区| 国产精品视频免费一区| 欧美日韩一区二区在线观看视频 | 亚洲美女av网站| 欧美在线观看视频一区二区| 欧美先锋影音| 一区二区三区产品免费精品久久75| 最新国产拍偷乱拍精品| 国产欧美一区二区视频| 翔田千里一区二区| 一本久久综合亚洲鲁鲁| 欧美成人在线免费观看| 日韩视频在线播放| 在线观看成人一级片| 国产欧美日本在线| 国产精品久久久久久久久久久久久久| 亚洲国产成人精品久久久国产成人一区| 狠狠色综合日日| 国产精品乱子乱xxxx| 国产精品r级在线| 欧美理论在线| 欧美日韩国产精品一卡| 欧美刺激午夜性久久久久久久| 亚洲第一区在线| 免费观看欧美在线视频的网站| 韩日精品视频一区| 国产啪精品视频| 国产伦精品一区二区三区视频孕妇 | 亚洲午夜久久久久久久久电影院| 欧美日韩中文字幕在线视频| 欧美成人精品激情在线观看| 久久久免费av| 欧美14一18处毛片| 欧美人牲a欧美精品| 欧美成人精品在线播放| 免费欧美日韩| 欧美激情国产高清| 欧美国产激情二区三区| 亚洲人成在线播放| 亚洲制服丝袜在线| 欧美一区二区高清| 久久精品日产第一区二区三区| 精品电影一区| 亚洲日本欧美| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产精品欧美一区喷水| 国产精品一区一区| 狠狠色2019综合网| 亚洲国产美女精品久久久久∴| 欧美激情第六页| 欧美喷潮久久久xxxxx| 欧美性猛交99久久久久99按摩 | 国产亚洲第一区| 日韩亚洲视频| 亚洲福利久久| 亚洲视频1区| 欧美中文在线观看| 亚洲激情一区二区| 99国内精品久久| 欧美在线三区| 亚洲国产欧美在线人成| 亚洲视频一二| 久久米奇亚洲| 国产精品啊v在线| 影音先锋日韩有码| 亚洲视频播放| 欧美成人午夜激情在线| 日韩亚洲在线| 久久久久国产精品www| 国产精品jvid在线观看蜜臀| 在线观看国产日韩| 亚洲一区二区三区影院| 宅男精品导航| 麻豆成人91精品二区三区| 一区二区三区成人精品| 久久久久久久久久久成人| 欧美区亚洲区| 亚洲国产精品va在线看黑人| 欧美日韩国产一级片|