SamplyGame.Background.CreateTile C# (CSharp) Method

CreateTile() private method

private CreateTile ( int index ) : Urho.Node
index int
return Urho.Node
		Node CreateTile(int index)
		{
			var cache = Application.ResourceCache;
			Node tile = Node.CreateChild();
			var planeNode = tile.CreateChild();
			planeNode.Scale = new Vector3(BackgroundScale, 0.0001f, BackgroundScale);
			var planeObject = planeNode.CreateComponent<StaticModel>();
			planeObject.Model = cache.GetModel(Assets.Models.Plane);
			planeObject.SetMaterial(cache.GetMaterial(Assets.Materials.Grass));

			// area for trees:
			var sizeZ = BackgroundScale / 2.1f;
			var sizeX = BackgroundScale / 3.8f;

			Node treeNode = tile.CreateChild();
			treeNode.Rotate(new Quaternion(0, RandomHelper.NextRandom(0, 5) * 90, 0), TransformSpace.Local);
			treeNode.Scale = new Vector3(0.3f, 0.4f, 0.3f);
			var treeGroup = treeNode.CreateComponent<StaticModel>();
			treeGroup.Model = cache.GetModel(Assets.Models.Tree);
			treeGroup.SetMaterial(cache.GetMaterial(Assets.Materials.Pyramid));

			for (float i = -sizeX; i < sizeX; i += 3.2f)
			{
				for (float j = -sizeZ; j < sizeZ; j += 3.2f)
				{
					var clonedTreeNode = treeNode.Clone(CreateMode.Local);
					clonedTreeNode.Position = new Vector3(i + RandomHelper.NextRandom(-0.3f, 0.3f), 0, j);
				}
			}

			treeNode.Remove();

			tile.Rotate(new Quaternion(270 + BackgroundRotationX, 0, 0), TransformSpace.Local);
			tile.RotateAround(new Vector3(0, 0, 0), new Quaternion(0, BackgroundRotationY, 0), TransformSpace.Local);
			var tilePosX = BackgroundScale * (float)Math.Sin(MathHelper.DegreesToRadians(90 - BackgroundRotationX));
			var tilePosY = BackgroundScale * (float)Math.Sin(MathHelper.DegreesToRadians(BackgroundRotationX));
			tile.Position = new Vector3(0, (tilePosX + 0.01f) * index, tilePosY * index + FlightHeight);
			return tile;
		}
	}