Core/Maps & Extractors: Move copypasted map file headers into a single shared file and replace #defines with enums

Port From (https://github.com/TrinityCore/TrinityCore/commit/6ecfe58cae6d9cfa7a3aef21a4a96aa00c513ba2)
This commit is contained in:
hondacrx
2021-06-02 22:09:53 -04:00
parent 2576fded97
commit 90508f7689
9 changed files with 81 additions and 74 deletions
+16 -38
View File
@@ -139,7 +139,7 @@ namespace Game.Maps
else
_gridGetHeight = GetHeightFromFlat;
if (mapHeader.flags.HasAnyFlag(HeightHeaderFlags.HeightHasFlightBounds))
if (mapHeader.flags.HasAnyFlag(HeightHeaderFlags.HasFlightBounds))
{
short[] maxHeights = reader.ReadArray<short>(3 * 3);
short[] minHeights = reader.ReadArray<short>(3 * 3);
@@ -190,20 +190,20 @@ namespace Game.Maps
return false;
_liquidGlobalEntry = liquidHeader.liquidType;
_liquidGlobalFlags = liquidHeader.liquidFlags;
_liquidGlobalFlags = (LiquidHeaderTypeFlags)liquidHeader.liquidFlags;
_liquidOffX = liquidHeader.offsetX;
_liquidOffY = liquidHeader.offsetY;
_liquidWidth = liquidHeader.width;
_liquidHeight = liquidHeader.height;
_liquidLevel = liquidHeader.liquidLevel;
if (!liquidHeader.flags.HasAnyFlag(LiquidHeaderFlags.LiquidNoType))
if (!liquidHeader.flags.HasAnyFlag(LiquidHeaderFlags.NoType))
{
_liquidEntry = reader.ReadArray<ushort>(16 * 16);
_liquidFlags = reader.ReadBytes(16 * 16);
}
if (!liquidHeader.flags.HasAnyFlag(LiquidHeaderFlags.LiquidNoHeight))
if (!liquidHeader.flags.HasAnyFlag(LiquidHeaderFlags.NoHeight))
_liquidMap = reader.ReadArray<float>((uint)(_liquidWidth * _liquidHeight));
return true;
@@ -488,23 +488,23 @@ namespace Game.Maps
}
// Why does this return LIQUID data?
public byte GetTerrainType(float x, float y)
public LiquidHeaderTypeFlags GetTerrainType(float x, float y)
{
if (_liquidFlags == null)
return 0;
return LiquidHeaderTypeFlags.NoWater;
x = 16 * (32 - x / MapConst.SizeofGrids);
y = 16 * (32 - y / MapConst.SizeofGrids);
int lx = (int)x & 15;
int ly = (int)y & 15;
return _liquidFlags[lx * 16 + ly];
return (LiquidHeaderTypeFlags)_liquidFlags[lx * 16 + ly];
}
// Get water state on map
public ZLiquidStatus GetLiquidStatus(float x, float y, float z, uint ReqLiquidType, LiquidData data, float collisionHeight)
public ZLiquidStatus GetLiquidStatus(float x, float y, float z, LiquidHeaderTypeFlags? reqLiquidType, LiquidData data, float collisionHeight)
{
// Check water type (if no water return)
if (_liquidGlobalFlags == 0 && _liquidFlags == null)
if (_liquidGlobalFlags == LiquidHeaderTypeFlags.NoWater && _liquidFlags == null)
return ZLiquidStatus.NoWater;
// Get cell
@@ -516,12 +516,12 @@ namespace Game.Maps
// Check water type in cell
int idx = (x_int >> 3) * 16 + (y_int >> 3);
byte type = _liquidFlags != null ? _liquidFlags[idx] : _liquidGlobalFlags;
LiquidHeaderTypeFlags type = _liquidFlags != null ? (LiquidHeaderTypeFlags)_liquidFlags[idx] : _liquidGlobalFlags;
uint entry = _liquidEntry != null ? _liquidEntry[idx] : _liquidGlobalEntry;
LiquidTypeRecord liquidEntry = CliDB.LiquidTypeStorage.LookupByKey(entry);
if (liquidEntry != null)
{
type &= (byte)MapConst.MapLiquidTypeDarkWater;
type &= LiquidHeaderTypeFlags.DarkWater;
uint liqTypeIdx = liquidEntry.SoundBank;
if (entry < 21)
{
@@ -543,14 +543,14 @@ namespace Game.Maps
}
}
}
type |= (byte)(1 << (int)liqTypeIdx);
type |= (LiquidHeaderTypeFlags)(1 << (int)liqTypeIdx);
}
if (type == 0)
if (type == LiquidHeaderTypeFlags.NoWater)
return ZLiquidStatus.NoWater;
// Check req liquid type mask
if (ReqLiquidType != 0 && !Convert.ToBoolean(ReqLiquidType & type))
if (reqLiquidType.HasValue && (reqLiquidType & type) == LiquidHeaderTypeFlags.NoWater)
return ZLiquidStatus.NoWater;
// Check water level:
@@ -622,7 +622,7 @@ namespace Game.Maps
float[] _liquidMap;
ushort _gridArea;
ushort _liquidGlobalEntry;
byte _liquidGlobalFlags;
LiquidHeaderTypeFlags _liquidGlobalFlags;
byte _liquidOffX;
byte _liquidOffY;
byte _liquidWidth;
@@ -675,31 +675,9 @@ namespace Game.Maps
public class LiquidData
{
public uint type_flags;
public LiquidHeaderTypeFlags type_flags;
public uint entry;
public float level;
public float depth_level;
}
[Flags]
public enum AreaHeaderFlags : ushort
{
NoArea = 0x0001
}
[Flags]
public enum HeightHeaderFlags
{
NoHeight = 0x0001,
HeightAsInt16 = 0x0002,
HeightAsInt8 = 0x0004,
HeightHasFlightBounds = 0x0008
}
[Flags]
public enum LiquidHeaderFlags : byte
{
LiquidNoType = 0x0001,
LiquidNoHeight = 0x0002
}
}
+15 -14
View File
@@ -1705,7 +1705,7 @@ namespace Game.Maps
LiquidData liquid_status;
ZLiquidStatus res = GetLiquidStatus(phaseShift, x, y, ground_z, MapConst.MapAllLiquidTypes, out liquid_status, collisionHeight);
ZLiquidStatus res = GetLiquidStatus(phaseShift, x, y, ground_z, LiquidHeaderTypeFlags.AllLiquids, out liquid_status, collisionHeight);
switch (res)
{
case ZLiquidStatus.AboveWater:
@@ -1959,20 +1959,21 @@ namespace Game.Maps
public void GetZoneAndAreaId(PhaseShift phaseShift, out uint zoneid, out uint areaid, Position pos) { GetZoneAndAreaId(phaseShift, out zoneid, out areaid, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); }
private byte GetTerrainType(PhaseShift phaseShift, float x, float y)
private LiquidHeaderTypeFlags GetTerrainType(PhaseShift phaseShift, float x, float y)
{
GridMap gmap = GetGridMap(PhasingHandler.GetTerrainMapId(phaseShift, this, x, y), x, y);
if (gmap != null)
return gmap.GetTerrainType(x, y);
return 0;
return LiquidHeaderTypeFlags.NoWater;
}
public ZLiquidStatus GetLiquidStatus(PhaseShift phaseShift, float x, float y, float z, uint ReqLiquidType, float collisionHeight = MapConst.DefaultCollesionHeight)
public ZLiquidStatus GetLiquidStatus(PhaseShift phaseShift, float x, float y, float z, LiquidHeaderTypeFlags reqLiquidType, float collisionHeight = MapConst.DefaultCollesionHeight)
{
return GetLiquidStatus(phaseShift, x, y, z, ReqLiquidType, out _, collisionHeight);
return GetLiquidStatus(phaseShift, x, y, z, reqLiquidType, out _, collisionHeight);
}
public ZLiquidStatus GetLiquidStatus(PhaseShift phaseShift, float x, float y, float z, uint ReqLiquidType, out LiquidData data, float collisionHeight = MapConst.DefaultCollesionHeight)
public ZLiquidStatus GetLiquidStatus(PhaseShift phaseShift, float x, float y, float z, LiquidHeaderTypeFlags reqLiquidType, out LiquidData data, float collisionHeight = MapConst.DefaultCollesionHeight)
{
data = new LiquidData();
var result = ZLiquidStatus.NoWater;
@@ -1980,7 +1981,7 @@ namespace Game.Maps
float ground_level = MapConst.InvalidHeight;
uint liquid_type = 0;
uint terrainMapId = PhasingHandler.GetTerrainMapId(phaseShift, this, x, y);
if (Global.VMapMgr.GetLiquidLevel(terrainMapId, x, y, z, ReqLiquidType, ref liquid_level, ref ground_level, ref liquid_type))
if (Global.VMapMgr.GetLiquidLevel(terrainMapId, x, y, z, (byte)reqLiquidType, ref liquid_level, ref ground_level, ref liquid_type))
{
Log.outDebug(LogFilter.Maps, "getLiquidStatus(): vmap liquid level: {0} ground: {1} type: {2}",
liquid_level, ground_level, liquid_type);
@@ -2023,7 +2024,7 @@ namespace Game.Maps
data.depth_level = ground_level;
data.entry = liquid_type;
data.type_flags = (uint)(1 << (int)liquidFlagType);
data.type_flags = (LiquidHeaderTypeFlags)(1 << (int)liquidFlagType);
float delta = liquid_level - z;
@@ -2042,7 +2043,7 @@ namespace Game.Maps
if (gmap != null)
{
var map_data = new LiquidData();
ZLiquidStatus map_result = gmap.GetLiquidStatus(x, y, z, ReqLiquidType, map_data, collisionHeight);
ZLiquidStatus map_result = gmap.GetLiquidStatus(x, y, z, reqLiquidType, map_data, collisionHeight);
// Not override LIQUID_MAP_ABOVE_WATER with LIQUID_MAP_NO_WATER:
if (map_result != ZLiquidStatus.NoWater && (map_data.level > ground_level))
{
@@ -2058,10 +2059,10 @@ namespace Game.Maps
return result;
}
public void GetFullTerrainStatusForPosition(PhaseShift phaseShift, float x, float y, float z, PositionFullTerrainStatus data, uint reqLiquidType = MapConst.MapAllLiquidTypes, float collisionHeight = MapConst.DefaultCollesionHeight)
public void GetFullTerrainStatusForPosition(PhaseShift phaseShift, float x, float y, float z, PositionFullTerrainStatus data, LiquidHeaderTypeFlags reqLiquidType, float collisionHeight = MapConst.DefaultCollesionHeight)
{
uint terrainMapId = PhasingHandler.GetTerrainMapId(phaseShift, this, x, y);
AreaAndLiquidData vmapData = Global.VMapMgr.GetAreaAndLiquidData(terrainMapId, x, y, z, reqLiquidType);
AreaAndLiquidData vmapData = Global.VMapMgr.GetAreaAndLiquidData(terrainMapId, x, y, z, (byte)reqLiquidType);
if (vmapData.areaInfo.HasValue)
data.areaInfo.Set(new PositionFullTerrainStatus.AreaInfo(vmapData.areaInfo.Value.AdtId, vmapData.areaInfo.Value.RootId, vmapData.areaInfo.Value.GroupId, vmapData.areaInfo.Value.MogpFlags));
@@ -2134,7 +2135,7 @@ namespace Game.Maps
liquidInfo.level = vmapData.liquidInfo.Value.Level;
liquidInfo.depth_level = vmapData.floorZ;
liquidInfo.entry = liquidType;
liquidInfo.type_flags = 1u << (int)liquidFlagType;
liquidInfo.type_flags = (LiquidHeaderTypeFlags)(1u << (int)liquidFlagType);
data.LiquidInfo.Set(liquidInfo);
float delta = vmapData.liquidInfo.Value.Level - z;
@@ -2197,12 +2198,12 @@ namespace Game.Maps
public bool IsInWater(PhaseShift phaseShift, float x, float y, float pZ)
{
return Convert.ToBoolean(GetLiquidStatus(phaseShift, x, y, pZ, MapConst.MapAllLiquidTypes) & (ZLiquidStatus.InWater | ZLiquidStatus.UnderWater));
return Convert.ToBoolean(GetLiquidStatus(phaseShift, x, y, pZ, LiquidHeaderTypeFlags.AllLiquids) & (ZLiquidStatus.InWater | ZLiquidStatus.UnderWater));
}
public bool IsUnderWater(PhaseShift phaseShift, float x, float y, float z)
{
return Convert.ToBoolean(GetLiquidStatus(phaseShift, x, y, z, MapConst.MapLiquidTypeWater | MapConst.MapLiquidTypeOcean) & ZLiquidStatus.UnderWater);
return Convert.ToBoolean(GetLiquidStatus(phaseShift, x, y, z, LiquidHeaderTypeFlags.Water | LiquidHeaderTypeFlags.Ocean) & ZLiquidStatus.UnderWater);
}
public string GetMapName()