-
Notifications
You must be signed in to change notification settings - Fork 66
Roadmap
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).
(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
.