Level wall generation bugfixes, moved level background drawing to LevelRenderer, more coordinate system bugfixes, better looking progress bars,
This commit is contained in:
@@ -479,21 +479,21 @@ namespace Barotrauma
|
||||
}
|
||||
|
||||
//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 (Submarine.RectContains(guess.WorldRect, worldPosition)) return guess;
|
||||
if (Submarine.RectContains(useWorldCoordinates ? guess.WorldRect : guess.rect, position)) return guess;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -41,7 +41,6 @@ namespace Barotrauma
|
||||
//List<Body> bodies;
|
||||
private List<VoronoiCell> cells;
|
||||
|
||||
private VertexPositionTexture[] vertices;
|
||||
//private VertexBuffer vertexBuffer;
|
||||
|
||||
private Vector2 startPosition, endPosition;
|
||||
@@ -314,7 +313,9 @@ namespace Barotrauma
|
||||
startPosition.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];
|
||||
|
||||
@@ -325,7 +326,8 @@ namespace Barotrauma
|
||||
wrappingWalls[side, i] = new WrappingWall(pathCells, cells, borders.Height * 0.5f,
|
||||
(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[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>();
|
||||
|
||||
List<Vector2> tempVertices = new List<Vector2>();
|
||||
@@ -657,14 +659,14 @@ namespace Barotrauma
|
||||
continue;
|
||||
}
|
||||
|
||||
//var triangles = MathUtils.TriangulateConvexHull(tempVertices, cell.Center);
|
||||
//for (int i = 0; i < triangles.Count; i++)
|
||||
//{
|
||||
// foreach (Vector2 vertex in triangles[i])
|
||||
// {
|
||||
// verticeList.Add(new VertexPositionTexture(new Vector3(vertex, 0.0f), vertex/1000.0f));
|
||||
// }
|
||||
//}
|
||||
var triangles = MathUtils.TriangulateConvexHull(tempVertices, cell.Center);
|
||||
for (int i = 0; i < triangles.Count; i++)
|
||||
{
|
||||
foreach (Vector2 vertex in triangles[i])
|
||||
{
|
||||
verticeList.Add(new VertexPositionColor(new Vector3(vertex, 0.0f), Color.Black));
|
||||
}
|
||||
}
|
||||
|
||||
if (bodyPoints.Count < 2) continue;
|
||||
|
||||
@@ -684,7 +686,7 @@ namespace Barotrauma
|
||||
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);
|
||||
|
||||
@@ -706,15 +708,12 @@ namespace Barotrauma
|
||||
bodies.Add(edgeBody);
|
||||
}
|
||||
|
||||
|
||||
verticeList = GenerateWallShapes(cells);
|
||||
|
||||
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>();
|
||||
|
||||
@@ -726,13 +725,13 @@ namespace Barotrauma
|
||||
if (edge.cell1 != null && edge.cell1.body == null) edge.cell1 = null;
|
||||
if (edge.cell2 != null && edge.cell2.body == null) edge.cell2 = null;
|
||||
|
||||
//CompareCCW compare = new CompareCCW(cell.Center);
|
||||
//if (compare.Compare(edge.point1, edge.point2) == -1)
|
||||
//{
|
||||
// var temp = edge.point1;
|
||||
// edge.point1 = edge.point2;
|
||||
// edge.point2 = temp;
|
||||
//}
|
||||
CompareCCW compare = new CompareCCW(cell.Center);
|
||||
if (compare.Compare(edge.point1, edge.point2) == -1)
|
||||
{
|
||||
var temp = edge.point1;
|
||||
edge.point1 = edge.point2;
|
||||
edge.point2 = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -758,7 +757,7 @@ namespace Barotrauma
|
||||
rightEdge = edge2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vector2 leftNormal = Vector2.Zero, rightNormal = Vector2.Zero;
|
||||
|
||||
if (leftEdge == null)
|
||||
@@ -783,6 +782,10 @@ namespace Barotrauma
|
||||
Vector2.Normalize(GetEdgeNormal(rightEdge) + GetEdgeNormal(edge, cell)) :
|
||||
Vector2.Normalize(rightEdge.Center - edge.point2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
Vector2[] verts = new Vector2[3];
|
||||
@@ -791,9 +794,9 @@ namespace Barotrauma
|
||||
|
||||
if (i==0)
|
||||
{
|
||||
verts[0] = edge.point1;
|
||||
verts[1] = edge.point2;
|
||||
verts[2] = edge.point1 + leftNormal * wallThickness;
|
||||
verts[0] = edge.point1 - leftNormal * outWardThickness;
|
||||
verts[1] = edge.point2 - rightNormal * outWardThickness;
|
||||
verts[2] = edge.point1 + leftNormal * inwardThickness;
|
||||
|
||||
vertPos[0] = new VertexPositionTexture(new Vector3(verts[0], 0.0f), Vector2.Zero);
|
||||
vertPos[1] = new VertexPositionTexture(new Vector3(verts[1], 0.0f), Vector2.UnitX);
|
||||
@@ -801,9 +804,9 @@ namespace Barotrauma
|
||||
}
|
||||
else
|
||||
{
|
||||
verts[0] = edge.point1 + leftNormal * wallThickness;
|
||||
verts[1] = edge.point2;
|
||||
verts[2] = edge.point2 + rightNormal * wallThickness;
|
||||
verts[0] = edge.point1 + leftNormal * inwardThickness;
|
||||
verts[1] = edge.point2 - rightNormal * outWardThickness;
|
||||
verts[2] = edge.point2 + rightNormal * inwardThickness;
|
||||
|
||||
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);
|
||||
@@ -821,7 +824,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
return verticeList;
|
||||
return verticeList.ToArray();
|
||||
}
|
||||
|
||||
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;
|
||||
renderer.Draw(spriteBatch);
|
||||
}
|
||||
|
||||
public void Render(GraphicsDevice graphicsDevice, Camera cam)
|
||||
public void DrawBack(SpriteBatch spriteBatch, Camera cam, BackgroundSpriteManager backgroundSpriteManager = null)
|
||||
{
|
||||
if (renderer == null) return;
|
||||
renderer.Render(graphicsDevice, cam, vertices);
|
||||
renderer.DrawBackground(spriteBatch, cam, backgroundSpriteManager);
|
||||
}
|
||||
|
||||
|
||||
@@ -1094,9 +1102,7 @@ namespace Barotrauma
|
||||
private void Unload()
|
||||
{
|
||||
renderer = null;
|
||||
|
||||
vertices = null;
|
||||
|
||||
|
||||
cells = null;
|
||||
|
||||
bodies.Clear();
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
@@ -9,20 +10,32 @@ namespace Barotrauma
|
||||
{
|
||||
class LevelRenderer
|
||||
{
|
||||
|
||||
private static BasicEffect basicEffect;
|
||||
|
||||
private static Sprite background, backgroundTop;
|
||||
private static Texture2D dustParticles;
|
||||
private static Texture2D shaftTexture;
|
||||
|
||||
private Level level;
|
||||
Vector2 dustOffset;
|
||||
|
||||
private Level level;
|
||||
|
||||
public VertexPositionTexture[] WallVertices;
|
||||
public VertexPositionColor[] BodyVertices;
|
||||
|
||||
public LevelRenderer(Level level)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
||||
basicEffect = new BasicEffect(GameMain.CurrGraphicsDevice);
|
||||
basicEffect.VertexColorEnabled = false;
|
||||
|
||||
@@ -33,6 +46,75 @@ namespace Barotrauma
|
||||
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)
|
||||
{
|
||||
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 (vertices.Length <= 0) return;
|
||||
if (WallVertices == null || WallVertices.Length <= 0) return;
|
||||
|
||||
basicEffect.World = cam.ShaderTransform
|
||||
* Matrix.CreateOrthographic(GameMain.GraphicsWidth, GameMain.GraphicsHeight, -1, 1) * 0.5f;
|
||||
|
||||
basicEffect.CurrentTechnique.Passes[0].Apply();
|
||||
|
||||
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 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(
|
||||
PrimitiveType.TriangleList,
|
||||
level.WrappingWalls[side, i].Vertices, 0,
|
||||
(int)Math.Floor(level.WrappingWalls[side, i].Vertices.Length / 3.0f));
|
||||
PrimitiveType.TriangleList, level.WrappingWalls[side, i].BodyVertices, 0,
|
||||
(int)Math.Floor(level.WrappingWalls[side, i].BodyVertices.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 VertexPositionTexture[] Vertices;
|
||||
public VertexPositionTexture[] WallVertices;
|
||||
|
||||
public VertexPositionColor[] BodyVertices;
|
||||
|
||||
private Vector2 midPos;
|
||||
private int slot;
|
||||
|
||||
@@ -310,10 +310,10 @@ namespace Barotrauma.Lights
|
||||
{
|
||||
|
||||
Vector3 offset = Vector3.Zero;
|
||||
if (parentEntity != null && parentEntity.Submarine != null)
|
||||
{
|
||||
offset = new Vector3(parentEntity.Submarine.DrawPosition.X, parentEntity.Submarine.DrawPosition.Y, 0.0f);
|
||||
}
|
||||
if (parentEntity != null && parentEntity.Submarine != null)
|
||||
{
|
||||
offset = new Vector3(parentEntity.Submarine.DrawPosition.X, parentEntity.Submarine.DrawPosition.Y, 0.0f);
|
||||
}
|
||||
|
||||
|
||||
shadowEffect.World = Matrix.CreateTranslation(offset) * transform;
|
||||
|
||||
@@ -107,10 +107,15 @@ namespace Barotrauma
|
||||
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");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(seed))
|
||||
{
|
||||
Rand.SetSyncedSeed(ToolBox.StringToInt(seed));
|
||||
}
|
||||
|
||||
int randInt = Rand.Int(totalWeight, false);
|
||||
|
||||
foreach (LocationType type in list)
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace Barotrauma
|
||||
class Structure : MapEntity, IDamageable
|
||||
{
|
||||
public static int wallSectionSize = 100;
|
||||
public static List<Structure> wallList = new List<Structure>();
|
||||
public static List<Structure> WallList = new List<Structure>();
|
||||
|
||||
ConvexHull convexHull;
|
||||
|
||||
@@ -169,7 +169,7 @@ namespace Barotrauma
|
||||
|
||||
bodies.Add(newBody);
|
||||
|
||||
wallList.Add(this);
|
||||
WallList.Add(this);
|
||||
|
||||
int xsections = 1;
|
||||
int ysections = 1;
|
||||
@@ -273,7 +273,7 @@ namespace Barotrauma
|
||||
{
|
||||
base.Remove();
|
||||
|
||||
if (wallList.Contains(this)) wallList.Remove(this);
|
||||
if (WallList.Contains(this)) WallList.Remove(this);
|
||||
|
||||
if (bodies != null)
|
||||
{
|
||||
|
||||
@@ -354,34 +354,7 @@ namespace Barotrauma
|
||||
lastPickedFraction = closestFraction;
|
||||
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 ----------------------------------------------------
|
||||
|
||||
|
||||
|
||||
@@ -108,13 +108,17 @@ namespace Barotrauma
|
||||
(int)ConvertUnits.ToDisplayUnits(hullAABB.UpperBound.Y),
|
||||
(int)ConvertUnits.ToDisplayUnits(hullAABB.Extents.X * 2.0f),
|
||||
(int)ConvertUnits.ToDisplayUnits(hullAABB.Extents.Y * 2.0f));
|
||||
|
||||
//var triangulatedVertices = Triangulate.ConvexPartition(shapevertices, TriangulationAlgorithm.Bayazit);
|
||||
|
||||
body = BodyFactory.CreateBody(GameMain.World, this);
|
||||
|
||||
var triangulatedVertices = Triangulate.ConvexPartition(shapevertices, TriangulationAlgorithm.Bayazit);
|
||||
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.CollisionCategories = Physics.CollisionMisc | Physics.CollisionWall;
|
||||
body.CollidesWith = Physics.CollisionLevel | Physics.CollisionCharacter;
|
||||
body.Restitution = Restitution;
|
||||
@@ -125,13 +129,13 @@ namespace Barotrauma
|
||||
body.SleepingAllowed = false;
|
||||
body.IgnoreGravity = true;
|
||||
body.OnCollision += OnCollision;
|
||||
body.UserData = this;
|
||||
//body.UserData = this;
|
||||
}
|
||||
|
||||
|
||||
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) };
|
||||
}
|
||||
@@ -140,7 +144,7 @@ namespace Barotrauma
|
||||
|
||||
Vector2 leftMost = Vector2.Zero;
|
||||
|
||||
foreach (Structure wall in Structure.wallList)
|
||||
foreach (Structure wall in Structure.WallList)
|
||||
{
|
||||
for (int x = -1; x <= 1; x += 2)
|
||||
{
|
||||
@@ -175,7 +179,7 @@ namespace Barotrauma
|
||||
endPoint = points[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
currPoint = endPoint;
|
||||
|
||||
}
|
||||
@@ -184,9 +188,6 @@ namespace Barotrauma
|
||||
return hullPoints;
|
||||
}
|
||||
|
||||
|
||||
float collisionRigidness = 1.0f;
|
||||
|
||||
public void Update(float deltaTime)
|
||||
{
|
||||
if (Position!=Vector2.Zero)
|
||||
|
||||
@@ -219,6 +219,12 @@ namespace Barotrauma
|
||||
|
||||
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 heightFromFloor = 100.0f;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user