IsMapFieldVisible and IsMapFieldExplored take a player as a parameter
This commit is contained in:
parent
b361be6108
commit
518a7253b7
11 changed files with 58 additions and 52 deletions
src
include
map
stratagus
ui
unit
video
|
@ -557,21 +557,21 @@ extern void MapSetWall(unsigned x,unsigned y,int humanwall);
|
|||
#ifdef NEW_FOW
|
||||
|
||||
/// Check if a field for the user is explored
|
||||
#define IsMapFieldExplored(x,y) \
|
||||
(IsTileVisible(ThisPlayer,x,y))
|
||||
#define IsMapFieldExplored(player,x,y) \
|
||||
(IsTileVisible(player,x,y))
|
||||
|
||||
/// Check if a field for the user is visibile
|
||||
#define IsMapFieldVisible(x,y) \
|
||||
(IsTileVisible(ThisPlayer,x,y)>1)
|
||||
#define IsMapFieldVisible(player,x,y) \
|
||||
(IsTileVisible(player,x,y)>1)
|
||||
|
||||
#else
|
||||
|
||||
/// Check if a field for the user is explored
|
||||
#define IsMapFieldExplored(x,y) \
|
||||
#define IsMapFieldExplored(player,x,y) \
|
||||
(TheMap.Fields[(y)*TheMap.Width+(x)].Flags&MapFieldExplored)
|
||||
|
||||
/// Check if a field for the user is visibile
|
||||
#define IsMapFieldVisible(x,y) \
|
||||
#define IsMapFieldVisible(player,x,y) \
|
||||
(TheMap.Visible[0][((y)*TheMap.Width+(x))/32] \
|
||||
&(1<<(((y)*TheMap.Width+(x))%32)))
|
||||
|
||||
|
|
|
@ -450,7 +450,7 @@ global void MapMarkSight(int tx,int ty,int range)
|
|||
for( i=x; i<=x+width; ++i ) {
|
||||
if( PythagTree[abs(i-tx)][abs(y-ty)]<=range ) {
|
||||
// FIXME: can combine more bits
|
||||
if( !IsMapFieldVisible(i,y) ) {
|
||||
if( !IsMapFieldVisible(ThisPlayer,i,y) ) {
|
||||
TheMap.Fields[i+y*TheMap.Width].Flags |= MapFieldExplored;
|
||||
TheMap.Visible[0][(i+y*TheMap.Width)/32]
|
||||
|= 1<<((i+y*TheMap.Width)%32);
|
||||
|
@ -588,7 +588,7 @@ global void UpdateFogOfWarChange(void)
|
|||
w=TheMap.Width;
|
||||
for( y=0; y<TheMap.Height; y++ ) {
|
||||
for( x=0; x<TheMap.Width; ++x ) {
|
||||
if( IsMapFieldExplored(x,y) ) {
|
||||
if( IsMapFieldExplored(ThisPlayer,x,y) ) {
|
||||
#ifndef NEW_FOW
|
||||
TheMap.Visible[0][(x+y*w)/32] |= 1<<((x+y*w)%32);
|
||||
#endif
|
||||
|
@ -1784,66 +1784,66 @@ local void DrawFogOfWarTile(int sx,int sy,int dx,int dy)
|
|||
//
|
||||
if( sy ) {
|
||||
if( sx!=sy ) {
|
||||
if( !IsMapFieldExplored(x-1,y-1) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x-1,y-1) ) {
|
||||
tile2|=2;
|
||||
tile|=2;
|
||||
} else if( !IsMapFieldVisible(x-1,y-1) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x-1,y-1) ) {
|
||||
tile|=2;
|
||||
}
|
||||
}
|
||||
if( !IsMapFieldExplored(x,y-1) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x,y-1) ) {
|
||||
tile2|=3;
|
||||
tile|=3;
|
||||
} else if( !IsMapFieldVisible(x,y-1) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x,y-1) ) {
|
||||
tile|=3;
|
||||
}
|
||||
if( sx!=sy+w-1 ) {
|
||||
if( !IsMapFieldExplored(x+1,y-1) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x+1,y-1) ) {
|
||||
tile2|=1;
|
||||
tile|=1;
|
||||
} else if( !IsMapFieldVisible(x+1,y-1) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x+1,y-1) ) {
|
||||
tile|=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( sx!=sy ) {
|
||||
if( !IsMapFieldExplored(x-1,y) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x-1,y) ) {
|
||||
tile2|=10;
|
||||
tile|=10;
|
||||
} else if( !IsMapFieldVisible(x-1,y) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x-1,y) ) {
|
||||
tile|=10;
|
||||
}
|
||||
}
|
||||
if( sx!=sy+w-1 ) {
|
||||
if( !IsMapFieldExplored(x+1,y) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x+1,y) ) {
|
||||
tile2|=5;
|
||||
tile|=5;
|
||||
} else if( !IsMapFieldVisible(x+1,y) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x+1,y) ) {
|
||||
tile|=5;
|
||||
}
|
||||
}
|
||||
|
||||
if( sy+w<TheMap.Height*w ) {
|
||||
if( sx!=sy ) {
|
||||
if( !IsMapFieldExplored(x-1,y+1) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x-1,y+1) ) {
|
||||
tile2|=8;
|
||||
tile|=8;
|
||||
} else if( !IsMapFieldVisible(x-1,y+1) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x-1,y+1) ) {
|
||||
tile|=8;
|
||||
}
|
||||
}
|
||||
if( !IsMapFieldExplored(x,y+1) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x,y+1) ) {
|
||||
tile2|=12;
|
||||
tile|=12;
|
||||
} else if( !IsMapFieldVisible(x,y+1) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x,y+1) ) {
|
||||
tile|=12;
|
||||
}
|
||||
if( sx!=sy+w-1 ) {
|
||||
if( !IsMapFieldExplored(x+1,y+1) ) {
|
||||
if( !IsMapFieldExplored(ThisPlayer,x+1,y+1) ) {
|
||||
tile2|=4;
|
||||
tile|=4;
|
||||
} else if( !IsMapFieldVisible(x+1,y+1) ) {
|
||||
} else if( !IsMapFieldVisible(ThisPlayer,x+1,y+1) ) {
|
||||
tile|=4;
|
||||
}
|
||||
}
|
||||
|
@ -1861,7 +1861,7 @@ local void DrawFogOfWarTile(int sx,int sy,int dx,int dy)
|
|||
tile=0;
|
||||
}
|
||||
}
|
||||
if( IsMapFieldVisible(x,y) ) {
|
||||
if( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
if( tile ) {
|
||||
VideoDrawFog(TheMap.Tiles[tile],dx,dy);
|
||||
// TheMap.Fields[sx].VisibleLastFrame|=MapFieldPartiallyVisible;
|
||||
|
|
|
@ -168,7 +168,7 @@ global void MapFixSeenRockTile(int x, int y)
|
|||
}
|
||||
|
||||
// FIXME: can this only happen if seen?
|
||||
if ( IsMapFieldVisible(x,y) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
MustRedraw |= RedrawMinimap;
|
||||
|
@ -307,7 +307,7 @@ global void MapFixRockTile(int x, int y)
|
|||
mf->Tile = tile;
|
||||
UpdateMinimapXY(x, y);
|
||||
|
||||
if ( IsMapFieldVisible(x,y) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MapMarkSeenTile(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
|
@ -335,7 +335,7 @@ global void MapRemoveRock(unsigned x, unsigned y)
|
|||
UpdateMinimapXY(x, y);
|
||||
MapFixRockNeighbors(x, y);
|
||||
|
||||
if ( IsMapFieldVisible(x,y) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MapMarkSeenTile(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
|
|
|
@ -100,7 +100,7 @@ global void SaveMap(FILE* file)
|
|||
}
|
||||
}
|
||||
#else
|
||||
if( IsMapFieldVisible(w,h) ) {
|
||||
if( IsMapFieldVisible(ThisPlayer,w,h) ) {
|
||||
fprintf(file," visible");
|
||||
}
|
||||
if( mf->Flags&MapFieldExplored ) {
|
||||
|
|
|
@ -158,7 +158,7 @@ global void MapFixSeenWallTile(int x, int y)
|
|||
mf->SeenTile = tile;
|
||||
|
||||
// FIXME: can this only happen if seen?
|
||||
if (IsMapFieldVisible(x, y)) {
|
||||
if (IsMapFieldVisible(ThisPlayer, x, y)) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
MustRedraw |= RedrawMinimap;
|
||||
|
@ -258,7 +258,7 @@ global void MapFixWallTile(int x, int y)
|
|||
mf->Tile = tile;
|
||||
UpdateMinimapXY(x, y);
|
||||
|
||||
if (IsMapFieldVisible(x, y)) {
|
||||
if (IsMapFieldVisible(ThisPlayer, x, y)) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MapMarkSeenTile(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
|
@ -299,7 +299,7 @@ global void MapRemoveWall(unsigned x, unsigned y)
|
|||
MapFixWallTile(x, y);
|
||||
MapFixWallNeighbors(x, y);
|
||||
|
||||
if (IsMapFieldVisible(x,y)) {
|
||||
if (IsMapFieldVisible(ThisPlayer, x, y)) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MapMarkSeenTile(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
|
@ -339,7 +339,7 @@ global void MapSetWall(unsigned x, unsigned y, int humanwall)
|
|||
MapFixWallTile(x, y);
|
||||
MapFixWallNeighbors(x, y);
|
||||
|
||||
if (IsMapFieldVisible(x, y)) {
|
||||
if (IsMapFieldVisible(ThisPlayer, x, y)) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MapMarkSeenTile(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
|
|
|
@ -169,7 +169,7 @@ global void MapFixSeenWoodTile(int x, int y)
|
|||
}
|
||||
|
||||
// FIXME: can this only happen if seen?
|
||||
if ( IsMapFieldVisible(x,y) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
MustRedraw |= RedrawMinimap;
|
||||
|
@ -306,7 +306,7 @@ global void MapFixWoodTile(int x, int y)
|
|||
UpdateMinimapXY(x, y);
|
||||
//MapFixWoodNeighbors(x, y);
|
||||
|
||||
if ( IsMapFieldVisible(x,y) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MapMarkSeenTile(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
|
@ -334,7 +334,7 @@ global void MapRemoveWood(unsigned x, unsigned y)
|
|||
UpdateMinimapXY(x, y);
|
||||
MapFixWoodNeighbors(x, y);
|
||||
|
||||
if ( IsMapFieldVisible(x,y) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
UpdateMinimapSeenXY(x, y);
|
||||
MapMarkSeenTile(x, y);
|
||||
MarkDrawPosMap(x, y);
|
||||
|
@ -389,10 +389,10 @@ global void RegenerateForest(void)
|
|||
mf->Tile = TheMap.Tileset->BotOneTree;
|
||||
mf->Value = 0;
|
||||
mf->Flags |= MapFieldForest | MapFieldUnpassable;
|
||||
if ( IsMapFieldVisible(x,y) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y) ) {
|
||||
MapMarkSeenTile(x, y);
|
||||
}
|
||||
if ( IsMapFieldVisible(x,y-1) ) {
|
||||
if ( IsMapFieldVisible(ThisPlayer,x,y-1) ) {
|
||||
MapMarkSeenTile(x, y-1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -258,8 +258,8 @@ global void DrawMinimap(int vx __attribute__((unused)),
|
|||
for( my=0; my<MINIMAP_H; ++my ) {
|
||||
for( mx=0; mx<MINIMAP_W; ++mx ) {
|
||||
#ifdef NEW_FOW
|
||||
if( IsMapFieldVisible(Minimap2MapX[mx],(Minimap2MapY[my]/TheMap.Width))
|
||||
|| (IsMapFieldExplored(Minimap2MapX[mx],
|
||||
if( IsMapFieldVisible(ThisPlayer,Minimap2MapX[mx],(Minimap2MapY[my]/TheMap.Width))
|
||||
|| (IsMapFieldExplored(ThisPlayer,Minimap2MapX[mx],
|
||||
(Minimap2MapY[my]/TheMap.Width)) &&
|
||||
((mx&1)==(my&1)))) {
|
||||
VideoDrawPixel(((unsigned char*)MinimapGraphic->Frames)
|
||||
|
|
|
@ -721,8 +721,8 @@ local int MissileVisibleInViewport(const Viewport* vp, const Missile* missile)
|
|||
DebugLevel3Fn("Missile bounding box %d %d %d %d\n" _C_ min_x _C_ max_x _C_
|
||||
min_y _C_ max_y);
|
||||
|
||||
if( !IsMapFieldVisible((missile->X-TileSizeX/2)/TileSizeX,
|
||||
(missile->Y-TileSizeY/2)/TileSizeY)) {
|
||||
if( !IsMapFieldVisible(ThisPlayer,(missile->X-TileSizeX/2)/TileSizeX,
|
||||
(missile->Y-TileSizeY/2)/TileSizeY)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -697,14 +697,15 @@ global void UIHandleMouseMove(int x,int y)
|
|||
const Viewport* vp;
|
||||
|
||||
vp = TheUI.MouseViewport;
|
||||
if (IsMapFieldVisible(Viewport2MapX(vp, x), Viewport2MapY(vp, y)) ) {
|
||||
if (IsMapFieldVisible(ThisPlayer, Viewport2MapX(vp, x),
|
||||
Viewport2MapY(vp, y)) ) {
|
||||
UnitUnderCursor = UnitOnScreen(NULL ,x-vp->X + vp->MapX*TileSizeX
|
||||
,y-vp->Y + vp->MapY*TileSizeY);
|
||||
}
|
||||
} else if( CursorOn==CursorOnMinimap ) {
|
||||
mx=ScreenMinimap2MapX(x);
|
||||
my=ScreenMinimap2MapY(y);
|
||||
if( IsMapFieldVisible(mx,my) ) {
|
||||
if( IsMapFieldVisible(ThisPlayer,mx,my) ) {
|
||||
UnitUnderCursor=UnitOnMapTile(mx,my);
|
||||
}
|
||||
}
|
||||
|
@ -1302,7 +1303,7 @@ global void UIHandleButtonDown(unsigned button)
|
|||
if( CanBuildUnitType(Selected[0],CursorBuilding,x,y)
|
||||
// FIXME: vladi: should check all building footprint
|
||||
// but not just MAPEXPLORED(x,y)
|
||||
&& IsMapFieldExplored(x,y) ) {
|
||||
&& IsMapFieldExplored(ThisPlayer,x,y) ) {
|
||||
PlayGameSound(GameSounds.PlacementSuccess.Sound
|
||||
,MaxSampleVolume);
|
||||
SendCommandBuildBuilding(Selected[0],x,y,CursorBuilding
|
||||
|
@ -1573,7 +1574,8 @@ global void UIHandleButtonUp(unsigned button)
|
|||
}
|
||||
// cade: cannot select unit on invisible space
|
||||
// FIXME: johns: only complete invisibile units
|
||||
if( IsMapFieldVisible(Viewport2MapX(TheUI.MouseViewport,CursorX),
|
||||
if( IsMapFieldVisible(ThisPlayer,
|
||||
Viewport2MapX(TheUI.MouseViewport,CursorX),
|
||||
Viewport2MapY(TheUI.MouseViewport,CursorY)) ) {
|
||||
unit=UnitOnScreen(unit
|
||||
,CursorX-TheUI.MouseViewport->X+
|
||||
|
|
|
@ -999,7 +999,7 @@ global int UnitVisibleOnMap(const Unit* unit)
|
|||
//
|
||||
for( ; h-->0; ) {
|
||||
for( w=w0; w-->0; ) {
|
||||
if( IsMapFieldVisible(x+w,y+h) ) {
|
||||
if( IsMapFieldVisible(ThisPlayer,x+w,y+h) ) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -1052,9 +1052,9 @@ global int UnitKnownOnMap(const Unit* unit)
|
|||
//
|
||||
for( ; h-->0; ) {
|
||||
for( w=w0; w-->0; ) {
|
||||
if( IsMapFieldVisible(x+w,y+h)
|
||||
if( IsMapFieldVisible(ThisPlayer,x+w,y+h)
|
||||
|| (unit->Type->Building && unit->SeenFrame!=UnitNotSeen
|
||||
&& IsMapFieldExplored(x+w,y+h)) ) {
|
||||
&& IsMapFieldExplored(ThisPlayer,x+w,y+h)) ) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -1120,9 +1120,9 @@ global int UnitVisibleInViewport(const Viewport* vp, const Unit* unit)
|
|||
//
|
||||
for( ; h-->0; ) {
|
||||
for( w=w0; w-->0; ) {
|
||||
if( IsMapFieldVisible(x+w,y+h)
|
||||
if( IsMapFieldVisible(ThisPlayer,x+w,y+h)
|
||||
|| (unit->Type->Building && unit->SeenFrame!=UnitNotSeen
|
||||
&& IsMapFieldExplored(x+w,y+h)) ) {
|
||||
&& IsMapFieldExplored(ThisPlayer,x+w,y+h)) ) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -2723,7 +2723,11 @@ global int FindWoodInSight(const Unit* unit,int* px,int* py)
|
|||
//
|
||||
// Look if there is wood
|
||||
//
|
||||
#ifdef NEW_FOW
|
||||
if ( ForestOnMap(x,y) && IsMapFieldExplored(unit->Player,x,y) ) {
|
||||
#else
|
||||
if ( ForestOnMap(x,y) ) {
|
||||
#endif
|
||||
if( destu ) {
|
||||
n=max(abs(destx-x),abs(desty-y));
|
||||
if( n<bestd ) {
|
||||
|
|
|
@ -736,7 +736,7 @@ local void DrawBuildingCursor(void)
|
|||
((Selected[0]
|
||||
&& Selected[0]->X==mx+w && Selected[0]->Y==my+h)
|
||||
? ~(MapFieldLandUnit|MapFieldSeaUnit) : -1))
|
||||
&& IsMapFieldExplored(mx+w,my+h) ) {
|
||||
&& IsMapFieldExplored(ThisPlayer,mx+w,my+h) ) {
|
||||
color=ColorGreen;
|
||||
} else {
|
||||
color=ColorRed;
|
||||
|
|
Loading…
Add table
Reference in a new issue