You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
(4) |
Jun
(5) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(33) |
Sep
(34) |
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <mag...@us...> - 2011-02-24 14:18:49
|
Revision: 134 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=134&view=rev Author: magarcias Date: 2011-02-24 14:18:43 +0000 (Thu, 24 Feb 2011) Log Message: ----------- Missing resources, fixed shader paths Modified Paths: -------------- branches/demos/src/cameras/camerasapp.cc branches/demos/src/demos/runtime.cc branches/demos/src/snakes/snakesapp.cc branches/demos/src/transform/transformapp.cc trunk/zombie/data/demos/scripts/startup.lua Added Paths: ----------- trunk/zombie/data/demos/textures/ trunk/zombie/data/demos/textures/brick.bmp trunk/zombie/data/demos/textures/sidewalk.dds Modified: branches/demos/src/cameras/camerasapp.cc =================================================================== --- branches/demos/src/cameras/camerasapp.cc 2010-09-23 14:26:54 UTC (rev 133) +++ branches/demos/src/cameras/camerasapp.cc 2011-02-24 14:18:43 UTC (rev 134) @@ -55,7 +55,7 @@ return false; this->refShader = gfxServer->NewShader("color"); - if (!this->LoadResource(this->refShader, "proj:shaders/color.fx")) + if (!this->LoadResource(this->refShader, "proj:shaders/diffuse.fx")) return false; return true; @@ -65,11 +65,11 @@ void CamerasApp::Close() { - this->refMesh->Release(); - this->refFloorMesh->Release(); - this->refTexture->Release(); - this->refFloorTexture->Release(); - this->refShader->Release(); + N_REF_RELEASE(this->refMesh); + N_REF_RELEASE(this->refFloorMesh); + N_REF_RELEASE(this->refTexture); + N_REF_RELEASE(this->refFloorTexture); + N_REF_RELEASE(this->refShader); } //------------------------------------------------------------------------------ @@ -235,7 +235,7 @@ this->BeginDraw( this->refShader, this->refMesh ); this->BeginPass( this->refShader, 0 ); this->refShader->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - this->refShader->SetTexture( nShaderState::diffMap, this->refTexture ); + this->refShader->SetTexture( nShaderState::DiffMap0, this->refTexture ); vector3 vecScale( 1.f, 1.f, 1.f ); vector3 vecPosition( 0.f, 1.f, 0.f ); vecPosition += this->vecAt; //for third person camera @@ -247,7 +247,7 @@ this->BeginDraw( this->refShader, this->refFloorMesh ); this->BeginPass( this->refShader, 0 ); this->refShader->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - this->refShader->SetTexture( nShaderState::diffMap, this->refFloorTexture ); + this->refShader->SetTexture( nShaderState::DiffMap0, this->refFloorTexture ); this->Draw( vector3( -5.f, 0.f, -5.f ), vector3( 10.f, 0.f, 10.f ) ); this->EndPass( this->refShader ); this->EndDraw( this->refShader ); Modified: branches/demos/src/demos/runtime.cc =================================================================== --- branches/demos/src/demos/runtime.cc 2010-09-23 14:26:54 UTC (rev 133) +++ branches/demos/src/demos/runtime.cc 2011-02-24 14:18:43 UTC (rev 134) @@ -6,14 +6,14 @@ //------------------------------------------------------------------------------ #include "kernel/nkernelserver.h" -//#include "demos/demoapp.h" -//#include "snakes/snakesapp.h" -//#include "cameras/camerasapp.h" -//#include "transform/transformapp.h" -//#include "shaders/shadersapp.h" -//#include "ambient/ambientapp.h" -//#include "models/modelsapp.h" -//#include "shootem/shootemapp.h" +#include "demos/demoapp.h" +#include "snakes/snakesapp.h" +#include "cameras/camerasapp.h" +#include "transform/transformapp.h" +#include "shaders/shadersapp.h" +#include "ambient/ambientapp.h" +#include "models/modelsapp.h" +#include "shootem/shootemapp.h" #include "lights/lightsapp.h" #ifdef __WIN32__ @@ -116,7 +116,7 @@ } DemoApp* app(0); - //app = n_new(DemoApp); + app = n_new(DemoApp); //app = n_new(SnakesApp); //app = n_new(CamerasApp); //app = n_new(TransformApp); @@ -124,7 +124,7 @@ //app = n_new(AmbientApp); //app = n_new(ModelsApp); //app = n_new(ShootemApp); - app = n_new(LightsApp); + //app = n_new(LightsApp); pGfxServer->SetDisplayMode(displayMode); nCamera2 camera(n_deg2rad(60), float(displayMode.GetHeight())/float(displayMode.GetWidth()),1.f,100.f); Modified: branches/demos/src/snakes/snakesapp.cc =================================================================== --- branches/demos/src/snakes/snakesapp.cc 2010-09-23 14:26:54 UTC (rev 133) +++ branches/demos/src/snakes/snakesapp.cc 2011-02-24 14:18:43 UTC (rev 134) @@ -33,7 +33,7 @@ //board shader- solid unlit this->refBoardShader = pGfxServer->NewShader( "solid" ); - if ( !this->LoadResource( this->refBoardShader, "proj:shaders/color.fx" ) ) + if ( !this->LoadResource( this->refBoardShader, "proj:shaders/diffuse.fx" ) ) return false; //board texture- simple tiled floor @@ -97,6 +97,12 @@ void SnakesApp::Close() { + this->refBoardMesh->Release(); + this->refBoardShader->Release(); + this->refBoardTexture->Release(); + this->refSnakeMesh->Release(); + this->refSnakeShader->Release(); + for ( int index = 0; index < this->snakes.Size(); ++index ) { n_delete( this->snakes.At(index).pSnake ); @@ -265,7 +271,7 @@ vector3 vPosition( 10.f * iCol, 0.f, 10.f * iRow ); //set material values and textures //this->refBoardShader->SetInt( nShaderState::FillMode, nShaderState::Wireframe ); - this->refBoardShader->SetTexture( nShaderState::diffMap, this->refBoardTexture ); + this->refBoardShader->SetTexture( nShaderState::DiffMap0, this->refBoardTexture ); this->Draw( vPosition, vScale ); } } Modified: branches/demos/src/transform/transformapp.cc =================================================================== --- branches/demos/src/transform/transformapp.cc 2010-09-23 14:26:54 UTC (rev 133) +++ branches/demos/src/transform/transformapp.cc 2011-02-24 14:18:43 UTC (rev 134) @@ -54,8 +54,8 @@ if (!this->LoadResource(this->refFloorTexture, "proj:textures/sidewalk.dds")) return false; - this->refShader = gfxServer->NewShader("color"); - if (!this->LoadResource(this->refShader, "proj:shaders/color.fx")) + this->refShader = gfxServer->NewShader("diffuse"); + if (!this->LoadResource(this->refShader, "proj:shaders/diffuse.fx")) return false; nMeshGroup& group = this->refMesh->Group(0); @@ -197,7 +197,7 @@ this->BeginDraw( this->refShader, this->refMesh ); this->BeginPass( this->refShader, 0 ); this->refShader->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - this->refShader->SetTexture( nShaderState::diffMap, this->refTexture ); + this->refShader->SetTexture( nShaderState::DiffMap0, this->refTexture ); this->Draw( matWorld ); this->EndPass( this->refShader ); this->EndDraw( this->refShader ); @@ -233,7 +233,7 @@ this->BeginDraw( this->refShader, this->refFloorMesh ); this->BeginPass( this->refShader, 0 ); this->refShader->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - this->refShader->SetTexture( nShaderState::diffMap, this->refFloorTexture ); + this->refShader->SetTexture( nShaderState::DiffMap0, this->refFloorTexture ); this->Draw( vector3( -5.f, 0.f, -5.f ), vector3( 10.f, 0.f, 10.f ) ); this->EndPass( this->refShader ); this->EndDraw( this->refShader ); Modified: trunk/zombie/data/demos/scripts/startup.lua =================================================================== --- trunk/zombie/data/demos/scripts/startup.lua 2010-09-23 14:26:54 UTC (rev 133) +++ trunk/zombie/data/demos/scripts/startup.lua 2011-02-24 14:18:43 UTC (rev 134) @@ -22,7 +22,7 @@ proj = f:manglepath('proj:') home = f:manglepath('home:') - f:setassign('wc', 'home:../scourge') + f:setassign('wc', 'proj:') f:setassign('wctextures', 'wc:export/textures') f:setassign('shaders', home .. '/data/shaders/2.0/') Added: trunk/zombie/data/demos/textures/brick.bmp =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/textures/brick.bmp ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/textures/sidewalk.dds =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/textures/sidewalk.dds ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-23 14:27:02
|
Revision: 133 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=133&view=rev Author: magarcias Date: 2010-09-23 14:26:54 +0000 (Thu, 23 Sep 2010) Log Message: ----------- Lighting demo Modified Paths: -------------- branches/demos/inc/demos/_templateapp.h branches/demos/inc/demos/demoapp.h branches/demos/inc/lights/lightsapp.h branches/demos/src/demos/_templateapp.cc branches/demos/src/demos/demoapp.cc branches/demos/src/lights/lightsapp.cc branches/demos/src/shootem/nshootemstate.cc Modified: branches/demos/inc/demos/_templateapp.h =================================================================== --- branches/demos/inc/demos/_templateapp.h 2010-09-22 10:10:31 UTC (rev 132) +++ branches/demos/inc/demos/_templateapp.h 2010-09-23 14:26:54 UTC (rev 133) @@ -29,7 +29,26 @@ nRef<nMesh2> refMesh; nRef<nTexture2> refTexture; - nRef<nShader2> refShader; + + nRef<nMesh2> refMeshFloor; + nRef<nTexture2> refTextureFloor; + + nRef<nShader2> refShaderColor; + nRef<nShader2> refShaderDiffuse; + + bool bWireframe; + + vector3 vecEye;//eye position + vector3 vecRot;//euler rotation + + matrix44 matView; + matrix44 matWorld; + + vector3 vecPosition; + vector3 vecRotation; + vector3 vecScale; + + vector3 vecLightPos; }; #endif //_TEMPLATEAPP_H Modified: branches/demos/inc/demos/demoapp.h =================================================================== --- branches/demos/inc/demos/demoapp.h 2010-09-22 10:10:31 UTC (rev 132) +++ branches/demos/inc/demos/demoapp.h 2010-09-23 14:26:54 UTC (rev 133) @@ -44,7 +44,7 @@ bool LoadResource( nResource* pResource, const nString& strFilename ); //draw helpers - int BeginDraw( nShader2* pShader, nMesh2* pMesh ); + int BeginDraw( nShader2* pShader, nMesh2* pMesh, const char* technique=0 ); void BeginPass( nShader2* pShader, int passIndex ); void Draw( const vector3& vPosition, const vector3& vScale ); void Draw( const matrix44& matWorld ); Modified: branches/demos/inc/lights/lightsapp.h =================================================================== --- branches/demos/inc/lights/lightsapp.h 2010-09-22 10:10:31 UTC (rev 132) +++ branches/demos/inc/lights/lightsapp.h 2010-09-23 14:26:54 UTC (rev 133) @@ -3,6 +3,7 @@ #include "kernel/nref.h" #include "util/narray.h" +#include "gfx2/ngfxserver2.h" #include "demos/demoapp.h" @@ -27,15 +28,31 @@ private: + //resources nRef<nMesh2> refMesh; - nRef<nTexture2> refTexture; + nRef<nTexture2> refDiffMap; + nRef<nTexture2> refBumpMap; + nRef<nTexture2> refCubeMap; nRef<nMesh2> refMeshFloor; nRef<nTexture2> refTextureFloor; + nRef<nMesh2> refMeshSphere; + nRef<nShader2> refShaderColor; nRef<nShader2> refShaderDiffuse; + struct Material + { + nRef<nShader2> refShader; + nShaderParams shaderParams; + nString technique; + }; + + nArray<Material> materials; + int curMaterialIndex; + + //common stuff bool bWireframe; vector3 vecEye;//eye position @@ -49,6 +66,8 @@ vector3 vecScale; vector3 vecLightPos; + vector4 vecLightAmbient; + vector4 vecLightDiffuse; }; -#endif //_TEMPLATEAPP_H +#endif //LIGHTSAPP_H Modified: branches/demos/src/demos/_templateapp.cc =================================================================== --- branches/demos/src/demos/_templateapp.cc 2010-09-22 10:10:31 UTC (rev 132) +++ branches/demos/src/demos/_templateapp.cc 2010-09-23 14:26:54 UTC (rev 133) @@ -1,4 +1,4 @@ -#include "demos/_templatapp.h" +#include "demos/_templateapp.h" #include "kernel/nfileserver2.h" #include "kernel/ntimeserver.h" @@ -15,7 +15,20 @@ */ void _TemplateApp::Init() { - //empty + this->bWireframe = false; + + //model + this->vecPosition.set( 0.f, 1.f, 0.f ); + this->vecRotation.set( 0.f, 0.f, 0.f ); + this->vecScale.set( 1.f, 1.f, 1.f ); + + //camera + this->vecEye.set(0,5,10); + this->vecRot.set(n_deg2rad(-30),0,0); //looking down 30 degrees + + //light + this->vecLightPos.set( 0.f ,5.f ,-10.f ); + } //------------------------------------------------------------------------------ @@ -24,7 +37,18 @@ bool _TemplateApp::Open() { nGfxServer2* gfxServer = nGfxServer2::Instance(); - + + N_REF_LOAD_MESH(this->refMesh, "torus", "proj:meshes/torus.n3d2"); + N_REF_LOAD_TEXTURE(this->refTexture, "brick", "proj:textures/brick.bmp"); + + N_REF_LOAD_MESH(this->refMeshFloor, "plane", "proj:meshes/plane_xz.n3d2"); + N_REF_LOAD_TEXTURE(this->refTextureFloor, "sidewalk", "proj:textures/sidewalk.dds"); + + N_REF_LOAD_SHADER(this->refShaderColor, "color", "proj:shaders/color.fx"); + N_REF_LOAD_SHADER(this->refShaderDiffuse, "diffuse", "proj:shaders/diffuse.fx"); + + //shaders for lighting + return true; } @@ -32,14 +56,70 @@ void _TemplateApp::Close() { - //empty + N_REF_RELEASE(this->refMesh) + N_REF_RELEASE(this->refTexture) + + N_REF_RELEASE(this->refMeshFloor) + N_REF_RELEASE(this->refTextureFloor) + + N_REF_RELEASE(this->refShaderColor) + N_REF_RELEASE(this->refShaderDiffuse) } //------------------------------------------------------------------------------ -void _TemplateApp::Tick( float /*fTimeElapsed*/ ) +void _TemplateApp::Tick( float fTimeElapsed ) { nInputServer* inputServer = nInputServer::Instance(); + +/// --- copied from shadersapp --- + if (inputServer->GetButton("wireframe")) + this->bWireframe = !this->bWireframe; + + float mouse_x = (inputServer->GetSlider("slider_left") - inputServer->GetSlider("slider_right")); + float mouse_y = (inputServer->GetSlider("slider_up") - inputServer->GetSlider("slider_down")); + + float angleSpace = n_deg2rad(360.f) * 10.f * fTimeElapsed;//=angleSpeed + float moveSpace = 10.f * fTimeElapsed;//=cameraSpeed + + //camera look around + if (inputServer->GetButton("right_pressed")) + { + this->vecRot.y += mouse_x * angleSpace; + this->vecRot.x += mouse_y * angleSpace; + } + + //camera move + vector3 vecMove; + if (inputServer->GetButton("forward")) + { + vecMove.z -= moveSpace; + } + if (inputServer->GetButton("backward")) + { + vecMove.z += moveSpace; + } + if (inputServer->GetButton("strafe_left")) + { + vecMove.x -= moveSpace; + } + if (inputServer->GetButton("strafe_right")) + { + vecMove.x += moveSpace; + } + + //update camera position + matrix44 mat; + mat.rotate_x( this->vecRot.x ); + mat.rotate_y( this->vecRot.y ); + mat.translate( this->vecEye ); + + //transform with vectors: + this->vecEye = mat * vecMove; + + if (inputServer->GetButton("light")) + this->vecLightPos.set( this->vecEye ); +/// --- copied from shadersapp --- } //------------------------------------------------------------------------------ @@ -47,4 +127,30 @@ void _TemplateApp::Render() { nGfxServer2* gfxServer = nGfxServer2::Instance(); + gfxServer->Clear( nGfxServer2::AllBuffers, 0.f, 0.f, 1.f, 1.f, 1.f, 0 ); + + //view transform + this->matView.ident(); + this->matView.rotate_x( this->vecRot.x );//pitch + this->matView.rotate_y( this->vecRot.y );//yaw + this->matView.translate( this->vecEye ); + + this->matView.invert_simple(); + gfxServer->SetTransform( nGfxServer2::View, this->matView ); + + //projection transform + nCamera2 cam; + gfxServer->SetCamera( cam ); + + //draw the floor + this->BeginDraw( this->refShaderDiffuse, this->refMeshFloor ); + this->BeginPass( this->refShaderDiffuse, 0 ); + this->refShaderDiffuse->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + this->refShaderDiffuse->SetTexture( nShaderState::DiffMap0, this->refTextureFloor ); + this->refShaderDiffuse->SetVector4( nShaderState::MatDiffuse, vector4(1.f,1.f,1.f,1.f) ); + this->Draw( vector3( -5.f, 0.f, -5.f ), vector3( 10.f, 0.f, 10.f ) ); + this->EndPass( this->refShaderDiffuse ); + this->EndDraw( this->refShaderDiffuse ); + + } Modified: branches/demos/src/demos/demoapp.cc =================================================================== --- branches/demos/src/demos/demoapp.cc 2010-09-22 10:10:31 UTC (rev 132) +++ branches/demos/src/demos/demoapp.cc 2010-09-23 14:26:54 UTC (rev 133) @@ -52,17 +52,24 @@ bool DemoApp::LoadResource( nResource* pResource, const nString& strFilename ) { - pResource->SetFilename( strFilename ); - return pResource->Load(); + if (!pResource->IsLoaded()) + { + pResource->SetFilename( strFilename ); + return pResource->Load(); + } + return true; } //------------------------------------------------------------------------------ int -DemoApp::BeginDraw(nShader2 *pShader, nMesh2 *pMesh) +DemoApp::BeginDraw(nShader2 *pShader, nMesh2 *pMesh, const char* technique) { //setup shader nGfxServer2::Instance()->SetShader( pShader ); + if (technique) + pShader->SetTechnique(technique); + int nPasses = pShader->Begin( false ); //draw one sphere mesh for every joint Modified: branches/demos/src/lights/lightsapp.cc =================================================================== --- branches/demos/src/lights/lightsapp.cc 2010-09-22 10:10:31 UTC (rev 132) +++ branches/demos/src/lights/lightsapp.cc 2010-09-23 14:26:54 UTC (rev 133) @@ -28,7 +28,8 @@ //light this->vecLightPos.set( 0.f ,5.f ,-10.f ); - + this->vecLightDiffuse.set( 1.f ,1.f, 1.f, 1.f ); + this->vecLightAmbient.set(.3f, .3f, .3f, 1.f); } //------------------------------------------------------------------------------ @@ -39,7 +40,9 @@ nGfxServer2* gfxServer = nGfxServer2::Instance(); N_REF_LOAD_MESH(this->refMesh, "torus", "proj:meshes/torus.n3d2"); - N_REF_LOAD_TEXTURE(this->refTexture, "brick", "proj:textures/brick.bmp"); + N_REF_LOAD_TEXTURE(this->refDiffMap, "brick", "proj:textures/brick.bmp"); + N_REF_LOAD_TEXTURE(this->refBumpMap, "bump", "proj:textures/bump.tga"); + N_REF_LOAD_TEXTURE(this->refCubeMap, "grace_cube", "proj:textures/grace_cube.dds"); N_REF_LOAD_MESH(this->refMeshFloor, "plane", "proj:meshes/plane_xz.n3d2"); N_REF_LOAD_TEXTURE(this->refTextureFloor, "sidewalk", "proj:textures/sidewalk.dds"); @@ -47,8 +50,37 @@ N_REF_LOAD_SHADER(this->refShaderColor, "color", "proj:shaders/color.fx"); N_REF_LOAD_SHADER(this->refShaderDiffuse, "diffuse", "proj:shaders/diffuse.fx"); + N_REF_LOAD_MESH(this->refMeshSphere, "sphere", "proj:meshes/sphere.n3d2"); + //shaders for lighting - + Material* material(0); + + material = &this->materials.PushBack( Material() ); + material->shaderParams.SetArg( nShaderState::DiffMap0, nShaderArg(this->refDiffMap) );//diffuse + material->shaderParams.SetArg( nShaderState::MatDiffuse, vector4(1.f, .3f, 0.f, 1.f) );//color + material->shaderParams.SetArg( nShaderState::MatSpecular, vector4(.7f, .6f, 0.4f, 1.f) );//gloss + material->technique.Set("Phong"); + N_REF_LOAD_SHADER(material->refShader, "phong_pixel", "proj:shaders/phong_pixel.fx"); + + material = &this->materials.PushBack( Material() ); + material->shaderParams.SetArg( nShaderState::DiffMap0, nShaderArg(this->refDiffMap) );//diffuse + material->shaderParams.SetArg( nShaderState::BumpMap0, nShaderArg(this->refBumpMap) );//normal + material->shaderParams.SetArg( nShaderState::MatDiffuse, vector4(1.f, .3f, 0.f, 1.f) );//color + material->shaderParams.SetArg( nShaderState::MatSpecular, vector4(.7f, .6f, 0.4f, 1.f) );//gloss + material->technique.Set("Phong_Bump"); + N_REF_LOAD_SHADER(material->refShader, "phong_pixel", "proj:shaders/phong_pixel.fx"); + + material = &this->materials.PushBack( Material() ); + material->shaderParams.SetArg( nShaderState::DiffMap0, nShaderArg(this->refDiffMap) );//diffuse + material->shaderParams.SetArg( nShaderState::BumpMap0, nShaderArg(this->refBumpMap) );//normal + material->shaderParams.SetArg( nShaderState::CubeMap0, nShaderArg(this->refCubeMap) );//reflection + material->shaderParams.SetArg( nShaderState::MatDiffuse, vector4(1.f, .3f, 0.f, 1.f) );//color + material->shaderParams.SetArg( nShaderState::MatSpecular, vector4(.7f, .6f, 0.4f, 1.f) );//gloss + material->technique.Set("Phong_Bump_Reflect"); + N_REF_LOAD_SHADER(material->refShader, "phong_pixel", "proj:shaders/phong_pixel.fx"); + + this->curMaterialIndex = 0; + return true; } @@ -57,13 +89,22 @@ void LightsApp::Close() { N_REF_RELEASE(this->refMesh) - N_REF_RELEASE(this->refTexture) + N_REF_RELEASE(this->refDiffMap) + N_REF_RELEASE(this->refBumpMap) + N_REF_RELEASE(this->refCubeMap) N_REF_RELEASE(this->refMeshFloor) N_REF_RELEASE(this->refTextureFloor) N_REF_RELEASE(this->refShaderColor) N_REF_RELEASE(this->refShaderDiffuse) + + N_REF_RELEASE(this->refMeshSphere) + + for (int index=0; index<this->materials.Size(); index++) + N_REF_RELEASE(this->materials[index].refShader); + + this->materials.Clear(); } //------------------------------------------------------------------------------ @@ -119,6 +160,9 @@ if (inputServer->GetButton("light")) this->vecLightPos.set( this->vecEye ); + + if (inputServer->GetButton("toggle")) + this->curMaterialIndex = (this->curMaterialIndex + 1) % this->materials.Size(); /// --- copied from shadersapp --- } @@ -152,5 +196,43 @@ this->EndPass( this->refShaderDiffuse ); this->EndDraw( this->refShaderDiffuse ); + //draw the scene + this->matWorld.ident(); + this->matWorld.scale( this->vecScale ); + this->matWorld.rotate_x( this->vecRotation.x ); + this->matWorld.rotate_y( this->vecRotation.y ); + this->matWorld.rotate_z( this->vecRotation.z ); + this->matWorld.translate( this->vecPosition ); + matrix44 matModel(matWorld); //Model matrix = inverse world matrix (from World->Model) + matModel.invert_simple(); + + Material& material = this->materials[this->curMaterialIndex]; + this->BeginDraw( material.refShader, this->refMesh, material.technique.Get() ); + this->BeginPass( material.refShader, 0 ); + material.shaderParams.SetArg( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + //light parameters + material.shaderParams.SetArg( nShaderState::LightPos, this->vecLightPos ); + vector3 vecModelLightPos = matModel * vecLightPos; + material.shaderParams.SetArg( nShaderState::ModelLightPos, vecModelLightPos ); + material.shaderParams.SetArg( nShaderState::LightDiffuse, vecLightDiffuse ); + material.shaderParams.SetArg( nShaderState::LightAmbient, vecLightAmbient ); + material.refShader->SetParams( material.shaderParams ); + this->Draw( matWorld ); + this->EndPass( material.refShader ); + this->EndDraw( material.refShader ); + + //draw the lights + this->BeginDraw( this->refShaderColor, this->refMeshSphere ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, this->vecLightDiffuse ); + this->Draw( this->vecLightPos, vector3( .5f, .5f, .5f ) ); + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); + + //draw text + float rowheight = 32.f / gfxServer->GetDisplayMode().GetHeight(); + nString str; + str.Format("%s,%s", material.refShader->GetName(), material.technique.Get() ); + gfxServer->Text( str.Get(), vector4(1.f,1.f,0,1), -1.f, 1.f - rowheight ); } Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-22 10:10:31 UTC (rev 132) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-23 14:26:54 UTC (rev 133) @@ -33,7 +33,7 @@ this->cameraAngles.set(n_deg2rad(-15), 0.f); this->fProjectileMaxTime = 2.f; - this->fProjectileSpeed = 10.f; + this->fProjectileSpeed = 15.f; this->fEnemySpawnDistance = 100.f;//too much! this->fEnemySpeed = 3.f; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-22 10:10:37
|
Revision: 132 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=132&view=rev Author: magarcias Date: 2010-09-22 10:10:31 +0000 (Wed, 22 Sep 2010) Log Message: ----------- Lighting Demo Modified Paths: -------------- branches/demos/bldfiles/demos.bld branches/demos/src/demos/runtime.cc Added Paths: ----------- branches/demos/bldfiles/lighting.bld branches/demos/inc/lights/ branches/demos/inc/lights/lightsapp.h branches/demos/src/lights/ branches/demos/src/lights/lightsapp.cc Modified: branches/demos/bldfiles/demos.bld =================================================================== --- branches/demos/bldfiles/demos.bld 2010-09-17 12:00:27 UTC (rev 131) +++ branches/demos/bldfiles/demos.bld 2010-09-22 10:10:31 UTC (rev 132) @@ -38,6 +38,7 @@ ambientapp modelsapp sceneapp + lightsapp shootemapp } settargetdeps { Added: branches/demos/bldfiles/lighting.bld =================================================================== --- branches/demos/bldfiles/lighting.bld (rev 0) +++ branches/demos/bldfiles/lighting.bld 2010-09-22 10:10:31 UTC (rev 132) @@ -0,0 +1,16 @@ +#=============================================================================== +# Lighting.bld +#=============================================================================== + +#=============================================================================== +# Lighting modules +#=============================================================================== +beginmodule lightsapp + setdir lights + setfiles { + lightsapp + } + setheaders{ + lightsapp + } +endmodule Added: branches/demos/inc/lights/lightsapp.h =================================================================== --- branches/demos/inc/lights/lightsapp.h (rev 0) +++ branches/demos/inc/lights/lightsapp.h 2010-09-22 10:10:31 UTC (rev 132) @@ -0,0 +1,54 @@ +#ifndef LIGHTSAPP_H +#define LIGHTSAPP_H + +#include "kernel/nref.h" +#include "util/narray.h" + +#include "demos/demoapp.h" + +//------------------------------------------------------------------------------ + +class nMesh2; +class nTexture2; +class nShader2; +class nResource; + +class LightsApp : public DemoApp +{ +public: + + virtual void Init(); + + virtual bool Open(); + virtual void Close(); + virtual void Tick( float ); + + virtual void Render(); + +private: + + nRef<nMesh2> refMesh; + nRef<nTexture2> refTexture; + + nRef<nMesh2> refMeshFloor; + nRef<nTexture2> refTextureFloor; + + nRef<nShader2> refShaderColor; + nRef<nShader2> refShaderDiffuse; + + bool bWireframe; + + vector3 vecEye;//eye position + vector3 vecRot;//euler rotation + + matrix44 matView; + matrix44 matWorld; + + vector3 vecPosition; + vector3 vecRotation; + vector3 vecScale; + + vector3 vecLightPos; +}; + +#endif //_TEMPLATEAPP_H Modified: branches/demos/src/demos/runtime.cc =================================================================== --- branches/demos/src/demos/runtime.cc 2010-09-17 12:00:27 UTC (rev 131) +++ branches/demos/src/demos/runtime.cc 2010-09-22 10:10:31 UTC (rev 132) @@ -13,9 +13,9 @@ //#include "shaders/shadersapp.h" //#include "ambient/ambientapp.h" //#include "models/modelsapp.h" +//#include "shootem/shootemapp.h" +#include "lights/lightsapp.h" -#include "shootem/shootemapp.h" - #ifdef __WIN32__ #include "kernel/nwin32loghandler.h" #include "tools/nwinmaincmdlineargs.h" @@ -123,7 +123,8 @@ //app = n_new(ShadersApp); //app = n_new(AmbientApp); //app = n_new(ModelsApp); - app = n_new(ShootemApp); + //app = n_new(ShootemApp); + app = n_new(LightsApp); pGfxServer->SetDisplayMode(displayMode); nCamera2 camera(n_deg2rad(60), float(displayMode.GetHeight())/float(displayMode.GetWidth()),1.f,100.f); Added: branches/demos/src/lights/lightsapp.cc =================================================================== --- branches/demos/src/lights/lightsapp.cc (rev 0) +++ branches/demos/src/lights/lightsapp.cc 2010-09-22 10:10:31 UTC (rev 132) @@ -0,0 +1,156 @@ +#include "lights/lightsapp.h" + +#include "kernel/nfileserver2.h" +#include "kernel/ntimeserver.h" +#include "input/ninputserver.h" +#include "gfx2/ngfxserver2.h" +#include "gfx2/nmesh2.h" +#include "gfx2/nshader2.h" +#include "util/nrandomlogic.h" + +//------------------------------------------------------------------------------ +/** + run script that loads required resources, etc. + and sets initial position of everything +*/ +void LightsApp::Init() +{ + this->bWireframe = false; + + //model + this->vecPosition.set( 0.f, 1.f, 0.f ); + this->vecRotation.set( 0.f, 0.f, 0.f ); + this->vecScale.set( 1.f, 1.f, 1.f ); + + //camera + this->vecEye.set(0,5,10); + this->vecRot.set(n_deg2rad(-30),0,0); //looking down 30 degrees + + //light + this->vecLightPos.set( 0.f ,5.f ,-10.f ); + +} + +//------------------------------------------------------------------------------ +/** +*/ +bool LightsApp::Open() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + + N_REF_LOAD_MESH(this->refMesh, "torus", "proj:meshes/torus.n3d2"); + N_REF_LOAD_TEXTURE(this->refTexture, "brick", "proj:textures/brick.bmp"); + + N_REF_LOAD_MESH(this->refMeshFloor, "plane", "proj:meshes/plane_xz.n3d2"); + N_REF_LOAD_TEXTURE(this->refTextureFloor, "sidewalk", "proj:textures/sidewalk.dds"); + + N_REF_LOAD_SHADER(this->refShaderColor, "color", "proj:shaders/color.fx"); + N_REF_LOAD_SHADER(this->refShaderDiffuse, "diffuse", "proj:shaders/diffuse.fx"); + + //shaders for lighting + + return true; +} + +//------------------------------------------------------------------------------ + +void LightsApp::Close() +{ + N_REF_RELEASE(this->refMesh) + N_REF_RELEASE(this->refTexture) + + N_REF_RELEASE(this->refMeshFloor) + N_REF_RELEASE(this->refTextureFloor) + + N_REF_RELEASE(this->refShaderColor) + N_REF_RELEASE(this->refShaderDiffuse) +} + +//------------------------------------------------------------------------------ + +void LightsApp::Tick( float fTimeElapsed ) +{ + nInputServer* inputServer = nInputServer::Instance(); + +/// --- copied from shadersapp --- + if (inputServer->GetButton("wireframe")) + this->bWireframe = !this->bWireframe; + + float mouse_x = (inputServer->GetSlider("slider_left") - inputServer->GetSlider("slider_right")); + float mouse_y = (inputServer->GetSlider("slider_up") - inputServer->GetSlider("slider_down")); + + float angleSpace = n_deg2rad(360.f) * 10.f * fTimeElapsed;//=angleSpeed + float moveSpace = 10.f * fTimeElapsed;//=cameraSpeed + + //camera look around + if (inputServer->GetButton("right_pressed")) + { + this->vecRot.y += mouse_x * angleSpace; + this->vecRot.x += mouse_y * angleSpace; + } + + //camera move + vector3 vecMove; + if (inputServer->GetButton("forward")) + { + vecMove.z -= moveSpace; + } + if (inputServer->GetButton("backward")) + { + vecMove.z += moveSpace; + } + if (inputServer->GetButton("strafe_left")) + { + vecMove.x -= moveSpace; + } + if (inputServer->GetButton("strafe_right")) + { + vecMove.x += moveSpace; + } + + //update camera position + matrix44 mat; + mat.rotate_x( this->vecRot.x ); + mat.rotate_y( this->vecRot.y ); + mat.translate( this->vecEye ); + + //transform with vectors: + this->vecEye = mat * vecMove; + + if (inputServer->GetButton("light")) + this->vecLightPos.set( this->vecEye ); +/// --- copied from shadersapp --- +} + +//------------------------------------------------------------------------------ + +void LightsApp::Render() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + gfxServer->Clear( nGfxServer2::AllBuffers, 0.f, 0.f, 1.f, 1.f, 1.f, 0 ); + + //view transform + this->matView.ident(); + this->matView.rotate_x( this->vecRot.x );//pitch + this->matView.rotate_y( this->vecRot.y );//yaw + this->matView.translate( this->vecEye ); + + this->matView.invert_simple(); + gfxServer->SetTransform( nGfxServer2::View, this->matView ); + + //projection transform + nCamera2 cam; + gfxServer->SetCamera( cam ); + + //draw the floor + this->BeginDraw( this->refShaderDiffuse, this->refMeshFloor ); + this->BeginPass( this->refShaderDiffuse, 0 ); + this->refShaderDiffuse->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + this->refShaderDiffuse->SetTexture( nShaderState::DiffMap0, this->refTextureFloor ); + this->refShaderDiffuse->SetVector4( nShaderState::MatDiffuse, vector4(1.f,1.f,1.f,1.f) ); + this->Draw( vector3( -5.f, 0.f, -5.f ), vector3( 10.f, 0.f, 10.f ) ); + this->EndPass( this->refShaderDiffuse ); + this->EndDraw( this->refShaderDiffuse ); + + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-17 12:00:34
|
Revision: 131 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=131&view=rev Author: magarcias Date: 2010-09-17 12:00:27 +0000 (Fri, 17 Sep 2010) Log Message: ----------- Code cleanup Modified Paths: -------------- branches/demos/inc/shootem/nshootemstate.h branches/demos/src/shootem/nshootemstate.cc branches/demos/src/shootem/nshootemstate_player.cc Modified: branches/demos/inc/shootem/nshootemstate.h =================================================================== --- branches/demos/inc/shootem/nshootemstate.h 2010-09-17 11:48:19 UTC (rev 130) +++ branches/demos/inc/shootem/nshootemstate.h 2010-09-17 12:00:27 UTC (rev 131) @@ -75,7 +75,7 @@ //player path void InitPlayerPath(); void DrawPlayerPath(); - void SnapToPath(vector3& pos, vector3& rot); + void SnapToPath(vector3& pos); nArray<vector3> playerPath; int currentWaypoint; float fMaxDistanceToPath; Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-17 11:48:19 UTC (rev 130) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-17 12:00:27 UTC (rev 131) @@ -117,6 +117,9 @@ //find the player path this->InitPlayerPath(); + //hide the cursor + nGfxServer2::Instance()->SetCursorVisibility( nGfxServer2::None ); + //common behavior nCommonState::OnStateEnter(prevState); } @@ -128,6 +131,9 @@ void nShootemState::OnStateLeave( const nString & nextState ) { + //show the cursor + nGfxServer2::Instance()->SetCursorVisibility( nGfxServer2::System ); + this->refViewport->SetVisible(false); nCommonState::OnStateLeave( nextState ); @@ -181,6 +187,11 @@ this->refViewport->SetTime(this->app->GetTime()); this->refViewport->Trigger(); + //move the cursor back + const nDisplayMode2 & mode = nGfxServer2::Instance()->GetDisplayMode(); + nGfxServer2::Instance()->SetCursorPosition( + mode.GetXPos() + ( mode.GetWidth() >> 1 ) , mode.GetYPos() + ( mode.GetHeight() >> 1 ) ); + nCommonState::OnFrame(); } Modified: branches/demos/src/shootem/nshootemstate_player.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_player.cc 2010-09-17 11:48:19 UTC (rev 130) +++ branches/demos/src/shootem/nshootemstate_player.cc 2010-09-17 12:00:27 UTC (rev 131) @@ -138,7 +138,7 @@ //adjust to path vector3 cameraRot; - this->SnapToPath( this->playerPos, cameraRot ); + this->SnapToPath( this->playerPos ); float diffAngle = playerRot.y - this->playerRot.y; float angle = n_clamp(diffAngle, -angleSpace, angleSpace); this->playerRot.y += angle; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-17 11:48:25
|
Revision: 130 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=130&view=rev Author: magarcias Date: 2010-09-17 11:48:19 +0000 (Fri, 17 Sep 2010) Log Message: ----------- Player path Modified Paths: -------------- branches/demos/src/shootem/nshootemstate_enemy.cc branches/demos/src/shootem/nshootemstate_player.cc Modified: branches/demos/src/shootem/nshootemstate_enemy.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_enemy.cc 2010-09-17 10:34:46 UTC (rev 129) +++ branches/demos/src/shootem/nshootemstate_enemy.cc 2010-09-17 11:48:19 UTC (rev 130) @@ -31,7 +31,7 @@ newEnemy.vecPos = transform->GetPosition(); newEnemy.radius2D = radius2D; newEnemy.color.set(1,1,1,1); - newEnemy.hitPoints = 1; + newEnemy.hitPoints = 3; newEnemy.fTimeElapsed = 0; newEnemy.state = ES_Invalid; newEnemy.refEntity.set(entity); @@ -80,7 +80,7 @@ enemy.fTimeElapsed += fTimeElapsed; if (enemy.fTimeElapsed > this->fEnemyHitTime) this->SetEnemyState(&enemy, ES_Active); - //fall through + break; case ES_Active: { @@ -95,7 +95,6 @@ //adjust to terrain this->AdjustHeight( enemy.vecPos ); - enemy.vecPos.y += 0.5f;//can't figure out why //update the entity position ncTransform* transform = enemy.refEntity->GetComponentSafe<ncTransform>(); @@ -109,7 +108,7 @@ if (enemy.fTimeElapsed > this->fEnemyDyingTime) { nEntityObjectServer::Instance()->RemoveEntityObject(enemy.refEntity); - this->enemies.EraseQuick(index); + this->enemies.Erase(index); continue; } } Modified: branches/demos/src/shootem/nshootemstate_player.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_player.cc 2010-09-17 10:34:46 UTC (rev 129) +++ branches/demos/src/shootem/nshootemstate_player.cc 2010-09-17 11:48:19 UTC (rev 130) @@ -47,7 +47,7 @@ //------------------------------------------------------------------------------ void -nShootemState::SnapToPath(vector3& pos, vector3& rot) +nShootemState::SnapToPath(vector3& pos) { //find the closest point in the path thast is _behind_ the position //and get the rotation corresponding to that segment @@ -85,10 +85,6 @@ vecPos.norm(); pos = closest + vecPos * this->fMaxDistanceToPath; } - - //adjust rotation to the segment - polar2 angles( segment.vec() ); - rot.y = angles.rho; } } @@ -101,16 +97,9 @@ //player rotate float angleSpace = this->turnSpeed * float(frameTime); + float mouse_x = (inputServer->GetSlider("slider_left") - inputServer->GetSlider("slider_right")); + this->playerRot.y += mouse_x * angleSpace; - //if (inputServer->GetButton("StrafeLeft")) - //{ - // this->playerRot.y += angleSpace; - //} - //if (inputServer->GetButton("StrafeRight")) - //{ - // this->playerRot.y -= angleSpace; - //} - //player move float moveSpace = this->playerSpeed * float(frameTime); @@ -148,8 +137,8 @@ this->playerPos = matWorld * vecMove; //adjust to path - vector3 playerRot; - this->SnapToPath( this->playerPos, playerRot ); + vector3 cameraRot; + this->SnapToPath( this->playerPos, cameraRot ); float diffAngle = playerRot.y - this->playerRot.y; float angle = n_clamp(diffAngle, -angleSpace, angleSpace); this->playerRot.y += angle; @@ -169,7 +158,10 @@ //} //this->cameraPos.x = eyePos.x; this->cameraPos = eyePos; - this->cameraAngles.rho = this->playerRot.y + n_deg2rad(180);//can't figure this out! + float cameraYaw = this->playerRot.y + n_deg2rad(180);//can't figure this out! + float cameraTurn = cameraYaw - this->cameraAngles.rho; + cameraTurn = n_clamp(cameraTurn, -angleSpace, angleSpace); + this->cameraAngles.rho += cameraTurn; //shoot if (inputServer->GetButton("PrimaryAttack")) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-17 10:34:52
|
Revision: 129 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=129&view=rev Author: magarcias Date: 2010-09-17 10:34:46 +0000 (Fri, 17 Sep 2010) Log Message: ----------- Summoner build Modified Paths: -------------- trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld Modified: trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld =================================================================== --- trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld 2010-09-17 10:34:10 UTC (rev 128) +++ trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld 2010-09-17 10:34:46 UTC (rev 129) @@ -53,9 +53,6 @@ summoner nsummonerapp nsummonerstate - - nshootemstate - shootemapp } settargetdeps { gpbasicactions This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-17 10:34:18
|
Revision: 128 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=128&view=rev Author: magarcias Date: 2010-09-17 10:34:10 +0000 (Fri, 17 Sep 2010) Log Message: ----------- Animations Modified Paths: -------------- branches/demos/bldfiles/shootem.bld branches/demos/inc/shootem/nshootemstate.h branches/demos/src/shootem/nshootemstate.cc branches/demos/src/shootem/nshootemstate_enemy.cc branches/demos/src/shootem/nshootemstate_events.cc Added Paths: ----------- branches/demos/src/shootem/nshootemstate_player.cc Removed Paths: ------------- branches/demos/src/shootem/nshootemstate_input.cc Modified: branches/demos/bldfiles/shootem.bld =================================================================== --- branches/demos/bldfiles/shootem.bld 2010-09-17 09:16:35 UTC (rev 127) +++ branches/demos/bldfiles/shootem.bld 2010-09-17 10:34:10 UTC (rev 128) @@ -24,10 +24,10 @@ setdir shootem setfiles { nshootemstate + nshootemstate_player nshootemstate_projectile nshootemstate_enemy nshootemstate_events - nshootemstate_input } setheaders{ nshootemstate Modified: branches/demos/inc/shootem/nshootemstate.h =================================================================== --- branches/demos/inc/shootem/nshootemstate.h 2010-09-17 09:16:35 UTC (rev 127) +++ branches/demos/inc/shootem/nshootemstate.h 2010-09-17 10:34:10 UTC (rev 128) @@ -58,6 +58,20 @@ float playerSpeed; float turnSpeed; + enum PlayerState + { + PS_Idle = 0, + PS_Forward, + PS_Backward, + PS_StrafeLeft, + PS_StrafeRight, + PS_Die, + PS_Invalid + }; + + PlayerState playerState; + void SetPlayerState(PlayerState playerState); + //player path void InitPlayerPath(); void DrawPlayerPath(); @@ -97,6 +111,7 @@ ES_Active, ES_Hit, ES_Dying, + ES_Invalid, }; struct Enemy @@ -120,6 +135,8 @@ float fEnemyHitTime; float fEnemyDyingTime; + void SetEnemyState(Enemy* enemy, EnemyState state); + void InitEnemies(); void TickEnemies(float fTimeElapsed); void SpawnEnemies(); Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-17 09:16:35 UTC (rev 127) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-17 10:34:10 UTC (rev 128) @@ -26,6 +26,7 @@ { this->playerSpeed = 5.f; this->turnSpeed = n_deg2rad(60.f); + this->playerState = PS_Invalid; this->cameraOffset.set(0, 3.f, -5.f); this->cameraThreshold = 1.f; Modified: branches/demos/src/shootem/nshootemstate_enemy.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_enemy.cc 2010-09-17 09:16:35 UTC (rev 127) +++ branches/demos/src/shootem/nshootemstate_enemy.cc 2010-09-17 10:34:10 UTC (rev 128) @@ -7,6 +7,7 @@ #include "zombieentity/nctransform.h" #include "nspatial/ncspatial.h" +#include "animcomp/nccharacter.h" //------------------------------------------------------------------------------ @@ -30,12 +31,11 @@ newEnemy.vecPos = transform->GetPosition(); newEnemy.radius2D = radius2D; newEnemy.color.set(1,1,1,1); - newEnemy.state = ES_Idle; newEnemy.hitPoints = 1; newEnemy.fTimeElapsed = 0; - + newEnemy.state = ES_Invalid; newEnemy.refEntity.set(entity); - + this->SetEnemyState(&newEnemy, ES_Idle); this->enemies.Append(newEnemy); } @@ -56,7 +56,7 @@ { if (vector3(this->playerPos - enemy.vecPos).lensquared() < distSq) { - enemy.state = ES_Active; + this->SetEnemyState(&enemy, ES_Active); } } } @@ -79,7 +79,7 @@ case ES_Hit: enemy.fTimeElapsed += fTimeElapsed; if (enemy.fTimeElapsed > this->fEnemyHitTime) - enemy.state = ES_Active; + this->SetEnemyState(&enemy, ES_Active); //fall through case ES_Active: @@ -88,11 +88,14 @@ vecMove.y = 0; vecMove.norm(); polar2 angles(vecMove); + angles.theta = 0.f;//for some reason, the latitude is 90 degrees + vecMove *= this->fEnemySpeed * fTimeElapsed; enemy.vecPos += vecMove; //adjust to terrain this->AdjustHeight( enemy.vecPos ); + enemy.vecPos.y += 0.5f;//can't figure out why //update the entity position ncTransform* transform = enemy.refEntity->GetComponentSafe<ncTransform>(); @@ -117,6 +120,34 @@ //------------------------------------------------------------------------------ +void nShootemState::SetEnemyState(Enemy* enemy, EnemyState state) +{ + if (state != enemy->state) + { + n_assert(enemy->refEntity.isvalid()); + ncCharacter* character = enemy->refEntity->GetComponentSafe<ncCharacter>(); + enemy->state = state; + switch (state) + { + case ES_Dying: + character->SetActiveState( "$$s2_1a_die", false, false, true ); + break; + case ES_Hit: + character->SetActiveState( "$$s0_1a_impact00", false, false, true ); + break; + case ES_Active: + character->SetActiveState( "w$s0_1a_walk", false, true, true ); + break; + case ES_Idle: + default://TEMP + character->SetActiveState( "w$s0_1a_walk", false, true, true ); + break; + } + } +} + +//------------------------------------------------------------------------------ + nShootemState::Enemy* nShootemState::CheckEnemies(const vector3& pos, float radius) { int numEnemies = this->enemies.Size(); Modified: branches/demos/src/shootem/nshootemstate_events.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_events.cc 2010-09-17 09:16:35 UTC (rev 127) +++ branches/demos/src/shootem/nshootemstate_events.cc 2010-09-17 10:34:10 UTC (rev 128) @@ -10,9 +10,9 @@ n_assert(enemy); enemy->hitPoints--; if (enemy->hitPoints > 0) - enemy->state = ES_Hit; + this->SetEnemyState(enemy, ES_Hit); else - enemy->state = ES_Dying; + this->SetEnemyState(enemy, ES_Dying); enemy->fTimeElapsed = 0.f; } Deleted: branches/demos/src/shootem/nshootemstate_input.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_input.cc 2010-09-17 09:16:35 UTC (rev 127) +++ branches/demos/src/shootem/nshootemstate_input.cc 2010-09-17 10:34:10 UTC (rev 128) @@ -1,182 +0,0 @@ -#include "precompiled/pchsummoner.h" -//------------------------------------------------------------------------------ -// nshooterstate_input.cc -// (C) 2010 M.A. Garcias <ma...@ma...> -//------------------------------------------------------------------------------ -#include "shootem/nshootemstate.h" - -#include "mathlib/line.h" - -#include "input/ninputserver.h" -#include "nwaypointserver/nwaypointserver.h" -#include "gfx2/ngfxserver2.h" - -//------------------------------------------------------------------------------ - -void -nShootemState::InitPlayerPath() -{ - nWayPointServer* waypointServer = nWayPointServer::Instance(); - -// int pathId = waypointServer->GetPathId("Player"); -// waypointServer->pa - int numWaypoints = waypointServer->GetNumWayPoints( "Player" ); - if (numWaypoints > 1) - { - float minLength = 0.f; - this->currentWaypoint = -1; - - for (int index=0; index<numWaypoints; index++) - { - WayPoint* waypoint = waypointServer->GetWayPoint( "Player", index ); - this->playerPath.Append( waypoint->GetPosition() ); - - vector3 distance(this->playerPos - waypoint->GetPosition()); - distance.y = 0; - float length = distance.len(); - if (this->currentWaypoint == -1 || length < minLength) - { - this->currentWaypoint = index; - minLength = length; - } - } - } -} - -//------------------------------------------------------------------------------ - -void -nShootemState::SnapToPath(vector3& pos, vector3& rot) -{ - //find the closest point in the path thast is _behind_ the position - //and get the rotation corresponding to that segment - int numWaypoints = this->playerPath.Size(); - float minDistance = 0.f; - int currentWaypoint = -1; - for (int index=0; index<numWaypoints-1; index++) - { - //check the point is in front of the starting point - vector3 vecPath(this->playerPath[index+1] - this->playerPath[index]); - vector3 vecPos(pos - this->playerPath[index]); - if (vecPath.dot(vecPos) < 0.f) - continue; - - //check distance to the - line3 segment(this->playerPath[index], this->playerPath[index+1]); - float distance = segment.distance(pos); - if (currentWaypoint == -1 || distance < minDistance) - { - currentWaypoint = index; - minDistance = distance; - } - } - - if (currentWaypoint != -1) - { - line3 segment(this->playerPath[currentWaypoint], this->playerPath[currentWaypoint+1]); - - //adjust position to max distance - if (minDistance > this->fMaxDistanceToPath) - { - float t = segment.closestpoint(pos); - vector3 closest( segment.ipol(t) ); - vector3 vecPos(pos - closest); - vecPos.norm(); - pos = closest + vecPos * this->fMaxDistanceToPath; - } - - //adjust rotation to the segment - polar2 angles( segment.vec() ); - rot.y = angles.rho; - } -} - -//------------------------------------------------------------------------------ - -bool -nShootemState::HandleInput(nTime frameTime) -{ - nInputServer* inputServer = nInputServer::Instance(); - - //player rotate - float angleSpace = this->turnSpeed * float(frameTime); - - //if (inputServer->GetButton("StrafeLeft")) - //{ - // this->playerRot.y += angleSpace; - //} - //if (inputServer->GetButton("StrafeRight")) - //{ - // this->playerRot.y -= angleSpace; - //} - - //player move - float moveSpace = this->playerSpeed * float(frameTime); - - vector3 vecMove; - if (inputServer->GetButton("Forward")) - { - vecMove.z += moveSpace; - } - if (inputServer->GetButton("Backward")) - { - vecMove.z -= moveSpace; - } - if (inputServer->GetButton("StrafeLeft")) - { - vecMove.x += moveSpace; - } - if (inputServer->GetButton("StrafeRight")) - { - vecMove.x -= moveSpace; - } - - matrix44 matWorld; - matWorld.rotate_y(this->playerRot.y); - matWorld.translate(this->playerPos); - - //update player position - this->playerPos = matWorld * vecMove; - - //adjust to path - vector3 playerRot; - this->SnapToPath( this->playerPos, playerRot ); - float diffAngle = playerRot.y - this->playerRot.y; - float angle = n_clamp(diffAngle, -angleSpace, angleSpace); - this->playerRot.y += angle; - - //adjust to terrain - this->AdjustHeight( this->playerPos ); - - //update camera position applying threshold - vector3 eyePos = matWorld * this->cameraOffset; - //if ((eyePos.z - this->cameraPos.z) > this->cameraThreshold) - //{ - // this->cameraPos.z = eyePos.z - this->cameraThreshold; - //} - //else if ((this->cameraPos.z - eyePos.z) > this->cameraThreshold) - //{ - // this->cameraPos.z = eyePos.z + this->cameraThreshold; - //} - //this->cameraPos.x = eyePos.x; - this->cameraPos = eyePos; - this->cameraAngles.rho = this->playerRot.y + n_deg2rad(180);//can't figure this out! - - //shoot - if (inputServer->GetButton("PrimaryAttack")) - { - this->AddProjectile(); - } - - return false; -} - -//------------------------------------------------------------------------------ - -void nShootemState::DrawPlayerPath() -{ - nGfxServer2* gfxServer = nGfxServer2::Instance(); - gfxServer->BeginLines(); - gfxServer->DrawLines3d( this->playerPath.Begin(), this->playerPath.Size(), vector4(1,1,0,1)); - gfxServer->EndLines(); -} Added: branches/demos/src/shootem/nshootemstate_player.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_player.cc (rev 0) +++ branches/demos/src/shootem/nshootemstate_player.cc 2010-09-17 10:34:10 UTC (rev 128) @@ -0,0 +1,225 @@ +#include "precompiled/pchsummoner.h" +//------------------------------------------------------------------------------ +// nshooterstate_input.cc +// (C) 2010 M.A. Garcias <ma...@ma...> +//------------------------------------------------------------------------------ +#include "shootem/nshootemstate.h" + +#include "mathlib/line.h" + +#include "input/ninputserver.h" +#include "nwaypointserver/nwaypointserver.h" +#include "gfx2/ngfxserver2.h" +#include "animcomp/nccharacter.h" + +//------------------------------------------------------------------------------ + +void +nShootemState::InitPlayerPath() +{ + nWayPointServer* waypointServer = nWayPointServer::Instance(); + +// int pathId = waypointServer->GetPathId("Player"); +// waypointServer->pa + int numWaypoints = waypointServer->GetNumWayPoints( "Player" ); + if (numWaypoints > 1) + { + float minLength = 0.f; + this->currentWaypoint = -1; + + for (int index=0; index<numWaypoints; index++) + { + WayPoint* waypoint = waypointServer->GetWayPoint( "Player", index ); + this->playerPath.Append( waypoint->GetPosition() ); + + vector3 distance(this->playerPos - waypoint->GetPosition()); + distance.y = 0; + float length = distance.len(); + if (this->currentWaypoint == -1 || length < minLength) + { + this->currentWaypoint = index; + minLength = length; + } + } + } +} + +//------------------------------------------------------------------------------ + +void +nShootemState::SnapToPath(vector3& pos, vector3& rot) +{ + //find the closest point in the path thast is _behind_ the position + //and get the rotation corresponding to that segment + int numWaypoints = this->playerPath.Size(); + float minDistance = 0.f; + int currentWaypoint = -1; + for (int index=0; index<numWaypoints-1; index++) + { + //check the point is in front of the starting point + vector3 vecPath(this->playerPath[index+1] - this->playerPath[index]); + vector3 vecPos(pos - this->playerPath[index]); + if (vecPath.dot(vecPos) < 0.f) + continue; + + //check distance to the + line3 segment(this->playerPath[index], this->playerPath[index+1]); + float distance = segment.distance(pos); + if (currentWaypoint == -1 || distance < minDistance) + { + currentWaypoint = index; + minDistance = distance; + } + } + + if (currentWaypoint != -1) + { + line3 segment(this->playerPath[currentWaypoint], this->playerPath[currentWaypoint+1]); + + //adjust position to max distance + if (minDistance > this->fMaxDistanceToPath) + { + float t = segment.closestpoint(pos); + vector3 closest( segment.ipol(t) ); + vector3 vecPos(pos - closest); + vecPos.norm(); + pos = closest + vecPos * this->fMaxDistanceToPath; + } + + //adjust rotation to the segment + polar2 angles( segment.vec() ); + rot.y = angles.rho; + } +} + +//------------------------------------------------------------------------------ + +bool +nShootemState::HandleInput(nTime frameTime) +{ + nInputServer* inputServer = nInputServer::Instance(); + + //player rotate + float angleSpace = this->turnSpeed * float(frameTime); + + //if (inputServer->GetButton("StrafeLeft")) + //{ + // this->playerRot.y += angleSpace; + //} + //if (inputServer->GetButton("StrafeRight")) + //{ + // this->playerRot.y -= angleSpace; + //} + + //player move + float moveSpace = this->playerSpeed * float(frameTime); + + PlayerState playerState = PS_Idle; + vector3 vecMove; + if (inputServer->GetButton("StrafeLeft")) + { + vecMove.x += moveSpace; + playerState = PS_StrafeLeft; + } + if (inputServer->GetButton("StrafeRight")) + { + vecMove.x -= moveSpace; + playerState = PS_StrafeRight; + } + if (inputServer->GetButton("Forward")) + { + vecMove.z += moveSpace; + playerState = PS_Forward; + } + if (inputServer->GetButton("Backward")) + { + vecMove.z -= moveSpace; + playerState = PS_Backward; + } + + //update player state + this->SetPlayerState( playerState ); + + matrix44 matWorld; + matWorld.rotate_y(this->playerRot.y); + matWorld.translate(this->playerPos); + + //update player position + this->playerPos = matWorld * vecMove; + + //adjust to path + vector3 playerRot; + this->SnapToPath( this->playerPos, playerRot ); + float diffAngle = playerRot.y - this->playerRot.y; + float angle = n_clamp(diffAngle, -angleSpace, angleSpace); + this->playerRot.y += angle; + + //adjust to terrain + this->AdjustHeight( this->playerPos ); + + //update camera position applying threshold + vector3 eyePos = matWorld * this->cameraOffset; + //if ((eyePos.z - this->cameraPos.z) > this->cameraThreshold) + //{ + // this->cameraPos.z = eyePos.z - this->cameraThreshold; + //} + //else if ((this->cameraPos.z - eyePos.z) > this->cameraThreshold) + //{ + // this->cameraPos.z = eyePos.z + this->cameraThreshold; + //} + //this->cameraPos.x = eyePos.x; + this->cameraPos = eyePos; + this->cameraAngles.rho = this->playerRot.y + n_deg2rad(180);//can't figure this out! + + //shoot + if (inputServer->GetButton("PrimaryAttack")) + { + this->AddProjectile(); + } + + return false; +} + +//------------------------------------------------------------------------------ + +void nShootemState::SetPlayerState(PlayerState state) +{ + n_assert(this->refPlayerEntity.isvalid()); + ncCharacter* character = this->refPlayerEntity->GetComponentSafe<ncCharacter>(); + + if (state != this->playerState) + { + this->playerState = state; + switch (state) + { + case PS_Forward: + case PS_Backward: + character->SetActiveState("wis0_2a_walk", state==PS_Backward, true, true ); + character->SetActiveState("wss0_2a_walk", state==PS_Backward, true, true ); + break; + case PS_StrafeLeft: + case PS_StrafeRight: + character->SetActiveState("ais0_2a_walk", state==PS_Backward, true, true ); + character->SetActiveState("ass0_2a_walk", state==PS_Backward, true, true ); + break; + case PS_Die: + character->SetActiveState("$$$2_2a_die", false, false, true ); + break; + case PS_Idle: + default://TEMP + character->SetActiveState("$is0_2a_idle00", false, true, true ); + character->SetActiveState("$ss0_2a_idle00", false, true, true ); + break; + } + } +} + +//------------------------------------------------------------------------------ + +void nShootemState::DrawPlayerPath() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + gfxServer->BeginLines(); + gfxServer->DrawLines3d( this->playerPath.Begin(), this->playerPath.Size(), vector4(1,1,0,1)); + gfxServer->EndLines(); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-17 09:16:42
|
Revision: 127 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=127&view=rev Author: magarcias Date: 2010-09-17 09:16:35 +0000 (Fri, 17 Sep 2010) Log Message: ----------- Player path Modified Paths: -------------- branches/demos/bldfiles/shootem.bld branches/demos/inc/shootem/nshootemstate.h branches/demos/src/shootem/nshootemstate.cc branches/demos/src/shootem/nshootemstate_projectile.cc Added Paths: ----------- branches/demos/src/shootem/nshootemstate_input.cc Modified: branches/demos/bldfiles/shootem.bld =================================================================== --- branches/demos/bldfiles/shootem.bld 2010-09-16 16:29:51 UTC (rev 126) +++ branches/demos/bldfiles/shootem.bld 2010-09-17 09:16:35 UTC (rev 127) @@ -27,6 +27,7 @@ nshootemstate_projectile nshootemstate_enemy nshootemstate_events + nshootemstate_input } setheaders{ nshootemstate Modified: branches/demos/inc/shootem/nshootemstate.h =================================================================== --- branches/demos/inc/shootem/nshootemstate.h 2010-09-16 16:29:51 UTC (rev 126) +++ branches/demos/inc/shootem/nshootemstate.h 2010-09-17 09:16:35 UTC (rev 127) @@ -37,6 +37,7 @@ /// Called on state to perform 2d rendering virtual void OnRender2D(); + /// handle player input bool HandleInput(nTime frameTime); protected: @@ -57,6 +58,14 @@ float playerSpeed; float turnSpeed; + //player path + void InitPlayerPath(); + void DrawPlayerPath(); + void SnapToPath(vector3& pos, vector3& rot); + nArray<vector3> playerPath; + int currentWaypoint; + float fMaxDistanceToPath; + //camera vector3 cameraOffset; vector3 cameraPos; Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-16 16:29:51 UTC (rev 126) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-17 09:16:35 UTC (rev 127) @@ -10,7 +10,6 @@ #include "napplication/napplication.h" #include "napplication/nappviewportui.h" #include "napplication/nappviewport.h" -#include "input/ninputserver.h" #include "nlevel/nlevelmanager.h" #include "nlevel/nlevel.h" #include "zombieentity/nctransform.h" @@ -39,6 +38,8 @@ this->fEnemySpeed = 3.f; this->fEnemyHitTime = .2f; this->fEnemyDyingTime = 1.f; + + this->fMaxDistanceToPath = 4.f; } //------------------------------------------------------------------------------ @@ -112,6 +113,10 @@ //find the enemies this->InitEnemies(); + //find the player path + this->InitPlayerPath(); + + //common behavior nCommonState::OnStateEnter(prevState); } @@ -152,72 +157,10 @@ { nTime frameTime = this->app->GetFrameTime(); - //---HandleInput(frameTime)--- - nInputServer* inputServer = nInputServer::Instance(); + //player input + this->HandleInput(frameTime); - //player rotate - float angleSpace = this->turnSpeed * float(frameTime); - - if (inputServer->GetButton("StrafeLeft")) - { - this->playerRot.y += angleSpace; - } - if (inputServer->GetButton("StrafeRight")) - { - this->playerRot.y -= angleSpace; - } - - //player move - float moveSpace = this->playerSpeed * float(frameTime); - - vector3 vecMove; - if (inputServer->GetButton("Forward")) - { - vecMove.z += moveSpace; - } - if (inputServer->GetButton("Backward")) - { - vecMove.z -= moveSpace; - } - //if (inputServer->GetButton("StrafeLeft")) - //{ - // vecMove.x -= moveSpace; - //} - //if (inputServer->GetButton("StrafeRight")) - //{ - // vecMove.x += moveSpace; - //} - - matrix44 matWorld; - matWorld.rotate_y(this->playerRot.y); - matWorld.translate(this->playerPos); - - //update player position - this->playerPos = matWorld * vecMove; - - //adjust to terrain - this->AdjustHeight( this->playerPos ); - - //update camera position applying threshold - vector3 eyePos = matWorld * this->cameraOffset; - //if ((eyePos.z - this->cameraPos.z) > this->cameraThreshold) - //{ - // this->cameraPos.z = eyePos.z - this->cameraThreshold; - //} - //else if ((this->cameraPos.z - eyePos.z) > this->cameraThreshold) - //{ - // this->cameraPos.z = eyePos.z + this->cameraThreshold; - //} - //this->cameraPos.x = eyePos.x; - this->cameraPos = eyePos; - this->cameraAngles.rho = this->playerRot.y + n_deg2rad(180);//can't figure this out! - - //shoot - if (inputServer->GetButton("PrimaryAttack")) - { - this->AddProjectile(); - } - + //projectiles this->TickProjectiles(float(frameTime)); //enemies @@ -257,6 +200,9 @@ { nGfxServer2* gfxServer = nGfxServer2::Instance(); + //draw player path + this->DrawPlayerPath(); + //draw projectiles this->DrawProjectiles(); Added: branches/demos/src/shootem/nshootemstate_input.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_input.cc (rev 0) +++ branches/demos/src/shootem/nshootemstate_input.cc 2010-09-17 09:16:35 UTC (rev 127) @@ -0,0 +1,182 @@ +#include "precompiled/pchsummoner.h" +//------------------------------------------------------------------------------ +// nshooterstate_input.cc +// (C) 2010 M.A. Garcias <ma...@ma...> +//------------------------------------------------------------------------------ +#include "shootem/nshootemstate.h" + +#include "mathlib/line.h" + +#include "input/ninputserver.h" +#include "nwaypointserver/nwaypointserver.h" +#include "gfx2/ngfxserver2.h" + +//------------------------------------------------------------------------------ + +void +nShootemState::InitPlayerPath() +{ + nWayPointServer* waypointServer = nWayPointServer::Instance(); + +// int pathId = waypointServer->GetPathId("Player"); +// waypointServer->pa + int numWaypoints = waypointServer->GetNumWayPoints( "Player" ); + if (numWaypoints > 1) + { + float minLength = 0.f; + this->currentWaypoint = -1; + + for (int index=0; index<numWaypoints; index++) + { + WayPoint* waypoint = waypointServer->GetWayPoint( "Player", index ); + this->playerPath.Append( waypoint->GetPosition() ); + + vector3 distance(this->playerPos - waypoint->GetPosition()); + distance.y = 0; + float length = distance.len(); + if (this->currentWaypoint == -1 || length < minLength) + { + this->currentWaypoint = index; + minLength = length; + } + } + } +} + +//------------------------------------------------------------------------------ + +void +nShootemState::SnapToPath(vector3& pos, vector3& rot) +{ + //find the closest point in the path thast is _behind_ the position + //and get the rotation corresponding to that segment + int numWaypoints = this->playerPath.Size(); + float minDistance = 0.f; + int currentWaypoint = -1; + for (int index=0; index<numWaypoints-1; index++) + { + //check the point is in front of the starting point + vector3 vecPath(this->playerPath[index+1] - this->playerPath[index]); + vector3 vecPos(pos - this->playerPath[index]); + if (vecPath.dot(vecPos) < 0.f) + continue; + + //check distance to the + line3 segment(this->playerPath[index], this->playerPath[index+1]); + float distance = segment.distance(pos); + if (currentWaypoint == -1 || distance < minDistance) + { + currentWaypoint = index; + minDistance = distance; + } + } + + if (currentWaypoint != -1) + { + line3 segment(this->playerPath[currentWaypoint], this->playerPath[currentWaypoint+1]); + + //adjust position to max distance + if (minDistance > this->fMaxDistanceToPath) + { + float t = segment.closestpoint(pos); + vector3 closest( segment.ipol(t) ); + vector3 vecPos(pos - closest); + vecPos.norm(); + pos = closest + vecPos * this->fMaxDistanceToPath; + } + + //adjust rotation to the segment + polar2 angles( segment.vec() ); + rot.y = angles.rho; + } +} + +//------------------------------------------------------------------------------ + +bool +nShootemState::HandleInput(nTime frameTime) +{ + nInputServer* inputServer = nInputServer::Instance(); + + //player rotate + float angleSpace = this->turnSpeed * float(frameTime); + + //if (inputServer->GetButton("StrafeLeft")) + //{ + // this->playerRot.y += angleSpace; + //} + //if (inputServer->GetButton("StrafeRight")) + //{ + // this->playerRot.y -= angleSpace; + //} + + //player move + float moveSpace = this->playerSpeed * float(frameTime); + + vector3 vecMove; + if (inputServer->GetButton("Forward")) + { + vecMove.z += moveSpace; + } + if (inputServer->GetButton("Backward")) + { + vecMove.z -= moveSpace; + } + if (inputServer->GetButton("StrafeLeft")) + { + vecMove.x += moveSpace; + } + if (inputServer->GetButton("StrafeRight")) + { + vecMove.x -= moveSpace; + } + + matrix44 matWorld; + matWorld.rotate_y(this->playerRot.y); + matWorld.translate(this->playerPos); + + //update player position + this->playerPos = matWorld * vecMove; + + //adjust to path + vector3 playerRot; + this->SnapToPath( this->playerPos, playerRot ); + float diffAngle = playerRot.y - this->playerRot.y; + float angle = n_clamp(diffAngle, -angleSpace, angleSpace); + this->playerRot.y += angle; + + //adjust to terrain + this->AdjustHeight( this->playerPos ); + + //update camera position applying threshold + vector3 eyePos = matWorld * this->cameraOffset; + //if ((eyePos.z - this->cameraPos.z) > this->cameraThreshold) + //{ + // this->cameraPos.z = eyePos.z - this->cameraThreshold; + //} + //else if ((this->cameraPos.z - eyePos.z) > this->cameraThreshold) + //{ + // this->cameraPos.z = eyePos.z + this->cameraThreshold; + //} + //this->cameraPos.x = eyePos.x; + this->cameraPos = eyePos; + this->cameraAngles.rho = this->playerRot.y + n_deg2rad(180);//can't figure this out! + + //shoot + if (inputServer->GetButton("PrimaryAttack")) + { + this->AddProjectile(); + } + + return false; +} + +//------------------------------------------------------------------------------ + +void nShootemState::DrawPlayerPath() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + gfxServer->BeginLines(); + gfxServer->DrawLines3d( this->playerPath.Begin(), this->playerPath.Size(), vector4(1,1,0,1)); + gfxServer->EndLines(); +} Modified: branches/demos/src/shootem/nshootemstate_projectile.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_projectile.cc 2010-09-16 16:29:51 UTC (rev 126) +++ branches/demos/src/shootem/nshootemstate_projectile.cc 2010-09-17 09:16:35 UTC (rev 127) @@ -12,13 +12,16 @@ void nShootemState::AddProjectile() { Projectile& projectile = this->projectiles.PushBack(Projectile()); + vector3 pos(this->playerPos); pos.y += 1.0f; projectile.vecPos.set(pos);//TODO- add offset projectile.vecRot.set(this->playerRot); + matrix44 matWorld; matWorld.rotate_y(this->playerRot.y); projectile.vecDir = matWorld * vector3(0,0,1); + projectile.vecSize.set( .1f, .1f, .1f ); projectile.fTimeElapsed = 0.f; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-16 16:29:57
|
Revision: 126 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=126&view=rev Author: magarcias Date: 2010-09-16 16:29:51 +0000 (Thu, 16 Sep 2010) Log Message: ----------- enemies Modified Paths: -------------- branches/demos/bldfiles/shootem.bld branches/demos/inc/shootem/nshootemstate.h branches/demos/src/shootem/nshootemstate.cc branches/demos/src/shootem/nshootemstate_projectile.cc Added Paths: ----------- branches/demos/src/shootem/nshootemstate_enemy.cc branches/demos/src/shootem/nshootemstate_events.cc Modified: branches/demos/bldfiles/shootem.bld =================================================================== --- branches/demos/bldfiles/shootem.bld 2010-09-16 14:20:13 UTC (rev 125) +++ branches/demos/bldfiles/shootem.bld 2010-09-16 16:29:51 UTC (rev 126) @@ -24,6 +24,9 @@ setdir shootem setfiles { nshootemstate + nshootemstate_projectile + nshootemstate_enemy + nshootemstate_events } setheaders{ nshootemstate Modified: branches/demos/inc/shootem/nshootemstate.h =================================================================== --- branches/demos/inc/shootem/nshootemstate.h 2010-09-16 14:20:13 UTC (rev 125) +++ branches/demos/inc/shootem/nshootemstate.h 2010-09-16 16:29:51 UTC (rev 126) @@ -45,6 +45,7 @@ nRef<nAppViewport> refViewport; nRefEntityObject refPlayerEntity; nRef<nFloatMap> refHeightMap; + void AdjustHeight(vector3& position); //graphics nRef<nShader2> refShaderColor; @@ -80,6 +81,47 @@ void TickProjectiles(float frameTime); void DrawProjectiles(); + //enemies + enum EnemyState + { + ES_Idle = 0, + ES_Active, + ES_Hit, + ES_Dying, + }; + + struct Enemy + { + nRef<nEntityObject> refEntity; + + vector3 vecPos; + float radius2D; + vector4 color; + + EnemyState state; + int hitPoints; + + float fTimeElapsed; + }; + + nArray<Enemy> enemies; + + float fEnemySpawnDistance; + float fEnemySpeed; + float fEnemyHitTime; + float fEnemyDyingTime; + + void InitEnemies(); + void TickEnemies(float fTimeElapsed); + void SpawnEnemies(); + void DrawEnemies(); + + Enemy* CheckEnemies(const vector3& pos, float radius); + + //events + void OnEnemyHit(Enemy* enemy); + void OnPlayerHit(); + void OnLevelEnd(); }; //------------------------------------------------------------------------------ Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-16 14:20:13 UTC (rev 125) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-16 16:29:51 UTC (rev 126) @@ -34,6 +34,11 @@ this->fProjectileMaxTime = 2.f; this->fProjectileSpeed = 10.f; + + this->fEnemySpawnDistance = 100.f;//too much! + this->fEnemySpeed = 3.f; + this->fEnemyHitTime = .2f; + this->fEnemyDyingTime = 1.f; } //------------------------------------------------------------------------------ @@ -104,6 +109,9 @@ this->cameraPos = this->playerPos + this->cameraOffset; this->cameraAngles.set(n_deg2rad(-15.f), this->playerRot.y + n_deg2rad(180.f)); + //find the enemies + this->InitEnemies(); + nCommonState::OnStateEnter(prevState); } @@ -121,6 +129,22 @@ //------------------------------------------------------------------------------ /** +*/ +void +nShootemState::AdjustHeight( vector3& position ) +{ + if (this->refHeightMap) + { + float height; + if (this->refHeightMap->GetHeight(position.x, position.z, height)) + { + position.y = height; + } + } +} + +//------------------------------------------------------------------------------ +/** @param nextState next state */ void @@ -172,14 +196,7 @@ this->playerPos = matWorld * vecMove; //adjust to terrain - if (this->refHeightMap) - { - float height; - if (this->refHeightMap->GetHeight(this->playerPos.x, this->playerPos.z, height)) - { - this->playerPos.y=height; - } - } + this->AdjustHeight( this->playerPos ); //update camera position applying threshold vector3 eyePos = matWorld * this->cameraOffset; @@ -203,6 +220,9 @@ this->TickProjectiles(float(frameTime)); + //enemies + this->TickEnemies(float(frameTime)); + //update entities ncTransform* transform = this->refPlayerEntity->GetComponentSafe<ncTransform>(); transform->SetPosition(this->playerPos); Added: branches/demos/src/shootem/nshootemstate_enemy.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_enemy.cc (rev 0) +++ branches/demos/src/shootem/nshootemstate_enemy.cc 2010-09-16 16:29:51 UTC (rev 126) @@ -0,0 +1,136 @@ +#include "precompiled/pchsummoner.h" +//------------------------------------------------------------------------------ +// nshooterstate_enemy.cc +// (C) 2010 M.A. Garcias <ma...@ma...> +//------------------------------------------------------------------------------ +#include "shootem/nshootemstate.h" + +#include "zombieentity/nctransform.h" +#include "nspatial/ncspatial.h" + +//------------------------------------------------------------------------------ + +void nShootemState::InitEnemies() +{ + nClass* enemyClass = nKernelServer::Instance()->FindClass("Scv"); + + //find entities corresponding to enemies, hide them until spawn + nEntityObject* entity = nEntityObjectServer::Instance()->GetFirstEntityObject(); + while (entity) + { + //check the class + if (entity->IsA(enemyClass)) + { + ncTransform* transform = entity->GetComponentSafe<ncTransform>(); + ncSpatial* spatial = entity->GetComponentSafe<ncSpatial>(); + const vector3& size = spatial->GetBBoxExtents(); + float radius2D = size.x * size.x + size.z * size.z; + + Enemy newEnemy; + newEnemy.vecPos = transform->GetPosition(); + newEnemy.radius2D = radius2D; + newEnemy.color.set(1,1,1,1); + newEnemy.state = ES_Idle; + newEnemy.hitPoints = 1; + newEnemy.fTimeElapsed = 0; + + newEnemy.refEntity.set(entity); + + this->enemies.Append(newEnemy); + } + + entity = nEntityObjectServer::Instance()->GetNextEntityObject(); + } +} + +//------------------------------------------------------------------------------ + +void nShootemState::SpawnEnemies() +{ + //activate enemies at a distance from the player + float distSq = this->fEnemySpawnDistance*this->fEnemySpawnDistance; + for (int index=0; index<this->enemies.Size(); index++) + { + Enemy& enemy = this->enemies[index]; + if (enemy.state == ES_Idle) + { + if (vector3(this->playerPos - enemy.vecPos).lensquared() < distSq) + { + enemy.state = ES_Active; + } + } + } +} + +//------------------------------------------------------------------------------ + +void nShootemState::TickEnemies(float fTimeElapsed) +{ + //TEMP- now it only changes them from Idle to Active + this->SpawnEnemies(); + + int index=0; + while (index < this->enemies.Size()) + { + //TODO- depending on state + Enemy& enemy = this->enemies.At(index); + switch (enemy.state) + { + case ES_Hit: + enemy.fTimeElapsed += fTimeElapsed; + if (enemy.fTimeElapsed > this->fEnemyHitTime) + enemy.state = ES_Active; + //fall through + + case ES_Active: + { + vector3 vecMove(this->playerPos - enemy.vecPos); + vecMove.y = 0; + vecMove.norm(); + polar2 angles(vecMove); + vecMove *= this->fEnemySpeed * fTimeElapsed; + enemy.vecPos += vecMove; + + //adjust to terrain + this->AdjustHeight( enemy.vecPos ); + + //update the entity position + ncTransform* transform = enemy.refEntity->GetComponentSafe<ncTransform>(); + transform->SetPosition(enemy.vecPos); + transform->SetPolar(angles); + } + break; + + case ES_Dying: + enemy.fTimeElapsed += fTimeElapsed; + if (enemy.fTimeElapsed > this->fEnemyDyingTime) + { + nEntityObjectServer::Instance()->RemoveEntityObject(enemy.refEntity); + this->enemies.EraseQuick(index); + continue; + } + } + + index++; + } +} + +//------------------------------------------------------------------------------ + +nShootemState::Enemy* nShootemState::CheckEnemies(const vector3& pos, float radius) +{ + int numEnemies = this->enemies.Size(); + float radiusSq = radius * radius; + for (int index=0; index<numEnemies; index++) + { + Enemy& enemy = this->enemies[index]; + if (enemy.state == ES_Dying) + continue; + + vector3 dist(pos - enemy.vecPos); + dist.y = 0;//compare in the XZ plane only + if (dist.lensquared() < (enemy.radius2D + radiusSq)) + return &this->enemies[index]; + } + return 0; +} Added: branches/demos/src/shootem/nshootemstate_events.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_events.cc (rev 0) +++ branches/demos/src/shootem/nshootemstate_events.cc 2010-09-16 16:29:51 UTC (rev 126) @@ -0,0 +1,28 @@ +#include "precompiled/pchsummoner.h" +//------------------------------------------------------------------------------ +// nshooterstate_events.cc +// (C) 2010 M.A. Garcias <ma...@ma...> +//------------------------------------------------------------------------------ +#include "shootem/nshootemstate.h" + +void nShootemState::OnEnemyHit(Enemy* enemy) +{ + n_assert(enemy); + enemy->hitPoints--; + if (enemy->hitPoints > 0) + enemy->state = ES_Hit; + else + enemy->state = ES_Dying; + + enemy->fTimeElapsed = 0.f; +} + +void nShootemState::OnPlayerHit() +{ + +} + +void nShootemState::OnLevelEnd() +{ + +} Modified: branches/demos/src/shootem/nshootemstate_projectile.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_projectile.cc 2010-09-16 14:20:13 UTC (rev 125) +++ branches/demos/src/shootem/nshootemstate_projectile.cc 2010-09-16 16:29:51 UTC (rev 126) @@ -41,13 +41,13 @@ proj.vecPos += proj.vecDir * this->fProjectileSpeed * fTimeElapsed; //TODO- check for collisions - //Enemy* enemy = this->CheckEnemies(proj.vecPos, proj.vecSize.x); - //if (enemy) - //{ - // this->OnEnemyHit(enemy); - // projectiles.EraseQuick(index); - // continue; - //} + Enemy* enemy = this->CheckEnemies(proj.vecPos, 0); + if (enemy) + { + this->OnEnemyHit(enemy); + projectiles.EraseQuick(index); + continue; + } index++; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-16 14:20:22
|
Revision: 125 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=125&view=rev Author: magarcias Date: 2010-09-16 14:20:13 +0000 (Thu, 16 Sep 2010) Log Message: ----------- Adjust to terrain Modified Paths: -------------- branches/demos/inc/shootem/nshootemstate.h branches/demos/src/shootem/nshootemstate.cc Modified: branches/demos/inc/shootem/nshootemstate.h =================================================================== --- branches/demos/inc/shootem/nshootemstate.h 2010-09-16 14:03:50 UTC (rev 124) +++ branches/demos/inc/shootem/nshootemstate.h 2010-09-16 14:20:13 UTC (rev 125) @@ -14,6 +14,8 @@ class nShader2; class nMesh2; +class nFloatMap; + //------------------------------------------------------------------------------ class nShootemState : public nCommonState { @@ -42,6 +44,7 @@ //virtual bool HandleInput(nTime frameTime); nRef<nAppViewport> refViewport; nRefEntityObject refPlayerEntity; + nRef<nFloatMap> refHeightMap; //graphics nRef<nShader2> refShaderColor; Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-16 14:03:50 UTC (rev 124) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-16 14:20:13 UTC (rev 125) @@ -14,6 +14,7 @@ #include "nlevel/nlevelmanager.h" #include "nlevel/nlevel.h" #include "zombieentity/nctransform.h" +#include "ngeomipmap/ncterraingmmclass.h" #include "gfx2/nshader2.h" #include "gfx2/nmesh2.h" @@ -89,6 +90,17 @@ this->playerRot.set(transform->GetEuler()); } + //find the terrain entity + nRefEntityObject refTerrain(level->FindEntity("outdoor")); + if (refTerrain.isvalid()) + { + ncTerrainGMMClass * terraincomp = refTerrain->GetClassComponent<ncTerrainGMMClass>(); + if (terraincomp) + { + this->refHeightMap = terraincomp->GetHeightMap(); + } + } + this->cameraPos = this->playerPos + this->cameraOffset; this->cameraAngles.set(n_deg2rad(-15.f), this->playerRot.y + n_deg2rad(180.f)); @@ -159,6 +171,16 @@ //update player position this->playerPos = matWorld * vecMove; + //adjust to terrain + if (this->refHeightMap) + { + float height; + if (this->refHeightMap->GetHeight(this->playerPos.x, this->playerPos.z, height)) + { + this->playerPos.y=height; + } + } + //update camera position applying threshold vector3 eyePos = matWorld * this->cameraOffset; //if ((eyePos.z - this->cameraPos.z) > this->cameraThreshold) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-16 14:04:01
|
Revision: 124 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=124&view=rev Author: magarcias Date: 2010-09-16 14:03:50 +0000 (Thu, 16 Sep 2010) Log Message: ----------- Added projectiles Modified Paths: -------------- branches/demos/inc/shootem/nshootemstate.h branches/demos/src/shootem/nshootemstate.cc Added Paths: ----------- branches/demos/src/shootem/nshootemstate_projectile.cc Modified: branches/demos/inc/shootem/nshootemstate.h =================================================================== --- branches/demos/inc/shootem/nshootemstate.h 2010-09-16 11:46:02 UTC (rev 123) +++ branches/demos/inc/shootem/nshootemstate.h 2010-09-16 14:03:50 UTC (rev 124) @@ -12,7 +12,8 @@ #include "entity/nentityobject.h" #include "entity/nrefentityobject.h" -class DemoApp; +class nShader2; +class nMesh2; //------------------------------------------------------------------------------ class nShootemState : public nCommonState { @@ -21,7 +22,8 @@ nShootemState(); /// destructor virtual ~nShootemState(); - + /// called when state is created + virtual void OnCreate(nApplication* application); /// Called when state is becoming active void OnStateEnter( const nString& prevState ); /// Called when state is becoming inactive @@ -31,7 +33,7 @@ /// Called on state to perform 3d rendering virtual void OnRender3D(); /// Called on state to perform 2d rendering - //virtual void OnRender2D(); + virtual void OnRender2D(); bool HandleInput(nTime frameTime); @@ -41,6 +43,10 @@ nRef<nAppViewport> refViewport; nRefEntityObject refPlayerEntity; + //graphics + nRef<nShader2> refShaderColor; + nRef<nMesh2> refMeshCone; + //player vector3 playerPos; vector3 playerRot; @@ -52,6 +58,25 @@ vector3 cameraPos; polar2 cameraAngles; float cameraThreshold; + + //projectiles + struct Projectile + { + float fTimeElapsed; + vector3 vecPos; + vector3 vecRot; + vector3 vecDir; + vector3 vecSize; + }; + + nArray<Projectile> projectiles;//current projectiles + float fProjectileMaxTime; + float fProjectileSpeed; + + void AddProjectile(); + void TickProjectiles(float frameTime); + void DrawProjectiles(); + }; //------------------------------------------------------------------------------ Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-16 11:46:02 UTC (rev 123) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-16 14:03:50 UTC (rev 124) @@ -15,6 +15,9 @@ #include "nlevel/nlevel.h" #include "zombieentity/nctransform.h" +#include "gfx2/nshader2.h" +#include "gfx2/nmesh2.h" + nNebulaClass(nShootemState, "ncommonstate"); //------------------------------------------------------------------------------ @@ -27,6 +30,9 @@ this->cameraOffset.set(0, 3.f, -5.f); this->cameraThreshold = 1.f; this->cameraAngles.set(n_deg2rad(-15), 0.f); + + this->fProjectileMaxTime = 2.f; + this->fProjectileSpeed = 10.f; } //------------------------------------------------------------------------------ @@ -38,6 +44,34 @@ //------------------------------------------------------------------------------ void +nShootemState::OnCreate(nApplication* application) +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + + this->refShaderColor = gfxServer->NewShader("color"); + n_assert(this->refShaderColor.isvalid()); + this->refShaderColor->SetFilename("home:data/demos/shaders/color.fx"); + if (!this->refShaderColor->Load()) + { + this->refShaderColor->Release(); + this->refShaderColor.invalidate(); + } + + this->refMeshCone = gfxServer->NewMesh("cone"); + n_assert(this->refMeshCone.isvalid()); + this->refMeshCone->SetFilename("home:data/demos/meshes/cone.nvx2"); + if (!this->refMeshCone->Load()) + { + this->refMeshCone->Release(); + this->refMeshCone.invalidate(); + } + + nCommonState::OnCreate(application); +} + +//------------------------------------------------------------------------------ + +void nShootemState::OnStateEnter( const nString & prevState ) { // getting viewport @@ -80,9 +114,11 @@ void nShootemState::OnFrame() { - nInputServer* inputServer = nInputServer::Instance(); nTime frameTime = this->app->GetFrameTime(); + //---HandleInput(frameTime)--- + nInputServer* inputServer = nInputServer::Instance(); + //player rotate float angleSpace = this->turnSpeed * float(frameTime); @@ -136,7 +172,15 @@ //this->cameraPos.x = eyePos.x; this->cameraPos = eyePos; this->cameraAngles.rho = this->playerRot.y + n_deg2rad(180);//can't figure this out! - + + //shoot + if (inputServer->GetButton("PrimaryAttack")) + { + this->AddProjectile(); + } + + this->TickProjectiles(float(frameTime)); + //update entities ncTransform* transform = this->refPlayerEntity->GetComponentSafe<ncTransform>(); transform->SetPosition(this->playerPos); @@ -162,3 +206,23 @@ { this->refViewport->OnRender3D(); } + +//------------------------------------------------------------------------------ +/** +*/ +void +nShootemState::OnRender2D() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + + //draw projectiles + this->DrawProjectiles(); + + //render text + float rowheight = 32.f / gfxServer->GetDisplayMode().GetHeight(); + nString str; + + //debug text + str.Format("Projectiles = %d", this->projectiles.Size()); + gfxServer->Text( str.Get(), vector4(1.f,1.f,0,1), -1.f, 1.f - rowheight );//lower-left corner +} Added: branches/demos/src/shootem/nshootemstate_projectile.cc =================================================================== --- branches/demos/src/shootem/nshootemstate_projectile.cc (rev 0) +++ branches/demos/src/shootem/nshootemstate_projectile.cc 2010-09-16 14:03:50 UTC (rev 124) @@ -0,0 +1,93 @@ +#include "precompiled/pchsummoner.h" +//------------------------------------------------------------------------------ +// nshootemstate_projectile.cc +// (C) 2010 M.A. Garcias <ma...@ma...> +//------------------------------------------------------------------------------ +#include "shootem/nshootemstate.h" + +#include "gfx2/ngfxserver2.h" +#include "gfx2/nshader2.h" +#include "gfx2/nmesh2.h" + +void nShootemState::AddProjectile() +{ + Projectile& projectile = this->projectiles.PushBack(Projectile()); + vector3 pos(this->playerPos); + pos.y += 1.0f; + projectile.vecPos.set(pos);//TODO- add offset + projectile.vecRot.set(this->playerRot); + matrix44 matWorld; + matWorld.rotate_y(this->playerRot.y); + projectile.vecDir = matWorld * vector3(0,0,1); + projectile.vecSize.set( .1f, .1f, .1f ); + projectile.fTimeElapsed = 0.f; +} + +//------------------------------------------------------------------------------ + +void nShootemState::TickProjectiles(float fTimeElapsed) +{ + int index=0; + while (index < this->projectiles.Size()) + { + Projectile& proj = this->projectiles.At(index); + proj.fTimeElapsed += fTimeElapsed; + if (proj.fTimeElapsed > this->fProjectileMaxTime) + { + projectiles.EraseQuick(index); + continue; + } + + proj.vecPos += proj.vecDir * this->fProjectileSpeed * fTimeElapsed; + + //TODO- check for collisions + //Enemy* enemy = this->CheckEnemies(proj.vecPos, proj.vecSize.x); + //if (enemy) + //{ + // this->OnEnemyHit(enemy); + // projectiles.EraseQuick(index); + // continue; + //} + + index++; + } +} + +//------------------------------------------------------------------------------ + +void nShootemState::DrawProjectiles() +{ + n_assert(this->refShaderColor.isvalid()); + n_assert(this->refMeshCone.isvalid()); + + nGfxServer2* gfxServer = nGfxServer2::Instance(); + gfxServer->SetShader(this->refShaderColor); + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(1,0,0,1) ); + + int numPasses = this->refShaderColor->Begin(false); + + for (int pass=0; pass<numPasses; pass++) + { + this->refShaderColor->BeginPass(pass); + + gfxServer->SetMesh(this->refMeshCone, this->refMeshCone); + gfxServer->SetVertexRange(0, this->refMeshCone->GetNumVertices()); + gfxServer->SetIndexRange(0, this->refMeshCone->GetNumIndices()); + + int numProjectiles = this->projectiles.Size(); + for (int index=0; index<numProjectiles; index++) + { + const Projectile& proj = this->projectiles.At(index); + matrix44 matWorld; + matWorld.scale(proj.vecSize); + matWorld.rotate_y(proj.vecRot.y); + matWorld.translate(proj.vecPos); + gfxServer->SetTransform(nGfxServer2::Model, matWorld); + gfxServer->DrawIndexedNS(nGfxServer2::TriangleList); + } + + this->refShaderColor->EndPass(); + } + + this->refShaderColor->End(); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-16 11:46:12
|
Revision: 123 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=123&view=rev Author: magarcias Date: 2010-09-16 11:46:02 +0000 (Thu, 16 Sep 2010) Log Message: ----------- Ported Shoot'em Demo to Summoner Modified Paths: -------------- branches/demos/inc/shootem/nshootemstate.h branches/demos/src/shootem/nshootemstate.cc branches/demos/src/shootem/shootemapp.cc trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld trunk/zombie/code/conjurer/conjurer/inc/conjurer/nsummonerapp.h trunk/zombie/code/conjurer/conjurer/src/conjurer/nsummonerapp_main.cc Modified: branches/demos/inc/shootem/nshootemstate.h =================================================================== --- branches/demos/inc/shootem/nshootemstate.h 2010-09-16 09:20:32 UTC (rev 122) +++ branches/demos/inc/shootem/nshootemstate.h 2010-09-16 11:46:02 UTC (rev 123) @@ -45,10 +45,11 @@ vector3 playerPos; vector3 playerRot; float playerSpeed; + float turnSpeed; //camera + vector3 cameraOffset; vector3 cameraPos; - vector3 cameraOffset; polar2 cameraAngles; float cameraThreshold; }; Modified: branches/demos/src/shootem/nshootemstate.cc =================================================================== --- branches/demos/src/shootem/nshootemstate.cc 2010-09-16 09:20:32 UTC (rev 122) +++ branches/demos/src/shootem/nshootemstate.cc 2010-09-16 11:46:02 UTC (rev 123) @@ -22,10 +22,11 @@ nShootemState::nShootemState() { this->playerSpeed = 5.f; + this->turnSpeed = n_deg2rad(60.f); - this->cameraOffset.set(-5.f, 4.f, 1.f);//TEMP! - this->cameraThreshold = 0.f;//1.f; - this->cameraAngles.set(-0.19f, 4.69f);//TEMP! + this->cameraOffset.set(0, 3.f, -5.f); + this->cameraThreshold = 1.f; + this->cameraAngles.set(n_deg2rad(-15), 0.f); } //------------------------------------------------------------------------------ @@ -55,6 +56,7 @@ } this->cameraPos = this->playerPos + this->cameraOffset; + this->cameraAngles.set(n_deg2rad(-15.f), this->playerRot.y + n_deg2rad(180.f)); nCommonState::OnStateEnter(prevState); } @@ -81,9 +83,21 @@ nInputServer* inputServer = nInputServer::Instance(); nTime frameTime = this->app->GetFrameTime(); + //player rotate + float angleSpace = this->turnSpeed * float(frameTime); + + if (inputServer->GetButton("StrafeLeft")) + { + this->playerRot.y += angleSpace; + } + if (inputServer->GetButton("StrafeRight")) + { + this->playerRot.y -= angleSpace; + } + + //player move float moveSpace = this->playerSpeed * float(frameTime); - //camera move vector3 vecMove; if (inputServer->GetButton("Forward")) { @@ -93,26 +107,24 @@ { vecMove.z -= moveSpace; } - if (inputServer->GetButton("StrafeLeft")) - { - vecMove.x -= moveSpace; - } - if (inputServer->GetButton("StrafeRight")) - { - vecMove.x += moveSpace; - } + //if (inputServer->GetButton("StrafeLeft")) + //{ + // vecMove.x -= moveSpace; + //} + //if (inputServer->GetButton("StrafeRight")) + //{ + // vecMove.x += moveSpace; + //} + matrix44 matWorld; + matWorld.rotate_y(this->playerRot.y); + matWorld.translate(this->playerPos); + //update player position - vector3 playerPos = this->playerPos + vecMove; - this->playerPos = playerPos; + this->playerPos = matWorld * vecMove; //update camera position applying threshold - matrix44 matWorld; - matWorld.rotate_x(this->playerRot.x); - matWorld.rotate_y(this->playerRot.y); - matWorld.invert_simple(); - vector3 cameraOffset = matWorld * this->cameraOffset; - vector3 eyePos = this->playerPos + cameraOffset; + vector3 eyePos = matWorld * this->cameraOffset; //if ((eyePos.z - this->cameraPos.z) > this->cameraThreshold) //{ // this->cameraPos.z = eyePos.z - this->cameraThreshold; @@ -123,10 +135,12 @@ //} //this->cameraPos.x = eyePos.x; this->cameraPos = eyePos; + this->cameraAngles.rho = this->playerRot.y + n_deg2rad(180);//can't figure this out! //update entities ncTransform* transform = this->refPlayerEntity->GetComponentSafe<ncTransform>(); transform->SetPosition(this->playerPos); + transform->SetEuler(this->playerRot); this->refViewport->SetViewerPos(this->cameraPos); this->refViewport->SetViewerAngles(this->cameraAngles); Modified: branches/demos/src/shootem/shootemapp.cc =================================================================== --- branches/demos/src/shootem/shootemapp.cc 2010-09-16 09:20:32 UTC (rev 122) +++ branches/demos/src/shootem/shootemapp.cc 2010-09-16 11:46:02 UTC (rev 123) @@ -257,8 +257,8 @@ //update camera position applying threshold matrix44 matWorld; matWorld.rotate_y(this->vecPlayerRot.y); - //matWorld.invert_simple(); - this->vecEye = this->vecPlayerPos + matWorld * this->vecCameraOffset; + matWorld.translate(this->vecPlayerPos); + this->vecEye = /*this->vecPlayerPos + */ matWorld * this->vecCameraOffset; this->vecRot.set(n_deg2rad(30), this->vecPlayerRot.y, 0);//vecCameraRotOffset+vecPlayerRot //vector3 eyePos = this->vecPlayerPos + this->vecCameraOffset; Modified: trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld =================================================================== --- trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld 2010-09-16 09:20:32 UTC (rev 122) +++ trunk/zombie/code/conjurer/conjurer/bldfiles/summoner.bld 2010-09-16 11:46:02 UTC (rev 123) @@ -3,7 +3,7 @@ #=============================================================================== #=============================================================================== -# conjurer modules +# summoner modules #=============================================================================== beginmodule summoner setdir conjurer @@ -33,13 +33,13 @@ setfiles { nsummonerstate } - setheaders{ + setheaders { nsummonerstate } endmodule #=============================================================================== -# conjurer Targets +# summoner Targets #=============================================================================== begintarget summoner annotate "summoner app" @@ -53,6 +53,9 @@ summoner nsummonerapp nsummonerstate + + nshootemstate + shootemapp } settargetdeps { gpbasicactions Modified: trunk/zombie/code/conjurer/conjurer/inc/conjurer/nsummonerapp.h =================================================================== --- trunk/zombie/code/conjurer/conjurer/inc/conjurer/nsummonerapp.h 2010-09-16 09:20:32 UTC (rev 122) +++ trunk/zombie/code/conjurer/conjurer/inc/conjurer/nsummonerapp.h 2010-09-16 11:46:02 UTC (rev 123) @@ -277,9 +277,7 @@ nRef<nAssetLoadState> refLoaderState; ///< asset load state nRef<nAppViewportUI> refViewportUI; ///< viewport layout - //nRef<nAppViewport> refRnsViewport; ///< game viewport - //nRef<nAppViewport> refMapViewport; ///< map viewport - //nRef<nPreviewViewport> refPreview; ///< preview viewport + nRef<nAppViewport> refRnsViewport; ///< game viewport nArray<nViewerParams> bookmarks; ///< bookmark array // save manager used to save the editor state Modified: trunk/zombie/code/conjurer/conjurer/src/conjurer/nsummonerapp_main.cc =================================================================== --- trunk/zombie/code/conjurer/conjurer/src/conjurer/nsummonerapp_main.cc 2010-09-16 09:20:32 UTC (rev 122) +++ trunk/zombie/code/conjurer/conjurer/src/conjurer/nsummonerapp_main.cc 2010-09-16 11:46:02 UTC (rev 123) @@ -216,6 +216,12 @@ this->refViewportUI->SetClientRect(0, 0, displayMode.GetWidth(), displayMode.GetHeight()); this->refViewportUI->Open(); + // load viewport for renaissance states + this->refRnsViewport = static_cast<nAppViewport*>(kernelServer->LoadAs("home:data/appdata/conjurer/viewport/rnsview.n2", "/usr/rnsview")); + n_assert(this->refRnsViewport.isvalid()); + n_assert(this->refRnsViewport->IsA("nappviewport")); + this->refRnsViewport->Open(); + // create debug module for editor component visualizations n_verify( nDebugServer::Instance()->CreateDebugModule("neditordebugmodule", "editor") ); n_verify( nDebugServer::Instance()->CreateDebugModule("nscenedebugmodule", "scene") ); @@ -224,6 +230,8 @@ this->CreateState("nsummonerstate", "editor"); this->CreateState("nassetloadstate", "loader"); + this->CreateState("nshootemstate", "game"); + // if state need to be created in the begin, use FindState to force creation this->FindState("editor"); this->FindState("loader"); @@ -297,6 +305,10 @@ this->refViewportUI->Close(); this->refViewportUI->Release(); } + if (this->refRnsViewport.isvalid()) + { + this->refRnsViewport->Release(); + } if (this->refMaterial.isvalid()) { this->refMaterial->Release(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-16 09:20:39
|
Revision: 122 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=122&view=rev Author: magarcias Date: 2010-09-16 09:20:32 +0000 (Thu, 16 Sep 2010) Log Message: ----------- Player and camera rotation Modified Paths: -------------- branches/demos/inc/shootem/shootemapp.h branches/demos/src/shootem/shootemapp.cc Modified: branches/demos/inc/shootem/shootemapp.h =================================================================== --- branches/demos/inc/shootem/shootemapp.h 2010-09-16 09:04:48 UTC (rev 121) +++ branches/demos/inc/shootem/shootemapp.h 2010-09-16 09:20:32 UTC (rev 122) @@ -45,6 +45,7 @@ vector3 vecRot; vector3 vecPlayerPos; + vector3 vecPlayerRot; vector3 vecCameraOffset; float fCameraThreshold; @@ -53,6 +54,7 @@ matrix44 matProj; float fPlayerSpeed; + float fTurnSpeed; float fPlayerSize; float fPlayerTimeElapsed; Modified: branches/demos/src/shootem/shootemapp.cc =================================================================== --- branches/demos/src/shootem/shootemapp.cc 2010-09-16 09:04:48 UTC (rev 121) +++ branches/demos/src/shootem/shootemapp.cc 2010-09-16 09:20:32 UTC (rev 122) @@ -23,6 +23,7 @@ this->bShowBoxes = false; this->vecPlayerPos.set(0,0,0); + this->vecPlayerRot.set(0,0,0); this->vecCameraOffset.set(0,3,-3); this->fCameraThreshold = 1.f; @@ -32,6 +33,7 @@ this->fPlayerSpeed = 5.f; this->fPlayerSize = 1.f; + this->fTurnSpeed = n_deg2rad(360.f); this->fPlayerDyingTime = 2.f; this->fPlayerTimeElapsed = 0.f; @@ -191,9 +193,20 @@ break; case PS_Alive: - float moveSpace = this->fPlayerSpeed * fTimeElapsed;//=cameraSpeed + //camera rotate + float mouse_x = (inputServer->GetSlider("slider_left") - inputServer->GetSlider("slider_right")); + float mouse_y = (inputServer->GetSlider("slider_up") - inputServer->GetSlider("slider_down")); + float angleSpace = this->fTurnSpeed * 10.f * fTimeElapsed; + if (inputServer->GetButton("right_pressed")) + { + this->vecPlayerRot.y -= mouse_x * angleSpace;//unlike cameras, rotation is interpreted the other way + this->vecPlayerRot.x -= mouse_y * angleSpace; + } + //camera move + float moveSpace = this->fPlayerSpeed * fTimeElapsed; + vector3 vecMove; if (inputServer->GetButton("forward")) { @@ -242,17 +255,23 @@ } //update camera position applying threshold - vector3 eyePos = this->vecPlayerPos + this->vecCameraOffset; - if ((eyePos.z - this->vecEye.z) > this->fCameraThreshold) - { - this->vecEye.z = eyePos.z - this->fCameraThreshold; - } - else if ((this->vecEye.z - eyePos.z) > this->fCameraThreshold) - { - this->vecEye.z = eyePos.z + this->fCameraThreshold; - } - this->vecEye.x = eyePos.x; + matrix44 matWorld; + matWorld.rotate_y(this->vecPlayerRot.y); + //matWorld.invert_simple(); + this->vecEye = this->vecPlayerPos + matWorld * this->vecCameraOffset; + this->vecRot.set(n_deg2rad(30), this->vecPlayerRot.y, 0);//vecCameraRotOffset+vecPlayerRot + //vector3 eyePos = this->vecPlayerPos + this->vecCameraOffset; + //if ((eyePos.z - this->vecEye.z) > this->fCameraThreshold) + //{ + // this->vecEye.z = eyePos.z - this->fCameraThreshold; + //} + //else if ((this->vecEye.z - eyePos.z) > this->fCameraThreshold) + //{ + // this->vecEye.z = eyePos.z + this->fCameraThreshold; + //} + //this->vecEye.x = eyePos.x; + //shoot if (inputServer->GetButton("fire")) { @@ -642,6 +661,8 @@ else { matrix44 matWorld; + //matWorld.rotate_x(this->vecPlayerRot.x); + matWorld.rotate_y(this->vecPlayerRot.y); matWorld.scale(playerScale); matWorld.translate(this->vecPlayerPos); this->shaderParams.SetArg(nShaderState::MatDiffuse, playerColor); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-16 09:04:54
|
Revision: 121 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=121&view=rev Author: magarcias Date: 2010-09-16 09:04:48 +0000 (Thu, 16 Sep 2010) Log Message: ----------- Moved rnsshoot to Demos instead Removed Paths: ------------- branches/rnsshoot/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-15 08:53:47
|
Revision: 119 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=119&view=rev Author: magarcias Date: 2010-09-15 08:53:41 +0000 (Wed, 15 Sep 2010) Log Message: ----------- Demo resources Modified Paths: -------------- trunk/zombie/data/demos/scripts/startup.lua trunk/zombie/data/demos/shaders/ambient.fx trunk/zombie/data/demos/shaders/color.fx trunk/zombie/data/demos/shaders/diffuse.fx Added Paths: ----------- trunk/zombie/data/demos/meshes/cone.nvx2 trunk/zombie/data/demos/meshes/plane.n3d2 Added: trunk/zombie/data/demos/meshes/cone.nvx2 =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/meshes/cone.nvx2 ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/meshes/plane.n3d2 =================================================================== --- trunk/zombie/data/demos/meshes/plane.n3d2 (rev 0) +++ trunk/zombie/data/demos/meshes/plane.n3d2 2010-09-15 08:53:41 UTC (rev 119) @@ -0,0 +1,14 @@ +type n3d2 +numgroups 1 +numvertices 4 +vertexwidth 5 +numtris 2 +numedges 0 +vertexcomps coord uv0 +g 0 4 0 2 0 1 +v 0.0 0.0 1.0 0.0 0.0 +v 1.0 0.0 1.0 1.0 0.0 +v 1.0 0.0 0.0 1.0 1.0 +v 0.0 0.0 0.0 0.0 1.0 +t 0 2 1 +t 0 3 2 Modified: trunk/zombie/data/demos/scripts/startup.lua =================================================================== --- trunk/zombie/data/demos/scripts/startup.lua 2010-09-14 15:03:01 UTC (rev 118) +++ trunk/zombie/data/demos/scripts/startup.lua 2010-09-15 08:53:41 UTC (rev 119) @@ -22,7 +22,8 @@ proj = f:manglepath('proj:') home = f:manglepath('home:') - f:setassign('wc', proj) + f:setassign('wc', 'home:../scourge') + f:setassign('wctextures', 'wc:export/textures') f:setassign('shaders', home .. '/data/shaders/2.0/') popcwd() @@ -60,6 +61,10 @@ input:map('keyb0:s.pressed', 'backward') input:map('keyb0:a.pressed', 'strafe_left') input:map('keyb0:d.pressed', 'strafe_right') + + input:map('keyb0:space.down', 'jump') + input:map('mouse0:btn0.down', 'fire') + input:map('mouse0:g.down', 'grenade') input:map( 'keyb0:esc.pressed', 'menu' ) input:map( 'keyb0:left.pressed', 'left' ) @@ -70,6 +75,7 @@ input:map( 'keyb0:0.down', 'wireframe' ) input:map( 'keyb0:space.down', 'reset' ) + input:map( 'keyb0:o.down', 'ortho' ) input:map( 'keyb0:t.down', 'toggle' ) input:map( 'keyb0:l.down', 'light' ) input:map( 'keyb0:x.down', 'axes' ) Modified: trunk/zombie/data/demos/shaders/ambient.fx =================================================================== --- trunk/zombie/data/demos/shaders/ambient.fx 2010-09-14 15:03:01 UTC (rev 118) +++ trunk/zombie/data/demos/shaders/ambient.fx 2010-09-15 08:53:41 UTC (rev 119) @@ -85,10 +85,10 @@ float4 psMain(const VsOutput psIn) : COLOR { float4 color = tex2D( ColorSampler, psIn.uv0 ); - float spec = .7f + tex2D( SpecSampler, psIn.uv0 ) * .3f; + float spec = .5f * tex2D( SpecSampler, psIn.uv0 ) + .5f; float4 diff = texCUBE( DiffCubeSampler, psIn.normal ); - return color * spec * diff; + return spec * diff * color; } technique t0 Modified: trunk/zombie/data/demos/shaders/color.fx =================================================================== --- trunk/zombie/data/demos/shaders/color.fx 2010-09-14 15:03:01 UTC (rev 118) +++ trunk/zombie/data/demos/shaders/color.fx 2010-09-15 08:53:41 UTC (rev 119) @@ -8,15 +8,11 @@ matrix<float,4,3> JointPalette[72]; -int mipMapLodBias; - int FillMode = 3; //1=Point, 2=Wireframe, 3=Solid int CullMode = 2; //1=NoCull, 2=CW, 3=CCW -texture diffMap; +float4 MatDiffuse = float4(1.f,0.f,1.f,0.f); -#include "shaders:../lib/diffsampler.fx" - struct VsInput { float4 position : POSITION; @@ -46,7 +42,7 @@ float4 psMain(const VsOutput psIn) : COLOR { - return tex2D( DiffSampler, psIn.uv0 ); + return MatDiffuse; } technique tColorStatic Modified: trunk/zombie/data/demos/shaders/diffuse.fx =================================================================== --- trunk/zombie/data/demos/shaders/diffuse.fx 2010-09-14 15:03:01 UTC (rev 118) +++ trunk/zombie/data/demos/shaders/diffuse.fx 2010-09-15 08:53:41 UTC (rev 119) @@ -13,6 +13,8 @@ int FillMode = 3; //1=Point, 2=Wireframe, 3=Solid int CullMode = 2; //1=NoCull, 2=CW, 3=CCW +float4 MatDiffuse = float4(1.f,1.f,1.f,1.f); + texture DiffMap0 : DIFFUSE; sampler2D ColorSampler = sampler_state @@ -54,7 +56,7 @@ float4 psMain(const VsOutput psIn) : COLOR { - return tex2D( ColorSampler, psIn.uv0 ); + return MatDiffuse * tex2D( ColorSampler, psIn.uv0 ); } technique tColorStatic This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-14 15:03:10
|
Revision: 118 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=118&view=rev Author: magarcias Date: 2010-09-14 15:03:01 +0000 (Tue, 14 Sep 2010) Log Message: ----------- Added models Modified Paths: -------------- branches/rnsshoot/bldfiles/shootem.bld branches/rnsshoot/inc/shootem/shootemapp.h branches/rnsshoot/src/shootem/runtime.cc branches/rnsshoot/src/shootem/shootemapp.cc Added Paths: ----------- branches/rnsshoot/inc/shootem/model.h branches/rnsshoot/inc/shootem/textfile.h branches/rnsshoot/src/shootem/shootemapp_model.cc branches/rnsshoot/src/shootem/textfile.cc Modified: branches/rnsshoot/bldfiles/shootem.bld =================================================================== --- branches/rnsshoot/bldfiles/shootem.bld 2010-09-13 16:32:37 UTC (rev 117) +++ branches/rnsshoot/bldfiles/shootem.bld 2010-09-14 15:03:01 UTC (rev 118) @@ -8,10 +8,16 @@ beginmodule shootemapp setdir shootem setfiles { - runtime shootemapp + runtime + shootemapp + shootemapp_model + textfile } setheaders{ - personal shootemapp + personal + shootemapp + model + textfile } setlibs_win32 { shell32.lib Added: branches/rnsshoot/inc/shootem/model.h =================================================================== --- branches/rnsshoot/inc/shootem/model.h (rev 0) +++ branches/rnsshoot/inc/shootem/model.h 2010-09-14 15:03:01 UTC (rev 118) @@ -0,0 +1,29 @@ +#ifndef SHOOTEMAPP_MODEL_H +#define SHOOTEMAPP_MODEL_H + +#include "gfx2/ngfxserver2.h" + +enum +{ + Model_Player = 0, + Model_Enemy, + Model_Tree, + NumModels, +}; + +class Shape +{ +public: + nRef<nMesh2> refMesh; + nRef<nShader2> refShader; + nShaderParams shaderParams; +}; + +class Model +{ +public: + nArray<Shape> shapes; + nArray<nRef<nTexture2> > textures; +}; + +#endif //SHOOTEMAPP_MODEL_H Modified: branches/rnsshoot/inc/shootem/shootemapp.h =================================================================== --- branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 16:32:37 UTC (rev 117) +++ branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-14 15:03:01 UTC (rev 118) @@ -6,13 +6,13 @@ A minimal demo framework for Zombie apps */ +#include "kernel/nref.h" #include "util/nstring.h" -#include "mathlib/matrix.h" - -#include "kernel/nref.h" #include "util/narray.h" #include "mathlib/matrix.h" +#include "gfx2/ngfxserver2.h" + //------------------------------------------------------------------------------ class nMesh2; @@ -20,6 +20,9 @@ class nShader2; class nResource; +class Model; +class Shape; + #define N_REF_LOAD_MESH(a,name,file) a = gfxServer->NewMesh(name);\ if (!this->LoadResource(a, file)) return false; @@ -48,6 +51,7 @@ //options bool bWireframe; bool bCameraOrtho; + bool bShowBoxes; vector3 vecEye; vector3 vecRot; @@ -79,6 +83,21 @@ void ResetLevel(); void ResetGame(); + //models + bool LoadModels(); + void ReleaseModels(); + + bool LoadModel(Model* model, const char* path); + bool LoadScene(Model* model, const char* path); + bool LoadMaterial(Shape* shape, const char* path); + void ReleaseModel(Model* model); + + void DrawModel(Model* model, matrix44& matWorld); + nShaderParams shaderParams; + + nArray<Model*> models; + int playerModel;//index into models[] + //fire struct Projectile { Added: branches/rnsshoot/inc/shootem/textfile.h =================================================================== --- branches/rnsshoot/inc/shootem/textfile.h (rev 0) +++ branches/rnsshoot/inc/shootem/textfile.h 2010-09-14 15:03:01 UTC (rev 118) @@ -0,0 +1,32 @@ +#ifndef TEXTFILE_H +#define TEXTFILE_H + +#include "util/nstring.h" + +//------------------------------------------------------------------------------ +class nFile; +class TextFile +{ +public: + TextFile(); + TextFile(const char* filename); + ~TextFile(); + + bool Open(const char* filename); + void Close(); + bool IsOpen(); + + bool Eof(); + void ReadLine(); + bool Contains(const char* str); + bool Extract(const char* start, const char* end, nString& out); + +private: + nFile* file; + nString curLine; + int curIndex; +}; + +//------------------------------------------------------------------------------ + +#endif //TEXTFILE_H Modified: branches/rnsshoot/src/shootem/runtime.cc =================================================================== --- branches/rnsshoot/src/shootem/runtime.cc 2010-09-13 16:32:37 UTC (rev 117) +++ branches/rnsshoot/src/shootem/runtime.cc 2010-09-14 15:03:01 UTC (rev 118) @@ -53,8 +53,8 @@ bool alwaysOnTopArg = args.GetBoolArg("-alwaysontop"); ushort xPosArg = (ushort) args.GetIntArg("-x", 0); ushort yPosArg = (ushort) args.GetIntArg("-y", 0); - ushort widthArg = (ushort) args.GetIntArg("-w", 640); - ushort heightArg = (ushort) args.GetIntArg("-h", 480); + ushort widthArg = (ushort) args.GetIntArg("-w", 800); + ushort heightArg = (ushort) args.GetIntArg("-h", 600); // initialize Nebula runtime nKernelServer* kernel = n_new( nKernelServer ); Modified: branches/rnsshoot/src/shootem/shootemapp.cc =================================================================== --- branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 16:32:37 UTC (rev 117) +++ branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-14 15:03:01 UTC (rev 118) @@ -1,4 +1,5 @@ #include "shootem/shootemapp.h" +#include "shootem/model.h" #include "kernel/nfileserver2.h" #include "kernel/ntimeserver.h" @@ -17,13 +18,15 @@ { this->bWireframe = false; this->bCameraOrtho = false; + this->bShowBoxes = false; this->vecPlayerPos.set(0,0,0); - this->vecCameraOffset.set(0,7,-2); + this->vecCameraOffset.set(0,3,-5); this->fCameraThreshold = 1.f; this->vecEye = this->vecPlayerPos + this->vecCameraOffset; - this->vecRot.set(n_deg2rad(60),0,0); //looking down 30 degrees + //this->vecRot.set(n_deg2rad(60),0,0); //looking down 30 degrees + this->vecRot.set(n_deg2rad(30),0,0); this->fPlayerSpeed = 5.f; this->fPlayerSize = 1.f; @@ -133,6 +136,8 @@ N_REF_LOAD_SHADER(this->refShaderColor, "color", "proj:shaders/color.fx"); N_REF_LOAD_SHADER(this->refShaderDiffuse, "diffuse", "proj:shaders/diffuse.fx"); + if (!this->LoadModels()) return false; + return true; } @@ -150,6 +155,8 @@ N_REF_RELEASE(this->refShaderColor); N_REF_RELEASE(this->refShaderDiffuse); + this->ReleaseModels(); + this->projectiles.Clear(); this->tiles.Clear(); this->props.Clear(); @@ -165,9 +172,12 @@ if (inputServer->GetButton("wireframe")) this->bWireframe = !this->bWireframe; - if (inputServer->GetButton("toggle")) + if (inputServer->GetButton("ortho")) this->bCameraOrtho = !this->bCameraOrtho; + if (inputServer->GetButton("toggle")) + this->bShowBoxes = !this->bShowBoxes; + switch (this->playerState) { case PS_Dying: @@ -239,7 +249,8 @@ { this->vecEye.z = eyePos.z + this->fCameraThreshold; } - + this->vecEye.x = eyePos.x; + //shoot if (inputServer->GetButton("fire")) { @@ -317,32 +328,51 @@ void ShootemApp::DrawProps() { - this->BeginDraw( this->refShaderColor, this->refMeshCone ); - this->BeginPass( this->refShaderColor, 0 ); - this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - int numProps = this->props.Size(); - for (int index=0; index<numProps; index++) + if (this->bShowBoxes) { - Prop& prop = this->props.At(index); + this->BeginDraw( this->refShaderColor, this->refMeshCone ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + int numProps = this->props.Size(); + for (int index=0; index<numProps; index++) + { + Prop& prop = this->props.At(index); - if (prop.highlight) + if (prop.highlight) + { + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(1,1,0,1) ); + prop.highlight = false; + } + else + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(0,1,0,1) ); + + matrix44 matWorld; + matWorld.scale(prop.vecScale); + matWorld.rotate_x(n_deg2rad(90.f)); + vector3 pos(prop.vecPos); + pos += vector3(0,prop.vecScale.y,0);//model offset + matWorld.translate(pos); + this->Draw(matWorld); + } + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); + } + else + { + int numProps = this->props.Size(); + for (int index=0; index<numProps; index++) { - this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(1,1,0,1) ); - prop.highlight = false; + Prop& prop = this->props.At(index); + + matrix44 matWorld; + vector3 scale(prop.vecScale); + scale *= .3f; + matWorld.scale(scale); + matWorld.translate(prop.vecPos); + + this->DrawModel(this->models[Model_Tree], matWorld); } - else - this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(0,1,0,1) ); - - matrix44 matWorld; - matWorld.scale(prop.vecScale); - matWorld.rotate_x(n_deg2rad(90.f)); - vector3 pos(prop.vecPos); - pos += vector3(0,prop.vecScale.y,0);//model offset - matWorld.translate(pos); - this->Draw(matWorld); } - this->EndPass( this->refShaderColor ); - this->EndDraw( this->refShaderColor ); } //------------------------------------------------------------------------------ @@ -495,33 +525,58 @@ void ShootemApp::DrawEnemies() { - this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); - this->BeginPass( this->refShaderColor, 0 ); - this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - - int numEnemies = this->enemies.Size(); - for (int index=0; index<numEnemies; index++) + if (this->bShowBoxes) { - Enemy& enemy = this->enemies.At(index); + this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - vector4 color(enemy.color); - if (enemy.state == ES_Hit) - color.lerp(vector4(1,1,0,1), enemy.fTimeElapsed / this->fEnemyHitTime); - if (enemy.state == ES_Dying) - color.lerp(enemy.color, vector4(0,0,0,1), enemy.fTimeElapsed / this->fEnemyDyingTime ); + int numEnemies = this->enemies.Size(); + for (int index=0; index<numEnemies; index++) + { + Enemy& enemy = this->enemies.At(index); - this->refShaderColor->SetVector4( nShaderState::MatDiffuse, color ); + vector4 color(enemy.color); + if (enemy.state == ES_Hit) + color.lerp(vector4(1,1,0,1), enemy.fTimeElapsed / this->fEnemyHitTime); + if (enemy.state == ES_Dying) + color.lerp(enemy.color, vector4(0,0,0,1), enemy.fTimeElapsed / this->fEnemyDyingTime ); - matrix44 matWorld; - matWorld.scale(enemy.vecScale); - matWorld.scale(vector3(.5f,.5f,.5f)); - matWorld.rotate_x(n_deg2rad(90.f)); - matWorld.translate(enemy.vecPos + vector3(0,1,0)); + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, color ); - this->Draw(matWorld); + matrix44 matWorld; + matWorld.scale(enemy.vecScale); + matWorld.scale(vector3(.5f,.5f,.5f)); + matWorld.rotate_x(n_deg2rad(90.f)); + matWorld.translate(enemy.vecPos + vector3(0,1,0)); + + this->Draw(matWorld); + } + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); } - this->EndPass( this->refShaderColor ); - this->EndDraw( this->refShaderColor ); + else + { + int numEnemies = this->enemies.Size(); + for (int index=0; index<numEnemies; index++) + { + Enemy& enemy = this->enemies.At(index); + + vector4 color(1,1,1,1); + if (enemy.state == ES_Hit) + color.lerp(vector4(1,1,0,1), enemy.fTimeElapsed / this->fEnemyHitTime); + if (enemy.state == ES_Dying) + color.lerp(color, vector4(0,0,0,1), enemy.fTimeElapsed / this->fEnemyDyingTime ); + + this->shaderParams.SetArg(nShaderState::MatDiffuse, color); + + matrix44 matWorld; + matWorld.scale(enemy.vecScale); + matWorld.translate(enemy.vecPos); + + this->DrawModel(this->models[Model_Enemy], matWorld); + } + } } //------------------------------------------------------------------------------ @@ -552,8 +607,14 @@ gfxServer->SetTransform(nGfxServer2::Projection, matProj); //draw the player - vector4 playerColor(0,0,1,1);//blue - vector3 playerScale(.5f,.5f,.5f); + vector4 playerColor(1.f,1.f,1.f,1.f);//blue + vector3 playerScale(1.f,1.f,1.f); + if (this->bShowBoxes) + { + playerColor.set(0,0,1,1);//blue + playerScale.set(.5f,.5f,.5f); + } + if (this->playerState == PS_Dying) { float lerpVal = this->fPlayerTimeElapsed / this->fPlayerDyingTime; @@ -561,18 +622,29 @@ playerScale.lerp(playerScale, vector3(.5f,.5f,0.f), lerpVal); } - matrix44 matWorld; - matWorld.scale(playerScale); - matWorld.rotate_x(n_deg2rad(90.f)); - matWorld.translate(this->vecPlayerPos); + if (this->bShowBoxes) + { + matrix44 matWorld; + matWorld.scale(playerScale); + matWorld.rotate_x(n_deg2rad(90.f)); + matWorld.translate(this->vecPlayerPos); - this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); - this->BeginPass( this->refShaderColor, 0 ); - this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - this->refShaderColor->SetVector4( nShaderState::MatDiffuse, playerColor ); - this->Draw(matWorld); - this->EndPass( this->refShaderColor ); - this->EndDraw( this->refShaderColor ); + this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, playerColor ); + this->Draw(matWorld); + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); + } + else + { + matrix44 matWorld; + matWorld.scale(playerScale); + matWorld.translate(this->vecPlayerPos); + this->shaderParams.SetArg(nShaderState::MatDiffuse, playerColor); + this->DrawModel(this->models[Model_Player], matWorld); + } //draw the stage this->DrawProps(); Added: branches/rnsshoot/src/shootem/shootemapp_model.cc =================================================================== --- branches/rnsshoot/src/shootem/shootemapp_model.cc (rev 0) +++ branches/rnsshoot/src/shootem/shootemapp_model.cc 2010-09-14 15:03:01 UTC (rev 118) @@ -0,0 +1,177 @@ +#include "shootem/shootemapp.h" +#include "shootem/model.h" +#include "shootem/textfile.h" + +#include "gfx2/nmesh2.h" +#include "gfx2/nshader2.h" + +char* modelnames[NumModels] = { + "wc:export/assets/aNsforces_01_lod2", + "wc:export/assets/aScv_lod2", + "wc:export/assets/aAlamo_lod2" +}; + +//------------------------------------------------------------------------------ + +bool ShootemApp::LoadModels() +{ + for (int index=0; index<NumModels; index++) + { + Model* model = n_new(Model); + if (!this->LoadModel(model, modelnames[index])) + { + n_delete(model); + return false; + } + this->models.Append(model); + } + return true; +} + +//------------------------------------------------------------------------------ +void ShootemApp::ReleaseModels() +{ + while (!this->models.Empty()) + { + Model** model = this->models.Begin(); + if (*model != 0) + { + this->ReleaseModel(*model); + n_delete(*model); + this->models.EraseQuick(0); + } + } +} + +//------------------------------------------------------------------------------ + +bool ShootemApp::LoadModel(Model* model, const char* path) +{ + //read the scene file + nString sceneFile(path); + sceneFile.StripTrailingSlash(); + nString filename = sceneFile.ExtractFileName(); + sceneFile.Append("/scene/"); + sceneFile.Append(filename.Get()); + sceneFile.Append(".n2"); + + return LoadScene(model, sceneFile.Get()); +} + +//------------------------------------------------------------------------------ + +bool ShootemApp::LoadScene(Model* model, const char* path) +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + int numShapes = 0; + + TextFile text(path); + while (!text.Eof()) + { + text.ReadLine(); + if (text.Contains("nshapenode")) + numShapes++; + + if (text.Contains("setmesh")) + { + nString filename; + text.Extract("[[", "]]", filename); + nMesh2* mesh = gfxServer->NewMesh(filename.Get()); + if (!this->LoadResource(mesh, filename)) + return false; + + model->shapes.At(numShapes-1).refMesh = mesh; + } + + if (text.Contains("setsurface")) + { + nString filename; + if (text.Extract("[[", "]]", filename)) + this->LoadMaterial(&model->shapes.At(numShapes-1), filename.Get()); + } + } + + return true; +} + +//------------------------------------------------------------------------------ + +bool ShootemApp::LoadMaterial(Shape* shape, const char* path) +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + + //use a default shader + shape->refShader = this->refShaderDiffuse; + shape->shaderParams.SetArg(nShaderState::MatDiffuse, vector4(1.f,1.f,1.f,1.f)); + + nShaderState::Param param(nShaderState::InvalidParameter); + nTexture2* texture; + + TextFile text(path); + while (!text.Eof()) + { + text.ReadLine(); + nString filename; + + //texture maps + if (text.Contains("diffMap")) + param=nShaderState::DiffMap0; + //else if (text.Contains("bumpMap")) + // param=nShaderState::BumpMap0; + //else if (text.Contains("levelMap")) + // param=nShaderState::SpecMap0; + else + continue; + + text.Extract("[[", "]]", filename);//skip the parameter + text.Extract("[[", "]]", filename); + texture = gfxServer->NewTexture(filename.Get()); + if (!this->LoadResource(texture, filename)) + return false; + + shape->shaderParams.SetArg(param, texture); + //other parameters... + //shape->shaderParams[param].SetTexture(texture); + } + return true; +} + +//------------------------------------------------------------------------------ + +void ShootemApp::ReleaseModel(Model* model) +{ + int numShapes = model->shapes.Size(); + for (int index=0; index<numShapes; index++) + N_REF_RELEASE(model->shapes[index].refMesh); + + int numTextures = model->textures.Size(); + for (int index=0; index<numTextures; index++) + N_REF_RELEASE(model->textures[index]); +} + +//------------------------------------------------------------------------------ + +void ShootemApp::DrawModel(Model* model, matrix44& matWorld) +{ + //draw model + int numShapes = model->shapes.Size(); + numShapes--;//HACK- to remove the shadow mesh + for (int index=0; index<numShapes; index++) + { + Shape& shape = model->shapes[index]; + shape.shaderParams.SetArg(nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid); + + nShader2* shader = shape.refShader; + nMesh2* mesh = shape.refMesh; + int numPasses = this->BeginDraw( shader, mesh ); + for (int passIndex = 0; passIndex < numPasses; passIndex++) + { + this->BeginPass( shader, passIndex ); + shader->SetParams( shape.shaderParams ); + shader->SetParams( this->shaderParams );//allow overriding parameters + + this->Draw( matWorld ); + this->EndPass( shader ); + } + } +} Added: branches/rnsshoot/src/shootem/textfile.cc =================================================================== --- branches/rnsshoot/src/shootem/textfile.cc (rev 0) +++ branches/rnsshoot/src/shootem/textfile.cc 2010-09-14 15:03:01 UTC (rev 118) @@ -0,0 +1,98 @@ +#include "shootem/textfile.h" + +#include "kernel/nfileserver2.h" +#include "kernel/nfile.h" + +#define MAX_LINELEN 512 + +//------------------------------------------------------------------------------ + +TextFile::TextFile() : +file(0), +curIndex(0) +{ +} + +//------------------------------------------------------------------------------ + +TextFile::TextFile(const char* filename) : +file(0), +curIndex(0) +{ + this->Open(filename); +} + +//------------------------------------------------------------------------------ + +TextFile::~TextFile() +{ + if (this->file) + this->Close(); +} + +//------------------------------------------------------------------------------ +bool TextFile::Open(const char* filename) +{ + n_assert(!this->file); + + this->file = nFileServer2::Instance()->NewFileObject(); + n_assert(this->file); + + return this->file->Open(filename, "r"); +} + +//------------------------------------------------------------------------------ + +void TextFile::Close() +{ + n_assert(this->file); + this->file->Release(); + this->file = 0; +} + +//------------------------------------------------------------------------------ + +bool TextFile::IsOpen() +{ + return (this->file && this->file->IsOpen()); +} + +//------------------------------------------------------------------------------ + +bool TextFile::Eof() +{ + n_assert(this->file); + return this->file->Eof(); +} + +//------------------------------------------------------------------------------ + +void TextFile::ReadLine() +{ + n_assert(this->file); + char buf[MAX_LINELEN]; + this->file->GetS(buf, MAX_LINELEN); + this->curLine.Set(buf); + this->curIndex=0; +} + +//------------------------------------------------------------------------------ + +bool TextFile::Contains(const char* str) +{ + return (this->curLine.IndexOf(str, 0) != -1); +} + +//------------------------------------------------------------------------------ + +bool TextFile::Extract(const char* start, const char* end, nString& out) +{ + int startIndex = this->curLine.IndexOf(start, this->curIndex); + int endIndex = this->curLine.IndexOf(end, startIndex); + if (startIndex==-1 || endIndex==-1) return false; + + startIndex += int(strlen(start)); + this->curIndex = endIndex; + out.Set(this->curLine.ExtractRange(startIndex, endIndex - startIndex).Get()); + return true; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-13 16:32:44
|
Revision: 117 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=117&view=rev Author: magarcias Date: 2010-09-13 16:32:37 +0000 (Mon, 13 Sep 2010) Log Message: ----------- Game levels Modified Paths: -------------- branches/rnsshoot/inc/shootem/shootemapp.h branches/rnsshoot/src/shootem/shootemapp.cc Modified: branches/rnsshoot/inc/shootem/shootemapp.h =================================================================== --- branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 15:38:06 UTC (rev 116) +++ branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 16:32:37 UTC (rev 117) @@ -74,6 +74,9 @@ PlayerState playerState; + int gameLevel; + + void ResetLevel(); void ResetGame(); //fire @@ -103,6 +106,8 @@ nArray<Tile> tiles; + float min_x, max_x, min_z, max_z; + //props struct Prop { @@ -120,6 +125,7 @@ enum EnemyState { ES_Alive, + ES_Hit, ES_Dying, }; @@ -128,13 +134,17 @@ vector3 vecPos; vector3 vecScale; vector4 color; + EnemyState state; + int hitPoints; + float fTimeElapsed; }; nArray<Enemy> enemies; float fEnemySpeed; + float fEnemyHitTime; float fEnemyDyingTime; void TickEnemies(float fTimeElapsed); @@ -144,6 +154,7 @@ Enemy* CheckEnemies(const vector3& pos, float fDistance); void OnEnemyHit(Enemy* enemy); void OnPlayerHit(); + void OnLevelEnd(); //resources nRef<nMesh2> refMeshGround; Modified: branches/rnsshoot/src/shootem/shootemapp.cc =================================================================== --- branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 15:38:06 UTC (rev 116) +++ branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 16:32:37 UTC (rev 117) @@ -18,13 +18,13 @@ this->bWireframe = false; this->bCameraOrtho = false; - this->vecEye.set(0,5,-2); - this->vecRot.set(n_deg2rad(60),0,0); //looking down 30 degrees - this->vecPlayerPos.set(0,0,0); - this->vecCameraOffset.set(0,5,-2); + this->vecCameraOffset.set(0,7,-2); this->fCameraThreshold = 1.f; + this->vecEye = this->vecPlayerPos + this->vecCameraOffset; + this->vecRot.set(n_deg2rad(60),0,0); //looking down 30 degrees + this->fPlayerSpeed = 5.f; this->fPlayerSize = 1.f; @@ -35,31 +35,52 @@ this->fProjectileSpeed = 10.f; this->fEnemySpeed = 3.f; - this->fEnemyDyingTime = 1.; + this->fEnemyHitTime = .2f; + this->fEnemyDyingTime = 1.f; + //initial level + this->gameLevel = 1; + this->ResetLevel(); +} + +//------------------------------------------------------------------------------ + +void ShootemApp::ResetLevel() +{ + //initialize player + this->vecPlayerPos.set(0,0,0); + + this->fEnemySpeed = 3.f + float(gameLevel - 1); + //initialize ground - const int numTiles = 4; + int numTiles = 4 + gameLevel; this->tiles.SetFixedSize(numTiles); - const vector4 colors[numTiles] = { vector4(1.0f, 1.0f, 1.0f, 1.0f), - vector4(0.0f, 1.0f, 0.0f, 1.0f), - vector4(0.0f, 1.0f, 1.0f, 1.0f), - vector4(1.0f, 0.0f, 0.0f, 1.0f) }; - vector3 tilePos( -5.f, 0.f, -5.f ); + min_x = -5.f; + min_z = -5.f; + max_x = min_x + 10.f;//tilesize + max_z = min_z + 10.f * numTiles;//tilesize + const vector4 colors[] = { vector4(1.0f, 1.0f, 1.0f, 1.0f), + vector4(0.0f, 1.0f, 0.0f, 1.0f), + vector4(0.0f, 1.0f, 1.0f, 1.0f), + vector4(1.0f, 0.0f, 0.0f, 1.0f), + vector4(1.0f, 0.0f, 1.0f, 0.0f) }; + + vector3 tilePos( min_x, 0.f, min_z ); + for (int index=0; index<numTiles; index++) { this->tiles[index].vecPos = tilePos; this->tiles[index].vecScale.set( 10.f, 0.f, 10.f ); - this->tiles[index].color = colors[index]; + this->tiles[index].color = colors[index % sizeof(colors)]; tilePos.z += 10.f; } -#if 1 + //initialize props { - const int numPropsPerTile = 10; - //int propIndex = 0; + int numPropsPerTile = 10 + 2 * gameLevel; for (int tileIndex=0; tileIndex<numTiles; tileIndex++) { Tile& tile = this->tiles[tileIndex]; @@ -72,12 +93,12 @@ newProp.vecPos.z = min_z + n_rand_real(1.f) * tile.vecScale.z;//tilesize_z newProp.vecScale.set(1,1,1); newProp.highlight = false; - //TODO- check for collision + //TODO- check for collision with other props? + this->props.Append(newProp); } } } -#endif //initialize items (shoot and pick, or just pick) @@ -181,6 +202,8 @@ //update player position vector3 playerPos = this->vecPlayerPos + vecMove; + playerPos.x = n_clamp(playerPos.x, min_x, max_x);//adjust to tilesize + Prop* prop = this->CheckProps(playerPos, this->fPlayerSize); if (prop) { @@ -193,6 +216,12 @@ this->vecPlayerPos = playerPos; + //end of level? + if (this->vecPlayerPos.z > max_z) + { + this->OnLevelEnd(); + } + //check for collisions with enemies Enemy* enemy = this->CheckEnemies(playerPos, this->fPlayerSize); if (enemy) @@ -252,7 +281,7 @@ } proj.vecPos += proj.vecDir * this->fProjectileSpeed * fTimeElapsed; - + //TODO- check for collisions Enemy* enemy = this->CheckEnemies(proj.vecPos, proj.vecSize.x); if (enemy) @@ -339,9 +368,12 @@ //the spawn point is a fixed number of units in front of the player //they follow a fixed trajectory (a path) and can shoot projectiles - const int numEnemies = 5; + int numEnemies = 5 + (gameLevel - 1) * 3; vector3 vecPos = this->vecPlayerPos; vecPos.z += 10.f; + + if (vecPos.z > max_z) return; + //float min_x = -5.f; //do { vecPos.x = 1.f;//min_x + n_rand_real(1.f) * 10.f; @@ -351,6 +383,7 @@ { Enemy newEnemy; newEnemy.state = ES_Alive; + newEnemy.hitPoints = this->gameLevel; newEnemy.vecPos = vecPos; newEnemy.vecScale.set(1.f,1.f,1.f); newEnemy.color.set(1,0,0,1); @@ -376,12 +409,24 @@ Enemy& enemy = this->enemies.At(index); switch (enemy.state) { + case ES_Hit: + enemy.fTimeElapsed += fTimeElapsed; + if (enemy.fTimeElapsed > this->fEnemyHitTime) + enemy.state = ES_Alive; + //fall through + case ES_Alive: { vector3 vecMove(0,0,-1); vecMove.x = float(n_sgn(this->vecPlayerPos.x - enemy.vecPos.x)); + vecMove.norm(); vecMove *= this->fEnemySpeed * fTimeElapsed; enemy.vecPos += vecMove; + if (enemy.vecPos.z < this->vecPlayerPos.z - 10.f) + { + this->enemies.EraseQuick(index); + continue; + } } break; @@ -421,7 +466,12 @@ void ShootemApp::OnEnemyHit(Enemy* enemy) { n_assert(enemy); - enemy->state = ES_Dying; + enemy->hitPoints--; + if (enemy->hitPoints > 0) + enemy->state = ES_Hit; + else + enemy->state = ES_Dying; + enemy->fTimeElapsed = 0.f; } @@ -435,6 +485,14 @@ //------------------------------------------------------------------------------ +void ShootemApp::OnLevelEnd() +{ + this->gameLevel++; + this->ResetLevel(); +} + +//------------------------------------------------------------------------------ + void ShootemApp::DrawEnemies() { this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); @@ -447,10 +505,10 @@ Enemy& enemy = this->enemies.At(index); vector4 color(enemy.color); + if (enemy.state == ES_Hit) + color.lerp(vector4(1,1,0,1), enemy.fTimeElapsed / this->fEnemyHitTime); if (enemy.state == ES_Dying) - { color.lerp(enemy.color, vector4(0,0,0,1), enemy.fTimeElapsed / this->fEnemyDyingTime ); - } this->refShaderColor->SetVector4( nShaderState::MatDiffuse, color ); @@ -458,7 +516,7 @@ matWorld.scale(enemy.vecScale); matWorld.scale(vector3(.5f,.5f,.5f)); matWorld.rotate_x(n_deg2rad(90.f)); - matWorld.translate(enemy.vecPos); + matWorld.translate(enemy.vecPos + vector3(0,1,0)); this->Draw(matWorld); } @@ -547,7 +605,7 @@ //score //debug text - str.Format("Projectiles.Size = %d", this->projectiles.Size()); + str.Format("Projectiles = %d, Enemies = %d", this->projectiles.Size(), this->enemies.Size()); gfxServer->Text( str.Get(), vector4(1.f,1.f,0,1), -1.f, 1.f - rowheight );//lower-left corner } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-13 15:38:12
|
Revision: 116 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=116&view=rev Author: magarcias Date: 2010-09-13 15:38:06 +0000 (Mon, 13 Sep 2010) Log Message: ----------- Enemies and states Modified Paths: -------------- branches/rnsshoot/inc/shootem/shootemapp.h branches/rnsshoot/src/shootem/shootemapp.cc Modified: branches/rnsshoot/inc/shootem/shootemapp.h =================================================================== --- branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 12:30:56 UTC (rev 115) +++ branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 15:38:06 UTC (rev 116) @@ -63,6 +63,19 @@ float fPlayerSpeed; float fPlayerSize; + float fPlayerTimeElapsed; + float fPlayerDyingTime; + + enum PlayerState + { + PS_Alive = 0, + PS_Dying, + }; + + PlayerState playerState; + + void ResetGame(); + //fire struct Projectile { @@ -103,6 +116,35 @@ void DrawProps(); Prop* CheckProps(const vector3& pos, float fDistance); + //enemies + enum EnemyState + { + ES_Alive, + ES_Dying, + }; + + struct Enemy + { + vector3 vecPos; + vector3 vecScale; + vector4 color; + EnemyState state; + float fTimeElapsed; + }; + + nArray<Enemy> enemies; + + float fEnemySpeed; + float fEnemyDyingTime; + + void TickEnemies(float fTimeElapsed); + void SpawnEnemies(); + void DrawEnemies(); + + Enemy* CheckEnemies(const vector3& pos, float fDistance); + void OnEnemyHit(Enemy* enemy); + void OnPlayerHit(); + //resources nRef<nMesh2> refMeshGround; nRef<nTexture2> refTextureGround; Modified: branches/rnsshoot/src/shootem/shootemapp.cc =================================================================== --- branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 12:30:56 UTC (rev 115) +++ branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 15:38:06 UTC (rev 116) @@ -28,11 +28,15 @@ this->fPlayerSpeed = 5.f; this->fPlayerSize = 1.f; - this->projectiles.Reset(); + this->fPlayerDyingTime = 2.f; + this->fPlayerTimeElapsed = 0.f; this->fProjectileMaxTime = 2.f; this->fProjectileSpeed = 10.f; + this->fEnemySpeed = 3.f; + this->fEnemyDyingTime = 1.; + //initialize ground const int numTiles = 4; this->tiles.SetFixedSize(numTiles); @@ -51,6 +55,7 @@ tilePos.z += 10.f; } +#if 1 //initialize props { const int numPropsPerTile = 10; @@ -72,11 +77,25 @@ } } } +#endif //initialize items (shoot and pick, or just pick) + + this->ResetGame(); } //------------------------------------------------------------------------------ + +void ShootemApp::ResetGame() +{ + this->fPlayerTimeElapsed = 0.f; + this->playerState = PS_Alive; + + this->projectiles.Reset(); + this->enemies.Reset(); +} + +//------------------------------------------------------------------------------ /** */ bool ShootemApp::Open() @@ -128,54 +147,82 @@ if (inputServer->GetButton("toggle")) this->bCameraOrtho = !this->bCameraOrtho; - float moveSpace = this->fPlayerSpeed * fTimeElapsed;//=cameraSpeed - - //camera move - vector3 vecMove; - if (inputServer->GetButton("forward")) + switch (this->playerState) { - vecMove.z += moveSpace; - } - if (inputServer->GetButton("backward")) - { - vecMove.z -= moveSpace; - } - if (inputServer->GetButton("strafe_left")) - { - vecMove.x -= moveSpace; - } - if (inputServer->GetButton("strafe_right")) - { - vecMove.x += moveSpace; - } + case PS_Dying: + this->fPlayerTimeElapsed += fTimeElapsed; + if (this->fPlayerTimeElapsed > this->fPlayerDyingTime) + { + this->ResetGame(); + } + break; - //update camera position - vector3 playerPos = this->vecPlayerPos + vecMove; - Prop* prop = this->CheckProps(playerPos, this->fPlayerSize); - if (prop) - prop->highlight = true; - else - this->vecPlayerPos += vecMove; + case PS_Alive: + float moveSpace = this->fPlayerSpeed * fTimeElapsed;//=cameraSpeed - //move the camera when the position of the player exceeds a margin - vector3 eyePos = this->vecPlayerPos + this->vecCameraOffset; - if ((eyePos.z - this->vecEye.z) > this->fCameraThreshold) - { - this->vecEye.z = eyePos.z - this->fCameraThreshold; - } - else if ((this->vecEye.z - eyePos.z) > this->fCameraThreshold) - { - this->vecEye.z = eyePos.z + this->fCameraThreshold; - } + //camera move + vector3 vecMove; + if (inputServer->GetButton("forward")) + { + vecMove.z += moveSpace; + } + if (inputServer->GetButton("backward")) + { + vecMove.z -= moveSpace; + } + if (inputServer->GetButton("strafe_left")) + { + vecMove.x -= moveSpace; + } + if (inputServer->GetButton("strafe_right")) + { + vecMove.x += moveSpace; + } - //shoot - if (inputServer->GetButton("fire")) - { - this->AddProjectile(); + //update player position + vector3 playerPos = this->vecPlayerPos + vecMove; + Prop* prop = this->CheckProps(playerPos, this->fPlayerSize); + if (prop) + { + prop->highlight = true; + vector3 vecBack = playerPos - prop->vecPos;//push away + vecBack.norm(); + vecBack *= this->fPlayerSize - vector3::distance(playerPos, prop->vecPos); + playerPos += vecBack; + } + + this->vecPlayerPos = playerPos; + + //check for collisions with enemies + Enemy* enemy = this->CheckEnemies(playerPos, this->fPlayerSize); + if (enemy) + { + this->OnPlayerHit(); + } + + //update camera position applying threshold + vector3 eyePos = this->vecPlayerPos + this->vecCameraOffset; + if ((eyePos.z - this->vecEye.z) > this->fCameraThreshold) + { + this->vecEye.z = eyePos.z - this->fCameraThreshold; + } + else if ((this->vecEye.z - eyePos.z) > this->fCameraThreshold) + { + this->vecEye.z = eyePos.z + this->fCameraThreshold; + } + + //shoot + if (inputServer->GetButton("fire")) + { + this->AddProjectile(); + } } //update projectiles this->TickProjectiles(fTimeElapsed); + + //update enemies + this->TickEnemies(fTimeElapsed); } //------------------------------------------------------------------------------ @@ -194,9 +241,9 @@ void ShootemApp::TickProjectiles(float fTimeElapsed) { int index=0; - while (index < projectiles.Size()) + while (index < this->projectiles.Size()) { - Projectile& proj = projectiles.At(index); + Projectile& proj = this->projectiles.At(index); proj.fTimeElapsed += fTimeElapsed; if (proj.fTimeElapsed > this->fProjectileMaxTime) { @@ -205,7 +252,16 @@ } proj.vecPos += proj.vecDir * this->fProjectileSpeed * fTimeElapsed; + //TODO- check for collisions + Enemy* enemy = this->CheckEnemies(proj.vecPos, proj.vecSize.x); + if (enemy) + { + this->OnEnemyHit(enemy); + projectiles.EraseQuick(index); + continue; + } + index++; } } @@ -277,6 +333,141 @@ //------------------------------------------------------------------------------ +void ShootemApp::SpawnEnemies() +{ + //create a wave of enemies by instancing a row of them + //the spawn point is a fixed number of units in front of the player + //they follow a fixed trajectory (a path) and can shoot projectiles + + const int numEnemies = 5; + vector3 vecPos = this->vecPlayerPos; + vecPos.z += 10.f; + //float min_x = -5.f; + //do { + vecPos.x = 1.f;//min_x + n_rand_real(1.f) * 10.f; + //} while( this->CheckProps(vecPos, 1.f));//size + + for (int index=0; index<numEnemies; index++) + { + Enemy newEnemy; + newEnemy.state = ES_Alive; + newEnemy.vecPos = vecPos; + newEnemy.vecScale.set(1.f,1.f,1.f); + newEnemy.color.set(1,0,0,1); + this->enemies.Append(newEnemy); + + vecPos.z += 2.f;//spread + } +} + +//------------------------------------------------------------------------------ + +void ShootemApp::TickEnemies(float fTimeElapsed) +{ + if (this->enemies.Empty()) + { + this->SpawnEnemies(); + } + + int index=0; + while (index < this->enemies.Size()) + { + //TODO- depending on state + Enemy& enemy = this->enemies.At(index); + switch (enemy.state) + { + case ES_Alive: + { + vector3 vecMove(0,0,-1); + vecMove.x = float(n_sgn(this->vecPlayerPos.x - enemy.vecPos.x)); + vecMove *= this->fEnemySpeed * fTimeElapsed; + enemy.vecPos += vecMove; + } + break; + + case ES_Dying: + enemy.fTimeElapsed += fTimeElapsed; + if (enemy.fTimeElapsed > this->fEnemyDyingTime) + { + this->enemies.EraseQuick(index); + continue; + } + } + + index++; + } +} + +//------------------------------------------------------------------------------ + +ShootemApp::Enemy* ShootemApp::CheckEnemies(const vector3& pos, float fDistance) +{ + int numEnemies = this->enemies.Size(); + float fDistSq = fDistance * fDistance; + for (int index=0; index<numEnemies; index++) + { + if (this->enemies[index].state == ES_Dying) + continue; + + vector3 dist(pos - this->enemies[index].vecPos); + if (dist.lensquared() < fDistSq) + return &this->enemies[index]; + } + return 0; +} + +//------------------------------------------------------------------------------ + +void ShootemApp::OnEnemyHit(Enemy* enemy) +{ + n_assert(enemy); + enemy->state = ES_Dying; + enemy->fTimeElapsed = 0.f; +} + +//------------------------------------------------------------------------------ + +void ShootemApp::OnPlayerHit() +{ + this->playerState = PS_Dying; + this->fPlayerTimeElapsed = 0.f; +} + +//------------------------------------------------------------------------------ + +void ShootemApp::DrawEnemies() +{ + this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + + int numEnemies = this->enemies.Size(); + for (int index=0; index<numEnemies; index++) + { + Enemy& enemy = this->enemies.At(index); + + vector4 color(enemy.color); + if (enemy.state == ES_Dying) + { + color.lerp(enemy.color, vector4(0,0,0,1), enemy.fTimeElapsed / this->fEnemyDyingTime ); + } + + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, color ); + + matrix44 matWorld; + matWorld.scale(enemy.vecScale); + matWorld.scale(vector3(.5f,.5f,.5f)); + matWorld.rotate_x(n_deg2rad(90.f)); + matWorld.translate(enemy.vecPos); + + this->Draw(matWorld); + } + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); +} + +//------------------------------------------------------------------------------ + void ShootemApp::Render() { nGfxServer2* gfxServer = nGfxServer2::Instance(); @@ -303,15 +494,24 @@ gfxServer->SetTransform(nGfxServer2::Projection, matProj); //draw the player + vector4 playerColor(0,0,1,1);//blue + vector3 playerScale(.5f,.5f,.5f); + if (this->playerState == PS_Dying) + { + float lerpVal = this->fPlayerTimeElapsed / this->fPlayerDyingTime; + playerColor.lerp(playerColor, vector4(0,0,0,0), lerpVal); + playerScale.lerp(playerScale, vector3(.5f,.5f,0.f), lerpVal); + } + matrix44 matWorld; - matWorld.scale(vector3(.5f,.5f,.5f)); + matWorld.scale(playerScale); matWorld.rotate_x(n_deg2rad(90.f)); matWorld.translate(this->vecPlayerPos); this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); this->BeginPass( this->refShaderColor, 0 ); this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); - this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(1,0,1,1) ); + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, playerColor ); this->Draw(matWorld); this->EndPass( this->refShaderColor ); this->EndDraw( this->refShaderColor ); @@ -319,6 +519,9 @@ //draw the stage this->DrawProps(); + //draw the enemies + this->DrawEnemies(); + //draw the bullets this->DrawProjectiles(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-13 12:31:07
|
Revision: 115 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=115&view=rev Author: magarcias Date: 2010-09-13 12:30:56 +0000 (Mon, 13 Sep 2010) Log Message: ----------- Props and collisions Modified Paths: -------------- branches/rnsshoot/inc/shootem/shootemapp.h branches/rnsshoot/src/shootem/shootemapp.cc Modified: branches/rnsshoot/inc/shootem/shootemapp.h =================================================================== --- branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 11:34:05 UTC (rev 114) +++ branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 12:30:56 UTC (rev 115) @@ -61,6 +61,7 @@ matrix44 matProj; float fPlayerSpeed; + float fPlayerSize; //fire struct Projectile @@ -89,12 +90,26 @@ nArray<Tile> tiles; + //props + struct Prop + { + vector3 vecPos; + vector3 vecScale; + vector4 color; + bool highlight; + }; + + nArray<Prop> props; + void DrawProps(); + Prop* CheckProps(const vector3& pos, float fDistance); + //resources nRef<nMesh2> refMeshGround; nRef<nTexture2> refTextureGround; nRef<nMesh2> refMeshCylinder; nRef<nMesh2> refMeshSphere; + nRef<nMesh2> refMeshCone; nRef<nShader2> refShaderColor; //diffusecolor-only shader nRef<nShader2> refShaderDiffuse; //diffusemap-only shader Modified: branches/rnsshoot/src/shootem/shootemapp.cc =================================================================== --- branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 11:34:05 UTC (rev 114) +++ branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 12:30:56 UTC (rev 115) @@ -18,14 +18,15 @@ this->bWireframe = false; this->bCameraOrtho = false; - this->vecEye.set(0,5,-3); + this->vecEye.set(0,5,-2); this->vecRot.set(n_deg2rad(60),0,0); //looking down 30 degrees this->vecPlayerPos.set(0,0,0); - this->vecCameraOffset.set(0,5,-3); - this->fCameraThreshold = 2.f; + this->vecCameraOffset.set(0,5,-2); + this->fCameraThreshold = 1.f; this->fPlayerSpeed = 5.f; + this->fPlayerSize = 1.f; this->projectiles.Reset(); @@ -49,6 +50,30 @@ this->tiles[index].color = colors[index]; tilePos.z += 10.f; } + + //initialize props + { + const int numPropsPerTile = 10; + //int propIndex = 0; + for (int tileIndex=0; tileIndex<numTiles; tileIndex++) + { + Tile& tile = this->tiles[tileIndex]; + float min_x = tile.vecPos.x; + float min_z = tile.vecPos.z; + for (int index=0; index<numPropsPerTile; index++) + { + Prop newProp; + newProp.vecPos.x = min_x + n_rand_real(1.f) * tile.vecScale.x;//tilesize_x + newProp.vecPos.z = min_z + n_rand_real(1.f) * tile.vecScale.z;//tilesize_z + newProp.vecScale.set(1,1,1); + newProp.highlight = false; + //TODO- check for collision + this->props.Append(newProp); + } + } + } + + //initialize items (shoot and pick, or just pick) } //------------------------------------------------------------------------------ @@ -61,6 +86,7 @@ N_REF_LOAD_MESH(this->refMeshGround, "plane", "proj:meshes/plane.n3d2"); N_REF_LOAD_MESH(this->refMeshCylinder, "cylinder", "proj:meshes/cylinder.n3d2"); N_REF_LOAD_MESH(this->refMeshSphere, "sphere", "proj:meshes/sphere.n3d2"); + N_REF_LOAD_MESH(this->refMeshCone, "cone", "proj:meshes/cone.nvx2"); N_REF_LOAD_TEXTURE(this->refTextureGround, "checker", "proj:textures/checker.jpg"); @@ -77,11 +103,16 @@ N_REF_RELEASE(this->refMeshGround); N_REF_RELEASE(this->refMeshCylinder); N_REF_RELEASE(this->refMeshSphere); + N_REF_RELEASE(this->refMeshCone); N_REF_RELEASE(this->refTextureGround); N_REF_RELEASE(this->refShaderColor); N_REF_RELEASE(this->refShaderDiffuse); + + this->projectiles.Clear(); + this->tiles.Clear(); + this->props.Clear(); } //------------------------------------------------------------------------------ @@ -119,7 +150,12 @@ } //update camera position - this->vecPlayerPos += vecMove; + vector3 playerPos = this->vecPlayerPos + vecMove; + Prop* prop = this->CheckProps(playerPos, this->fPlayerSize); + if (prop) + prop->highlight = true; + else + this->vecPlayerPos += vecMove; //move the camera when the position of the player exceeds a margin vector3 eyePos = this->vecPlayerPos + this->vecCameraOffset; @@ -194,6 +230,53 @@ //------------------------------------------------------------------------------ +void ShootemApp::DrawProps() +{ + this->BeginDraw( this->refShaderColor, this->refMeshCone ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + int numProps = this->props.Size(); + for (int index=0; index<numProps; index++) + { + Prop& prop = this->props.At(index); + + if (prop.highlight) + { + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(1,1,0,1) ); + prop.highlight = false; + } + else + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(0,1,0,1) ); + + matrix44 matWorld; + matWorld.scale(prop.vecScale); + matWorld.rotate_x(n_deg2rad(90.f)); + vector3 pos(prop.vecPos); + pos += vector3(0,prop.vecScale.y,0);//model offset + matWorld.translate(pos); + this->Draw(matWorld); + } + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); +} + +//------------------------------------------------------------------------------ + +ShootemApp::Prop* ShootemApp::CheckProps(const vector3& pos, float fDistance) +{ + int numProps = this->props.Size(); + float fDistSq = fDistance * fDistance; + for (int index=0; index<numProps; index++) + { + vector3 dist(pos - this->props[index].vecPos); + if (dist.lensquared() < fDistSq) + return &this->props[index]; + } + return 0; +} + +//------------------------------------------------------------------------------ + void ShootemApp::Render() { nGfxServer2* gfxServer = nGfxServer2::Instance(); @@ -233,6 +316,9 @@ this->EndPass( this->refShaderColor ); this->EndDraw( this->refShaderColor ); + //draw the stage + this->DrawProps(); + //draw the bullets this->DrawProjectiles(); @@ -255,6 +341,9 @@ //render text float rowheight = 32.f / gfxServer->GetDisplayMode().GetHeight(); nString str; + //score + + //debug text str.Format("Projectiles.Size = %d", this->projectiles.Size()); gfxServer->Text( str.Get(), vector4(1.f,1.f,0,1), -1.f, 1.f - rowheight );//lower-left corner } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-13 11:34:11
|
Revision: 114 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=114&view=rev Author: magarcias Date: 2010-09-13 11:34:05 +0000 (Mon, 13 Sep 2010) Log Message: ----------- Changed to use LH coordinate system Modified Paths: -------------- branches/rnsshoot/inc/shootem/shootemapp.h branches/rnsshoot/src/shootem/shootemapp.cc Modified: branches/rnsshoot/inc/shootem/shootemapp.h =================================================================== --- branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 11:03:26 UTC (rev 113) +++ branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 11:34:05 UTC (rev 114) @@ -47,6 +47,7 @@ //options bool bWireframe; + bool bCameraOrtho; vector3 vecEye; vector3 vecRot; @@ -57,6 +58,7 @@ float fCameraThreshold; matrix44 matView; + matrix44 matProj; float fPlayerSpeed; @@ -77,6 +79,16 @@ void TickProjectiles(float fTimeElapsed); void DrawProjectiles(); + //tiles + struct Tile + { + vector3 vecPos; + vector3 vecScale; + vector4 color; + }; + + nArray<Tile> tiles; + //resources nRef<nMesh2> refMeshGround; nRef<nTexture2> refTextureGround; Modified: branches/rnsshoot/src/shootem/shootemapp.cc =================================================================== --- branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 11:03:26 UTC (rev 113) +++ branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 11:34:05 UTC (rev 114) @@ -16,12 +16,13 @@ void ShootemApp::Init() { this->bWireframe = false; + this->bCameraOrtho = false; - this->vecEye.set(0,5,3); - this->vecRot.set(n_deg2rad(-60),0,0); //looking down 30 degrees + this->vecEye.set(0,5,-3); + this->vecRot.set(n_deg2rad(60),0,0); //looking down 30 degrees this->vecPlayerPos.set(0,0,0); - this->vecCameraOffset.set(0,5,3); + this->vecCameraOffset.set(0,5,-3); this->fCameraThreshold = 2.f; this->fPlayerSpeed = 5.f; @@ -30,6 +31,24 @@ this->fProjectileMaxTime = 2.f; this->fProjectileSpeed = 10.f; + + //initialize ground + const int numTiles = 4; + this->tiles.SetFixedSize(numTiles); + + const vector4 colors[numTiles] = { vector4(1.0f, 1.0f, 1.0f, 1.0f), + vector4(0.0f, 1.0f, 0.0f, 1.0f), + vector4(0.0f, 1.0f, 1.0f, 1.0f), + vector4(1.0f, 0.0f, 0.0f, 1.0f) }; + vector3 tilePos( -5.f, 0.f, -5.f ); + + for (int index=0; index<numTiles; index++) + { + this->tiles[index].vecPos = tilePos; + this->tiles[index].vecScale.set( 10.f, 0.f, 10.f ); + this->tiles[index].color = colors[index]; + tilePos.z += 10.f; + } } //------------------------------------------------------------------------------ @@ -73,21 +92,22 @@ //toggle options if (inputServer->GetButton("wireframe")) - { this->bWireframe = !this->bWireframe; - } + if (inputServer->GetButton("toggle")) + this->bCameraOrtho = !this->bCameraOrtho; + float moveSpace = this->fPlayerSpeed * fTimeElapsed;//=cameraSpeed //camera move vector3 vecMove; if (inputServer->GetButton("forward")) { - vecMove.z -= moveSpace; + vecMove.z += moveSpace; } if (inputServer->GetButton("backward")) { - vecMove.z += moveSpace; + vecMove.z -= moveSpace; } if (inputServer->GetButton("strafe_left")) { @@ -128,7 +148,7 @@ { Projectile& projectile = this->projectiles.PushBack(Projectile()); projectile.vecPos.set( vecPlayerPos ); - projectile.vecDir.set( 0.f, 0.f, -1.f ); + projectile.vecDir.set( 0.f, 0.f, 1.f ); projectile.vecSize.set( .1f, .1f, .1f ); projectile.fTimeElapsed = 0.f; } @@ -189,10 +209,16 @@ gfxServer->SetTransform(nGfxServer2::View, matView); - nCamera2 cam; + //nCamera2 cam; //cam.SetOrthogonal(10.f, 10.f, .1f, 5000.f); - gfxServer->SetCamera( cam ); + //gfxServer->SetCamera( cam ); + if (this->bCameraOrtho) + this->matProj.orthoLh(10.f, 10.f, 0.1f, 100.f); + else + this->matProj.perspFovLh(n_deg2rad(60.0f), float(4.0f / 3.0f), 0.1f, 100.f); + gfxServer->SetTransform(nGfxServer2::Projection, matProj); + //draw the player matrix44 matWorld; matWorld.scale(vector3(.5f,.5f,.5f)); @@ -215,8 +241,14 @@ this->BeginPass( this->refShaderDiffuse, 0 ); this->refShaderDiffuse->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); this->refShaderDiffuse->SetTexture( nShaderState::DiffMap0, this->refTextureGround ); - this->refShaderDiffuse->SetVector4( nShaderState::MatDiffuse, vector4(1,1,1,1) ); - this->Draw( vector3( -5.f, 0.f, -5.f ), vector3( 10.f, 0.f, 10.f ) ); + + int numTiles = this->tiles.Size(); + for (int tileIndex=0; tileIndex<numTiles; tileIndex++) + { + this->refShaderDiffuse->SetVector4( nShaderState::MatDiffuse, this->tiles[tileIndex].color ); + this->Draw( this->tiles[tileIndex].vecPos, this->tiles[tileIndex].vecScale ); + } + this->EndPass( this->refShaderDiffuse ); this->EndDraw( this->refShaderDiffuse ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-13 11:03:33
|
Revision: 113 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=113&view=rev Author: magarcias Date: 2010-09-13 11:03:26 +0000 (Mon, 13 Sep 2010) Log Message: ----------- Basic application setup Added Paths: ----------- branches/rnsshoot/bldfiles/ branches/rnsshoot/bldfiles/shootem.bld branches/rnsshoot/inc/ branches/rnsshoot/inc/shootem/ branches/rnsshoot/inc/shootem/personal.h branches/rnsshoot/inc/shootem/shootemapp.h branches/rnsshoot/src/ branches/rnsshoot/src/shootem/ branches/rnsshoot/src/shootem/runtime.cc branches/rnsshoot/src/shootem/shootemapp.cc Added: branches/rnsshoot/bldfiles/shootem.bld =================================================================== --- branches/rnsshoot/bldfiles/shootem.bld (rev 0) +++ branches/rnsshoot/bldfiles/shootem.bld 2010-09-13 11:03:26 UTC (rev 113) @@ -0,0 +1,64 @@ +#=============================================================================== +# shootem.bld +#=============================================================================== + +#=============================================================================== +# Shootem application modules +#=============================================================================== +beginmodule shootemapp + setdir shootem + setfiles { + runtime shootemapp + } + setheaders{ + personal shootemapp + } + setlibs_win32 { + shell32.lib + } +endmodule + +#=============================================================================== +# Shootem Targets +#=============================================================================== +begintarget shootem + annotate "Demos app" + seticon zombie.ico + settype exe + setwarningslevel 4 + setpch true + setstacksize 5120000 + + setmodules { + shootemapp + } + settargetdeps { + nkernel + nnebula + ndirect3d9 + ndinput8 + nlua + nscriptclassserver + xml + } +endtarget + +#=============================================================================== +# Demos Workspaces +#=============================================================================== +beginworkspace shootem + setbinarydir ./bin/ + annotate "The Demos workspace." + addglobaldef NO_ENTITY + settargets { + shootem + demo + nkernel + nnebula + ndirect3d9 + ndinput8 + nlua + nscriptclassserver + xml + } +endworkspace Added: branches/rnsshoot/inc/shootem/personal.h =================================================================== --- branches/rnsshoot/inc/shootem/personal.h (rev 0) +++ branches/rnsshoot/inc/shootem/personal.h 2010-09-13 11:03:26 UTC (rev 113) @@ -0,0 +1,9 @@ +#ifndef N_PERSONAL_H +#define N_PERSONAL_H +/**************************************************** + This file is for personal configuration purposes + here you can add all this defines that only you want + to use but you don't know where put them ;) +*****************************************************/ + +#endif \ No newline at end of file Added: branches/rnsshoot/inc/shootem/shootemapp.h =================================================================== --- branches/rnsshoot/inc/shootem/shootemapp.h (rev 0) +++ branches/rnsshoot/inc/shootem/shootemapp.h 2010-09-13 11:03:26 UTC (rev 113) @@ -0,0 +1,104 @@ +#ifndef SHOOTEMAPP_H +#define SHOOTEMAPP_H +//------------------------------------------------------------------------------ +/** + @class ShootemApp + + A minimal demo framework for Zombie apps +*/ +#include "util/nstring.h" +#include "mathlib/matrix.h" + +#include "kernel/nref.h" +#include "util/narray.h" +#include "mathlib/matrix.h" + +//------------------------------------------------------------------------------ + +class nMesh2; +class nTexture2; +class nShader2; +class nResource; + +#define N_REF_LOAD_MESH(a,name,file) a = gfxServer->NewMesh(name);\ + if (!this->LoadResource(a, file)) return false; + +#define N_REF_LOAD_TEXTURE(a,name,file) a = gfxServer->NewTexture(name);\ + if (!this->LoadResource(a, file)) return false; + +#define N_REF_LOAD_SHADER(a,name,file) a = gfxServer->NewShader(name);\ + if (!this->LoadResource(a, file)) return false; + +#define N_REF_RELEASE(a) if (a.isvalid()) {a->Release(); a.invalidate();} + +class ShootemApp +{ +public: + + virtual void Init(); + + virtual bool Open(); + virtual void Close(); + virtual void Tick( float ); + + virtual void Render(); + +protected: + + //options + bool bWireframe; + + vector3 vecEye; + vector3 vecRot; + + vector3 vecPlayerPos; + vector3 vecCameraOffset; + + float fCameraThreshold; + + matrix44 matView; + + float fPlayerSpeed; + + //fire + struct Projectile + { + float fTimeElapsed; + vector3 vecPos;//position + vector3 vecDir;//direction + vector3 vecSize;//size for collision(x,y,z) + }; + + nArray<Projectile> projectiles;//current projectiles + float fProjectileMaxTime; + float fProjectileSpeed; + + void AddProjectile(); + void TickProjectiles(float fTimeElapsed); + void DrawProjectiles(); + + //resources + nRef<nMesh2> refMeshGround; + nRef<nTexture2> refTextureGround; + + nRef<nMesh2> refMeshCylinder; + nRef<nMesh2> refMeshSphere; + + nRef<nShader2> refShaderColor; //diffusecolor-only shader + nRef<nShader2> refShaderDiffuse; //diffusemap-only shader + + //---copied from DemoApp--- + bool LoadResource( nResource* pResource, const nString& strFilename ); + + //draw helpers + int BeginDraw( nShader2* pShader, nMesh2* pMesh ); + int BeginDraw( nShader2* ); + void BeginDraw( nMesh2* ); + void BeginPass( nShader2* pShader, int passIndex ); + void Draw( const vector3& vPosition, const vector3& vScale ); + void Draw( const matrix44& matWorld ); + void EndPass( nShader2* ); + void EndDraw( nShader2* ); +}; + +#endif //SHOOTEMAPP_H Added: branches/rnsshoot/src/shootem/runtime.cc =================================================================== --- branches/rnsshoot/src/shootem/runtime.cc (rev 0) +++ branches/rnsshoot/src/shootem/runtime.cc 2010-09-13 11:03:26 UTC (rev 113) @@ -0,0 +1,193 @@ +/** + Zombie Runtime + Initialize minimal nebula runtime to run application(s) +*/ +//------------------------------------------------------------------------------ +#include "kernel/nkernelserver.h" +#include "shootem/shootemapp.h" + +#ifdef __WIN32__ +#include "kernel/nwin32loghandler.h" +#include "tools/nwinmaincmdlineargs.h" +#else +#include "tools/ncmdlineargs.h" +#endif + +#include "gfx2/ndisplaymode2.h" +#include "gfx2/ncamera2.h" +#include "gfx2/ngfxserver2.h" +#include "kernel/nscriptserver.h" +#include "kernel/nfileserver2.h" +#include "input/ninputserver.h" +#include "misc/nconserver.h" +#include "resource/nresourceserver.h" +#include "variable/nvariableserver.h" +#include "misc/nprefserver.h" + +nNebulaUsePackage(nnebula); +nNebulaUsePackage(ndinput8); +nNebulaUsePackage(ndirect3d9); +nNebulaUsePackage(nlua); + +//------------------------------------------------------------------------------ +/** +*/ +#ifdef __WIN32__ +int WINAPI +WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*prevInstance*/, LPSTR lpCmdLine, int /*nCmdShow*/) +{ + nWinMainCmdLineArgs args(lpCmdLine); +#else +int +main(int argc, const char** argv) +{ + nCmdLineArgs args(argc, argv); +#endif + + //TODO- store rest of command line arguments as environment variables? + const char* scriptserverArg = args.GetStringArg("-scriptserver", "nluaserver"); + const char* projDirArg = args.GetStringArg("-proj", "home:data/shootem"); + const char* startupArg = args.GetStringArg("-startup", "proj:scripts/startup.lua"); + + bool fullscreenArg = args.GetBoolArg("-fullscreen"); + bool alwaysOnTopArg = args.GetBoolArg("-alwaysontop"); + ushort xPosArg = (ushort) args.GetIntArg("-x", 0); + ushort yPosArg = (ushort) args.GetIntArg("-y", 0); + ushort widthArg = (ushort) args.GetIntArg("-w", 640); + ushort heightArg = (ushort) args.GetIntArg("-h", 480); + + // initialize Nebula runtime + nKernelServer* kernel = n_new( nKernelServer ); + #ifdef __WIN32__ + nWin32LogHandler logHandler("shootem"); + kernel->SetLogHandler(&logHandler); + #endif + kernel->AddPackage(nnebula); + kernel->AddPackage(ndinput8); + kernel->AddPackage(ndirect3d9); + kernel->AddPackage(nlua); + + // initialize a display mode object + nString title("Renaissance"); + nDisplayMode2 displayMode; + displayMode.SetIcon("NebulaIcon"); + displayMode.SetDialogBoxMode(true); + if (fullscreenArg) + { + displayMode.Set(title.Get(), nDisplayMode2::Fullscreen, xPosArg, yPosArg, widthArg, heightArg, false, true, "Icon"); + } + else if (alwaysOnTopArg) + { + displayMode.Set(title.Get(), nDisplayMode2::AlwaysOnTop, xPosArg, yPosArg, widthArg, heightArg, false, true, "Icon"); + } + else + { + displayMode.Set(title.Get(), nDisplayMode2::Windowed, xPosArg, yPosArg, widthArg, heightArg, false, true, "Icon"); + } + + //initialize systems + nScriptServer* pScriptServer = (nScriptServer*) kernel->New( scriptserverArg, "/sys/servers/script" ); + nGfxServer2* pGfxServer = (nGfxServer2*) kernel->New("nd3d9server", "/sys/servers/gfx"); + nInputServer* pInputServer = (nInputServer*) kernel->New("ndi8server", "/sys/servers/input"); + nConServer* pConServer = (nConServer*) kernel->New("nconserver", "/sys/servers/console"); + nResourceServer* pResourceServer = (nResourceServer*) kernel->New("nresourceserver", "/sys/servers/resource"); + nVariableServer* pVarServer = (nVariableServer*) kernel->New("nvariableserver", "/sys/servers/variable"); + + //set project directory + kernel->GetFileServer()->SetAssign( "proj", projDirArg ? projDirArg : kernel->GetFileServer()->GetAssign( "home" ) ); + + //run startup scripts + if ( startupArg ) + { + nString scriptResult; + pScriptServer->RunScript(startupArg, scriptResult); + pScriptServer->RunFunction("OnStartup", scriptResult); + pScriptServer->RunFunction("OnGraphicsStartup", scriptResult); + } + + ShootemApp* app = n_new(ShootemApp); + + pGfxServer->SetDisplayMode(displayMode); + nCamera2 camera(n_deg2rad(60), float(displayMode.GetHeight())/float(displayMode.GetWidth()),1.f,100.f); + pGfxServer->SetCamera(camera); + if ( !pGfxServer->OpenDisplay() ) goto Exit; + + // define the input mapping + pInputServer->Open(); + if ( startupArg ) + { + nString scriptResult; + pScriptServer->RunFunction("OnMapInput", scriptResult); + } + + //TODO- run startup script, use for initialization of structures, loading data, etc. + //maybe even for initializing other modules? + + //call game loop + app->Init(); + + if ( app->Open() ) + { + // run the render loop + bool running = true; + float frameTime; + nTime prevTime = 0.0; + //uint frameId = 0; + while ( pGfxServer->Trigger() && running ) + { + nTimeServer::Instance()->Trigger(); + nTime time = nTimeServer::Instance()->GetTime(); + if (prevTime == 0.0) + { + prevTime = time; + } + + frameTime = (float) (time - prevTime); + + //TODO- tick the script server + //TODO- tick other systems, if necessary + + pInputServer->Trigger(time); + + //TODO- toggle console + + app->Tick( frameTime ); + + if ( pGfxServer->BeginFrame() ) + { + if ( pGfxServer->BeginScene() ) + { + app->Render(); + pGfxServer->DrawTextBuffer(); + pGfxServer->EndScene(); + pGfxServer->PresentScene(); + } + pGfxServer->EndFrame(); + } + + prevTime = time; + + pInputServer->FlushEvents(); + + n_sleep(0.0); + } + + app->Close(); + } + + //shutdown systems + pGfxServer->CloseDisplay(); + + n_delete(app); + +Exit: + // + //if ( pScriptServer ) pScriptServer->Release(); + if ( pInputServer ) pInputServer->Release(); + if ( pConServer ) pConServer->Release(); + if ( pVarServer ) pVarServer->Release(); + if ( pResourceServer ) pResourceServer->Release(); + if ( pGfxServer ) pGfxServer->Release(); + + n_delete( kernel ); +} Added: branches/rnsshoot/src/shootem/shootemapp.cc =================================================================== --- branches/rnsshoot/src/shootem/shootemapp.cc (rev 0) +++ branches/rnsshoot/src/shootem/shootemapp.cc 2010-09-13 11:03:26 UTC (rev 113) @@ -0,0 +1,314 @@ +#include "shootem/shootemapp.h" + +#include "kernel/nfileserver2.h" +#include "kernel/ntimeserver.h" +#include "input/ninputserver.h" +#include "gfx2/ngfxserver2.h" +#include "gfx2/nmesh2.h" +#include "gfx2/nshader2.h" +#include "util/nrandomlogic.h" + +//------------------------------------------------------------------------------ +/** + run script that loads required resources, etc. + and sets initial position of everything +*/ +void ShootemApp::Init() +{ + this->bWireframe = false; + + this->vecEye.set(0,5,3); + this->vecRot.set(n_deg2rad(-60),0,0); //looking down 30 degrees + + this->vecPlayerPos.set(0,0,0); + this->vecCameraOffset.set(0,5,3); + this->fCameraThreshold = 2.f; + + this->fPlayerSpeed = 5.f; + + this->projectiles.Reset(); + + this->fProjectileMaxTime = 2.f; + this->fProjectileSpeed = 10.f; +} + +//------------------------------------------------------------------------------ +/** +*/ +bool ShootemApp::Open() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + + N_REF_LOAD_MESH(this->refMeshGround, "plane", "proj:meshes/plane.n3d2"); + N_REF_LOAD_MESH(this->refMeshCylinder, "cylinder", "proj:meshes/cylinder.n3d2"); + N_REF_LOAD_MESH(this->refMeshSphere, "sphere", "proj:meshes/sphere.n3d2"); + + N_REF_LOAD_TEXTURE(this->refTextureGround, "checker", "proj:textures/checker.jpg"); + + N_REF_LOAD_SHADER(this->refShaderColor, "color", "proj:shaders/color.fx"); + N_REF_LOAD_SHADER(this->refShaderDiffuse, "diffuse", "proj:shaders/diffuse.fx"); + + return true; +} + +//------------------------------------------------------------------------------ + +void ShootemApp::Close() +{ + N_REF_RELEASE(this->refMeshGround); + N_REF_RELEASE(this->refMeshCylinder); + N_REF_RELEASE(this->refMeshSphere); + + N_REF_RELEASE(this->refTextureGround); + + N_REF_RELEASE(this->refShaderColor); + N_REF_RELEASE(this->refShaderDiffuse); +} + +//------------------------------------------------------------------------------ + +void ShootemApp::Tick( float fTimeElapsed ) +{ + nInputServer* inputServer = nInputServer::Instance(); + + //toggle options + if (inputServer->GetButton("wireframe")) + { + this->bWireframe = !this->bWireframe; + } + + float moveSpace = this->fPlayerSpeed * fTimeElapsed;//=cameraSpeed + + //camera move + vector3 vecMove; + if (inputServer->GetButton("forward")) + { + vecMove.z -= moveSpace; + } + if (inputServer->GetButton("backward")) + { + vecMove.z += moveSpace; + } + if (inputServer->GetButton("strafe_left")) + { + vecMove.x -= moveSpace; + } + if (inputServer->GetButton("strafe_right")) + { + vecMove.x += moveSpace; + } + + //update camera position + this->vecPlayerPos += vecMove; + + //move the camera when the position of the player exceeds a margin + vector3 eyePos = this->vecPlayerPos + this->vecCameraOffset; + if ((eyePos.z - this->vecEye.z) > this->fCameraThreshold) + { + this->vecEye.z = eyePos.z - this->fCameraThreshold; + } + else if ((this->vecEye.z - eyePos.z) > this->fCameraThreshold) + { + this->vecEye.z = eyePos.z + this->fCameraThreshold; + } + + //shoot + if (inputServer->GetButton("fire")) + { + this->AddProjectile(); + } + + //update projectiles + this->TickProjectiles(fTimeElapsed); +} + +//------------------------------------------------------------------------------ + +void ShootemApp::AddProjectile() +{ + Projectile& projectile = this->projectiles.PushBack(Projectile()); + projectile.vecPos.set( vecPlayerPos ); + projectile.vecDir.set( 0.f, 0.f, -1.f ); + projectile.vecSize.set( .1f, .1f, .1f ); + projectile.fTimeElapsed = 0.f; +} + +//------------------------------------------------------------------------------ + +void ShootemApp::TickProjectiles(float fTimeElapsed) +{ + int index=0; + while (index < projectiles.Size()) + { + Projectile& proj = projectiles.At(index); + proj.fTimeElapsed += fTimeElapsed; + if (proj.fTimeElapsed > this->fProjectileMaxTime) + { + projectiles.EraseQuick(index); + continue; + } + + proj.vecPos += proj.vecDir * this->fProjectileSpeed * fTimeElapsed; + //TODO- check for collisions + index++; + } +} + +//------------------------------------------------------------------------------ + +void ShootemApp::DrawProjectiles() +{ + this->BeginDraw( this->refShaderColor, this->refMeshSphere ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(1,0,0,1) ); + int numProjectiles = this->projectiles.Size(); + for (int index=0; index<numProjectiles; index++) + { + Projectile& proj = this->projectiles.At(index); + this->Draw( proj.vecPos, proj.vecSize ); + } + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); +} + +//------------------------------------------------------------------------------ + +void ShootemApp::Render() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + gfxServer->Clear( nGfxServer2::AllBuffers, .3f, .3f, .3f, 1.f, 1.f, 0 ); + + //view, projection matrices + + this->matView.ident(); + this->matView.rotate_x( this->vecRot.x );//pitch + this->matView.rotate_y( this->vecRot.y );//yaw + this->matView.translate( this->vecEye ); + this->matView.invert_simple(); + + gfxServer->SetTransform(nGfxServer2::View, matView); + + nCamera2 cam; + //cam.SetOrthogonal(10.f, 10.f, .1f, 5000.f); + gfxServer->SetCamera( cam ); + + //draw the player + matrix44 matWorld; + matWorld.scale(vector3(.5f,.5f,.5f)); + matWorld.rotate_x(n_deg2rad(90.f)); + matWorld.translate(this->vecPlayerPos); + + this->BeginDraw( this->refShaderColor, this->refMeshCylinder ); + this->BeginPass( this->refShaderColor, 0 ); + this->refShaderColor->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + this->refShaderColor->SetVector4( nShaderState::MatDiffuse, vector4(1,0,1,1) ); + this->Draw(matWorld); + this->EndPass( this->refShaderColor ); + this->EndDraw( this->refShaderColor ); + + //draw the bullets + this->DrawProjectiles(); + + //draw the tiles + this->BeginDraw( this->refShaderDiffuse, this->refMeshGround ); + this->BeginPass( this->refShaderDiffuse, 0 ); + this->refShaderDiffuse->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + this->refShaderDiffuse->SetTexture( nShaderState::DiffMap0, this->refTextureGround ); + this->refShaderDiffuse->SetVector4( nShaderState::MatDiffuse, vector4(1,1,1,1) ); + this->Draw( vector3( -5.f, 0.f, -5.f ), vector3( 10.f, 0.f, 10.f ) ); + this->EndPass( this->refShaderDiffuse ); + this->EndDraw( this->refShaderDiffuse ); + + //render text + float rowheight = 32.f / gfxServer->GetDisplayMode().GetHeight(); + nString str; + str.Format("Projectiles.Size = %d", this->projectiles.Size()); + gfxServer->Text( str.Get(), vector4(1.f,1.f,0,1), -1.f, 1.f - rowheight );//lower-left corner +} + +//------------------------------------------------------------------------------ + +bool +ShootemApp::LoadResource( nResource* pResource, const nString& strFilename ) +{ + pResource->SetFilename( strFilename ); + return pResource->Load(); +} + +//------------------------------------------------------------------------------ + +int +ShootemApp::BeginDraw(nShader2 *pShader, nMesh2 *pMesh) +{ + int nPasses = this->BeginDraw(pShader); + this->BeginDraw(pMesh); + return nPasses; +} + +//------------------------------------------------------------------------------ + +int +ShootemApp::BeginDraw(nShader2 *pShader) +{ + nGfxServer2::Instance()->SetShader( pShader ); + int nPasses = pShader->Begin( false ); + return nPasses; +} + + +//------------------------------------------------------------------------------ + +void +ShootemApp::BeginDraw(nMesh2 *pMesh) +{ + nGfxServer2* pGfxServer = nGfxServer2::Instance(); + pGfxServer->SetMesh( pMesh, pMesh ); + pGfxServer->SetVertexRange( 0, pMesh->GetNumVertices() ); + pGfxServer->SetIndexRange( 0, pMesh->GetNumIndices() ); +} + +//------------------------------------------------------------------------------ + +void +ShootemApp::BeginPass(nShader2 *pShader, int passIndex) +{ + pShader->BeginPass( passIndex ); +} + +//------------------------------------------------------------------------------ + +void +ShootemApp::Draw( const vector3& vPosition, const vector3& vScale ) +{ + matrix44 matWorld; + matWorld.scale( vScale ); + matWorld.translate( vPosition ); + this->Draw( matWorld ); +} + +//------------------------------------------------------------------------------ + +void +ShootemApp::Draw( const matrix44& matWorld ) +{ + nGfxServer2* gfxServer( nGfxServer2::Instance() ); + gfxServer->SetTransform( nGfxServer2::Model, matWorld ); + gfxServer->DrawIndexedNS( nGfxServer2::TriangleList ); +} + +//------------------------------------------------------------------------------ + +void +ShootemApp::EndPass( nShader2* pShader ) +{ + pShader->EndPass(); +} + +//------------------------------------------------------------------------------ + +void +ShootemApp::EndDraw( nShader2* pShader ) +{ + pShader->End(); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-13 11:01:27
|
Revision: 112 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=112&view=rev Author: magarcias Date: 2010-09-13 11:01:21 +0000 (Mon, 13 Sep 2010) Log Message: ----------- Shooter demo Added Paths: ----------- branches/rnsshoot/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-09 14:08:00
|
Revision: 111 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=111&view=rev Author: magarcias Date: 2010-09-09 14:07:53 +0000 (Thu, 09 Sep 2010) Log Message: ----------- Ambient lighting demo Modified Paths: -------------- branches/demos/bldfiles/demos.bld branches/demos/inc/demos/demoapp.h branches/demos/src/demos/runtime.cc Added Paths: ----------- branches/demos/bldfiles/ambient.bld branches/demos/inc/ambient/ branches/demos/inc/ambient/ambientapp.h branches/demos/src/ambient/ branches/demos/src/ambient/ambientapp.cc Added: branches/demos/bldfiles/ambient.bld =================================================================== --- branches/demos/bldfiles/ambient.bld (rev 0) +++ branches/demos/bldfiles/ambient.bld 2010-09-09 14:07:53 UTC (rev 111) @@ -0,0 +1,17 @@ +#=============================================================================== +# ambient.bld +# demos for ambient effects: athmosferic, ambient occlusion, reflections +#=============================================================================== + +#=============================================================================== +# Ambient modules +#=============================================================================== +beginmodule ambientapp + setdir ambient + setfiles { + ambientapp + } + setheaders{ + ambientapp + } +endmodule Modified: branches/demos/bldfiles/demos.bld =================================================================== --- branches/demos/bldfiles/demos.bld 2010-09-09 14:05:19 UTC (rev 110) +++ branches/demos/bldfiles/demos.bld 2010-09-09 14:07:53 UTC (rev 111) @@ -35,6 +35,7 @@ camerasapp transformapp shadersapp + ambientapp } settargetdeps { nkernel Added: branches/demos/inc/ambient/ambientapp.h =================================================================== --- branches/demos/inc/ambient/ambientapp.h (rev 0) +++ branches/demos/inc/ambient/ambientapp.h 2010-09-09 14:07:53 UTC (rev 111) @@ -0,0 +1,63 @@ +#ifndef AMBIENTAPP_H +#define AMBIENTAPP_H + +#include "kernel/nref.h" +#include "util/narray.h" + +#include "demos/demoapp.h" + +//------------------------------------------------------------------------------ + +class nMesh2; +class nTexture2; +class nShader2; +class nResource; + +class AmbientApp : public DemoApp +{ +public: + + virtual void Init(); + + virtual bool Open(); + virtual void Close(); + virtual void Tick( float ); + + virtual void Render(); + +private: + + struct Model + { + struct { + nRef<nMesh2> refMesh; + nRef<nShader2> refShader; + nRef<nTexture2> refDiffMap; + nRef<nTexture2> refSpecMap; + } shapes[2]; + }; + + Model model; + + nRef<nMesh2> refMesh; + nRef<nTexture2> refTexture; + nRef<nShader2> refShader; + + nRef<nMesh2> refSphereMesh;//to display the cube map + nRef<nShader2> refCubeShader;//to display the cube map + + nRef<nTexture2> refCubeTexture; + nRef<nTexture2> refDiffCubeTexture; + + bool bWireframe; + bool bShowDiffMap; + + vector3 vecEye;//eye position + vector3 vecRot;//euler rotation + + matrix44 matView; + matrix44 matWorld; + +}; + +#endif //_TEMPLATEAPP_H Modified: branches/demos/inc/demos/demoapp.h =================================================================== --- branches/demos/inc/demos/demoapp.h 2010-09-09 14:05:19 UTC (rev 110) +++ branches/demos/inc/demos/demoapp.h 2010-09-09 14:07:53 UTC (rev 111) @@ -16,6 +16,15 @@ class nShader2; class nResource; +#define N_REF_LOAD_MESH(a,name,file) a = gfxServer->NewMesh(name);\ + if (!this->LoadResource(a, file)) return false; + +#define N_REF_LOAD_TEXTURE(a,name,file) a = gfxServer->NewTexture(name);\ + if (!this->LoadResource(a, file)) return false; + +#define N_REF_LOAD_SHADER(a,name,file) a = gfxServer->NewShader(name);\ + if (!this->LoadResource(a, file)) return false; + #define N_REF_RELEASE(a) if (a.isvalid()) {a->Release(); a.invalidate();} class DemoApp Added: branches/demos/src/ambient/ambientapp.cc =================================================================== --- branches/demos/src/ambient/ambientapp.cc (rev 0) +++ branches/demos/src/ambient/ambientapp.cc 2010-09-09 14:07:53 UTC (rev 111) @@ -0,0 +1,174 @@ +#include "ambient/ambientapp.h" + +#include "kernel/nfileserver2.h" +#include "kernel/ntimeserver.h" +#include "input/ninputserver.h" +#include "gfx2/ngfxserver2.h" +#include "gfx2/nmesh2.h" +#include "gfx2/nshader2.h" +#include "util/nrandomlogic.h" + +//------------------------------------------------------------------------------ +/** + run script that loads required resources, etc. + and sets initial position of everything +*/ +void AmbientApp::Init() +{ + this->bWireframe = false; + this->bShowDiffMap = false; +} + +//------------------------------------------------------------------------------ +/** +*/ +bool AmbientApp::Open() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + + //models + N_REF_LOAD_MESH(model.shapes[0].refMesh, "mesh_00000870.0", "proj:models/Soldier/mesh_00000870.0.nvx2") + N_REF_LOAD_TEXTURE(model.shapes[0].refDiffMap, "ns_forces_COLOR", "proj:models/Soldier/ns_forces_COLOR.DDS") + N_REF_LOAD_TEXTURE(model.shapes[0].refSpecMap, "ns_forces_SPEC", "proj:models/Soldier/ns_forces_SPEC.DDS") + N_REF_LOAD_SHADER(model.shapes[0].refShader, "ambient", "proj:shaders/ambient.fx") + + N_REF_LOAD_MESH(model.shapes[1].refMesh, "mesh_00000870.1", "proj:models/Soldier/mesh_00000870.1.nvx2") + N_REF_LOAD_TEXTURE(model.shapes[1].refDiffMap, "head_01A_COLOR", "proj:models/Soldier/head_01A_COLOR.DDS") + N_REF_LOAD_TEXTURE(model.shapes[1].refSpecMap, "head_01A_SPEC", "proj:models/Soldier/head_01A_SPEC.DDS") + N_REF_LOAD_SHADER(model.shapes[1].refShader, "ambient", "proj:shaders/ambient.fx") + + //meshes + N_REF_LOAD_MESH(this->refSphereMesh, "sphere", "proj:meshes/sphere.n3d2") + N_REF_LOAD_SHADER(this->refCubeShader, "ambient_cube", "proj:shaders/ambient_cube.fx") + + //textures + N_REF_LOAD_TEXTURE(this->refCubeTexture, "grace_cube", "proj:textures/grace_cube.dds") + N_REF_LOAD_TEXTURE(this->refDiffCubeTexture, "grace_diffuse_cube", "proj:textures/grace_diffuse_cube.dds") + + return true; +} + +//------------------------------------------------------------------------------ + +void AmbientApp::Close() +{ + for (int index=0; index<2; index++) + { + N_REF_RELEASE(model.shapes[index].refMesh); + N_REF_RELEASE(model.shapes[index].refShader); + N_REF_RELEASE(model.shapes[index].refDiffMap); + N_REF_RELEASE(model.shapes[index].refSpecMap); + } + + N_REF_RELEASE(this->refSphereMesh); + N_REF_RELEASE(this->refCubeShader); + + N_REF_RELEASE(this->refCubeTexture); + N_REF_RELEASE(this->refDiffCubeTexture); +} + +//------------------------------------------------------------------------------ + +void AmbientApp::Tick( float fTimeElapsed ) +{ + nInputServer* inputServer = nInputServer::Instance(); + +/// --- copied from camerasapp --- + if (inputServer->GetButton("wireframe")) + this->bWireframe = !this->bWireframe; + + float mouse_x = (inputServer->GetSlider("slider_left") - inputServer->GetSlider("slider_right")); + float mouse_y = (inputServer->GetSlider("slider_up") - inputServer->GetSlider("slider_down")); + + float angleSpace = n_deg2rad(360.f) * 5.f * fTimeElapsed;//=angleSpeed + float moveSpace = 5.f * fTimeElapsed;//=cameraSpeed + + //camera look around + if (inputServer->GetButton("right_pressed")) + { + this->vecRot.y += mouse_x * angleSpace; + this->vecRot.x += mouse_y * angleSpace; + } + + //camera move + vector3 vecMove; + if (inputServer->GetButton("forward")) + { + vecMove.z -= moveSpace; + } + if (inputServer->GetButton("backward")) + { + vecMove.z += moveSpace; + } + if (inputServer->GetButton("strafe_left")) + { + vecMove.x -= moveSpace; + } + if (inputServer->GetButton("strafe_right")) + { + vecMove.x += moveSpace; + } + + //update camera position + matrix44 mat; + mat.rotate_x( this->vecRot.x ); + mat.rotate_y( this->vecRot.y ); + mat.translate( this->vecEye ); + + //transform with vectors: + this->vecEye = mat * vecMove; + +/// --- copied from camerasapp --- + if (inputServer->GetButton("toggle")) + this->bShowDiffMap = !this->bShowDiffMap; +} + +//------------------------------------------------------------------------------ + +void AmbientApp::Render() +{ + nGfxServer2* gfxServer = nGfxServer2::Instance(); + gfxServer->Clear( nGfxServer2::AllBuffers, .3f, .3f, .3f, 1.f, 1.f, 0 ); + + //view transform + this->matView.ident(); + this->matView.rotate_x( this->vecRot.x );//pitch + this->matView.rotate_y( this->vecRot.y );//yaw + this->matView.translate( this->vecEye ); + + this->matView.invert_simple(); + + gfxServer->SetTransform( nGfxServer2::View, this->matView ); + + nCamera2 cam; + gfxServer->SetCamera( cam ); + + //Draw Cube + this->BeginDraw( this->refCubeShader, this->refSphereMesh ); + this->BeginPass( this->refCubeShader, 0 ); + this->refCubeShader->SetInt( nShaderState::FillMode, this->bWireframe ? nShaderState::Wireframe : nShaderState::Solid ); + this->refCubeShader->SetTexture( nShaderState::CubeMap0, this->bShowDiffMap ? this->refDiffCubeTexture : this->refCubeTexture ); + this->Draw( vector3(0,0,0), vector3( 10.f, 10.f, 10.f ) ); + this->EndPass( this->refCubeShader ); + this->EndDraw( this->refCubeShader ); + + //DrawModel(Model*) + for (int index=0; index<2; index++) + { + nTexture2* diffMap = this->model.shapes[index].refDiffMap; + nTexture2* specMap = this->model.shapes[index].refSpecMap; + nShader2* shader = this->model.shapes[index].refShader; + nMesh2* mesh = this->model.shapes[index].refMesh; + int numPasses = this->BeginDraw( shader, mesh ); + for (int passIndex = 0; passIndex < numPasses; passIndex++) + { + this->BeginPass( shader, passIndex ); + shader->SetTexture(nShaderState::DiffMap0, diffMap ); + shader->SetTexture(nShaderState::SpecMap0, specMap ); + shader->SetTexture(nShaderState::CubeMap0, this->refCubeTexture ); + shader->SetTexture(nShaderState::CubeMap1, this->refDiffCubeTexture ); + this->Draw( matWorld ); + this->EndPass( shader ); + } + } +} Modified: branches/demos/src/demos/runtime.cc =================================================================== --- branches/demos/src/demos/runtime.cc 2010-09-09 14:05:19 UTC (rev 110) +++ branches/demos/src/demos/runtime.cc 2010-09-09 14:07:53 UTC (rev 111) @@ -10,6 +10,7 @@ #include "cameras/camerasapp.h" #include "transform/transformapp.h" #include "shaders/shadersapp.h" +#include "ambient/ambientapp.h" #ifdef __WIN32__ #include "kernel/nwin32loghandler.h" @@ -53,7 +54,7 @@ const char* scriptserverArg = args.GetStringArg("-scriptserver", "nluaserver"); const char* projDirArg = args.GetStringArg("-proj", "home:data/demos"); const char* startupArg = args.GetStringArg("-startup", "proj:scripts/startup.lua"); - const char* appArg = args.GetStringArg("-app", "shaders"); + const char* appArg = args.GetStringArg("-app", "ambient"); bool fullscreenArg = args.GetBoolArg("-fullscreen"); bool alwaysOnTopArg = args.GetBoolArg("-alwaysontop"); @@ -120,6 +121,8 @@ app = n_new(TransformApp); else if (!strcmp( appArg, "shaders" )) app = n_new(ShadersApp); + else if (!strcmp( appArg, "ambient" )) + app = n_new(AmbientApp); else app = n_new(DemoApp); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-09 14:05:24
|
Revision: 110 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=110&view=rev Author: magarcias Date: 2010-09-09 14:05:19 +0000 (Thu, 09 Sep 2010) Log Message: ----------- Removed resources Removed Paths: ------------- trunk/zombie/data/demos/models/ trunk/zombie/data/demos/textures/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mag...@us...> - 2010-09-09 14:04:16
|
Revision: 109 http://thezombieengine.svn.sourceforge.net/thezombieengine/?rev=109&view=rev Author: magarcias Date: 2010-09-09 14:04:09 +0000 (Thu, 09 Sep 2010) Log Message: ----------- Ambient lighting demo resources Added Paths: ----------- trunk/zombie/data/demos/models/ trunk/zombie/data/demos/models/Soldier/ trunk/zombie/data/demos/models/Soldier/head_01A_COLOR.dds trunk/zombie/data/demos/models/Soldier/head_01A_SPEC.dds trunk/zombie/data/demos/models/Soldier/mesh_00000870.0.nvx2 trunk/zombie/data/demos/models/Soldier/mesh_00000870.1.nvx2 trunk/zombie/data/demos/models/Soldier/ns_forces_COLOR.DDS trunk/zombie/data/demos/models/Soldier/ns_forces_SPEC.DDS trunk/zombie/data/demos/shaders/ambient.fx trunk/zombie/data/demos/shaders/ambient_cube.fx trunk/zombie/data/demos/textures/grace_cube.dds trunk/zombie/data/demos/textures/grace_diffuse_cube.dds Added: trunk/zombie/data/demos/models/Soldier/head_01A_COLOR.dds =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/models/Soldier/head_01A_COLOR.dds ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/models/Soldier/head_01A_SPEC.dds =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/models/Soldier/head_01A_SPEC.dds ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/models/Soldier/mesh_00000870.0.nvx2 =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/models/Soldier/mesh_00000870.0.nvx2 ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/models/Soldier/mesh_00000870.1.nvx2 =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/models/Soldier/mesh_00000870.1.nvx2 ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/models/Soldier/ns_forces_COLOR.DDS =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/models/Soldier/ns_forces_COLOR.DDS ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/models/Soldier/ns_forces_SPEC.DDS =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/models/Soldier/ns_forces_SPEC.DDS ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/shaders/ambient.fx =================================================================== --- trunk/zombie/data/demos/shaders/ambient.fx (rev 0) +++ trunk/zombie/data/demos/shaders/ambient.fx 2010-09-09 14:04:09 UTC (rev 109) @@ -0,0 +1,109 @@ +#include "shaders:../lib/lib.fx" +#include "shaders:../lib/libzombie.fx" + +shared float4x4 ModelViewProjection; +shared float4x4 InvModel; + +float4 MatDiffuse = float4( 1.f, 0.f, 0.f, 1.f ); + +int FillMode = 3; //1=Point, 2=Wireframe, 3=Solid + +texture DiffMap0; + +sampler2D ColorSampler = sampler_state +{ + Texture = <DiffMap0>; + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; +}; + +texture SpecMap0; + +sampler2D SpecSampler = sampler_state +{ + Texture = <SpecMap0>; + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; +}; + +texture CubeMap0; + +samplerCUBE CubeSampler = sampler_state +{ + Texture = <CubeMap0>; + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; + +texture CubeMap1; + +samplerCUBE DiffCubeSampler = sampler_state +{ + Texture = <CubeMap1>; + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; +struct VsInput +{ + float4 position : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; +}; + +struct VsOutput +{ + float4 position : POSITION; + float2 uv0 : TEXCOORD0; + float3 normal : TEXCOORD1; +}; + +VsOutput vsMain(const VsInput vsIn) +{ + VsOutput vsOut; + float4 position = vsIn.position; + vsOut.position = mul(position, ModelViewProjection); + vsOut.uv0 = vsIn.uv0; + vsOut.normal = mul(vsIn.normal, (float3x3) InvModel); + + return vsOut; +} + +float4 psMain(const VsOutput psIn) : COLOR +{ + float4 color = tex2D( ColorSampler, psIn.uv0 ); + float spec = .7f + tex2D( SpecSampler, psIn.uv0 ) * .3f; + float4 diff = texCUBE( DiffCubeSampler, psIn.normal ); + + return color * spec * diff; +} + +technique t0 +{ + pass p0 + { + ColorWriteEnable = RED|GREEN|BLUE|ALPHA; + ZWriteEnable = True; + ZEnable = True; + ZFunc = LessEqual; + + FillMode = <FillMode>; + CullMode = None; + + VertexShader = compile vs_1_1 vsMain(); + PixelShader = compile ps_2_0 psMain(); + } +} Added: trunk/zombie/data/demos/shaders/ambient_cube.fx =================================================================== --- trunk/zombie/data/demos/shaders/ambient_cube.fx (rev 0) +++ trunk/zombie/data/demos/shaders/ambient_cube.fx 2010-09-09 14:04:09 UTC (rev 109) @@ -0,0 +1,61 @@ +#include "shaders:../lib/lib.fx" +#include "shaders:../lib/libzombie.fx" + +shared float4x4 ModelViewProjection; + +int FillMode = 3; //1=Point, 2=Wireframe, 3=Solid + +texture CubeMap0; + +samplerCUBE CubeSampler = sampler_state +{ + Texture = <CubeMap0>; + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; + +struct VsInput +{ + float4 position : POSITION; +}; + +struct VsOutput +{ + float4 position : POSITION; + float3 texcoord : TEXCOORD0; +}; + +VsOutput vsMain(const VsInput vsIn) +{ + VsOutput vsOut; + float4 position = vsIn.position; + vsOut.position = mul(position, ModelViewProjection); + vsOut.texcoord = position; + return vsOut; +} + +float4 psMain(const VsOutput psIn) : COLOR +{ + return texCUBE( CubeSampler, psIn.texcoord ); +} + +technique t0 +{ + pass p0 + { + ColorWriteEnable = RED|GREEN|BLUE|ALPHA; + ZWriteEnable = True; + ZEnable = True; + ZFunc = LessEqual; + + FillMode = <FillMode>; + CullMode = None; + + VertexShader = compile vs_1_1 vsMain(); + PixelShader = compile ps_1_1 psMain(); + } +} Added: trunk/zombie/data/demos/textures/grace_cube.dds =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/textures/grace_cube.dds ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/zombie/data/demos/textures/grace_diffuse_cube.dds =================================================================== (Binary files differ) Property changes on: trunk/zombie/data/demos/textures/grace_diffuse_cube.dds ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |