Example #1
0
        // Start is called before the first frame update
        void Start()
        {
            collisionMeshController = CollisionMesh.GetComponent <CollisionMeshController>();
            flatCollisionGrid       = FlatMesh.GetComponent <FlatCollisionGrid>();
            backgroundController    = BackgroundController.GetComponent <BackgroundController>();

            roomData = new RoomReader().ReadRoomData($"{mapFilepath}.TFS", $"{mapFilepath}.MAP");
            camera   = Camera.main;

            cameraOrigin = (roomData.MAPData.Settings.CameraOrigin.ToVector3() / 10f);
            cameraTarget = (roomData.MAPData.Settings.CameraTranslation.ToVector3() / 10f);

            camera.transform.position = cameraOrigin;
            camera.transform.LookAt(cameraTarget);
            //zoom = roomData.MAPData.Settings.Zoom;
            //camera.transform.position += ((cameraTarget - cameraOrigin).normalized * (roomData.MAPData.Settings.Zoom)) / 10f;
            //camera.transform.rotation = Quaternion.Euler(roomData.MAPData.Settings.CameraTranslation.ToVector3());

            backgroundController.Initialise(roomData);

            var collisionMapData
                = new CollisionMapData(roomData.MAPData.Collision.CollisionMap, 3);

            //collisionMesh.transform.position = new Vector3(-100, 0, -100);
            //collisionMeshController.Initialise(100, 10, 100, 2);
            //collisionMeshController.GenerateMesh(collisionMapData);

            flatCollisionGrid.Generate(-100, -100, 2, roomData.MAPData.Collision.CollisionMap);
        }
Example #2
0
        public void GenerateMesh(CollisionMapData mapData)
        {
            for (int x = 0; x < Width; ++x)
            {
                for (int y = 0; y < Height; ++y)
                {
                    for (int z = 0; z < Length; ++z)
                    {
                        CollisionType curBlock = mapData.GetBlock(x, y, z);

                        // If this block is solid
                        if (curBlock == CollisionType.SOLID)
                        {
                            // Compare the block to all of its neighbours. Any
                            // side that faces air should have a face rendered.
                            float scaledX = x * scale;
                            float scaledY = y * scale;
                            float scaledZ = z * scale;

                            if (mapData.GetBlock(x, y + 1, z) == CollisionType.EMPTY)
                            {
                                CreateCubeTopFace(scaledX, scaledY, scaledZ);
                            }

                            if (mapData.GetBlock(x, y, z + 1) == CollisionType.EMPTY)
                            {
                                CreateCubeNorthFace(scaledX, scaledY, scaledZ);
                            }

                            if (mapData.GetBlock(x + 1, y, z) == CollisionType.EMPTY)
                            {
                                CreateCubeEastFace(scaledX, scaledY, scaledZ);
                            }

                            if (mapData.GetBlock(x, y, z - 1) == CollisionType.EMPTY)
                            {
                                CreateCubeSouthFace(scaledX, scaledY, scaledZ);
                            }

                            if (mapData.GetBlock(x - 1, y, z) == CollisionType.EMPTY)
                            {
                                CreateCubeWestFace(scaledX, scaledY, scaledZ);
                            }

                            if (mapData.GetBlock(x, y - 1, z) == CollisionType.EMPTY)
                            {
                                CreateCubeBottomFace(scaledX, scaledY, scaledZ);
                            }
                        }
                    }
                }
            }

            UpdateMesh();
        }