Forráskód Böngészése

Added tutorial project

Jorn Theunissen 6 éve
szülő
commit
fdaa844c10
57 módosított fájl, 1304 hozzáadás és 253 törlés
  1. 14 0
      Tutorials/.gitignore
  2. BIN
      Tutorials/Tutorials.Windows/Resources/Icon.ico
  3. 20 0
      Tutorials/Tutorials.Windows/Tutorials.Windows.csproj
  4. 17 0
      Tutorials/Tutorials.Windows/Tutorials.Windows.xkpkg
  5. 15 0
      Tutorials/Tutorials.Windows/TutorialsApp.cs
  6. 31 0
      Tutorials/Tutorials.sln
  7. 62 0
      Tutorials/Tutorials/Assets/GameSettings.xkgamesettings
  8. 203 0
      Tutorials/Tutorials/Assets/GraphicsCompositor.xkgfxcomp
  9. 23 0
      Tutorials/Tutorials/Assets/Materials/Blue.xkmat
  10. 23 0
      Tutorials/Tutorials/Assets/Materials/Green.xkmat
  11. 12 0
      Tutorials/Tutorials/Assets/Materials/Ground.xkpromodel
  12. 8 0
      Tutorials/Tutorials/Assets/Materials/Skybox texture.xktex
  13. 5 0
      Tutorials/Tutorials/Assets/Materials/Skybox.xksky
  14. 11 0
      Tutorials/Tutorials/Assets/Materials/Sphere.xkpromodel
  15. 23 0
      Tutorials/Tutorials/Assets/Materials/Yellow.xkmat
  16. 85 0
      Tutorials/Tutorials/Assets/Scenes/Basics/1-Getting the entity.xkscene
  17. 84 0
      Tutorials/Tutorials/Assets/Scenes/SceneTemplate.xkscene
  18. 26 0
      Tutorials/Tutorials/Basics/BasicsGetComponent.cs
  19. 26 0
      Tutorials/Tutorials/Basics/BasicsTransform.cs
  20. 26 0
      Tutorials/Tutorials/Basics/BasicsTranslateAndRotate.cs
  21. 41 0
      Tutorials/Tutorials/Basics/GettingTheEntity.cs
  22. BIN
      Tutorials/Tutorials/Resources/skybox_texture_hdr.dds
  23. 18 0
      Tutorials/Tutorials/Tutorials.csproj
  24. 18 0
      Tutorials/Tutorials/Tutorials.xkpkg
  25. 46 37
      en/docfx.json
  26. 2 2
      en/index.md
  27. 2 2
      en/media/xk-icon-release-notes.png
  28. 3 0
      en/media/xk-icon-tutorials.png
  29. 1 0
      en/template/partials/breadcrumb.tmpl.partial
  30. 1 1
      en/template/partials/footer.tmpl.partial
  31. 1 0
      en/template/partials/navbar.tmpl.partial
  32. 1 0
      en/template/partials/searchResults.tmpl.partial
  33. 8 6
      en/template/styles/main.css
  34. 207 205
      en/template/styles/main.js
  35. 2 0
      en/toc.yml
  36. 8 0
      en/tutorials/csharpadvanced/index.md
  37. 10 0
      en/tutorials/csharpadvanced/shader.md
  38. 9 0
      en/tutorials/csharpbasics/deltaTime.md
  39. 9 0
      en/tutorials/csharpbasics/destroyingEntities.md
  40. 9 0
      en/tutorials/csharpbasics/editorProperties.md
  41. 11 0
      en/tutorials/csharpbasics/entity.md
  42. 9 0
      en/tutorials/csharpbasics/getButton.md
  43. 9 0
      en/tutorials/csharpbasics/getComponent.md
  44. 9 0
      en/tutorials/csharpbasics/getKey.md
  45. 9 0
      en/tutorials/csharpbasics/getMouse.md
  46. 18 0
      en/tutorials/csharpbasics/index.md
  47. 9 0
      en/tutorials/csharpbasics/instantiatingEntities.md
  48. 9 0
      en/tutorials/csharpbasics/loadScene.md
  49. 9 0
      en/tutorials/csharpbasics/lookAt.md
  50. 3 0
      en/tutorials/csharpbasics/media/getting-the-entity.png
  51. 10 0
      en/tutorials/csharpbasics/positionAndRotation.md
  52. 9 0
      en/tutorials/csharpbasics/startAndUpdate.md
  53. 10 0
      en/tutorials/csharpbasics/transform.md
  54. 9 0
      en/tutorials/csharpintermediate/index.md
  55. 10 0
      en/tutorials/csharpintermediate/raycasting.md
  56. 29 0
      en/tutorials/index.md
  57. 22 0
      en/tutorials/toc.md

+ 14 - 0
Tutorials/.gitignore

@@ -0,0 +1,14 @@
+
+*.user
+*.lock
+*.lock.json
+.vs/
+_ReSharper*
+*.suo
+*.VC.db
+*.vshost.exe
+*.manifest
+*.sdf
+[Bb]in/
+obj/
+Cache/

BIN
Tutorials/Tutorials.Windows/Resources/Icon.ico


+ 20 - 0
Tutorials/Tutorials.Windows/Tutorials.Windows.csproj

@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net461</TargetFramework>
+    <ApplicationIcon>Resources\Icon.ico</ApplicationIcon>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>Tutorials.Windows</RootNamespace>
+
+    <OutputPath>..\Bin\Windows\$(Configuration)\</OutputPath>
+    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
+
+    <!-- Force msbuild to check to rebuild this assembly instead of letting VS IDE guess -->
+    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\Tutorials\Tutorials.csproj" />
+  </ItemGroup>
+
+</Project>

+ 17 - 0
Tutorials/Tutorials.Windows/Tutorials.Windows.xkpkg

@@ -0,0 +1,17 @@
+!Package
+SerializedVersion: {Assets: 3.1.0.0}
+Meta:
+    Name: Tutorials.Windows
+    Version: 1.0.0
+    Authors: []
+    Owners: []
+    Dependencies: null
+AssetFolders:
+    -   Path: !dir Assets
+ResourceFolders:
+    - !dir Resources
+OutputGroupDirectories: {}
+ExplicitFolders: []
+Bundles: []
+TemplateFolders: []
+RootAssets: []

+ 15 - 0
Tutorials/Tutorials.Windows/TutorialsApp.cs

@@ -0,0 +1,15 @@
+using Xenko.Engine;
+
+namespace Tutorials.Windows
+{
+    class TutorialsApp
+    {
+        static void Main(string[] args)
+        {
+            using (var game = new Game())
+            {
+                game.Run();
+            }
+        }
+    }
+}

+ 31 - 0
Tutorials/Tutorials.sln

@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.0.0
+MinimumVisualStudioVersion = 16.0.0.0
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorials.Windows", "Tutorials.Windows\Tutorials.Windows.csproj", "{24272B11-2C32-4380-A220-8CEC19311DAE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorials", "Tutorials\Tutorials.csproj", "{3E6CE5BD-34D1-4249-BFDF-833697807E14}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{24272B11-2C32-4380-A220-8CEC19311DAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{24272B11-2C32-4380-A220-8CEC19311DAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{24272B11-2C32-4380-A220-8CEC19311DAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{24272B11-2C32-4380-A220-8CEC19311DAE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3E6CE5BD-34D1-4249-BFDF-833697807E14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3E6CE5BD-34D1-4249-BFDF-833697807E14}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3E6CE5BD-34D1-4249-BFDF-833697807E14}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3E6CE5BD-34D1-4249-BFDF-833697807E14}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {EAC75442-D21F-4E64-85C2-FF9350472B4F}
+	EndGlobalSection
+EndGlobal

+ 62 - 0
Tutorials/Tutorials/Assets/GameSettings.xkgamesettings

@@ -0,0 +1,62 @@
+!GameSettingsAsset
+Id: 66354f1a-ad5a-4504-b892-293a74e9a496
+SerializedVersion: {Xenko: 3.1.0.1}
+Tags: []
+DefaultScene: 90c8a632-2df9-4335-8f09-24cb13e131b6:Scenes/Basics/1-Getting the entity
+GraphicsCompositor: 6fbf9e7f-5a64-4144-9f7e-42ab89526670:GraphicsCompositor
+Defaults:
+    - !Xenko.Audio.AudioEngineSettings,Xenko.Audio
+        HrtfSupport: false
+    - !Xenko.Assets.EditorSettings,Xenko.Assets
+        RenderingMode: HDR
+    - !Xenko.Navigation.NavigationSettings,Xenko.Navigation
+        EnableDynamicNavigationMesh: false
+        IncludedCollisionGroups: AllFilter
+        BuildSettings:
+            CellHeight: 0.2
+            CellSize: 0.3
+            TileSize: 32
+            MinRegionArea: 2
+            RegionMergeArea: 20
+            MaxEdgeLen: 12.0
+            MaxEdgeError: 1.3
+            DetailSamplingDistance: 6.0
+            MaxDetailSamplingError: 1.0
+        Groups:
+            -   Id: 86954b8d-dc80-440d-ac20-c135f3006105
+                Name: New group
+                AgentSettings:
+                    Height: 1.0
+                    MaxClimb: 0.25
+                    MaxSlope: {Radians: 0.7853982}
+                    Radius: 0.5
+    - !Xenko.Physics.PhysicsSettings,Xenko.Physics
+        Flags: None
+        MaxSubSteps: 1
+        FixedTimeStep: 0.0166666675
+    - !Xenko.Graphics.RenderingSettings,Xenko.Graphics
+        DefaultBackBufferWidth: 1280
+        DefaultBackBufferHeight: 720
+        AdaptBackBufferToScreen: false
+        DefaultGraphicsProfile: Level_11_0
+        ColorSpace: Linear
+        DisplayOrientation: LandscapeRight
+    - !Xenko.Streaming.StreamingSettings,Xenko.Rendering
+        ManagerUpdatesInterval: 0:00:00:00.0330000
+        ResourceLiveTimeout: 0:00:00:08.0000000
+    - !Xenko.Assets.Textures.TextureSettings,Xenko.Assets
+        TextureQuality: Fast
+Overrides: []
+PlatformFilters:
+    - PowerVR SGX 54[0-9]
+    - Adreno \(TM\) 2[0-9][0-9]
+    - Adreno (TM) 320
+    - Adreno (TM) 330
+    - Adreno \(TM\) 4[0-9][0-9]
+    - NVIDIA Tegra
+    - Intel(R) HD Graphics
+    - ^Mali\-4
+    - ^Mali\-T6
+    - ^Mali\-T7
+SplashScreenTexture: d26edb11-10bd-403c-b3c2-9c7fcccf25e5:XenkoDefaultSplashScreen
+SplashScreenColor: {R: 0, G: 0, B: 0, A: 255}

+ 203 - 0
Tutorials/Tutorials/Assets/GraphicsCompositor.xkgfxcomp

@@ -0,0 +1,203 @@
+!GraphicsCompositorAsset
+Id: 6fbf9e7f-5a64-4144-9f7e-42ab89526670
+SerializedVersion: {Xenko: 3.1.0.1}
+Tags: []
+Archetype: 823a81bf-bac0-4552-9267-aeed499c40df:DefaultGraphicsCompositorLevel10
+Cameras:
+    de2e75c3b2b23e54162686363f3f138e:
+        Id: c9cb3666-f711-498c-9878-292e79ed7993
+        Name: Main
+RenderStages:
+    47116750c1a5d449b4ad3625f71439b3:
+        Id: e2ec32a1-8921-4497-ae77-cdf712c26e44
+        Name: Opaque
+        EffectSlotName: Main
+        SortMode: !SortModeStateChange {}
+    9105a30fee026d4893472b6aee83d035:
+        Id: 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+        Name: Transparent
+        EffectSlotName: Main
+        SortMode: !BackToFrontSortMode {}
+    554e52c061404d4684dd7c4c70f70e0e:
+        Id: 07363ce1-02a6-45e6-b698-23cad0b3fbae
+        Name: ShadowMapCaster
+        EffectSlotName: ShadowMapCaster
+        SortMode: !FrontToBackSortMode {}
+    5a50638f5c514dc490c8c4f57cc88b57:
+        Id: 2d9f1bbe-cdc1-4f2e-b0f7-849d4a686435
+        Name: ShadowMapCasterParaboloid
+        EffectSlotName: ShadowMapCasterParaboloid
+        SortMode: !FrontToBackSortMode {}
+    bc1a77d2ab254a6e920f86cff65cd75e:
+        Id: ee671c29-af53-436e-ad61-682a5a57d2d8
+        Name: ShadowMapCasterCubeMap
+        EffectSlotName: ShadowMapCasterCubeMap
+        SortMode: !FrontToBackSortMode {}
+    33d9d311a1a65601da9ef56775477f95:
+        Id: 619b9ff9-c0fc-476f-a4bf-fc6742f1e379
+        Name: GBuffer
+        EffectSlotName: GBuffer
+        SortMode: !FrontToBackSortMode {}
+RenderFeatures:
+    d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering
+        RenderStageSelectors:
+            44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering
+                OpaqueRenderStage: ref!! e2ec32a1-8921-4497-ae77-cdf712c26e44
+                TransparentRenderStage: ref!! 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+                EffectName: XenkoForwardShadingEffect
+            6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering
+                ShadowMapRenderStage: ref!! 07363ce1-02a6-45e6-b698-23cad0b3fbae
+                EffectName: XenkoForwardShadingEffect.ShadowMapCaster
+            b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering
+                ShadowMapRenderStage: ref!! 2d9f1bbe-cdc1-4f2e-b0f7-849d4a686435
+                EffectName: XenkoForwardShadingEffect.ShadowMapCasterParaboloid
+            f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering
+                ShadowMapRenderStage: ref!! ee671c29-af53-436e-ad61-682a5a57d2d8
+                EffectName: XenkoForwardShadingEffect.ShadowMapCasterCubeMap
+            106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering
+                OpaqueRenderStage: ref!! 619b9ff9-c0fc-476f-a4bf-fc6742f1e379
+                EffectName: XenkoForwardShadingEffect.ShadowMapCaster
+        PipelineProcessors:
+            d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering
+                TransparentRenderStage: ref!! 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+            26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering
+                ShadowMapRenderStage: ref!! 07363ce1-02a6-45e6-b698-23cad0b3fbae
+            ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering
+                ShadowMapRenderStage: ref!! 2d9f1bbe-cdc1-4f2e-b0f7-849d4a686435
+                DepthClipping: true
+            ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering
+                ShadowMapRenderStage: ref!! ee671c29-af53-436e-ad61-682a5a57d2d8
+                DepthClipping: true
+        RenderFeatures:
+            86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {}
+            8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {}
+            f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {}
+            83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Rendering {}
+            65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering
+                LightRenderers:
+                    7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {}
+                    7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {}
+                    411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {}
+                    facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Rendering {}
+                    79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {}
+                    cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {}
+                    451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Rendering {}
+                ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Rendering
+                    Renderers:
+                        7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Rendering
+                            ShadowCasterRenderStage: ref!! 07363ce1-02a6-45e6-b698-23cad0b3fbae
+                        1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Rendering
+                            ShadowCasterRenderStage: ref!! 07363ce1-02a6-45e6-b698-23cad0b3fbae
+                        7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Rendering
+                            ShadowCasterRenderStage: ref!! 2d9f1bbe-cdc1-4f2e-b0f7-849d4a686435
+                        d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Rendering
+                            ShadowCasterRenderStage: ref!! ee671c29-af53-436e-ad61-682a5a57d2d8
+    28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering
+        RenderStageSelectors:
+            d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering
+                OpaqueRenderStage: ref!! e2ec32a1-8921-4497-ae77-cdf712c26e44
+                TransparentRenderStage: ref!! 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+                EffectName: Test
+    60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering
+        RenderStageSelectors:
+            11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering
+                RenderStage: ref!! e2ec32a1-8921-4497-ae77-cdf712c26e44
+                EffectName: Test
+    93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI
+        RenderStageSelectors:
+            14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering
+                RenderStage: ref!! 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+                EffectName: Test
+    9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles
+        RenderStageSelectors:
+            af1bd241305893ef8ff7952184e1cb0b: !Xenko.Particles.Rendering.ParticleEmitterTransparentRenderStageSelector,Xenko.Particles
+                OpaqueRenderStage: ref!! e2ec32a1-8921-4497-ae77-cdf712c26e44
+                TransparentRenderStage: ref!! 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+                EffectName: null
+        PipelineProcessors: {}
+SharedRenderers:
+    60459475d3a3adaf2d1ba5d99913ca75: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine
+        Id: 0b6144d5-d698-4222-8461-20ea84c886f9
+        Clear:
+            Id: 4bc4b2ca-027e-4e4a-94cb-2912709bef5f
+            Color: {R: 0.40491876, G: 0.411895424, B: 0.43775, A: 1.0}
+        LightProbes: true
+        OpaqueRenderStage: ref!! e2ec32a1-8921-4497-ae77-cdf712c26e44
+        TransparentRenderStage: ref!! 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+        ShadowMapRenderStages:
+            fc4d1e0de5c2b0bbc27bcf96e9a848fd: ref!! 07363ce1-02a6-45e6-b698-23cad0b3fbae
+        GBufferRenderStage: ref!! 619b9ff9-c0fc-476f-a4bf-fc6742f1e379
+        PostEffects: !PostProcessingEffects ref!! e92497d4-8f9d-4dbd-980c-3fa2d34cdd4a
+        LightShafts: null
+        VRSettings:
+            Enabled: false
+            RequiredApis: {}
+            Overlays: {}
+        SubsurfaceScatteringBlurEffect: null
+        MSAALevel: None
+        MSAAResolver: {}
+    d5b2e71c088247e21556decdce138d96: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine
+        Id: 51f51574-639f-40dc-ad22-9eadfbe9259b
+        Clear:
+            Id: 66a42307-1985-4316-871a-768449238c11
+            Color: {R: 0.40491876, G: 0.411895424, B: 0.43775, A: 1.0}
+        LightProbes: true
+        OpaqueRenderStage: ref!! e2ec32a1-8921-4497-ae77-cdf712c26e44
+        TransparentRenderStage: ref!! 5a243378-ab43-4a6d-a7e1-50a672ab8b87
+        ShadowMapRenderStages:
+            2323a99a8a983e182f318e55604659b0: ref!! 07363ce1-02a6-45e6-b698-23cad0b3fbae
+        GBufferRenderStage: ref!! 619b9ff9-c0fc-476f-a4bf-fc6742f1e379
+        PostEffects: null
+        LightShafts: null
+        VRSettings:
+            Enabled: false
+            RequiredApis: {}
+            Overlays: {}
+        SubsurfaceScatteringBlurEffect: null
+        MSAALevel: None
+        MSAAResolver: {}
+    34ecb9b2633eacfc439ba8744fe05102: !PostProcessingEffects
+        Id: e92497d4-8f9d-4dbd-980c-3fa2d34cdd4a
+        AmbientOcclusion:
+            Enabled: false
+        LocalReflections:
+            Enabled: false
+            ResolvePassResolution: Full
+            DepthResolution: Half
+        DepthOfField:
+            Enabled: false
+            DOFAreas: {X: 0.5, Y: 6.0, Z: 50.0, W: 200.0}
+        BrightFilter:
+            Color: {R: 1.0, G: 1.0, B: 1.0}
+        Bloom:
+            Distortion: {X: 1.0, Y: 1.0}
+            Afterimage:
+                Enabled: false
+        LightStreak:
+            Attenuation: 0.7
+        LensFlare: {}
+        ColorTransforms:
+            Transforms:
+                1e06f805f8b2e949a06c30d45fe413ef: !ToneMap
+                    Operator: !ToneMapHejl2Operator {}
+                c57351444609d14ea258b3f511ec8a74: !FilmGrain
+                    Enabled: false
+                e86e22e9a5d65545b8b55fca26e0afee: !Vignetting
+                    Enabled: false
+                    Color: {R: 0.0, G: 0.0, B: 0.0}
+        Antialiasing: !FXAAEffect {}
+    ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering
+        Id: 6aede51c-1c60-4a11-8bca-a1cf7a7ed31c
+        DebugRenderStages: {}
+Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine
+    Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2
+    Camera: ref!! c9cb3666-f711-498c-9878-292e79ed7993
+    Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering
+        Id: 82568e46-92e7-421a-8dca-114a74e0cd69
+        Children:
+            d39c5ddbf8b7d5ca02bafb6496b1cc3c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 0b6144d5-d698-4222-8461-20ea84c886f9
+            01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 6aede51c-1c60-4a11-8bca-a1cf7a7ed31c
+    RenderMask: All
+SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 51f51574-639f-40dc-ad22-9eadfbe9259b
+Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 0b6144d5-d698-4222-8461-20ea84c886f9
+BlockPositions: {}

+ 23 - 0
Tutorials/Tutorials/Assets/Materials/Blue.xkmat

@@ -0,0 +1,23 @@
+!MaterialAsset
+Id: 031b2b43-313b-4d95-abdf-c1936970563c
+SerializedVersion: {Xenko: 2.0.0.0}
+Tags: []
+Attributes:
+    MicroSurface: !MaterialGlossinessMapFeature
+        GlossinessMap: !ComputeFloat
+            Value: 0.65
+    Diffuse: !MaterialDiffuseMapFeature
+        DiffuseMap: !ComputeColor
+            Value: {R: 0.13691172, G: 0.0470588244, B: 0.6, A: 1.0}
+    DiffuseModel: !MaterialDiffuseLambertModelFeature {}
+    Specular: !MaterialMetalnessMapFeature
+        MetalnessMap: !ComputeFloat
+            Value: 1.0
+    SpecularModel: !MaterialSpecularMicrofacetModelFeature
+        Fresnel: !MaterialSpecularMicrofacetFresnelSchlick {}
+        Visibility: !MaterialSpecularMicrofacetVisibilitySmithSchlickGGX {}
+        NormalDistribution: !MaterialSpecularMicrofacetNormalDistributionGGX {}
+        Environment: !MaterialSpecularMicrofacetEnvironmentGGXLUT {}
+    Overrides:
+        UVScale: {X: 1.0, Y: 1.0}
+Layers: {}

+ 23 - 0
Tutorials/Tutorials/Assets/Materials/Green.xkmat

@@ -0,0 +1,23 @@
+!MaterialAsset
+Id: ca5e832c-0dc0-42e8-bd85-fcb24bfd34f1
+SerializedVersion: {Xenko: 2.0.0.0}
+Tags: []
+Attributes:
+    MicroSurface: !MaterialGlossinessMapFeature
+        GlossinessMap: !ComputeFloat
+            Value: 0.65
+    Diffuse: !MaterialDiffuseMapFeature
+        DiffuseMap: !ComputeColor
+            Value: {R: 0.0, G: 0.875250041, B: 0.21881251, A: 1.0}
+    DiffuseModel: !MaterialDiffuseLambertModelFeature {}
+    Specular: !MaterialMetalnessMapFeature
+        MetalnessMap: !ComputeFloat
+            Value: 1.0
+    SpecularModel: !MaterialSpecularMicrofacetModelFeature
+        Fresnel: !MaterialSpecularMicrofacetFresnelSchlick {}
+        Visibility: !MaterialSpecularMicrofacetVisibilitySmithSchlickGGX {}
+        NormalDistribution: !MaterialSpecularMicrofacetNormalDistributionGGX {}
+        Environment: !MaterialSpecularMicrofacetEnvironmentGGXLUT {}
+    Overrides:
+        UVScale: {X: 1.0, Y: 1.0}
+Layers: {}

+ 12 - 0
Tutorials/Tutorials/Assets/Materials/Ground.xkpromodel

@@ -0,0 +1,12 @@
+!ProceduralModelAsset
+Id: c49ea161-783d-4d62-8380-0df75def5081
+SerializedVersion: {Xenko: 2.0.0.0}
+Tags: []
+Type: !PlaneProceduralModel
+    Size: {X: 10.0, Y: 10.0}
+    Tessellation: {X: 1, Y: 1}
+    Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+    UvScale: {X: 1.0, Y: 1.0}
+    LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0}
+    MaterialInstance:
+        Material: 619de649-4998-4996-bd74-085eaffdbbeb:Materials/Yellow

+ 8 - 0
Tutorials/Tutorials/Assets/Materials/Skybox texture.xktex

@@ -0,0 +1,8 @@
+!Texture
+Id: b7f73672-f9bf-44ae-8a04-0017010b4ca1
+SerializedVersion: {Xenko: 2.0.0.0}
+Tags: []
+Source: !file ../../Resources/skybox_texture_hdr.dds
+Type: !ColorTextureType
+    UseSRgbSampling: false
+    ColorKeyColor: {R: 255, G: 0, B: 255, A: 255}

+ 5 - 0
Tutorials/Tutorials/Assets/Materials/Skybox.xksky

@@ -0,0 +1,5 @@
+!SkyboxAsset
+Id: ae4fd991-6290-4c24-b73b-25d81a1a4837
+SerializedVersion: {Xenko: 2.0.0.0}
+Tags: []
+CubeMap: b7f73672-f9bf-44ae-8a04-0017010b4ca1:Materials/Skybox texture

+ 11 - 0
Tutorials/Tutorials/Assets/Materials/Sphere.xkpromodel

@@ -0,0 +1,11 @@
+!ProceduralModelAsset
+Id: 5178da4c-69ec-4123-a502-ef9925474f3d
+SerializedVersion: {Xenko: 2.0.0.0}
+Tags: []
+Type: !SphereProceduralModel
+    Tessellation: 30
+    Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+    UvScale: {X: 1.0, Y: 1.0}
+    LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0}
+    MaterialInstance:
+        Material: 031b2b43-313b-4d95-abdf-c1936970563c:Materials/Blue

+ 23 - 0
Tutorials/Tutorials/Assets/Materials/Yellow.xkmat

@@ -0,0 +1,23 @@
+!MaterialAsset
+Id: 619de649-4998-4996-bd74-085eaffdbbeb
+SerializedVersion: {Xenko: 2.0.0.0}
+Tags: []
+Attributes:
+    MicroSurface: !MaterialGlossinessMapFeature
+        GlossinessMap: !ComputeFloat
+            Value: 0.1
+    Diffuse: !MaterialDiffuseMapFeature
+        DiffuseMap: !ComputeColor
+            Value: {R: 0.687750041, G: 0.5696505, B: 0.0128953215, A: 1.0}
+    DiffuseModel: !MaterialDiffuseLambertModelFeature {}
+    Specular: !MaterialMetalnessMapFeature
+        MetalnessMap: !ComputeFloat
+            Value: 0.0
+    SpecularModel: !MaterialSpecularMicrofacetModelFeature
+        Fresnel: !MaterialSpecularMicrofacetFresnelSchlick {}
+        Visibility: !MaterialSpecularMicrofacetVisibilitySmithSchlickGGX {}
+        NormalDistribution: !MaterialSpecularMicrofacetNormalDistributionGGX {}
+        Environment: !MaterialSpecularMicrofacetEnvironmentGGXLUT {}
+    Overrides:
+        UVScale: {X: 1.0, Y: 1.0}
+Layers: {}

+ 85 - 0
Tutorials/Tutorials/Assets/Scenes/Basics/1-Getting the entity.xkscene

@@ -0,0 +1,85 @@
+!SceneAsset
+Id: 90c8a632-2df9-4335-8f09-24cb13e131b6
+SerializedVersion: {Xenko: 3.1.0.1}
+Tags: []
+ChildrenIds: []
+Offset: {X: 0.0, Y: 0.0, Z: 0.0}
+Hierarchy:
+    RootParts:
+        - ref!! a2e2cfe6-97bd-4f96-9930-ef8dea168845
+        - ref!! 7af5dbf3-45c6-4dba-a977-975704ed97f4
+        - ref!! 5ec5c7b2-a628-4e6c-a72f-ef252737b0ed
+    Parts:
+        -   Folder: null
+            Entity:
+                Id: 5ec5c7b2-a628-4e6c-a72f-ef252737b0ed
+                Name: I am a parent Entity
+                Components:
+                    a488444675253de2508951e2924379a1: !TransformComponent
+                        Id: 91bf5f7c-7d25-4d0e-91cf-3bde38e3eac1
+                        Position: {X: 0.0, Y: 0.5, Z: 0.0}
+                        Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0}
+                        Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+                        Children:
+                            e698141714dfaa91e3052a9b400da307: ref!! 4f6a503a-8849-4423-b3ce-666f4994e20c
+                    13e15fbfeeaeca3e2053429096c8dd79: !ModelComponent
+                        Id: dd5db5ca-8036-4799-a488-fd0c30199fb5
+                        Model: 5178da4c-69ec-4123-a502-ef9925474f3d:Materials/Sphere
+                        Materials: {}
+        -   Entity:
+                Id: 7af5dbf3-45c6-4dba-a977-975704ed97f4
+                Name: Directional light
+                Components:
+                    cf26351dfd6822268d36b77072bcc655: !TransformComponent
+                        Id: bc7f7339-8c74-4a10-8867-77d6b95eaf29
+                        Position: {X: 100.0, Y: 0.0, Z: 0.0}
+                        Rotation: {X: 1.131334E-08, Y: 0.9659258, Z: 0.258819044, W: -4.222196E-08}
+                        Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+                        Children: {}
+                    e3f271d9c2060484c44e8dfef59ed0e3: !LightComponent
+                        Id: d9dd4c8c-b2a7-4dfe-8f85-437580d5b8d6
+                        Type: !LightDirectional
+                            Color: !ColorRgbProvider
+                                Value: {R: 1.0, G: 1.0, B: 1.0}
+                            Shadow:
+                                Enabled: true
+                                Filter: !LightShadowMapFilterTypePcf
+                                    FilterSize: Filter5x5
+                                Size: Large
+                                DepthRange: {}
+                                PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {}
+                                ComputeTransmittance: false
+                                BiasParameters: {}
+                        Intensity: 20.0
+        -   Entity:
+                Id: a2e2cfe6-97bd-4f96-9930-ef8dea168845
+                Name: Camera
+                Components:
+                    d5dd94550dc377d8b1703c74aae2cee5: !TransformComponent
+                        Id: e33a8292-a713-482d-852a-3d3f83b51537
+                        Position: {X: 0.0, Y: 2.0, Z: -4.0}
+                        Rotation: {X: 5.70548142E-09, Y: 0.9914449, Z: 0.1305262, W: -4.33374332E-08}
+                        Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+                        Children: {}
+                    f1cc2f84c67fbd3cc50a22dd0ef605a5: !CameraComponent
+                        Id: 79a97726-8e7e-4937-ba35-8e3f6808189c
+                        Name: null
+                        Projection: Perspective
+                        Slot: c9cb3666-f711-498c-9878-292e79ed7993
+        -   Entity:
+                Id: b68b9a56-f5e9-4674-bf2d-f9a79ba2f15e
+                Name: This is a child Entity
+                Components:
+                    a488444675253de2508951e2924379a1: !TransformComponent
+                        Id: 4f6a503a-8849-4423-b3ce-666f4994e20c
+                        Position: {X: -1.0, Y: 1.0, Z: 0.0}
+                        Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0}
+                        Scale: {X: 0.5, Y: 0.5, Z: 0.5}
+                        Children: {}
+                    13e15fbfeeaeca3e2053429096c8dd79: !ModelComponent
+                        Id: 8368f8bd-a907-43f1-9a73-eeb166c23d8a
+                        Model: 5178da4c-69ec-4123-a502-ef9925474f3d:Materials/Sphere
+                        Materials:
+                            0944ccdb2e13484e06b8de9bfe3e665f~0: ca5e832c-0dc0-42e8-bd85-fcb24bfd34f1:Materials/Green
+                    32ce3a8e6022e179df7e6e1307fdc8cd: !Tutorials.Basics.GettingTheEntity,Tutorials
+                        Id: c6991602-3a4e-483c-a83c-977e108a0339

+ 84 - 0
Tutorials/Tutorials/Assets/Scenes/SceneTemplate.xkscene

@@ -0,0 +1,84 @@
+!SceneAsset
+Id: b34c47b8-02e0-43d6-a0e5-d0e7d6d62a8d
+SerializedVersion: {Xenko: 3.1.0.1}
+Tags: []
+ChildrenIds: []
+Offset: {X: 0.0, Y: 0.0, Z: 0.0}
+Hierarchy:
+    RootParts:
+        - ref!! 83a802dd-0eaf-4c68-87cd-752b02efac31
+        - ref!! fd2668a8-739a-4bf5-84be-b1183b90d224
+        - ref!! ec2f367a-24d7-48e6-8aa8-0cd45ba7a7f3
+        - ref!! abf12c3f-5480-4358-ba3a-2f492e5f56d3
+    Parts:
+        -   Entity:
+                Id: 83a802dd-0eaf-4c68-87cd-752b02efac31
+                Name: Camera
+                Components:
+                    d5dd94550dc377d8b1703c74aae2cee5: !TransformComponent
+                        Id: b69652ec-eb37-422a-ad86-257a09720f89
+                        Position: {X: 0.0, Y: 2.0, Z: -4.0}
+                        Rotation: {X: 5.70548142E-09, Y: 0.9914449, Z: 0.1305262, W: -4.33374332E-08}
+                        Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+                        Children: {}
+                    f1cc2f84c67fbd3cc50a22dd0ef605a5: !CameraComponent
+                        Id: 9629232b-a4cb-42c1-a117-5cd677acc9aa
+                        Name: null
+                        Projection: Perspective
+                        Slot: c9cb3666-f711-498c-9878-292e79ed7993
+        -   Entity:
+                Id: abf12c3f-5480-4358-ba3a-2f492e5f56d3
+                Name: Sphere
+                Components:
+                    a488444675253de2508951e2924379a1: !TransformComponent
+                        Id: d0a6fab3-f104-4b7a-a810-93db9c4832a6
+                        Position: {X: 0.0, Y: 0.5, Z: 0.0}
+                        Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0}
+                        Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+                        Children: {}
+                    13e15fbfeeaeca3e2053429096c8dd79: !ModelComponent
+                        Id: a701e296-85c6-4e91-a857-73795a16a1a8
+                        Model: 5178da4c-69ec-4123-a502-ef9925474f3d:Materials/Sphere
+                        Materials: {}
+        -   Entity:
+                Id: ec2f367a-24d7-48e6-8aa8-0cd45ba7a7f3
+                Name: Skybox light
+                Components:
+                    88b62d474d21080cf1a760192a108619: !TransformComponent
+                        Id: f920961e-0337-4144-a87f-1c31d06bf8ef
+                        Position: {X: 100.0, Y: 0.0, Z: 0.0}
+                        Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0}
+                        Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+                        Children: {}
+                    b6410438b41b6be62428102415f68a4e: !LightComponent
+                        Id: 869b8b79-d6b9-4cff-ad59-2c321d50c5c3
+                        Type: !LightSkybox
+                            Skybox: ae4fd991-6290-4c24-b73b-25d81a1a4837:Materials/Skybox
+                    073131bbebf95a3cbbe2d431328d38b1: !BackgroundComponent
+                        Id: 3c2ce549-6a51-4e8b-a956-b37e7eca7ff4
+                        Texture: b7f73672-f9bf-44ae-8a04-0017010b4ca1:Materials/Skybox texture
+        -   Entity:
+                Id: fd2668a8-739a-4bf5-84be-b1183b90d224
+                Name: Directional light
+                Components:
+                    cf26351dfd6822268d36b77072bcc655: !TransformComponent
+                        Id: f6df5916-ad70-482a-a4eb-f681b78582c9
+                        Position: {X: 100.0, Y: 0.0, Z: 0.0}
+                        Rotation: {X: 1.131334E-08, Y: 0.9659258, Z: 0.258819044, W: -4.222196E-08}
+                        Scale: {X: 1.0, Y: 1.0, Z: 1.0}
+                        Children: {}
+                    e3f271d9c2060484c44e8dfef59ed0e3: !LightComponent
+                        Id: bc45e7e1-f7a1-432a-9cbb-98eef34fcd8c
+                        Type: !LightDirectional
+                            Color: !ColorRgbProvider
+                                Value: {R: 1.0, G: 1.0, B: 1.0}
+                            Shadow:
+                                Enabled: true
+                                Filter: !LightShadowMapFilterTypePcf
+                                    FilterSize: Filter5x5
+                                Size: Large
+                                DepthRange: {}
+                                PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {}
+                                ComputeTransmittance: false
+                                BiasParameters: {}
+                        Intensity: 20.0

+ 26 - 0
Tutorials/Tutorials/Basics/BasicsGetComponent.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenko.Core.Mathematics;
+using Xenko.Input;
+using Xenko.Engine;
+
+namespace Tutorials.Basics
+{
+    public class GetComponent : SyncScript
+    {
+        // Declared public member fields and properties will show in the game studio
+
+        public override void Start()
+        {
+            // Initialization of the script.
+        }
+
+        public override void Update()
+        {
+            // Do stuff every new frame
+        }
+    }
+}

+ 26 - 0
Tutorials/Tutorials/Basics/BasicsTransform.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenko.Core.Mathematics;
+using Xenko.Input;
+using Xenko.Engine;
+
+namespace Tutorials.Basics
+{
+    public class BasicsTransform : SyncScript
+    {
+        // Declared public member fields and properties will show in the game studio
+
+        public override void Start()
+        {
+            // Initialization of the script.
+        }
+
+        public override void Update()
+        {
+            // Do stuff every new frame
+        }
+    }
+}

+ 26 - 0
Tutorials/Tutorials/Basics/BasicsTranslateAndRotate.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenko.Core.Mathematics;
+using Xenko.Input;
+using Xenko.Engine;
+
+namespace Tutorials.Basics
+{
+    public class BasicsTranslateAndRotate : SyncScript
+    {
+        // Declared public member fields and properties will show in the game studio
+
+        public override void Start()
+        {
+            // Initialization of the script.
+        }
+
+        public override void Update()
+        {
+            // Do stuff every new frame
+        }
+    }
+}

+ 41 - 0
Tutorials/Tutorials/Basics/GettingTheEntity.cs

@@ -0,0 +1,41 @@
+using Xenko.Core.Mathematics;
+using Xenko.Engine;
+
+namespace Tutorials.Basics {
+    /// <summary>
+    /// This script demonstrates how to access the entity where the script is attached to. 
+    /// We also learn how to access a parent of our entity and how to check if that entity exists.
+    /// </summary>
+    public class GettingTheEntity : SyncScript {
+        string name = "";
+        string parentName = "";
+
+        //Executes only once, at the start of the game
+        public override void Start() {
+            //We store the name of the Entity that we are attached to
+            name = Entity.Name;
+
+
+            //We retrieve the parent entity by using the GetParent() command.
+            Entity parentEntity = Entity.GetParent();
+
+            //It is possible that our entity does not have a parent. We therefor check if the parent is not null.
+            if (parentEntity != null) {
+                //We store the name of our Parent entity
+                parentName = parentEntity.Name;
+            }
+
+
+            //The above code can be shortened to 1 line by using the '?' operator  
+            parentName = Entity.GetParent()?.Name;
+        }
+
+        //Updates avery frame
+        public override void Update() {
+            //Using the 'DebugText.Print' command, we can quickly print information to the screen
+            DebugText.TextColor = Color.Red;
+            DebugText.Print(parentName, new Int2(10, 20));
+            DebugText.Print(name, new Int2(30, 40));
+        }
+    }
+}

BIN
Tutorials/Tutorials/Resources/skybox_texture_hdr.dds


+ 18 - 0
Tutorials/Tutorials/Tutorials.csproj

@@ -0,0 +1,18 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Xenko.Engine" Version="3.1.0.1-beta02-0674" />
+
+    <PackageReference Include="Xenko.Video" Version="3.1.0.1-beta02-0674" />
+    <PackageReference Include="Xenko.Physics" Version="3.1.0.1-beta02-0674" />
+    <PackageReference Include="Xenko.Navigation" Version="3.1.0.1-beta02-0674" />
+    <PackageReference Include="Xenko.Particles" Version="3.1.0.1-beta02-0674" />
+    <PackageReference Include="Xenko.UI" Version="3.1.0.1-beta02-0674" />
+
+    <PackageReference Include="Xenko.Core.Assets.CompilerApp" Version="3.1.0.1-beta02-0674" IncludeAssets="build;buildTransitive" />
+  </ItemGroup>
+</Project>

+ 18 - 0
Tutorials/Tutorials/Tutorials.xkpkg

@@ -0,0 +1,18 @@
+!Package
+SerializedVersion: {Assets: 3.1.0.0}
+Meta:
+    Name: Tutorials
+    Version: 1.0.0
+    Authors: []
+    Owners: []
+    Dependencies: null
+AssetFolders:
+    -   Path: !dir Assets
+    -   Path: !dir Effects
+ResourceFolders:
+    - !dir Resources
+OutputGroupDirectories: {}
+ExplicitFolders: []
+Bundles: []
+TemplateFolders: []
+RootAssets: []

+ 46 - 37
en/docfx.json

@@ -2,34 +2,34 @@
   "metadata": [
     {
       "src": [
-          {
-            "files": [
-              "sources/core/Xenko.Core/Xenko.Core.csproj",
-              "sources/core/Xenko.Core.IO/Xenko.Core.IO.csproj",
-              "sources/core/Xenko.Core.Mathematics/Xenko.Core.Mathematics.csproj",
-              "sources/core/Xenko.Core.MicroThreading/Xenko.Core.MicroThreading.csproj",
-              "sources/core/Xenko.Core.Serialization/Xenko.Core.Serialization.csproj",
-              "sources/assets/Xenko.Core.Assets/Xenko.Core.Assets.csproj",
-              "sources/engine/Xenko/Xenko.csproj",
-              "sources/engine/Xenko.Audio/Xenko.Audio.csproj",
-              "sources/engine/Xenko.Engine/Xenko.Engine.csproj",
-              "sources/engine/Xenko.Games/Xenko.Games.csproj",
-              "sources/engine/Xenko.Graphics/Xenko.Graphics.csproj",
-              "sources/engine/Xenko.Input/Xenko.Input.csproj",
-              "sources/engine/Xenko.Particles/Xenko.Particles.csproj",
-              "sources/engine/Xenko.Physics/Xenko.Physics.csproj",
-              "sources/engine/Xenko.Rendering/Xenko.Rendering.csproj",
-              "sources/engine/Xenko.Shaders/Xenko.Shaders.csproj",
-              "sources/engine/Xenko.UI/Xenko.UI.csproj",
-              "sources/engine/Xenko.VirtualReality/Xenko.VirtualReality.csproj",
-              "sources/engine/Xenko.Navigation/Xenko.Navigation.csproj"
-            ],
-            "cwd": "../../xenko",
-          }
-        ],
+        {
+          "files": [
+            "sources/core/Xenko.Core/Xenko.Core.csproj",
+            "sources/core/Xenko.Core.IO/Xenko.Core.IO.csproj",
+            "sources/core/Xenko.Core.Mathematics/Xenko.Core.Mathematics.csproj",
+            "sources/core/Xenko.Core.MicroThreading/Xenko.Core.MicroThreading.csproj",
+            "sources/core/Xenko.Core.Serialization/Xenko.Core.Serialization.csproj",
+            "sources/assets/Xenko.Core.Assets/Xenko.Core.Assets.csproj",
+            "sources/engine/Xenko/Xenko.csproj",
+            "sources/engine/Xenko.Audio/Xenko.Audio.csproj",
+            "sources/engine/Xenko.Engine/Xenko.Engine.csproj",
+            "sources/engine/Xenko.Games/Xenko.Games.csproj",
+            "sources/engine/Xenko.Graphics/Xenko.Graphics.csproj",
+            "sources/engine/Xenko.Input/Xenko.Input.csproj",
+            "sources/engine/Xenko.Particles/Xenko.Particles.csproj",
+            "sources/engine/Xenko.Physics/Xenko.Physics.csproj",
+            "sources/engine/Xenko.Rendering/Xenko.Rendering.csproj",
+            "sources/engine/Xenko.Shaders/Xenko.Shaders.csproj",
+            "sources/engine/Xenko.UI/Xenko.UI.csproj",
+            "sources/engine/Xenko.VirtualReality/Xenko.VirtualReality.csproj",
+            "sources/engine/Xenko.Navigation/Xenko.Navigation.csproj"
+          ],
+          "cwd": "../../xenko",
+        }
+      ],
       "dest": "api",
       "properties": {
-          "XenkoBuildDoc": "true"
+        "XenkoBuildDoc": "true"
       }
     }
   ],
@@ -38,7 +38,13 @@
     "content": [
       {
         "files": [
-          "toc.yml", "*.md", "manual/**/*.md", "api/*.md", "api/*.yml", "ReleaseNotes/*.md"
+          "toc.yml",
+          "*.md",
+          "manual/**/*.md",
+          "api/*.md",
+          "api/*.yml",
+          "ReleaseNotes/*.md",
+          "tutorials/**/*.md"
         ],
         "case": false,
         "noNegate": false,
@@ -51,14 +57,16 @@
     "resource": [
       {
         "files": [
-          "web.config", "download/**", "studio_getting_started_links.txt",
-		  "**/media/**/*.png", 
-		  "**/media/**/*.jpg", 
-		  "**/media/**/*.gif", 
-		  "**/media/**/*.mp4", 
-		  "**/media/**/*.zip", 
-		  "**/media/**/*.svg",
-		  "**/media/**/*.cs"
+          "web.config",
+          "download/**",
+          "studio_getting_started_links.txt",
+          "**/media/**/*.png",
+          "**/media/**/*.jpg",
+          "**/media/**/*.gif",
+          "**/media/**/*.mp4",
+          "**/media/**/*.zip",
+          "**/media/**/*.svg",
+          "**/media/**/*.cs"
         ],
         "case": false,
         "noNegate": false,
@@ -74,8 +82,9 @@
     },
     "dest": "../_site/en",
     "template": [
-      "default", "template"
+      "default",
+      "template"
     ],
     "serve": false
   }
-}
+}

+ 2 - 2
en/index.md

@@ -55,7 +55,7 @@
 		</a>
 	</li>
 	<li>
-		<a href="Tutorials/index.html">
+		<a href="tutorials/index.html">
 			<div class="xk-documentation-image">
 				![Release notes](media/xk-icon-tutorials.png "Tutorials")
 			</div>
@@ -65,7 +65,7 @@
 				</h2>
 				<div class="xi_arrowLink"></div>
 				<p class="hidden-xs">
-					Tutorials of the Xenko API
+					Tutorials for the Xenko game engine
 				</p>
 			</div>
 		</a>

+ 2 - 2
en/media/xk-icon-release-notes.png

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:0aecf7048a3714a2d17904e3e3dbb573abc132c53bc520136c762446fc96a119
-size 7192
+oid sha256:e4081540774dfc5ffa611c34a9a00a6c26374159af31fa1f242b839a5529a762
+size 5124

+ 3 - 0
en/media/xk-icon-tutorials.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:37726c837be6fac4c95bd6b05d8bfc5789e64e038b35146d81e51314988c3c97
+size 11313

+ 1 - 0
en/template/partials/breadcrumb.tmpl.partial

@@ -10,6 +10,7 @@
 			<li><a href="{{_rel}}manual/index.html">Manual</a></li>
 			<li><a href="{{_rel}}api/index.html">API</a></li>
 			<li><a href="{{_rel}}ReleaseNotes/index.html">Release notes</a></li> 	
+			<li><a href="{{_rel}}tutorials/index.html">Tutorials</a></li> 	
 		</ul>-->
 	</div>
 </div>

+ 1 - 1
en/template/partials/footer.tmpl.partial

@@ -3,7 +3,7 @@
 <footer>
   <div class="inner-footer">
     <p><a href="#top">Back to top</a></p>
-    <p>Copyright © 2018 Xenko Team<br>Generated by <strong>DocFX</strong></p>
+    <p>Copyright © 2019 Xenko Team<br>Generated by <strong>DocFX</strong></p>
   </div>
 </footer>
 <script src="//xenko.com/scripts/theme.js" type="text/javascript"></script>

+ 1 - 0
en/template/partials/navbar.tmpl.partial

@@ -15,6 +15,7 @@
                 <li><a href="{{_rel}}manual">Manual</a></li>
                 <li><a href="{{_rel}}api/index.html">API</a></li>
                 <li><a href="{{_rel}}ReleaseNotes.html">Release Notes</a></li>
+                <li><a href="{{_rel}}tutorials/tutorials.html">Tutorials</a></li>
             </ul>
             -->
              <ul class="x_menu">

+ 1 - 0
en/template/partials/searchResults.tmpl.partial

@@ -21,6 +21,7 @@
     <span class="xk-visibility"> ・<span><span id="xk-manual"></span> results</span> in manual </span>
     <span class="xk-visibility"> ・<span><span id="xk-api"></span> results</span> in API </span>
     <span class="xk-visibility"> ・ <span><span id="xk-releasenotes"></span> results</span> in release notes </span>
+    <span class="xk-visibility"> ・ <span><span id="xk-tutorials"></span> results</span> in tutorials </span>
     <span class="xk-visibility hidden"> ・ <span class="xk-searching-link"> All <span id="xk-all"></span> results </span></span>
   </div>-->
   <div class="sr-items"></div>

+ 8 - 6
en/template/styles/main.css

@@ -503,7 +503,7 @@ h5{
     margin-bottom: 10px;
     max-width: calc(100% - 5px);
 }
-.xk-custom-breadcrumb + article.content h2|{
+.xk-custom-breadcrumb + article.content h2{
     margin-top: 16px;
 }
 .xk-custom-breadcrumb + article.content h3,
@@ -584,17 +584,19 @@ h5{
     display: flex;
     justify-content: center;
     align-items: center;
-    min-width: 165px;
+    min-width: 128px;
 }
-.xk-documentation-list li:first-child .xk-documentation-image img{
+.xk-documentation-list .xk-documentation-image img{
     max-width: 128px;
 }
-.xk-documentation-list li:nth-child(2) .xk-documentation-image img{
+.xk-documentation-list li:nth-child(2) .xk-documentation-image img, .xk-documentation-list li:nth-child(3) .xk-documentation-image img{
     max-width: 165px;
-}
-.xk-documentation-list li:last-child .xk-documentation-image img{
     max-width: 165px;
 }
+.xk-documentation-list  li:nth-child(1) .xk-documentation-chapter, .xk-documentation-list  li:nth-child(4) .xk-documentation-chapter{
+    padding-left: 40px;
+}
+
 @media only screen and (max-width: 768px){
     .xk-documentation-list{
         margin-left: -15px;

+ 207 - 205
en/template/styles/main.js

@@ -1,20 +1,20 @@
-$(function() {
+$(function () {
 
   var MOBILECONS = 767;
 
-  function showCaptionFromAlt(selector){
-    $(selector).each(function() {
-      $(this).after( '<span class="img-caption">' + $(this).attr('alt') + '</span>' );
+  function showCaptionFromAlt(selector) {
+    $(selector).each(function () {
+      $(this).after('<span class="img-caption">' + $(this).attr('alt') + '</span>');
     });
   };
-  
+
   // Function to start searching when user clicked in the search icon
-  $('#search').on('submit', function(e){
+  $('#search').on('submit', function (e) {
     // Remove default events from form
-    if (e.preventDefault) { 
-       e.preventDefault();
+    if (e.preventDefault) {
+      e.preventDefault();
     } else {
-       e.returnValue = false; 
+      e.returnValue = false;
     }
     // Activation keys are pressed, which causes the search function
     $('#search-query').trigger('input');
@@ -22,236 +22,238 @@ $(function() {
   // Captions are not automatically shown anymore by default; uncomment to reenable them
   //showCaptionFromAlt("article img");
 
-    // Control the sizes of sidebar and content part (saved, dynamic changed, etc.)
-    function apiDocSizeControl(){
-        "use srtict"
-        function resizableTOC(){      
-        // If object "sizes" saved already
-        if(localStorage.getItem('sizes') != null){
-          // Get the sizes from local storage
-          var sizes = JSON.parse(localStorage.getItem('sizes'));
-          // Set width to sidebar
-          $('#sidetoggle').css('width', sizes.sidebarWidth);
-          // Set width and margin to content part
-          $($('.article.grid-right')[0]).css({
-              'width' : sizes.contentWidth,
-              'marginLeft' : sizes.contentMargin
-          });
-          // Wait, while filter is aviable
-          var filterTimer = setInterval(function(){
-            if($($('.sidefilter')[0]).length > 0){
-              var filter = $($('.sidefilter')[0]);
-              // Set filter width
-              filter.css('width', sizes.sidebarWidth);
-              filter.show();
-              // Clear inteval for filter
-              clearInterval(filterTimer);
-
-            }
-          }, 100);
-          $('.container.body-content.hide-when-search').show();
-        // If object "sizes" don't saved
-        } else {
-          $('.container.body-content.hide-when-search').show();
-        }
-        // Get started space parameters
-        var startSidebarWidth = $('#sidetoggle').width();
-        var contentWidth = $($('.article.grid-right')[0]).width();
-        var contentMargin = + $($('.article.grid-right')[0]).css('marginLeft').split('px')[0];
-        // Start resizable function
-        $('#sidetoggle').resizable({
-            containment: ".container.body-content.hide-when-search",
-            handles: 'e',
-            maxWidth: 570,
-            minWidth: 140,
-            resize: function(event, ui){
-                // Get difference in sizes between start and end
-                var sidebarSizeDivide = ui.size.width - startSidebarWidth;
-                // Create "Sizes" object
-                var sizes = {
-                  sidebarWidth  : ui.size.width,
-                  contentWidth  : contentWidth - sidebarSizeDivide,
-                  contentMargin : contentMargin + sidebarSizeDivide
-                }
-                // Set sizes for content part
-                $($('.article.grid-right')[0]).css({
-                    'width' : sizes.contentWidth,
-                    'marginLeft' : sizes.contentMargin
-                });
-                // Set sizes for filter
-                $($('.sidefilter')[0]).css('width', sizes.sidebarWidth);
-                localStorage.setItem('sizes', JSON.stringify(sizes))
-            }
+  // Control the sizes of sidebar and content part (saved, dynamic changed, etc.)
+  function apiDocSizeControl() {
+    "use srtict"
+    function resizableTOC() {
+      // If object "sizes" saved already
+      if (localStorage.getItem('sizes') != null) {
+        // Get the sizes from local storage
+        var sizes = JSON.parse(localStorage.getItem('sizes'));
+        // Set width to sidebar
+        $('#sidetoggle').css('width', sizes.sidebarWidth);
+        // Set width and margin to content part
+        $($('.article.grid-right')[0]).css({
+          'width': sizes.contentWidth,
+          'marginLeft': sizes.contentMargin
         });
-      }
-        // If user on the one of the doc page (API, Manual, ReleaseNotes)
-      if($('#sidetoggle').length > 0){
-        resizableTOC();
-        var filterTimer = setInterval(function(){
-          if($($('.sidefilter')[0]).length > 0){
-            var filter = $($('.sidefilter')[0])
+        // Wait, while filter is aviable
+        var filterTimer = setInterval(function () {
+          if ($($('.sidefilter')[0]).length > 0) {
+            var filter = $($('.sidefilter')[0]);
+            // Set filter width
+            filter.css('width', sizes.sidebarWidth);
             filter.show();
             // Clear inteval for filter
             clearInterval(filterTimer);
+
           }
         }, 100);
-        // If user on start page or somewhere else
+        $('.container.body-content.hide-when-search').show();
+        // If object "sizes" don't saved
       } else {
         $('.container.body-content.hide-when-search').show();
-        localStorage.clear();
       }
-    }
-
-    function apiSidebarStructureControl(){
-      var tocInterval = setInterval(function(){
-        if($('#toc').length > 0){
-          clearInterval(tocInterval);
-          if(localStorage.getItem('sidebarStructure') != null){
-            getActiveItems();
+      // Get started space parameters
+      var startSidebarWidth = $('#sidetoggle').width();
+      var contentWidth = $($('.article.grid-right')[0]).width();
+      var contentMargin = + $($('.article.grid-right')[0]).css('marginLeft').split('px')[0];
+      // Start resizable function
+      $('#sidetoggle').resizable({
+        containment: ".container.body-content.hide-when-search",
+        handles: 'e',
+        maxWidth: 570,
+        minWidth: 140,
+        resize: function (event, ui) {
+          // Get difference in sizes between start and end
+          var sidebarSizeDivide = ui.size.width - startSidebarWidth;
+          // Create "Sizes" object
+          var sizes = {
+            sidebarWidth: ui.size.width,
+            contentWidth: contentWidth - sidebarSizeDivide,
+            contentMargin: contentMargin + sidebarSizeDivide
           }
-          setActiveItems();
+          // Set sizes for content part
+          $($('.article.grid-right')[0]).css({
+            'width': sizes.contentWidth,
+            'marginLeft': sizes.contentMargin
+          });
+          // Set sizes for filter
+          $($('.sidefilter')[0]).css('width', sizes.sidebarWidth);
+          localStorage.setItem('sizes', JSON.stringify(sizes))
         }
-      }, 100)
+      });
     }
-
-    function setActiveItems(){
-      $('#toc ul li a').on('click', function(){
-        var activeItems = [];
-        $('#toc ul li.in a').each(function(){
-          if($(this).parent().hasClass('in')){
-            activeItems.push($(this).attr('title'));
-          };
-        });
-        var sidebarStructure = {
-          activeItems : activeItems,
-          scroll : $('#sidetoc').scrollTop()
+    // If user on the one of the doc page (API, Manual, ReleaseNotes)
+    if ($('#sidetoggle').length > 0) {
+      resizableTOC();
+      var filterTimer = setInterval(function () {
+        if ($($('.sidefilter')[0]).length > 0) {
+          var filter = $($('.sidefilter')[0])
+          filter.show();
+          // Clear inteval for filter
+          clearInterval(filterTimer);
         }
-        localStorage.setItem('sidebarStructure', JSON.stringify(sidebarStructure));
-      })
+      }, 100);
+      // If user on start page or somewhere else
+    } else {
+      $('.container.body-content.hide-when-search').show();
+      localStorage.clear();
     }
-    function getActiveItems(){
-      var sidebarStructureOut = JSON.parse(localStorage.getItem('sidebarStructure'));
-      var savedActiveItems = sidebarStructureOut.activeItems;
-      for (var i = 0; i < savedActiveItems.length; i++) {
-        $('#toc ul li a[title="' + savedActiveItems[i] + '"]').each(function(){
-          $(this).parent().addClass('in');
-        })
+  }
+
+  function apiSidebarStructureControl() {
+    var tocInterval = setInterval(function () {
+      if ($('#toc').length > 0) {
+        clearInterval(tocInterval);
+        if (localStorage.getItem('sidebarStructure') != null) {
+          getActiveItems();
+        }
+        setActiveItems();
       }
-      $('#sidetoc').scrollTop(sidebarStructureOut.scroll)
+    }, 100)
+  }
+
+  function setActiveItems() {
+    $('#toc ul li a').on('click', function () {
+      var activeItems = [];
+      $('#toc ul li.in a').each(function () {
+        if ($(this).parent().hasClass('in')) {
+          activeItems.push($(this).attr('title'));
+        };
+      });
+      var sidebarStructure = {
+        activeItems: activeItems,
+        scroll: $('#sidetoc').scrollTop()
+      }
+      localStorage.setItem('sidebarStructure', JSON.stringify(sidebarStructure));
+    })
+  }
+  function getActiveItems() {
+    var sidebarStructureOut = JSON.parse(localStorage.getItem('sidebarStructure'));
+    var savedActiveItems = sidebarStructureOut.activeItems;
+    for (var i = 0; i < savedActiveItems.length; i++) {
+      $('#toc ul li a[title="' + savedActiveItems[i] + '"]').each(function () {
+        $(this).parent().addClass('in');
+      })
     }
-    if($(window).width() > MOBILECONS){
-      apiDocSizeControl();
-      apiSidebarStructureControl();
+    $('#sidetoc').scrollTop(sidebarStructureOut.scroll)
+  }
+  if ($(window).width() > MOBILECONS) {
+    apiDocSizeControl();
+    apiSidebarStructureControl();
+  } else {
+    localStorage.clear();
+  }
+  $(window).on('resize', function () {
+    removeResizable();
+    if ($(window).width() > MOBILECONS) {
+      $('.container.body-content.hide-when-search').show();
     } else {
       localStorage.clear();
     }
-    $(window).on('resize', function(){
-      removeResizable();
-      if($(window).width() > MOBILECONS){
-        $('.container.body-content.hide-when-search').show();
+  })
+  function removeResizable() {
+    if ($(window).width() <= MOBILECONS) {
+      $($('.article.grid-right')[0]).removeAttr('style');
+      $($('#sidetoggle')[0]).removeAttr('style');
+      var filterTimer = setInterval(function () {
+        if ($($('.sidefilter')[0]).length > 0) {
+          var filter = $($('.sidefilter')[0])
+          filter.removeAttr('style');
+          // Clear inteval for filter
+          clearInterval(filterTimer);
+        }
+      }, 100);
+    }
+  }
+  function redirectToCurrentDocVersion() {
+    // Set current doc version at start of page
+    if ($('#xk-current-version').length > 0) {
+      var urlSplits = window.location.pathname.split('/');
+      var urlVersion = urlSplits[1];
+      if ($('#xk-current-version option[value="' + urlVersion + '"]').length <= 0) {
+        $("#xk-current-version").val('latest');
       } else {
-        localStorage.clear();
-      }
-    })
-    function removeResizable(){
-      if($(window).width() <= MOBILECONS){
-       $($('.article.grid-right')[0]).removeAttr('style');
-       $($('#sidetoggle')[0]).removeAttr('style');
-       var filterTimer = setInterval(function(){
-            if($($('.sidefilter')[0]).length > 0){
-              var filter = $($('.sidefilter')[0])
-              filter.removeAttr('style');
-              // Clear inteval for filter
-              clearInterval(filterTimer);
-            }
-          }, 100);
+        $("#xk-current-version").val(urlVersion);
       }
+
     }
-    function redirectToCurrentDocVersion(){
-      // Set current doc version at start of page
-      if($('#xk-current-version').length > 0){
-        var urlSplits = window.location.pathname.split('/');
-        var urlVersion = urlSplits[1];
-        if($('#xk-current-version option[value="' + urlVersion + '"]').length <= 0){
-          $("#xk-current-version").val('latest');
-        } else {
-          $("#xk-current-version").val(urlVersion);
-        }
+    $('#xk-current-version').on('change', function () {
+      var hostVersion = window.location.host;
+      var pathVersion = window.location.pathname;
+      var urlLanguage = window.location.pathname.split('/')[2];
+      var targetVersion = $("#xk-current-version").val();
 
+      if (targetVersion == "latest" || targetVersion >= '2') {
+        urlLanguage += '/';
+      } else {
+        urlLanguage = '';
       }
-      $('#xk-current-version').on('change', function(){
-        var hostVersion = window.location.host;
-        var pathVersion = window.location.pathname;
-        var urlLanguage = window.location.pathname.split('/')[2];
-        var targetVersion = $("#xk-current-version" ).val();
 
-        if(targetVersion == "latest" || targetVersion >= '2'){
-          urlLanguage += '/';
-        } else {
-          urlLanguage = '';
-        }
+      var sectionVersion;
+      if (/manual/.test(pathVersion)) {
+        sectionVersion = 'manual'
+      } else if (/api/.test(pathVersion)) {
+        sectionVersion = 'api'
+      } else if (/ReleaseNotes/.test(pathVersion)) {
+        sectionVersion = 'ReleaseNotes'
+      } else if (/tutorials/.test(pathVersion)) {
+        sectionVersion = 'tutorials'
+      }
+      var newAddress = '//' + hostVersion + '/' + targetVersion + '/' + urlLanguage + sectionVersion
+      $(window).attr('location', newAddress);
+    })
+  }
+  redirectToCurrentDocVersion();
 
-        var sectionVersion;
-        if(/manual/.test(pathVersion)){
-          sectionVersion = 'manual'
-        } else if(/api/.test(pathVersion)){
-          sectionVersion = 'api'
-        } else if (/ReleaseNotes/.test(pathVersion)){
-          sectionVersion = 'ReleaseNotes'
-        }
-        var newAddress = '//' + hostVersion + '/' + targetVersion + '/' + urlLanguage + sectionVersion
-        $(window).attr('location', newAddress);
-      })
-    }
-    redirectToCurrentDocVersion();
+  // Language check function
 
-// Language check function
+  var siteLang = [];
+  $('#x_head_langList li *[data-language]').each(function () {
+    siteLang.push($(this).data('language'))
+  });
 
-    var siteLang = [];
-    $('#x_head_langList li *[data-language]').each(function(){
-      siteLang.push($(this).data('language'))
-    });
+  var currentLang = window.location.pathname.split("/")[1];
+  var changedItem = $('*[data-language="' + currentLang + '"]');
+  var savedText = changedItem.text();
+  changedItem.replaceWith($('<span>' + savedText + '</span>'));
 
-    var currentLang = window.location.pathname.split("/")[1];
-    var changedItem = $('*[data-language="' + currentLang + '"]');
-    var savedText = changedItem.text();
-    changedItem.replaceWith($('<span>' + savedText + '</span>'));
-
-    for(var i = 0; i < siteLang.length; i++){
-      if(siteLang[i] != currentLang){
-        var changedItemInner = $('*[data-language="' + siteLang[i] + '"]')
-        var savedTextInner = changedItemInner.text();
-        changedItemInner.replaceWith($('<a data-language="'+siteLang[i]+'">' + savedTextInner + '</a>'));
-      }
+  for (var i = 0; i < siteLang.length; i++) {
+    if (siteLang[i] != currentLang) {
+      var changedItemInner = $('*[data-language="' + siteLang[i] + '"]')
+      var savedTextInner = changedItemInner.text();
+      changedItemInner.replaceWith($('<a data-language="' + siteLang[i] + '">' + savedTextInner + '</a>'));
     }
+  }
 
-    $('#x_head_langList li a').on('click', function(){
-      var patt = /\/(en|jp)\//;
-      var lang = "/"+$(this).data('language')+"/";
-      window.location.href = window.location.href.replace(patt, lang);
-    });
+  $('#x_head_langList li a').on('click', function () {
+    var patt = /\/(en|jp)\//;
+    var lang = "/" + $(this).data('language') + "/";
+    window.location.href = window.location.href.replace(patt, lang);
+  });
 
-    $('body').on('click', function(event){
-      if($(event.target).hasClass('page-link')){
-        $('html, body').scrollTop(0)
-      }
-    });
+  $('body').on('click', function (event) {
+    if ($(event.target).hasClass('page-link')) {
+      $('html, body').scrollTop(0)
+    }
+  });
 
-    lowercaseBreadcrumbs();
+  lowercaseBreadcrumbs();
 
-    function lowercaseBreadcrumbs(){
-      $('#breadcrumb .breadcrumb li a').each(function(){
-        if($(this).attr('href').toLowerCase() != 'releasenotes'){
-          $(this).attr('href', $(this).attr('href').toLowerCase())
-        }
-      })
-    };
+  function lowercaseBreadcrumbs() {
+    $('#breadcrumb .breadcrumb li a').each(function () {
+      if ($(this).attr('href').toLowerCase() != 'releasenotes') {
+        $(this).attr('href', $(this).attr('href').toLowerCase())
+      }
+    })
+  };
 
-    $('img').filter(function() { return $(this).parent().is(":not(.xk-documentation-image)"); }).each(function(){
-      $(this).wrap('<a class="maximize_image" href=' + $(this).attr('src') + '></a>').parent().html()
-    });
+  $('img').filter(function () { return $(this).parent().is(":not(.xk-documentation-image)"); }).each(function () {
+    $(this).wrap('<a class="maximize_image" href=' + $(this).attr('src') + '></a>').parent().html()
+  });
 
-    $('.maximize_image').magnificPopup({
-        type:'image'
-    });
+  $('.maximize_image').magnificPopup({
+    type: 'image'
+  });
 });

+ 2 - 0
en/toc.yml

@@ -7,3 +7,5 @@
   href: api/index.md
 - name: Release Notes
   href: ReleaseNotes/ReleaseNotes.md
+- name: Tutorials
+  href: tutorials/index.md

+ 8 - 0
en/tutorials/csharpadvanced/index.md

@@ -0,0 +1,8 @@
+# C# Advanced tutorials
+These tutorials cover advanced topics.
+
+You can try out each individual script in by creating a new project and use the API tutorials example template. Each script is demonstrated a new scene.
+
+* Tutorial A
+* Tutorial B
+* Tutorial C

+ 10 - 0
en/tutorials/csharpadvanced/shader.md

@@ -0,0 +1,10 @@
+# C# advanced - shader
+
+This C# basics tutorial covers the transform component.
+
+## Code
+You can find this sample in the tutorial project 
+<source>
+
+## Explanation
+All entities have a transform component.

+ 9 - 0
en/tutorials/csharpbasics/deltaTime.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 9 - 0
en/tutorials/csharpbasics/destroyingEntities.md

@@ -0,0 +1,9 @@
+# Destroying an entity
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 9 - 0
en/tutorials/csharpbasics/editorProperties.md

@@ -0,0 +1,9 @@
+# Editor properties
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 11 - 0
en/tutorials/csharpbasics/entity.md

@@ -0,0 +1,11 @@
+# Getting the entity 
+This C# basics tutorial covers how to get the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can for instance get the entity's name or we can check if the entity has a parent in the scene.
+
+![Getting the entity example](media/getting-the-entity.png)
+
+## Code
+You can find this sample in the tutorial project 
+[!code-csharp[Entity](..\..\..\Tutorials\Tutorials\Basics\GettingTheEntity.cs)]

+ 9 - 0
en/tutorials/csharpbasics/getButton.md

@@ -0,0 +1,9 @@
+# Get Button
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 9 - 0
en/tutorials/csharpbasics/getComponent.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 9 - 0
en/tutorials/csharpbasics/getKey.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 9 - 0
en/tutorials/csharpbasics/getMouse.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 18 - 0
en/tutorials/csharpbasics/index.md

@@ -0,0 +1,18 @@
+# C# Basics
+These tutorials cover intermediate topics. You should be familiar with the Basics before you dive in to these tutorials.
+
+You can try out each individual script in by creating a new project and use the API tutorials example template. Each script is demonstrated a new scene.
+
+* [Getting the Entity](entity.md)
+* [Getting the Transform](transform.md)
+* [Position and Rotation](positionAndRotation.md) 
+* [StartAndUpdate](startAndUpdate.md) 
+* [Editor properties](editorproperties.md) 
+* [Get component](getcomponent.md) 
+* [DeltaTime](deltaTime.md) 
+* [Instianting entities](instantiatingentities.md) 
+* [Destroing entities](destroyingentities.md) 
+* [Look at](lookAt.md) 
+* [GetKey](getKey.md) 
+* [GetMouse](getMouse.md) 
+* [GetButton](getButton.md) 

+ 9 - 0
en/tutorials/csharpbasics/instantiatingEntities.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 9 - 0
en/tutorials/csharpbasics/loadScene.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 9 - 0
en/tutorials/csharpbasics/lookAt.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 3 - 0
en/tutorials/csharpbasics/media/getting-the-entity.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41a08acac8cf71070208ac94dc5050f3b5a029f89fcda8092a2b132129bb5de7
+size 83273

+ 10 - 0
en/tutorials/csharpbasics/positionAndRotation.md

@@ -0,0 +1,10 @@
+# C# basics - Transform 
+
+This C# basics tutorial covers the transform component.
+
+## Code
+You can find this sample in the tutorial project 
+<source>
+
+## Explanation
+All entities have a transform component.

+ 9 - 0
en/tutorials/csharpbasics/startAndUpdate.md

@@ -0,0 +1,9 @@
+# C# basics - Getting the entity 
+This C# basics tutorial covers the entity object.
+
+## Explanation
+When a script is attached to an entity in the scene, we can access all properties of that Entity by using the 'Entity' property. We can find its name, its parent and its scene.
+
+## Code
+You can find this sample in the tutorial project 
+<source>

+ 10 - 0
en/tutorials/csharpbasics/transform.md

@@ -0,0 +1,10 @@
+# C# basics - Transform 
+
+This C# basics tutorial covers the transform component.
+
+## Code
+You can find this sample in the tutorial project 
+<source>
+
+## Explanation
+All entities have a transform component.

+ 9 - 0
en/tutorials/csharpintermediate/index.md

@@ -0,0 +1,9 @@
+# C# intermediate tutorials
+These tutorials cover intermediate topics.
+
+You can try out each individual script in by creating a new project and use the API tutorials example template. Each script is demonstrated a new scene.
+
+* [Raycasting](csharpintermediate/raycasting.md)
+* [Broadcasting](csharpintermediate/raycasting.md)
+* [Collisions](csharpintermediate/raycasting.md)
+* [Streaming scenes](csharpintermediate/raycasting.md)

+ 10 - 0
en/tutorials/csharpintermediate/raycasting.md

@@ -0,0 +1,10 @@
+# C# intermediate - Raycasting
+
+This C# basics tutorial covers the transform component.
+
+## Code
+You can find this sample in the tutorial project 
+<source>
+
+## Explanation
+All entities have a transform component.

+ 29 - 0
en/tutorials/index.md

@@ -0,0 +1,29 @@
+---
+_tocPath: tutorials/toc.html
+_tocRel: toc.html
+_navPath: toc.html
+_navRel: ../toc.html
+_tocTitle: 'Tutorials'
+---
+
+# Xenko 3.1 Tutorials
+These pages contain tutorials to learn more about the Xenko game engine
+
+# C# tutorials 
+All C# tutorials have code that you can try out yourself by downloading the tutorials project here <DOWNLOAD LINK> (or perhaps as a template?).
+
+
+## [C# basics](csharpbasics/index.md)
+These tutorials cover the absolute basics of using C# when working with the Xenko game engine. Start here if you are new to Xenko or progamming. Althoug having some coding experience is useful, it is not mandatory to get started with these tutorials.
+
+
+## [C# intermediate](csharpintermediate/index.md)
+These tutorials cover intermediate tutorial topics when programming with Xenko.
+
+
+## [C# advanced](csharpadvanced/index.md)
+These tutorials cover advanced tutorial topics when programming with Xenko.
+
+
+# Editor 
+

+ 22 - 0
en/tutorials/toc.md

@@ -0,0 +1,22 @@
+
+# [Tutorials](index.md)
+## [C# basics](csharpbasics/index.md)
+### [Getting the Entity](csharpbasics/entity.md)
+### [Getting the Transform](csharpbasics/transform.md)
+### [Position and Rotation](csharpbasics/positionAndRotation.md) 
+### [StartAndUpdate](csharpbasics/startAndUpdate.md) 
+### [Editor properties](csharpbasics/editorproperties.md) 
+### [Get component](csharpbasics/getcomponent.md) 
+### [DeltaTime](csharpbasics/deltaTime.md) 
+### [Instianting entities](csharpbasics/instantiatingentities.md) 
+### [Destroing entities](csharpbasics/destroyingentities.md) 
+### [Look at](csharpbasics/lookAt.md) 
+### [GetKey](csharpbasics/getKey.md) 
+### [GetMouse](csharpbasics/getMouse.md) 
+### [GetButton](csharpbasics/getButton.md) 
+
+## [C# intermediate](csharpintermediate/index.md)
+### [Raycasting](csharpintermediate/raycasting.md)
+
+## [C# advanced](csharpadvanced/index.md)
+### [Shader](csharpadvanced/shader.md)