You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Scene.svelte 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <main>
  2. {#if showIntro}
  3. <h1>{level.name}</h1>
  4. <div class="story">
  5. <p></p>
  6. {@html level.pages[page]}
  7. <p></p>
  8. </div>
  9. <div class="controls">
  10. {page + 1}/{level.pages.length}
  11. <button on:click={previous} disabled={page == 0}>Back</button>
  12. {#if page < level.pages.length - 1}
  13. <button on:click={next}>Next</button>
  14. {:else}
  15. <button on:click={begin}>Begin</button>
  16. {/if}
  17. <button on:click={begin}>Skip</button>
  18. </div>
  19. {:else}
  20. <CircuitSim components={components} />
  21. {/if}
  22. </main>
  23. <style>
  24. h1 {
  25. margin-bottom: 0px;
  26. text-align: center;
  27. }
  28. .story {
  29. max-width: 800px;
  30. margin: auto;
  31. }
  32. .story p:first-child {
  33. margin: 0px;
  34. }
  35. .controls {
  36. text-align: center;
  37. }
  38. </style>
  39. <script>
  40. export let level;
  41. import CircuitSim from './CircuitSim.svelte';
  42. import * as availableComponents from './circuit-components.js';
  43. let components = level.components.map(name => {
  44. if (availableComponents[name] == null) {
  45. throw new Error(name, "is not a valid component name");
  46. }
  47. return {name, ctor: availableComponents[name]};
  48. });
  49. let page = 0;
  50. let showIntro = true;
  51. function previous() {
  52. if (page > 0) {
  53. page -= 1;
  54. }
  55. }
  56. function next() {
  57. if (page < level.pages.length - 1) {
  58. page += 1;
  59. }
  60. }
  61. function begin() {
  62. showIntro = false;
  63. }
  64. </script>