index.html 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. ---
  2. layout: default
  3. title: Torque 3D
  4. root: .
  5. ---
  6. <div class="jumbotron banner">
  7. <div class="container">
  8. <div class="row">
  9. <div class="col-sm-4">
  10. <img id="torque-logo" src="{{page.root}}/img/torque.png"></img>
  11. </div>
  12. <div class="col-sm-8">
  13. <h1 class="title">Torque 3D</h1>
  14. <p>The premier open-source game engine.</p>
  15. </div>
  16. </div>
  17. </div>
  18. </div>
  19. <div class="break"></div>
  20. <div class="container">
  21. <div class="row">
  22. <div class="col-sm-4">
  23. <h2>Proven tech</h2>
  24. <p>
  25. Torque has been around for a while, and it's been used for everything
  26. from driving simulators to MMOs to interactive coral reefs. Still
  27. not convinced?
  28. </p>
  29. <center>
  30. <a class="btn btn-default" href="{{page.root}}/engine">
  31. See some games
  32. <i class="fa fa-angle-right"></i>
  33. </a>
  34. </center>
  35. </div>
  36. <div class="col-sm-4">
  37. <h2>Gratis et libre</h2>
  38. <p>
  39. When you get Torque, you get everything. Under the permissive MIT
  40. open-source license, you can do what you want with the source code.
  41. </p>
  42. <center>
  43. <a class="btn btn-default" href="{{page.root}}/start">
  44. Download it now
  45. <i class="fa fa-angle-right"></i>
  46. </a>
  47. </center>
  48. </div>
  49. <div class="col-sm-4">
  50. <h2>Always evolving</h2>
  51. <p>
  52. Torque is being constantly developed by an enthusiastic community.
  53. Its future is in <em>our</em> hands, not those of a company with a
  54. bottom line to meet.
  55. </p>
  56. <center>
  57. <a class="btn btn-default" href="{{page.root}}/contribute">
  58. Get involved
  59. <i class="fa fa-angle-right"></i>
  60. </a>
  61. </center>
  62. </div>
  63. </div>
  64. </div>
  65. <div class="break"></div>
  66. <div class="container">
  67. <div class="row">
  68. <div class="col-sm-4">
  69. <h2 class="status">Recent news</h2>
  70. <div id="recent-news">Loading news...</div>
  71. <a class="pull-right" href="http://forums.torque3d.org/viewforum.php?f=15">See all <i class="fa fa-angle-right"></i></a>
  72. </div>
  73. <div class="col-sm-4">
  74. <h2 class="status">Activity</h2>
  75. <p id="activity-loading">Loading activity...</p>
  76. </div>
  77. <div class="col-sm-4">
  78. <h2>Quick links</h2>
  79. <ul id="quick-links">
  80. <li><a href="https://github.com/GarageGames/Torque3D/issues/new">Report an issue</a></li>
  81. <li><a href="https://github.com/GarageGames/Torque3D/issues?labels=Final+review">Changes for final review</a></li>
  82. <li><a href="http://garagegames.uservoice.com/forums/178972-torque-3d-mit/filters/top">Feature requests</a></li>
  83. <li><a href="http://t3dci.org">Builds and CI</a></li>
  84. </ul>
  85. </div>
  86. </div>
  87. </div>
  88. <script type="text/javascript" src="{{page.root}}/js/jquery.cycle.all.js"></script>
  89. <script type="text/javascript" src="{{page.root}}/js/jquery.timeago.js"></script>
  90. <script type="text/javascript">
  91. $(document).ready(function() {
  92. var images = {
  93. 1: 'Deadly Matter by Studio Dim Sum',
  94. 2: 'Airship Dragoon by YorkshireRifles',
  95. 3: 'Deadly Matter by Studio Dim Sum',
  96. 4: 'Life is Feudal',
  97. 5: 'Frozen Endzone by Mode 7',
  98. 6: 'The Reef by QUT',
  99. 7: 'Grim Prospects',
  100. 8: 'Grim Prospects',
  101. 9: 'BeamNG.drive by BeamNG',
  102. 12: 'Villagers and Heroes by Mad Otter Games',
  103. 13: 'Villagers and Heroes by Mad Otter Games',
  104. 14: 'Villagers and Heroes by Mad Otter Games',
  105. 15: 'Tower Wars by SuperVillain Studios',
  106. 16: 'Tower Wars by SuperVillain Studios',
  107. 17: 'Tower Wars by SuperVillain Studios',
  108. 18: 'Life is Feudal',
  109. 19: 'Chinatown (demo) by GarageGames',
  110. 20: 'Deathball Desert (demo) by GarageGames',
  111. 21: 'Deathball Desert (demo) by GarageGames',
  112. 22: 'Mars (demo) by GarageGames',
  113. 23: 'Airship Dragoon by YorkshireRifles',
  114. 24: 'Airship Dragoon by YorkshireRifles',
  115. 25: 'Frozen Endzone by Mode 7',
  116. 26: 'Frozen Endzone by Mode 7',
  117. 29: 'Dark Horizons: Mechanized Corps by Max Gaming Technologies',
  118. 30: 'Dark Horizons: Mechanized Corps by Max Gaming Technologies',
  119. 31: 'Dark Horizons: Mechanized Corps by Max Gaming Technologies',
  120. 32: 'Age of Decadence by Iron Tower Studio',
  121. 33: 'Age of Decadence by Iron Tower Studio',
  122. 34: 'Age of Decadence by Iron Tower Studio',
  123. 35: 'BeamNG.drive by BeamNG',
  124. 36: 'Terminal Overload by fr1tz',
  125. 37: 'Terminal Overload by fr1tz',
  126. };
  127. function shuffle(o) {
  128. for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
  129. return o;
  130. }
  131. // TODO: ensure no duplicate images occur.
  132. function createBreaks() {
  133. var breaks = $('div.break');
  134. var delay = 0;
  135. breaks.each(function(i) {
  136. // Shuffle the list of pictures that will appear in each break.
  137. var ids = shuffle(Object.keys(images));
  138. for(var i = 0; i < ids.length; i++) {
  139. $(this).append($('<img>')
  140. .attr('width', '760px')
  141. .attr('height', '144px')
  142. .attr('src', '{{page.root}}/img/banner'+ids[i]+'.jpg')
  143. .attr('title', images[ids[i]]));
  144. }
  145. $(this).cycle({fx: 'fade', delay: delay});
  146. delay += 5000 / breaks.length;
  147. });
  148. };
  149. createBreaks();
  150. getFeed('https://github.com/GarageGames/Torque3D/commits/development.atom', 2)
  151. .done(function (data) {
  152. if(data.responseData.feed && data.responseData.feed.entries) {
  153. var list = $('<ul/>').addClass('list-unstyled');
  154. $.each(data.responseData.feed.entries, function (i, e) {
  155. var li = $('<li/>').addClass('commit').appendTo(list);
  156. var hash = e.link.split('/').pop().substr(0, 6);
  157. var content = e.contentSnippet.split('\n').pop();
  158. var contentel = $('<p/>').text(content).appendTo(li);
  159. var hashel = $('<pre/>').addClass('inline').prependTo(contentel);
  160. hashel.append($('<a/>')
  161. .text(hash)
  162. .attr('href', e.link)
  163. .attr('target', '_blank'));
  164. var d = new Date(e.publishedDate);
  165. var stamp = $('<span/>').addClass('timeago').text('by ' + e.author + ' ').appendTo(li);
  166. stamp.append($('<span/>')
  167. .attr('title', d.toISOString())
  168. .timeago());
  169. });
  170. $('#activity-loading').replaceWith(list);
  171. }
  172. })
  173. getFeed('http://forums.torque3d.org/feed.php?mode=news', 1)
  174. .done(function(data) {
  175. if(data.responseData.feed && data.responseData.feed.entries) {
  176. var news = $('#recent-news');
  177. $.each(data.responseData.feed.entries, function (i, e) {
  178. news.html('');
  179. news.append($('<h5/>')
  180. .append($('<a/>')
  181. .attr('href', e.link)
  182. .html(e.title)
  183. )
  184. );
  185. var d = new Date(e.publishedDate);
  186. var stamp = $('<span/>').addClass('timeago').text('by ' + e.author + ' ').appendTo(news);
  187. stamp.append($('<span/>')
  188. .attr('title', d.toISOString())
  189. .timeago());
  190. news.append($('<p/>').html(e.contentSnippet + ' ')
  191. .append($('<a/>')
  192. .attr('href', e.link)
  193. .html('Read more')
  194. )
  195. );
  196. });
  197. }
  198. });
  199. $.get('http://api.github.com/repos/GarageGames/Torque3D/releases')
  200. .done(function(releases) {
  201. var latest = releases[0];
  202. $('<li/>').append($('<a/>')
  203. .attr('href', latest.html_url)
  204. .html('Version ' + latest.name)
  205. ).prependTo('#quick-links');
  206. })
  207. .fail(function() {
  208. $('#current-version').html('error');
  209. });
  210. // Get a feed through the Google feeds API with hourly caching.
  211. function getFeed(feed, numResults) {
  212. var now = new Date();
  213. var googleAPI = document.location.protocol +
  214. '//ajax.googleapis.com/ajax/services/feed/load?' +
  215. 'v=1.0' +
  216. '&dailycache=' + [now.getUTCDate(), now.getUTCMonth(), now.getUTCFullYear()].join('-') +
  217. '&num=' + numResults +
  218. '&callback=?&q=';
  219. var url = googleAPI + encodeURIComponent(feed);
  220. return $.ajax({
  221. url: url,
  222. dataType: 'json'
  223. });
  224. }
  225. });
  226. </script>