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

天行健 君子當(dāng)自強(qiáng)而不息

Working with Maps and Levels(5)

cTrigger::cTrigger and cTrigger::~cTrigger

Just as does every C++ class, cTrigger has a constructor and a destructor that set up
and free the data contained within the class. The only data tracked by the trigger
class that is not contained with the linked list is the number of triggers currently
held in the linked list and a pointer to that linked list. The constructor and
destructor ensure that the class is prepared for using those two variables to free
the class's data when destroyed (by calling the free function).

 

cTrigger::load and cTrigger::save

You typically design maps with a set of triggers all in their proper locations.
Loading a list of those triggers is the main priority of the trigger class. Once a list
of triggers is created or loaded, you also have the option to save that list of triggers
(to save the game state, for example).

The load function opens a text file and repeatedly reads in lines of text that define
the type, identification, location, and special properties of each trigger (as described
in the earlier section “Creating a Trigger Class”). When the end of file is reached,
the load function returns. Take a look at the load function code to see just what I’m
talking about:

bool cTrigger::load(const char* filename)
{
    free();

    FILE* fp = fopen(filename, "rb");
    
if(fp == NULL)
        
return false;

    
// start looping, reading in until EOF reached.
    for(;;)
    {
        
long id = get_next_long_2(fp);
        
if(id == -1)
            
break;

        
long type    = get_next_long_2(fp);
        
bool enabled = get_next_long_2(fp) ? true : false;

        
float x1, y1, z1, x2, y2, z2, x3, z3, radius;

        
// read in rest depending on type
        switch(type)
        {
        
case TRIGGER_SPHERE:
            x1     = get_next_float_2(fp);
            y1     = get_next_float_2(fp);
            z1     = get_next_float_2(fp);
            radius = get_next_float_2(fp);

            add_sphere(id, enabled, x1, y1, z1, radius);
            
break;

        
case TRIGGER_BOX:
            x1 = get_next_float_2(fp);
            y1 = get_next_float_2(fp);
            z1 = get_next_float_2(fp);
            x2 = get_next_float_2(fp);
            y2 = get_next_float_2(fp);
            z2 = get_next_float_2(fp);

            add_box(id, enabled, x1, y1, z1, x2, y2, z2);
            
break;

        
case TRIGGER_CYLINDER:
            x1     = get_next_float_2(fp);
            y1     = get_next_float_2(fp);
            z1     = get_next_float_2(fp);
            radius = get_next_float_2(fp);
            y2     = get_next_float_2(fp);

            add_cylinder(id, enabled, x1, y1, z1, radius, y2);
            
break;

        
case TRIGGER_TRIANGLE:
            x1 = get_next_float_2(fp);
            z1 = get_next_float_2(fp);
            x2 = get_next_float_2(fp);
            z2 = get_next_float_2(fp);
            x3 = get_next_float_2(fp);
            z3 = get_next_float_2(fp);
            y1 = get_next_float_2(fp);
            y2 = get_next_float_2(fp);

            add_triangle(id, enabled, x1, z1, x2, z2, x3, z3, y1, y2);
            
break;

        
default:    // some error occurred
            fclose(fp);
            free();
            
return false;
        }
    }

    fclose(fp);
    
return true;
}

At this point, the trigger data file is open and ready to begin reading in a list of
trigger definitions. For each trigger, remember that the text line uses the following
order: the trigger identification number, the type (0=sphere, 1=box, and so on), the
default enabled status (0=trigger disabled, 1=enabled), and the specific data based on
the type of trigger being read.

Once past reading in the identification number, type, and enabled flag of each trigger,
a single switch...case code block takes care of loading in each trigger type’s data.
As each trigger’s data is read in, a separate function is called (based on the trigger’s
type) to insert the trigger into the linked list. Those functions are add_sphere, add_box,
add_cylinder, and add_triangle.

Moving past the load function, you see the save function, which scans the linked list
of triggers and saves each trigger’s data to a file, using the same format for each
line of text that defines a trigger. Take a look:

bool cTrigger::save(const char* filename)
{
    
if(m_num_triggers == 0)
        
return false;

    FILE* fp = fopen(filename, "wb");
    
if(fp == NULL)
        
return false;

    
// write out all triggers
    for(sTrigger* trigger = m_root_trigger; trigger != NULL; trigger = trigger->next)
    {
        
int enabled = trigger->enabled ? 1 : 0;

        
switch(trigger->type)
        {
        
case TRIGGER_SPHERE:
            fprintf(fp, "%lu %lu %lu %lf %lf %lf %lf\r\n",
                    trigger->id, trigger->type, enabled,
                    trigger->x1, trigger->y1, trigger->z1,
                    trigger->radius);

            
break;

        
case TRIGGER_BOX:
            fprintf(fp, "%lu %lu %lu %lf %lf %lf %lf %lf %lf\r\n",
                    trigger->id, trigger->type, enabled,
                    trigger->x1, trigger->y1, trigger->z1,
                    trigger->x2, trigger->y2, trigger->z2);

            
break;

        
case TRIGGER_CYLINDER:
            fprintf(fp, "%lu %lu %lu %lf %lf %lf %lf %lf\r\n",
                    trigger->id, trigger->type, enabled,
                    trigger->x1, trigger->y1, trigger->z1,
                    trigger->radius, trigger->y2);

            
break;

        
case TRIGGER_TRIANGLE:
            fprintf(fp, "%lu %lu %lu %lf %lf %lf %lf %lf %lf %lf %lf\r\n",
                    trigger->id, trigger->type, enabled,
                    trigger->x1, trigger->z1,
                    trigger->x2, trigger->z2,
                    trigger->x3, trigger->z3,
                    trigger->y1, trigger->y2);

            
break;
        }
    }

    fclose(fp);
    
return true;
}

posted on 2007-12-09 16:11 lovedday 閱讀(198) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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区| 亚洲国产经典视频| 欧美大学生性色视频| 亚洲黄网站黄| 亚洲精选在线观看| 欧美日韩一区二区三区在线看 | 久久一区二区三区av| 尹人成人综合网| 亚洲高清久久网| 国产精品av免费在线观看| 亚洲欧美另类国产| 久久er精品视频| 亚洲精品国产视频| 亚洲小说欧美另类婷婷| 国产综合视频| 亚洲激情视频在线播放| 欧美日韩国产系列| 久久国产精品网站| 欧美aaa级| 欧美一级播放| 欧美国产精品| 欧美一区国产二区| 免费国产一区二区| 香蕉久久精品日日躁夜夜躁| 久久九九久精品国产免费直播| 日韩视频一区二区在线观看| 亚洲综合精品| 亚洲精品人人| 欧美中文字幕精品| 中文精品视频一区二区在线观看| 亚洲综合电影一区二区三区| 亚洲国产婷婷香蕉久久久久久99 | 亚洲免费小视频| 91久久精品国产91性色| 亚洲自拍啪啪| 在线视频一区二区| 久久精品网址| 亚洲欧美日韩一区二区在线| 麻豆精品视频在线观看| 午夜精品一区二区三区在线 | 欧美夜福利tv在线| 亚洲少妇中出一区| 免费观看日韩av| 久久免费黄色| 国产精品网站视频| 99re热这里只有精品免费视频| 伊人色综合久久天天| 亚洲欧美另类国产| 亚洲一级网站| 欧美日韩免费观看一区| 亚洲国产mv| 亚洲黄色影院| 久久久久久黄| 久久黄色级2电影| 国产精品久久久久久久久借妻| 亚洲激情成人在线| 亚洲欧洲视频在线| 免费观看在线综合| 欧美成人网在线| 亚洲高清色综合| 久久亚洲影院| 欧美承认网站| 亚洲国产精品va在线观看黑人| 久久国产日韩欧美| 久久人人爽爽爽人久久久| 国产在线精品一区二区夜色| 羞羞答答国产精品www一本| 欧美一区二区视频在线观看2020| 国产精品露脸自拍| 亚洲综合国产精品| 欧美一区二区在线视频| 国产午夜精品一区二区三区欧美| 亚洲免费视频网站| 久久久久久97三级| 亚洲第一久久影院| 欧美成人午夜77777| 亚洲精品护士| 午夜精品久久久久久久白皮肤| 国产精品影视天天线| 午夜久久tv| 欧美xx视频| 亚洲精品在线一区二区| 欧美精品免费在线| 亚洲一区二区三区四区中文| 午夜精品视频| 黄色亚洲大片免费在线观看| 久久综合国产精品台湾中文娱乐网| 欧美成人蜜桃| 亚洲在线观看视频| 国产日韩三区| 欧美电影在线观看完整版| 日韩午夜剧场| 久久精品主播| 亚洲毛片av在线| 国产麻豆精品视频| 欧美xxx成人| 亚洲欧洲av一区二区三区久久| 免费在线欧美视频| 亚洲综合精品| 一区二区三区在线免费视频| 欧美女同在线视频| 久久国产精品黑丝| 亚洲精品免费一二三区| 久久成人精品电影| 亚洲蜜桃精久久久久久久| 国产欧美日韩一区二区三区在线 | 欧美高清视频一区二区三区在线观看| 亚洲精品国产精品乱码不99按摩| 香蕉尹人综合在线观看| 亚洲国产日韩欧美一区二区三区| 国产精品久久久91| 美女久久一区| 性做久久久久久久免费看| 亚洲精品一区二区网址| 久久综合狠狠| 欧美一区二区免费观在线| 日韩一级片网址| 极品av少妇一区二区| 国产精品日韩一区二区| 欧美精品 国产精品| 久久精品国产精品亚洲| 中文日韩在线视频| 亚洲国产综合视频在线观看| 久久久伊人欧美| 欧美伊人精品成人久久综合97| 99热在这里有精品免费| 黄色亚洲免费| 国产日韩精品一区观看 | 久久久久久午夜| 亚洲综合激情| 亚洲视频免费在线观看| 亚洲免费成人av| 亚洲日本欧美日韩高观看| 久久男人资源视频| 久久国产欧美| 欧美一区国产二区| 性做久久久久久久免费看| 亚洲午夜精品一区二区三区他趣| 亚洲精品欧美日韩| 亚洲毛片播放| 99re这里只有精品6| 亚洲人成毛片在线播放| 亚洲人成高清| 亚洲乱亚洲高清| 日韩视频免费观看| 99精品久久| 一本大道久久a久久综合婷婷| 亚洲人www| 在线一区免费观看| 亚洲在线一区| 欧美综合第一页| 久久香蕉国产线看观看av| 美女视频网站黄色亚洲| 久久亚洲午夜电影| 欧美电影免费观看高清| 亚洲第一天堂av| 最近中文字幕日韩精品| 一本大道久久a久久综合婷婷| 夜夜嗨av一区二区三区网站四季av| 日韩午夜一区| 欧美在线观看视频一区二区三区| 欧美自拍偷拍午夜视频| 蜜桃av久久久亚洲精品| 欧美日韩一级片在线观看| 久久久久久久综合日本| 久久夜精品va视频免费观看| 欧美96在线丨欧| 亚洲精品一区二区在线观看| 99精品国产一区二区青青牛奶| 亚洲淫性视频| 久久永久免费| 欧美午夜精品久久久久久浪潮| 国产精品久久一卡二卡| 一区免费观看| 亚洲视频在线观看三级| 久久久久久久综合狠狠综合| 欧美激情亚洲| 亚洲欧美在线看| 免费在线播放第一区高清av| 欧美性jizz18性欧美| 在线观看欧美成人| 国产精品99久久久久久www| 久久久久久97三级| 亚洲精品在线视频| 久久精品亚洲精品| 欧美精品日韩一区| 韩日精品在线| 亚洲一区精品在线| 欧美激情一二三区| 亚洲免费在线精品一区| 欧美极品aⅴ影院| 狠色狠色综合久久| 亚洲自拍高清| 亚洲精品美女在线观看| 久久男女视频| 国产一区二区三区黄视频| 亚洲欧美成人综合| 91久久精品一区二区三区| 欧美在线一二三|