static void g_on_key(void *c,int k,int md) { if (!gg_on_key || gg_on_key(c,k,md)) { XEngine *xeng = c; if (xeng->w && xeng->HandleKey) xeng->HandleKey(&xeng->e, k, md); } }
static void g_on_focus(void *c,int in) { if (!gg_on_focus || gg_on_focus(c,in)) { XEngine *xeng = c; if (xeng->w && xeng->HandleMotion && in==2) xeng->HandleMotion(&xeng->e, 0, -1, -1); } }
static void g_on_motion(void *c,int md,int x,int y) { if (!gg_on_motion || gg_on_motion(c,md,x,y)) { XEngine *xeng = c; if (!xeng->w) return; if (xeng->HandleMotion) xeng->HandleMotion(&xeng->e, md, x, y); } }
static void g_on_click(void *c,int b,int md,int x,int y, unsigned long ms) { if (!gg_on_click || gg_on_click(c,b,md,x,y,ms)) { XEngine *xeng = c; if (!xeng->w) return; if (xeng->HandleClick) xeng->HandleClick(&xeng->e, b, md, x, y, ms); } }
static void g_on_key(void *c,int k,int md) { XEngine *xeng = c; if (xeng->e.on==&g_x_on) { if (xeng->w && xeng->HandleKey) xeng->HandleKey(&xeng->e, k, md); } else if (xeng->e.on && xeng->e.on->key) { xeng->e.on->key(c, k , md); } }
static void g_on_focus(void *c,int in) { XEngine *xeng = c; if (in == 2) gxCurrentEngine = NULL; /* current window has lost mouse focus */ if (xeng->e.on==&g_x_on) { if (xeng->w && xeng->HandleMotion && in==2) xeng->HandleMotion(&xeng->e, 0, -1, -1); } else if (xeng->e.on && xeng->e.on->focus) { xeng->e.on->focus(c, in); } }
static void g_on_click(void *c,int b,int md,int x,int y, unsigned long ms) { XEngine *xeng = c; if (xeng->e.on==&g_x_on) { if (!xeng->w) return; if (xeng->HandleClick) xeng->HandleClick(&xeng->e, b, md, x, y, ms); } else if (xeng->e.on && xeng->e.on->click) { xeng->e.on->click(c, b, md, x, y, ms); } }
static void g_on_motion(void *c,int md,int x,int y) { XEngine *xeng = c; gxCurrentEngine = (Engine *)c; if (xeng->e.on==&g_x_on) { if (!xeng->w) return; if (xeng->HandleMotion) xeng->HandleMotion(&xeng->e, md, x, y); } else if (xeng->e.on && xeng->e.on->motion) { xeng->e.on->motion(c, md, x, y); } }
static void g_on_expose(void *c, int *xy) { if (!gg_on_expose || gg_on_expose(c,xy)) { XEngine *xeng = c; if (c && c == waiting_for) { waiting_for = 0; if (wait_callback) wait_callback(); wait_callback = 0; } if (!xeng->w) return; xeng->mapped = 1; if (xeng->HandleExpose) /* the alternate handler should probably call GxExpose */ xeng->HandleExpose(&xeng->e, xeng->e.drawing, xy); else GxExpose(&xeng->e, xeng->e.drawing, xy); } }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { XEngine *engine = XEngine::GetInstance(); if( engine->Init(hInstance) == FALSE ) { return -1; } Rect rec(Position(-10000.0, 10000.0), Position(10000.0, -10000.0)); TestScene *scene = new TestScene; scene->SetTime(0); //Scene *scene = new Scene; scene->Init(rec); scene->camera->MoveForwardBy(-40); scene->camera->MoveUpBy(18); scene->camera->Pitch(-XM_PI / 10); Material material; material.ambient = XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f); material.diffuse = XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f); material.specular = XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f); material.power = 9.0f; //material.texture = SRVBatch::GetInstance()->LoadSRV("media/", "cup.jpg"); Particle *fire = new Particle; fire->Init("media/","fire.png"); fire->SetPosition(0, 0, 10); //scene->AddRenderableThing(*fire); SkyBox *sky = new SkyBox; //sky->Init("textures/", "skymap.dds"); sky->Init("textures/", "Above_The_Sea.dds"); //sky->Init("textures/", "desert_skymap.dds"); scene->AddSky(sky); Terrain *terrain = new Terrain; //terrain->Init("terrain/testHight.bmp", "terrain/", "dirt01.dds"); terrain->Init("terrain/heightmap01.bmp", "terrain/", "grass.jpg"); scene->AddTerrain(terrain); Wall *wall = new Wall; wall->Init(30, 30, 0.3); wall->Pitch(XM_PI / 2); wall->SetPosition(0, -3, 0); //scene->AddRenderableThing(*wall); //¿É¼ûÐÔ²âÊÔ Wall *wall0 = new Wall; wall0->Init(30, 30, 0.3); wall0->Pitch(XM_PI / 2); wall0->SetPosition(1000, -3, 0); //scene->AddRenderableThing(*wall0); Obj *obj = new Obj; obj->CreateBox(1, 3, 2, material); obj->SetPosition(5, 1, 12); obj->Yaw(XM_PI / 3); obj->Roll(XM_PI / 3); obj->SetScale(1.3); //scene->AddRenderableThing(*obj); Cube *cube = new Cube; cube->Init(2); cube->Pitch(XM_PI / 3); cube->Roll(XM_PI / 3); cube->SetMaterial(material); //scene->AddRenderableThing(*cube); Ball *ball = new Ball; ball->Init(1); ball->SetPosition(0, 0, 6); Obj *objInWall = new Obj; objInWall->CreateBox(1, 1, 1, material); objInWall->SetPosition(0, 1, 0); ball->AddChild(objInWall); //scene->AddRenderableThing(*ball); Ship *ship = new Ship; //ship->Init(); //ship->SetPosition(-10, 0, 0); //scene->AddRenderableThing(*ship); Model *test = new Model; test->LoadModel("media/", "chair.obj"); test->SetScale(1.7); test->SetPosition(-15, 0, 0); test->Pitch(-1.2); test->Yaw(-1.5); //scene->AddRenderableThing(*test); //SmileBoy *smileBoy= new SmileBoy; //smileBoy->Init(); //smileBoy->SetHandleInput(FALSE); //scene->AddRenderableThing(*smileBoy); Female *female = new Female; female->Init(); //female->SetPosition(-7, 0,0); female->SetHandleInput(TRUE); scene->AddRenderableThing(*female); RenderSystem::GetInstance()->SetShadowOpen(true); engine->LoadScene(scene); { Light *light = new Light; light->type = 0; light->position = XMFLOAT4(0.0f, 5.0f, -5.0f, 1.0f); XMStoreFloat4(&light->direction, XMVector4Normalize(XMVectorSet(1.0f, -1.0f, 0.0f, 0.0f))); light->ambient = XMFLOAT4(0.4f, 0.2f, 0.3f, 1.0f); light->diffuse = XMFLOAT4(0.3f, 0.4f, 0.5f, 1.0f); light->specular = XMFLOAT4(0.5f, 0.3f, 0.2f, 1.0f); light->attenuation0 = 0.0f; light->attenuation1 = 0.0f; light->attenuation2 = 0.0f; light->alpha = 0.0f; light->beta = 0.0f; light->falloff = 0.0f; scene->AddLight(light); } //******************************************* engine->Run(); return 0; }