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

天行健 君子當自強而不息

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>
            久久久亚洲精品一区二区三区| 久久久精品五月天| 最近中文字幕日韩精品| 裸体一区二区三区| 亚洲精品久久久久久一区二区| 欧美国产日韩二区| 欧美黄色成人网| 亚洲婷婷国产精品电影人久久| 国产精品99久久久久久人| 国产欧美精品久久| 久久在线观看视频| 欧美国产一区二区在线观看| 在线视频精品| 性色一区二区| 亚洲精品一区二区三区福利| 亚洲精品免费观看| 国产日产欧美一区| 欧美国产综合一区二区| 欧美视频中文字幕在线| 久久久91精品国产| 欧美国产在线电影| 欧美一区二区视频97| 欧美chengren| 香蕉久久一区二区不卡无毒影院| 久久精品国产欧美亚洲人人爽| 亚洲欧洲精品一区| 亚洲欧美999| 亚洲精品少妇| 欧美专区亚洲专区| 在线综合亚洲| 久久久久国产精品一区二区| 亚洲天堂免费观看| 久久久亚洲国产美女国产盗摄| 一级日韩一区在线观看| 久久精品视频在线看| 中文国产亚洲喷潮| 久久久久久电影| 亚洲欧美日韩国产一区二区| 久久久精品一品道一区| 亚洲欧美在线看| 欧美—级高清免费播放| 久久久亚洲成人| 国产精品成人午夜| 亚洲欧洲精品一区二区三区| 国外成人在线| 亚洲男女毛片无遮挡| 一区二区三区av| 麻豆91精品91久久久的内涵| 午夜精品婷婷| 欧美性久久久| 亚洲精品视频在线看| 亚洲电影免费观看高清完整版在线| 亚洲视频每日更新| 在线视频欧美一区| 欧美精品日韩一区| 亚洲国产经典视频| 亚洲国产精品成人综合| 性久久久久久久久久久久| 欧美激情第9页| 亚洲国产精品一区制服丝袜| 亚洲第一视频网站| 久久人人97超碰精品888| 久久久亚洲午夜电影| 国产亚洲欧美一区| 亚洲高清毛片| 亚洲国产视频一区| 开元免费观看欧美电视剧网站| 麻豆视频一区二区| 亚洲风情亚aⅴ在线发布| 久久夜色精品国产噜噜av| 久久中文字幕导航| 亚洲大片在线| 女主播福利一区| 91久久精品久久国产性色也91| 亚洲人成人一区二区三区| 欧美不卡三区| 亚洲精品永久免费| 亚洲手机成人高清视频| 国产精品久久久久久久久久尿| 亚洲特级毛片| 久久久久久久久久久成人| 精品不卡一区二区三区| 美女国内精品自产拍在线播放| 欧美激情视频一区二区三区不卡| 亚洲欧洲三级| 国产精品大片| 久久九九国产精品| 亚洲激情国产| 欧美影院精品一区| 在线播放日韩欧美| 欧美日韩亚洲91| 欧美一区二区三区视频| 欧美成人黑人xx视频免费观看| 亚洲免费观看高清在线观看 | 久久精品国产亚洲a| 欧美wwwwww| 宅男精品视频| 极品少妇一区二区三区精品视频| 免费在线看成人av| 亚洲永久视频| 亚洲一区二区三区午夜| 国产日韩在线看| 欧美激情麻豆| 午夜伦欧美伦电影理论片| 欧美激情黄色片| 午夜精品网站| 99国产精品久久久久老师| 国产伦精品一区二区| 老司机一区二区| 亚洲欧美久久久| 最新亚洲一区| 久久婷婷丁香| 亚洲欧美日韩系列| 亚洲精品美女免费| 激情小说亚洲一区| 国产精品国产亚洲精品看不卡15| 久久先锋影音av| 亚洲男女自偷自拍图片另类| 亚洲成人自拍视频| 鲁大师影院一区二区三区| 亚洲欧美一区二区三区久久| 日韩一二在线观看| 亚洲国产精品久久| 国一区二区在线观看| 国产精品网曝门| 欧美亚洲第一区| 欧美伦理在线观看| 欧美 日韩 国产一区二区在线视频 | 欧美中文字幕视频| 亚洲午夜精品久久久久久app| 亚洲福利久久| 尤物网精品视频| 国产亚洲一二三区| 国产麻豆综合| 国产精品爽黄69| 国产精品乱码一区二三区小蝌蚪| 欧美久久久久久久久| 免费观看不卡av| 美腿丝袜亚洲色图| 久久久久免费| 久久亚洲精品中文字幕冲田杏梨| 欧美亚洲一级| 久久精品国产77777蜜臀| 亚洲欧美日韩视频二区| 小处雏高清一区二区三区| 亚洲永久在线观看| 亚洲尤物视频在线| 亚洲欧美日韩国产成人| 午夜精品久久久久久久蜜桃app | 欧美激情亚洲综合一区| 欧美福利电影在线观看| 欧美激情一区二区久久久| 欧美国产日韩一区| 欧美日韩精品在线播放| 欧美午夜精品久久久久久浪潮| 欧美午夜精品久久久久久孕妇| 欧美三级欧美一级| 国产精品系列在线播放| 国内自拍一区| 亚洲茄子视频| 亚洲在线免费观看| 欧美一区二区在线视频| 久久亚洲综合色一区二区三区| 久久综合狠狠综合久久综青草 | 亚洲盗摄视频| 99国产精品视频免费观看| 亚洲一区二区精品视频| 欧美一区二区三区婷婷月色| 久久九九久精品国产免费直播 | 欧美一级免费视频| 美女露胸一区二区三区| 欧美日韩一区在线视频| 国产偷国产偷精品高清尤物| 亚洲大胆av| 亚洲自拍电影| 毛片一区二区| 99视频精品免费观看| 久久国产高清| 欧美日韩免费网站| 红桃视频国产精品| 一区二区三区欧美成人| 久久精品国产99国产精品澳门| 欧美激情精品久久久| 亚洲一区二区三区激情| 久久亚洲一区二区三区四区| 欧美日精品一区视频| 在线观看视频一区| 亚洲男人av电影| 欧美电影免费观看高清完整版| 亚洲无亚洲人成网站77777| 欧美aa在线视频| 国产日韩欧美一二三区| 99国产精品一区| 免费一区视频| 午夜在线成人av| 国产精品国产一区二区| 亚洲精一区二区三区| 免费成人在线观看视频| 欧美一区2区视频在线观看| 欧美日韩在线观看视频|