void Map::Render( Camera* View ) { Vector2 pts[4]; for( int y = 0; y < MapHeight; y++ ) { for( int x = 0; x < MapWidth; x++ ) { pts[0].X = x * CurGame->TileSize; pts[1].X = x * CurGame->TileSize; pts[2].X = (x + 1) * CurGame->TileSize; pts[3].X = (x + 1) * CurGame->TileSize; pts[0].Y = y * CurGame->TileSize; pts[1].Y = (y + 1) * CurGame->TileSize; pts[2].Y = y * CurGame->TileSize; pts[3].Y = (y + 1) * CurGame->TileSize; View->AbsoluteToCameraOffset( &pts[0], &pts[0] ); View->AbsoluteToCameraOffset( &pts[1], &pts[1] ); View->AbsoluteToCameraOffset( &pts[2], &pts[2] ); View->AbsoluteToCameraOffset( &pts[3], &pts[3] ); RenderGround( x, y, (Vector2*)&pts ); } } for( std::vector<Unit*>::iterator i = Units.begin(); i != Units.end(); i++ ) { Unit* u = (*i); u->Render( View ); } for(std::vector<Building*>::iterator i = Buildings.begin(); i != Buildings.end(); i++ ) { Building* b = (Building*)(*i); b->Render( View ); } }
void LocationEditor::Render() { // // Render our buildings g_app->m_renderer->SetObjectLighting(); LevelFile *levelFile = g_app->m_location->m_levelFile; for( int i = 0; i < levelFile->m_buildings.Size(); ++i ) { if( levelFile->m_buildings.ValidIndex(i) ) { Building *b = levelFile->m_buildings.GetData(i); b->Render(0.0); } } g_app->m_renderer->UnsetObjectLighting(); if (m_mode == ModeBuilding) { for( int i = 0; i < levelFile->m_buildings.Size(); ++i ) { if( levelFile->m_buildings.ValidIndex(i) ) { Building *b = levelFile->m_buildings.GetData(i); b->RenderAlphas(0.0); b->RenderLink(); } } } // // Render camera mounts { g_app->m_renderer->SetObjectLighting(); Shape *camShape = g_app->m_resource->GetShape("camera.shp"); Matrix34 mat; for (int i = 0; i < g_app->m_location->m_levelFile->m_cameraMounts.Size(); ++i) { CameraMount *mount = g_app->m_location->m_levelFile->m_cameraMounts[i]; Vector3 camToMount = g_app->m_camera->GetPos() - mount->m_pos; if (camToMount.Mag() < 20.0) continue; mat.OrientFU(mount->m_front, mount->m_up); mat.pos = mount->m_pos; camShape->Render(0.0, mat); } g_app->m_renderer->UnsetObjectLighting(); } g_app->m_renderer->UnsetObjectLighting(); // // Render our instant units for (int i = 0; i < levelFile->m_instantUnits.Size(); ++i) { InstantUnit *iu = levelFile->m_instantUnits.GetData(i); RenderUnit(iu); } switch (m_mode) { case ModeLandTile: RenderModeLandTile(); break; case ModeLandFlat: RenderModeLandFlat(); break; case ModeBuilding: RenderModeBuilding(); break; case ModeLight: break; case ModeInstantUnit: RenderModeInstantUnit(); break; case ModeCameraMount: RenderModeCameraMount(); break; } // // Render axes float sizeX = g_app->m_location->m_landscape.GetWorldSizeX() / 2; float sizeZ = g_app->m_location->m_landscape.GetWorldSizeZ() / 2; RenderArrow(Vector3(10, 200, 0), Vector3(sizeX, 200, 0), 4.0); glBegin(GL_LINES); glVertex3f(sizeX, 250, 0); glVertex3f(sizeX + 90, 150, 0); glVertex3f(sizeX, 150, 0); glVertex3f(sizeX + 90, 250, 0); glEnd(); glDisable(GL_BLEND); glDisable(GL_LINE_SMOOTH); RenderArrow(Vector3(0, 200, 10), Vector3(0, 200, sizeZ), 4.0); glBegin(GL_LINES); glVertex3f(0, 250, sizeZ); glVertex3f(0, 250, sizeZ + 90); glVertex3f(0, 250, sizeZ); glVertex3f(0, 150, sizeZ + 90); glVertex3f(0, 150, sizeZ); glVertex3f(0, 150, sizeZ + 90); glEnd(); glDisable(GL_BLEND); glDisable(GL_LINE_SMOOTH); // // Render targetting crosshair g_app->m_renderer->SetupMatricesFor2D(); glColor3ub(255,255,255); glLineWidth( 1.0 ); glBegin( GL_LINES ); glVertex2i( g_app->m_renderer->ScreenW()/2, g_app->m_renderer->ScreenH()/2 - 30 ); glVertex2i( g_app->m_renderer->ScreenW()/2, g_app->m_renderer->ScreenH()/2 + 30 ); glVertex2i( g_app->m_renderer->ScreenW()/2 - 30, g_app->m_renderer->ScreenH()/2 ); glVertex2i( g_app->m_renderer->ScreenW()/2 + 30, g_app->m_renderer->ScreenH()/2 ); glEnd(); g_app->m_renderer->SetupMatricesFor3D(); CHECK_OPENGL_STATE(); }