2007-08-04 00:47:34 +03:00
# include "stdafx.h"
# include "CAdvmapInterface.h"
2007-08-30 13:11:53 +03:00
# include "hch\CLodHandler.h"
# include "hch\CPreGameTextHandler.h"
2007-09-14 16:11:10 +03:00
# include "hch\CGeneralTextHandler.h"
2007-09-18 16:30:26 +03:00
# include "hch\CTownHandler.h"
# include "CPathfinder.h"
# include "CGameInfo.h"
# include "SDL_Extensions.h"
2007-09-14 16:11:10 +03:00
# include "CCallback.h"
# include <boost/assign/std/vector.hpp>
2007-09-18 16:30:26 +03:00
# include "mapHandler.h"
2007-10-13 23:31:50 +03:00
# include "CMessage.h"
# include <boost/algorithm/string.hpp>
# include <boost/algorithm/string/replace.hpp>
2007-08-07 14:54:50 +03:00
extern TTF_Font * TNRB16 , * TNR , * GEOR13 , * GEORXX ; //fonts
2007-08-12 20:48:05 +03:00
using namespace boost : : logic ;
2007-09-14 16:11:10 +03:00
using namespace boost : : assign ;
2007-08-12 20:48:05 +03:00
using namespace CSDL_Ext ;
2007-08-04 00:47:34 +03:00
CAdvMapInt : : ~ CAdvMapInt ( )
{
SDL_FreeSurface ( bg ) ;
}
2007-08-06 07:03:34 +03:00
AdventureMapButton : : AdventureMapButton ( )
{
type = 2 ;
abs = true ;
active = false ;
ourObj = NULL ;
state = 0 ;
}
AdventureMapButton : : AdventureMapButton
2007-08-08 22:28:56 +03:00
( std : : string Name , std : : string HelpBox , void ( CAdvMapInt : : * Function ) ( ) , int x , int y , std : : string defName , bool activ , std : : vector < std : : string > * add )
2007-08-06 07:03:34 +03:00
{
type = 2 ;
abs = true ;
active = false ;
ourObj = NULL ;
state = 0 ;
2007-08-07 14:54:50 +03:00
name = Name ;
helpBox = HelpBox ;
2007-08-06 07:03:34 +03:00
int est = LOCPLINT - > playerID ;
CDefHandler * temp = CGI - > spriteh - > giveDef ( defName ) ; //todo: moze cieknac
for ( int i = 0 ; i < temp - > ourImages . size ( ) ; i + + )
{
2007-08-08 22:28:56 +03:00
imgs . resize ( 1 ) ;
imgs [ 0 ] . push_back ( temp - > ourImages [ i ] . bitmap ) ;
blueToPlayersAdv ( imgs [ curimg ] [ i ] , LOCPLINT - > playerID ) ;
}
if ( add )
{
imgs . resize ( imgs . size ( ) + add - > size ( ) ) ;
for ( int i = 0 ; i < add - > size ( ) ; i + + )
{
temp = CGI - > spriteh - > giveDef ( ( * add ) [ i ] ) ;
for ( int j = 0 ; j < temp - > ourImages . size ( ) ; j + + )
{
imgs [ i + 1 ] . push_back ( temp - > ourImages [ j ] . bitmap ) ;
blueToPlayersAdv ( imgs [ 1 + i ] [ j ] , LOCPLINT - > playerID ) ;
}
}
delete add ;
2007-08-06 07:03:34 +03:00
}
function = Function ;
pos . x = x ;
pos . y = y ;
2007-08-08 22:28:56 +03:00
pos . w = imgs [ curimg ] [ 0 ] - > w ;
pos . h = imgs [ curimg ] [ 0 ] - > h - 1 ;
2007-08-06 07:03:34 +03:00
if ( activ )
activate ( ) ;
}
2007-08-04 00:47:34 +03:00
void AdventureMapButton : : clickLeft ( tribool down )
{
if ( down )
2007-08-06 07:03:34 +03:00
{
2007-08-04 00:47:34 +03:00
state = 1 ;
2007-08-06 07:03:34 +03:00
}
else
{
state = 0 ;
}
2007-08-04 00:47:34 +03:00
show ( ) ;
2007-08-06 07:03:34 +03:00
if ( pressedL & & ( down = = false ) )
( LOCPLINT - > adventureInt - > * function ) ( ) ;
pressedL = state ;
2007-08-04 00:47:34 +03:00
}
void AdventureMapButton : : clickRight ( tribool down )
{
2007-10-13 23:31:50 +03:00
LOCPLINT - > adventureInt - > handleRightClick ( helpBox , down , this ) ;
2007-08-04 00:47:34 +03:00
}
void AdventureMapButton : : hover ( bool on )
{
2007-08-07 14:54:50 +03:00
Hoverable : : hover ( on ) ;
if ( on )
LOCPLINT - > adventureInt - > statusbar . print ( name ) ;
else if ( LOCPLINT - > adventureInt - > statusbar . current = = name )
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
2007-08-04 00:47:34 +03:00
}
void AdventureMapButton : : activate ( )
{
2007-08-06 07:03:34 +03:00
if ( active ) return ;
active = true ;
2007-08-04 00:47:34 +03:00
ClickableL : : activate ( ) ;
2007-10-13 23:31:50 +03:00
ClickableR : : activate ( ) ;
2007-08-04 00:47:34 +03:00
Hoverable : : activate ( ) ;
KeyInterested : : activate ( ) ;
}
void AdventureMapButton : : keyPressed ( SDL_KeyboardEvent & key )
{
//TODO: check if it's shortcut
}
void AdventureMapButton : : deactivate ( )
{
2007-08-06 07:03:34 +03:00
if ( ! active ) return ;
active = false ;
2007-08-04 00:47:34 +03:00
ClickableL : : deactivate ( ) ;
Hoverable : : deactivate ( ) ;
KeyInterested : : deactivate ( ) ;
}
2007-08-06 07:03:34 +03:00
2007-08-04 00:47:34 +03:00
void CList : : activate ( )
{
ClickableL : : activate ( ) ;
ClickableR : : activate ( ) ;
Hoverable : : activate ( ) ;
KeyInterested : : activate ( ) ;
2007-09-14 16:11:10 +03:00
MotionInterested : : activate ( ) ;
2007-08-04 00:47:34 +03:00
} ;
void CList : : deactivate ( )
{
ClickableL : : deactivate ( ) ;
ClickableR : : deactivate ( ) ;
Hoverable : : deactivate ( ) ;
KeyInterested : : deactivate ( ) ;
2007-09-14 16:11:10 +03:00
MotionInterested : : deactivate ( ) ;
2007-08-04 00:47:34 +03:00
} ;
void CList : : clickLeft ( tribool down )
{
2007-08-04 22:01:22 +03:00
} ;
2007-08-25 07:56:25 +03:00
CHeroList : : CHeroList ( )
{
pos = genRect ( 192 , 64 , 609 , 196 ) ;
2007-09-14 16:11:10 +03:00
arrupp = genRect ( 16 , 64 , 609 , 196 ) ;
arrdop = genRect ( 16 , 64 , 609 , 372 ) ;
//32px per hero
posmobx = 610 ;
posmoby = 213 ;
posporx = 617 ;
pospory = 212 ;
posmanx = 666 ;
posmany = 213 ;
2007-09-02 15:36:54 +03:00
arrup = CGI - > spriteh - > giveDef ( " IAM012.DEF " ) ;
arrdo = CGI - > spriteh - > giveDef ( " IAM013.DEF " ) ;
mobile = CGI - > spriteh - > giveDef ( " IMOBIL.DEF " ) ;
mana = CGI - > spriteh - > giveDef ( " IMANA.DEF " ) ;
2007-09-14 16:11:10 +03:00
empty = CGI - > bitmaph - > loadBitmap ( " HPSXXX.bmp " ) ;
selection = CGI - > bitmaph - > loadBitmap ( " HPSYYY.bmp " ) ;
SDL_SetColorKey ( selection , SDL_SRCCOLORKEY , SDL_MapRGB ( selection - > format , 0 , 255 , 255 ) ) ;
from = 0 ;
pressed = indeterminate ;
}
void CHeroList : : init ( )
{
2007-09-30 19:16:00 +03:00
bg = CSDL_Ext : : newSurface ( 68 , 193 , ekran ) ;
2007-09-14 16:11:10 +03:00
SDL_BlitSurface ( LOCPLINT - > adventureInt - > bg , & genRect ( 193 , 68 , 607 , 196 ) , bg , & genRect ( 193 , 68 , 0 , 0 ) ) ;
}
void CHeroList : : genList ( )
{
2007-10-20 00:12:37 +03:00
int howMany = LOCPLINT - > cb - > howManyHeroes ( ) ;
2007-09-14 16:11:10 +03:00
for ( int i = 0 ; i < howMany ; i + + )
{
2007-09-30 19:16:00 +03:00
items . push_back ( std : : pair < const CHeroInstance * , CPath * > ( LOCPLINT - > cb - > getHeroInfo ( LOCPLINT - > playerID , i , 0 ) , NULL ) ) ;
2007-09-14 16:11:10 +03:00
}
2007-08-25 07:56:25 +03:00
}
void CHeroList : : select ( int which )
{
2007-09-14 16:11:10 +03:00
selected = which ;
if ( which > = items . size ( ) )
2007-10-05 21:16:22 +03:00
return ;
2007-09-30 19:16:00 +03:00
LOCPLINT - > adventureInt - > centerOn ( items [ which ] . first - > pos ) ;
LOCPLINT - > adventureInt - > selection . type = HEROI_TYPE ;
LOCPLINT - > adventureInt - > selection . selected = items [ which ] . first ;
LOCPLINT - > adventureInt - > terrain . currentPath = items [ which ] . second ;
2007-10-05 21:16:22 +03:00
draw ( ) ;
LOCPLINT - > adventureInt - > townList . draw ( ) ;
2007-10-17 01:39:11 +03:00
LOCPLINT - > adventureInt - > infoBar . draw ( NULL ) ;
2007-08-25 07:56:25 +03:00
}
void CHeroList : : clickLeft ( tribool down )
{
2007-09-14 16:11:10 +03:00
if ( down )
{
/***************************ARROWS*****************************************/
if ( isItIn ( & arrupp , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & from > 0 )
{
blitAtWR ( arrup - > ourImages [ 1 ] . bitmap , arrupp . x , arrupp . y ) ;
pressed = true ;
return ;
}
else if ( isItIn ( & arrdop , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & ( items . size ( ) - from > 5 ) )
{
blitAtWR ( arrdo - > ourImages [ 1 ] . bitmap , arrdop . x , arrdop . y ) ;
pressed = false ;
return ;
}
/***************************HEROES*****************************************/
int hx = LOCPLINT - > current - > motion . x , hy = LOCPLINT - > current - > motion . y ;
hx - = pos . x ;
hy - = pos . y ; hy - = arrup - > ourImages [ 0 ] . bitmap - > h ;
float ny = ( float ) hy / ( float ) 32 ;
if ( ny > 5 | | ny < 0 )
return ;
select ( ny + from ) ;
}
else
{
if ( indeterminate ( pressed ) )
return ;
if ( pressed ) //up
{
blitAtWR ( arrup - > ourImages [ 0 ] . bitmap , arrupp . x , arrupp . y ) ;
pressed = indeterminate ;
if ( ! down )
{
from - - ;
if ( from < 0 )
from = 0 ;
draw ( ) ;
}
}
else if ( ! pressed ) //down
{
blitAtWR ( arrdo - > ourImages [ 0 ] . bitmap , arrdop . x , arrdop . y ) ;
pressed = indeterminate ;
if ( ! down )
{
from + + ;
2007-10-14 00:27:03 +03:00
//if (from<items.size()-5)
// from=items.size()-5;
2007-09-14 16:11:10 +03:00
draw ( ) ;
}
}
else
throw 0 ;
}
}
void CHeroList : : mouseMoved ( SDL_MouseMotionEvent & sEvent )
{
if ( isItIn ( & arrupp , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) )
{
if ( from > 0 )
LOCPLINT - > adventureInt - > statusbar . print ( CGI - > preth - > advHListUp . first ) ;
else
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
return ;
}
else if ( isItIn ( & arrdop , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) )
{
if ( ( items . size ( ) - from ) > 5 )
LOCPLINT - > adventureInt - > statusbar . print ( CGI - > preth - > advHListDown . first ) ;
else
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
return ;
}
//if not buttons then heroes
int hx = LOCPLINT - > current - > motion . x , hy = LOCPLINT - > current - > motion . y ;
hx - = pos . x ;
hy - = pos . y ; hy - = arrup - > ourImages [ 0 ] . bitmap - > h ;
float ny = ( float ) hy / ( float ) 32 ;
2007-09-14 20:01:13 +03:00
if ( ( ny > 5 | | ny < 0 ) | | ( from + ny > = items . size ( ) ) )
{
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
2007-09-14 16:11:10 +03:00
return ;
2007-09-14 20:01:13 +03:00
}
2007-09-14 16:11:10 +03:00
std : : vector < std : : string > temp ;
2007-09-30 19:16:00 +03:00
temp + = ( items [ from + ny ] . first - > name ) , ( items [ from + ny ] . first - > type - > heroClass - > name ) ;
2007-09-14 16:11:10 +03:00
LOCPLINT - > adventureInt - > statusbar . print ( processStr ( CGI - > generaltexth - > allTexts [ 15 ] , temp ) ) ;
//select(ny+from);
2007-08-25 07:56:25 +03:00
}
void CHeroList : : clickRight ( tribool down )
{
2007-10-14 00:27:03 +03:00
if ( down )
{
/***************************ARROWS*****************************************/
if ( isItIn ( & arrupp , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & from > 0 )
{
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advHListUp . second , down , this ) ;
}
else if ( isItIn ( & arrdop , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & ( items . size ( ) - from > 5 ) )
{
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advHListDown . second , down , this ) ;
}
}
else
{
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advHListUp . second , down , this ) ;
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advHListDown . second , down , this ) ;
}
2007-08-25 07:56:25 +03:00
}
void CHeroList : : hover ( bool on )
{
}
void CHeroList : : keyPressed ( SDL_KeyboardEvent & key )
{
}
2007-09-14 16:11:10 +03:00
void CHeroList : : draw ( )
2007-09-18 16:30:26 +03:00
{
for ( int iT = 0 + from ; iT < 5 + from ; iT + + )
2007-09-14 16:11:10 +03:00
{
int i = iT - from ;
if ( iT > = items . size ( ) )
{
blitAtWR ( mobile - > ourImages [ 0 ] . bitmap , posmobx , posmoby + i * 32 ) ;
blitAtWR ( mana - > ourImages [ 0 ] . bitmap , posmanx , posmany + i * 32 ) ;
blitAtWR ( empty , posporx , pospory + i * 32 ) ;
continue ;
}
int pom = ( LOCPLINT - > cb - > getHeroInfo ( LOCPLINT - > playerID , iT , 0 ) - > movement ) / 100 ;
if ( pom > 25 ) pom = 25 ;
if ( pom < 0 ) pom = 0 ;
blitAtWR ( mobile - > ourImages [ pom ] . bitmap , posmobx , posmoby + i * 32 ) ; //move point
2007-10-03 21:53:49 +03:00
pom = ( LOCPLINT - > cb - > getHeroInfo ( LOCPLINT - > playerID , iT , 0 ) - > mana ) / 5 ; //bylo: .../10;
2007-09-14 16:11:10 +03:00
if ( pom > 25 ) pom = 25 ;
if ( pom < 0 ) pom = 0 ;
blitAtWR ( mana - > ourImages [ pom ] . bitmap , posmanx , posmany + i * 32 ) ; //mana
SDL_Surface * temp = LOCPLINT - > cb - > getHeroInfo ( LOCPLINT - > playerID , iT , 0 ) - > type - > portraitSmall ;
blitAtWR ( temp , posporx , pospory + i * 32 ) ;
2007-10-05 21:16:22 +03:00
if ( ( selected = = iT ) & & ( LOCPLINT - > adventureInt - > selection . type = = HEROI_TYPE ) )
2007-09-14 16:11:10 +03:00
{
blitAtWR ( selection , posporx , pospory + i * 32 ) ;
}
//TODO: support for custom portraits
}
if ( from > 0 )
blitAtWR ( arrup - > ourImages [ 0 ] . bitmap , arrupp . x , arrupp . y ) ;
else
blitAtWR ( arrup - > ourImages [ 2 ] . bitmap , arrupp . x , arrupp . y ) ;
if ( items . size ( ) - from > 5 )
blitAtWR ( arrdo - > ourImages [ 0 ] . bitmap , arrdop . x , arrdop . y ) ;
else
blitAtWR ( arrdo - > ourImages [ 2 ] . bitmap , arrdop . x , arrdop . y ) ;
}
2007-08-25 07:56:25 +03:00
CTownList : : CTownList ( )
{
pos = genRect ( 192 , 48 , 747 , 196 ) ;
2007-09-02 15:36:54 +03:00
arrup = CGI - > spriteh - > giveDef ( " IAM014.DEF " ) ;
arrdo = CGI - > spriteh - > giveDef ( " IAM015.DEF " ) ;
2007-09-18 16:30:26 +03:00
arrupp . x = 747 ;
arrupp . y = 196 ;
2007-10-05 21:16:22 +03:00
arrupp . w = arrup - > ourImages [ 0 ] . bitmap - > w ;
arrupp . h = arrup - > ourImages [ 0 ] . bitmap - > h ;
2007-09-18 16:30:26 +03:00
arrdop . x = 747 ;
arrdop . y = 372 ;
2007-10-05 21:16:22 +03:00
arrdop . w = arrdo - > ourImages [ 0 ] . bitmap - > w ;
arrdop . h = arrdo - > ourImages [ 0 ] . bitmap - > h ;
2007-09-18 16:30:26 +03:00
posporx = 747 ;
2007-10-05 21:16:22 +03:00
pospory = 212 ;
pressed = indeterminate ;
2007-09-18 16:30:26 +03:00
from = 0 ;
2007-08-25 07:56:25 +03:00
}
2007-09-14 16:11:10 +03:00
void CTownList : : genList ( )
{
2007-09-18 16:30:26 +03:00
int howMany = LOCPLINT - > cb - > howManyTowns ( ) ;
for ( int i = 0 ; i < howMany ; i + + )
{
items . push_back ( LOCPLINT - > cb - > getTownInfo ( i , 0 ) ) ;
}
2007-09-14 16:11:10 +03:00
}
2007-08-25 07:56:25 +03:00
void CTownList : : select ( int which )
{
2007-10-05 21:16:22 +03:00
selected = which ;
if ( which > = items . size ( ) )
return ;
LOCPLINT - > adventureInt - > centerOn ( items [ which ] - > pos ) ;
LOCPLINT - > adventureInt - > selection . type = TOWNI_TYPE ;
LOCPLINT - > adventureInt - > selection . selected = items [ which ] ;
LOCPLINT - > adventureInt - > terrain . currentPath = NULL ;
draw ( ) ;
LOCPLINT - > adventureInt - > heroList . draw ( ) ;
2007-08-25 07:56:25 +03:00
}
2007-09-14 16:11:10 +03:00
void CTownList : : mouseMoved ( SDL_MouseMotionEvent & sEvent )
{
2007-10-14 00:27:03 +03:00
if ( isItIn ( & arrupp , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) )
{
if ( from > 0 )
LOCPLINT - > adventureInt - > statusbar . print ( CGI - > preth - > advTListUp . first ) ;
else
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
return ;
}
else if ( isItIn ( & arrdop , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) )
{
if ( ( items . size ( ) - from ) > 5 )
LOCPLINT - > adventureInt - > statusbar . print ( CGI - > preth - > advTListDown . first ) ;
else
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
return ;
}
//if not buttons then heroes
int hx = LOCPLINT - > current - > motion . x , hy = LOCPLINT - > current - > motion . y ;
hx - = pos . x ;
hy - = pos . y ; hy - = arrup - > ourImages [ 0 ] . bitmap - > h ;
float ny = ( float ) hy / ( float ) 32 ;
if ( ( ny > 5 | | ny < 0 ) | | ( from + ny > = items . size ( ) ) )
{
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
return ;
} ;
//LOCPLINT->adventureInt->statusbar.print( items[from+ny]->name + ", " + items[from+ny]->town->name ); //TODO - uncomment when pointer to the town type is initialized
2007-09-14 16:11:10 +03:00
}
2007-08-25 07:56:25 +03:00
void CTownList : : clickLeft ( tribool down )
{
2007-10-05 21:16:22 +03:00
if ( down )
{
/***************************ARROWS*****************************************/
if ( isItIn ( & arrupp , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & from > 0 )
{
blitAtWR ( arrup - > ourImages [ 1 ] . bitmap , arrupp . x , arrupp . y ) ;
pressed = true ;
return ;
}
else if ( isItIn ( & arrdop , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & ( items . size ( ) - from > 5 ) )
{
blitAtWR ( arrdo - > ourImages [ 1 ] . bitmap , arrdop . x , arrdop . y ) ;
pressed = false ;
return ;
}
2007-10-14 00:27:03 +03:00
/***************************TOWNS*****************************************/
2007-10-05 21:16:22 +03:00
int hx = LOCPLINT - > current - > motion . x , hy = LOCPLINT - > current - > motion . y ;
hx - = pos . x ;
hy - = pos . y ; hy - = arrup - > ourImages [ 0 ] . bitmap - > h ;
float ny = ( float ) hy / ( float ) 32 ;
if ( ny > 5 | | ny < 0 )
return ;
select ( ny + from ) ;
}
else
{
if ( indeterminate ( pressed ) )
return ;
if ( pressed ) //up
{
blitAtWR ( arrup - > ourImages [ 0 ] . bitmap , arrupp . x , arrupp . y ) ;
pressed = indeterminate ;
if ( ! down )
{
from - - ;
if ( from < 0 )
from = 0 ;
draw ( ) ;
}
}
else if ( ! pressed ) //down
{
blitAtWR ( arrdo - > ourImages [ 0 ] . bitmap , arrdop . x , arrdop . y ) ;
pressed = indeterminate ;
if ( ! down )
{
from + + ;
2007-10-14 00:27:03 +03:00
//if (from<items.size()-5)
// from=items.size()-5;
2007-10-05 21:16:22 +03:00
draw ( ) ;
}
}
else
throw 0 ;
}
2007-08-25 07:56:25 +03:00
}
void CTownList : : clickRight ( tribool down )
2007-10-14 00:27:03 +03:00
{
if ( down )
{
/***************************ARROWS*****************************************/
if ( isItIn ( & arrupp , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & from > 0 )
{
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advTListUp . second , down , this ) ;
}
else if ( isItIn ( & arrdop , LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) & & ( items . size ( ) - from > 5 ) )
{
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advTListDown . second , down , this ) ;
}
}
else
{
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advTListUp . second , down , this ) ;
LOCPLINT - > adventureInt - > handleRightClick ( CGI - > preth - > advTListDown . second , down , this ) ;
}
2007-08-25 07:56:25 +03:00
}
void CTownList : : hover ( bool on )
{
}
void CTownList : : keyPressed ( SDL_KeyboardEvent & key )
{
}
2007-09-14 16:11:10 +03:00
void CTownList : : draw ( )
2007-09-18 16:30:26 +03:00
{
for ( int iT = 0 + from ; iT < 5 + from ; iT + + )
{
int i = iT - from ;
if ( iT > = items . size ( ) )
{
blitAtWR ( CGI - > townh - > getPic ( - 1 ) , posporx , pospory + i * 32 ) ;
continue ;
}
2007-10-14 15:11:18 +03:00
blitAtWR ( CGI - > townh - > getPic ( items [ i ] - > town - > typeID ) , posporx , pospory + i * 32 ) ;
2007-09-18 16:30:26 +03:00
2007-10-05 21:16:22 +03:00
if ( ( selected = = iT ) & & ( LOCPLINT - > adventureInt - > selection . type = = TOWNI_TYPE ) )
2007-09-18 16:30:26 +03:00
{
blitAtWR ( CGI - > townh - > getPic ( - 2 ) , posporx , pospory + i * 32 ) ;
}
//TODO: dodac oznaczanie zbudowania w danej turze i posiadania fortu
}
if ( from > 0 )
blitAtWR ( arrup - > ourImages [ 0 ] . bitmap , arrupp . x , arrupp . y ) ;
else
blitAtWR ( arrup - > ourImages [ 2 ] . bitmap , arrupp . x , arrupp . y ) ;
if ( items . size ( ) - from > 5 )
blitAtWR ( arrdo - > ourImages [ 0 ] . bitmap , arrdop . x , arrdop . y ) ;
else
blitAtWR ( arrdo - > ourImages [ 2 ] . bitmap , arrdop . x , arrdop . y ) ;
2007-09-14 16:11:10 +03:00
}
2007-08-07 14:54:50 +03:00
CStatusBar : : CStatusBar ( int x , int y )
{
bg = CGI - > bitmaph - > loadBitmap ( " ADROLLVR.bmp " ) ;
SDL_SetColorKey ( bg , SDL_SRCCOLORKEY , SDL_MapRGB ( bg - > format , 0 , 255 , 255 ) ) ;
pos . x = x ;
pos . y = y ;
pos . w = bg - > w ;
pos . h = bg - > h ;
middlex = ( bg - > w / 2 ) + x ;
middley = ( bg - > h / 2 ) + y ;
}
CStatusBar : : ~ CStatusBar ( )
{
SDL_FreeSurface ( bg ) ;
}
void CStatusBar : : clear ( )
{
current = " " ;
blitAtWR ( bg , pos . x , pos . y ) ;
}
2007-08-06 07:03:34 +03:00
void CStatusBar : : print ( std : : string text )
{
2007-08-07 14:54:50 +03:00
current = text ;
blitAtWR ( bg , pos . x , pos . y ) ;
printAtMiddle ( current , middlex , middley , GEOR13 , zwykly ) ;
2007-08-06 07:03:34 +03:00
}
void CStatusBar : : show ( )
{
2007-08-07 14:54:50 +03:00
blitAtWR ( bg , pos . x , pos . y ) ;
printAtMiddle ( current , middlex , middley , GEOR13 , zwykly ) ;
2007-08-06 07:03:34 +03:00
}
2007-08-20 00:12:55 +03:00
CMinimap : : CMinimap ( bool draw )
{
statusbarTxt = CGI - > preth - > advWorldMap . first ;
2007-10-13 23:31:50 +03:00
rcText = CGI - > preth - > advWorldMap . second ;
2007-08-20 00:12:55 +03:00
pos . x = 630 ;
pos . y = 26 ;
pos . h = pos . w = 144 ;
2007-10-20 00:12:37 +03:00
//radar = CGI->spriteh->giveDef("RADAR.DEF");
2007-09-16 20:21:23 +03:00
std : : ifstream is ( " config/minimap.txt " , std : : ifstream : : in ) ;
2007-08-20 00:12:55 +03:00
for ( int i = 0 ; i < TERRAIN_TYPES ; i + + )
{
std : : pair < int , SDL_Color > vinya ;
std : : pair < int , SDL_Color > vinya2 ;
int pom ;
is > > pom ;
vinya2 . first = vinya . first = pom ;
is > > pom ;
vinya . second . r = pom ;
is > > pom ;
vinya . second . g = pom ;
is > > pom ;
vinya . second . b = pom ;
is > > pom ;
vinya2 . second . r = pom ;
is > > pom ;
vinya2 . second . g = pom ;
is > > pom ;
vinya2 . second . b = pom ;
vinya . second . unused = vinya2 . second . unused = 255 ;
colors . insert ( vinya ) ;
colorsBlocked . insert ( vinya2 ) ;
}
is . close ( ) ;
if ( draw )
redraw ( ) ;
}
void CMinimap : : draw ( )
{
2007-10-20 00:12:37 +03:00
//draw terrain
2007-08-20 00:12:55 +03:00
blitAtWR ( map [ LOCPLINT - > adventureInt - > position . z ] , pos . x , pos . y ) ;
2007-10-20 00:12:37 +03:00
//draw heroes
std : : vector < const CHeroInstance * > * hh = LOCPLINT - > cb - > getHeroesInfo ( false ) ;
int mw = map [ 0 ] - > w , mh = map [ 0 ] - > h ,
wo = mw / CGI - > mh - > sizes . x , ho = mh / CGI - > mh - > sizes . y ;
for ( int i = 0 ; i < hh - > size ( ) ; i + + )
{
int3 hpos = ( * hh ) [ i ] - > getPosition ( false ) ;
float zawx = ( ( float ) hpos . x / CGI - > mh - > sizes . x ) , zawy = ( ( float ) hpos . y / CGI - > mh - > sizes . y ) ;
int3 maplgp ( zawx * mw , zawy * mh , hpos . z ) ;
for ( int ii = 0 ; ii < wo ; ii + + )
{
for ( int jj = 0 ; jj < ho ; jj + + )
{
SDL_PutPixel ( ekran , maplgp . x + pos . x + ii , maplgp . y + pos . y + jj , CGI - > playerColors [ ( * hh ) [ i ] - > owner ] . r , CGI - > playerColors [ ( * hh ) [ i ] - > owner ] . g , CGI - > playerColors [ ( * hh ) [ i ] - > owner ] . b ) ;
}
}
}
SDL_UpdateRect ( ekran , pos . x , pos . y , pos . w , pos . h ) ;
delete hh ;
//draw FoW
for ( int i = 0 ; i < mw ; i + + )
{
for ( int j = 0 ; j < mh ; j + + )
{
int3 pp ;
pp . x = ( ( ( float ) i / mw ) * CGI - > mh - > sizes . x ) ;
pp . y = ( ( ( float ) j / mh ) * CGI - > mh - > sizes . y ) ;
pp . z = LOCPLINT - > adventureInt - > position . z ;
if ( ! LOCPLINT - > cb - > isVisible ( pp ) )
{
for ( int ii = 0 ; ii < wo ; ii + + )
{
for ( int jj = 0 ; jj < ho ; jj + + )
{
if ( ( i + ii < pos . w - 1 ) & & ( j + jj < pos . h - 1 ) )
SDL_PutPixel ( ekran , i + pos . x + ii , j + pos . y + jj , 0 , 0 , 0 ) ;
}
}
}
}
}
2007-08-20 00:12:55 +03:00
}
void CMinimap : : redraw ( int level ) // (level==-1) => redraw all levels
{
( CGameInfo : : mainObj ) ;
for ( int i = 0 ; i < CGI - > mh - > sizes . z ; i + + )
{
SDL_Surface * pom ;
if ( ( level > = 0 ) & & ( i ! = level ) )
continue ;
if ( map . size ( ) < i + 1 )
2007-09-30 19:16:00 +03:00
pom = CSDL_Ext : : newSurface ( pos . w , pos . h , ekran ) ;
2007-08-20 00:12:55 +03:00
else pom = map [ i ] ;
for ( int x = 0 ; x < pos . w ; x + + )
{
for ( int y = 0 ; y < pos . h ; y + + )
{
int mx = ( CGI - > mh - > sizes . x * x ) / pos . w ;
int my = ( CGI - > mh - > sizes . y * y ) / pos . h ;
if ( CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . blocked & & ( ! CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . visitable ) )
SDL_PutPixel ( pom , x , y , colorsBlocked [ CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . terType ] . r , colorsBlocked [ CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . terType ] . g , colorsBlocked [ CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . terType ] . b ) ;
else SDL_PutPixel ( pom , x , y , colors [ CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . terType ] . r , colors [ CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . terType ] . g , colors [ CGI - > mh - > ttiles [ mx ] [ my ] [ i ] . terType ] . b ) ;
}
}
map . push_back ( pom ) ;
}
}
void CMinimap : : updateRadar ( )
{ }
void CMinimap : : clickRight ( tribool down )
2007-10-13 23:31:50 +03:00
{
LOCPLINT - > adventureInt - > handleRightClick ( rcText , down , this ) ;
}
2007-08-20 00:12:55 +03:00
void CMinimap : : clickLeft ( tribool down )
{
2007-08-27 17:15:03 +03:00
if ( down & & ( ! pressedL ) )
MotionInterested : : activate ( ) ;
else if ( ! down )
2007-09-16 20:21:23 +03:00
{
if ( std : : find ( LOCPLINT - > motioninterested . begin ( ) , LOCPLINT - > motioninterested . end ( ) , this ) ! = LOCPLINT - > motioninterested . end ( ) )
MotionInterested : : deactivate ( ) ;
}
2007-08-20 00:12:55 +03:00
ClickableL : : clickLeft ( down ) ;
if ( ! ( ( bool ) down ) )
return ;
float dx = ( ( float ) ( LOCPLINT - > current - > motion . x - pos . x ) ) / ( ( float ) pos . w ) ,
dy = ( ( float ) ( LOCPLINT - > current - > motion . y - pos . y ) ) / ( ( float ) pos . h ) ;
2007-09-14 16:11:10 +03:00
int3 newCPos ;
newCPos . x = ( CGI - > mh - > sizes . x * dx ) ;
newCPos . y = ( CGI - > mh - > sizes . y * dy ) ;
newCPos . z = LOCPLINT - > adventureInt - > position . z ;
LOCPLINT - > adventureInt - > centerOn ( newCPos ) ;
2007-08-20 00:12:55 +03:00
}
void CMinimap : : hover ( bool on )
{
Hoverable : : hover ( on ) ;
if ( on )
LOCPLINT - > adventureInt - > statusbar . print ( statusbarTxt ) ;
else if ( LOCPLINT - > adventureInt - > statusbar . current = = statusbarTxt )
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
}
2007-08-27 17:15:03 +03:00
void CMinimap : : mouseMoved ( SDL_MouseMotionEvent & sEvent )
{
if ( pressedL )
{
clickLeft ( true ) ;
}
}
2007-08-20 00:12:55 +03:00
void CMinimap : : activate ( )
{
ClickableL : : activate ( ) ;
ClickableR : : activate ( ) ;
Hoverable : : activate ( ) ;
2007-08-27 17:15:03 +03:00
if ( pressedL )
MotionInterested : : activate ( ) ;
2007-08-20 00:12:55 +03:00
}
void CMinimap : : deactivate ( )
{
2007-08-27 17:15:03 +03:00
if ( pressedL )
MotionInterested : : deactivate ( ) ;
2007-08-20 00:12:55 +03:00
ClickableL : : deactivate ( ) ;
ClickableR : : deactivate ( ) ;
Hoverable : : deactivate ( ) ;
}
2007-08-17 20:42:21 +03:00
CTerrainRect : : CTerrainRect ( ) : currentPath ( NULL )
{
2007-08-20 00:12:55 +03:00
tilesw = 19 ;
tilesh = 18 ;
2007-08-17 20:42:21 +03:00
pos . x = 7 ;
pos . y = 6 ;
2007-09-22 04:16:31 +03:00
pos . w = 593 ;
2007-08-17 20:42:21 +03:00
pos . h = 547 ;
arrows = CGI - > spriteh - > giveDef ( " ADAG.DEF " ) ;
for ( int y = 0 ; y < arrows - > ourImages . size ( ) ; + + y )
{
CSDL_Ext : : fullAlphaTransform ( arrows - > ourImages [ y ] . bitmap ) ;
}
}
2007-08-04 22:01:22 +03:00
void CTerrainRect : : activate ( )
{
ClickableL : : activate ( ) ;
ClickableR : : activate ( ) ;
Hoverable : : activate ( ) ;
KeyInterested : : activate ( ) ;
2007-10-07 17:51:09 +03:00
MotionInterested : : activate ( ) ;
2007-08-04 22:01:22 +03:00
} ;
void CTerrainRect : : deactivate ( )
{
ClickableL : : deactivate ( ) ;
ClickableR : : deactivate ( ) ;
Hoverable : : deactivate ( ) ;
KeyInterested : : deactivate ( ) ;
2007-10-07 17:51:09 +03:00
MotionInterested : : deactivate ( ) ;
2007-08-04 22:01:22 +03:00
} ;
2007-09-22 04:16:31 +03:00
void CTerrainRect : : clickLeft ( tribool down )
{
if ( ( down = = false ) | | indeterminate ( down ) )
return ;
2007-09-30 19:16:00 +03:00
if ( LOCPLINT - > adventureInt - > selection . type ! = HEROI_TYPE )
{
if ( currentPath )
{
delete currentPath ;
currentPath = NULL ;
}
return ;
}
2007-10-07 17:51:09 +03:00
int3 mp = whichTileIsIt ( ) ;
2007-09-30 19:16:00 +03:00
if ( ( mp . x < 0 ) | | ( mp . y < 0 ) )
return ;
2007-09-22 04:16:31 +03:00
if ( currentPath )
{
if ( ( currentPath - > endPos ( ) ) = = mp )
{ //move
2007-10-05 21:16:22 +03:00
CPath sended ( * currentPath ) ; //temporary path - engine will operate on it
LOCPLINT - > cb - > moveHero ( ( ( const CHeroInstance * ) LOCPLINT - > adventureInt - > selection . selected ) - > type - > ID , & sended , 1 , 0 ) ;
2007-09-22 04:16:31 +03:00
}
else
{
delete currentPath ;
2007-09-30 19:16:00 +03:00
currentPath = NULL ;
2007-09-22 04:16:31 +03:00
}
}
2007-09-30 19:16:00 +03:00
const CHeroInstance * currentHero = LOCPLINT - > adventureInt - > heroList . items [ LOCPLINT - > adventureInt - > heroList . selected ] . first ;
2007-10-05 21:16:22 +03:00
int3 bufpos = currentHero - > getPosition ( false ) ;
2007-10-03 22:56:08 +03:00
//bufpos.x-=1;
currentPath = LOCPLINT - > adventureInt - > heroList . items [ LOCPLINT - > adventureInt - > heroList . selected ] . second = CGI - > pathf - > getPath ( bufpos , mp , currentHero , 1 ) ;
2007-10-13 23:31:50 +03:00
//if (LOCPLINT->objsToBlit.size()==0)
//{
// CSimpleWindow * temp = CMessage::genWindow(" Tutaj dlugi dlugo test Tutaj dlugi dlugi dlugo test Tutaj dlugi dlugi dlugo test Tutaj dlugi dlugi dlugo test {Tutaj tytul} Tutaj dlugi dlugi dlugo test",0);
// temp->pos.x=temp->pos.y=0;temp->ID=3;
// LOCPLINT->objsToBlit.push_back(temp);
//}
//SDL_Delay(5000);
2007-09-22 04:16:31 +03:00
}
void CTerrainRect : : clickRight ( tribool down )
{
}
void CTerrainRect : : mouseMoved ( SDL_MouseMotionEvent & sEvent )
{
2007-10-07 17:51:09 +03:00
int3 pom = LOCPLINT - > adventureInt - > verifyPos ( whichTileIsIt ( sEvent . x , sEvent . y ) ) ;
if ( pom ! = curHoveredTile )
curHoveredTile = pom ;
else
return ;
std : : vector < std : : string > temp = LOCPLINT - > cb - > getObjDescriptions ( pom ) ;
if ( temp . size ( ) )
{
2007-10-07 19:01:53 +03:00
LOCPLINT - > adventureInt - > statusbar . print ( ( * ( ( temp . end ( ) ) - 1 ) ) ) ;
2007-10-07 17:51:09 +03:00
}
else
{
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
}
2007-09-22 04:16:31 +03:00
}
2007-08-04 22:01:22 +03:00
void CTerrainRect : : keyPressed ( SDL_KeyboardEvent & key ) { }
2007-10-07 17:51:09 +03:00
void CTerrainRect : : hover ( bool on )
{
if ( ! on )
LOCPLINT - > adventureInt - > statusbar . clear ( ) ;
}
2007-08-04 22:01:22 +03:00
void CTerrainRect : : show ( )
{
SDL_Surface * teren = CGI - > mh - > terrainRect
2007-08-06 07:03:34 +03:00
( LOCPLINT - > adventureInt - > position . x , LOCPLINT - > adventureInt - > position . y ,
2007-10-16 20:46:01 +03:00
tilesw , tilesh , LOCPLINT - > adventureInt - > position . z , LOCPLINT - > adventureInt - > anim , LOCPLINT - > cb - > getVisibilityMap ( ) ) ;
2007-08-20 00:12:55 +03:00
SDL_BlitSurface ( teren , & genRect ( pos . h , pos . w , 0 , 0 ) , ekran , & genRect ( 547 , 594 , 7 , 6 ) ) ;
2007-08-04 22:01:22 +03:00
SDL_FreeSurface ( teren ) ;
2007-10-11 23:13:13 +03:00
if ( currentPath & & LOCPLINT - > adventureInt - > position . z = = currentPath - > startPos ( ) . z ) //drawing path
2007-08-17 20:42:21 +03:00
{
for ( int i = 0 ; i < currentPath - > nodes . size ( ) - 1 ; i + + )
{
int pn = - 1 ; //number of picture
if ( i = = 0 ) //last tile
{
2007-09-22 04:16:31 +03:00
int x = 32 * ( currentPath - > nodes [ i ] . coord . x - LOCPLINT - > adventureInt - > position . x ) + 7 ,
y = 32 * ( currentPath - > nodes [ i ] . coord . y - LOCPLINT - > adventureInt - > position . y ) + 6 ;
2007-08-17 20:42:21 +03:00
if ( x < 0 | | y < 0 | | x > pos . w | | y > pos . h )
continue ;
pn = 0 ;
}
else
{
std : : vector < CPathNode > & cv = currentPath - > nodes ;
2007-09-22 04:16:31 +03:00
if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
pn = 3 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 12 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 21 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 22 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 2 ;
}
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 4 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 13 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 22 ;
}
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 5 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 14 ;
}
2007-10-04 19:40:40 +03:00
else if ( cv [ i - 1 ] . coord . x + 1 = = cv [ i ] . coord . x & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
pn = 23 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 24 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 4 ;
}
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 6 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
pn = 15 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 24 ;
}
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
pn = 7 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 16 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 17 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 6 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 18 ;
}
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 8 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 9 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 18 ;
}
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 1 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 10 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
pn = 19 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 8 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 20 ;
}
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i + 1 ] . coord . x = = cv [ i ] . coord . x - 1 & & cv [ i + 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
2007-09-22 04:16:31 +03:00
if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y - 1 )
2007-08-17 20:42:21 +03:00
{
pn = 2 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y )
2007-08-17 20:42:21 +03:00
{
pn = 11 ;
}
2007-09-22 04:16:31 +03:00
else if ( cv [ i - 1 ] . coord . x = = cv [ i ] . coord . x + 1 & & cv [ i - 1 ] . coord . y = = cv [ i ] . coord . y + 1 )
2007-08-17 20:42:21 +03:00
{
pn = 20 ;
}
}
2007-10-14 15:11:18 +03:00
2007-08-17 20:42:21 +03:00
}
2007-10-14 15:11:18 +03:00
if ( ( ( currentPath - > nodes [ i ] . dist ) - ( * ( currentPath - > nodes . end ( ) - 1 ) ) . dist ) > ( ( const CHeroInstance * ) ( LOCPLINT - > adventureInt - > selection . selected ) ) - > movement )
pn + = 25 ;
2007-08-17 20:42:21 +03:00
if ( pn > = 0 )
2007-10-14 15:11:18 +03:00
{
2007-09-22 04:16:31 +03:00
int x = 32 * ( currentPath - > nodes [ i ] . coord . x - LOCPLINT - > adventureInt - > position . x ) + 7 ,
y = 32 * ( currentPath - > nodes [ i ] . coord . y - LOCPLINT - > adventureInt - > position . y ) + 6 ;
2007-08-17 20:42:21 +03:00
if ( x < 0 | | y < 0 | | x > pos . w | | y > pos . h )
continue ;
int hvx = ( x + arrows - > ourImages [ pn ] . bitmap - > w ) - ( pos . x + pos . w ) ,
hvy = ( y + arrows - > ourImages [ pn ] . bitmap - > h ) - ( pos . y + pos . h ) ;
if ( hvx < 0 & & hvy < 0 )
blitAtWR ( arrows - > ourImages [ pn ] . bitmap , x , y ) ;
else if ( hvx < 0 )
SDL_BlitSurface
( arrows - > ourImages [ pn ] . bitmap , & genRect ( arrows - > ourImages [ pn ] . bitmap - > h - hvy , arrows - > ourImages [ pn ] . bitmap - > w , 0 , 0 ) ,
ekran , & genRect ( arrows - > ourImages [ pn ] . bitmap - > h - hvy , arrows - > ourImages [ pn ] . bitmap - > w , x , y ) ) ;
else if ( hvy < 0 )
{
SDL_BlitSurface
( arrows - > ourImages [ pn ] . bitmap , & genRect ( arrows - > ourImages [ pn ] . bitmap - > h , arrows - > ourImages [ pn ] . bitmap - > w - hvx , 0 , 0 ) ,
ekran , & genRect ( arrows - > ourImages [ pn ] . bitmap - > h , arrows - > ourImages [ pn ] . bitmap - > w - hvx , x , y ) ) ;
}
else
SDL_BlitSurface
( arrows - > ourImages [ pn ] . bitmap , & genRect ( arrows - > ourImages [ pn ] . bitmap - > h - hvy , arrows - > ourImages [ pn ] . bitmap - > w - hvx , 0 , 0 ) ,
ekran , & genRect ( arrows - > ourImages [ pn ] . bitmap - > h - hvy , arrows - > ourImages [ pn ] . bitmap - > w - hvx , x , y ) ) ;
}
2007-08-20 00:12:55 +03:00
} //for (int i=0;i<currentPath->nodes.size()-1;i++)
} // if (currentPath)
2007-08-04 22:01:22 +03:00
}
2007-08-06 07:03:34 +03:00
2007-10-07 17:51:09 +03:00
int3 CTerrainRect : : whichTileIsIt ( int x , int y )
{
int3 ret ;
ret . x = LOCPLINT - > adventureInt - > position . x + ( ( LOCPLINT - > current - > motion . x - pos . x ) / 32 ) ;
ret . y = LOCPLINT - > adventureInt - > position . y + ( ( LOCPLINT - > current - > motion . y - pos . y ) / 32 ) ;
ret . z = LOCPLINT - > adventureInt - > position . z ;
return ret ;
}
int3 CTerrainRect : : whichTileIsIt ( )
{
return whichTileIsIt ( LOCPLINT - > current - > motion . x , LOCPLINT - > current - > motion . y ) ;
}
2007-09-16 20:21:23 +03:00
void CResDataBar : : clickRight ( tribool down )
{
}
void CResDataBar : : activate ( )
{
ClickableR : : activate ( ) ;
}
void CResDataBar : : deactivate ( )
{
ClickableR : : deactivate ( ) ;
}
CResDataBar : : CResDataBar ( )
{
bg = CGI - > bitmaph - > loadBitmap ( " ZRESBAR.bmp " ) ;
SDL_SetColorKey ( bg , SDL_SRCCOLORKEY , SDL_MapRGB ( bg - > format , 0 , 255 , 255 ) ) ;
2007-10-21 19:45:13 +03:00
//std::vector<SDL_Color> kolory;
//SDL_Color p1={40,65,139,255}, p2={36,59,125,255}, p3={35,56,121,255};
//kolory+=p1,p2,p3;
//blueToPlayersAdv(bg,LOCPLINT->playerID,2,&kolory);
blueToPlayersAdv ( bg , LOCPLINT - > playerID , 2 ) ;
2007-09-16 20:21:23 +03:00
pos = genRect ( bg - > h , bg - > w , 3 , 575 ) ;
txtpos + = ( std : : pair < int , int > ( 35 , 577 ) ) , ( std : : pair < int , int > ( 120 , 577 ) ) , ( std : : pair < int , int > ( 205 , 577 ) ) ,
2007-09-18 16:30:26 +03:00
( std : : pair < int , int > ( 290 , 577 ) ) , ( std : : pair < int , int > ( 375 , 577 ) ) , ( std : : pair < int , int > ( 460 , 577 ) ) ,
( std : : pair < int , int > ( 545 , 577 ) ) , ( std : : pair < int , int > ( 620 , 577 ) ) ;
datetext = CGI - > generaltexth - > allTexts [ 62 ] + " : %s, " + CGI - > generaltexth - > allTexts [ 63 ] + " : %s, " +
CGI - > generaltexth - > allTexts [ 64 ] + " : %s " ;
2007-09-16 20:21:23 +03:00
}
CResDataBar : : ~ CResDataBar ( )
{
SDL_FreeSurface ( bg ) ;
}
void CResDataBar : : draw ( )
{
blitAt ( bg , pos . x , pos . y ) ;
char * buf = new char [ 15 ] ;
for ( int i = 0 ; i < 7 ; i + + )
{
itoa ( LOCPLINT - > cb - > getResourceAmount ( i ) , buf , 10 ) ;
printAt ( buf , txtpos [ i ] . first , txtpos [ i ] . second , GEOR13 , zwykly ) ;
}
2007-09-18 16:30:26 +03:00
std : : vector < std : : string > temp ;
itoa ( LOCPLINT - > cb - > getDate ( 3 ) , buf , 10 ) ; temp + = std : : string ( buf ) ;
itoa ( LOCPLINT - > cb - > getDate ( 2 ) , buf , 10 ) ; temp + = std : : string ( buf ) ;
itoa ( LOCPLINT - > cb - > getDate ( 1 ) , buf , 10 ) ; temp + = std : : string ( buf ) ;
printAt ( processStr ( datetext , temp ) , txtpos [ 7 ] . first , txtpos [ 7 ] . second , GEOR13 , zwykly ) ;
temp . clear ( ) ;
2007-09-16 20:21:23 +03:00
updateRect ( & pos , ekran ) ;
2007-09-18 16:30:26 +03:00
delete buf ;
2007-09-16 20:21:23 +03:00
}
2007-09-30 19:16:00 +03:00
CInfoBar : : CInfoBar ( )
{
2007-10-17 01:39:11 +03:00
pos . x = 605 ;
2007-09-30 19:16:00 +03:00
pos . y = 389 ;
pos . w = 194 ;
pos . h = 186 ;
}
void CInfoBar : : draw ( void * specific )
{
SDL_Surface * todr = LOCPLINT - > infoWin ( specific ) ;
blitAt ( todr , pos . x , pos . y ) ;
SDL_FreeSurface ( todr ) ;
}
2007-08-06 07:03:34 +03:00
CAdvMapInt : : CAdvMapInt ( int Player )
: player ( Player ) ,
2007-08-07 14:54:50 +03:00
statusbar ( 7 , 556 ) ,
2007-08-06 07:03:34 +03:00
kingOverview ( CGI - > preth - > advKingdomOverview . first , CGI - > preth - > advKingdomOverview . second ,
& CAdvMapInt : : fshowOverview , 679 , 196 , " IAM002.DEF " ) ,
2007-08-08 22:28:56 +03:00
underground ( CGI - > preth - > advSurfaceSwitch . first , CGI - > preth - > advSurfaceSwitch . second ,
& CAdvMapInt : : fswitchLevel , 711 , 196 , " IAM010.DEF " , false , new std : : vector < std : : string > ( 1 , std : : string ( " IAM003.DEF " ) ) ) ,
2007-08-06 07:03:34 +03:00
questlog ( CGI - > preth - > advQuestlog . first , CGI - > preth - > advQuestlog . second ,
& CAdvMapInt : : fshowQuestlog , 679 , 228 , " IAM004.DEF " ) ,
sleepWake ( CGI - > preth - > advSleepWake . first , CGI - > preth - > advSleepWake . second ,
& CAdvMapInt : : fsleepWake , 711 , 228 , " IAM005.DEF " ) ,
moveHero ( CGI - > preth - > advMoveHero . first , CGI - > preth - > advMoveHero . second ,
& CAdvMapInt : : fmoveHero , 679 , 260 , " IAM006.DEF " ) ,
spellbook ( CGI - > preth - > advCastSpell . first , CGI - > preth - > advCastSpell . second ,
& CAdvMapInt : : fshowSpellbok , 711 , 260 , " IAM007.DEF " ) ,
advOptions ( CGI - > preth - > advAdvOptions . first , CGI - > preth - > advAdvOptions . second ,
& CAdvMapInt : : fadventureOPtions , 679 , 292 , " IAM008.DEF " ) ,
sysOptions ( CGI - > preth - > advSystemOptions . first , CGI - > preth - > advSystemOptions . second ,
& CAdvMapInt : : fsystemOptions , 711 , 292 , " IAM009.DEF " ) ,
nextHero ( CGI - > preth - > advNextHero . first , CGI - > preth - > advNextHero . second ,
& CAdvMapInt : : fnextHero , 679 , 324 , " IAM000.DEF " ) ,
endTurn ( CGI - > preth - > advEndTurn . first , CGI - > preth - > advEndTurn . second ,
& CAdvMapInt : : fendTurn , 679 , 356 , " IAM001.DEF " )
{
2007-09-14 16:11:10 +03:00
LOCPLINT - > adventureInt = this ;
2007-08-06 07:03:34 +03:00
bg = CGI - > bitmaph - > loadBitmap ( " ADVMAP.bmp " ) ;
blueToPlayersAdv ( bg , player ) ;
scrollingLeft = false ;
scrollingRight = false ;
scrollingUp = false ;
scrollingDown = false ;
updateScreen = false ;
anim = 0 ;
animValHitCount = 0 ; //animation frame
2007-09-14 16:11:10 +03:00
heroList . init ( ) ;
heroList . genList ( ) ;
2007-09-18 16:30:26 +03:00
//townList.init();
townList . genList ( ) ;
2007-08-06 07:03:34 +03:00
gems . push_back ( CGI - > spriteh - > giveDef ( " agemLL.def " ) ) ;
gems . push_back ( CGI - > spriteh - > giveDef ( " agemLR.def " ) ) ;
gems . push_back ( CGI - > spriteh - > giveDef ( " agemUL.def " ) ) ;
gems . push_back ( CGI - > spriteh - > giveDef ( " agemUR.def " ) ) ;
}
void CAdvMapInt : : fshowOverview ( )
{
}
void CAdvMapInt : : fswitchLevel ( )
{
if ( ! CGI - > ac - > map . twoLevel )
return ;
if ( position . z )
2007-08-08 22:28:56 +03:00
{
2007-08-06 07:03:34 +03:00
position . z - - ;
2007-08-08 22:28:56 +03:00
underground . curimg = 0 ;
underground . show ( ) ;
}
else
{
underground . curimg = 1 ;
position . z + + ;
underground . show ( ) ;
}
2007-08-06 07:03:34 +03:00
updateScreen = true ;
2007-09-02 15:36:54 +03:00
minimap . draw ( ) ;
2007-08-06 07:03:34 +03:00
}
void CAdvMapInt : : fshowQuestlog ( )
{
}
void CAdvMapInt : : fsleepWake ( )
{
}
void CAdvMapInt : : fmoveHero ( )
{
2007-10-14 00:27:03 +03:00
if ( selection . type ! = HEROI_TYPE )
return ;
if ( ! terrain . currentPath )
return ;
CPath sended ( * ( terrain . currentPath ) ) ; //temporary path - engine will operate on it
LOCPLINT - > cb - > moveHero ( ( ( const CHeroInstance * ) LOCPLINT - > adventureInt - > selection . selected ) - > type - > ID , & sended , 1 , 0 ) ;
2007-08-06 07:03:34 +03:00
}
void CAdvMapInt : : fshowSpellbok ( )
{
}
void CAdvMapInt : : fadventureOPtions ( )
{
}
void CAdvMapInt : : fsystemOptions ( )
{
}
void CAdvMapInt : : fnextHero ( )
{
}
void CAdvMapInt : : fendTurn ( )
{
2007-10-21 19:45:13 +03:00
LOCPLINT - > makingTurn = false ;
2007-08-06 07:03:34 +03:00
}
2007-08-04 22:01:22 +03:00
void CAdvMapInt : : show ( )
{
blitAt ( bg , 0 , 0 ) ;
2007-08-06 07:03:34 +03:00
kingOverview . show ( ) ;
kingOverview . activate ( ) ;
2007-08-08 22:28:56 +03:00
underground . show ( ) ;
underground . activate ( ) ;
2007-08-06 07:03:34 +03:00
questlog . show ( ) ;
questlog . activate ( ) ;
sleepWake . show ( ) ;
sleepWake . activate ( ) ;
moveHero . show ( ) ;
moveHero . activate ( ) ;
spellbook . show ( ) ;
spellbook . activate ( ) ;
advOptions . show ( ) ;
advOptions . activate ( ) ;
sysOptions . show ( ) ;
sysOptions . activate ( ) ;
nextHero . show ( ) ;
nextHero . activate ( ) ;
endTurn . show ( ) ;
endTurn . activate ( ) ;
2007-08-07 14:54:50 +03:00
2007-08-20 00:12:55 +03:00
minimap . activate ( ) ;
minimap . draw ( ) ;
2007-09-14 16:11:10 +03:00
heroList . activate ( ) ;
heroList . draw ( ) ;
2007-09-18 16:30:26 +03:00
townList . activate ( ) ;
townList . draw ( ) ;
2007-09-22 04:16:31 +03:00
terrain . activate ( ) ;
2007-08-20 00:12:55 +03:00
2007-09-16 20:21:23 +03:00
resdatabar . draw ( ) ;
2007-08-07 14:54:50 +03:00
statusbar . show ( ) ;
2007-08-04 22:01:22 +03:00
SDL_Flip ( ekran ) ;
}
2007-10-21 19:45:13 +03:00
void CAdvMapInt : : hide ( )
{
kingOverview . deactivate ( ) ;
underground . deactivate ( ) ;
questlog . deactivate ( ) ;
sleepWake . deactivate ( ) ;
moveHero . deactivate ( ) ;
spellbook . deactivate ( ) ;
advOptions . deactivate ( ) ;
sysOptions . deactivate ( ) ;
nextHero . deactivate ( ) ;
endTurn . deactivate ( ) ;
minimap . deactivate ( ) ;
heroList . deactivate ( ) ;
townList . deactivate ( ) ;
terrain . deactivate ( ) ;
}
2007-08-04 22:01:22 +03:00
void CAdvMapInt : : update ( )
{
terrain . show ( ) ;
2007-08-06 07:03:34 +03:00
blitAt ( gems [ 2 ] - > ourImages [ LOCPLINT - > playerID ] . bitmap , 6 , 6 ) ;
blitAt ( gems [ 0 ] - > ourImages [ LOCPLINT - > playerID ] . bitmap , 6 , 508 ) ;
blitAt ( gems [ 1 ] - > ourImages [ LOCPLINT - > playerID ] . bitmap , 556 , 508 ) ;
blitAt ( gems [ 3 ] - > ourImages [ LOCPLINT - > playerID ] . bitmap , 556 , 6 ) ;
2007-08-04 22:01:22 +03:00
updateRect ( & genRect ( 550 , 600 , 6 , 6 ) ) ;
2007-09-14 16:11:10 +03:00
}
void CAdvMapInt : : centerOn ( int3 on )
{
on . x - = ( LOCPLINT - > adventureInt - > terrain . tilesw / 2 ) ;
on . y - = ( LOCPLINT - > adventureInt - > terrain . tilesh / 2 ) ;
if ( on . x < 0 )
on . x = - ( Woff / 2 ) ;
else if ( ( on . x + LOCPLINT - > adventureInt - > terrain . tilesw ) > ( CGI - > mh - > sizes . x ) )
on . x = CGI - > mh - > sizes . x - LOCPLINT - > adventureInt - > terrain . tilesw + ( Woff / 2 ) ;
if ( on . y < 0 )
on . y = - ( Hoff / 2 ) ;
else if ( ( on . y + LOCPLINT - > adventureInt - > terrain . tilesh ) > ( CGI - > mh - > sizes . y ) )
on . y = CGI - > mh - > sizes . y - LOCPLINT - > adventureInt - > terrain . tilesh + ( Hoff / 2 ) ;
LOCPLINT - > adventureInt - > position . x = on . x ;
LOCPLINT - > adventureInt - > position . y = on . y ;
2007-10-05 23:38:14 +03:00
LOCPLINT - > adventureInt - > position . z = on . z ;
2007-09-14 16:11:10 +03:00
LOCPLINT - > adventureInt - > updateScreen = true ;
}
CAdvMapInt : : CurrentSelection : : CurrentSelection ( )
{
2007-09-30 19:16:00 +03:00
type = - 1 ;
2007-09-14 16:11:10 +03:00
selected = NULL ;
2007-10-07 17:51:09 +03:00
}
2007-10-13 23:31:50 +03:00
void CAdvMapInt : : handleRightClick ( std : : string text , tribool down , CIntObject * client )
{
if ( down )
{
boost : : algorithm : : erase_all ( text , " \" " ) ;
CSimpleWindow * temp = CMessage : : genWindow ( text , LOCPLINT - > playerID ) ;
temp - > pos . x = 300 - ( temp - > pos . w / 2 ) ;
temp - > pos . y = 300 - ( temp - > pos . h / 2 ) ;
temp - > owner = client ;
LOCPLINT - > objsToBlit . push_back ( temp ) ;
}
else
{
for ( int i = 0 ; i < LOCPLINT - > objsToBlit . size ( ) ; i + + )
{
if ( LOCPLINT - > objsToBlit [ i ] - > owner = = client )
{
LOCPLINT - > objsToBlit . erase ( LOCPLINT - > objsToBlit . begin ( ) + ( i ) ) ;
}
}
}
}
2007-10-07 17:51:09 +03:00
int3 CAdvMapInt : : verifyPos ( int3 ver )
{
if ( ver . x < 0 )
ver . x = 0 ;
if ( ver . y < 0 )
ver . y = 0 ;
if ( ver . z < 0 )
ver . z = 0 ;
if ( ver . x > = CGI - > mh - > sizes . x )
ver . x = CGI - > mh - > sizes . x - 1 ;
if ( ver . y > = CGI - > mh - > sizes . y )
ver . y = CGI - > mh - > sizes . y - 1 ;
if ( ver . z > = CGI - > mh - > sizes . z )
ver . z = CGI - > mh - > sizes . z - 1 ;
return ver ;
2007-08-04 22:01:22 +03:00
}