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

天行健 君子當(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>
            亚洲国产欧美一区二区三区同亚洲 | 亚洲精品一区二区三区99| 久久综合久久综合久久综合| 在线观看亚洲| 亚洲国产成人久久综合| 欧美高清视频一区| 99国产精品久久久| 中文网丁香综合网| 国产日韩视频一区二区三区| 久久免费午夜影院| 久久综合久久综合久久| 亚洲人成毛片在线播放| 日韩午夜激情av| 国产欧美精品xxxx另类| 久久一区中文字幕| 女生裸体视频一区二区三区| 一区二区三区视频免费在线观看| 一区二区三区欧美亚洲| 国产一区二区三区免费观看| 欧美激情aaaa| 国产精品高潮在线| 两个人的视频www国产精品| 欧美紧缚bdsm在线视频| 小黄鸭精品aⅴ导航网站入口| 久久爱www| 一区二区欧美视频| 久久精品国产96久久久香蕉| 99国产精品视频免费观看| 亚洲影视九九影院在线观看| 亚洲第一天堂av| 中文网丁香综合网| 亚洲精品三级| 欧美一区二区视频免费观看| 日韩视频免费大全中文字幕| 欧美一区二区视频在线| 一区二区日韩欧美| 久久久蜜臀国产一区二区| 亚洲在线免费| 欧美高清一区二区| 六月婷婷一区| 国产欧美一区二区三区另类精品| 亚洲福利电影| 狠狠色噜噜狠狠狠狠色吗综合| 日韩视频在线观看| 91久久久亚洲精品| 久久丁香综合五月国产三级网站| 亚洲线精品一区二区三区八戒| 久久综合中文字幕| 久久久精品网| 国产日韩欧美不卡在线| 亚洲午夜一区二区| 亚洲一区在线视频| 欧美日韩久久| 国产亚洲精品综合一区91| 亚洲毛片视频| 日韩天堂在线视频| 欧美成人首页| 嫩草国产精品入口| 伊人久久大香线蕉综合热线| 性一交一乱一区二区洋洋av| 亚洲影院色无极综合| 欧美色欧美亚洲高清在线视频| 亚洲国产mv| 日韩视频免费观看高清在线视频| 噜噜爱69成人精品| 欧美国产日韩精品| 亚洲激情不卡| 欧美久久久久久久久久| 亚洲精品欧美专区| 亚洲中午字幕| 国产精品视区| 亚洲欧美制服中文字幕| 久久精品国产免费观看| 很黄很黄激情成人| 老色批av在线精品| 亚洲欧洲精品天堂一级| 亚洲精品你懂的| 欧美日韩精品是欧美日韩精品| 亚洲精品午夜精品| 午夜亚洲一区| 国内外成人在线| 欧美成人国产一区二区| 亚洲毛片在线看| 亚洲欧美在线aaa| 国产日韩一区二区三区在线| 久久久www免费人成黑人精品| 欧美激情性爽国产精品17p| 99视频在线精品国自产拍免费观看| 欧美日韩 国产精品| 亚洲综合日本| 欧美不卡视频一区发布| 一本久久精品一区二区| 国产精品亚洲综合色区韩国| 久久精品视频播放| 亚洲人成77777在线观看网| 亚洲午夜精品久久久久久app| 国产亚洲人成网站在线观看| 欧美+日本+国产+在线a∨观看| 夜夜精品视频一区二区| 久久综合给合久久狠狠狠97色69| 91久久精品美女| 国产精品区一区二区三| 免费欧美日韩国产三级电影| 亚洲深夜影院| 亚洲成在人线av| 国产中文一区二区三区| 欧美国产极速在线| 午夜精品视频一区| 亚洲久久一区二区| 久久午夜精品一区二区| 亚洲一级二级在线| 亚洲国产免费| 国产一区成人| 国产精品户外野外| 欧美不卡一区| 久久久久久久综合色一本| 夜夜爽99久久国产综合精品女不卡| 久久激情综合| 亚洲一级高清| av不卡在线观看| 亚洲电影免费| 国内精品久久久久久久果冻传媒| 欧美色区777第一页| 免费在线观看日韩欧美| 欧美一区在线看| 亚洲午夜久久久| 夜夜嗨av一区二区三区中文字幕| 欧美va天堂va视频va在线| 久久精品国产亚洲高清剧情介绍| 亚洲午夜国产成人av电影男同| 亚洲高清色综合| 国内成人精品2018免费看| 国产精品素人视频| 国产精品初高中精品久久| 欧美日韩精品高清| 欧美黑人一区二区三区| 欧美gay视频| 欧美成人精品高清在线播放| 久久精品一区二区三区中文字幕| 亚洲免费一级电影| 亚洲影院在线| 亚洲欧美精品伊人久久| 亚洲欧美日韩精品一区二区| 一区二区激情视频| 99精品欧美一区| 一本大道久久a久久综合婷婷 | 亚洲视频在线观看一区| 日韩一区二区久久| 一区二区av在线| 亚洲图片欧洲图片av| 亚洲一区三区在线观看| 亚洲欧美日韩中文播放| 午夜性色一区二区三区免费视频| 亚洲一品av免费观看| 亚洲欧美日韩精品久久| 小处雏高清一区二区三区| 久久久久九九九九| 欧美α欧美αv大片| 亚洲国产高清aⅴ视频| 亚洲欧洲精品一区二区三区 | 久久九九免费| 久热精品在线视频| 欧美激情在线狂野欧美精品| 91久久极品少妇xxxxⅹ软件| 日韩视频在线播放| 亚洲宅男天堂在线观看无病毒| 亚洲欧美日韩精品久久| 久久久精品五月天| 欧美精品自拍| 国产欧美日韩综合| 亚洲国产视频直播| 亚洲一区二区三区四区视频| 久久精品官网| 亚洲国产你懂的| 亚洲一区二区三区高清不卡| 久久精品噜噜噜成人av农村| 欧美激情一区二区在线| 国产九色精品成人porny| 亚洲第一精品电影| 亚洲一区视频在线| 免费成人av在线| 中日韩高清电影网| 久久综合电影一区| 国产精品成人一区二区艾草| 一区二区三区在线观看视频| 亚洲素人在线| 欧美黄色成人网| 欧美一区二区成人| 欧美久久久久久久久久| 好看的日韩视频| 亚洲综合丁香| 亚洲国产精品一区二区第一页| 午夜精品视频一区| 欧美日韩精品一区二区在线播放| 国产亚洲欧美日韩日本| 亚洲尤物精选| 91久久夜色精品国产九色| 久久福利毛片| 国产免费成人在线视频| 99一区二区|