private void GenerateFloorObjectFromFloorShapes(List <GameTile> tiles) { GameObject finalFloorShape = new GameObject(); ProceduralShape finalShape = new ProceduralShape(); ProceduralPlane plane = new ProceduralPlane(); plane.SetColor(Color.LightGray.ChangeTone(RandomHelper.GetRandomInt(-20, 20))); plane.Scale(tiles[0].Scale); plane.Translate(tiles[0].Center); finalShape = plane; AddLineBatch(plane); for (int i = 1; i < tiles.Count; i++) { ProceduralPlane newPlane = new ProceduralPlane(); newPlane.SetColor(Color.LightGray.ChangeTone(RandomHelper.GetRandomInt(-20, 20))); newPlane.Scale(tiles[i].Scale); newPlane.Translate(tiles[i].Center); finalShape = ProceduralShape.Combine(finalShape, newPlane); AddLineBatch(newPlane); } finalFloorShape.AddComponent(new RenderGeometryComponent(finalShape)); finalFloorShape.AddComponent(new EffectRenderComponent(EffectLoader.LoadSM5Effect("flatshaded"))); finalFloorShape.AddComponent(new ShadowCasterComponent()); SystemCore.GameObjectManager.AddAndInitialiseGameObject(finalFloorShape); }
private static void CreateTestArena() { float arenaSize = 40f; ProceduralCuboid a = new ProceduralCuboid(arenaSize, 1, arenaSize / 5); a.Translate(new Vector3(0, arenaSize / 5, arenaSize)); a.SetColor(Color.LightGray); ProceduralShape b = a.Clone(); b.Translate(new Vector3(0, 0, -arenaSize * 2)); ProceduralShape c = ProceduralShape.Combine(a, b); ProceduralShape d = b.Clone(); d.Transform(MonoMathHelper.RotateNinetyDegreesAroundUp(true)); ProceduralShape e = ProceduralShape.Combine(c, d); var side2 = e.Clone(); var side3 = e.Clone(); var side4 = e.Clone(); e.Translate(new Vector3(-arenaSize * 2, 0, 0)); side2.Transform(MonoMathHelper.RotateHundredEightyDegreesAroundUp(true)); side2.Translate(new Vector3(arenaSize * 2, 0, 0)); side3.Transform(MonoMathHelper.RotateNinetyDegreesAroundUp(true)); side3.Translate(new Vector3(0, 0, arenaSize * 2)); side4.Transform(MonoMathHelper.RotateNinetyDegreesAroundUp(false)); side4.Translate(new Vector3(0, 0, -arenaSize * 2)); var final = ProceduralShape.Combine(e, side2, side3, side4); var arenaObject = GameObjectFactory.CreateRenderableGameObjectFromShape(final, EffectLoader.LoadSM5Effect("flatshaded")); arenaObject.AddComponent(new StaticMeshColliderComponent(arenaObject, final.GetVertices(), final.GetIndicesAsInt().ToArray(), Vector3.Zero)); arenaObject.AddComponent(new ShadowCasterComponent()); SystemCore.GameObjectManager.AddAndInitialiseGameObject(arenaObject); }
public void BakeAndSaveCurrentShape(string name) { List <ProceduralShape> shapes = shapesToBake.Values.ToList(); ProceduralShape combined = shapes[0]; for (int i = 1; i < shapes.Count; i++) { combined = ProceduralShape.Combine(combined, shapes[i]); } SaveShape(name, combined); }
public static ProceduralShape GetShapeFromModelWithUVs(Model model) { foreach (ModelMesh modelMesh in model.Meshes) { ProceduralShape shape = null; foreach (ModelMeshPart part in modelMesh.MeshParts) { VertexPositionNormalTexture[] array = new VertexPositionNormalTexture[part.VertexBuffer.VertexCount]; VertexPositionColorTextureNormal[] newArray = new VertexPositionColorTextureNormal[part.VertexBuffer.VertexCount]; short[] indices = new short[part.IndexBuffer.IndexCount]; part.IndexBuffer.GetData <short>(indices); part.VertexBuffer.GetData <VertexPositionNormalTexture>(array); for (int i = 0; i < array.Length; i++) { newArray[i] = new VertexPositionColorTextureNormal(array[i].Position, Color.DarkGray, array[i].TextureCoordinate, array[i].Normal); } if (shape == null) { shape = new ProceduralShape(newArray, indices); } else { shape = ProceduralShape.Combine(shape, new ProceduralShape(newArray, indices)); } return(shape); } } return(null); }
private static GameObject CreateTestArena(float arenaSize) { ProceduralShapeBuilder floor = new ProceduralShapeBuilder(); floor.AddSquareFace(new Vector3(arenaSize, 0, arenaSize), new Vector3(-arenaSize, 0, arenaSize), new Vector3(arenaSize, 0, -arenaSize), new Vector3(-arenaSize, 0, -arenaSize)); ProceduralShape arenaFloor = floor.BakeShape(); arenaFloor.SetColor(Color.DarkOrange); ProceduralCuboid a = new ProceduralCuboid(arenaSize, 1, arenaSize / 5); a.Translate(new Vector3(0, arenaSize / 5, arenaSize)); a.SetColor(Color.LightGray); ProceduralShape b = a.Clone(); b.Translate(new Vector3(0, 0, -arenaSize * 2)); ProceduralShape c = ProceduralShape.Combine(a, b); ProceduralShape d = b.Clone(); d.Transform(MonoMathHelper.RotateNinetyDegreesAroundUp(true)); ProceduralShape e = ProceduralShape.Combine(arenaFloor, c, d); var side2 = e.Clone(); var side3 = e.Clone(); var side4 = e.Clone(); e.Translate(new Vector3(-arenaSize * 2, 0, 0)); side2.Transform(MonoMathHelper.RotateHundredEightyDegreesAroundUp(true)); side2.Translate(new Vector3(arenaSize * 2, 0, 0)); side3.Transform(MonoMathHelper.RotateNinetyDegreesAroundUp(true)); side3.Translate(new Vector3(0, 0, arenaSize * 2)); side4.Transform(MonoMathHelper.RotateNinetyDegreesAroundUp(false)); side4.Translate(new Vector3(0, 0, -arenaSize * 2)); var final = ProceduralShape.Combine(e, side2, side3, side4, arenaFloor); var arenaObject = GameObjectFactory.CreateRenderableGameObjectFromShape(final, EffectLoader.LoadSM5Effect("flatshaded")); arenaObject.AddComponent(new StaticMeshColliderComponent(arenaObject, final.GetVertices(), final.GetIndicesAsInt().ToArray())); // arenaObject.AddComponent(new RotatorComponent(Vector3.Up, 0.0001f)); SystemCore.GameObjectManager.AddAndInitialiseGameObject(arenaObject); LineBatch l = new LineBatch(new Vector3(-arenaSize, 0.1f, -arenaSize), new Vector3(-arenaSize, 0.1f, arenaSize), new Vector3(arenaSize, 0.1f, arenaSize), new Vector3(arenaSize, 0.1f, -arenaSize), new Vector3(-arenaSize, 0.1f, -arenaSize)); GameObject lineObject = SystemCore.GameObjectManager.AddLineBatchToScene(l); arenaObject.AddChild(lineObject); return(arenaObject); }