Very unfinished attempt at changing the coordinate system to work relative to the level and to move the sub instead of the whole level

This commit is contained in:
Regalis
2015-12-03 19:42:11 +02:00
parent 5bcdfa2b56
commit c064c5eb50
14 changed files with 278 additions and 269 deletions
+1 -1
View File
@@ -74,7 +74,7 @@
<Compile Include="Source\Characters\AI\Objectives\AIObjectiveOperateItem.cs" /> <Compile Include="Source\Characters\AI\Objectives\AIObjectiveOperateItem.cs" />
<Compile Include="Source\Characters\AI\Objectives\AIObjective.cs" /> <Compile Include="Source\Characters\AI\Objectives\AIObjective.cs" />
<Compile Include="Source\Characters\AI\PathFinder.cs" /> <Compile Include="Source\Characters\AI\PathFinder.cs" />
<Compile Include="Source\Characters\AI\PathSteeringManager.cs" /> <Compile Include="Source\Characters\AI\ÍndoorsSteeringManager.cs" />
<Compile Include="Source\Characters\Animation\AnimController.cs" /> <Compile Include="Source\Characters\Animation\AnimController.cs" />
<Compile Include="Source\Characters\Attack.cs" /> <Compile Include="Source\Characters\Attack.cs" />
<Compile Include="Source\Characters\BackgroundSprite\BackgroundSprite.cs" /> <Compile Include="Source\Characters\BackgroundSprite\BackgroundSprite.cs" />
@@ -59,7 +59,7 @@ namespace Barotrauma
this.position = position; this.position = position;
drawPosition = position + Level.Loaded.Position; drawPosition = position;
steeringManager = new SteeringManager(this); steeringManager = new SteeringManager(this);
@@ -153,7 +153,7 @@ namespace Barotrauma
if (velocity.X < 0.0f) rotation -= MathHelper.Pi; if (velocity.X < 0.0f) rotation -= MathHelper.Pi;
} }
if (Level.Loaded != null) drawPosition = position + Level.Loaded.Position; if (Level.Loaded != null) drawPosition = position;// +Level.Loaded.Position;
if (depth > 0.0f) if (depth > 0.0f)
{ {
+1 -1
View File
@@ -889,7 +889,7 @@ namespace Barotrauma
if (Submarine.Loaded!=null && Level.Loaded !=null) if (Submarine.Loaded!=null && Level.Loaded !=null)
{ {
protectedFromPressure = protectedFromPressure && (Position-Level.Loaded.Position).Y > SubmarineBody.DamageDepth; protectedFromPressure = protectedFromPressure && Position.Y > SubmarineBody.DamageDepth;
} }
if (!protectedFromPressure && if (!protectedFromPressure &&
+6 -6
View File
@@ -35,13 +35,13 @@ namespace Barotrauma
for (int i = 0; i < amount; i++) for (int i = 0; i < amount; i++)
{ {
Vector2 position = (randomWayPoint == null) ? Vector2.Zero : FarseerPhysics.ConvertUnits.ToSimUnits(randomWayPoint.Position + Level.Loaded.Position); Vector2 position = (randomWayPoint == null) ? Vector2.Zero : FarseerPhysics.ConvertUnits.ToSimUnits(randomWayPoint.Position);
//!!!!!!!!!!!!!!!!!!
if (spawnDeep) //if (spawnDeep)
{ //{
position.Y = FarseerPhysics.ConvertUnits.ToSimUnits(Level.Loaded.Position.Y); // position.Y = FarseerPhysics.ConvertUnits.ToSimUnits(Level.Loaded.Position.Y);
} //}
position.X += Rand.Range(-0.5f, 0.5f); position.X += Rand.Range(-0.5f, 0.5f);
position.Y += Rand.Range(-0.5f, 0.5f); position.Y += Rand.Range(-0.5f, 0.5f);
@@ -31,7 +31,7 @@ namespace Barotrauma
{ {
Vector2 position = level.PositionsOfInterest[Rand.Int(level.PositionsOfInterest.Count, false)]; Vector2 position = level.PositionsOfInterest[Rand.Int(level.PositionsOfInterest.Count, false)];
monster = Character.Create(monsterFile, ConvertUnits.ToSimUnits(position+level.Position)); monster = Character.Create(monsterFile, ConvertUnits.ToSimUnits(position));
} }
public override void Update(float deltaTime) public override void Update(float deltaTime)
@@ -47,8 +47,8 @@ namespace Barotrauma
Vector2 tryPos = level.PositionsOfInterest[Rand.Int(level.PositionsOfInterest.Count, false)]; Vector2 tryPos = level.PositionsOfInterest[Rand.Int(level.PositionsOfInterest.Count, false)];
if (Submarine.PickBody( if (Submarine.PickBody(
tryPos + level.Position, tryPos,
tryPos + level.Position - Vector2.UnitY*level.Size.Y, tryPos - Vector2.UnitY*level.Size.Y,
null, Physics.CollisionLevel) != null) null, Physics.CollisionLevel) != null)
{ {
position = tryPos; position = tryPos;
@@ -65,7 +65,7 @@ namespace Barotrauma
} while (tries < 10); } while (tries < 10);
item = new Item(itemPrefab, position + level.Position); item = new Item(itemPrefab, position);
item.MoveWithLevel = true; item.MoveWithLevel = true;
item.body.FarseerBody.GravityScale = 0.5f; item.body.FarseerBody.GravityScale = 0.5f;
//item.MoveWithLevel = true; //item.MoveWithLevel = true;
@@ -116,159 +116,161 @@ namespace Barotrauma.Items.Components
float simScale = 1.5f; float simScale = 1.5f;
if (Level.Loaded != null) return;
{
List<VoronoiCell> cells = Level.Loaded.GetCells(-Level.Loaded.Position, 7);
foreach (VoronoiCell cell in cells) //if (Level.Loaded != null)
{ //{
// List<VoronoiCell> cells = Level.Loaded.GetCells(Submarine.Loaded.Position, 7);
foreach (GraphEdge edge in cell.edges) // foreach (VoronoiCell cell in cells)
{ // {
//if (!edge.isSolid) continue;
float cellDot = Vector2.Dot(cell.Center + Level.Loaded.Position, (edge.point1 + edge.point2) / 2.0f - cell.Center);
if (cellDot > 0) continue;
float facingDot = Vector2.Dot(Vector2.Normalize(edge.point1 - edge.point2), Vector2.Normalize(cell.Center + Level.Loaded.Position)); // foreach (GraphEdge edge in cell.edges)
facingDot = MathHelper.Clamp(facingDot, -1.0f, 1.0f); // {
// //if (!edge.isSolid) continue;
// float cellDot = Vector2.Dot(cell.Center + Level.Loaded.Position, (edge.point1 + edge.point2) / 2.0f - cell.Center);
// if (cellDot > 0) continue;
Vector2 point1 = (edge.point1 + Level.Loaded.Position); // float facingDot = Vector2.Dot(Vector2.Normalize(edge.point1 - edge.point2), Vector2.Normalize(cell.Center + Level.Loaded.Position));
Vector2 point2 = (edge.point2 + Level.Loaded.Position); // facingDot = MathHelper.Clamp(facingDot, -1.0f, 1.0f);
float length = (point1 - point2).Length(); // Vector2 point1 = (edge.point1 + Level.Loaded.Position);
for (float x=0; x<length; x+=Rand.Range(600.0f, 800.0f)) // Vector2 point2 = (edge.point2 + Level.Loaded.Position);
{
Vector2 point = point1 + Vector2.Normalize(point2 - point1) * x;
float pointDist = point.Length() * displayScale; // float length = (point1 - point2).Length();
// for (float x=0; x<length; x+=Rand.Range(600.0f, 800.0f))
// {
// Vector2 point = point1 + Vector2.Normalize(point2 - point1) * x;
if (pointDist > radius) continue; // float pointDist = point.Length() * displayScale;
if (pointDist < prevPingRadius || pointDist > pingRadius) continue;
// if (pointDist > radius) continue;
// if (pointDist < prevPingRadius || pointDist > pingRadius) continue;
float step = 5.0f * (Math.Abs(facingDot)+1.0f); // float step = 5.0f * (Math.Abs(facingDot)+1.0f);
float alpha = Rand.Range(1.5f, 2.0f); // float alpha = Rand.Range(1.5f, 2.0f);
for (float z = 0; z<radius-pointDist;z+=step) // for (float z = 0; z<radius-pointDist;z+=step)
{ // {
var blip = new RadarBlip( // var blip = new RadarBlip(
point + Rand.Vector(150.0f) - Level.Loaded.Position + Vector2.Normalize(point) * z / displayScale, // point + Rand.Vector(150.0f) - Level.Loaded.Position + Vector2.Normalize(point) * z / displayScale,
alpha); // alpha);
radarBlips.Add(blip); // radarBlips.Add(blip);
step += 0.5f; // step += 0.5f;
alpha -= (z == 0) ? 0.5f : 0.1f; // alpha -= (z == 0) ? 0.5f : 0.1f;
} // }
} // }
} // }
} // }
for (int i = 0; i < Submarine.Loaded.HullVertices.Count; i++) // for (int i = 0; i < Submarine.Loaded.HullVertices.Count; i++)
{ // {
Vector2 start = Submarine.Loaded.HullVertices[i] * simScale; // Vector2 start = Submarine.Loaded.HullVertices[i] * simScale;
start.Y = -start.Y; // start.Y = -start.Y;
Vector2 end = Submarine.Loaded.HullVertices[(i + 1) % Submarine.Loaded.HullVertices.Count] * simScale; // Vector2 end = Submarine.Loaded.HullVertices[(i + 1) % Submarine.Loaded.HullVertices.Count] * simScale;
end.Y = -end.Y; // end.Y = -end.Y;
Vector2 diff = end - start; // Vector2 diff = end - start;
for (float x = 0; x < diff.Length(); x+=4.0f ) // for (float x = 0; x < diff.Length(); x+=4.0f )
{ // {
GUI.DrawLine(spriteBatch, center + start, center + end, Color.Green); // GUI.DrawLine(spriteBatch, center + start, center + end, Color.Green);
} // }
} // }
} //}
foreach (Character c in Character.CharacterList) //foreach (Character c in Character.CharacterList)
{ //{
if (c.AnimController.CurrentHull != null) continue; // if (c.AnimController.CurrentHull != null) continue;
foreach (Limb limb in c.AnimController.Limbs) // foreach (Limb limb in c.AnimController.Limbs)
{ // {
Vector2 pos = limb.Position; // Vector2 pos = limb.Position;
float pointDist = pos.Length() * displayScale; // float pointDist = pos.Length() * displayScale;
if (limb.SimPosition == Vector2.Zero || pointDist > radius) continue; // if (limb.SimPosition == Vector2.Zero || pointDist > radius) continue;
if (pointDist > radius) continue; // if (pointDist > radius) continue;
if (pointDist > prevPingRadius && pointDist < pingRadius) // if (pointDist > prevPingRadius && pointDist < pingRadius)
{ // {
var blip = new RadarBlip(pos - Level.Loaded.Position, 1.0f); // var blip = new RadarBlip(pos - Level.Loaded.Position, 1.0f);
radarBlips.Add(blip); // radarBlips.Add(blip);
} // }
} // }
} //}
foreach (RadarBlip radarBlip in radarBlips) //foreach (RadarBlip radarBlip in radarBlips)
{ //{
DrawBlip(spriteBatch,radarBlip, center, Color.Green * radarBlip.FadeTimer, radius); // DrawBlip(spriteBatch,radarBlip, center, Color.Green * radarBlip.FadeTimer, radius);
} //}
prevPingRadius = pingRadius;
if (screenOverlay!=null)
{
screenOverlay.Draw(spriteBatch, center, 0.0f, rect.Width/screenOverlay.size.X);
}
//prevPingRadius = pingRadius; //prevPingRadius = pingRadius;
if (GameMain.GameSession == null) return; //if (screenOverlay!=null)
//{
// screenOverlay.Draw(spriteBatch, center, 0.0f, rect.Width/screenOverlay.size.X);
//}
////prevPingRadius = pingRadius;
//if (GameMain.GameSession == null) return;
DrawMarker(spriteBatch, //DrawMarker(spriteBatch,
(GameMain.GameSession.Map == null) ? "Start" : GameMain.GameSession.Map.CurrentLocation.Name, // (GameMain.GameSession.Map == null) ? "Start" : GameMain.GameSession.Map.CurrentLocation.Name,
(Level.Loaded.StartPosition + Level.Loaded.Position), displayScale, center, (rect.Width * 0.55f)); // (Level.Loaded.StartPosition + Level.Loaded.Position), displayScale, center, (rect.Width * 0.55f));
DrawMarker(spriteBatch, //DrawMarker(spriteBatch,
(GameMain.GameSession.Map == null) ? "End" : GameMain.GameSession.Map.SelectedLocation.Name, // (GameMain.GameSession.Map == null) ? "End" : GameMain.GameSession.Map.SelectedLocation.Name,
(Level.Loaded.EndPosition + Level.Loaded.Position), displayScale, center, (rect.Width * 0.55f)); // (Level.Loaded.EndPosition + Level.Loaded.Position), displayScale, center, (rect.Width * 0.55f));
if (GameMain.GameSession.Quest != null) //if (GameMain.GameSession.Quest != null)
{ //{
var quest = GameMain.GameSession.Quest; // var quest = GameMain.GameSession.Quest;
if (!string.IsNullOrWhiteSpace(quest.RadarLabel)) // if (!string.IsNullOrWhiteSpace(quest.RadarLabel))
{ // {
DrawMarker(spriteBatch, // DrawMarker(spriteBatch,
quest.RadarLabel, // quest.RadarLabel,
quest.RadarPosition, displayScale, center, (rect.Width * 0.55f)); // quest.RadarPosition, displayScale, center, (rect.Width * 0.55f));
} // }
} //}
if (!GameMain.DebugDraw) return; //if (!GameMain.DebugDraw) return;
var steering = item.GetComponent<Steering>(); //var steering = item.GetComponent<Steering>();
if (steering == null || steering.SteeringPath == null) return; //if (steering == null || steering.SteeringPath == null) return;
Vector2 prevPos = Vector2.Zero; //Vector2 prevPos = Vector2.Zero;
foreach (WayPoint wp in steering.SteeringPath.Nodes) //foreach (WayPoint wp in steering.SteeringPath.Nodes)
{ //{
Vector2 pos = (wp.Position - Submarine.Loaded.Position) * displayScale; // Vector2 pos = (wp.Position - Submarine.Loaded.Position) * displayScale;
if (pos.Length() > radius) continue; // if (pos.Length() > radius) continue;
pos.Y = -pos.Y; // pos.Y = -pos.Y;
pos += center; // pos += center;
GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X -3 / 2, (int)pos.Y - 3, 6, 6), (steering.SteeringPath.CurrentNode==wp) ? Color.LightGreen : Color.Green, false); // GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X -3 / 2, (int)pos.Y - 3, 6, 6), (steering.SteeringPath.CurrentNode==wp) ? Color.LightGreen : Color.Green, false);
if (prevPos!=Vector2.Zero) // if (prevPos!=Vector2.Zero)
{ // {
GUI.DrawLine(spriteBatch, pos, prevPos, Color.Green); // GUI.DrawLine(spriteBatch, pos, prevPos, Color.Green);
} // }
prevPos = pos; // prevPos = pos;
} //}
voltage = 0.0f; //voltage = 0.0f;
} }
private void DrawBlip(SpriteBatch spriteBatch, RadarBlip blip, Vector2 center, Color color, float radius) private void DrawBlip(SpriteBatch spriteBatch, RadarBlip blip, Vector2 center, Color color, float radius)
{ {
Vector2 pos = (blip.Position + Level.Loaded.Position) * displayScale; Vector2 pos = (blip.Position) * displayScale;
pos.Y = -pos.Y; pos.Y = -pos.Y;
if (pos.Length() > radius) if (pos.Length() > radius)
+88 -96
View File
@@ -77,15 +77,7 @@ namespace Barotrauma
get; get;
private set; private set;
} }
public Vector2 Position
{
get
{
return cells==null ? Vector2.Zero : ConvertUnits.ToDisplayUnits(cells[0].body.Position);
}
}
public List<Vector2> PositionsOfInterest public List<Vector2> PositionsOfInterest
{ {
get { return positionsOfInterest; } get { return positionsOfInterest; }
@@ -712,106 +704,106 @@ namespace Barotrauma
return verticeList.ToArray(); return verticeList.ToArray();
} }
public void SetPosition(Vector2 pos) //public void SetPosition(Vector2 pos)
{ //{
Vector2 amount = pos - Position; // Vector2 amount = pos - Position;
Vector2 simAmount = ConvertUnits.ToSimUnits(amount); // Vector2 simAmount = ConvertUnits.ToSimUnits(amount);
//foreach (VoronoiCell cell in cells) // //foreach (VoronoiCell cell in cells)
//{ // //{
// if (cell.body == null) continue; // // if (cell.body == null) continue;
// cell.body.SleepingAllowed = false; // // cell.body.SleepingAllowed = false;
// cell.body.SetTransform(cell.body.Position + simAmount, cell.body.Rotation); // // cell.body.SetTransform(cell.body.Position + simAmount, cell.body.Rotation);
//} // //}
foreach (Body body in bodies) // foreach (Body body in bodies)
{ // {
body.SetTransform(body.Position + simAmount, body.Rotation); // body.SetTransform(body.Position + simAmount, body.Rotation);
} // }
foreach (MapEntity mapEntity in MapEntity.mapEntityList) // foreach (MapEntity mapEntity in MapEntity.mapEntityList)
{ // {
Item item = mapEntity as Item; // Item item = mapEntity as Item;
if (item == null) // if (item == null)
{ // {
//if (!mapEntity.MoveWithLevel) continue; // //if (!mapEntity.MoveWithLevel) continue;
//mapEntity.Move(amount); // //mapEntity.Move(amount);
} // }
else if (item.body != null) // else if (item.body != null)
{ // {
if (item.CurrentHull != null) continue; // if (item.CurrentHull != null) continue;
item.SetTransform(item.SimPosition+amount, item.body.Rotation); // item.SetTransform(item.SimPosition+amount, item.body.Rotation);
} // }
} // }
//WrappingWall.UpdateWallShift(Position, wrappingWalls); // //WrappingWall.UpdateWallShift(Position, wrappingWalls);
} //}
Vector2 prevVelocity; //Vector2 prevVelocity;
public void Move(Vector2 amount) //public void Move(Vector2 amount)
{ //{
Vector2 simVelocity = ConvertUnits.ToSimUnits(amount / (float)Physics.step); // Vector2 simVelocity = ConvertUnits.ToSimUnits(amount / (float)Physics.step);
foreach (Body body in bodies) // foreach (Body body in bodies)
{ // {
body.LinearVelocity = simVelocity; // body.LinearVelocity = simVelocity;
} // }
foreach (Character character in Character.CharacterList) // foreach (Character character in Character.CharacterList)
{ // {
foreach (Limb limb in character.AnimController.Limbs) // foreach (Limb limb in character.AnimController.Limbs)
{ // {
if (character.AnimController.CurrentHull != null) continue; // if (character.AnimController.CurrentHull != null) continue;
limb.body.LinearVelocity += simVelocity; // limb.body.LinearVelocity += simVelocity;
} // }
} // }
foreach (Item item in Item.ItemList) // foreach (Item item in Item.ItemList)
{ // {
if (item.body==null || item.CurrentHull != null) continue; // if (item.body==null || item.CurrentHull != null) continue;
item.body.LinearVelocity += simVelocity; // item.body.LinearVelocity += simVelocity;
} // }
AtStartPosition = Vector2.Distance(startPosition, -Position) < ExitDistance; // AtStartPosition = Vector2.Distance(startPosition, -Position) < ExitDistance;
AtEndPosition = Vector2.Distance(endPosition, -Position) < ExitDistance; // AtEndPosition = Vector2.Distance(endPosition, -Position) < ExitDistance;
prevVelocity = simVelocity; // prevVelocity = simVelocity;
WrappingWall.UpdateWallShift(-Position, wrappingWalls); // WrappingWall.UpdateWallShift(-Position, wrappingWalls);
} //}
public static void AfterWorldStep() //public static void AfterWorldStep()
{ //{
if (loaded == null) return; // if (loaded == null) return;
loaded.ResetBodyVelocities(); // loaded.ResetBodyVelocities();
} //}
private void ResetBodyVelocities() //private void ResetBodyVelocities()
{ //{
if (prevVelocity == Vector2.Zero) return; // if (prevVelocity == Vector2.Zero) return;
if (!MathUtils.IsValid(prevVelocity)) // if (!MathUtils.IsValid(prevVelocity))
{ // {
prevVelocity = Vector2.Zero; // prevVelocity = Vector2.Zero;
return; // return;
} // }
foreach (Character character in Character.CharacterList) // foreach (Character character in Character.CharacterList)
{ // {
if (character.AnimController.CurrentHull != null) continue; // if (character.AnimController.CurrentHull != null) continue;
foreach (Limb limb in character.AnimController.Limbs) // foreach (Limb limb in character.AnimController.Limbs)
{ // {
limb.body.LinearVelocity -= prevVelocity; // limb.body.LinearVelocity -= prevVelocity;
} // }
} // }
foreach (Item item in Item.ItemList) // foreach (Item item in Item.ItemList)
{ // {
if (item.body == null || item.CurrentHull != null) continue; // if (item.body == null || item.CurrentHull != null) continue;
item.body.LinearVelocity -= prevVelocity; // item.body.LinearVelocity -= prevVelocity;
} // }
} //}
public void Draw(SpriteBatch spriteBatch) public void Draw(SpriteBatch spriteBatch)
{ {
@@ -841,7 +833,7 @@ namespace Barotrauma
System.Diagnostics.Debug.WriteLine("avgpos: " + avgPos / cells.Count); System.Diagnostics.Debug.WriteLine("avgpos: " + avgPos / cells.Count);
System.Diagnostics.Debug.WriteLine("pos: " + Position); //System.Diagnostics.Debug.WriteLine("pos: " + Position);
} }
public List<VoronoiCell> GetCells(Vector2 pos, int searchDepth = 2) public List<VoronoiCell> GetCells(Vector2 pos, int searchDepth = 2)
@@ -911,10 +903,10 @@ namespace Barotrauma
{ {
if (onlySolid && !cell.edges[i].isSolid) continue; if (onlySolid && !cell.edges[i].isSolid) continue;
Vector2 start = cell.edges[i].point1 + Position; Vector2 start = cell.edges[i].point1;
start.Y = -start.Y; start.Y = -start.Y;
Vector2 end = cell.edges[i].point2 + Position; Vector2 end = cell.edges[i].point2;
end.Y = -end.Y; end.Y = -end.Y;
edges.Add(new Vector2[] { start, end }); edges.Add(new Vector2[] { start, end });
@@ -932,7 +924,7 @@ namespace Barotrauma
foreach (VoronoiCell cell in wrappingWalls[side, n].Cells) foreach (VoronoiCell cell in wrappingWalls[side, n].Cells)
{ {
Vector2 offset = wrappingWalls[side, n].Offset + Position; Vector2 offset = wrappingWalls[side, n].Offset;
for (int i = 0; i < cell.edges.Count; i++) for (int i = 0; i < cell.edges.Count; i++)
{ {
if (onlySolid && !cell.edges[i].isSolid) continue; if (onlySolid && !cell.edges[i].isSolid) continue;
@@ -35,8 +35,8 @@ namespace Barotrauma
public void Draw(SpriteBatch spriteBatch) public void Draw(SpriteBatch spriteBatch)
{ {
Vector2 pos = level.EndPosition; Vector2 pos = Vector2.Zero;// level.EndPosition;
pos.Y = -pos.Y - level.Position.Y; //pos.Y = -pos.Y - level.Position.Y;
if (GameMain.GameScreen.Cam.WorldView.Y < -pos.Y - 512) return; if (GameMain.GameScreen.Cam.WorldView.Y < -pos.Y - 512) return;
@@ -46,7 +46,7 @@ namespace Barotrauma
int width = (int)(Math.Ceiling(GameMain.GameScreen.Cam.WorldView.Width / 512.0f + 2.0f) * 512.0f); int width = (int)(Math.Ceiling(GameMain.GameScreen.Cam.WorldView.Width / 512.0f + 2.0f) * 512.0f);
spriteBatch.Draw(shaftTexture, spriteBatch.Draw(shaftTexture,
new Rectangle((int)(MathUtils.Round(pos.X, 512.0f) + level.Position.X % 512), (int)pos.Y, width, 512), new Rectangle((int)(MathUtils.Round(pos.X, 512.0f) - Submarine.Loaded.Position.X % 512), (int)pos.Y, width, 512),
new Rectangle(0, 0, width, 256), new Rectangle(0, 0, width, 256),
Color.White, 0.0f, Color.White, 0.0f,
Vector2.Zero, Vector2.Zero,
@@ -59,7 +59,7 @@ namespace Barotrauma
if (vertices == null) return; if (vertices == null) return;
if (vertices.Length <= 0) return; if (vertices.Length <= 0) return;
basicEffect.World = Matrix.CreateTranslation(new Vector3(level.Position, 0.0f)) * cam.ShaderTransform basicEffect.World = cam.ShaderTransform
* Matrix.CreateOrthographic(GameMain.GraphicsWidth, GameMain.GraphicsHeight, -1, 1) * 0.5f; * Matrix.CreateOrthographic(GameMain.GraphicsWidth, GameMain.GraphicsHeight, -1, 1) * 0.5f;
basicEffect.CurrentTechnique.Passes[0].Apply(); basicEffect.CurrentTechnique.Passes[0].Apply();
@@ -74,7 +74,7 @@ namespace Barotrauma
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
basicEffect.World = Matrix.CreateTranslation( basicEffect.World = Matrix.CreateTranslation(
new Vector3(level.Position + level.WrappingWalls[side, i].Offset, 0.0f)) * new Vector3(-Submarine.Loaded.Position + level.WrappingWalls[side, i].Offset, 0.0f)) *
cam.ShaderTransform * cam.ShaderTransform *
Matrix.CreateOrthographic(GameMain.GraphicsWidth, GameMain.GraphicsHeight, -1, 1) * 0.5f; Matrix.CreateOrthographic(GameMain.GraphicsWidth, GameMain.GraphicsHeight, -1, 1) * 0.5f;
+3 -3
View File
@@ -69,7 +69,7 @@ namespace Barotrauma.Lights
foreach (ConvexHull convexHull in ConvexHull.list) foreach (ConvexHull convexHull in ConvexHull.list)
{ {
if (!camView.Intersects(convexHull.BoundingBox)) continue; //if (!camView.Intersects(convexHull.BoundingBox)) continue;
convexHull.DrawShadows(graphics, cam, pos, shadowTransform); convexHull.DrawShadows(graphics, cam, pos, shadowTransform);
} }
@@ -109,7 +109,7 @@ namespace Barotrauma.Lights
foreach (LightSource light in lights) foreach (LightSource light in lights)
{ {
if (light.hullsInRange.Count == 0 || light.Color.A < 0.01f || light.Range < 1.0f) continue; if (light.hullsInRange.Count == 0 || light.Color.A < 0.01f || light.Range < 1.0f) continue;
if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, viewRect)) continue; //if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, viewRect)) continue;
//clear alpha to 1 //clear alpha to 1
ClearAlphaToOne(graphics, spriteBatch); ClearAlphaToOne(graphics, spriteBatch);
@@ -128,7 +128,7 @@ namespace Barotrauma.Lights
//draw the light shape //draw the light shape
//where Alpha is 0, nothing will be written //where Alpha is 0, nothing will be written
spriteBatch.Begin(SpriteSortMode.Deferred, CustomBlendStates.MultiplyWithAlpha, null, null, null, null, cam.Transform); spriteBatch.Begin(SpriteSortMode.Deferred, CustomBlendStates.MultiplyWithAlpha, null, null, null, null, Matrix.CreateTranslation(new Vector3(Submarine.Loaded.Position.X, -Submarine.Loaded.Position.Y, 0.0f)) * cam.Transform);
light.Draw(spriteBatch); light.Draw(spriteBatch);
spriteBatch.End(); spriteBatch.End();
} }
+7 -4
View File
@@ -23,7 +23,6 @@ namespace Barotrauma
class Submarine : Entity class Submarine : Entity
{ {
public static string SavePath = "Data" + System.IO.Path.DirectorySeparatorChar + "SavedSubs"; public static string SavePath = "Data" + System.IO.Path.DirectorySeparatorChar + "SavedSubs";
public static List<Submarine> SavedSubmarines = new List<Submarine>(); public static List<Submarine> SavedSubmarines = new List<Submarine>();
@@ -99,7 +98,7 @@ namespace Barotrauma
public Vector2 Position public Vector2 Position
{ {
get { return (Level.Loaded == null) ? Vector2.Zero : -Level.Loaded.Position; } get { return subBody.Position; }
} }
public Vector2 Speed public Vector2 Speed
@@ -377,7 +376,9 @@ namespace Barotrauma
public void SetPosition(Vector2 position) public void SetPosition(Vector2 position)
{ {
if (!MathUtils.IsValid(position)) return; if (!MathUtils.IsValid(position)) return;
Level.Loaded.SetPosition(-position);
subBody.SetPosition(position);
//Level.Loaded.SetPosition(-position);
//prevPosition = position; //prevPosition = position;
} }
@@ -385,7 +386,9 @@ namespace Barotrauma
{ {
if (amount == Vector2.Zero || !MathUtils.IsValid(amount)) return; if (amount == Vector2.Zero || !MathUtils.IsValid(amount)) return;
Level.Loaded.Move(-amount); subBody.SetPosition(subBody.Position + amount);
//Level.Loaded.Move(-amount);
} }
public override bool FillNetworkData(Networking.NetworkEventType type, NetBuffer message, object data) public override bool FillNetworkData(Networking.NetworkEventType type, NetBuffer message, object data)
+42 -30
View File
@@ -71,6 +71,10 @@ namespace Barotrauma
} }
} }
public Vector2 Position
{
get { return ConvertUnits.ToDisplayUnits(body.Position); }
}
public Vector2 Center public Vector2 Center
{ {
@@ -79,7 +83,7 @@ namespace Barotrauma
public bool AtDamageDepth public bool AtDamageDepth
{ {
get { return sub.Position.Y < DamageDepth; } get { return Position.Y < DamageDepth; }
} }
public SubmarineBody(Submarine sub) public SubmarineBody(Submarine sub)
@@ -187,34 +191,35 @@ namespace Barotrauma
public void Update(float deltaTime) public void Update(float deltaTime)
{ {
if (body.Position!=Vector2.Zero) if (Position!=Vector2.Zero)
{ {
UpdateColliding(); //!!!!!!!!!!!!!!!!
//UpdateColliding();
} }
Vector2 translateAmount = speed * deltaTime; //Vector2 translateAmount = speed * deltaTime;
translateAmount += ConvertUnits.ToDisplayUnits(body.Position) * collisionRigidness; //translateAmount += ConvertUnits.ToDisplayUnits(Position) * collisionRigidness;
if (targetPosition != Vector2.Zero && targetPosition != sub.Position) //if (targetPosition != Vector2.Zero && targetPosition != Position)
{ //{
float dist = Vector2.Distance(targetPosition, sub.Position); // float dist = Vector2.Distance(targetPosition, Position);
if (dist>1000.0f) // if (dist>1000.0f)
{ // {
sub.SetPosition(targetPosition); // sub.SetPosition(targetPosition);
targetPosition = Vector2.Zero; // targetPosition = Vector2.Zero;
} // }
else if (dist>50.0f) // else if (dist>50.0f)
{ // {
translateAmount += (targetPosition - sub.Position) * 0.01f; // translateAmount += (targetPosition - Position) * 0.01f;
} // }
} //}
else //else
{ //{
targetPosition = Vector2.Zero; // targetPosition = Vector2.Zero;
} //}
sub.Translate(translateAmount); //sub.Translate(translateAmount);
//------------------------- //-------------------------
@@ -232,14 +237,13 @@ namespace Barotrauma
ApplyForce(totalForce); ApplyForce(totalForce);
UpdateDepthDamage(deltaTime); //UpdateDepthDamage(deltaTime);
//hullBodies[0].body.LinearVelocity = -hullBodies[0].body.Position; //hullBodies[0].body.LinearVelocity = -hullBodies[0].body.Position;
//hullBody.SetTransform(Vector2.Zero , 0.0f); //hullBody.SetTransform(Vector2.Zero , 0.0f);
body.SetTransform(Vector2.Zero, 0.0f);// .LinearVelocity = -body.Position / (float)Physics.step; //body.SetTransform(Vector2.Zero, 0.0f);// .LinearVelocity = -body.Position / (float)Physics.step;
body.LinearVelocity = Vector2.Zero; //body.LinearVelocity = Vector2.Zero;
} }
private Vector2 CalculateBuoyancy() private Vector2 CalculateBuoyancy()
@@ -264,14 +268,19 @@ namespace Barotrauma
public void ApplyForce(Vector2 force) public void ApplyForce(Vector2 force)
{ {
Speed += force / mass; body.ApplyForce(force/100.0f);
}
public void SetPosition(Vector2 position)
{
body.SetTransform(ConvertUnits.ToSimUnits(position), 0.0f);
} }
private void UpdateDepthDamage(float deltaTime) private void UpdateDepthDamage(float deltaTime)
{ {
if (sub.Position.Y > DamageDepth) return; if (Position.Y > DamageDepth) return;
float depth = DamageDepth - sub.Position.Y; float depth = DamageDepth - Position.Y;
depth = Math.Min(depth, 40000.0f); depth = Math.Min(depth, 40000.0f);
// float prevTimer = depthDamageTimer; // float prevTimer = depthDamageTimer;
@@ -311,6 +320,9 @@ namespace Barotrauma
private void UpdateColliding() private void UpdateColliding()
{ {
return;
if (body.Position.LengthSquared()<0.00001f) return; if (body.Position.LengthSquared()<0.00001f) return;
Vector2 normal = Vector2.Normalize(body.Position); Vector2 normal = Vector2.Normalize(body.Position);
+6 -6
View File
@@ -118,7 +118,7 @@ namespace Barotrauma
GameMain.World.Step((float)Physics.step); GameMain.World.Step((float)Physics.step);
Level.AfterWorldStep(); //Level.AfterWorldStep();
Physics.accumulator -= Physics.step; Physics.accumulator -= Physics.step;
} }
@@ -177,7 +177,7 @@ namespace Barotrauma
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap);
Vector2 backgroundPos = cam.Position; Vector2 backgroundPos = cam.Position;
if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position; //if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position;
backgroundPos.Y = -backgroundPos.Y; backgroundPos.Y = -backgroundPos.Y;
backgroundPos /= 20.0f; backgroundPos /= 20.0f;
@@ -210,7 +210,7 @@ namespace Barotrauma
BackgroundSpriteManager.Draw(spriteBatch); BackgroundSpriteManager.Draw(spriteBatch);
backgroundPos = new Vector2(cam.WorldView.X, cam.WorldView.Y) + dustOffset; backgroundPos = new Vector2(cam.WorldView.X, cam.WorldView.Y) + dustOffset;
if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position; //if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position;
Rectangle viewRect = cam.WorldView; Rectangle viewRect = cam.WorldView;
viewRect.Y = -viewRect.Y; viewRect.Y = -viewRect.Y;
@@ -229,7 +229,7 @@ namespace Barotrauma
spriteBatch.Begin(SpriteSortMode.BackToFront, spriteBatch.Begin(SpriteSortMode.BackToFront,
BlendState.AlphaBlend, BlendState.AlphaBlend,
null, null, null, null, null, null, null, null,
cam.Transform); Matrix.CreateTranslation(new Vector3(Submarine.Loaded.Position.X, -Submarine.Loaded.Position.Y, 0.0f))*cam.Transform);
Submarine.DrawBack(spriteBatch); Submarine.DrawBack(spriteBatch);
@@ -315,7 +315,7 @@ namespace Barotrauma
hull.Render(graphics, cam); hull.Render(graphics, cam);
} }
Hull.renderer.Render(graphics, cam, renderTargetAir, Cam.ShaderTransform); Hull.renderer.Render(graphics, cam, renderTargetAir,Cam.ShaderTransform);
if (GameMain.GameSession != null && GameMain.GameSession.Level != null) if (GameMain.GameSession != null && GameMain.GameSession.Level != null)
{ {
@@ -330,7 +330,7 @@ namespace Barotrauma
spriteBatch.Begin(SpriteSortMode.BackToFront, spriteBatch.Begin(SpriteSortMode.BackToFront,
BlendState.AlphaBlend, SamplerState.LinearWrap, BlendState.AlphaBlend, SamplerState.LinearWrap,
null, null, null, null, null, null,
cam.Transform); Matrix.CreateTranslation(new Vector3(Submarine.Loaded.Position.X, -Submarine.Loaded.Position.Y, 0.0f))*cam.Transform);
foreach (Character c in Character.CharacterList) c.DrawFront(spriteBatch); foreach (Character c in Character.CharacterList) c.DrawFront(spriteBatch);
Binary file not shown.