Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }