Commit Graph

360 Commits

Author SHA1 Message Date
e4818d4f3e Abstraktion für Listener API erstellt
EventGenerator soll als einheitlicher Unterbau zur Umstzung von Listener Patterns dienen. Damit sollen Listener wie AudioListener oder AnimationListener umgesetzt werden.
2022-07-07 21:45:08 +02:00
9ee7c606fe Implementierung verschiedener Task-Typen
Die Tasks erfüllen verschiedene Aufgaben und können vom TaskRunner parallel ausgeführt werden. Ob ein so komplexes Task-Management notwendig ist, bleibt offen.
2022-07-07 21:18:45 +02:00
303b667cbf Tests für Animationen 2022-07-07 15:45:25 +02:00
2f59d29d08 Animationen als eigener Prozess
Die Animations API verwendet Funktionale Aspekte der Java 8 API und erlaubt die Animation beliebiger Objekte, aber ist vor allem auf die `shape.*` Klassen ausgelegt.
2022-07-07 15:44:36 +02:00
fc7ee36367 Implementierung von Easing-Funktionen
Die Implementierungen wurden von https://easings.net übernommen.
2022-07-07 15:42:47 +02:00
3030445dcf Changelog 2022-07-07 09:21:39 +02:00
b6b8263e5e Reference auf TextBox entfernt 2022-07-07 09:20:36 +02:00
49ad98fd82 Namen der Threads gesetzt, für leichteres Debugging 2022-07-07 09:20:01 +02:00
1e552d6bc2 Changelog 2022-07-07 08:08:36 +02:00
4e147586e4 Audio Interface ud Mixer Klasse 2022-07-07 08:08:28 +02:00
5213dbb7e9 Formatierung 2022-07-06 22:18:00 +02:00
ed2c14a143 Dokumentation 2022-07-06 22:17:50 +02:00
f9f1cfed24 LineChart auf ChartValue interface umgestellt 2022-07-06 22:17:42 +02:00
e78ec53a53 Merge branch 'main' into charts 2022-07-06 21:29:58 +02:00
c5dd889406 Refactoring der Package-Struktur 2022-07-06 21:27:52 +02:00
a94194daf1 Beispielprojekte zur ZM entfernt
Die Projekte werden in einem eigenen Repository (zeichenmaschine-examples) neu veröffentlicht.
2022-07-06 21:23:44 +02:00
4ad24fc523 Changelog angepasst 2022-07-06 21:15:47 +02:00
e42b02763a width / height umbenannt, damit Constants nicht überschrieben werden
Dies ist ein generelles Problem. Wenn in Objekten die von Constants erben width und height als Objektvariablen genutzt werden sollen, ist die Größe der Zeichenleinwand nicht mehr direkt abrufbar.

Ggf. sollten die Variablen in Constants spezifischer benannt werden (z.B. `zmwidth` oder `canvaWidth`).
2022-07-06 21:15:23 +02:00
df335c8ff2 Weitere Methoden zum hinzufügen und entfernen von Shapes 2022-07-06 21:13:18 +02:00
28d996859a Versionsnummer angepasst 2022-07-06 21:12:57 +02:00
a400829594 updateGame als globale update Methode der Spielemaschine 2022-07-06 21:12:41 +02:00
b5faf202b8 Klassen Sound und Music zur Audiowiedergabe
Sound spielt kurze Clips (z.B. Soundeffekte) ab.
Music für längere Hintergrundmusik.

MP3s werden nur über die Einbindung der externen Abhängigkeiten jlayer, tritonus-share und mp3spi ermöglicht.
2022-07-06 20:46:49 +02:00
950098110f Eine TaskQueue in der Tasks geplant werden können
Es können Tasks (Runnables) für die geplante Ausführung (z.B. in 100 ms) übergeben werden. Die Tasks werden dann jeweils am Ende eines Frames abgearbeitet. Bei Bedarf auch parallel mit dem TaskRunner.

Das System sollte noch einmal Refactored werden. (Und ggf. auch auf seine Sinnhaftigkeit geprüft werden.)
2022-07-06 20:41:34 +02:00
ffe9bef5fd Synchronisierte EventQueue für InputEvents
Eingaben der Swing Componente werden nun in eine interen EventQueue einsortiert, die einmal pro Frame abgearbeitet wird. Das verhindert Probleme bei der Synchronisierung der ZM mit dem EDT von Swing.

Im Moment werden die Originalen InputEvent gespeichert und verarbeitet. In Zukunft könnte eine eigene Event-Klasse sinnvoll sein, die die Events für die Nutzer vereinfacht (siehe Processing).
2022-07-06 20:39:34 +02:00
81624e3a7a Setter für FPS verhindert das setzen auf weniger als 0 frames 2022-07-06 20:36:27 +02:00
1a26afb1ae Fehlende Imports in der Zeichenmaschine gefixt 2022-07-06 20:33:57 +02:00
264552c8b7 Neue Klasse TaskRunner
TaskRunner ist eine statische Klasse, die einen ThreadPool verwaltet und es anderen KLassen ermöglicht, Parallele Prozesse auszuführen. Die ZM ist grundsätzlich erstmal nicht auf Parallelität ausgelegt, da alle im „GameLoop“ (Zeichenmaschine$Zeichenthread) pro Frame synchron läuft. Einige Aufgaben erfordern aber eigene Therad (z.B. das Abspielen von Musikdateien oder zukünftige Animationen).

Der TaskRunner ist eine erste Verison einer Klasse, die zukünftig in der ZM an Bedeutung gewinnen könnte, wenn Parallelität wichtiger wird (z.B. in der Spielemaschine).
2022-07-06 20:33:10 +02:00
bb330c81b8 Reafactoring des ImageLoader
ImageLoader nutz nun den ResourceStreamProvider und die Logging API
2022-07-06 20:29:50 +02:00
aadec6d973 Refactoring des FontLoader
Das Öffnen von Resourcen Streams wurde in eine eigene Hilfsklasse ausgelagert. FontLoader nutzt nun die neue Logging API.
2022-07-06 20:29:21 +02:00
fb2580eb2c Logging API erstellt, um einheitliches Logging zu vereinfachen 2022-07-06 20:18:25 +02:00
49063c9581 Klasse Validator eingefügt 2022-07-06 20:16:37 +02:00
62dc4190a1 Spelling 2022-07-01 13:05:52 +02:00
a31ec502d4 Möglichkeit beliebige Tasks zu timen
Die ZM kann nun beliebige Runnables mit einem Zeitdelay versehen ausführen. Mitteles `scheduleTask(Runnable, int)` wird das angegebene Runnable nach der angegebene Anzahl Millisekunden ausgeführt.
Tasks werden immer am Ende eines Frames ausgeführt.
2022-07-01 13:05:23 +02:00
0f0b03d8fe Verwendung eigener Schriftarten 2022-07-01 13:00:53 +02:00
57c396c2e4 Verwendung der neuen FontLoader KLasse 2022-07-01 13:00:39 +02:00
bd71bb6619 Hilfsklasse um Schrifarten aus Dateien zu laden 2022-07-01 13:00:09 +02:00
fb88f8a17f Spielemaschine auf neue Standardebenen angepasst 2022-06-30 21:29:38 +02:00
c989e69f9f Behandlung von inputs nun in eigener EventQueue
Tastatur- und Mauseingaben werden nun nicht mehr direkt verarbeitet, sondern in eine interne EventQueue geschoben, die nach dem Aufruf von `draw()` abgearbeitet wird. Die `InputEvent`s werden momentan direkt an die üblichen Listener Methoden weitergegeben. Ggf. ist in Zukunft hier auch ein vereinfachtes Eventsystem (siehe Processing) sinnvoll.
Ist die ZM pausiert, werden Events ohne verzögerung direkt ausgelöst.
2022-06-30 21:29:01 +02:00
3e94f42ed3 Zeichenleinwand wird nur noch mit ColorLayer initialisiert 2022-06-30 21:25:05 +02:00
1b5f46c771 Boids Beispiel angepasst und Bug bei Null-Entfernung behoben 2022-06-30 21:24:10 +02:00
445bc29480 Vector wirft nun eine Exception, wenn durch 0 geteilt wird 2022-06-30 21:22:12 +02:00
62e9f5d0f2 Allgemeiner GraphicsLayer hinzugefügt
Vor allem für Testst hilfreich
2022-06-29 22:35:57 +02:00
4f1bd25ad7 Hehomon Beispiel implementiert
Noch Bugs bei Verwendung des Vollbildmodus vorhanden
2022-06-29 22:35:24 +02:00
ff56e689f8 Test für Formen 2022-06-29 22:34:48 +02:00
a01878286b Klassenmethode zur Berechnung beliebiger Ankerpunkte 2022-06-29 22:34:31 +02:00
010a37fc0e Breite / Höhe von Gruppen darf nicht manuell geändert werden 2022-06-29 22:30:39 +02:00
1a55e11841 Texte haben eine separate fontColor
stroke und fill werden nun auf null gesetzt und als Rahmen bzw Hintergrund gezeichnet, wenn sie gesetzt werden.
2022-06-29 22:30:19 +02:00
67610963f2 Spielemaschine als UNterbau für Spiele mit der ZM 2022-06-29 22:29:42 +02:00
57afc4683f Dokumentaiton verbessert 2022-06-29 22:29:23 +02:00
cb303d2c32 Tastencodes als Konstanten ergänzt 2022-06-29 22:29:12 +02:00