Viewport cleanups.

This commit is contained in:
johns 2002-12-10 22:05:36 +00:00
parent 55d5ef501d
commit bd16711a12

View file

@ -55,16 +55,16 @@
-- Variables
----------------------------------------------------------------------------*/
global enum _mouse_buttons_ MouseButtons;/// current pressed mouse buttons
global enum _mouse_buttons_ MouseButtons;/// Current pressed mouse buttons
global enum _key_modifiers_ KeyModifiers;/// current keyboard modifiers
global enum _key_modifiers_ KeyModifiers;/// Current keyboard modifiers
global Unit* UnitUnderCursor; /// Unit under cursor
global int ButtonUnderCursor=-1; /// Button under cursor
global char GameMenuButtonClicked; /// Game menu button (F10) was clicked
global char LeaveStops; /// Mouse leaves windows stops scroll
global enum _cursor_on_ CursorOn=CursorOnUnknown; /// cursor on field
global enum _cursor_on_ CursorOn=CursorOnUnknown; /// Cursor on field
/*----------------------------------------------------------------------------
-- Functions
@ -75,11 +75,11 @@ global enum _cursor_on_ CursorOn=CursorOnUnknown; /// cursor on field
*/
global void CancelBuildingMode(void)
{
CursorBuilding=NULL;
MustRedraw|=RedrawCursor;
CursorBuilding = NULL;
MustRedraw |= RedrawCursor;
ClearStatusLine();
ClearCosts();
CurrentButtonLevel = 0; // reset unit buttons to normal
CurrentButtonLevel = 0; // reset unit buttons to normal
UpdateButtonPanel();
}
@ -101,7 +101,7 @@ local void DrawMouseCoordsOnMap(int x,int y)
DebugLevel0Fn("coords outside map %d,%d\n" _C_ x _C_ y);
return;
}
VideoLockScreen ();
VideoLockScreen();
VideoDrawSub(TheUI.MenuButton.Graphic,0,0
,TheUI.MenuButton.Graphic->Width
,TheUI.MenuButton.Graphic->Height
@ -123,7 +123,7 @@ local void DrawMouseCoordsOnMap(int x,int y)
// ,flags&MapFieldVisible ?'v':'-'
);
VideoDrawText(TheUI.MenuButtonX+3,TheUI.MenuButtonY+3,GameFont,buf);
VideoUnlockScreen ();
VideoUnlockScreen();
InvalidateArea(TheUI.MenuButtonX,TheUI.MenuButtonY
,TheUI.MenuButton.Graphic->Width
,TheUI.MenuButton.Graphic->Height);
@ -136,7 +136,7 @@ local void DrawMouseCoordsOnMap(int x,int y)
** @param sx X map position in pixels.
** @param sy Y map position in pixels.
*/
global void DoRightButton (int sx,int sy)
global void DoRightButton(int sx,int sy)
{
int i;
int x;
@ -191,7 +191,7 @@ global void DoRightButton (int sx,int sy)
//
if( KeyModifiers&ModifierControl ) {
// FIXME: what todo if more than one unit on that tile?
dest=UnitOnScreenMapPosition (sx,sy);
dest=UnitOnScreenMapPosition(sx,sy);
if( dest ) {
if( dest!=unit ) {
dest->Blink=4;
@ -204,7 +204,7 @@ global void DoRightButton (int sx,int sy)
//
// Enter transporters?
//
dest=TransporterOnScreenMapPosition (sx,sy);
dest=TransporterOnScreenMapPosition(sx,sy);
if( dest && dest->Type->Transporter
&& dest->Player==ThisPlayer
&& unit->Type->UnitType==UnitTypeLand ) {
@ -261,7 +261,7 @@ global void DoRightButton (int sx,int sy)
}
}
dest=TargetOnScreenMapPosition (unit,sx,sy);
dest=TargetOnScreenMapPosition(unit,sx,sy);
if( dest ) {
if( IsEnemy(ThisPlayer,dest) ) {
dest->Blink=4;
@ -271,13 +271,13 @@ global void DoRightButton (int sx,int sy)
}
// cade: this is default repair action
dest=RepairableOnScreenMapPosition (sx, sy);
dest=RepairableOnScreenMapPosition(sx, sy);
if( dest && dest->Type && dest->Player==ThisPlayer ) {
SendCommandRepair(unit,x,y,dest,flush);
continue;
}
dest=UnitOnScreenMapPosition (sx,sy);
dest=UnitOnScreenMapPosition(sx,sy);
if( dest ) {
// FIXME: should ally to self
if( (dest->Player==ThisPlayer || IsAllied(ThisPlayer,dest))
@ -316,7 +316,7 @@ global void DoRightButton (int sx,int sy)
}
}
dest=UnitOnScreenMapPosition (sx,sy);
dest=UnitOnScreenMapPosition(sx,sy);
if( dest ) {
if( (dest->Player==ThisPlayer || IsAllied(ThisPlayer,dest))
&& dest!=unit ) {
@ -370,7 +370,7 @@ global void DoRightButton (int sx,int sy)
}
}
dest=UnitOnScreenMapPosition (sx,sy);
dest=UnitOnScreenMapPosition(sx,sy);
if( dest ) {
if( (dest->Player==ThisPlayer || IsAllied(ThisPlayer,dest))
&& dest!=unit ) {
@ -408,7 +408,7 @@ global void DoRightButton (int sx,int sy)
// FIXME: attack/follow/board ...
if( action==MouseActionMove || action==MouseActionSail ) {
dest=UnitOnScreenMapPosition (sx,sy);
dest=UnitOnScreenMapPosition(sx,sy);
if( dest ) {
// Follow allied units, but not self.
if( (dest->Player==ThisPlayer || IsAllied(ThisPlayer,dest))
@ -512,10 +512,10 @@ local void HandleMouseOn(int x,int y)
CursorOn = -1;
}
viewport = GetViewport (x, y);
viewport = GetViewport(x, y);
if (viewport >= 0 && viewport != TheUI.ActiveViewport) {
TheUI.ActiveViewport = viewport;
DebugLevel0Fn ("active viewport changed to %d.\n" _C_ viewport);
DebugLevel0Fn("active viewport changed to %d.\n" _C_ viewport);
}
//
@ -666,7 +666,7 @@ global void UIHandleMouseMove(int x,int y)
TheUI.WarpY = CursorStartY;
if (xo != TheUI.VP[TheUI.ActiveViewport].MapX ||
yo != TheUI.VP[TheUI.ActiveViewport].MapY) {
MapViewportSetViewpoint (TheUI.ActiveViewport, xo, yo);
MapViewportSetViewpoint(TheUI.ActiveViewport, xo, yo);
}
return;
}
@ -678,12 +678,14 @@ global void UIHandleMouseMove(int x,int y)
// Restrict mouse to minimap when dragging
if( OldCursorOn==CursorOnMinimap && CursorOn!=CursorOnMinimap &&
(MouseButtons&LeftButton) ) {
Viewport *vp = &TheUI.VP[TheUI.ActiveViewport];
(MouseButtons&LeftButton) ) {
const Viewport *vp;
vp = &TheUI.VP[TheUI.ActiveViewport];
RestrictCursorToMinimap();
MapViewportSetViewpoint (TheUI.ActiveViewport
,ScreenMinimap2MapX (CursorX) - vp->MapWidth/2
,ScreenMinimap2MapY (CursorY) - vp->MapHeight/2);
MapViewportSetViewpoint(TheUI.ActiveViewport
,ScreenMinimap2MapX(CursorX) - vp->MapWidth/2
,ScreenMinimap2MapY(CursorY) - vp->MapHeight/2);
return;
}
@ -697,10 +699,11 @@ global void UIHandleMouseMove(int x,int y)
//cade: this is forbidden for unexplored and not visible space
// FIXME: This must done new, moving units, scrolling...
if( CursorOn==CursorOnMap ) {
if (IsMapFieldVisible (Viewport2MapX (TheUI.ActiveViewport, x),
Viewport2MapY(TheUI.ActiveViewport, y)) ) {
int v = TheUI.ActiveViewport;
UnitUnderCursor = UnitOnScreen (NULL
int v;
v = TheUI.ActiveViewport;
if (IsMapFieldVisible(Viewport2MapX(v, x), Viewport2MapY(v, y)) ) {
UnitUnderCursor = UnitOnScreen(NULL
,x-TheUI.VP[v].X + TheUI.VP[v].MapX*TileSizeX
,y-TheUI.VP[v].Y + TheUI.VP[v].MapY*TileSizeY);
}
@ -708,7 +711,7 @@ global void UIHandleMouseMove(int x,int y)
mx=ScreenMinimap2MapX(x);
my=ScreenMinimap2MapY(y);
if( IsMapFieldVisible(mx,my) ) {
UnitUnderCursor=UnitOnMapTile (mx,my);
UnitUnderCursor=UnitOnMapTile(mx,my);
}
}
@ -737,10 +740,12 @@ global void UIHandleMouseMove(int x,int y)
//
// Minimap move viewpoint
//
Viewport *vp = &TheUI.VP[TheUI.ActiveViewport];
MapViewportSetViewpoint (TheUI.ActiveViewport
,ScreenMinimap2MapX (CursorX) - vp->MapWidth/2
,ScreenMinimap2MapY (CursorY) - vp->MapHeight/2);
const Viewport *vp;
vp = &TheUI.VP[TheUI.ActiveViewport];
MapViewportSetViewpoint(TheUI.ActiveViewport
,ScreenMinimap2MapX(CursorX) - vp->MapWidth/2
,ScreenMinimap2MapY(CursorY) - vp->MapHeight/2);
}
}
// FIXME: must move minimap if right button is down !
@ -772,9 +777,10 @@ global void UIHandleMouseMove(int x,int y)
//
// Minimap move viewpoint
//
const Viewport* vp;
Viewport *vp = &TheUI.VP[TheUI.ActiveViewport];
MapViewportSetViewpoint (TheUI.LastClickedVP
vp = &TheUI.VP[TheUI.ActiveViewport];
MapViewportSetViewpoint(TheUI.LastClickedVP
,ScreenMinimap2MapX(CursorX) - vp->MapWidth/2
,ScreenMinimap2MapY(CursorY) - vp->MapHeight/2);
CursorStartX=CursorX;
@ -796,14 +802,17 @@ local void SendRepair(int sx,int sy)
int i;
Unit* unit;
Unit* dest;
int x = sx / TileSizeX;
int y = sy / TileSizeY;
int x;
int y;
dest=RepairableOnScreenMapPosition (sx,sy);
dest=RepairableOnScreenMapPosition(sx,sy);
if( !dest || !dest->Type || dest->Player!=ThisPlayer ) {
// FIXME: Should move test in repairable
dest=NoUnitP;
}
x = sx / TileSizeX;
y = sy / TileSizeY;
for( i=0; i<NumSelected; ++i ) {
unit=Selected[i];
if( unit->Type->CowerWorker ) {
@ -850,18 +859,20 @@ local void SendMove(int x,int y)
**
** @see Selected, @see NumSelected
*/
local void SendAttack (int sx,int sy)
local void SendAttack(int sx,int sy)
{
int i;
Unit* unit;
Unit* dest;
int x = sx / TileSizeX;
int y = sy / TileSizeY;
int x;
int y;
x = sx / TileSizeX;
y = sy / TileSizeY;
for( i=0; i<NumSelected; i++ ) {
unit=Selected[i];
if( unit->Type->CanAttack || unit->Type->Building ) {
dest=TargetOnScreenMapPosition (unit,sx,sy);
dest=TargetOnScreenMapPosition(unit,sx,sy);
DebugLevel3Fn("Attacking %p\n" _C_ dest);
if( dest ) {
dest->Blink=4;
@ -917,19 +928,21 @@ local void SendPatrol(int x,int y)
** @param sx X screen map position
** @param sy Y screen map position
*/
local void SendDemolish (int sx,int sy)
local void SendDemolish(int sx,int sy)
{
int i;
Unit* unit;
Unit* dest;
int x = sx / TileSizeX;
int y = sy / TileSizeY;
int x;
int y;
x = sx / TileSizeX;
y = sy / TileSizeY;
for( i=0; i<NumSelected; ++i ) {
unit=Selected[i];
if( unit->Type->Volatile ) {
// FIXME: choose correct unit no flying ...
dest=TargetOnScreenMapPosition (unit,sx,sy);
dest=TargetOnScreenMapPosition(unit,sx,sy);
if( dest==unit ) { // don't let an unit self destruct
dest=NoUnitP;
}
@ -999,15 +1012,17 @@ local void SendUnload(int x,int y)
**
** @see Selected, @see NumSelected
*/
local void SendSpellCast (int sx, int sy)
local void SendSpellCast(int sx, int sy)
{
int i;
Unit *unit;
Unit *dest;
int x = sx / TileSizeX;
int y = sy / TileSizeY;
int x;
int y;
dest = UnitOnScreenMapPosition (sx, sy);
dest = UnitOnScreenMapPosition(sx, sy);
x = sx / TileSizeX;
y = sy / TileSizeY;
DebugLevel3Fn("SpellCast on: %p (%d,%d)\n" _C_ dest _C_ x _C_ y);
/* NOTE: Vladi:
This is a high-level function, it sends target spot and unit
@ -1033,13 +1048,17 @@ local void SendSpellCast (int sx, int sy)
**
** @param sx X screen map position in pixels.
** @param sy Y screen map position in pixels.
**
** @todo pure chaos the arguments of the Send... functions are no equal.
*/
local void SendCommand (int sx, int sy)
local void SendCommand(int sx, int sy)
{
int i;
int x = sx / TileSizeX;
int y = sy / TileSizeY;
int x;
int y;
x = sx / TileSizeX;
y = sy / TileSizeY;
CurrentButtonLevel = 0; // reset unit buttons to normal
UpdateButtonPanel();
switch( CursorAction ) {
@ -1138,9 +1157,11 @@ local void DoSelectionButtons(int num,unsigned button __attribute__((unused)))
*/
local void UISelectStateButtonDown(unsigned button __attribute__((unused)))
{
int sx, sy;
Viewport *v = &TheUI.VP[TheUI.ActiveViewport];
int sx;
int sy;
const Viewport* v;
v = &TheUI.VP[TheUI.ActiveViewport];
//
// Clicking on the map.
//
@ -1162,7 +1183,7 @@ local void UISelectStateButtonDown(unsigned button __attribute__((unused)))
,v->MapY*TileSizeY+CursorY - v->Y
,v->MapX*TileSizeX+CursorX - v->X
,v->MapY*TileSizeY+CursorY - v->Y);
SendCommand (sx, sy);
SendCommand(sx, sy);
}
return;
}
@ -1171,8 +1192,11 @@ local void UISelectStateButtonDown(unsigned button __attribute__((unused)))
// Clicking on the minimap.
//
if( CursorOn==CursorOnMinimap ) {
int mx=ScreenMinimap2MapX(CursorX);
int my=ScreenMinimap2MapY(CursorY);
int mx;
int my;
mx=ScreenMinimap2MapX(CursorX);
my=ScreenMinimap2MapY(CursorY);
if( MouseButtons&LeftButton ) {
sx=mx*TileSizeX;
sy=my*TileSizeY;
@ -1187,9 +1211,8 @@ local void UISelectStateButtonDown(unsigned button __attribute__((unused)))
,sx+TileSizeX/2,sy+TileSizeY/2,0,0);
SendCommand(sx,sy);
} else {
int v = TheUI.ActiveViewport;
MapViewportSetViewpoint (v, mx - TheUI.VP[v].MapWidth/2,
my - TheUI.VP[v].MapHeight/2);
MapViewportSetViewpoint(TheUI.ActiveViewport,
mx - v->MapWidth/2, my - v->MapHeight/2);
}
return;
}
@ -1227,7 +1250,7 @@ global void UIHandleButtonDown(unsigned button)
/**
** Detect long selection click, FIXME: tempory hack to test the feature.
*/
#define LongSelected (MouseButtons&((LeftButton<<MouseHoldShift)))
#define LongSelected (MouseButtons&((LeftButton<<MouseHoldShift)))
if( LongSelected ) {
if( !OldValid ) {
@ -1268,21 +1291,20 @@ global void UIHandleButtonDown(unsigned button)
// Cursor is on the map area
//
if( CursorOn==CursorOnMap ) {
TheUI.LastClickedVP = GetViewport (CursorX, CursorY);
DebugLevel0Fn ("last clicked viewport changed to %d.\n" _C_
TheUI.LastClickedVP = GetViewport(CursorX, CursorY);
DebugLevel0Fn("last clicked viewport changed to %d.\n" _C_
TheUI.LastClickedVP);
MustRedraw |= RedrawMinimapCursor | RedrawMap;
/* to redraw the cursor immediately (and avoid up to 1 sec delay */
// to redraw the cursor immediately (and avoid up to 1 sec delay
if( CursorBuilding ) {
// Possible Selected[0] was removed from map
// need to make sure there is a unit to build
if( Selected[0] // enter select mode
&& (MouseButtons&LeftButton) ) {
// need to make sure there is an unit to build
if( Selected[0] && (MouseButtons&LeftButton) ) {// enter select mode
int x;
int y;
x = Viewport2MapX (TheUI.ActiveViewport, CursorX);
y = Viewport2MapY (TheUI.ActiveViewport, CursorY);
x = Viewport2MapX(TheUI.ActiveViewport, CursorX);
y = Viewport2MapY(TheUI.ActiveViewport, CursorY);
// FIXME: error messages
if( CanBuildUnitType(Selected[0],CursorBuilding,x,y)
@ -1307,11 +1329,15 @@ global void UIHandleButtonDown(unsigned button)
}
if( MouseButtons&LeftButton ) { // enter select mode
int v = TheUI.ActiveViewport;
int v;
CursorStartX=CursorX;
CursorStartY=CursorY;
CursorStartScrMapX = CursorStartX -TheUI.VP[v].X + TileSizeX * TheUI.VP[v].MapX;
CursorStartScrMapY = CursorStartY -TheUI.VP[v].Y + TileSizeY * TheUI.VP[v].MapY;
v = TheUI.ActiveViewport;
CursorStartScrMapX = CursorStartX -
TheUI.VP[v].X + TileSizeX * TheUI.VP[v].MapX;
CursorStartScrMapY = CursorStartY -
TheUI.VP[v].Y + TileSizeY * TheUI.VP[v].MapY;
GameCursor=TheUI.Cross.Cursor;
CursorState=CursorStateRectangle;
MustRedraw|=RedrawCursor;
@ -1326,10 +1352,13 @@ global void UIHandleButtonDown(unsigned button)
Unit* unit;
// FIXME: Rethink the complete chaos of coordinates here
// FIXME: Johns: Perhaps we should use a pixel map coordinates
int v = TheUI.ActiveViewport;
int x = CursorX - TheUI.VP[v].X + TheUI.VP[v].MapX*TileSizeX;
int y = CursorY - TheUI.VP[v].Y + TheUI.VP[v].MapY*TileSizeY;
int v;
int x;
int y;
v = TheUI.ActiveViewport;
x = CursorX - TheUI.VP[v].X + TheUI.VP[v].MapX*TileSizeX;
y = CursorY - TheUI.VP[v].Y + TheUI.VP[v].MapY*TileSizeY;
if( x>=TheMap.Width*TileSizeX ) { // Reduce to map limits
x = (TheMap.Width-1)*TileSizeX;
}
@ -1337,15 +1366,17 @@ global void UIHandleButtonDown(unsigned button)
y = (TheMap.Height-1)*TileSizeY;
}
unit = UnitOnScreenMapPosition (x, y);
unit = UnitOnScreenMapPosition(x, y);
if ( unit ) { // if right click on building -- blink
unit->Blink=4;
} else { // if not not click on building -- green cross
} else { // if not not click on building -- green cross
MakeLocalMissile(MissileTypeGreenCross
,TheUI.VP[TheUI.ActiveViewport].MapX*TileSizeX+CursorX-TheUI.VP[TheUI.ActiveViewport].X
,TheUI.VP[TheUI.ActiveViewport].MapY*TileSizeY+CursorY-TheUI.VP[TheUI.ActiveViewport].Y,0,0);
,TheUI.VP[TheUI.ActiveViewport].MapX*TileSizeX
+CursorX-TheUI.VP[TheUI.ActiveViewport].X
,TheUI.VP[TheUI.ActiveViewport].MapY*TileSizeY
+CursorY-TheUI.VP[TheUI.ActiveViewport].Y,0,0);
}
DoRightButton (x, y);
DoRightButton(x, y);
}
}
//
@ -1353,7 +1384,9 @@ global void UIHandleButtonDown(unsigned button)
//
} else if( CursorOn==CursorOnMinimap ) {
if( MouseButtons&LeftButton ) { // enter move mini-mode
int v = TheUI.LastClickedVP;
int v;
v = TheUI.LastClickedVP;
MapViewportSetViewpoint(v,
ScreenMinimap2MapX(CursorX)-TheUI.VP[v].MapWidth/2,
ScreenMinimap2MapY(CursorY)-TheUI.VP[v].MapHeight/2);
@ -1363,7 +1396,7 @@ global void UIHandleButtonDown(unsigned button)
,ScreenMinimap2MapX(CursorX)*TileSizeX+TileSizeX/2
,ScreenMinimap2MapY(CursorY)*TileSizeY+TileSizeY/2,0,0);
// DoRightButton() takes screen map coordinates
DoRightButton (ScreenMinimap2MapX(CursorX) * TileSizeX,
DoRightButton(ScreenMinimap2MapX(CursorX) * TileSizeX,
ScreenMinimap2MapY(CursorY) * TileSizeY);
}
}
@ -1502,80 +1535,47 @@ global void UIHandleButtonUp(unsigned button)
//
if( CursorStartX<CursorX-1 || CursorStartX>CursorX+1
|| CursorStartY<CursorY-1 || CursorStartY>CursorY+1 ) {
#if 0
//
// Select rectangle
//
int x,y,w,h;
int x0;
int y0;
int v;
int x1;
int y1;
x0 = CursorStartScrMapX;
y0 = CursorStartScrMapY;
v = TheUI.ActiveViewport;
x1 = CursorX - TheUI.VP[v].X + TheUI.VP[v].MapX*TileSizeX;
y1 = CursorY - TheUI.VP[v].Y + TheUI.VP[v].MapY*TileSizeY;
x = Screen2MapX(CursorStartX);
y = Screen2MapY(CursorStartY);
w = Screen2MapX(CursorX);
h = Screen2MapY(CursorY);
if (x>w) {
x ^= w; // Hint: this swaps x and w
w ^= x;
x ^= w;
}
if (y>h) {
h ^= y; // Hint: this swaps y and h
y ^= h;
h ^= y;
}
w -= x;
h -= y;
if( KeyModifiers&ModifierShift ) {
num=AddSelectedUnitsInRectangle(x,y,w,h);
} else {
num=SelectUnitsInRectangle(x,y,w,h);
}
#endif
int x0 = CursorStartScrMapX;
int y0 = CursorStartScrMapY;
int v = TheUI.ActiveViewport;
int x1 = CursorX - TheUI.VP[v].X + TheUI.VP[v].MapX*TileSizeX;
int y1 = CursorY - TheUI.VP[v].Y + TheUI.VP[v].MapY*TileSizeY;
if (x0>x1) {
int swap=x0; // this is faster and more readable than xor's
// JOHNS: no it is slower and more readable
// latimerius: gcc -O3 outputs this assembler
// for swap using a temp variable:
// movl -4(%ebp),%eax
// movl -8(%ebp),%edx
// movl %edx,-4(%ebp)
// movl %eax,-8(%ebp)
// using xor's:
// movl -4(%ebp),%edx
// xorl -8(%ebp),%edx
// movl -4(%ebp),%eax
// movl %eax,-8(%ebp)
// xorl %eax,%edx
// movl %edx,-4(%ebp)
// Now I wonder how xor's can be faster.
int swap;
swap = x0;
x0 = x1;
x1 = swap;
}
if (y0>y1) {
int swap=y0;
int swap;
swap = y0;
y0 = y1;
y1 = swap;
}
if ( KeyModifiers & ModifierShift ) {
if( KeyModifiers & ModifierAlt ) {
num=AddSelectedGroundUnitsInRectangle (x0, y0, x1, y1);
num=AddSelectedGroundUnitsInRectangle(x0, y0, x1, y1);
} else if( KeyModifiers & ModifierControl ) {
num=AddSelectedAirUnitsInRectangle (x0, y0, x1, y1);
num=AddSelectedAirUnitsInRectangle(x0, y0, x1, y1);
} else {
num=AddSelectedUnitsInRectangle (x0 ,y0, x1, y1);
num=AddSelectedUnitsInRectangle(x0 ,y0, x1, y1);
}
} else {
if( KeyModifiers & ModifierAlt ) {
num=SelectGroundUnitsInRectangle (x0, y0, x1, y1);
num=SelectGroundUnitsInRectangle(x0, y0, x1, y1);
} else if( KeyModifiers & ModifierControl ) {
num=SelectAirUnitsInRectangle (x0, y0, x1, y1);
num=SelectAirUnitsInRectangle(x0, y0, x1, y1);
} else {
num=SelectUnitsInRectangle (x0, y0, x1, y1);
num=SelectUnitsInRectangle(x0, y0, x1, y1);
}
}
} else {
@ -1589,7 +1589,7 @@ global void UIHandleButtonUp(unsigned button)
// cade: cannot select unit on invisible space
// FIXME: johns: only complete invisibile units
if( IsMapFieldVisible(Viewport2MapX(TheUI.ActiveViewport,CursorX),
Viewport2MapY (TheUI.ActiveViewport,CursorY)) ) {
Viewport2MapY(TheUI.ActiveViewport,CursorY)) ) {
unit=UnitOnScreen(unit
,CursorX-TheUI.VP[TheUI.ActiveViewport].X+
TheUI.VP[TheUI.ActiveViewport].MapX*TileSizeX