Level wall generation bugfixes, moved level background drawing to LevelRenderer, more coordinate system bugfixes, better looking progress bars,
This commit is contained in:
@@ -10,7 +10,6 @@
|
|||||||
selectedcolor="1.0, 0.82, 0.05, 1.0"
|
selectedcolor="1.0, 0.82, 0.05, 1.0"
|
||||||
|
|
||||||
outlinecolor="0.5, 0.57, 0.6, 1.0">
|
outlinecolor="0.5, 0.57, 0.6, 1.0">
|
||||||
|
|
||||||
</GUIFrame>
|
</GUIFrame>
|
||||||
|
|
||||||
<GUIButton
|
<GUIButton
|
||||||
@@ -80,4 +79,14 @@
|
|||||||
<Sprite texture="Content/UI/uiBackground.png" size="0.0, 1.0" sourcerect ="0.0, 0.0, 0.0, 90.0"/>
|
<Sprite texture="Content/UI/uiBackground.png" size="0.0, 1.0" sourcerect ="0.0, 0.0, 0.0, 90.0"/>
|
||||||
</GUIMessageBox>
|
</GUIMessageBox>
|
||||||
|
|
||||||
|
<GUIProgressBar
|
||||||
|
padding="5.0, 5.0, 5.0, 5.0"
|
||||||
|
color="0.0, 0.0, 0.0, 0.5"
|
||||||
|
|
||||||
|
hovercolor="0.0, 0.0, 0.0, 0.5"
|
||||||
|
selectedcolor="0.0, 0.0, 0.0, 0.5"
|
||||||
|
|
||||||
|
outlinecolor="0.5, 0.57, 0.6, 1.0">
|
||||||
|
</GUIProgressBar>
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
@@ -174,7 +174,7 @@ namespace Barotrauma
|
|||||||
if (PlayerInput.KeyDown(Keys.S)) moveCam.Y -= moveSpeed;
|
if (PlayerInput.KeyDown(Keys.S)) moveCam.Y -= moveSpeed;
|
||||||
if (PlayerInput.KeyDown(Keys.W)) moveCam.Y += moveSpeed;
|
if (PlayerInput.KeyDown(Keys.W)) moveCam.Y += moveSpeed;
|
||||||
|
|
||||||
if (Submarine.Loaded!=null)
|
if (Submarine.Loaded!=null && Screen.Selected == GameMain.GameScreen)
|
||||||
{
|
{
|
||||||
moveCam += FarseerPhysics.ConvertUnits.ToDisplayUnits(Submarine.Loaded.Velocity*deltaTime);
|
moveCam += FarseerPhysics.ConvertUnits.ToDisplayUnits(Submarine.Loaded.Velocity*deltaTime);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -733,7 +733,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
Limb head = AnimController.GetLimb(LimbType.Head);
|
Limb head = AnimController.GetLimb(LimbType.Head);
|
||||||
|
|
||||||
Lights.LightManager.ViewPos = DrawPosition;
|
//Lights.LightManager.ViewPos = WorldPosition;
|
||||||
|
|
||||||
if (!DisableControls)
|
if (!DisableControls)
|
||||||
{
|
{
|
||||||
@@ -1327,10 +1327,14 @@ namespace Barotrauma
|
|||||||
message.Write(AnimController.Dir > 0.0f);
|
message.Write(AnimController.Dir > 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((AnimController.RefLimb.SimPosition - Submarine.Loaded.SimPosition).Length() > NetConfig.CharacterIgnoreDistance) return true;
|
message.Write(Submarine != null);
|
||||||
|
|
||||||
message.Write(AnimController.RefLimb.SimPosition.X);
|
//Vector2 position = Submarine == null ? SimPosition : SimPosition - Submarine.SimPosition;
|
||||||
message.Write(AnimController.RefLimb.SimPosition.Y);
|
|
||||||
|
//if ((AnimController.RefLimb.SimPosition - Submarine.Loaded.SimPosition).Length() > NetConfig.CharacterIgnoreDistance) return true;
|
||||||
|
|
||||||
|
message.Write(SimPosition.X);
|
||||||
|
message.Write(SimPosition.Y);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
@@ -1495,16 +1499,20 @@ namespace Barotrauma
|
|||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try
|
|
||||||
{
|
|
||||||
pos.X = message.ReadFloat();
|
|
||||||
pos.Y = message.ReadFloat();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch
|
bool inSub = message.ReadBoolean();
|
||||||
|
|
||||||
|
pos.X = message.ReadFloat();
|
||||||
|
pos.Y = message.ReadFloat();
|
||||||
|
|
||||||
|
if (inSub)
|
||||||
{
|
{
|
||||||
//failed to read position, Character may be further than NetConfig.CharacterIgnoreDistance
|
Hull newHull = Hull.FindHull(ConvertUnits.ToDisplayUnits(pos), AnimController.CurrentHull, false);
|
||||||
pos = SimPosition;
|
if (newHull != null)
|
||||||
|
{
|
||||||
|
AnimController.CurrentHull = newHull;
|
||||||
|
Submarine = newHull.Submarine;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (secondaryKeyState)
|
if (secondaryKeyState)
|
||||||
@@ -1517,7 +1525,8 @@ namespace Barotrauma
|
|||||||
cursorPosition = Position + new Vector2(1000.0f, 0.0f) * dir;
|
cursorPosition = Position + new Vector2(1000.0f, 0.0f) * dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
AnimController.RefLimb.body.TargetPosition = AnimController.EstimateCurrPosition(pos, (float)(NetTime.Now + message.SenderConnection.RemoteTimeOffset) - sendingTime);
|
AnimController.RefLimb.body.TargetPosition =
|
||||||
|
AnimController.EstimateCurrPosition(pos, (float)(NetTime.Now + message.SenderConnection.RemoteTimeOffset) - sendingTime);
|
||||||
|
|
||||||
LastNetworkUpdate = sendingTime;
|
LastNetworkUpdate = sendingTime;
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (character.ClosestCharacter != null && (character.ClosestCharacter.IsDead || character.ClosestCharacter.Stun > 0.0f))
|
if (character.ClosestCharacter != null && (character.ClosestCharacter.IsDead || character.ClosestCharacter.Stun > 0.0f))
|
||||||
{
|
{
|
||||||
Vector2 startPos = character.Position + (character.ClosestCharacter.WorldPosition - character.WorldPosition) * 0.7f;
|
Vector2 startPos = character.DrawPosition + (character.ClosestCharacter.DrawPosition - character.DrawPosition) * 0.7f;
|
||||||
startPos = cam.WorldToScreen(startPos);
|
startPos = cam.WorldToScreen(startPos);
|
||||||
|
|
||||||
Vector2 textPos = startPos;
|
Vector2 textPos = startPos;
|
||||||
@@ -67,7 +67,7 @@ namespace Barotrauma
|
|||||||
else if (character.SelectedCharacter == null && character.ClosestItem != null && character.SelectedConstruction == null)
|
else if (character.SelectedCharacter == null && character.ClosestItem != null && character.SelectedConstruction == null)
|
||||||
{
|
{
|
||||||
|
|
||||||
Vector2 startPos = character.WorldPosition + (character.ClosestItem.WorldPosition - character.WorldPosition) * 0.7f;
|
Vector2 startPos = character.DrawPosition + (character.ClosestItem.DrawPosition - character.DrawPosition) * 0.7f;
|
||||||
startPos = cam.WorldToScreen(startPos);
|
startPos = cam.WorldToScreen(startPos);
|
||||||
|
|
||||||
Vector2 textPos = startPos;
|
Vector2 textPos = startPos;
|
||||||
@@ -96,10 +96,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
int width = 100, height = 20;
|
int width = 100, height = 20;
|
||||||
|
|
||||||
drowningBar = new GUIProgressBar(new Rectangle(30, GameMain.GraphicsHeight - 200, width, height), Color.Blue, 1.0f);
|
drowningBar = new GUIProgressBar(new Rectangle(30, GameMain.GraphicsHeight - 200, width, height), Color.Blue, GUI.Style, 1.0f, Alignment.TopLeft);
|
||||||
new GUIImage(new Rectangle(-27, -7, 20, 20), new Rectangle(17, 0, 20, 24), statusIcons, Alignment.TopLeft, drowningBar);
|
new GUIImage(new Rectangle(-27, -7, 20, 20), new Rectangle(17, 0, 20, 24), statusIcons, Alignment.TopLeft, drowningBar);
|
||||||
|
|
||||||
healthBar = new GUIProgressBar(new Rectangle(30, GameMain.GraphicsHeight - 230, width, height), Color.Red, 1.0f);
|
healthBar = new GUIProgressBar(new Rectangle(30, GameMain.GraphicsHeight - 230, width, height), Color.Red, GUI.Style, 1.0f, Alignment.TopLeft);
|
||||||
new GUIImage(new Rectangle(-26, -7, 20, 20), new Rectangle(0, 0, 13, 24), statusIcons, Alignment.TopLeft, healthBar);
|
new GUIImage(new Rectangle(-26, -7, 20, 20), new Rectangle(0, 0, 13, 24), statusIcons, Alignment.TopLeft, healthBar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -323,7 +323,7 @@ namespace Barotrauma
|
|||||||
break;
|
break;
|
||||||
case "fixhull":
|
case "fixhull":
|
||||||
case "fixwalls":
|
case "fixwalls":
|
||||||
foreach (Structure w in Structure.wallList)
|
foreach (Structure w in Structure.WallList)
|
||||||
{
|
{
|
||||||
for (int i = 0 ; i < w.SectionCount; i++)
|
for (int i = 0 ; i < w.SectionCount; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ 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);
|
Vector2 position = (randomWayPoint == null) ? Vector2.Zero : randomWayPoint.Position;
|
||||||
|
|
||||||
//!!!!!!!!!!!!!!!!!!
|
//!!!!!!!!!!!!!!!!!!
|
||||||
if (spawnDeep)
|
if (spawnDeep)
|
||||||
|
|||||||
@@ -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));
|
monster = Character.Create(monsterFile, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(float deltaTime)
|
public override void Update(float deltaTime)
|
||||||
|
|||||||
@@ -37,7 +37,13 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
public GUIProgressBar(Rectangle rect, Color color, float barSize, Alignment alignment, GUIComponent parent = null)
|
public GUIProgressBar(Rectangle rect, Color color, float barSize, Alignment alignment, GUIComponent parent = null)
|
||||||
: base(null)
|
: this(rect,color,null, barSize,alignment, parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public GUIProgressBar(Rectangle rect, Color color, GUIStyle style, float barSize, Alignment alignment, GUIComponent parent = null)
|
||||||
|
: base(style)
|
||||||
{
|
{
|
||||||
this.rect = rect;
|
this.rect = rect;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
@@ -50,19 +56,36 @@ namespace Barotrauma
|
|||||||
if (parent != null)
|
if (parent != null)
|
||||||
parent.AddChild(this);
|
parent.AddChild(this);
|
||||||
|
|
||||||
frame = new GUIFrame(new Rectangle(0,0,0,0), Color.White, null, this);
|
frame = new GUIFrame(new Rectangle(0, 0, 0, 0), Color.Black, null, this);
|
||||||
|
|
||||||
this.barSize = barSize;
|
this.barSize = barSize;
|
||||||
UpdateRect();
|
UpdateRect();
|
||||||
|
|
||||||
|
if (style != null) style.Apply(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ApplyStyle(GUIComponentStyle style)
|
||||||
|
{
|
||||||
|
if (frame == null) return;
|
||||||
|
|
||||||
|
frame.Color = style.Color;
|
||||||
|
frame.HoverColor = style.HoverColor;
|
||||||
|
frame.SelectedColor = style.SelectedColor;
|
||||||
|
|
||||||
|
Padding = style.Padding;
|
||||||
|
|
||||||
|
frame.OutlineColor = style.OutlineColor;
|
||||||
|
|
||||||
|
this.style = style;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateRect()
|
private void UpdateRect()
|
||||||
{
|
{
|
||||||
rect = new Rectangle(
|
rect = new Rectangle(
|
||||||
frame.Rect.X + margin,
|
(int)(frame.Rect.X + padding.X),
|
||||||
frame.Rect.Y + margin,
|
(int)(frame.Rect.Y + padding.Y),
|
||||||
isHorizontal ? (int)((frame.Rect.Width - margin * 2) * barSize) : (frame.Rect.Width - margin * 2),
|
isHorizontal ? (int)((frame.Rect.Width - padding.X - padding.Z) * barSize) : (frame.Rect.Width - margin * 2),
|
||||||
isHorizontal ? (frame.Rect.Height - margin * 2) : (int)((frame.Rect.Height - margin * 2) * barSize));
|
isHorizontal ? (int)(frame.Rect.Height - padding.Y - padding.W) : (int)((frame.Rect.Height - margin * 2) * barSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Draw(SpriteBatch spriteBatch)
|
public override void Draw(SpriteBatch spriteBatch)
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ namespace Barotrauma
|
|||||||
infoBox = CreateInfoFrame("Uh-oh... Something enormous just appeared on the radar.");
|
infoBox = CreateInfoFrame("Uh-oh... Something enormous just appeared on the radar.");
|
||||||
|
|
||||||
List<Structure> windows = new List<Structure>();
|
List<Structure> windows = new List<Structure>();
|
||||||
foreach (Structure s in Structure.wallList)
|
foreach (Structure s in Structure.WallList)
|
||||||
{
|
{
|
||||||
if (s.CastShadow || !s.HasBody) continue;
|
if (s.CastShadow || !s.HasBody) continue;
|
||||||
|
|
||||||
|
|||||||
@@ -353,7 +353,7 @@ namespace Barotrauma.Items.Components
|
|||||||
if (connection.Name=="toggle")
|
if (connection.Name=="toggle")
|
||||||
{
|
{
|
||||||
isOpen = !isOpen;
|
isOpen = !isOpen;
|
||||||
PlaySound(ActionType.OnUse, item.Position);
|
PlaySound(ActionType.OnUse, item.WorldPosition);
|
||||||
}
|
}
|
||||||
else if (connection.Name == "set_state")
|
else if (connection.Name == "set_state")
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(particles))
|
if (!string.IsNullOrWhiteSpace(particles))
|
||||||
{
|
{
|
||||||
GameMain.ParticleManager.CreateParticle(particles, item.Position,
|
GameMain.ParticleManager.CreateParticle(particles, item.WorldPosition,
|
||||||
item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi), 0.0f, item.CurrentHull);
|
item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi), 0.0f, item.CurrentHull);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,9 +100,11 @@ namespace Barotrauma.Items.Components
|
|||||||
base.Update(deltaTime, cam);
|
base.Update(deltaTime, cam);
|
||||||
if (item.CurrentHull != null)
|
if (item.CurrentHull != null)
|
||||||
{
|
{
|
||||||
//light.Submarine = item.CurrentHull.Submarine;
|
light.Submarine = item.CurrentHull.Submarine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (item.container != null)
|
if (item.container != null)
|
||||||
{
|
{
|
||||||
light.Color = Color.Transparent;
|
light.Color = Color.Transparent;
|
||||||
|
|||||||
@@ -479,21 +479,21 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
//returns the water block which contains the point (or null if it isn't inside any)
|
//returns the water block which contains the point (or null if it isn't inside any)
|
||||||
public static Hull FindHull(Vector2 worldPosition, Hull guess = null)
|
public static Hull FindHull(Vector2 position, Hull guess = null, bool useWorldCoordinates = true)
|
||||||
{
|
{
|
||||||
return FindHull(worldPosition, hullList, guess);
|
return FindHull(position, hullList, guess, useWorldCoordinates);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Hull FindHull(Vector2 worldPosition, List<Hull> hulls, Hull guess = null)
|
public static Hull FindHull(Vector2 position, List<Hull> hulls, Hull guess = null, bool useWorldCoordinates = true)
|
||||||
{
|
{
|
||||||
if (guess != null && hulls.Contains(guess))
|
if (guess != null && hulls.Contains(guess))
|
||||||
{
|
{
|
||||||
if (Submarine.RectContains(guess.WorldRect, worldPosition)) return guess;
|
if (Submarine.RectContains(useWorldCoordinates ? guess.WorldRect : guess.rect, position)) return guess;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Hull hull in hulls)
|
foreach (Hull hull in hulls)
|
||||||
{
|
{
|
||||||
if (Submarine.RectContains(hull.WorldRect, worldPosition)) return hull;
|
if (Submarine.RectContains(useWorldCoordinates ? hull.WorldRect : hull.rect, position)) return hull;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ namespace Barotrauma
|
|||||||
//List<Body> bodies;
|
//List<Body> bodies;
|
||||||
private List<VoronoiCell> cells;
|
private List<VoronoiCell> cells;
|
||||||
|
|
||||||
private VertexPositionTexture[] vertices;
|
|
||||||
//private VertexBuffer vertexBuffer;
|
//private VertexBuffer vertexBuffer;
|
||||||
|
|
||||||
private Vector2 startPosition, endPosition;
|
private Vector2 startPosition, endPosition;
|
||||||
@@ -314,7 +313,9 @@ namespace Barotrauma
|
|||||||
startPosition.Y = borders.Height;
|
startPosition.Y = borders.Height;
|
||||||
endPosition.Y = borders.Height;
|
endPosition.Y = borders.Height;
|
||||||
|
|
||||||
vertices = GeneratePolygons(cells, pathCells);
|
renderer.BodyVertices = GeneratePolygons(cells, pathCells);
|
||||||
|
renderer.WallVertices = GenerateWallShapes(cells);
|
||||||
|
|
||||||
|
|
||||||
wrappingWalls = new WrappingWall[2, 2];
|
wrappingWalls = new WrappingWall[2, 2];
|
||||||
|
|
||||||
@@ -325,7 +326,8 @@ namespace Barotrauma
|
|||||||
wrappingWalls[side, i] = new WrappingWall(pathCells, cells, borders.Height * 0.5f,
|
wrappingWalls[side, i] = new WrappingWall(pathCells, cells, borders.Height * 0.5f,
|
||||||
(side == 0 ? -1 : 1) * (i == 0 ? 1 : 2));
|
(side == 0 ? -1 : 1) * (i == 0 ? 1 : 2));
|
||||||
|
|
||||||
wrappingWalls[side, i].Vertices = GeneratePolygons(wrappingWalls[side, i].Cells, new List<VoronoiCell>(), false);
|
wrappingWalls[side, i].BodyVertices = GeneratePolygons(wrappingWalls[side, i].Cells, new List<VoronoiCell>(), false);
|
||||||
|
wrappingWalls[side, i].WallVertices = GenerateWallShapes(wrappingWalls[side, i].Cells);
|
||||||
//wrappingWalls[side, i].Cells[0].edges[1].isSolid = false;
|
//wrappingWalls[side, i].Cells[0].edges[1].isSolid = false;
|
||||||
//wrappingWalls[side, i].Cells[0].edges[3].isSolid = false;
|
//wrappingWalls[side, i].Cells[0].edges[3].isSolid = false;
|
||||||
|
|
||||||
@@ -622,9 +624,9 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private VertexPositionTexture[] GeneratePolygons(List<VoronoiCell> cells, List<VoronoiCell> emptyCells, bool setSolid=true)
|
private VertexPositionColor[] GeneratePolygons(List<VoronoiCell> cells, List<VoronoiCell> emptyCells, bool setSolid=true)
|
||||||
{
|
{
|
||||||
List<VertexPositionTexture> verticeList = new List<VertexPositionTexture>();
|
List<VertexPositionColor> verticeList = new List<VertexPositionColor>();
|
||||||
//bodies = new List<Body>();
|
//bodies = new List<Body>();
|
||||||
|
|
||||||
List<Vector2> tempVertices = new List<Vector2>();
|
List<Vector2> tempVertices = new List<Vector2>();
|
||||||
@@ -657,14 +659,14 @@ namespace Barotrauma
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//var triangles = MathUtils.TriangulateConvexHull(tempVertices, cell.Center);
|
var triangles = MathUtils.TriangulateConvexHull(tempVertices, cell.Center);
|
||||||
//for (int i = 0; i < triangles.Count; i++)
|
for (int i = 0; i < triangles.Count; i++)
|
||||||
//{
|
{
|
||||||
// foreach (Vector2 vertex in triangles[i])
|
foreach (Vector2 vertex in triangles[i])
|
||||||
// {
|
{
|
||||||
// verticeList.Add(new VertexPositionTexture(new Vector3(vertex, 0.0f), vertex/1000.0f));
|
verticeList.Add(new VertexPositionColor(new Vector3(vertex, 0.0f), Color.Black));
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
|
|
||||||
if (bodyPoints.Count < 2) continue;
|
if (bodyPoints.Count < 2) continue;
|
||||||
|
|
||||||
@@ -684,7 +686,7 @@ namespace Barotrauma
|
|||||||
bodyPoints[i] = ConvertUnits.ToSimUnits(bodyPoints[i]);
|
bodyPoints[i] = ConvertUnits.ToSimUnits(bodyPoints[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var triangles = MathUtils.TriangulateConvexHull(bodyPoints, cell.Center);
|
triangles = MathUtils.TriangulateConvexHull(bodyPoints, cell.Center);
|
||||||
|
|
||||||
Body edgeBody = new Body(GameMain.World);
|
Body edgeBody = new Body(GameMain.World);
|
||||||
|
|
||||||
@@ -706,15 +708,12 @@ namespace Barotrauma
|
|||||||
bodies.Add(edgeBody);
|
bodies.Add(edgeBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
verticeList = GenerateWallShapes(cells);
|
|
||||||
|
|
||||||
return verticeList.ToArray();
|
return verticeList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<VertexPositionTexture> GenerateWallShapes(List<VoronoiCell> cells)
|
private VertexPositionTexture[] GenerateWallShapes(List<VoronoiCell> cells)
|
||||||
{
|
{
|
||||||
float wallThickness = 500.0f;
|
float inwardThickness = 500.0f, outWardThickness = 30.0f;
|
||||||
|
|
||||||
List<VertexPositionTexture> verticeList = new List<VertexPositionTexture>();
|
List<VertexPositionTexture> verticeList = new List<VertexPositionTexture>();
|
||||||
|
|
||||||
@@ -726,13 +725,13 @@ namespace Barotrauma
|
|||||||
if (edge.cell1 != null && edge.cell1.body == null) edge.cell1 = null;
|
if (edge.cell1 != null && edge.cell1.body == null) edge.cell1 = null;
|
||||||
if (edge.cell2 != null && edge.cell2.body == null) edge.cell2 = null;
|
if (edge.cell2 != null && edge.cell2.body == null) edge.cell2 = null;
|
||||||
|
|
||||||
//CompareCCW compare = new CompareCCW(cell.Center);
|
CompareCCW compare = new CompareCCW(cell.Center);
|
||||||
//if (compare.Compare(edge.point1, edge.point2) == -1)
|
if (compare.Compare(edge.point1, edge.point2) == -1)
|
||||||
//{
|
{
|
||||||
// var temp = edge.point1;
|
var temp = edge.point1;
|
||||||
// edge.point1 = edge.point2;
|
edge.point1 = edge.point2;
|
||||||
// edge.point2 = temp;
|
edge.point2 = temp;
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -783,6 +782,10 @@ namespace Barotrauma
|
|||||||
Vector2.Normalize(GetEdgeNormal(rightEdge) + GetEdgeNormal(edge, cell)) :
|
Vector2.Normalize(GetEdgeNormal(rightEdge) + GetEdgeNormal(edge, cell)) :
|
||||||
Vector2.Normalize(rightEdge.Center - edge.point2);
|
Vector2.Normalize(rightEdge.Center - edge.point2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++)
|
for (int i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
Vector2[] verts = new Vector2[3];
|
Vector2[] verts = new Vector2[3];
|
||||||
@@ -791,9 +794,9 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (i==0)
|
if (i==0)
|
||||||
{
|
{
|
||||||
verts[0] = edge.point1;
|
verts[0] = edge.point1 - leftNormal * outWardThickness;
|
||||||
verts[1] = edge.point2;
|
verts[1] = edge.point2 - rightNormal * outWardThickness;
|
||||||
verts[2] = edge.point1 + leftNormal * wallThickness;
|
verts[2] = edge.point1 + leftNormal * inwardThickness;
|
||||||
|
|
||||||
vertPos[0] = new VertexPositionTexture(new Vector3(verts[0], 0.0f), Vector2.Zero);
|
vertPos[0] = new VertexPositionTexture(new Vector3(verts[0], 0.0f), Vector2.Zero);
|
||||||
vertPos[1] = new VertexPositionTexture(new Vector3(verts[1], 0.0f), Vector2.UnitX);
|
vertPos[1] = new VertexPositionTexture(new Vector3(verts[1], 0.0f), Vector2.UnitX);
|
||||||
@@ -801,9 +804,9 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
verts[0] = edge.point1 + leftNormal * wallThickness;
|
verts[0] = edge.point1 + leftNormal * inwardThickness;
|
||||||
verts[1] = edge.point2;
|
verts[1] = edge.point2 - rightNormal * outWardThickness;
|
||||||
verts[2] = edge.point2 + rightNormal * wallThickness;
|
verts[2] = edge.point2 + rightNormal * inwardThickness;
|
||||||
|
|
||||||
vertPos[0] = new VertexPositionTexture(new Vector3(verts[0], 0.0f), new Vector2(0.0f, 0.5f));
|
vertPos[0] = new VertexPositionTexture(new Vector3(verts[0], 0.0f), new Vector2(0.0f, 0.5f));
|
||||||
vertPos[1] = new VertexPositionTexture(new Vector3(verts[1], 0.0f), Vector2.UnitX);
|
vertPos[1] = new VertexPositionTexture(new Vector3(verts[1], 0.0f), Vector2.UnitX);
|
||||||
@@ -821,7 +824,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return verticeList;
|
return verticeList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector2 GetEdgeNormal(GraphEdge edge, VoronoiCell cell = null)
|
private Vector2 GetEdgeNormal(GraphEdge edge, VoronoiCell cell = null)
|
||||||
@@ -953,16 +956,21 @@ namespace Barotrauma
|
|||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
public void Draw(SpriteBatch spriteBatch)
|
public void Update (float deltaTime)
|
||||||
|
{
|
||||||
|
renderer.Update(deltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawFront(SpriteBatch spriteBatch)
|
||||||
{
|
{
|
||||||
if (renderer == null) return;
|
if (renderer == null) return;
|
||||||
renderer.Draw(spriteBatch);
|
renderer.Draw(spriteBatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Render(GraphicsDevice graphicsDevice, Camera cam)
|
public void DrawBack(SpriteBatch spriteBatch, Camera cam, BackgroundSpriteManager backgroundSpriteManager = null)
|
||||||
{
|
{
|
||||||
if (renderer == null) return;
|
if (renderer == null) return;
|
||||||
renderer.Render(graphicsDevice, cam, vertices);
|
renderer.DrawBackground(spriteBatch, cam, backgroundSpriteManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1095,8 +1103,6 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
renderer = null;
|
renderer = null;
|
||||||
|
|
||||||
vertices = null;
|
|
||||||
|
|
||||||
cells = null;
|
cells = null;
|
||||||
|
|
||||||
bodies.Clear();
|
bodies.Clear();
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
@@ -9,20 +10,32 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
class LevelRenderer
|
class LevelRenderer
|
||||||
{
|
{
|
||||||
|
|
||||||
private static BasicEffect basicEffect;
|
private static BasicEffect basicEffect;
|
||||||
|
|
||||||
|
private static Sprite background, backgroundTop;
|
||||||
|
private static Texture2D dustParticles;
|
||||||
private static Texture2D shaftTexture;
|
private static Texture2D shaftTexture;
|
||||||
|
|
||||||
|
Vector2 dustOffset;
|
||||||
|
|
||||||
private Level level;
|
private Level level;
|
||||||
|
|
||||||
|
public VertexPositionTexture[] WallVertices;
|
||||||
|
public VertexPositionColor[] BodyVertices;
|
||||||
|
|
||||||
public LevelRenderer(Level level)
|
public LevelRenderer(Level level)
|
||||||
{
|
{
|
||||||
if (shaftTexture == null) shaftTexture = TextureLoader.FromFile("Content/Map/shaft.png");
|
if (shaftTexture == null) shaftTexture = TextureLoader.FromFile("Content/Map/shaft.png");
|
||||||
|
|
||||||
|
if (background==null)
|
||||||
|
{
|
||||||
|
background = new Sprite("Content/Map/background.png", Vector2.Zero);
|
||||||
|
backgroundTop = new Sprite("Content/Map/background2.png", Vector2.Zero);
|
||||||
|
dustParticles = Sprite.LoadTexture("Content/Map/dustparticles.png");
|
||||||
|
}
|
||||||
|
|
||||||
if (basicEffect == null)
|
if (basicEffect == null)
|
||||||
{
|
{
|
||||||
|
|
||||||
basicEffect = new BasicEffect(GameMain.CurrGraphicsDevice);
|
basicEffect = new BasicEffect(GameMain.CurrGraphicsDevice);
|
||||||
basicEffect.VertexColorEnabled = false;
|
basicEffect.VertexColorEnabled = false;
|
||||||
|
|
||||||
@@ -33,6 +46,75 @@ namespace Barotrauma
|
|||||||
this.level = level;
|
this.level = level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Update(float deltaTime)
|
||||||
|
{
|
||||||
|
|
||||||
|
dustOffset -= Vector2.UnitY * 10.0f * (float)deltaTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawBackground(SpriteBatch spriteBatch, Camera cam, BackgroundSpriteManager backgroundSpriteManager = null)
|
||||||
|
{
|
||||||
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap);
|
||||||
|
|
||||||
|
Vector2 backgroundPos = cam.Position;
|
||||||
|
//if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position;
|
||||||
|
backgroundPos.Y = -backgroundPos.Y;
|
||||||
|
backgroundPos /= 20.0f;
|
||||||
|
|
||||||
|
if (backgroundPos.Y < 1024)
|
||||||
|
{
|
||||||
|
if (backgroundPos.Y > -1024)
|
||||||
|
{
|
||||||
|
background.SourceRect = new Rectangle((int)backgroundPos.X, (int)Math.Max(backgroundPos.Y, 0), 1024, 1024);
|
||||||
|
background.DrawTiled(spriteBatch,
|
||||||
|
(backgroundPos.Y < 0) ? new Vector2(0.0f, -backgroundPos.Y) : Vector2.Zero,
|
||||||
|
new Vector2(GameMain.GraphicsWidth, 1024 - backgroundPos.Y),
|
||||||
|
Vector2.Zero, Color.White);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (backgroundPos.Y < 0)
|
||||||
|
{
|
||||||
|
backgroundTop.SourceRect = new Rectangle((int)backgroundPos.X, (int)backgroundPos.Y, 1024, (int)Math.Min(-backgroundPos.Y, 1024));
|
||||||
|
backgroundTop.DrawTiled(spriteBatch, Vector2.Zero, new Vector2(GameMain.GraphicsWidth, Math.Min(-backgroundPos.Y, GameMain.GraphicsHeight)),
|
||||||
|
Vector2.Zero, Color.White);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spriteBatch.End();
|
||||||
|
|
||||||
|
spriteBatch.Begin(SpriteSortMode.BackToFront,
|
||||||
|
BlendState.AlphaBlend,
|
||||||
|
SamplerState.LinearWrap, DepthStencilState.Default, null, null,
|
||||||
|
cam.Transform);
|
||||||
|
|
||||||
|
if (backgroundSpriteManager!=null) backgroundSpriteManager.Draw(spriteBatch);
|
||||||
|
|
||||||
|
spriteBatch.End();
|
||||||
|
|
||||||
|
spriteBatch.Begin(SpriteSortMode.BackToFront,
|
||||||
|
BlendState.AlphaBlend,
|
||||||
|
SamplerState.LinearWrap);
|
||||||
|
|
||||||
|
backgroundPos = new Vector2(cam.WorldView.X, cam.WorldView.Y) + dustOffset;
|
||||||
|
//if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position;
|
||||||
|
|
||||||
|
Rectangle viewRect = cam.WorldView;
|
||||||
|
viewRect.Y = -viewRect.Y;
|
||||||
|
|
||||||
|
float multiplier = 0.8f;
|
||||||
|
for (int i = 1; i < 5; i++)
|
||||||
|
{
|
||||||
|
spriteBatch.Draw(dustParticles, new Rectangle(0,0,GameMain.GraphicsWidth,GameMain.GraphicsHeight),
|
||||||
|
new Rectangle((int)((backgroundPos.X * multiplier)), (int)((-backgroundPos.Y * multiplier)), cam.WorldView.Width*2, cam.WorldView.Height*2),
|
||||||
|
Color.White * multiplier, 0.0f, Vector2.Zero, SpriteEffects.None, 1.0f - multiplier);
|
||||||
|
multiplier -= 0.1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
spriteBatch.End();
|
||||||
|
|
||||||
|
RenderWalls(GameMain.CurrGraphicsDevice, cam);
|
||||||
|
}
|
||||||
|
|
||||||
public void Draw(SpriteBatch spriteBatch)
|
public void Draw(SpriteBatch spriteBatch)
|
||||||
{
|
{
|
||||||
Vector2 pos = new Vector2(0.0f, -level.StartPosition.Y);// level.EndPosition;
|
Vector2 pos = new Vector2(0.0f, -level.StartPosition.Y);// level.EndPosition;
|
||||||
@@ -54,36 +136,50 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Render(GraphicsDevice graphicsDevice, Camera cam, VertexPositionTexture[] vertices)
|
public void RenderWalls(GraphicsDevice graphicsDevice, Camera cam)
|
||||||
{
|
{
|
||||||
if (vertices == null) return;
|
if (WallVertices == null || WallVertices.Length <= 0) return;
|
||||||
if (vertices.Length <= 0) return;
|
|
||||||
|
|
||||||
basicEffect.World = 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();
|
|
||||||
|
|
||||||
graphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;
|
graphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;
|
||||||
|
|
||||||
graphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleList, vertices, 0, (int)Math.Floor(vertices.Length / 3.0f));
|
basicEffect.VertexColorEnabled = true;
|
||||||
|
basicEffect.TextureEnabled = false;
|
||||||
|
basicEffect.CurrentTechnique = basicEffect.Techniques["BasicEffect_VertexColor"];
|
||||||
|
basicEffect.CurrentTechnique.Passes[0].Apply();
|
||||||
|
|
||||||
|
graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, BodyVertices, 0, (int)Math.Floor(BodyVertices.Length / 3.0f));
|
||||||
|
|
||||||
for (int side = 0; side < 2; side++)
|
for (int side = 0; side < 2; side++)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 2; i++)
|
for (int i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
// basicEffect.World = Matrix.CreateTranslation(
|
|
||||||
// new Vector3(-Submarine.Loaded.Position + level.WrappingWalls[side, i].Offset, 0.0f)) *
|
|
||||||
// cam.ShaderTransform *
|
|
||||||
// Matrix.CreateOrthographic(GameMain.GraphicsWidth, GameMain.GraphicsHeight, -1, 1) * 0.5f;
|
|
||||||
|
|
||||||
// basicEffect.CurrentTechnique.Passes[0].Apply();
|
|
||||||
|
|
||||||
graphicsDevice.DrawUserPrimitives(
|
graphicsDevice.DrawUserPrimitives(
|
||||||
PrimitiveType.TriangleList,
|
PrimitiveType.TriangleList, level.WrappingWalls[side, i].BodyVertices, 0,
|
||||||
level.WrappingWalls[side, i].Vertices, 0,
|
(int)Math.Floor(level.WrappingWalls[side, i].BodyVertices.Length / 3.0f));
|
||||||
(int)Math.Floor(level.WrappingWalls[side, i].Vertices.Length / 3.0f));
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
basicEffect.VertexColorEnabled = false;
|
||||||
|
basicEffect.TextureEnabled = true;
|
||||||
|
basicEffect.CurrentTechnique = basicEffect.Techniques["BasicEffect_Texture"];
|
||||||
|
basicEffect.CurrentTechnique.Passes[0].Apply();
|
||||||
|
graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, WallVertices, 0, (int)Math.Floor(WallVertices.Length / 3.0f));
|
||||||
|
|
||||||
|
for (int side = 0; side < 2; side++)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
basicEffect.VertexColorEnabled = false;
|
||||||
|
basicEffect.TextureEnabled = true;
|
||||||
|
basicEffect.CurrentTechnique = basicEffect.Techniques["BasicEffect_Texture"];
|
||||||
|
basicEffect.CurrentTechnique.Passes[0].Apply();
|
||||||
|
graphicsDevice.DrawUserPrimitives(
|
||||||
|
PrimitiveType.TriangleList, level.WrappingWalls[side, i].WallVertices, 0,
|
||||||
|
(int)Math.Floor(level.WrappingWalls[side, i].WallVertices.Length / 3.0f));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public const float WallWidth = 20000.0f;
|
public const float WallWidth = 20000.0f;
|
||||||
|
|
||||||
public VertexPositionTexture[] Vertices;
|
public VertexPositionTexture[] WallVertices;
|
||||||
|
|
||||||
|
public VertexPositionColor[] BodyVertices;
|
||||||
|
|
||||||
private Vector2 midPos;
|
private Vector2 midPos;
|
||||||
private int slot;
|
private int slot;
|
||||||
|
|||||||
@@ -310,10 +310,10 @@ namespace Barotrauma.Lights
|
|||||||
{
|
{
|
||||||
|
|
||||||
Vector3 offset = Vector3.Zero;
|
Vector3 offset = Vector3.Zero;
|
||||||
if (parentEntity != null && parentEntity.Submarine != null)
|
if (parentEntity != null && parentEntity.Submarine != null)
|
||||||
{
|
{
|
||||||
offset = new Vector3(parentEntity.Submarine.DrawPosition.X, parentEntity.Submarine.DrawPosition.Y, 0.0f);
|
offset = new Vector3(parentEntity.Submarine.DrawPosition.X, parentEntity.Submarine.DrawPosition.Y, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
shadowEffect.World = Matrix.CreateTranslation(offset) * transform;
|
shadowEffect.World = Matrix.CreateTranslation(offset) * transform;
|
||||||
|
|||||||
@@ -107,10 +107,15 @@ namespace Barotrauma
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LocationType Random()
|
public static LocationType Random(string seed = "")
|
||||||
{
|
{
|
||||||
Debug.Assert(list.Count > 0, "LocationType.list.Count == 0, you probably need to initialize LocationTypes");
|
Debug.Assert(list.Count > 0, "LocationType.list.Count == 0, you probably need to initialize LocationTypes");
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(seed))
|
||||||
|
{
|
||||||
|
Rand.SetSyncedSeed(ToolBox.StringToInt(seed));
|
||||||
|
}
|
||||||
|
|
||||||
int randInt = Rand.Int(totalWeight, false);
|
int randInt = Rand.Int(totalWeight, false);
|
||||||
|
|
||||||
foreach (LocationType type in list)
|
foreach (LocationType type in list)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace Barotrauma
|
|||||||
class Structure : MapEntity, IDamageable
|
class Structure : MapEntity, IDamageable
|
||||||
{
|
{
|
||||||
public static int wallSectionSize = 100;
|
public static int wallSectionSize = 100;
|
||||||
public static List<Structure> wallList = new List<Structure>();
|
public static List<Structure> WallList = new List<Structure>();
|
||||||
|
|
||||||
ConvexHull convexHull;
|
ConvexHull convexHull;
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
bodies.Add(newBody);
|
bodies.Add(newBody);
|
||||||
|
|
||||||
wallList.Add(this);
|
WallList.Add(this);
|
||||||
|
|
||||||
int xsections = 1;
|
int xsections = 1;
|
||||||
int ysections = 1;
|
int ysections = 1;
|
||||||
@@ -273,7 +273,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
base.Remove();
|
base.Remove();
|
||||||
|
|
||||||
if (wallList.Contains(this)) wallList.Remove(this);
|
if (WallList.Contains(this)) WallList.Remove(this);
|
||||||
|
|
||||||
if (bodies != null)
|
if (bodies != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -355,33 +355,6 @@ namespace Barotrauma
|
|||||||
return closestBody;
|
return closestBody;
|
||||||
}
|
}
|
||||||
|
|
||||||
//public static Body PickBody(Vector2 point)
|
|
||||||
//{
|
|
||||||
// Body foundBody = null;
|
|
||||||
// AABB aabb = new AABB(point, point);
|
|
||||||
|
|
||||||
// GameMain.World.QueryAABB(p =>
|
|
||||||
// {
|
|
||||||
// foundBody = p.Body;
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
|
|
||||||
// }, ref aabb);
|
|
||||||
|
|
||||||
// return foundBody;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public static bool InsideWall(Vector2 point)
|
|
||||||
//{
|
|
||||||
// Body foundBody = PickBody(point);
|
|
||||||
// if (foundBody==null) return false;
|
|
||||||
|
|
||||||
// Structure wall = foundBody.UserData as Structure;
|
|
||||||
// if (wall == null || wall.IsPlatform) return false;
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//movement ----------------------------------------------------
|
//movement ----------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -109,12 +109,16 @@ namespace Barotrauma
|
|||||||
(int)ConvertUnits.ToDisplayUnits(hullAABB.Extents.X * 2.0f),
|
(int)ConvertUnits.ToDisplayUnits(hullAABB.Extents.X * 2.0f),
|
||||||
(int)ConvertUnits.ToDisplayUnits(hullAABB.Extents.Y * 2.0f));
|
(int)ConvertUnits.ToDisplayUnits(hullAABB.Extents.Y * 2.0f));
|
||||||
|
|
||||||
|
//var triangulatedVertices = Triangulate.ConvexPartition(shapevertices, TriangulationAlgorithm.Bayazit);
|
||||||
|
|
||||||
var triangulatedVertices = Triangulate.ConvexPartition(shapevertices, TriangulationAlgorithm.Bayazit);
|
body = BodyFactory.CreateBody(GameMain.World, this);
|
||||||
|
|
||||||
|
foreach (Hull hull in Hull.hullList)
|
||||||
|
{
|
||||||
|
FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(hull.Rect.Width), ConvertUnits.ToSimUnits(hull.Rect.Height), 5.0f, hull.SimPosition, body, this);
|
||||||
|
}
|
||||||
|
|
||||||
body = BodyFactory.CreateCompoundPolygon(GameMain.World, triangulatedVertices, 5.0f);
|
|
||||||
body.BodyType = BodyType.Dynamic;
|
body.BodyType = BodyType.Dynamic;
|
||||||
|
|
||||||
body.CollisionCategories = Physics.CollisionMisc | Physics.CollisionWall;
|
body.CollisionCategories = Physics.CollisionMisc | Physics.CollisionWall;
|
||||||
body.CollidesWith = Physics.CollisionLevel | Physics.CollisionCharacter;
|
body.CollidesWith = Physics.CollisionLevel | Physics.CollisionCharacter;
|
||||||
body.Restitution = Restitution;
|
body.Restitution = Restitution;
|
||||||
@@ -125,13 +129,13 @@ namespace Barotrauma
|
|||||||
body.SleepingAllowed = false;
|
body.SleepingAllowed = false;
|
||||||
body.IgnoreGravity = true;
|
body.IgnoreGravity = true;
|
||||||
body.OnCollision += OnCollision;
|
body.OnCollision += OnCollision;
|
||||||
body.UserData = this;
|
//body.UserData = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private List<Vector2> GenerateConvexHull()
|
private List<Vector2> GenerateConvexHull()
|
||||||
{
|
{
|
||||||
if (!Structure.wallList.Any())
|
if (!Structure.WallList.Any())
|
||||||
{
|
{
|
||||||
return new List<Vector2>() { new Vector2(-1.0f, 1.0f), new Vector2(1.0f, 1.0f), new Vector2(0.0f, -1.0f) };
|
return new List<Vector2>() { new Vector2(-1.0f, 1.0f), new Vector2(1.0f, 1.0f), new Vector2(0.0f, -1.0f) };
|
||||||
}
|
}
|
||||||
@@ -140,7 +144,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
Vector2 leftMost = Vector2.Zero;
|
Vector2 leftMost = Vector2.Zero;
|
||||||
|
|
||||||
foreach (Structure wall in Structure.wallList)
|
foreach (Structure wall in Structure.WallList)
|
||||||
{
|
{
|
||||||
for (int x = -1; x <= 1; x += 2)
|
for (int x = -1; x <= 1; x += 2)
|
||||||
{
|
{
|
||||||
@@ -184,9 +188,6 @@ namespace Barotrauma
|
|||||||
return hullPoints;
|
return hullPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float collisionRigidness = 1.0f;
|
|
||||||
|
|
||||||
public void Update(float deltaTime)
|
public void Update(float deltaTime)
|
||||||
{
|
{
|
||||||
if (Position!=Vector2.Zero)
|
if (Position!=Vector2.Zero)
|
||||||
|
|||||||
@@ -219,6 +219,12 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public static void GenerateSubWaypoints()
|
public static void GenerateSubWaypoints()
|
||||||
{
|
{
|
||||||
|
List<WayPoint> existingWaypoints = WayPointList.FindAll(wp => wp.spawnType == SpawnType.Path);
|
||||||
|
foreach (WayPoint wayPoint in existingWaypoints)
|
||||||
|
{
|
||||||
|
wayPoint.Remove();
|
||||||
|
}
|
||||||
|
|
||||||
float minDist = 200.0f;
|
float minDist = 200.0f;
|
||||||
float heightFromFloor = 100.0f;
|
float heightFromFloor = 100.0f;
|
||||||
|
|
||||||
|
|||||||
@@ -134,6 +134,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
GUIComponent.MouseOn = null;
|
GUIComponent.MouseOn = null;
|
||||||
characterMode = false;
|
characterMode = false;
|
||||||
|
|
||||||
|
if (Submarine.Loaded != null) cam.Position = Submarine.Loaded.Position + Submarine.HiddenSubPosition;
|
||||||
//CreateDummyCharacter();
|
//CreateDummyCharacter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,6 @@ namespace Barotrauma
|
|||||||
readonly RenderTarget2D renderTargetWater;
|
readonly RenderTarget2D renderTargetWater;
|
||||||
readonly RenderTarget2D renderTargetAir;
|
readonly RenderTarget2D renderTargetAir;
|
||||||
|
|
||||||
readonly Sprite background, backgroundTop;
|
|
||||||
readonly Texture2D dustParticles;
|
|
||||||
|
|
||||||
Vector2 dustOffset;
|
|
||||||
|
|
||||||
public BackgroundSpriteManager BackgroundSpriteManager;
|
public BackgroundSpriteManager BackgroundSpriteManager;
|
||||||
|
|
||||||
public Camera Cam
|
public Camera Cam
|
||||||
@@ -36,9 +31,6 @@ namespace Barotrauma
|
|||||||
renderTargetWater = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
renderTargetWater = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
||||||
renderTargetAir = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
renderTargetAir = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
||||||
|
|
||||||
background = new Sprite("Content/Map/background.png", Vector2.Zero);
|
|
||||||
backgroundTop = new Sprite("Content/Map/background2.png", Vector2.Zero);
|
|
||||||
dustParticles = Sprite.LoadTexture("Content/Map/dustparticles.png");
|
|
||||||
|
|
||||||
BackgroundSpriteManager = new BackgroundSpriteManager("Content/BackgroundSprites/BackgroundSpritePrefabs.xml");
|
BackgroundSpriteManager = new BackgroundSpriteManager("Content/BackgroundSprites/BackgroundSpritePrefabs.xml");
|
||||||
}
|
}
|
||||||
@@ -83,11 +75,12 @@ namespace Barotrauma
|
|||||||
GameMain.GameSession.Submarine.ApplyForce(targetMovement * 1000000.0f);
|
GameMain.GameSession.Submarine.ApplyForce(targetMovement * 1000000.0f);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
dustOffset -= Vector2.UnitY * 10.0f * (float)deltaTime;
|
|
||||||
|
|
||||||
if (GameMain.GameSession!=null) GameMain.GameSession.Update((float)deltaTime);
|
if (GameMain.GameSession!=null) GameMain.GameSession.Update((float)deltaTime);
|
||||||
//EventManager.Update(gameTime);
|
//EventManager.Update(gameTime);
|
||||||
|
|
||||||
|
if (Level.Loaded != null) Level.Loaded.Update((float)deltaTime);
|
||||||
|
|
||||||
Character.UpdateAll(cam, (float)deltaTime);
|
Character.UpdateAll(cam, (float)deltaTime);
|
||||||
|
|
||||||
BackgroundSpriteManager.Update(cam, (float)deltaTime);
|
BackgroundSpriteManager.Update(cam, (float)deltaTime);
|
||||||
@@ -101,7 +94,11 @@ namespace Barotrauma
|
|||||||
while (Physics.accumulator >= Physics.step)
|
while (Physics.accumulator >= Physics.step)
|
||||||
{
|
{
|
||||||
cam.MoveCamera((float)Physics.step);
|
cam.MoveCamera((float)Physics.step);
|
||||||
if (Character.Controlled != null) cam.TargetPos = Character.Controlled.WorldPosition;
|
if (Character.Controlled != null)
|
||||||
|
{
|
||||||
|
cam.TargetPos = Character.Controlled.WorldPosition;
|
||||||
|
Lights.LightManager.ViewPos = Character.Controlled.WorldPosition;
|
||||||
|
}
|
||||||
|
|
||||||
if (Submarine.Loaded != null) Submarine.Loaded.SetPrevTransform(Submarine.Loaded.Position);
|
if (Submarine.Loaded != null) Submarine.Loaded.SetPrevTransform(Submarine.Loaded.Position);
|
||||||
|
|
||||||
@@ -175,6 +172,7 @@ namespace Barotrauma
|
|||||||
GameMain.LightManager.UpdateObstructVision(graphics, spriteBatch, cam,
|
GameMain.LightManager.UpdateObstructVision(graphics, spriteBatch, cam,
|
||||||
Character.Controlled==null ? LightManager.ViewPos : Character.Controlled.CursorWorldPosition);
|
Character.Controlled==null ? LightManager.ViewPos : Character.Controlled.CursorWorldPosition);
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------
|
||||||
//1. draw the background, characters and the parts of the submarine that are behind them
|
//1. draw the background, characters and the parts of the submarine that are behind them
|
||||||
//----------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------
|
||||||
@@ -182,63 +180,8 @@ namespace Barotrauma
|
|||||||
graphics.SetRenderTarget(renderTarget);
|
graphics.SetRenderTarget(renderTarget);
|
||||||
graphics.Clear(new Color(11, 18, 26, 255));
|
graphics.Clear(new Color(11, 18, 26, 255));
|
||||||
|
|
||||||
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap);
|
if (Level.Loaded != null) Level.Loaded.DrawBack(spriteBatch, cam, BackgroundSpriteManager);
|
||||||
|
|
||||||
Vector2 backgroundPos = cam.Position;
|
|
||||||
//if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position;
|
|
||||||
backgroundPos.Y = -backgroundPos.Y;
|
|
||||||
backgroundPos /= 20.0f;
|
|
||||||
|
|
||||||
if (backgroundPos.Y < 1024)
|
|
||||||
{
|
|
||||||
if (backgroundPos.Y > -1024)
|
|
||||||
{
|
|
||||||
background.SourceRect = new Rectangle((int)backgroundPos.X, (int)Math.Max(backgroundPos.Y, 0), 1024, 1024);
|
|
||||||
background.DrawTiled(spriteBatch,
|
|
||||||
(backgroundPos.Y < 0) ? new Vector2(0.0f, -backgroundPos.Y) : Vector2.Zero,
|
|
||||||
new Vector2(GameMain.GraphicsWidth, 1024 - backgroundPos.Y),
|
|
||||||
Vector2.Zero, Color.White);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (backgroundPos.Y < 0)
|
|
||||||
{
|
|
||||||
backgroundTop.SourceRect = new Rectangle((int)backgroundPos.X, (int)backgroundPos.Y, 1024, (int)Math.Min(-backgroundPos.Y, 1024));
|
|
||||||
backgroundTop.DrawTiled(spriteBatch, Vector2.Zero, new Vector2(GameMain.GraphicsWidth, Math.Min(-backgroundPos.Y, GameMain.GraphicsHeight)),
|
|
||||||
Vector2.Zero, Color.White);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
spriteBatch.End();
|
|
||||||
|
|
||||||
spriteBatch.Begin(SpriteSortMode.BackToFront,
|
|
||||||
BlendState.AlphaBlend,
|
|
||||||
SamplerState.LinearWrap, DepthStencilState.Default, null, null,
|
|
||||||
cam.Transform);
|
|
||||||
|
|
||||||
BackgroundSpriteManager.Draw(spriteBatch);
|
|
||||||
|
|
||||||
backgroundPos = new Vector2(cam.WorldView.X, cam.WorldView.Y) + dustOffset;
|
|
||||||
//if (Level.Loaded != null) backgroundPos -= Level.Loaded.Position;
|
|
||||||
|
|
||||||
Rectangle viewRect = cam.WorldView;
|
|
||||||
viewRect.Y = -viewRect.Y;
|
|
||||||
|
|
||||||
float multiplier = 0.8f;
|
|
||||||
for (int i = 1; i < 4; i++)
|
|
||||||
{
|
|
||||||
spriteBatch.Draw(dustParticles, viewRect,
|
|
||||||
new Rectangle((int)((backgroundPos.X * multiplier)), (int)((-backgroundPos.Y * multiplier)), cam.WorldView.Width, cam.WorldView.Height),
|
|
||||||
Color.White * multiplier, 0.0f, Vector2.Zero, SpriteEffects.None, 1.0f-multiplier);
|
|
||||||
multiplier -= 0.15f;
|
|
||||||
}
|
|
||||||
|
|
||||||
spriteBatch.End();
|
|
||||||
|
|
||||||
if (GameMain.GameSession != null && GameMain.GameSession.Level != null)
|
|
||||||
{
|
|
||||||
GameMain.GameSession.Level.Render(graphics, cam);
|
|
||||||
//GameMain.GameSession.Level.SetObserverPosition(cam.WorldViewCenter);
|
|
||||||
}
|
|
||||||
|
|
||||||
spriteBatch.Begin(SpriteSortMode.BackToFront,
|
spriteBatch.Begin(SpriteSortMode.BackToFront,
|
||||||
BlendState.AlphaBlend,
|
BlendState.AlphaBlend,
|
||||||
@@ -344,7 +287,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
Submarine.DrawFront(spriteBatch);
|
Submarine.DrawFront(spriteBatch);
|
||||||
|
|
||||||
if (Level.Loaded!=null) Level.Loaded.Draw(spriteBatch);
|
if (Level.Loaded!=null) Level.Loaded.DrawFront(spriteBatch);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
|
|||||||
@@ -369,7 +369,6 @@ namespace Barotrauma
|
|||||||
spriteBatch.Draw(backGround.Texture, Vector2.Zero, null, Color.White, 0.0f, Vector2.Zero,
|
spriteBatch.Draw(backGround.Texture, Vector2.Zero, null, Color.White, 0.0f, Vector2.Zero,
|
||||||
Math.Max((float)GameMain.GraphicsWidth / backGround.SourceRect.Width, (float)GameMain.GraphicsHeight / backGround.SourceRect.Height), SpriteEffects.None, 0.0f);
|
Math.Max((float)GameMain.GraphicsWidth / backGround.SourceRect.Width, (float)GameMain.GraphicsHeight / backGround.SourceRect.Height), SpriteEffects.None, 0.0f);
|
||||||
|
|
||||||
|
|
||||||
topPanel.Draw(spriteBatch);
|
topPanel.Draw(spriteBatch);
|
||||||
|
|
||||||
bottomPanel[selectedRightPanel].Draw(spriteBatch);
|
bottomPanel[selectedRightPanel].Draw(spriteBatch);
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ namespace Barotrauma
|
|||||||
public bool IsServer;
|
public bool IsServer;
|
||||||
public string ServerName, ServerMessage;
|
public string ServerName, ServerMessage;
|
||||||
|
|
||||||
|
private Sprite backgroundSprite;
|
||||||
|
|
||||||
private GUITextBox serverMessage;
|
private GUITextBox serverMessage;
|
||||||
|
|
||||||
public GUIListBox SubList
|
public GUIListBox SubList
|
||||||
@@ -98,6 +100,9 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
private set
|
private set
|
||||||
{
|
{
|
||||||
|
if (levelSeed == value) return;
|
||||||
|
backgroundSprite = LocationType.Random(LevelSeed).Background;
|
||||||
|
|
||||||
levelSeed = value;
|
levelSeed = value;
|
||||||
seedBox.Text = levelSeed;
|
seedBox.Text = levelSeed;
|
||||||
}
|
}
|
||||||
@@ -266,6 +271,7 @@ namespace Barotrauma
|
|||||||
serverMessage.Wrap = true;
|
serverMessage.Wrap = true;
|
||||||
serverMessage.TextGetter = GetServerMessage;
|
serverMessage.TextGetter = GetServerMessage;
|
||||||
serverMessage.OnTextChanged = UpdateServerMessage;
|
serverMessage.OnTextChanged = UpdateServerMessage;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Deselect()
|
public override void Deselect()
|
||||||
@@ -284,7 +290,7 @@ namespace Barotrauma
|
|||||||
textBox.Select();
|
textBox.Select();
|
||||||
|
|
||||||
Character.Controlled = null;
|
Character.Controlled = null;
|
||||||
GameMain.GameScreen.Cam.TargetPos = Vector2.Zero;
|
//GameMain.GameScreen.Cam.TargetPos = Vector2.Zero;
|
||||||
|
|
||||||
subList.Enabled = GameMain.Server != null || GameMain.NetworkMember.Voting.AllowSubVoting;
|
subList.Enabled = GameMain.Server != null || GameMain.NetworkMember.Voting.AllowSubVoting;
|
||||||
playerList.Enabled = GameMain.Server != null;
|
playerList.Enabled = GameMain.Server != null;
|
||||||
@@ -597,19 +603,19 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
base.Update(deltaTime);
|
base.Update(deltaTime);
|
||||||
|
|
||||||
Vector2 pos = new Vector2(
|
//Vector2 pos = new Vector2(
|
||||||
Submarine.Borders.X + Submarine.Borders.Width / 2,
|
// Submarine.Borders.X + Submarine.Borders.Width / 2,
|
||||||
Submarine.Borders.Y - Submarine.Borders.Height / 2);
|
// Submarine.Borders.Y - Submarine.Borders.Height / 2);
|
||||||
|
|
||||||
camAngle += (float)deltaTime / 10.0f;
|
//camAngle += (float)deltaTime / 10.0f;
|
||||||
Vector2 offset = (new Vector2(
|
//Vector2 offset = (new Vector2(
|
||||||
(float)Math.Cos(camAngle) * (Submarine.Borders.Width / 2.0f),
|
// (float)Math.Cos(camAngle) * (Submarine.Borders.Width / 2.0f),
|
||||||
(float)Math.Sin(camAngle) * (Submarine.Borders.Height / 2.0f)));
|
// (float)Math.Sin(camAngle) * (Submarine.Borders.Height / 2.0f)));
|
||||||
|
|
||||||
pos += offset * 0.8f;
|
//pos += offset * 0.8f;
|
||||||
|
|
||||||
GameMain.GameScreen.Cam.TargetPos = pos;
|
//GameMain.GameScreen.Cam.TargetPos = pos;
|
||||||
GameMain.GameScreen.Cam.MoveCamera((float)deltaTime);
|
//GameMain.GameScreen.Cam.MoveCamera((float)deltaTime);
|
||||||
|
|
||||||
menu.Update((float)deltaTime);
|
menu.Update((float)deltaTime);
|
||||||
|
|
||||||
@@ -632,12 +638,17 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch)
|
public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch)
|
||||||
{
|
{
|
||||||
graphics.Clear(Color.CornflowerBlue);
|
graphics.Clear(Color.Black);
|
||||||
|
|
||||||
GameMain.GameScreen.DrawMap(graphics, spriteBatch);
|
|
||||||
|
|
||||||
spriteBatch.Begin();
|
spriteBatch.Begin();
|
||||||
|
|
||||||
|
if (backgroundSprite!=null)
|
||||||
|
{
|
||||||
|
spriteBatch.Draw(backgroundSprite.Texture, Vector2.Zero, null, Color.White, 0.0f, Vector2.Zero,
|
||||||
|
Math.Max((float)GameMain.GraphicsWidth / backgroundSprite.SourceRect.Width, (float)GameMain.GraphicsHeight / backgroundSprite.SourceRect.Height),
|
||||||
|
SpriteEffects.None, 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
menu.Draw(spriteBatch);
|
menu.Draw(spriteBatch);
|
||||||
|
|
||||||
if (jobInfoFrame != null) jobInfoFrame.Draw(spriteBatch);
|
if (jobInfoFrame != null) jobInfoFrame.Draw(spriteBatch);
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
GUIButton button = new GUIButton(new Rectangle(-20, -20, 100, 30), "Back", Alignment.TopLeft, GUI.Style, menu);
|
GUIButton button = new GUIButton(new Rectangle(-20, -20, 100, 30), "Back", Alignment.TopLeft, GUI.Style, menu);
|
||||||
button.OnClicked = GameMain.MainMenuScreen.SelectTab;
|
button.OnClicked = GameMain.MainMenuScreen.SelectTab;
|
||||||
button.CanBeSelected = false;
|
|
||||||
button.SelectedColor = button.Color;
|
button.SelectedColor = button.Color;
|
||||||
|
|
||||||
refreshDisableTimer = DateTime.Now;
|
refreshDisableTimer = DateTime.Now;
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user