Beispiel #1
0
        protected override void OnUpdate(float timeStep)
        {
            if (Exiting)
            {
                return;
            }

            GeoLoadManager.CheckOrigin(PlayerNode.WorldPosition);

            var newNodes = PerlinBuilder.PopNewClusters();

            if (newNodes != null)
            {
                foreach (var newcluster in newNodes)
                {
                    var clusterNode = RootScene.CreateChild("Cluster" + newcluster.Origin.ToString());
                    clusterNode.AddComponent(new ClusterInfo(newcluster));
                }
            }

            Geometry.LoadLimiter.UpdateFrame();
            GeoLoadManager.UpdateGeoForPosition(CameraNode.WorldPosition);

            PostionGUI.Value = CameraNode.WorldPosition.ToString(6);
//             var cluster = World.ClusterFromPosition(CameraNode.WorldPosition);
//             if (cluster != null)
//             {
//                 PostionGUI.Value += " CO H" + cluster.Origin.H.ToString() + " V" + cluster.Origin.V.ToString();
//
//                 PostionGUI.Value += " BO H" + ((int)(CameraNode.WorldPosition.X - cluster.Origin.H)).ToString() + " V" + ((int)(CameraNode.WorldPosition.Z - cluster.Origin.V)).ToString();
//             }

            PostionGUI.Value += "Origin H" + GeoLoadManager.CurrentOrigin.H.ToString() + " V" + GeoLoadManager.CurrentOrigin.V.ToString();

            base.OnUpdate(timeStep);
        }
Beispiel #2
0
        public void SetupScene()
        {
            this.Renderer.TextureFilterMode = TextureFilterMode.Nearest;
            this.Renderer.TextureAnisotropy = 8;

            RootScene = new Scene();
            RootScene.CreateComponent <Octree>();

            RootScene.CreateComponent <DebugRenderer>();

            PerlinBuilder = new WorldBuilder.FlatBuilder();
            if (GenerateTerrain)
            {
                PerlinBuilder.BuildPerlin(string.Empty, null);
            }
            else
            {
                PerlinBuilder.Build(string.Empty, null);
            }

            GeoLoadManager.NeedCluster += PerlinBuilder.EnqueCluster;
            SetupCamera();

            PlayerNode = RootScene.CreateChild("local_player");
            PlayerNode.AddComponent(new PlayerAvatarController()
            {
                CameraNode = CameraNode.GetComponent <Camera>()
            });

            var depthTester = RootScene.CreateChild("depth_tester");

            depthTester.AddComponent(new DepthTester());

            SetupSky(World.Info.SunPosition.X, World.Info.SunPosition.Y, World.Info.SunPosition.Z);

            float d = World.DropDepth(PlayerNode.Position.X, PlayerNode.Position.Z);

            if (d != float.MinValue)
            {
                PlayerNode.Position = new Vector3(PlayerNode.Position.X, d, PlayerNode.Position.Z);
            }

            foreach (var texture in World.Info.Textures)
            {
                if (texture.RuntimeMat == null)
                {
                    Material mat = null;
                    if (System.IO.Path.GetExtension(texture.FileName).ToUpperInvariant() == ".XML")
                    {
                        mat = ResourceCache.GetMaterial(texture.FileName);
                    }
                    else
                    {
                        mat = Material.FromImage(texture.FileName);
                    }

                    texture.RuntimeMat = mat;
                }
            }

            foreach (var cluster in World.Clusters)
            {
                var clusterNode = RootScene.CreateChild("Cluster" + cluster.Key.ToString());
                clusterNode.AddComponent(new ClusterInfo(cluster.Value));
            }

            // start the geo generation process
            GeoLoadManager.UpdateGeoForPosition(CameraNode.WorldPosition);
        }