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

Merge branch 'DocumentationImprovements'

# Conflicts:
#	en/template/styles/main.css
#	en/template/styles/main.js
Virgile Bello 6 éve
szülő
commit
93f3e4354c
58 módosított fájl, 1121 hozzáadás és 446 törlés
  1. 46 37
      en/docfx.json
  2. 17 1
      en/index.md
  3. 2 2
      en/media/xk-icon-release-notes.png
  4. 3 0
      en/media/xk-icon-tutorials.png
  5. 1 0
      en/template/partials/breadcrumb.tmpl.partial
  6. 1 1
      en/template/partials/footer.tmpl.partial
  7. 1 0
      en/template/partials/navbar.tmpl.partial
  8. 1 0
      en/template/partials/searchResults.tmpl.partial
  9. 328 200
      en/template/styles/main.css
  10. 207 205
      en/template/styles/main.js
  11. 2 0
      en/toc.yml
  12. 17 0
      en/tutorials/csharpbeginner/add-component.md
  13. 10 0
      en/tutorials/csharpbeginner/child-entities.md
  14. 10 0
      en/tutorials/csharpbeginner/cloning-entities.md
  15. 10 0
      en/tutorials/csharpbeginner/delta-time.md
  16. 14 0
      en/tutorials/csharpbeginner/editor-properties.md
  17. 10 0
      en/tutorials/csharpbeginner/entity.md
  18. 16 0
      en/tutorials/csharpbeginner/get-component.md
  19. 227 0
      en/tutorials/csharpbeginner/index.md
  20. 10 0
      en/tutorials/csharpbeginner/keyboard-input.md
  21. 3 0
      en/tutorials/csharpbeginner/media/adding-a-component.png
  22. 3 0
      en/tutorials/csharpbeginner/media/adding-a-component_thumb.png
  23. 3 0
      en/tutorials/csharpbeginner/media/child-entities.png
  24. 3 0
      en/tutorials/csharpbeginner/media/child-entities_thumb.png
  25. 3 0
      en/tutorials/csharpbeginner/media/cloning-entities.png
  26. 3 0
      en/tutorials/csharpbeginner/media/cloning-entities_thumb.png
  27. 3 0
      en/tutorials/csharpbeginner/media/csharp_beginner_tutorial_scene.jpg
  28. 3 0
      en/tutorials/csharpbeginner/media/csharp_beginner_tutorial_template.jpg
  29. 3 0
      en/tutorials/csharpbeginner/media/deltatime.png
  30. 3 0
      en/tutorials/csharpbeginner/media/deltatime_thumb.png
  31. 3 0
      en/tutorials/csharpbeginner/media/editor-properties.png
  32. 3 0
      en/tutorials/csharpbeginner/media/editor-properties2.png
  33. 3 0
      en/tutorials/csharpbeginner/media/editor-properties_thumb.png
  34. 3 0
      en/tutorials/csharpbeginner/media/getting-a-component.png
  35. 3 0
      en/tutorials/csharpbeginner/media/getting-a-component_thumb.png
  36. 3 0
      en/tutorials/csharpbeginner/media/getting-the-entity.png
  37. 3 0
      en/tutorials/csharpbeginner/media/getting-the-entity_thumb.png
  38. 3 0
      en/tutorials/csharpbeginner/media/keyboard-input.png
  39. 3 0
      en/tutorials/csharpbeginner/media/keyboard-input_thumb.png
  40. 3 0
      en/tutorials/csharpbeginner/media/mouse-input.png
  41. 3 0
      en/tutorials/csharpbeginner/media/mouse-input_thumb.png
  42. 3 0
      en/tutorials/csharpbeginner/media/removing-entity.png
  43. 3 0
      en/tutorials/csharpbeginner/media/removing-entity_thumb.png
  44. 3 0
      en/tutorials/csharpbeginner/media/transform-position.png
  45. 3 0
      en/tutorials/csharpbeginner/media/transform-position_thumb.png
  46. 3 0
      en/tutorials/csharpbeginner/media/virtual-buttons.png
  47. 3 0
      en/tutorials/csharpbeginner/media/virtual-buttons_thumb.png
  48. 10 0
      en/tutorials/csharpbeginner/mouse-input.md
  49. 10 0
      en/tutorials/csharpbeginner/remove-entity.md
  50. 10 0
      en/tutorials/csharpbeginner/removing-entities.md
  51. 10 0
      en/tutorials/csharpbeginner/transform-position.md
  52. 10 0
      en/tutorials/csharpbeginner/virtual-buttons.md
  53. 30 0
      en/tutorials/index.md
  54. 3 0
      en/tutorials/media/csharp-beginner.png
  55. 3 0
      en/tutorials/media/tutorial_advanced.png
  56. 3 0
      en/tutorials/media/tutorial_basics.png
  57. 3 0
      en/tutorials/media/tutorial_intermediate.png
  58. 15 0
      en/tutorials/toc.md

+ 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
   }
-}
+}

+ 17 - 1
en/index.md

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

+ 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>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 328 - 200
en/template/styles/main.css


+ 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,238 +22,240 @@ $(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'
+  });
 });
 
 function toggleLangDropDown(){

+ 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

+ 17 - 0
en/tutorials/csharpbeginner/add-component.md

@@ -0,0 +1,17 @@
+# Adding a component
+You can find this sample in the tutorial project: **Menu** -> **Adding a component** 
+
+## Explanation
+This C# Beginner tutorial covers how to add and remove components. In the previous tutorial we learned how we can retrieve components that are already attached to an entity through the editor. This tutorial shows that we can accomplish the same thing by code. We can add the same component several times to the same entity. We also learn how to remove all of components of the same type again.
+
+![Add a component](media/adding-a-component.png)
+
+## Code
+### AmmoComponent
+This is the AmmoComponent. We will not attach it to the entity in the editor. Instead we will add it ourselves in the AddingAComponent script.
+[!code-csharp[AmmoComponent](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\AmmoComponent.cs)]
+
+### Adding A Component
+This component script, will add the AmmoComponent script to the entity. We then add another component (of the same type) before we remove all components of that type.
+Finally we learn how to automatically create a component, attach it to the entity and get a reference all in 1 line of code. This only works if the entity doesn't have any components of the given attached yet.
+[!code-csharp[AddingAComponent](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\AddingAComponentDemo.cs)]

+ 10 - 0
en/tutorials/csharpbeginner/child-entities.md

@@ -0,0 +1,10 @@
+# Children of entities
+You can find this sample in the tutorial project: **Menu** -> **Child entities** 
+
+## Explanation
+This C# basics tutorial covers how to get an enties children. Since those children are also entities, we can retrieve their children too.
+
+![Child entities](media/child-entities.png)
+
+## Code
+[!code-csharp[ChidleEntities](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\ChildEntitiesDemo.cs)]

+ 10 - 0
en/tutorials/csharpbeginner/cloning-entities.md

@@ -0,0 +1,10 @@
+# Cloning an entity
+You can find this sample in the tutorial project: **Menu** -> **Cloning entities** 
+
+## Explanation
+This C# Beginner tutorial covers how to clone an existing entity and how to add that clone to the scene. A cloned entity is an exact copy of an entity, which means that the Transform and all other components with their set values are copied to.
+
+![Cloning entities](media/cloning-entities.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\CloneEntityDemo.cs)]

+ 10 - 0
en/tutorials/csharpbeginner/delta-time.md

@@ -0,0 +1,10 @@
+# Deltatime
+You can find this sample in the tutorial project: **Menu** -> **Delta Time** 
+
+## Explanation
+This C# Beginner tutorial covers the retrieval and usage of delta time. A games tries to update itself as often as possible. The amount of times it updates in a single second is called 'Frames Per Second' or shortened to 'FPS'. If we wanted to update a timer value, we would need a value that takes into account what the current amount of frames per second is. That is what delta time is used for. So whether your game runs 30 FPS or 120 FPS: you always want to have the same time scale.
+
+![Delta time](media/deltatime.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\DeltaTimeDemo.cs)]

+ 14 - 0
en/tutorials/csharpbeginner/editor-properties.md

@@ -0,0 +1,14 @@
+# Editor properties
+You can find this sample in the tutorial project: **Menu** -> **Editor properties** 
+
+## Explanation
+This C# Beginner tutorial covers how to expose editor properties for Xenko game studio. By creating a public variable at the top of our script, we can create editor properties. Some of the most common properties are demonstrated. We can also create public variables that are not shown in the editor.
+
+![Editor properties](media/editor-properties2.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\PropertiesDEmo.cs)]
+
+The code above will result in the following properties inside Xenko game studio.
+
+![Editor properties](media/editor-properties.png)

+ 10 - 0
en/tutorials/csharpbeginner/entity.md

@@ -0,0 +1,10 @@
+# Getting the entity 
+You can find this sample in the tutorial project: **Menu** -> **Getting an entity** 
+
+## Explanation
+This C# Beginner tutorial covers how to get the entity object. 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
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\GettingTheEntityDemo.cs)]

+ 16 - 0
en/tutorials/csharpbeginner/get-component.md

@@ -0,0 +1,16 @@
+# Getting a component
+You can find this sample in the tutorial project: **Menu** ->  **Getting a component** 
+
+## Explanation
+This C# beginner tutorial covers how to get and remove components. Components are the of the most important concepts in Xenko. Every entity in the scene has a list of components. The transform for instance is also a component. When we make custom scripts that inherit from SyncScript or AsyncScript, they turn in to Components that we can attach to entities. We can attach these components to entities by using the editor or we can attach them by code.
+
+![Get a component](media/getting-a-component.png)
+
+## Code
+### AmmoComponent
+This is the first component that we attach to an entity. In the second script, we will try to get this AmmoComponent.
+[!code-csharp[AmmoComponent](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\AmmoComponent.cs)]
+
+### Getting A Component
+This component script, will retrieve the AmmoComponent script above and use its public method.
+[!code-csharp[GettingAComponent](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\GettingAComponentDemo.cs)]

+ 227 - 0
en/tutorials/csharpbeginner/index.md

@@ -0,0 +1,227 @@
+# C# Beginner
+These tutorials cover the beginner principles 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. You can create the C# beginner tutorial project by starting the Xenko launcher. Create a new project and select the template: Tutorials -> C# beginner. Every single scene is loaded as a child scene and demonstrates a sample script. 
+
+![Editor properties](media/csharp_beginner_tutorial_template.jpg)
+
+# All tutorials 
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Getting the Entity</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Getting the Entity tutorial](media/getting-the-entity_thumb.png "Getting the Entity") 
+    </div>
+    <div class='tutorial_description'>
+
+        <ul>
+            <li>Retrieve the entity</li> 
+            <li>Retrieve the parent</li> 
+            <li>Print debug text</li> 
+        </ul>
+    </div>
+    ](entity.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Child entities</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Child entities tutorial](media/child-entities_thumb.png "Child entities") 
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Get a specific child entity</li> 
+            <li>Get children in a list</li> 
+            <li>Get children of children</li> 
+        </ul>
+    </div>
+    ](child-entities.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>The transform</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![The transform tutorial](media/transform-position_thumb.png "The transform") 
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Accessing the Transform component</li> 
+            <li>Get the local postion</li> 
+            <li>Get the world position</li> 
+        </ul>
+    </div>
+    ](transform-position.md) 
+</div>
+
+
+<div class='tutorial'> 
+    [
+    <div class='tutorial_title'>
+       <h2>Editor properties</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Editor properties tutorial](media/editor-properties_thumb.png "Editor properties")  
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Defining various editor properties</li> 
+            <li>Defining lists</li> 
+            <li>Hiding public properties</li> 
+        </ul>
+    </div>
+    ](editor-properties.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Getting a component</h2>
+    </div>
+    <div class='xk-documentation-image'>   
+        ![Get a component tutorial](media/getting-a-component_thumb.png "Get a component")
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Getting a component</li> 
+            <li>Remove a component</li> 
+            <li>Access methods of other components</li> 
+        </ul>
+    </div>
+    ](get-component.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Adding a component</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Add a component tutorial](media/adding-a-component_thumb.png "Add a component")
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Adding a component</li> 
+            <li>Removing all components of 1 type</li> 
+            <li>Create a component if it doesn't exists</li> 
+        </ul>
+    </div>
+    ](add-component.md) 
+</div>
+
+
+<div class='tutorial'> 
+    [
+    <div class='tutorial_title'>
+       <h2>Delta time</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Delta time tutorial](media/deltatime_thumb.png "Delta time")
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Retrieving delta time</li> 
+            <li>Making a simple timer</li> 
+            <li>Making a simple countdown timer</li> 
+        </ul>
+    </div>
+    ](delta-time.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Cloning an entity</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Cloning an entity tutorial](media/cloning-entities_thumb.png "Cloning an entity")
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Cloning an entity</li> 
+            <li>Adding an entity to the current scene</li> 
+            <li>Adding an entity as a child to a parent entity</li> 
+        </ul>
+    </div>
+    ](cloning-entities.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Removing an entity</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Removing an entity tutorial](media/removing-entity_thumb.png "Removing an entity")   
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Cloning new entities using a timer</li> 
+            <li>Removing entities using a timer</li> 
+            <li>Removing an entity from the scene</li> 
+        </ul>
+    </div>
+    ](remove-entity.md) 
+</div>
+
+
+<div class='tutorial'> 
+    [
+    <div class='tutorial_title'>
+       <h2>Keyboard input</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Keyboard input tutorial](media/keyboard-input_thumb.png "Keyboard input tutorial") 
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Holding down a key</li> 
+            <li>Clicking a key</li> 
+            <li>Releasing a key</li> 
+        </ul>
+    </div>
+    ](keyboard-input.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Mouse input</h2>
+    </div>
+    <div class='xk-documentation-image'> 
+        ![Mouse input tutorial](media/mouse-input_thumb.png "Mouse input tutorial")
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Holding down a mousebutton</li> 
+            <li>Clicking or releasing a mousebutton</li> 
+            
+            <li>Using the mouse wheel </li> 
+        </ul>
+    </div>
+    ](mouse-input.md) 
+</div>
+
+<div class='tutorial'>
+    [
+    <div class='tutorial_title'>
+       <h2>Virtual buttons</h2>
+    </div>
+    <div class='xk-documentation-image'>
+        ![Virtual buttons tutorial](media/virtual-buttons_thumb.png "Virtual buttons tutorial")
+    </div>
+    <div class='tutorial_description'>
+        <ul>
+            <li>Defining a virtual key configuration</li> 
+            <li>Binding input to the configuration</li> 
+            <li>Using the virtual buttons</li> 
+        </ul>
+    </div>
+    ](virtual-buttons.md) 
+</div>
+

+ 10 - 0
en/tutorials/csharpbeginner/keyboard-input.md

@@ -0,0 +1,10 @@
+# Keyboard input
+You can find this sample in the tutorial project: **Menu** -> **Keyboard input** 
+
+## Explanation
+This C# Beginner tutorial covers how to handle keyboard input. We can check for the existisce of a keyboard and then we can use various methods to check if a key is pressed, held down or released.
+
+![Keyboard input](media/keyboard-input.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\KeyboardInputDemo.cs)]

+ 3 - 0
en/tutorials/csharpbeginner/media/adding-a-component.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:652c4552c63689d7865345da0e2cb0effa0a4f6caca3fc652d1be182c5fda06c
+size 386752

+ 3 - 0
en/tutorials/csharpbeginner/media/adding-a-component_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42849c5383822de7f794e45d3633861190f05daa19c6641b83a264eda1393c3c
+size 54273

+ 3 - 0
en/tutorials/csharpbeginner/media/child-entities.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40e9ca6b8454d763f7b3a38cb87375b99bc6c55d693c4c6b5fb288c60e75962e
+size 972921

+ 3 - 0
en/tutorials/csharpbeginner/media/child-entities_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9f34f4c9acea0b1c88ca5248c9aa9228215914f5ba5f84913a35b5fb43aed2c0
+size 84587

+ 3 - 0
en/tutorials/csharpbeginner/media/cloning-entities.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f8c22284a62c7cc28e729042bcf721119db37fd53498c680cd289942cc65678
+size 783404

+ 3 - 0
en/tutorials/csharpbeginner/media/cloning-entities_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:03e7130a869b6f1f48bb00c21ee8b32aa5683a40e91bb84876daf54f25325e98
+size 66253

+ 3 - 0
en/tutorials/csharpbeginner/media/csharp_beginner_tutorial_scene.jpg

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:632b66a405f3a2399b9450375f2ebb7da8645d90cd6f244c17ac7563c6e3b47a
+size 101815

+ 3 - 0
en/tutorials/csharpbeginner/media/csharp_beginner_tutorial_template.jpg

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:936ad92ffd17011f405440764f4043224fababb80f357a4cc6dc29a69e41953e
+size 77065

+ 3 - 0
en/tutorials/csharpbeginner/media/deltatime.png

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

+ 3 - 0
en/tutorials/csharpbeginner/media/deltatime_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3646c2d60d155aa87b9fcf22558d1f9cc105ece7c4edb5cf477b8bf717b057bd
+size 65196

+ 3 - 0
en/tutorials/csharpbeginner/media/editor-properties.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c4e59c36edfcfe97e01cabea6833592e34303ceaa6f3be593f100371ebc74d3
+size 26916

+ 3 - 0
en/tutorials/csharpbeginner/media/editor-properties2.png

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

+ 3 - 0
en/tutorials/csharpbeginner/media/editor-properties_thumb.png

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

+ 3 - 0
en/tutorials/csharpbeginner/media/getting-a-component.png

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

+ 3 - 0
en/tutorials/csharpbeginner/media/getting-a-component_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:590b9b93996b54983ed9ea1889186f0ee94f809bc4461024336cef692f03a69e
+size 46996

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

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

+ 3 - 0
en/tutorials/csharpbeginner/media/getting-the-entity_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5549c7b592ea7167dcb5a16f367010088f693fb450f502488931212ad4892562
+size 79354

+ 3 - 0
en/tutorials/csharpbeginner/media/keyboard-input.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f9de5617c8ebdbe0aab0cd2442cd207281277bbb1fc7c1d768f2988963246cf
+size 617956

+ 3 - 0
en/tutorials/csharpbeginner/media/keyboard-input_thumb.png

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

+ 3 - 0
en/tutorials/csharpbeginner/media/mouse-input.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e261da629a840aed12566be97b4ace9b7af557072aeaf723a37838cee19fc5b
+size 662361

+ 3 - 0
en/tutorials/csharpbeginner/media/mouse-input_thumb.png

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

+ 3 - 0
en/tutorials/csharpbeginner/media/removing-entity.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:115d28f88246851b2c6a36aef57acdae0680081d6458f6d7da17add516d1594c
+size 429099

+ 3 - 0
en/tutorials/csharpbeginner/media/removing-entity_thumb.png

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

+ 3 - 0
en/tutorials/csharpbeginner/media/transform-position.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51ed290ab80d96a76c0455f0888e2779da753df31d6df1e17a422bc422398ee1
+size 424330

+ 3 - 0
en/tutorials/csharpbeginner/media/transform-position_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:896a71605497c4fee836c3b259f097ae5ea226fdb88a69569c1292da134c3a17
+size 68034

+ 3 - 0
en/tutorials/csharpbeginner/media/virtual-buttons.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28b591b1911d104d648fad3a7e50953a4d7543a9d297d7a5706c3832f60cac90
+size 796060

+ 3 - 0
en/tutorials/csharpbeginner/media/virtual-buttons_thumb.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8e3cdc08f6d8e7c35f07e06ad7c25b36075e4dcd1b13e09d3745684640b2e95d
+size 77939

+ 10 - 0
en/tutorials/csharpbeginner/mouse-input.md

@@ -0,0 +1,10 @@
+# Mouse input
+You can find this sample in the tutorial project: **Menu** -> **Mouse input** 
+
+## Explanation
+This C# Beginner tutorial covers how to handle mouse input. We can check for the existance of a mouse and then we can use various methods to check if a mouse buttons are clicked, held down or released. We can also for the mouse wheel (middle mouse) being clicked. We can use the mouse wheel delta to determine if the mouse wheel has been scrolled in a frame. And finally we learn how to use the absolute mouse position to draw text at the position of the mouse on the screen.
+
+![Mouse input](media/mouse-input.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\MouseInputDemo.cs)]

+ 10 - 0
en/tutorials/csharpbeginner/remove-entity.md

@@ -0,0 +1,10 @@
+# Removing an entity
+You can find this sample in the tutorial project: **Menu** -> **Removing an entity** 
+
+## Explanation
+This C# Beginner tutorial covers how to get an enties children. Since those children are also entities, we can retrieve their children too.
+
+![Child entities](media/removing-entity.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\RemoveEntitiesDemo.cs)]

+ 10 - 0
en/tutorials/csharpbeginner/removing-entities.md

@@ -0,0 +1,10 @@
+# Removing an entity
+You can find this sample in the tutorial project: **Menu** -> **Removing entities** 
+
+## Explanation
+This C# Beginner tutorial covers how to clone an existing entity and how to add that clone to the scene. A cloned entity is an exact copy, which means that the Transform properties and all other components are copied to.
+
+![Cloning entities](media/cloning-entities.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\CloneEntityDemo.cs)]

+ 10 - 0
en/tutorials/csharpbeginner/transform-position.md

@@ -0,0 +1,10 @@
+# Transform position
+You can find this sample in the tutorial project: **Menu** -> **TransformPosition** 
+
+## Explanation
+This C# Beginner tutorial covers the Transform component of an entity. The Transform component is such a commonly used component, that you can quick access it via 'Entity.Transform'. The transform contains all kinds of properties and methods for Position, Rotation and Scale. In this example we learn the difference between local and world position.
+
+![Transform position](media/transform-position.png)
+
+## Code
+[!code-csharp[Entity](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\TransformPositionDemo.cs)]

+ 10 - 0
en/tutorials/csharpbeginner/virtual-buttons.md

@@ -0,0 +1,10 @@
+# Virtual buttons
+You can find this sample in the tutorial project: **Menu** -> **Virtual buttons** 
+
+## Explanation
+This C# Beginner tutorial covers how to create virtual buttons. Lets say that you want a player to jump when a key is pressed. The spacebar is a common option, but what if a gamer wants to have a different key bind to this 'Jump' action. The answer here is the 'Virtual button'. Virtual buttons allow the mapping of 1 or more keyboard keys, mousebuttons or joystick buttons to a single 'Virtual button'. We can check for the name of that virtual button to see if any of the virtual button are triggered.
+
+![Virtual buttons](media/virtual-buttons.png)
+
+## Code
+[!code-csharp[VirtualButtons](..\..\..\..\xenko\samples\Tutorials\CSharpBeginner\CSharpBeginner\CSharpBeginner.Game\Code\VirtualButtonsDemo.cs)]

+ 30 - 0
en/tutorials/index.md

@@ -0,0 +1,30 @@
+---
+_tocPath: tutorials/toc.html
+_tocRel: toc.html
+_navPath: toc.html
+_navRel: ../toc.html
+_tocTitle: 'Tutorials'
+---
+
+# Xenko Tutorials
+These pages contain tutorials to learn more about the Xenko game engine
+
+# C# tutorials 
+These tutorials cover programming with C#.
+
+<div class='tutorial'>
+    <a href="csharpbeginner/index.md"> 
+        <div class='xk-documentation-image'>
+            ![C# beginner tutorials](media/csharp-beginner.png "C# beginner tutorials")
+        </div>
+        <div class='tutorial_description'>
+            <ul>
+                <li>Getting started with C#</li> 
+                <li>Components</li> 
+                <li>DeltaTime</li> 
+                <li>Input</li> 
+            </ul>
+        </div>
+    </a>
+</div>
+

+ 3 - 0
en/tutorials/media/csharp-beginner.png

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

+ 3 - 0
en/tutorials/media/tutorial_advanced.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4aef0f50d837664433cf5dbe9112ac1cd78ab1c67475b75d06fd98415febf8ed
+size 25597

+ 3 - 0
en/tutorials/media/tutorial_basics.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8da14dd4f4d5e25604de9351fd5d7a163981ac388936c080fa345c678764b49f
+size 25711

+ 3 - 0
en/tutorials/media/tutorial_intermediate.png

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

+ 15 - 0
en/tutorials/toc.md

@@ -0,0 +1,15 @@
+
+# [Tutorials](index.md)
+## [C# Beginner](csharpbeginner/index.md)
+### [Getting the Entity](csharpbeginner/entity.md)
+### [Child entities](csharpbeginner/child-entities.md) 
+### [Transform Position](csharpbeginner/transform-Position.md) 
+### [Editor properties](csharpbeginner/editor-properties.md) 
+### [Getting a component](csharpbeginner/get-component.md) 
+### [Adding a component](csharpbeginner/add-component.md) 
+### [DeltaTime](csharpbeginner/delta-time.md) 
+### [Cloning an entity](csharpbeginner/cloning-entities.md) 
+### [Removing an entity](csharpbeginner/removing-entities.md) 
+### [Keyboard input](csharpbeginner/keyboard-input.md) 
+### [Mouse input](csharpbeginner/mouse-input.md) 
+### [Virtual buttons](csharpbeginner/virtual-buttons.md)

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott