IsMapFieldVisible and IsMapFieldExplored take a player as a parameter

This commit is contained in:
jsalmon3 2003-01-11 05:51:19 +00:00
parent b361be6108
commit 518a7253b7
11 changed files with 58 additions and 52 deletions

View file

@ -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)))

View file

@ -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;

View file

@ -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);

View file

@ -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 ) {

View file

@ -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);

View file

@ -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);
}
}

View file

@ -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)

View file

@ -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;
}

View file

@ -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+

View file

@ -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 ) {

View file

@ -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;