- teleporting from sub to another works now

- repairtool fix
- submarines collide with each other
- every submarine is updated (so MainSub isn't the only one that can move)
- submarinebody vertex generation fix
This commit is contained in:
Regalis
2016-06-11 17:55:47 +03:00
parent ee2d817e6b
commit 495a0f4124
5 changed files with 30 additions and 10 deletions
@@ -76,10 +76,13 @@ namespace Barotrauma
currentTarget = target; currentTarget = target;
Vector2 pos = host.SimPosition; Vector2 pos = host.SimPosition;
if (character!=null && character.Submarine==null) if (character != null && character.Submarine == null)
{ {
//todo: take multiple subs into account var targetHull = Hull.FindHull(FarseerPhysics.ConvertUnits.ToDisplayUnits(target), null, false);
pos -= Submarine.MainSub.SimPosition; if (targetHull!=null && targetHull.Submarine != null)
{
pos -= targetHull.SimPosition;
}
} }
currentPath = pathFinder.FindPath(pos, target); currentPath = pathFinder.FindPath(pos, target);
@@ -572,6 +572,7 @@ namespace Barotrauma
if (setSubmarine) if (setSubmarine)
{ {
//in -> out
if (newHull == null && currentHull.Submarine != null) if (newHull == null && currentHull.Submarine != null)
{ {
for (int i = -1; i < 2; i += 2) for (int i = -1; i < 2; i += 2)
@@ -584,12 +585,18 @@ namespace Barotrauma
if (Gap.FindAdjacent(currentHull.ConnectedGaps, findPos, 150.0f) != null) return; if (Gap.FindAdjacent(currentHull.ConnectedGaps, findPos, 150.0f) != null) return;
Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position), currentHull.Submarine.Velocity, true); Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position), currentHull.Submarine.Velocity, true);
} }
//out -> in
else if (currentHull == null && newHull.Submarine != null) else if (currentHull == null && newHull.Submarine != null)
{ {
Teleport(-ConvertUnits.ToSimUnits(newHull.Submarine.Position), -newHull.Submarine.Velocity, false); Teleport(-ConvertUnits.ToSimUnits(newHull.Submarine.Position), -newHull.Submarine.Velocity, false);
} }
//from one sub to another
else if (newHull != null && currentHull != null && newHull.Submarine != currentHull.Submarine)
{
Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position - newHull.Submarine.Position),
Vector2.Zero, false);
}
} }
CurrentHull = newHull; CurrentHull = newHull;
@@ -144,7 +144,7 @@ namespace Barotrauma.Items.Components
} }
else else
{ {
Repair(rayStart, rayEnd, deltaTime, character, degreeOfSuccess, ignoredBodies); Repair(rayStart - character.Submarine.SimPosition, rayEnd - character.Submarine.SimPosition, deltaTime, character, degreeOfSuccess, ignoredBodies);
} }
GameMain.ParticleManager.CreateParticle(particles, item.WorldPosition + TransformedBarrelPos, GameMain.ParticleManager.CreateParticle(particles, item.WorldPosition + TransformedBarrelPos,
+12 -2
View File
@@ -153,7 +153,13 @@ namespace Barotrauma
body.BodyType = BodyType.Dynamic; body.BodyType = BodyType.Dynamic;
body.CollisionCategories = Physics.CollisionWall; body.CollisionCategories = Physics.CollisionWall;
body.CollidesWith = Physics.CollisionItem | Physics.CollisionLevel | Physics.CollisionCharacter | Physics.CollisionProjectile; body.CollidesWith =
Physics.CollisionItem |
Physics.CollisionLevel |
Physics.CollisionCharacter |
Physics.CollisionProjectile |
Physics.CollisionWall;
body.Restitution = Restitution; body.Restitution = Restitution;
body.Friction = Friction; body.Friction = Friction;
body.FixedRotation = true; body.FixedRotation = true;
@@ -179,6 +185,8 @@ namespace Barotrauma
foreach (Structure wall in Structure.WallList) foreach (Structure wall in Structure.WallList)
{ {
if (wall.Submarine != submarine) continue;
for (int x = -1; x <= 1; x += 2) for (int x = -1; x <= 1; x += 2)
{ {
for (int y = -1; y <= 1; y += 2) for (int y = -1; y <= 1; y += 2)
@@ -233,7 +241,7 @@ namespace Barotrauma
ForceTranslate(moveAmount); ForceTranslate(moveAmount);
GameMain.GameScreen.Cam.UpdateTransform(false); if (submarine == Submarine.MainSub) GameMain.GameScreen.Cam.UpdateTransform(false);
submarine.SetPrevTransform(submarine.Position); submarine.SetPrevTransform(submarine.Position);
submarine.UpdateTransform(); submarine.UpdateTransform();
@@ -336,6 +344,8 @@ namespace Barotrauma
float volume = 0.0f; float volume = 0.0f;
foreach (Hull hull in Hull.hullList) foreach (Hull hull in Hull.hullList)
{ {
if (hull.Submarine != submarine) continue;
waterVolume += hull.Volume; waterVolume += hull.Volume;
volume += hull.FullVolume; volume += hull.FullVolume;
} }
+2 -2
View File
@@ -136,9 +136,9 @@ namespace Barotrauma
Ragdoll.UpdateAll(cam, (float)Physics.step); Ragdoll.UpdateAll(cam, (float)Physics.step);
if (GameMain.GameSession != null && GameMain.GameSession.Level != null && GameMain.GameSession.Submarine!=null) foreach (Submarine sub in Submarine.Loaded)
{ {
GameMain.GameSession.Submarine.Update((float)Physics.step); sub.Update((float)Physics.step);
} }
GameMain.World.Step((float)Physics.step); GameMain.World.Step((float)Physics.step);