Ballz.GameSession.World.Terrain.Update C# (CSharp) Method

Update() public method

public Update ( ) : void
return void
        public void Update()
        {
            if (WorkingRevision == Revision || WorkingShape != null)
                return;

            int currentRevision = WorkingRevision;

            lock (PublicShape)
            {
                WorkingShape = new TerrainShape
                {
                        TerrainBitmap = PublicShape.TerrainBitmap.Clone() as TerrainType[,]
                };
            }

            // Enqueue update-task
            var Task = new Task(() =>
            {
                ExtractTrianglesAndOutline();
                BuildTerrainTypeTexture();

                lock (PublicShape)
                {
                    // Copy new triangles/outline to TerrainShape
                    PublicShape = WorkingShape;
                    WorkingShape = null;
                    Revision = currentRevision;
                }
            });

            Task.Start();

            if (currentRevision == 1)
                Task.Wait();
        }

Usage Example

Exemplo n.º 1
0
        /// <summary>
        /// Removes the old terrain physics bodies and replaces them with new ones,
        /// generated from the given terrain.
        /// </summary>
        public void UpdateTerrainBody(Terrain terrain)
        {
            Terrain = terrain;
            foreach (var body in TerrainBodies)
            {
                var fixtures = body.FixtureList.ToArray();
                foreach (var fixture in fixtures)
                {
                    fixture.Dispose();
                }

                body.Dispose();
            }

            TerrainBodies.Clear();

            // Update the terrain explicitly
            terrain.Update();
            var outlines = terrain.GetOutline();
            
            foreach (var outline in outlines)
            {
                var vertices = new Vector2[outline.Count];

                for (int i = 0; i < outline.Count; i++)
                {
                    vertices[i] = outline[i] * terrain.Scale;
                }

                var shape = new ChainShape(new Vertices(vertices));

                var body = new Body(PhysicsWorld);
                body.BodyType = BodyType.Static;
                body.Friction = 1.0f;
                body.CreateFixture(shape);

                TerrainBodies.Add(body);
            }
        }