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

天行健 君子當(dāng)自強(qiáng)而不息

Working with Maps and Levels(16)

 

download souce and solution

 

Mapping demo main source:


#include "core_common.h"
#include "core_graphics.h"
#include "core_framework.h"
#include "core_input.h"
#include "frustum.h"
#include "node_tree_mesh.h"
#include "trigger.h"
#include "barrier.h"
#include "auto_map.h"
#include "tool.h"

#pragma warning(disable : 4100)

#define CLIENT_WIDTH    800
#define CLIENT_HEIGHT   600

#define ANIM_WALK       0
#define ANIM_IDLE       1

const float g_angles[13] = 

  0.0f, 
  0.0f,   1.57f,  0.785f, 3.14f, 
  0.0f,   2.355f, 0.0f,   4.71f, 
  5.495f, 0.0f,   0.0f,   3.925f 
};

/************************************************************************************************/

class cApp : public cFramework
{
private:
    cCamera         m_camera;

    cInput          m_input;
    cInputDevice    m_keyboard;
    cInputDevice    m_mouse;

    cMesh           m_terrain_mesh;
    cNodeTreeMesh   m_node_tree_mesh;

    cAutoMap        m_auto_map;

    cMesh           m_char_mesh;
    cObject         m_char_object;
    cAnimation      m_char_anim;

    cTrigger        m_trigger;
    cBarrier        m_barrier;

    cMesh           m_door_mesh;
    cAnimation      m_door_anim;

    
float           m_x_pos, m_y_pos, m_z_pos;

    ID3DXFont*      m_font;

    
/////////////////////////////////////////////////////////////////////////////////////////

public:
    
bool init()
    {
        create_display(g_hwnd, CLIENT_WIDTH, CLIENT_HEIGHT, 16, 
truetrue);
        set_perspective(D3DX_PI/4, 1.3333f, 1.0f, 10000.0f);

        create_font(&m_font, "Arial", 16, 
truefalse);

        m_input.create(g_hwnd, get_window_inst());
        m_keyboard.create_keyboard(&m_input);
        m_mouse.create_mouse(&m_input, 
true);

        m_terrain_mesh.load("..\\Data\\Level.x", "..\\Data\\");
        m_node_tree_mesh.create(&m_terrain_mesh, QUADTREE, 256, 32);

        m_auto_map.create("..\\Data\\AutoSrc.x", D3DCOLOR_RGBA(0, 0, 255, 255));
        m_auto_map.set_viewport(440, 0, 200, 200);

        
// load character data
        m_char_mesh.load("..\\Data\\Warrior.x", "..\\Data\\");
        m_char_anim.load("..\\Data\\Warrior.x", &m_char_mesh);
        m_char_anim.set_loop(
true, "Idle");
        m_char_anim.set_loop(
true, "Walk");
        m_char_object.create(&m_char_mesh);

        
// set character position
        m_x_pos = -800.0f;
        m_y_pos = 0.0f;
        m_z_pos = -800.0f;

        m_trigger.load("..\\Data\\Level.trg");
        m_barrier.load("..\\Data\\Level.bar");

        
// load door mesh and animation
        m_door_mesh.load("..\\Data\\Door.x", "..\\Data\\");
        m_door_anim.load("..\\Data\\Door.x", &m_door_mesh);
        m_door_anim.set_loop(
false, "Open");
        m_door_anim.set_loop(
false, "Close");

        
// configure door data
        for(short i = 0; i < 4; i++)
        {
            
const char* anim_name = m_barrier.get_enable_state(i+1) ? "Close" : "Open";

            m_barrier.set_mesh(i+1, &m_door_mesh);
            m_barrier.set_anim(i+1, &m_door_anim, anim_name, 0);
        }        

        
return true;
    }

    
////////////////////////////////////////////////////////////////////////////

    
bool frame()
    {
        
static DWORD timer = timeGetTime();
        
ulong elapsed = timeGetTime() - timer;
        timer = timeGetTime();  
// update timers

        m_mouse.acquire();
        m_mouse.read();
        m_keyboard.acquire();
        m_keyboard.read();

        
if(m_keyboard.get_key_state(KEY_ESC))
            
return false;

        
static float auto_height = 300.0f;  // auto map camera height

        // process automap 'zoom'

        
if(m_keyboard.get_key_state(KEY_PAGEUP))
        {
            
if(auto_height < 700.0f)
                auto_height += 4.0f;
        }

        
if(m_keyboard.get_key_state(KEY_PAGEDOWN))
        {
            
if(auto_height > 100.0f)
                auto_height -= 4.0f;
        }

        
// procces barrier changes
        if(m_keyboard.get_key_state(KEY_SPACE))
        {
            m_keyboard.set_key_state(KEY_SPACE, 
false);
            m_keyboard.m_locks[KEY_SPACE] = 
true;

            
for(short i = 0; i < 4; i++)
            {
                
if(m_barrier.get_enable_state(i+1))
                {
                    m_barrier.disable(i+1);
                    m_barrier.set_anim(i+1, &m_door_anim, "Open", timeGetTime()/20);
                }
                
else
                {
                    m_barrier.enable(i+1);
                    m_barrier.set_anim(i+1, &m_door_anim, "Close", timeGetTime()/20);
                }
            }
        }

        
// process movement

        
long dir = 0;

        
if(m_keyboard.get_key_state(KEY_UP) || m_keyboard.get_key_state(KEY_W))
            dir |= 1;

        
if(m_keyboard.get_key_state(KEY_RIGHT) || m_keyboard.get_key_state(KEY_D))
            dir |= 2;

        
if(m_keyboard.get_key_state(KEY_DOWN) || m_keyboard.get_key_state(KEY_S))
            dir |= 4;

        
if(m_keyboard.get_key_state(KEY_LEFT) || m_keyboard.get_key_state(KEY_A))
            dir |= 8;

        
float x_move = 0.0f, z_move = 0.0f;
        
static float cam_angle = 0.0f, move_angle = 0.0f;
        
static long  last_anim = -1;

        
if(dir) // press direction arrow
        {
            move_angle = g_angles[dir] + m_camera.m_y_rot;  
// key diretion + mouse direction

            
float speed = elapsed / 1000.0f * 512.0f;

            x_move = sin(move_angle) * speed;
            z_move = cos(move_angle) * speed;

            
// check for movement collisions - can not walk past anything blocking path.
            if(m_node_tree_mesh.is_ray_intersect(m_x_pos, 32.0f, m_z_pos,
                                                 m_x_pos + x_move, 32.0f, m_z_pos + z_move,
                                                 NULL))
            {
                x_move = z_move = 0.0f;
            }

            
// check for barrier collisions
            if(m_barrier.get_barrier(m_x_pos + x_move, m_y_pos, m_z_pos + z_move))
                x_move = z_move = 0.0f;

            m_x_pos += x_move;
            m_z_pos += z_move;

            
// change animation and check triggers
            if(!float_equal(x_move, 0.0f) || !float_equal(z_move, 0.0f))
            {
                
if(last_anim != ANIM_WALK)
                {
                    last_anim = ANIM_WALK;
                    m_char_object.set_anim_set(&m_char_anim, "Walk", timeGetTime()/20);
                }

                
long trigger_id = m_trigger.get_trigger(m_x_pos, m_y_pos, m_z_pos);

                
if(trigger_id != 0)
                {
                    m_auto_map.visible_section(trigger_id - 1);
                    m_trigger.disable(trigger_id);
                }
            }
        }
        
else    // no press arrow key, just set idle animation.
        {
            
if(last_anim != ANIM_IDLE)
            {
                last_anim = ANIM_IDLE;
                m_char_object.set_anim_set(&m_char_anim, "Idle", timeGetTime()/20);
            }
        }

        m_char_object.move(m_x_pos, m_y_pos, m_z_pos);
        m_char_object.rotate(0.0f, move_angle, 0.0f);

        
// position camera
        cam_angle -= ((float)m_mouse.get_x_delta() * elapsed / 800.0f);

        m_camera.point(m_x_pos + cos(cam_angle) * 300.0f, m_y_pos + 100.0f, m_z_pos + sin(cam_angle) * 300.0f,
                       m_x_pos, m_y_pos, m_z_pos);

        set_display_camera(&m_camera);

        cFrustum frustum;
        frustum.create(0.0f);

        
// render everything

        clear_display(0, 1.0f);

        
if(begin_display_scene())
        {
            enable_zbuffer();

            m_node_tree_mesh.render(&frustum, 0.0f);
            m_barrier.render(timeGetTime()/20, &frustum);

            m_char_object.update_anim(timeGetTime()/20, 
true);
            m_char_object.render();
            
            m_auto_map.render(&m_camera, m_x_pos, auto_height, m_z_pos, 1, &m_x_pos, &m_z_pos, &move_angle);

            
// draw character position
            char text[256];

            sprintf(text, "%.3f, %.3f, %.3f", 
                    m_char_object.get_x_pos(), m_char_object.get_y_pos(), m_char_object.get_z_pos());

            draw_font(m_font, text, 10, 10, 0, 0, COLOR_WHITE, DT_LEFT);

            end_display_scene();
        }

        present_display();

        
return true;
    }
};



int WINAPI WinMain(HINSTANCE inst, HINSTANCE, LPSTR cmd_line, int cmd_show)
{        
    DWORD pos_x = (get_screen_width()  - CLIENT_WIDTH) / 2;
    DWORD pos_y = (get_screen_height() - CLIENT_HEIGHT) / 4;

    build_window(inst, "AutoMapClass", "Auto Map Demo", 
                 WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
                 pos_x, pos_y, CLIENT_WIDTH, CLIENT_HEIGHT);
    
    cApp app;
    app.run();

    
return 0;
}

posted on 2007-12-10 19:43 lovedday 閱讀(231) 評論(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>
            亚洲另类视频| 国产亚洲精品激情久久| 亚洲精品网站在线播放gif| 亚洲欧美不卡| 亚洲电影欧美电影有声小说| 国产精品一区二区在线观看| 欧美婷婷久久| 国产精品午夜视频| 国产真实精品久久二三区| 国产日韩欧美在线播放不卡| 国产欧美日韩三区| 黄色一区二区在线| 99视频精品免费观看| 一本色道久久88亚洲综合88| 国产精品99久久久久久久久| 亚洲小说春色综合另类电影| 午夜精品成人在线视频| 美女图片一区二区| 91久久嫩草影院一区二区| 一区二区精品国产| 欧美一区二视频在线免费观看| 久久久久在线| 国产精品国产三级国产专播品爱网| 国产精品免费观看在线| 精品电影在线观看| 午夜精品网站| 中日韩美女免费视频网址在线观看 | 午夜免费久久久久| 麻豆成人在线播放| 国产一区二区三区自拍| 亚洲午夜一区| 亚洲美女网站| 欧美激情第六页| 亚洲欧洲日韩女同| 欧美二区不卡| 久久综合九色综合欧美狠狠| 国产亚洲欧美日韩精品| 亚洲一区欧美二区| 亚洲欧美国产日韩天堂区| 国产欧美精品在线| 欧美专区一区二区三区| 午夜伦理片一区| 国产专区一区| 欧美国产精品劲爆| 欧美mv日韩mv国产网站app| 韩国亚洲精品| 久久久噜噜噜久久人人看| 亚洲综合国产| 国产揄拍国内精品对白| 免费亚洲一区| 欧美午夜在线视频| 久久久久久久波多野高潮日日| 久久激情综合网| 一本久道久久综合婷婷鲸鱼| 一区二区三区精密机械公司 | 国产一区在线免费观看| 欧美成人自拍| 国产精品久久二区二区| 久久久久久久久久久久久女国产乱| 欧美一区二区三区啪啪| 欧美中文字幕第一页| 亚洲福利视频一区| 亚洲一区二区三区影院| 伊人精品成人久久综合软件| 亚洲高清在线播放| 韩日成人av| 午夜精品一区二区三区在线| 在线亚洲伦理| 欧美理论电影网| 亚洲精华国产欧美| 亚洲国产精品专区久久| 午夜视频在线观看一区| 亚洲一区影音先锋| 欧美日韩一区免费| 一区二区毛片| 99综合精品| 欧美日韩美女在线| 99精品国产一区二区青青牛奶| 亚洲人成网站色ww在线| 久久久久久一区| 欧美高清一区二区| 1000部国产精品成人观看| 久久久精品国产一区二区三区| 久久婷婷一区| 一区二区av在线| 欧美日韩亚洲综合| 亚洲欧美国产三级| 另类av导航| 夜夜嗨一区二区三区| 欧美日韩一区二区在线观看视频| 一区二区三区www| 久久久久久久久久久久久久一区 | 国产精品欧美日韩一区| 一本色道久久综合亚洲精品按摩| 欧美高清视频在线播放| avtt综合网| 久久免费国产| 日韩一级黄色av| 韩国一区二区三区美女美女秀| 久久xxxx| 亚洲专区在线| 亚洲三级毛片| 欧美91视频| 性色一区二区| 亚洲免费在线看| 99国产精品久久久久老师| 国产午夜精品久久| 欧美日韩国产一中文字不卡 | 欧美jizz19性欧美| 欧美永久精品| 午夜久久影院| 欧美一区二区三区久久精品茉莉花 | 欧美精品激情| 欧美成人免费网站| 美女视频黄a大片欧美| 午夜精品国产精品大乳美女| 亚洲剧情一区二区| 亚洲少妇自拍| 午夜影院日韩| 欧美一区永久视频免费观看| 亚洲男人天堂2024| 亚洲欧美日本国产有色| 亚洲女女做受ⅹxx高潮| 欧美一区深夜视频| 久久亚洲综合色| 欧美刺激性大交免费视频| 可以免费看不卡的av网站| 欧美大片免费观看在线观看网站推荐| 老司机免费视频一区二区| 久久中文久久字幕| 久久一二三四| 9l视频自拍蝌蚪9l视频成人| 亚洲精品一二区| 久久九九99| 欧美日韩精品在线观看| 国产精品外国| 日韩亚洲欧美一区二区三区| 性欧美大战久久久久久久免费观看| 久久久99精品免费观看不卡| 亚洲国内精品| 欧美一区二区日韩一区二区| 久久精品夜色噜噜亚洲a∨ | 亚洲午夜羞羞片| 久久伊人亚洲| 国产一区久久久| 亚洲欧美日韩在线观看a三区 | 午夜视频在线观看一区二区三区| 欧美一区二区三区免费视频| 亚洲国内精品在线| 欧美gay视频激情| 亚洲国产成人高清精品| 久久蜜桃资源一区二区老牛 | 99精品国产在热久久下载| 久久黄金**| 狠狠网亚洲精品| 午夜精品久久久久久久久久久久久| 亚洲黄网站黄| 欧美精品18+| 一本色道久久综合亚洲精品高清| 欧美成人免费在线| 牛牛国产精品| 亚洲香蕉成视频在线观看| 亚洲欧洲精品一区二区三区| 欧美v亚洲v综合ⅴ国产v| 亚洲成人影音| 久久免费高清视频| 翔田千里一区二区| 亚洲欧美久久久| 亚洲电影免费观看高清完整版| 亚洲午夜精品久久久久久app| 欧美成人激情在线| 亚洲免费成人| 亚洲综合不卡| 在线观看91精品国产麻豆| 欧美国产日本高清在线| 欧美精品在线看| 久久久久久一区二区| 欧美久久久久久| 亚洲欧美国产日韩中文字幕| 欧美亚洲免费电影| 亚洲国产精品久久久久婷婷884 | 亚洲第一区在线| 欧美二区乱c少妇| 亚洲一区图片| 欧美激情精品久久久久久大尺度| 亚洲最新在线视频| 久久激情五月婷婷| 欧美日韩综合在线免费观看| 一区二区欧美亚洲| 久久久亚洲一区| 久久美女艺术照精彩视频福利播放| 久久久中精品2020中文| 久久精品一区二区国产| 欧美日韩精品是欧美日韩精品| 欧美一区三区三区高中清蜜桃| 欧美剧在线观看| 亚洲精品一区二区三区福利| 影视先锋久久| 老司机一区二区三区| 久久久www|