Entity* Game::MakeBullet(Entity *tower) { //Make a Bullet Entity * toReturn = new Entity(); toReturn->AddComponent<Sprite>(); toReturn->AddComponent<Material>()->Program = ProjShader; toReturn->GetComponent<Material>()->Textures.push_back(TextureSlot(ProjTexture, 0)); toReturn->GetComponent<Material>()->SetBlendMode(BlendFunc::Linear); toReturn->GetComponent<Sprite>()->SetCenteredX(true); toReturn->GetComponent<Sprite>()->SetCenteredY(true); toReturn->Transform.Scale = (vec3(9, 19, 1)); vec2 traj = tower->GetComponent<Tower>()->CurrTarget->Transform.Position.ToVec2() - tower->Transform.Position.ToVec2(); traj.Normalize(); toReturn->AddComponent<Collider>(vec2(9, 19), BULLET); //Set its position to the Tower's position toReturn->Transform.Position = tower->Transform.Position; //Set its bullet rotation toReturn->Transform.Rotation = tower->Transform.Rotation; toReturn->AddComponent<Bullet>(traj, tower->GetComponent<Tower>()->Damage, tower); //Set its trajectory return toReturn; }
//Create a Tower and set its position to the Mouse Cursor. Entity* Game::MakeTower(BuildType toBuild) { //Make a Tower Entity * toReturn = new Entity(); toReturn->AddComponent<Sprite>(); toReturn->AddComponent<Material>()->Program = TowerShader; if (toBuild == TOWERRED) toReturn->GetComponent<Material>()->Textures.push_back(TextureSlot(TowerRed, 0)); else toReturn->GetComponent<Material>()->Textures.push_back(TextureSlot(TowerBlue, 0)); toReturn->GetComponent<Material>()->SetBlendMode(BlendFunc::Linear); toReturn->GetComponent<Sprite>()->SetCenteredX(true); toReturn->GetComponent<Sprite>()->SetCenteredY(true); toReturn->Transform.Scale = (vec3(50, 50, 1)); toReturn->Transform.Position = vec3(Input::GetMouseX(), Input::GetMouseY(), 1); toReturn->AddComponent<Tower>(toBuild); return toReturn; }
//....................................................................................... void Object::Initialize() { // initialize type, flags and ptrs m_bObjectLoadedRAM = false; m_bObjectLoadedGPU = false; m_bInitializedGPU = false; m_bVerticesGPUupload = false; m_bIndicesGPUupload = false; m_bTextureGPUupload = false; // set geometry parameters m_pVertices = NULL; m_pIndices = NULL; m_texture = TextureSlot(); m_normalmap = TextureSlot(); m_nVertices = 0; m_nVerticesLeft = 0; m_nIndices = 0; m_nIndicesLeft = 0; m_AABB = AABB3(); m_objectFlags = OBJECT_FLAGS_NONE; m_vColor = Vector4f(0.0f, 0.0f, 0.0f, 1.0f); m_mModelMatrix = Matrix4f(MATRIX_IDENTITY); m_vWorldPos = Vector3f(0.0f, 0.0f, 0.0f); m_vScale = Vector3f(1.0f, 1.0f, 1.0f); m_vTranslate = Vector3f(0.0f, 0.0f, 0.0f); m_fRotationAngle = 0.0f; m_qRotation = glm::fquat(0.0f, 0.0f, 0.0f, 0.0f); m_vRotationAxis = Vector3f(0.0f, 1.0f, 0.0f); UpdateObjectMatrix(); // set default render func ptr m_pRenderFunc = &Object::RenderIdle; } // end Object::Initialize()
void Game::MakeAlienWave(int num, int spacing, Path& path) { if (num == 0) return; for (int i = 0; i < num; i++) { Entity * newEnt = new Entity(); newEnt->AddComponent<Sprite>(); newEnt->AddComponent<Material>()->Program = SpriteShader; newEnt->GetComponent<Material>()->Textures.push_back(TextureSlot(SpriteTexture, 0)); newEnt->GetComponent<Material>()->SetBlendMode(BlendFunc::Linear); newEnt->GetComponent<Sprite>()->SetCenteredX(true); newEnt->GetComponent<Sprite>()->SetCenteredY(true); newEnt->Transform.Scale = (vec3(50, 50, 1)); newEnt->Transform.Position = vec3(802, 735 + (i * spacing), (float)i / num + 0.005); newEnt->AddComponent<Alien>(); newEnt->GetComponent<Alien>()->AlienPath.SetPath(path); newEnt->AddComponent<Collider>(vec2(50,50), ALIEN); MainGroup.AddEntity(*newEnt); } }