GameEntity EntityFactory::CreatePlayer(DirectX::XMFLOAT3 position) { EntityManager* pEntity = EntityManager::Instance(); ResourceManager* pResource = ResourceManager::Instance(); GameEntity player = pEntity->Create("Player"); pEntity->AddComponent<RenderComponent>(player, pResource->GetMaterial("ship"), pResource->GetMesh("Ship")); pEntity->AddComponent<InputComponent>(player, 5.0f); pEntity->AddComponent<CollisionComponent>(player, *pResource->GetMesh("Ship"), XMFLOAT3(0, 0, 0), 0.0007f); pEntity->AddComponent<AttackComponent>(player, 5.0f); TransformComponent* pTrans = pEntity->AddComponent<TransformComponent>(player, position); pTrans->transform.SetScale(.001f); PhysicsComponent* pPhysics = pEntity->AddComponent<PhysicsComponent>(player, XMVectorZero(), XMVectorZero()); pPhysics->drag = 0.60f; pPhysics->rotationalDrag = 0.30f; GameEntity exhaust = pEntity->Create("Exhaust"); pEntity->AddComponent<RenderComponent>(exhaust, pResource->GetMaterial("thruster"), pResource->GetMesh("Thruster"))->maskOnly = true; TransformComponent* eTrans = pEntity->AddComponent<TransformComponent>(exhaust, position); eTrans->transform.Translate(0.0f, 0.0f, -0.3f); eTrans->transform.Scale(400.0f); pTrans->transform.AddChild(&eTrans->transform); // Particles Particle p(XMFLOAT4(1, 0, 0, 1), XMFLOAT4(1, 1, 0.1f, 0.8f), XMFLOAT4(1, 0.5f, 0.1f, 0.9f), XMFLOAT3(0, 0, -0.9), XMFLOAT3(0, 0, -0.3), XMFLOAT3(0, 0, 0), 0.9f, 0.4f, 0.1f, 0.0f, 0); ParticleGenerator* pGML = new ParticleGenerator(p, XMFLOAT3( 0.0f, -0.16f, -1.05f), 0.08f, 0.00001, 10); ParticleGenerator* pGMU = new ParticleGenerator(p, XMFLOAT3( 0.0f, +0.04f, -1.05f), 0.08f, 0.00001, 10); ParticleGenerator* pGRU = new ParticleGenerator(p, XMFLOAT3(+0.33f, +0.04f, -1.05f), 0.08f, 0.00001, 10); ParticleGenerator* pGLU = new ParticleGenerator(p, XMFLOAT3(-0.33f, +0.04f, -1.05f), 0.08f, 0.00001, 10); ParticleGenerator* pGRL = new ParticleGenerator(p, XMFLOAT3(+0.35f, -0.16f, -1.05f), 0.08f, 0.00001, 10); ParticleGenerator* pGLL = new ParticleGenerator(p, XMFLOAT3(-0.35f, -0.16f, -1.05f), 0.08f, 0.00001, 10); ParticleComponent* pParticles = pEntity->AddComponent<ParticleComponent>(player); pParticles->AddGenerator(pGML); pParticles->AddGenerator(pGMU); pParticles->AddGenerator(pGRU); pParticles->AddGenerator(pGLU); pParticles->AddGenerator(pGRL); pParticles->AddGenerator(pGLL); return player; }
GameEntity EntityFactory::CreateAsteroid(DirectX::XMFLOAT3 position, DirectX::XMFLOAT3 velocity, DirectX::XMFLOAT3 acceleration, DirectX::XMFLOAT3 rotation, float scale, int id) { EntityManager* pEntity = EntityManager::Instance(); ResourceManager* pResource = ResourceManager::Instance(); GameEntity asteroid = pEntity->Create("Asteroid"); pEntity->AddComponent<CollisionComponent>(asteroid, 0.95f*scale, position); pEntity->AddComponent<AsteroidRenderComponent>(asteroid, id); pEntity->AddComponent<RenderComponent>(asteroid, pResource->GetMaterial("asteroid"), pResource->GetMesh("Sphere")); pEntity->AddComponent<PhysicsComponent>(asteroid, velocity, acceleration); TransformComponent* pTransform = pEntity->AddComponent<TransformComponent>(asteroid, position); pTransform->transform.SetRotation(rotation); pTransform->transform.SetScale(scale); return asteroid; }
int main() { GameManager newManager; newManager.Initialize(); //Load and create objects ResourceManager* resourceManager = newManager.GetResourceManager(); //Loads the meshes from the model file into a //simple gameobject hierarchy and returns the root game object //Returns null if the model wasn't found /* GameObject* dwarfObject = newManager.CreateGameObjectsFromModel("data/dwarf2.b3d"); if(dwarfObject != NULL) { dwarfObject->GetTransform().SetScale(0.05f,0.05f,0.05f); dwarfObject->GetTransform().SetPosition(-3.0f,0.0f,0.0f); newManager.AddComponentToGameObject(dwarfObject, new RotateObject(dwarfObject)); } */ /* resourceManager->StoreAndInitMaterial("terrainMaterial", new Diffuse(resourceManager->GetShaderProgram("Diffuse", "../data/Diffuse.vert", "../data/Diffuse.frag"), resourceManager->GetTexture2D("data/heightmap4.bmp"))); TerrainHeightMap newTerrain; newTerrain.CreateHeightMap(resourceManager->GetTexture2D("data/heightmap4.bmp"), 128); //Test int numberOfTerrainPatches = newTerrain.GetNumberOfPatches(); for(int i = 0; i < numberOfTerrainPatches; i++) { GameObject* terrainObject = new GameObject(); terrainObject->AddComponent(new MeshRenderer(terrainObject,newTerrain.GetTerrainMeshes()[i], resourceManager->GetMaterial("terrainMaterial"))); newManager.AddGameObject(terrainObject); } */ //TEST 2D OBJECT & Material /* resourceManager->StoreAndInitMaterial("2DMaterial", new Diffuse2D(resourceManager->GetShaderProgram("Diffuse2D", "../data/Diffuse2D.vert", "../data/Diffuse2D.frag"), resourceManager->GetTexture2D("../data/test.bmp"))); GameObject* cubeObject = new GameObject(); cubeObject->GetTransform().SetScale(128,128,1); cubeObject->GetTransform().SetPosition(Vector3(500,300,0)); cubeObject->AddComponent(new MeshRenderer(cubeObject,resourceManager->GetPrimitive(PLANE_PRIMITIVE), resourceManager->GetMaterial("2DMaterial"), ComponentUpdateStep::Render2DUpdate())); newManager.AddGameObject(cubeObject); */ //CDLOD TERRAIN resourceManager->StoreAndInitMaterial("TerrainMaterial", new TerrainMaterial(resourceManager->GetShaderProgram("TerrainShader", "../data/Terrain.vert", "../data/Terrain.frag"),resourceManager->GetTexture2D("data/heightmap4.bmp"))); TerrainCDLOD terrain((Camera*)newManager.GetMainCameraObject()->GetComponent(typeid(Camera)),resourceManager->GetTexture2D("data/heightmap4.bmp")); GameObject* terrainObject = new GameObject(); terrainObject->AddComponent(new TerrainRenderer(terrainObject, &terrain, (TerrainMaterial*)resourceManager->GetMaterial("TerrainMaterial"),newManager.GetGraphicsDevice())); newManager.AddGameObject(terrainObject); //Add a movement script to the camera GameObject* cameraObject = newManager.GetMainCameraObject(); newManager.AddComponentToGameObject(cameraObject, new FreeLookCamera(cameraObject)); newManager.Update(); newManager.Shutdown(); }