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

天行健 君子當自強而不息

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 閱讀(226) 評論(0)  編輯 收藏 引用

公告

導航

統計

常用鏈接

隨筆分類(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>
            亚洲人成亚洲人成在线观看| 欧美1区免费| 一本一本久久a久久精品综合麻豆| 麻豆亚洲精品| 99视频在线精品国自产拍免费观看| 亚洲国产一区二区精品专区| 欧美日韩亚洲国产一区| 午夜影院日韩| 久久精品男女| 日韩午夜黄色| 欧美亚洲视频在线观看| 在线观看国产一区二区| 亚洲人成小说网站色在线| 国产精品久久久久久久浪潮网站| 久久精品日韩欧美| 欧美精品videossex性护士| 亚洲欧美三级在线| 久久综合给合久久狠狠色| 一区二区欧美视频| 久久精品亚洲乱码伦伦中文| 亚洲最新在线视频| 久久激情网站| 亚洲深夜激情| 久久久久久9999| 亚洲在线一区二区| 欧美xart系列在线观看| 欧美一区二区三区婷婷月色 | 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美激情第9页| 久久久久国产精品人| 欧美日韩精品一本二本三本| 久久免费观看视频| 国产精品久久久久久久午夜片| 免费成人你懂的| 国产日韩欧美综合| 日韩午夜剧场| 亚洲人成网站999久久久综合| 午夜精品久久久久久久久久久久 | 国产精品久久久久久久久久久久久久| 另类激情亚洲| 国产一区二区三区观看| 一区二区电影免费观看| 亚洲精品社区| 免费在线看成人av| 蜜桃av噜噜一区二区三区| 国产欧美亚洲一区| 亚洲一区二区精品在线观看| 日韩一区二区电影网| 久久亚洲捆绑美女| 麻豆免费精品视频| 好吊妞这里只有精品| 午夜视频久久久| 欧美一区二区精美| 国产精品一区二区在线观看网站 | 欧美一区国产一区| 国产精品久久久久aaaa| 日韩午夜中文字幕| 亚洲网站在线播放| 欧美体内谢she精2性欧美| 亚洲全部视频| 亚洲四色影视在线观看| 欧美日韩一区二| 亚洲视频在线观看免费| 亚洲一区二区三区精品视频| 欧美视频中文字幕| 亚洲一区欧美激情| 欧美在线免费观看| 国产在线不卡视频| 老司机精品久久| 最新成人av在线| 中文日韩在线| 国产欧美精品一区二区色综合 | 欧美日本一区二区三区| 亚洲精品在线二区| 亚洲欧美国产不卡| 国产丝袜美腿一区二区三区| 久久国产福利| 亚洲国产精品一区二区www| 宅男精品视频| 国产精品视频yy9299一区| 欧美一区二区成人| 亚洲国产第一| 亚洲欧美激情一区二区| 国产日韩欧美一二三区| 蜜臀av国产精品久久久久| 亚洲精品麻豆| 欧美在线一二三| 亚洲级视频在线观看免费1级| 欧美精品自拍偷拍动漫精品| 亚洲午夜一级| 欧美福利一区| 亚洲综合久久久久| 一区二区三区在线免费播放| 欧美另类久久久品| 欧美在线短视频| 亚洲精品视频在线| 久久免费偷拍视频| 亚洲一区二区成人| 伊人久久婷婷色综合98网| 欧美日韩情趣电影| 午夜视频久久久| 日韩特黄影片| 女生裸体视频一区二区三区 | 国产一区二区三区高清| 欧美精品国产一区二区| 欧美一区二区三区免费在线看| 亚洲成色999久久网站| 欧美主播一区二区三区| 亚洲美女中文字幕| 影音先锋久久资源网| 国产精品久久九九| 欧美精品二区| 久久久久免费视频| 午夜精品免费视频| 一区二区欧美精品| 亚洲国产精品久久久久秋霞不卡| 欧美一级一区| 亚洲欧美国产精品专区久久| 亚洲国产日韩一区二区| 国产一区二区三区不卡在线观看| 欧美日韩国产探花| 欧美中文字幕在线| 亚洲一区二区三区高清不卡| 日韩亚洲不卡在线| 91久久在线观看| 极品尤物久久久av免费看| 国产亚洲欧美一区二区三区| 国产精品久久久久久久午夜片| 欧美精品一区在线发布| 欧美大片在线看| 嫩草成人www欧美| 久久综合久久综合九色| 久久色在线观看| 久久爱www| 久久国产精品毛片| 久久精品国产在热久久 | 一区二区三区精品在线| 99精品热视频| 亚洲视频一二三| 亚洲视频精选在线| 亚洲一品av免费观看| 一本色道婷婷久久欧美| 亚洲视频在线看| 午夜精品一区二区在线观看| 亚洲欧美日韩成人高清在线一区| 亚洲欧美国产高清| 欧美专区日韩专区| 久久久久久亚洲综合影院红桃| 久久精品国产v日韩v亚洲 | 欧美一级久久久久久久大片| 午夜精品久久久久久久久久久| 西瓜成人精品人成网站| 欧美在线视频免费观看| 久久一区二区三区av| 欧美黄色免费网站| 国产精品欧美日韩久久| 国产日本欧美视频| 亚洲国产精品一区二区尤物区 | 国产免费观看久久| 精品成人国产| 日韩一区二区久久| 欧美亚洲免费电影| 老司机精品久久| 亚洲精品国偷自产在线99热| aa级大片欧美三级| 久久av一区二区| 欧美精品一区视频| 国产麻豆综合| 亚洲区欧美区| 欧美一区二区女人| 欧美国产精品专区| 亚洲一品av免费观看| 麻豆成人91精品二区三区| 欧美午夜一区| 亚洲国产日韩欧美在线动漫| 亚洲一区二区三区在线观看视频| 久久精品理论片| 亚洲精品乱码| 久久男女视频| 国产精品视频精品| 亚洲人成77777在线观看网| 性色av香蕉一区二区| 亚洲国产精品一区二区第一页 | 久久精品国产在热久久| 欧美色视频一区| 亚洲电影在线| 欧美一级午夜免费电影| 亚洲国产精品专区久久| 亚洲欧美日韩综合aⅴ视频| 女女同性女同一区二区三区91| 国产精品久久久久av免费| 亚洲精品久久久久| 久久久久国产精品一区二区| 夜夜嗨网站十八久久| 欧美va亚洲va香蕉在线| 国产主播一区二区| 亚洲女爱视频在线| 日韩一区二区福利| 欧美一级免费视频| 在线亚洲高清视频|