diff --git a/Subsurface/Barotrauma.csproj b/Subsurface/Barotrauma.csproj index 52b7a1885..0beadea18 100644 --- a/Subsurface/Barotrauma.csproj +++ b/Subsurface/Barotrauma.csproj @@ -939,6 +939,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Subsurface/Content/Items/Weapons/stunbaton.ogg b/Subsurface/Content/Items/Weapons/stunbaton.ogg new file mode 100644 index 000000000..0efb8d0d6 Binary files /dev/null and b/Subsurface/Content/Items/Weapons/stunbaton.ogg differ diff --git a/Subsurface/Properties/AssemblyInfo.cs b/Subsurface/Properties/AssemblyInfo.cs index 2040cb113..258624579 100644 --- a/Subsurface/Properties/AssemblyInfo.cs +++ b/Subsurface/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.2.6.0")] -[assembly: AssemblyFileVersion("0.2.6.0")] +[assembly: AssemblyVersion("0.2.6.2")] +[assembly: AssemblyFileVersion("0.2.6.2")] diff --git a/Subsurface/Source/Characters/Limb.cs b/Subsurface/Source/Characters/Limb.cs index c2e455649..9a8454f22 100644 --- a/Subsurface/Source/Characters/Limb.cs +++ b/Subsurface/Source/Characters/Limb.cs @@ -353,12 +353,12 @@ namespace Barotrauma GameMain.ParticleManager.CreateParticle("blood", Position, - particleVel * Rand.Range(100.0f, 300.0f)); + particleVel * Rand.Range(100.0f, 300.0f), 0.0f, character.AnimController.CurrentHull); } for (int i = 0; i < bloodAmount / 2; i++) { - GameMain.ParticleManager.CreateParticle("waterblood", Position, Vector2.Zero); + GameMain.ParticleManager.CreateParticle("waterblood", Position, Vector2.Zero, 0.0f, character.AnimController.CurrentHull); } damage += Math.Max(amount,bleedingAmount) / character.MaxHealth * 100.0f; diff --git a/Subsurface/Source/Characters/Ragdoll.cs b/Subsurface/Source/Characters/Ragdoll.cs index b135b5da1..0aa080fca 100644 --- a/Subsurface/Source/Characters/Ragdoll.cs +++ b/Subsurface/Source/Characters/Ragdoll.cs @@ -612,24 +612,19 @@ namespace Barotrauma } } //the limb has gone through the surface of the water - if (Math.Abs(limb.LinearVelocity.Y) > 3.0 && inWater != prevInWater) + if (Math.Abs(limb.LinearVelocity.Y) > 5.0f && inWater != prevInWater) { //create a splash particle GameMain.ParticleManager.CreateParticle("watersplash", new Vector2(limb.Position.X, limbHull.Surface), new Vector2(0.0f, Math.Abs(-limb.LinearVelocity.Y * 10.0f)), - 0.0f); - - //if (splash != null) splash.yLimits = ConvertUnits.ToSimUnits( - // new Vector2( - // limbHull.Rect.Y, - // limbHull.Rect.Y - limbHull.Rect.Height)); + 0.0f, limbHull); GameMain.ParticleManager.CreateParticle("bubbles", new Vector2(limb.Position.X, limbHull.Surface), limb.LinearVelocity*0.001f, - 0.0f); + 0.0f, limbHull); diff --git a/Subsurface/Source/Items/Components/Holdable/Propulsion.cs b/Subsurface/Source/Items/Components/Holdable/Propulsion.cs index 308db79e7..525f9adcc 100644 --- a/Subsurface/Source/Items/Components/Holdable/Propulsion.cs +++ b/Subsurface/Source/Items/Components/Holdable/Propulsion.cs @@ -89,7 +89,7 @@ namespace Barotrauma.Items.Components if (!string.IsNullOrWhiteSpace(particles)) { GameMain.ParticleManager.CreateParticle(particles, item.Position, - item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi), 0.0f); + item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi), 0.0f, item.CurrentHull); } return true; diff --git a/Subsurface/Source/Items/Components/Machines/Engine.cs b/Subsurface/Source/Items/Components/Machines/Engine.cs index 031a53101..d86d955fc 100644 --- a/Subsurface/Source/Items/Components/Machines/Engine.cs +++ b/Subsurface/Source/Items/Components/Machines/Engine.cs @@ -75,7 +75,8 @@ namespace Barotrauma.Items.Components for (int i = 0; i < 5; i++) { GameMain.ParticleManager.CreateParticle("bubbles", item.Position, - -currForce/5.0f + new Vector2(Rand.Range(-100.0f, 100.0f), Rand.Range(-50f, 50f))); + -currForce / 5.0f + new Vector2(Rand.Range(-100.0f, 100.0f), Rand.Range(-50f, 50f)), + 0.0f, item.CurrentHull); } } diff --git a/Subsurface/Source/Items/Components/Machines/Reactor.cs b/Subsurface/Source/Items/Components/Machines/Reactor.cs index e26b6e5f2..b708d2e21 100644 --- a/Subsurface/Source/Items/Components/Machines/Reactor.cs +++ b/Subsurface/Source/Items/Components/Machines/Reactor.cs @@ -164,7 +164,7 @@ namespace Barotrauma.Items.Components for (int i = 0; i < 10; i++) { var particle = GameMain.ParticleManager.CreateParticle("spark", item.Position, - baseVel + Rand.Vector(100.0f), 0.0f); + baseVel + Rand.Vector(100.0f), 0.0f, item.CurrentHull); if (particle != null) particle.Size *= Rand.Range(0.5f, 1.0f); } diff --git a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs index 548f8a29e..62c650871 100644 --- a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs @@ -68,7 +68,7 @@ namespace Barotrauma.Items.Components for (int i = 0; i < 10; i++) { var particle = GameMain.ParticleManager.CreateParticle("spark", pt.item.Position, - baseVel + Rand.Vector(100.0f), 0.0f); + baseVel + Rand.Vector(100.0f), 0.0f, item.CurrentHull); if (particle != null) particle.Size *= Rand.Range(0.5f, 1.0f); } diff --git a/Subsurface/Source/Map/Explosion.cs b/Subsurface/Source/Map/Explosion.cs index 3c3e77a60..5c88f7e01 100644 --- a/Subsurface/Source/Map/Explosion.cs +++ b/Subsurface/Source/Map/Explosion.cs @@ -43,25 +43,26 @@ namespace Barotrauma public void Explode(Vector2 simPosition) { Vector2 displayPosition = ConvertUnits.ToDisplayUnits(simPosition); + + Hull hull = Hull.FindHull(displayPosition); if (shockwave) { GameMain.ParticleManager.CreateParticle("shockwave", displayPosition, - Vector2.Zero, 0.0f); + Vector2.Zero, 0.0f, hull); } - for (int i = 0; i < attack.Range * 10; i++) { if (sparks) { GameMain.ParticleManager.CreateParticle("spark", displayPosition, - Rand.Vector(Rand.Range(500.0f, 800.0f)), 0.0f); + Rand.Vector(Rand.Range(500.0f, 800.0f)), 0.0f, hull); } if (flames) { GameMain.ParticleManager.CreateParticle("explosionfire", displayPosition + Rand.Vector(50f), - Rand.Vector(Rand.Range(50f, 100.0f)), 0.0f); + Rand.Vector(Rand.Range(50f, 100.0f)), 0.0f, hull); } } @@ -80,8 +81,6 @@ namespace Barotrauma if (force == 0.0f && attack.Stun == 0.0f && attack.GetDamage(1.0f) == 0.0f) return; - //Hull hull = Hull.FindHull(displayPosition); - foreach (Character c in Character.CharacterList) { float dist = Vector2.Distance(c.SimPosition, simPosition); diff --git a/Subsurface/Source/Map/Gap.cs b/Subsurface/Source/Map/Gap.cs index 5f6eeb680..4fa897c26 100644 --- a/Subsurface/Source/Map/Gap.cs +++ b/Subsurface/Source/Map/Gap.cs @@ -254,7 +254,7 @@ namespace Barotrauma UpdateRoomToRoom(deltaTime); } - if (FlowForce.Length() > 150.0f && flowTargetHull != null && flowTargetHull.Volume < flowTargetHull.FullVolume) + if (LerpedFlowForce.Length() > 150.0f && flowTargetHull != null && flowTargetHull.Volume < flowTargetHull.FullVolume) { //UpdateFlowForce(); diff --git a/Subsurface/Source/Map/Hull.cs b/Subsurface/Source/Map/Hull.cs index 8d2a10cf4..5573385fa 100644 --- a/Subsurface/Source/Map/Hull.cs +++ b/Subsurface/Source/Map/Hull.cs @@ -271,7 +271,7 @@ namespace Barotrauma { GameMain.ParticleManager.CreateParticle("mist", new Vector2(rect.X + WaveWidth * i,surface + waveY[i]), - new Vector2(0.0f, -50.0f)); + new Vector2(0.0f, -50.0f), 0.0f, this); } waveY[i] = waveY[i] + waveVel[i]; diff --git a/Subsurface/Source/Particles/Particle.cs b/Subsurface/Source/Particles/Particle.cs index cfb65921d..9cacf2284 100644 --- a/Subsurface/Source/Particles/Particle.cs +++ b/Subsurface/Source/Particles/Particle.cs @@ -73,6 +73,9 @@ namespace Barotrauma.Particles spriteIndex = Rand.Int(prefab.Sprites.Count); + currentHull = Hull.FindHull(position, hullGuess); + if (currentHull == null) position = Submarine.Loaded == null ? position : position + Submarine.Loaded.Position; + this.position = position; prevPosition = position; @@ -102,8 +105,6 @@ namespace Barotrauma.Particles if (prefab.DeleteOnCollision || prefab.CollidesWithWalls) { - currentHull = Hull.FindHull(position, hullGuess); - hullGaps = currentHull==null ? new List() : currentHull.FindGaps(); //hullLimits = new List(); //hullLimits = FindLimits(position); @@ -253,7 +254,6 @@ namespace Barotrauma.Particles public void Draw(SpriteBatch spriteBatch) { drawPosition = Physics.Interpolate(prevPosition, position); - drawPosition.Y = -drawPosition.Y; float drawRotation = Physics.Interpolate(prevRotation, rotation); //drawPosition = ConvertUnits.ToDisplayUnits(drawPosition); @@ -263,10 +263,14 @@ namespace Barotrauma.Particles if (prefab.GrowTime>0.0f && totalLifeTime-lifeTime < prefab.GrowTime) { drawSize *= ((totalLifeTime - lifeTime) / prefab.GrowTime); - } - prefab.Sprites[spriteIndex].Draw(spriteBatch, drawPosition, color * alpha, + Vector2 screenSpacePos = currentHull == null && Submarine.Loaded != null ? drawPosition - Submarine.Loaded.Position : drawPosition; + screenSpacePos.Y = -screenSpacePos.Y; + + prefab.Sprites[spriteIndex].Draw(spriteBatch, + screenSpacePos, + color * alpha, prefab.Sprites[spriteIndex].origin, drawRotation, drawSize, SpriteEffects.None, prefab.Sprites[spriteIndex].Depth); diff --git a/Subsurface/Source/Particles/ParticleEmitter.cs b/Subsurface/Source/Particles/ParticleEmitter.cs index 99b97ab0b..0b9509020 100644 --- a/Subsurface/Source/Particles/ParticleEmitter.cs +++ b/Subsurface/Source/Particles/ParticleEmitter.cs @@ -51,14 +51,14 @@ namespace Barotrauma.Particles ParticleAmount = ToolBox.GetAttributeInt(element, "particleamount", 1); } - public void Emit(Vector2 position) + public void Emit(Vector2 position, Hull hullGuess = null) { for (int i = 0; i