#ifndef APPLICATION_FRAME_LISTENER_H
#define APPLICATION_FRAME_LISTENER_H
#include "Framework.h"
namespace engine
{
namespace directx10
{
typedef fw::Sprite2D<D3D10> Sprite2D;
typedef fw::Cube<D3D10> Cube;
typedef fw::SphereMeshSceneNode<D3D10> SphereMeshSceneNode;
typedef fw::Billboard<D3D10> Billboard;
typedef fw::D3DXSprite2D D3DXSprite2D;
typedef fw::Vertex3DLines<D3D10> Vertex3DLines;
typedef fw::SkySphere<D3D10> SkySphere;
typedef fw::SkyDomeSceneNode<D3D10> SkyDomeSceneNode;
typedef fw::D3DMeshSceneNode<D3D10> D3DMeshSceneNode;
typedef fw::SplinePathManager<D3D10> SplinePathManager;
}
}
using namespace engine;
class ApplicationFrameListener : public fw::FrameListener
{
public:
ApplicationFrameListener(D3DRenderer* pRenderer) :
fw::FrameListener(pRenderer),
m_pSprite(nullptr),
m_pD3DXSprite(nullptr) {}
virtual ~ApplicationFrameListener() {}
virtual void UpdateScene(float fTimeSinceLastFrame) override
{
if (m_pD3DXSprite)
{
m_pD3DXSprite->Render();
}
}
virtual void CreateScene() override
{
ShaderSceneNodeInfo param;
param.SetTexture("chakra.jpg");
param.SetTextureTileFactor(1.0f);
m_pSprite = new directx10::Sprite2D("water.jpg", 700, 478);
m_pSprite->Initialize();
m_pSprite->PushCustomShaderParameter(param);
AddMeshSceneNode(m_pSprite);
ShaderSceneNodeInfo param2;
param2.SetTexture("chakra.jpg");
param2.SetTextureTileFactor(1.0f);
directx10::Cube* pCube = new directx10::Cube;
pCube->PushCustomShaderParameter(param2);
pCube->SetScale(5.0f, 10.0f, 5.0f);
pCube->SetPosition(0.0f, 100.0f, 0.0f);
pCube->CreateAABBLines(Colours::Red);
AddMeshSceneNode(pCube);
ShaderSceneNodeInfo param3;
param3.SetTexture("sun.jpg");
param3.SetTextureTileFactor(1.0f);
directx10::SphereMeshSceneNode* pSphere = new directx10::SphereMeshSceneNode(100);
pSphere->SetScale(0.3f, 0.3f, 0.3f);
pSphere->PushCustomShaderParameter(param3);
pSphere->CreateAABBLines(Colours::White);
pSphere->SetPosition(0.0f, 100.0f, 0.0f);
pSphere->RecalculateBoundingBox();
AddMeshSceneNode(pSphere);
directx10::Billboard* pBillboard = new directx10::Billboard(Colours::Red,
Colours::Blue, 80, 30);
ShaderSceneNodeInfo param4;
param4.SetTexture("kerrigan.jpg");
param4.SetTextureTileFactor(1.0f);
pBillboard->PushCustomShaderParameter(param4);
pBillboard->SetPosition(0.0f, 30.0f, 0.0f);
pBillboard->SetScale(1.0f, 1.0f, 1.0f);
AddMeshSceneNode(pBillboard);
m_pD3DXSprite = new directx10::D3DXSprite2D("kerrigan.jpg", 400, 400);
m_pD3DXSprite->Initialize();
m_pSkySphere = new directx10::SkySphere("grassenvmap1024.dds");
m_pSkySphere->Initialize();
AddMeshSceneNode(m_pSkySphere);
D3D10MeshSceneNode* pNode = GEOMETRY_CREATOR->CreateCylinderMesh<D3D10>(15, 30, 50);
pNode->SetShaderTechnique(SHADER_MANAGER->GetShader("SimpleTexture"));
ShaderSceneNodeInfo param5;
param5.SetTexture("wood.jpg");
param5.SetTextureTileFactor(10.0f);
pNode->PushCustomShaderParameter(param5);
pNode->CreateAABBLines(Colours::Purple);
AddMeshSceneNode(pNode);
directx10::D3DMeshSceneNode* pSkyDomeNode =
new directx10::SkyDomeSceneNode("skydome.jpg", 32, 32, 1.0f, 1.0f, 10000.0f);
pSkyDomeNode->SetPosition(0.0f, -525.0f, 0.0f);
ShaderSceneNodeInfo param9;
param9.SetTextureTileFactor(1.0f);
pSkyDomeNode->PushCustomShaderParameter(param9);
AddMeshSceneNode(pSkyDomeNode);
std::vector<D3DXVECTOR3> points;
points.push_back(D3DXVECTOR3(0.0f, 0.0f, 10.0f));
points.push_back(D3DXVECTOR3(220.0f, 13.0f, 10.0f));
points.push_back(D3DXVECTOR3(0.0f, 0.0f, 10.0f));
points.push_back(D3DXVECTOR3(10.0f, 210.0f, 10.0f));
directx10::SplinePathManager* pSplines = new directx10::SplinePathManager();
pSplines->Initialize();
SplineAnimator* pSplineAnimator = new SplineAnimator(0, points, 30.0f,
10.0f);
Camera* pTrackCamera = new Camera("TrackCamera");
SCENE_MANAGER->AddCamera(pTrackCamera);
SCENE_MANAGER->SetActiveCamera(pTrackCamera);
pTrackCamera->AddAnimator(pSplineAnimator);
pTrackCamera->LookAt(D3DXVECTOR3(0.0f, 0.0f, 0.0f));
pSplines->GenerateSplinePath3DLines (pSplineAnimator);
D3D10MeshSceneNode* pWaterPlane = OBJ_LOADER_MANAGER->LoadMeshD3D10("water_plane.obj");
pWaterPlane->SetShaderTechnique( SHADER_MANAGER->GetShader("SimpleTexture") );
ShaderSceneNodeInfo param6;
param6.SetTexture("seamless.jpg");
param6.SetTextureTileFactor(550.0f);
pWaterPlane->PushCustomShaderParameter(param6);
pWaterPlane->SetScale(1000.0f, 0.0f, 1000.0f);
AddMeshSceneNode(pWaterPlane);
D3D10MeshSceneNode* pMesh = MESH_CACHES_MANAGER(D3D10)->ReadMeshFileCache("mesh.cache");
pMesh->SetShaderTechnique(SHADER_MANAGER->GetShader("SimpleTexture"));
ShaderSceneNodeInfo param6;
param6.SetTexture("seamless.jpg");
param6.SetTextureTileFactor(550.0f);
pMesh->PushCustomShaderParameter(param6);
pMesh->SetScale(1000.0f, 0.0f, 1000.0f);
pMesh->SetVertexType(VertexLayoutType::PTN_VERTEX);
pMesh->SetDrawMethod(D3DMeshSceneNode<D3D10>::DrawMethod::DRAW_INDEXED);
pMesh->SetTopology(D3D_PRIMITIVE_TOPOLOGY::D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
pMesh->SetIndexFormat(D3DMeshSceneNode<D3D10>::IndexFormat::FORMAT_32_BIT);
AddMeshSceneNode(pMesh);
for (uint32 i = 0; i < 5; i++)
{
directx10::Cube* pCube = new directx10::Cube;
pCube->PushCustomShaderParameter(param2);
pCube->SetScale(5.0f, 10.0f, 5.0f);
pCube->SetPosition(1.0f * i * (20), 100.0f, 0.0f);
AddMeshSceneNode(pCube);
}
MESH_CACHES_MANAGER(D3D10)->WriteMeshFileCache(pCube, "cube.cache");
D3DGeneric_Texture* pTex1 =
GetSystem()->GetCurrentRenderer()->GetTextureManager()->CreateTexture("Yoann.JPG", LoadMode::Zip);
D3DGeneric_Texture* pTex2 =
GetSystem()->GetCurrentRenderer()->GetTextureManager()->CreateTexture("groupes.png", LoadMode::Zip);
std::vector<D3DGeneric_Texture*> aTexturesArray;
aTexturesArray.push_back(pTex1);
aTexturesArray.push_back(pTex2);
D3DGeneric_Texture* pTexArray =
GetSystem()->GetCurrentRenderer()->GetTextureManager()->CreateTextureArray(aTexturesArray, 1200, 800);
D3DGeneric_ShaderResourceView& pTexArrayRV =
GetSystem()->GetCurrentRenderer()->GetTextureManager()->LoadTextureRVArray(pTexArray, "YoannTex", "Yoann");
D3D10_GPU_MEMORY_POOL->SetTextureRVArray("aSharedTextures1", pTexArrayRV.GetD3D10Ptr());
}
private:
directx10::Sprite2D* m_pSprite;
directx10::D3DXSprite2D* m_pD3DXSprite;
directx10::SkySphere* m_pSkySphere;
};
#endif