Skip to content
Kevinpgalligan edited this page Jan 28, 2024 · 7 revisions

Categorising issues

Issues, and contributions to the sketch project, can be roughly grouped into the following categories:

  • Bugs.
  • Testing.
  • Platform-specific / installation issues.
  • Missing features (that people might expect to have, like drawing in input functions).
  • Nice-to-have features.
  • Infrastructure (a website; a Discord channel where people can come for help; documentation for everything; tutorials).

Sketch as a playground

(Based on a discussion between vydd, Gleefre and Kevin).

One approach to directing our efforts in developing sketch is to ask the question: what IS sketch? And what is it supposed to do?

Consider the idea of sketch as a graphics playground. Users can prototype and experiment in diverse areas: "electronic art, visual design, game prototyping, game making, computer graphics, exploration of human-computer interaction, and more".

A selected quote from vydd: "Part of being at a playground is interacting with the ready-made". In this conception of sketch, it has built-in capabilities for a variety of graphics applications that the user can easily experiment with.

An example of some features that a user might expect to find in a graphics playground:

  • An entity system, with efficient spatial data structures. (Already added, but lacks documentation & efficient data structures).
  • A scene abstraction, as found in game engines. Games will have separate scenes for the menu, the main game loop, etc. Each scene has its own state, logic, and drawing code.
  • Flexible control of the main loop / FPS (see: https://github.com/vydd/sketch/issues/140).
  • Widgets for tweaking parameters of a sketch (e.g. in p5js it's easy to add buttons and sliders to the DOM).
  • Buttons / other interactive features within the sketch (maybe based on the entity system).
  • Audio-handling.
  • Common game mechanics like boards.
  • Built-in colour palettes that can be easily shuffled / swapped (see: https://github.com/Kevinpgalligan/sketches/blob/master/src/palette.lisp).
  • Vectors.
  • Simple verlet physics (particles, springs, sticks, gravity, borders).
  • Perlin noise and related stuff (pending: https://github.com/vydd/sketch/issues/115).
  • Easy export/distribution of the sketch as an application.

One objection to this approach is that maybe the sketch user won't want to depend on a massive library with all these capabilities, or e.g. they may wish to swap out one implementation of audio-handling for another (Gleefre's example).

For this reason, a possible approach is to separate sketch into multiple systems. sketch/core contains the core graphics / windowing / looping functionality of sketch, sketch/entities the entity system, sketch/audio the audio-handling, sketch/physics, sketch/widgets, etc. The main sketch system comes with all of these subsystems, but if a user only wants to use sketch/core and sketch/physics, then they can do so. There may, of course, be dependencies between these subsystems, like sketch/physics relying on sketch/vectors.