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

天行健 君子當(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 閱讀(194) 評論(0)  編輯 收藏 引用


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


公告

導(dǎo)航

統(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>
            久久久噜噜噜久久中文字幕色伊伊 | 极品av少妇一区二区| 午夜精品偷拍| 亚洲一区二区三区在线观看视频| 国产精品va在线| 午夜精品视频在线观看| 久久精品五月| 亚洲区国产区| 亚洲乱码国产乱码精品精可以看 | 免费欧美在线| av成人福利| 在线视频你懂得一区二区三区| 国产久一道中文一区| 麻豆成人在线| 欧美极品aⅴ影院| 午夜精品视频| 久久影院午夜片一区| 一区二区三区日韩欧美精品| 亚洲免费综合| 亚洲精品一区二区三区在线观看 | 欧美激情精品久久久久久久变态| 欧美电影免费观看大全| 午夜精品久久久久久99热| 久久久久久免费| 亚洲一区免费网站| 久久精品国产99精品国产亚洲性色 | 亚洲天堂免费在线观看视频| 欧美亚洲日本一区| 99精品福利视频| 欧美一区亚洲一区| 亚洲午夜视频| 媚黑女一区二区| 欧美怡红院视频| 欧美日韩国产综合一区二区| 久久在精品线影院精品国产| 欧美日韩日本视频| 免费av成人在线| 国产九九精品视频| 日韩一区二区精品葵司在线| 亚洲大片精品永久免费| 亚洲欧美日韩在线播放| 一区二区三区四区五区视频| 久久综合久久88| 久久精品国产久精国产爱| 欧美日韩不卡| 亚洲国产精品免费| 国产精品亚洲综合一区在线观看| 亚洲品质自拍| 亚洲激情欧美| 久久亚裔精品欧美| 久久久久久尹人网香蕉| 国产精品网站一区| 一区二区三区视频在线看| 日韩亚洲欧美成人| 女仆av观看一区| 女女同性女同一区二区三区91| 国产人妖伪娘一区91| 亚洲香蕉在线观看| 亚洲一区二区在| 欧美日韩天堂| 99精品国产在热久久婷婷| 99视频精品免费观看| 欧美大片91| 亚洲国产天堂久久综合| 亚洲欧洲综合另类| 欧美大片在线观看一区| 91久久精品国产| 亚洲精品中文字| 欧美日韩高清在线播放| 亚洲精品日韩一| 在线亚洲自拍| 国产精品久久久久久久9999| 在线视频亚洲欧美| 销魂美女一区二区三区视频在线| 国产精品五区| 性视频1819p久久| 麻豆av福利av久久av| 亚洲三级国产| 欧美日韩亚洲国产精品| 一区二区三区波多野结衣在线观看| 亚洲一区二区三区涩| 国产欧美日韩精品a在线观看| 欧美一级欧美一级在线播放| 男人的天堂亚洲| 亚洲精品影视| 国产精品免费网站| 久久精品国产精品亚洲精品| 亚洲成在人线av| 亚洲午夜小视频| 韩国三级电影久久久久久| 美女在线一区二区| 中文亚洲视频在线| 久久久久一区二区| 日韩亚洲欧美成人| 国产欧美在线观看一区| 麻豆91精品| 亚洲少妇最新在线视频| 免费观看成人| 亚洲一区在线免费| 国产一区导航| 欧美日韩国产一级| 欧美影院一区| 亚洲免费av网站| 久久蜜臀精品av| 亚洲在线网站| 亚洲国产精品久久久久| 国产精品美女黄网| 欧美不卡在线视频| 性欧美xxxx大乳国产app| 亚洲黄色成人网| 久久免费午夜影院| 亚洲免费在线电影| 亚洲韩国日本中文字幕| 国产手机视频一区二区| 欧美日本国产视频| 久久久久99精品国产片| 一区二区免费在线播放| 亚洲大胆av| 乱中年女人伦av一区二区| 亚洲欧美一区在线| 亚洲视频欧美在线| 91久久精品国产91性色| 国内自拍视频一区二区三区| 国产精品美女www爽爽爽| 欧美日韩国产成人在线免费| 久久资源在线| 久久久久久久久伊人| 羞羞答答国产精品www一本| 一区二区三区欧美在线| 亚洲肉体裸体xxxx137| 你懂的一区二区| 欧美jizz19性欧美| 久久人人97超碰国产公开结果| 亚洲欧美精品在线观看| 亚洲一区二区免费| 在线一区二区视频| 99视频在线观看一区三区| 亚洲区一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲自拍16p| 亚洲专区在线| 性欧美大战久久久久久久久| 欧美一乱一性一交一视频| 亚洲欧美日韩国产精品 | 亚洲国产精品va在线看黑人| 欧美大片免费观看| 欧美成人精品一区| 欧美成年人在线观看| 欧美国产精品人人做人人爱| 欧美大片专区| 亚洲国产成人久久| 亚洲国产精品va在线看黑人动漫| 亚洲国产91| 99国产精品久久久久老师| 一区二区三区视频在线看| 亚洲欧美日韩精品久久亚洲区| 欧美一区二区三区啪啪| 久久久在线视频| 欧美激情一区在线观看| 欧美日韩在线播放三区| 国产精品日本一区二区| 国产专区精品视频| 在线观看欧美一区| 亚洲人成网站精品片在线观看| 夜夜嗨av一区二区三区四区| 亚洲女人小视频在线观看| 久久精品亚洲热| 欧美激情视频在线免费观看 欧美视频免费一| 免费观看欧美在线视频的网站| 亚洲东热激情| 亚洲一区二区三区视频播放| 久久精品国产欧美激情| 欧美激情精品久久久久久蜜臀| 欧美午夜视频| 在线观看不卡| 亚洲婷婷国产精品电影人久久| 久久gogo国模裸体人体| 亚洲成色777777女色窝| 亚洲永久免费av| 欧美a级片网站| 国产精品有限公司| 亚洲精品久久久久久久久久久 | 精品1区2区| 一区二区三区高清| 久久琪琪电影院| 日韩图片一区| 老司机成人在线视频| 国产精品久久久| 91久久久久久| 久久久av水蜜桃| 亚洲免费激情| 美女精品一区| 国产亚洲一区二区在线观看| 一本久道久久综合中文字幕| 麻豆国产精品一区二区三区| 亚洲综合丁香| 国产精品黄色| 日韩香蕉视频| 亚洲黄色小视频| 媚黑女一区二区|