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

天行健 君子當(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>
            欧美精品v日韩精品v国产精品| 欧美高清视频免费观看| 国产精品手机视频| 午夜一区在线| 亚洲午夜久久久久久久久电影院| 国产精品福利在线| 性欧美18~19sex高清播放| 午夜在线电影亚洲一区| 狠狠色丁香久久综合频道| 欧美成人精品| 欧美三级乱人伦电影| 欧美一区二区三区的| 久久国产精品72免费观看| 亚洲国产精品成人综合色在线婷婷| 欧美风情在线观看| 欧美日精品一区视频| 久久成人一区| 女人香蕉久久**毛片精品| 亚洲视频高清| 欧美在线视频观看免费网站| 亚洲国产你懂的| 亚洲午夜精品久久久久久app| 国产亚洲成精品久久| 亚洲国产黄色片| 欧美性猛交xxxx免费看久久久| 久久成人精品视频| 欧美激情精品久久久六区热门 | 一区精品在线| 亚洲精品欧美一区二区三区| 国产女人精品视频| 亚洲三级性片| 一区二区在线视频观看| 99精品99久久久久久宅男| 精品白丝av| 亚洲视频你懂的| 亚洲精品欧美精品| 欧美一区=区| 亚洲一卡二卡三卡四卡五卡| 久久久久网址| 欧美影片第一页| 欧美日韩成人在线| 欧美www视频在线观看| 国产欧美日韩视频一区二区| 91久久国产综合久久| 国语自产精品视频在线看| 日韩视频专区| 亚洲精一区二区三区| 久久国产精品99久久久久久老狼| 亚洲性感激情| 欧美激情综合在线| 亚洲第一福利社区| 在线播放日韩专区| 久久九九精品| 久久天堂成人| 国语自产偷拍精品视频偷| 亚洲一区二区3| 亚洲一区二区三区四区五区午夜 | 香蕉久久一区二区不卡无毒影院| 日韩亚洲视频在线| 免费h精品视频在线播放| 久久先锋影音av| 狠狠入ady亚洲精品| 欧美一区网站| 久久在线视频在线| 狠狠色狠狠色综合日日91app| 亚洲女爱视频在线| 欧美亚洲日本一区| 国产久一道中文一区| 亚洲欧美韩国| 久久男人资源视频| 国模大胆一区二区三区| 久久精品伊人| 欧美成人嫩草网站| 亚洲精品日本| 欧美日韩不卡视频| 一卡二卡3卡四卡高清精品视频| 日韩香蕉视频| 欧美视频在线观看| 亚洲一卡二卡三卡四卡五卡| 亚洲欧美资源在线| 国产一区二区三区网站| 久久久久久久999| 亚洲成色999久久网站| 99在线|亚洲一区二区| 国产精品r级在线| 欧美亚洲网站| 欧美激情精品久久久久久大尺度 | 在线视频精品一区| 国产精品电影网站| 久久不射2019中文字幕| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美成人激情视频免费观看| 亚洲国产成人精品女人久久久| 中日韩美女免费视频网站在线观看| 欧美视频一区二区| 欧美在线视频观看免费网站| 亚洲国产欧美久久| 性欧美长视频| 亚洲精品久久久久久下一站| 欧美日韩亚洲高清| 久久久久国产精品一区二区| 亚洲精品欧洲| 美女网站在线免费欧美精品| 在线午夜精品| 狠狠色狠狠色综合| 欧美视频一区二区三区在线观看| 欧美伊人久久大香线蕉综合69| 欧美激情亚洲另类| 久久大逼视频| 9l国产精品久久久久麻豆| 国产又爽又黄的激情精品视频| 欧美成人一区二区三区在线观看| 亚洲一区二区三区免费观看| 欧美激情中文字幕乱码免费| 欧美一区亚洲二区| 99视频精品在线| 一区二区三区中文在线观看| 国产精品国产三级国产aⅴ9色| 久久亚洲国产成人| 欧美怡红院视频| 在线亚洲一区二区| 亚洲精品美女在线观看播放| 久久午夜精品| 久久精品人人做人人爽| 亚洲午夜久久久久久久久电影网| 亚洲国产高清aⅴ视频| 国产亚洲aⅴaaaaaa毛片| 国产精品久久久久永久免费观看 | 蜜桃av噜噜一区二区三区| 欧美亚洲视频一区二区| 亚洲无限av看| 一区二区三区国产精品| 亚洲经典在线| 亚洲第一区在线| 免费在线看一区| 久久全球大尺度高清视频| 久久精品夜夜夜夜久久| 原创国产精品91| 欧美黄色aa电影| 美女精品在线观看| 久久免费视频网| 久久国产精彩视频| 久久精品国产久精国产爱 | 亚洲精品乱码久久久久久黑人 | 久久亚洲一区二区| 久久精品国产综合| 久久成人精品| 久久亚洲精品欧美| 免费av成人在线| 欧美国产一区二区在线观看| 免费在线看一区| 欧美国产综合一区二区| 欧美巨乳在线| 欧美视频中文字幕| 国产精品―色哟哟| 国模私拍一区二区三区| 亚洲电影av| 亚洲国内精品| 99re在线精品| 亚洲一二三四久久| 欧美在线看片| 老司机精品视频网站| 亚洲第一精品福利| 一区二区冒白浆视频| 亚洲一区在线免费观看| 久久疯狂做爰流白浆xx| 久久蜜桃精品| 欧美日韩久久不卡| 国产精品视频免费观看| 激情小说另类小说亚洲欧美| 亚洲日本免费| 亚洲欧美清纯在线制服| 久久天天躁狠狠躁夜夜爽蜜月| 你懂的国产精品永久在线| 亚洲精品色婷婷福利天堂| 夜夜爽av福利精品导航 | 亚洲在线黄色| 久久人人爽人人爽爽久久| 欧美精品国产| 国产婷婷成人久久av免费高清| 亚洲高清在线观看| 亚洲免费在线电影| 免费欧美日韩| 一区二区三区日韩| 久久最新视频| 国产精品亚洲激情| 亚洲区在线播放| 久久久青草青青国产亚洲免观| 亚洲国产mv| 久久成人综合网| 欧美日韩在线视频一区| 尤物精品国产第一福利三区| 亚洲一级特黄| 亚洲国产日韩欧美综合久久| 欧美伊人影院| 国产精品露脸自拍| 一区二区av在线| 亚洲第一页在线| 久久久www成人免费无遮挡大片| 国产精品yjizz|