Skip to content

Commit

Permalink
fix #5860
Browse files Browse the repository at this point in the history
  • Loading branch information
rt committed Jan 13, 2018
1 parent 99ac014 commit 1dfb23b
Show file tree
Hide file tree
Showing 32 changed files with 222 additions and 154 deletions.
2 changes: 1 addition & 1 deletion rts/Game/SelectedUnitsAI.cpp
Expand Up @@ -8,7 +8,7 @@
#include "Game/Players/Player.h"
#include "Game/Players/PlayerHandler.h"
#include "Map/Ground.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/GlobalConstants.h"
#include "Sim/Misc/QuadField.h"
#include "Sim/Misc/TeamHandler.h"
#include "Sim/MoveTypes/MoveType.h"
Expand Down
1 change: 1 addition & 0 deletions rts/Game/UI/UnitTracker.cpp
Expand Up @@ -8,6 +8,7 @@
#include "Game/SelectedUnitsHandler.h"
#include "Map/Ground.h"
#include "Rendering/GlobalRendering.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Units/Unit.h"
#include "Sim/Units/UnitHandler.h"
#include "System/Config/ConfigHandler.h"
Expand Down
95 changes: 70 additions & 25 deletions rts/Map/Ground.cpp
Expand Up @@ -3,6 +3,8 @@

#include "Ground.h"
#include "ReadMap.h"
#include "Sim/Misc/GlobalConstants.h"
#include "Sim/Misc/GlobalSynced.h"
#include "System/myMath.h"

#include <cassert>
Expand Down Expand Up @@ -400,25 +402,25 @@ float CGround::LinePlaneCol(const float3 pos, const float3 dir, float len, float

float CGround::LineGroundWaterCol(const float3 pos, const float3 dir, float len, bool testWater, bool synced)
{
const float dist = LineGroundCol(pos, dir, len, synced);
const float terraDist = LineGroundCol(pos, dir, len, synced);
if (!testWater)
return dist;
return terraDist;

const float waterDist = LinePlaneCol(pos, dir, len, 0.0f);
if (waterDist < 0.0f)
return dist;
return terraDist;

float3 end = pos + dir * waterDist;
if (end.x > float3::maxxpos || end.x < 0.0f)
return dist;
const float3 end = pos + dir * waterDist;

if (end.z > float3::maxzpos || end.z < 0.0f)
return dist;
if (end.x < 0.0f || end.x > float3::maxxpos)
return terraDist;
if (end.z < 0.0f || end.z > float3::maxzpos)
return terraDist;

if (dist < 0.0f)
if (terraDist < 0.0f)
return waterDist;

return std::min(dist, waterDist);
return std::min(terraDist, waterDist);
}


Expand Down Expand Up @@ -519,37 +521,80 @@ float3 CGround::GetSmoothNormal(float x, float z, bool synced)

const float3& n1 = normalMap[sz * mapDims.mapx + sx ] * ifx * ifz;
const float3& n2 = normalMap[sz * mapDims.mapx + sx2] * fx * ifz;
const float3& n3 = normalMap[sz2 * mapDims.mapx + sx ] * ifx * fz;
const float3& n4 = normalMap[sz2 * mapDims.mapx + sx2] * fx * fz;
const float3& n3 = normalMap[sz2 * mapDims.mapx + sx ] * ifx * fz;
const float3& n4 = normalMap[sz2 * mapDims.mapx + sx2] * fx * fz;

return ((n1 + n2 + n3 + n4).Normalize());
}

float CGround::TrajectoryGroundCol(float3 from, const float3& flatdir, float length, float linear, float quadratic)


float CGround::SimTrajectoryGroundColDist(const float3& trajStartPos, const float3& trajStartDir, const float3& acc, const float2& args)
{
// args.x := speed, args.y := length
const float2 ips = GetMapBoundaryIntersectionPoints(trajStartPos, trajStartDir * XZVector * args.y);

// outside map
if (ips.y < 0.0f)
return -1.0;

const float minDist = args.y * std::max(0.0f, ips.x);
const float maxDist = args.y * std::min(1.0f, ips.y);

float3 pos = trajStartPos;
float3 vel = trajStartDir * args.x;

// sample heights along the trajectory of a virtual projectile launched
// from <pos> with velocity <trajStartDir * speed>; <pos> is assumed to
// start inside map
while (pos.SqDistance2D(trajStartPos) < Square(minDist)) {
pos += vel;
vel += acc;
}
while (pos.y >= GetHeightReal(pos)) {
pos += vel;
vel += acc;
}

if (pos.SqDistance2D(trajStartPos) >= Square(maxDist))
return -1.0f;

return (math::sqrt(pos.SqDistance2D(trajStartPos)));
}

float CGround::TrajectoryGroundCol(const float3& trajStartPos, const float3& trajTargetDir, float length, float linCoeff, float qdrCoeff)
{
float3 dir(flatdir.x, linear, flatdir.z);
// trajTargetDir should be the normalized xz-vector from <trajStartPos> to the target
const float3 dir = {trajTargetDir.x, linCoeff, trajTargetDir.z};
const float3 alt = UpVector * qdrCoeff;

// limit the checking to the `in map part` of the line
std::pair<float, float> near_far = GetMapBoundaryIntersectionPoints(from, dir * length);
// limit checking to the in-map part of the line
const float2 ips = GetMapBoundaryIntersectionPoints(trajStartPos, dir * length);

// outside of map
if (near_far.second < 0.0f)
// outside map
if (ips.y < 0.0f)
return -1.0;

const float near = length * std::max(0.0f, near_far.first);
const float far = length * std::min(1.0f, near_far.second);
const float minDist = length * std::max(0.0f, ips.x);
const float maxDist = length * std::min(1.0f, ips.y);

for (float l = near; l < far; l += SQUARE_SIZE) {
const float3 pos = (from + dir * l) + (UpVector * quadratic * l * l);
for (float dist = minDist; dist < maxDist; dist += SQUARE_SIZE) {
const float3 pos = (trajStartPos + dir * dist) + (alt * dist * dist);

if (GetApproximateHeight(pos.x, pos.z) > pos.y) {
return l;
}
#if 1
if (GetApproximateHeight(pos) > pos.y)
return dist;
#else
if (GetHeightReal(pos) > pos.y)
return dist;
#endif
}

return -1.0f;
}



int CGround::GetSquare(const float3& pos) {
const int x = Clamp((int(pos.x) / SQUARE_SIZE), 0, mapDims.mapxm1);
const int z = Clamp((int(pos.z) / SQUARE_SIZE), 0, mapDims.mapym1);
Expand Down
8 changes: 5 additions & 3 deletions rts/Map/Ground.h
Expand Up @@ -4,8 +4,8 @@
#define GROUND_H

#include "System/float3.h"
#include "Sim/Misc/GlobalConstants.h"
#include "Sim/Misc/GlobalSynced.h"
#include "System/type2.h"


class CGround
{
Expand Down Expand Up @@ -39,7 +39,9 @@ class CGround
static float LineGroundCol(const float3 pos, const float3 dir, float len, bool synced = true);
static float LinePlaneCol(const float3 pos, const float3 dir, float len, float hgt);
static float LineGroundWaterCol(const float3 pos, const float3 dir, float len, bool testWater, bool synced = true);
static float TrajectoryGroundCol(float3 from, const float3& flatdir, float length, float linear, float quadratic);

static float TrajectoryGroundCol(const float3& trajStartPos, const float3& trajTargetDir, float length, float linCoeff, float qdrCoeff);
static float SimTrajectoryGroundColDist(const float3& startPos, const float3& trajStartDir, const float3& acc, const float2& args);

static int GetSquare(const float3& pos);
};
Expand Down
Expand Up @@ -9,6 +9,7 @@
#include "Rendering/Env/Particles/ProjectileDrawer.h"
#include "Rendering/GL/RenderDataBuffer.hpp"
#include "Rendering/Textures/TextureAtlas.h"
#include "Sim/Misc/GlobalSynced.h"
#include "System/myMath.h"

CR_BIND_DERIVED(CSmokeTrailProjectile, CProjectile, )
Expand Down
1 change: 1 addition & 0 deletions rts/Rendering/Env/Particles/Classes/WreckProjectile.cpp
Expand Up @@ -10,6 +10,7 @@
#include "Rendering/GL/RenderDataBuffer.hpp"
#include "Rendering/GL/VertexArray.h"
#include "Rendering/Textures/TextureAtlas.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Projectiles/ProjectileHandler.h"
#include "Sim/Projectiles/ProjectileMemPool.h"

Expand Down
1 change: 1 addition & 0 deletions rts/Rendering/Env/Particles/ProjectileDrawer.cpp
Expand Up @@ -22,6 +22,7 @@
#include "Rendering/Textures/S3OTextureHandler.h"
#include "Rendering/Textures/TextureAtlas.h"
#include "Rendering/Models/ModelRenderContainer.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/LosHandler.h"
#include "Sim/Misc/TeamHandler.h"
#include "Sim/Projectiles/ExplosionGenerator.h"
Expand Down
1 change: 1 addition & 0 deletions rts/Sim/Features/Feature.cpp
Expand Up @@ -12,6 +12,7 @@
#include "Rendering/Env/Particles/Classes/GeoThermSmokeProjectile.h"
#include "Rendering/Env/Particles/Classes/SmokeProjectile.h"
#include "Sim/Misc/DamageArray.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/QuadField.h"
#include "Sim/Misc/CollisionVolume.h"
#include "Sim/Misc/LosHandler.h"
Expand Down
3 changes: 2 additions & 1 deletion rts/Sim/Misc/InterceptHandler.cpp
Expand Up @@ -6,11 +6,12 @@
#include "InterceptHandler.h"

#include "Map/Ground.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/TeamHandler.h"
#include "Sim/Weapons/Weapon.h"
#include "Sim/Projectiles/WeaponProjectiles/WeaponProjectile.h"
#include "Sim/Units/Unit.h"
#include "Sim/Weapons/WeaponDef.h"
#include "Sim/Misc/TeamHandler.h"
#include "System/EventHandler.h"
#include "System/float3.h"
#include "System/myMath.h"
Expand Down
1 change: 1 addition & 0 deletions rts/Sim/MoveTypes/HoverAirMoveType.cpp
Expand Up @@ -7,6 +7,7 @@
#include "Map/Ground.h"
#include "Rendering/Env/Particles/Classes/SmokeProjectile.h"
#include "Sim/Misc/GeometricObjects.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/GroundBlockingObjectMap.h"
#include "Sim/Misc/QuadField.h"
#include "Sim/Misc/ModInfo.h"
Expand Down
3 changes: 2 additions & 1 deletion rts/Sim/Projectiles/PieceProjectile.cpp
Expand Up @@ -11,11 +11,12 @@
#include "Rendering/Textures/TextureAtlas.h"
#include "Rendering/Colors.h"
#include "Rendering/Env/Particles/ProjectileDrawer.h"
#include "Rendering/Env/Particles/Classes/SmokeTrailProjectile.h"
#include "Rendering/Models/3DModel.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Projectiles/ExplosionGenerator.h"
#include "Sim/Projectiles/ProjectileHandler.h"
#include "Sim/Projectiles/ProjectileMemPool.h"
#include "Rendering/Env/Particles/Classes/SmokeTrailProjectile.h"
#include "Sim/Units/Unit.h"
#include "Sim/Units/UnitDef.h"
#include "System/Matrix44f.h"
Expand Down
2 changes: 1 addition & 1 deletion rts/Sim/Projectiles/Projectile.cpp
Expand Up @@ -134,7 +134,7 @@ CProjectile::~CProjectile()

void CProjectile::Init(const CUnit* owner, const float3& offset)
{
if (owner != NULL) {
if (owner != nullptr) {
// must be set before the AddProjectile call
ownerID = owner->id;
teamID = owner->team;
Expand Down
1 change: 1 addition & 0 deletions rts/Sim/Projectiles/ProjectileHandler.cpp
Expand Up @@ -14,6 +14,7 @@
#include "Sim/Features/FeatureDef.h"
#include "Sim/Misc/CollisionHandler.h"
#include "Sim/Misc/CollisionVolume.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/QuadField.h"
#include "Sim/Misc/TeamHandler.h"
#include "Rendering/Env/Particles/Classes/FlyingPiece.h"
Expand Down
3 changes: 2 additions & 1 deletion rts/Sim/Projectiles/WeaponProjectiles/LaserProjectile.cpp
Expand Up @@ -4,10 +4,11 @@
#include "Game/Camera.h"
#include "LaserProjectile.h"
#include "Map/Ground.h"
#include "Rendering/Env/Particles/Classes/SimpleParticleSystem.h"
#include "Rendering/GL/RenderDataBuffer.hpp"
#include "Sim/Misc/GlobalConstants.h"
#include "Sim/Projectiles/ExplosionGenerator.h"
#include "Sim/Projectiles/ProjectileHandler.h"
#include "Rendering/Env/Particles/Classes/SimpleParticleSystem.h"
#include "Sim/Weapons/WeaponDef.h"

#ifdef TRACE_SYNC
Expand Down
3 changes: 2 additions & 1 deletion rts/Sim/Projectiles/WeaponProjectiles/MissileProjectile.cpp
Expand Up @@ -6,13 +6,14 @@
#include "Map/Ground.h"
#include "MissileProjectile.h"
#include "Rendering/GlobalRendering.h"
#include "Rendering/Env/Particles/Classes/SmokeTrailProjectile.h"
#include "Rendering/GL/RenderDataBuffer.hpp"
#include "Rendering/Textures/TextureAtlas.h"
#include "Sim/Misc/GeometricObjects.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Projectiles/ExplosionGenerator.h"
#include "Sim/Projectiles/ProjectileHandler.h"
#include "Sim/Projectiles/ProjectileMemPool.h"
#include "Rendering/Env/Particles/Classes/SmokeTrailProjectile.h"
#include "Sim/Units/Unit.h"
#include "Sim/Weapons/WeaponDefHandler.h"
#include "System/Matrix44f.h"
Expand Down
5 changes: 3 additions & 2 deletions rts/Sim/Projectiles/WeaponProjectiles/TorpedoProjectile.cpp
Expand Up @@ -7,13 +7,14 @@
#include "Game/GlobalUnsynced.h"
#include "Map/Ground.h"
#include "Rendering/Env/Particles/ProjectileDrawer.h"
#include "Rendering/Env/Particles/Classes/BubbleProjectile.h"
#include "Rendering/Env/Particles/Classes/SmokeTrailProjectile.h"
#include "Rendering/GL/RenderDataBuffer.hpp"
#include "Rendering/Textures/TextureAtlas.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Projectiles/ExplosionGenerator.h"
#include "Sim/Projectiles/ProjectileHandler.h"
#include "Sim/Projectiles/ProjectileMemPool.h"
#include "Rendering/Env/Particles/Classes/BubbleProjectile.h"
#include "Rendering/Env/Particles/Classes/SmokeTrailProjectile.h"
#include "Sim/Units/Unit.h"
#include "Sim/Weapons/WeaponDef.h"
#include "System/myMath.h"
Expand Down
17 changes: 9 additions & 8 deletions rts/Sim/Projectiles/WeaponProjectiles/WeaponProjectile.cpp
@@ -1,22 +1,23 @@
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */

#include "Game/GameHelper.h"
#include "Map/Ground.h"
#include "Rendering/Colors.h"
#include "Rendering/GL/VertexArray.h"
#include "Sim/Features/Feature.h"
#include "Sim/Misc/DamageArray.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/InterceptHandler.h"
#include "Sim/Misc/QuadField.h"
#include "Sim/Misc/TeamHandler.h"
#include "Sim/Projectiles/ExplosionGenerator.h"
#include "Sim/Projectiles/ProjectileHandler.h"
#include "Sim/Projectiles/ProjectileParams.h"
#include "Sim/Projectiles/WeaponProjectiles/WeaponProjectile.h"
#include "Sim/Weapons/Weapon.h"
#include "Sim/Weapons/WeaponDefHandler.h"
#include "Sim/Features/Feature.h"
#include "Sim/Misc/TeamHandler.h"
#include "Sim/Units/Unit.h"
#include "Sim/Units/UnitHandler.h"
#include "Sim/Misc/DamageArray.h"
#include "Sim/Misc/InterceptHandler.h"
#include "Sim/Misc/QuadField.h"
#include "Map/Ground.h"
#include "Sim/Weapons/Weapon.h"
#include "Sim/Weapons/WeaponDefHandler.h"
#include "System/Matrix44f.h"
#include "System/myMath.h"
#include "System/creg/DefTypes.h"
Expand Down
1 change: 1 addition & 0 deletions rts/Sim/Units/CommandAI/BuilderCAI.cpp
Expand Up @@ -12,6 +12,7 @@
#include "Sim/Features/Feature.h"
#include "Sim/Features/FeatureDef.h"
#include "Sim/Features/FeatureHandler.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/GroundBlockingObjectMap.h"
#include "Sim/Misc/QuadField.h"
#include "Sim/Misc/Team.h"
Expand Down
1 change: 1 addition & 0 deletions rts/Sim/Units/CommandAI/CommandAI.cpp
Expand Up @@ -15,6 +15,7 @@
#include "Sim/Features/Feature.h"
#include "Sim/Features/FeatureDef.h"
#include "Sim/Features/FeatureHandler.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/ModInfo.h"
#include "Sim/Misc/TeamHandler.h"
#include "Sim/MoveTypes/MoveType.h"
Expand Down
1 change: 1 addition & 0 deletions rts/Sim/Units/CommandAI/MobileCAI.cpp
Expand Up @@ -7,6 +7,7 @@
#include "Game/GlobalUnsynced.h"
#include "Game/SelectedUnitsHandler.h"
#include "Map/Ground.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/LosHandler.h"
#include "Sim/Misc/ModInfo.h"
#include "Sim/Misc/QuadField.h"
Expand Down
1 change: 1 addition & 0 deletions rts/Sim/Units/Scripts/UnitScript.cpp
Expand Up @@ -13,6 +13,7 @@
#include "Game/GameHelper.h"
#include "Game/GlobalUnsynced.h"
#include "Map/Ground.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/GroundBlockingObjectMap.h"
#include "Sim/Misc/LosHandler.h"
#include "Sim/Misc/TeamHandler.h"
Expand Down

0 comments on commit 1dfb23b

Please sign in to comment.