Esempio n. 1
0
        public void TestRecreationOfChildNodeAfterRemovalByReference()
        {
            Node node      = new SceneNode(this.sceneManager);
            Node childNode = node.CreateChild(Name);

            node.RemoveChild(childNode);
            node.CreateChild(Name);
        }
        public void TestRecreationOfChildNodeAfterRemovalByName()
        {
            Node node = new SceneNode(this.fakeSceneManager);

            node.CreateChild(Name);

            node.RemoveChild(Name);
            node.CreateChild(Name);
        }
        public void TestReaddingOfChildNodeAfterRemovalByName()
        {
            Node node      = new SceneNode(this.fakeSceneManager);
            Node childNode = node.CreateChild(Name);

            node.RemoveChild(Name);
            node.AddChild(childNode);
        }
Esempio n. 4
0
        public void Init(ref SceneNode ParentSceneNode, int tableX, int tableZ, int tileX, int tileZ)
        {
            init = true;

            Vector3 ParentPos = ParentSceneNode.DerivedPosition;

            info.PageX = tableX;
            info.PageZ = tableZ;
            info.TileX = tileX;
            info.TileZ = tileZ;
            // Calculate the offset from the parent for this tile

            Vector3 scale = Options.Instance.Scale;
            float   endx  = Options.Instance.TileSize * scale.x;
            float   endz  = Options.Instance.TileSize * scale.z;

            info.PosX = info.TileX * endx;
            info.PosZ = info.TileZ * endz;

            name          = String.Format("tile[{0},{1}][{2},{3}]", info.PageX, info.PageZ, info.TileX, info.TileZ);
            tileSceneNode = (SceneNode)ParentSceneNode.CreateChild(name);

            // figure out scene node position within parent
            tileSceneNode.Position = new Vector3(info.PosX, 0, info.PosZ);

            tileSceneNode.AttachObject(this);

            float MaxHeight = Data2DManager.Instance.GetMaxHeight(info.PageX, info.PageZ);

            bounds.SetExtents(new Vector3(0, 0, 0), new Vector3((float)(endx), MaxHeight, (float)(endz)));

            //Change Zone of this page
            boundsExt.SetExtents(new Vector3(-endx * 0.5f, -MaxHeight * 0.5f, -endz * 0.5f), new Vector3(endx * 1.5f, MaxHeight * 1.5f, endz * 1.5f));

            //Change Zone of this page

            this.worldAABB.SetExtents(new Vector3(info.PosX + ParentPos.x, 0, info.PosZ + ParentPos.z), new Vector3((float)(info.PosX + ParentPos.x + endx), MaxHeight, (float)(info.PosZ + ParentPos.z + endz)));
            //this.worldBounds.SetExtents( new Vector3(info.PosX + ParentPos.x ,0, info.PosZ + ParentPos.z), new Vector3((float)( info.PosX + ParentPos.x + endx), MaxHeight, (float)( info.PosZ + ParentPos.z + endz) ));

            for (long i = 0; i < 4; i++)
            {
                neighbors[i] = null;
            }
            //force update in scene node
            //tileSceneNode.update( true, true );
            tileSceneNode.NeedUpdate();
            loaded = false;
        }
Esempio n. 5
0
        // Just override the mandatory create scene method
        public override void CreateScene()
        {
            // Set ambient light
            sceneMgr.AmbientLight = new ColourValue(0.5f, 0.5f, 0.5f);

            // Create a skydome
            sceneMgr.SetSkyDome(true, "Examples/CloudySky", 5, 8);

            // Create shared node for 2 fountains
            mFountainNode = (SceneNode)(sceneMgr.RootSceneNode.CreateChild());

            // smoke
            ParticleSystem pSys2 = sceneMgr.CreateParticleSystem("fountain1",
                                                                 "Examples/Smoke");
            // Point the fountain at an angle
            SceneNode fNode = (SceneNode)(mFountainNode.CreateChild());
            fNode.AttachObject(pSys2);
        }
Esempio n. 6
0
        // Just override the mandatory create scene method
        public override void CreateScene()
        {
            // Set ambient light
            sceneMgr.AmbientLight = new ColourValue(0.5f, 0.5f, 0.5f);

            // Create a skydome
            sceneMgr.SetSkyDome(true, "Examples/CloudySky", 5, 8);

            // Create shared node for 2 fountains
            mFountainNode = (SceneNode)(sceneMgr.RootSceneNode.CreateChild());

            // smoke
            ParticleSystem pSys2 = sceneMgr.CreateParticleSystem("fountain1",
                                                                 "Examples/Smoke");
            // Point the fountain at an angle
            SceneNode fNode = (SceneNode)(mFountainNode.CreateChild());

            fNode.AttachObject(pSys2);
        }
        public override void LoadWorldGeometry(string fileName)
        {
            TerrainOptions options = new TerrainOptions();

            DataSet optionData = new DataSet();

            optionData.ReadXml(fileName);
            DataTable table = optionData.Tables[0];
            DataRow   row   = table.Rows[0];

            string terrainFileName = "";
            string detailTexture   = "";
            string worldTexture    = "";

            if (table.Columns["Terrain"] != null)
            {
                terrainFileName = (string)row["Terrain"];
            }

            if (table.Columns["DetailTexture"] != null)
            {
                detailTexture = (string)row["DetailTexture"];
            }

            if (table.Columns["WorldTexture"] != null)
            {
                worldTexture = (string)row["WorldTexture"];
            }

            if (table.Columns["MaxMipMapLevel"] != null)
            {
                options.maxMipmap = Convert.ToInt32(row["MaxMipMapLevel"]);
            }

            if (table.Columns["DetailTile"] != null)
            {
                options.detailTile = Convert.ToInt32(row["DetailTile"]);
            }

            if (table.Columns["MaxPixelError"] != null)
            {
                options.maxPixelError = Convert.ToInt32(row["MaxPixelError"]);
            }

            if (table.Columns["TileSize"] != null)
            {
                options.size = Convert.ToInt32(row["TileSize"]);
            }

            if (table.Columns["ScaleX"] != null)
            {
                options.scalex = StringConverter.ParseFloat((string)row["ScaleX"]);
            }

            if (table.Columns["ScaleY"] != null)
            {
                options.scaley = StringConverter.ParseFloat((string)row["ScaleY"]);
            }

            if (table.Columns["ScaleZ"] != null)
            {
                options.scalez = StringConverter.ParseFloat((string)row["ScaleZ"]);
            }

            if (table.Columns["VertexNormals"] != null)
            {
                options.isLit = ((string)row["VertexNormals"]) == "yes" ? true : false;
            }

            scale    = new Vector3(options.scalex, options.scaley, options.scalez);
            tileSize = options.size;

            // load the heightmap
            Image image = Image.FromFile(terrainFileName);

            // TODO: Check terrain size for 2^n + 1

            // get the data from the heightmap
            options.data = image.Data;

            options.worldSize = image.Width;

            float maxx = options.scalex * options.worldSize;
            float maxy = 255 * options.scaley;
            float maxz = options.scalez * options.worldSize;

            Resize(new AxisAlignedBox(Vector3.Zero, new Vector3(maxx, maxy, maxz)));

            terrainMaterial = CreateMaterial("Terrain");

            if (worldTexture != "")
            {
                terrainMaterial.GetTechnique(0).GetPass(0).CreateTextureUnitState(worldTexture, 0);
            }

            if (detailTexture != "")
            {
                terrainMaterial.GetTechnique(0).GetPass(0).CreateTextureUnitState(detailTexture, 1);
            }

            terrainMaterial.Lighting = options.isLit;
            terrainMaterial.Load();

            terrainRoot = (SceneNode)RootSceneNode.CreateChild("TerrainRoot");

            numTiles = (options.worldSize - 1) / (options.size - 1);

            tiles = new TerrainRenderable[numTiles, numTiles];

            int p = 0, q = 0;

            for (int j = 0; j < options.worldSize - 1; j += (options.size - 1))
            {
                p = 0;

                for (int i = 0; i < options.worldSize - 1; i += (options.size - 1))
                {
                    options.startx = i;
                    options.startz = j;

                    string name = string.Format("Tile[{0},{1}]", p, q);

                    SceneNode         node = (SceneNode)terrainRoot.CreateChild(name);
                    TerrainRenderable tile = new TerrainRenderable();
                    tile.Name = name;

                    tile.SetMaterial(terrainMaterial);
                    tile.Init(options);

                    tiles[p, q] = tile;

                    node.AttachObject(tile);

                    p++;
                }

                q++;
            }

            int size1 = tiles.GetLength(0);
            int size2 = tiles.GetLength(1);

            for (int j = 0; j < size1; j++)
            {
                for (int i = 0; i < size2; i++)
                {
                    if (j != size1 - 1)
                    {
                        ((TerrainRenderable)tiles[i, j]).SetNeighbor(Neighbor.South, (TerrainRenderable)tiles[i, j + 1]);
                        ((TerrainRenderable)tiles[i, j + 1]).SetNeighbor(Neighbor.North, (TerrainRenderable)tiles[i, j]);
                    }

                    if (i != size2 - 1)
                    {
                        ((TerrainRenderable)tiles[i, j]).SetNeighbor(Neighbor.East, (TerrainRenderable)tiles[i + 1, j]);
                        ((TerrainRenderable)tiles[i + 1, j]).SetNeighbor(Neighbor.West, (TerrainRenderable)tiles[i, j]);
                    }
                }
            }

#if NOT_USED
            if (false)            // && options.isLit) //TODO: Fix
            {
                for (int j = 0; j < size1; j++)
                {
                    for (int i = 0; i < size2; i++)
                    {
                        ((TerrainRenderable)tiles[i, j]).CalculateNormals();
                    }
                }
            }
#endif
            this.terrainOptions = options;             //we need these later for GetHeightAt, so make them a member variable
        }