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

天行健 君子當(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>
            在线视频你懂得一区| 亚洲一区二区三区成人在线视频精品 | 亚洲综合视频网| 国产精品国产三级国产aⅴ入口| 一本一本久久a久久精品牛牛影视| 欧美激情91| 欧美精品一区二区三区视频| 亚洲天堂男人| 亚洲一区二区三区免费视频| 国产精品一区亚洲| 久久久久久国产精品mv| 久久精品人人做人人爽| 亚洲韩日在线| 亚洲视频在线视频| 韩国av一区二区| 亚洲国产小视频| 国产精品久在线观看| 久久天天狠狠| 欧美日韩免费观看一区二区三区| 亚洲女同精品视频| 久久午夜精品一区二区| 在线视频精品一| 欧美在线中文字幕| 99热精品在线观看| 欧美在线啊v一区| 99精品视频免费全部在线| 亚洲一级二级| 亚洲精品综合精品自拍| 亚洲一区不卡| 91久久久久久久久| 亚洲欧美怡红院| 亚洲激情一区二区三区| 亚洲一区二区三区乱码aⅴ蜜桃女| 极品少妇一区二区三区| 亚洲美女在线看| 亚洲国产精品久久精品怡红院| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品国产馆在线真实露脸| 久久久中精品2020中文| 欧美三日本三级三级在线播放| 久久国产高清| 国产精品户外野外| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品女人网站| 日韩亚洲不卡在线| 亚洲精品极品| 久久综合色婷婷| 久久亚洲色图| 国产欧美日韩另类一区| 日韩一级黄色av| 91久久精品www人人做人人爽| 欧美一区二区三区四区在线观看 | 欧美日韩在线观看一区二区| 欧美多人爱爱视频网站| 韩国av一区二区三区四区| 亚洲欧美www| 亚洲免费影视第一页| 欧美日韩国产精品一区| 亚洲第一网站| 亚洲欧洲美洲综合色网| 久久综合影音| 欧美大片免费看| 亚洲第一精品夜夜躁人人爽| 久久精品一区二区三区四区 | 亚洲国产精品高清久久久| 久久久久se| 久久一二三区| 在线观看欧美激情| 美女精品自拍一二三四| 亚洲丶国产丶欧美一区二区三区| 亚洲国产精品第一区二区| 免费看av成人| 亚洲韩国日本中文字幕| 99精品视频免费观看| 欧美日韩情趣电影| 亚洲午夜羞羞片| 久久久91精品| 在线观看日韩av先锋影音电影院| 久久深夜福利| 亚洲激情网站| 亚洲视频中文字幕| 国产伦精品一区二区三区照片91 | 亚洲午夜激情在线| 久久aⅴ国产欧美74aaa| 韩国久久久久| 欧美国产免费| 亚洲一区一卡| 免费看的黄色欧美网站| 亚洲美女在线一区| 国产精品激情电影| 久久精品视频在线播放| 亚洲激情社区| 久久av一区二区| 亚洲欧洲一二三| 欧美午夜宅男影院在线观看| 欧美亚洲网站| 亚洲精品你懂的| 亚洲视频一区在线观看| 国产手机视频一区二区| 免费在线亚洲| 亚洲欧美日韩中文播放| 欧美激情麻豆| 久久激情综合网| 亚洲激情在线观看| 国产精品午夜国产小视频| 久久亚洲美女| 亚洲欧美日韩一区二区三区在线观看 | 欧美一区久久| 亚洲精品视频二区| 国产自产v一区二区三区c| 欧美日韩成人综合| 久久天天狠狠| 午夜日韩福利| 99视频超级精品| 免费在线欧美视频| 性久久久久久| 中日韩视频在线观看| 1769国内精品视频在线播放| 欧美三级在线视频| 麻豆精品国产91久久久久久| 亚洲一区二区三区欧美| 亚洲毛片网站| 欧美国产视频在线| 久久亚洲图片| 欧美一级大片在线免费观看| 中文欧美字幕免费| 亚洲精品日韩欧美| 亚洲成人在线视频网站| 国产一区二区三区视频在线观看| 欧美特黄一级| 欧美日韩国产另类不卡| 欧美第一黄网免费网站| 久久综合电影一区| 久久久久久亚洲综合影院红桃| 午夜欧美大片免费观看| 亚洲一区二区视频在线观看| 亚洲精品一品区二品区三品区| 欧美va天堂| 欧美成人日本| 欧美xx69| 亚洲国产高清在线| 欧美激情女人20p| 亚洲高清视频一区| 亚洲激情校园春色| 亚洲精品乱码久久久久久黑人| 欧美国产日产韩国视频| 欧美成人综合一区| 亚洲第一精品福利| 亚洲区中文字幕| 亚洲精品乱码久久久久久蜜桃91| 亚洲国产美女| 亚洲美女av在线播放| 亚洲人成小说网站色在线| 日韩亚洲欧美成人| 一区二区三区欧美亚洲| 亚洲天堂久久| 欧美在线免费观看亚洲| 欧美在线网站| 欧美14一18处毛片| 欧美视频一区二区在线观看| 国产精品视频福利| 黄色在线成人| 亚洲精品乱码视频| 亚洲欧美日韩国产成人| 久久久天天操| 亚洲国产日韩一区二区| 日韩一级片网址| 亚洲欧美日韩中文播放| 久久久久久日产精品| 欧美理论电影在线观看| 国产精品久久久久久久久动漫 | 欧美v日韩v国产v| 欧美日韩一区国产| 国产视频一区在线| 亚洲国产小视频| 小嫩嫩精品导航| 欧美国产精品劲爆| 亚洲午夜精品久久久久久浪潮 | 亚洲视频一二| 免费一级欧美片在线观看| 欧美日韩在线播放一区| 黄色小说综合网站| 中文一区二区在线观看| 久久网站免费| 一区二区三区欧美在线| 久久亚洲欧美| 国产欧美日韩视频一区二区| 亚洲欧洲日韩在线| 久久不射电影网| 亚洲精品国产精品乱码不99 | 亚洲电影专区| 欧美主播一区二区三区美女 久久精品人 | 一区二区免费在线视频| 久久欧美中文字幕| 国产精品视频久久| 日韩午夜在线观看视频| 美国成人直播| 欧美一区二区免费| 国产精品第三页| 日韩一级在线|