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

天行健 君子當自強而不息

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


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


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(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>
            亚洲精品日韩在线| 亚洲精品乱码视频| 亚洲影院免费观看| 99re66热这里只有精品3直播| 美女主播精品视频一二三四| 亚洲人成在线播放网站岛国| 亚洲国产精品成人久久综合一区| 男女av一区三区二区色多| 91久久精品一区二区三区| 亚洲人成网站777色婷婷| 欧美四级剧情无删版影片| 亚洲男人第一网站| 午夜精品一区二区三区在线视| 国产亚洲欧美日韩在线一区| 欧美国产亚洲另类动漫| 欧美精品成人在线| 久久精品91久久久久久再现| 麻豆精品国产91久久久久久| 一级成人国产| 欧美一区二区在线免费观看| 最新热久久免费视频| 中文在线一区| 亚洲第一成人在线| 99视频精品在线| 国产午夜精品久久久| 亚洲福利专区| 国产精品日日做人人爱| 欧美激情一区二区三区全黄| 国产精品男人爽免费视频1| 久久香蕉国产线看观看av| 欧美日韩亚洲一区二区三区在线| 久久国产精品99久久久久久老狼 | 久久黄色级2电影| 欧美激情在线播放| 久久久久五月天| 欧美精品一区二区高清在线观看| 欧美一区二区网站| 欧美日韩福利在线观看| 狂野欧美一区| 国产精品网站在线播放| 亚洲精选一区| 亚洲第一区在线| 欧美一区二区在线视频| 亚洲一级高清| 欧美日韩另类综合| 亚洲国产日韩欧美| 精品51国产黑色丝袜高跟鞋| 亚洲女优在线| 亚洲欧美日韩精品久久奇米色影视 | 欧美高清视频一区二区| 国产区日韩欧美| 亚洲素人在线| 亚洲午夜精品网| 欧美日韩成人综合在线一区二区| 免费在线看成人av| 国语自产偷拍精品视频偷| 亚洲视频欧美视频| 亚洲一区二区黄色| 欧美日韩视频| 亚洲最新色图| 亚洲自拍偷拍一区| 国产精品久久| 亚洲免费人成在线视频观看| 亚洲欧美日韩精品久久久久| 欧美视频在线观看一区二区| 亚洲人成人99网站| 一区二区三区三区在线| 欧美久久久久久蜜桃| 亚洲欧洲日产国产综合网| 99这里只有久久精品视频| 欧美国产精品日韩| 亚洲精品久久久久久久久久久久久| 亚洲成人直播| 免费h精品视频在线播放| 亚洲第一页中文字幕| 亚洲人体偷拍| 欧美天天在线| 午夜精品视频在线观看| 久久亚洲春色中文字幕| 亚洲国产专区校园欧美| 欧美日韩国产高清视频| 亚洲最新视频在线播放| 欧美亚洲日本网站| 好吊日精品视频| 老色鬼精品视频在线观看播放| 模特精品在线| 中文日韩欧美| 国产日本欧美一区二区三区| 久久久人成影片一区二区三区观看 | 亚洲欧洲精品一区| 亚洲综合精品自拍| 国产一区二区av| 欧美成人在线影院| 亚洲小视频在线观看| 久久精视频免费在线久久完整在线看| 国产午夜精品久久久| 久久精品观看| 日韩视频三区| 久久久亚洲影院你懂的| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品久久久一区二区| 欧美亚洲免费电影| 亚洲第一级黄色片| 新67194成人永久网站| 亚洲国产视频直播| 国产精品视频一区二区高潮| 久久综合久久综合九色| 亚洲一区二区三区成人在线视频精品| 久久综合狠狠综合久久综合88| 亚洲精品免费观看| 国产性天天综合网| 欧美大香线蕉线伊人久久国产精品| 一区二区黄色| 亚洲高清精品中出| 久久一区二区精品| 香蕉精品999视频一区二区 | 国产日韩欧美电影在线观看| 欧美大胆人体视频| 久久精品国产96久久久香蕉| 日韩一级成人av| 欧美成人精品在线播放| 欧美一区二区高清在线观看| 亚洲美女网站| 在线日韩欧美视频| 国产亚洲毛片在线| 国产精品视频免费观看www| 欧美激情亚洲精品| 久久米奇亚洲| 久久超碰97人人做人人爱| 一本大道久久精品懂色aⅴ| 欧美大胆成人| 免费视频一区二区三区在线观看| 午夜精品视频在线| 亚洲欧美高清| 亚洲一区bb| 亚洲一区二区三区精品动漫| 夜夜嗨av色一区二区不卡| 亚洲精品国产精品乱码不99按摩| 激情欧美亚洲| 精品99视频| 在线成人中文字幕| 亚洲高清免费| 亚洲高清三级视频| 一区二区亚洲精品国产| 精品av久久707| 在线观看的日韩av| 亚洲精美视频| 日韩一区二区免费看| 日韩视频在线一区二区| av成人免费| 亚洲免费在线视频| 久久不射2019中文字幕| 久久成人国产| 另类综合日韩欧美亚洲| 欧美va天堂在线| 亚洲欧洲日本国产| 亚洲精品在线观看免费| 一区二区国产日产| 欧美亚洲在线视频| 久久亚洲免费| 欧美日韩大片| 国产精品影音先锋| 亚洲二区视频| 一区二区三区日韩精品| 在线亚洲伦理| 久久爱www.| 欧美福利专区| 在线视频欧美日韩| 翔田千里一区二区| 欧美18av| 国产精品美女999| 精品成人乱色一区二区| 日韩亚洲欧美成人一区| 午夜精品一区二区在线观看| 久久超碰97人人做人人爱| 免费在线日韩av| 一本大道久久精品懂色aⅴ| 欧美中文在线免费| 欧美日韩国产成人在线91| 国产乱理伦片在线观看夜一区| 精品电影在线观看| 亚洲私人影吧| 老司机67194精品线观看| 亚洲精品乱码久久久久久久久| 亚洲欧美日韩国产综合| 欧美二区在线观看| 国产亚洲成av人在线观看导航| 亚洲精品在线免费观看视频| 欧美一区亚洲| 日韩系列在线| 久久手机精品视频| 国产精品区一区| 一区二区三区国产盗摄| 久久天堂精品| 亚洲私人影院在线观看| 欧美国产日韩xxxxx| 国内精品伊人久久久久av一坑| 亚洲一区二区成人| 91久久精品美女| 六月丁香综合|