Main Page | Class List | File List | Class Members | Related Pages

town.cpp

00001 /***************************************************************************
00002                            town.cpp
00003                            -------------------
00004     begin                : 2004-04-25
00005     copyright            : (C) 2004-2005 by Michael Menne
00006     email                : menne@users.sourceforge.net
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  This program is free software; you can redistribute it and/or
00011  modify it under the terms of the GNU General Public License
00012  as published by the Free Software Foundation; either version 2
00013  of the License, or (at your option) any later version.
00014 
00015  This program is distributed in the hope that it will be useful,
00016  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  GNU General Public License for more details.
00019 
00020  You should have received a copy of the GNU General Public License
00021  along with this program; if not, write to the Free Software
00022  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00023  ***************************************************************************/
00024 
00025 #include "town.h"
00026 #include "app.h"
00027 #include "frame.h"
00028 #include "glcanvas.h"
00029 
00030 namespace WDS
00031 {
00032 
00033 DECLARE_APP(CApp)
00034 
00035 /*----------------------------------------------------------------------------/
00036     Constructor / Destructor
00037 -----------------------------------------------------------------------------*/
00038 
00039 CTown::CTown()
00040 {
00041     m_rcRect = Rect( 0, 0, 0, 0 );
00042     m_ptPos.x = 0;
00043     m_ptPos.y = 0;
00044     m_nSight  = 0;
00045 
00046     m_strName     = "";
00047     m_strOwner    = "";
00048     m_strGuild    = "";
00049     m_strComplete = "";
00050 }
00051 
00052 CTown::~CTown()
00053 {
00054 
00055 }
00056 
00057 /*----------------------------------------------------------------------------/
00058     Member Funktionen
00059 -----------------------------------------------------------------------------*/
00060 
00061 void CTown::SetName( wxString strName, wxString strOwner, wxString strGuild )
00062 {
00063     m_strName = strName;
00064     m_strOwner = strOwner;
00065     m_strGuild = strGuild;
00066 
00067     m_strComplete = strName + " - " + strGuild + " " + strOwner;
00068     CalcRect();
00069 }
00070 
00071 /*
00072  *  Draw( )
00073  *  Überprüft, ob der Stadtname im sichtbaren Bereich liegt und zeichnet den
00074  *  Stadtnamen dann auf einen grauen Hintergrund
00075  *  Wenn rausgezoomt ist, wird der Zoom mit einberechnet um den Stadtnamen immer
00076  *  in der gleichen Größe zu zeichen wie bei einen Zoom von 1 ( kein Zoom).
00077  */
00078 void CTown::Draw( const Rect *pScreen )
00079 {
00080     CGLCanvas *pCanvas = GetGLCanvas();
00081 
00082     float z = pCanvas->GetZoom();   // Zoomfaktor
00083     if( z > 1.0f )
00084         z = 1.0f;
00085     float s = 1.0f / z;         // Skalierungfaktor
00086 
00087     Rect rcRect = m_rcRect;     // Recheck vergrößern fals rausgezoomt ist
00088     rcRect.w = (int)((float)rcRect.w * s);
00089     rcRect.h = (int)((float)rcRect.h * s);
00090 
00091     if( pScreen->RectIntersect( &rcRect ) ) // Überprüfen ob der Stadtname sichtbar ist
00092     {
00093         glPushMatrix();
00094         glScalef( s, s, 1.0 );              // Vergrößern und Position anpassen
00095         glTranslatef( -(1.0f-z)*m_rcRect.Left(), -(1.0f-z)*m_rcRect.Top(), 0.0f );
00096 
00097         // Text zeichnen
00098         pCanvas->DrawTextBox( m_rcRect.x, m_rcRect.y, 1.0f, 1.0f, 1.0f, 1.0f, m_strComplete.c_str() );
00099 
00100         glPopMatrix();
00101     }
00102 }
00103 
00104 void CTown::SetPos( int x, int y )
00105 {
00106     m_ptPos.x = x;
00107     m_ptPos.y = y;
00108     CalcRect();
00109 }
00110 
00111 void CTown::SetSight(int sight)
00112 {
00113     if (sight > 0 )
00114         m_nSight = sight;
00115     // else 0, set in constructor
00116 }
00117 
00118 /*
00119  *  CalcRect( )
00120  *  Berechnet die Größe, Breite und Höhe, die der Schriftzug beim Zeichnen braucht
00121  */
00122 void CTown::CalcRect()
00123 {
00124     CGLCanvas *pCanvas = GetGLCanvas();
00125 
00126     wxPoint pt = pCanvas->GetTextExtent( m_strComplete.c_str() );
00127 
00128     m_rcRect.x = (m_ptPos.x-m_ptPos.y) * 63 - 2;
00129     m_rcRect.y = (m_ptPos.y+m_ptPos.x) * 35 - 4;
00130     m_rcRect.w = pt.x + 8;
00131     m_rcRect.h = pt.y + 4;
00132 }
00133 
00134 CGLCanvas* CTown::GetGLCanvas()
00135 {
00136     CGLCanvas *pCanvas = wxGetApp().GetFrame()->GetGLCanvas();
00137     return pCanvas;
00138 }
00139 
00140 }
00141 // kate: space-indent off; tab-width 4; replace-tabs off;
00142 

Generated on Sun Jan 16 18:20:26 2005 for WDSMap by  doxygen 1.3.9.1