From 8fc090297d94ccf31b59047c039c9ba49948c2a8 Mon Sep 17 00:00:00 2001
From: DaniTheSkunk <>
Date: Fri, 25 Nov 2022 19:08:33 +0000
Subject: [PATCH] totally didn't forget commits <_<
---
.gitignore | 1 +
.idea/.gitignore | 3 +
.idea/libraries/skunkworks.xml | 9 ++
.idea/misc.xml | 6 ++
.idea/modules.xml | 8 ++
.idea/vcs.xml | 6 ++
9slice-2.png | Bin 0 -> 228 bytes
fonts/ega-8x14.png | Bin 0 -> 4214 bytes
fonts/thin-6x12.png | Bin 0 -> 1046 bytes
skunkstream.iml | 12 +++
.../danitheskunk/skunkstream/IElement.java | 7 ++
src/com/danitheskunk/skunkstream/Image.java | 34 +++++++
src/com/danitheskunk/skunkstream/Label.java | 30 ++++++
.../danitheskunk/skunkstream/NineSlice.java | 23 +++++
.../danitheskunk/skunkstream/Skunkstream.java | 87 ++++++++++++++++++
test.ini | 28 ++++++
test.png | Bin 0 -> 1615 bytes
17 files changed, 254 insertions(+)
create mode 100644 .gitignore
create mode 100644 .idea/.gitignore
create mode 100644 .idea/libraries/skunkworks.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 9slice-2.png
create mode 100644 fonts/ega-8x14.png
create mode 100644 fonts/thin-6x12.png
create mode 100644 skunkstream.iml
create mode 100644 src/com/danitheskunk/skunkstream/IElement.java
create mode 100644 src/com/danitheskunk/skunkstream/Image.java
create mode 100644 src/com/danitheskunk/skunkstream/Label.java
create mode 100644 src/com/danitheskunk/skunkstream/NineSlice.java
create mode 100644 src/com/danitheskunk/skunkstream/Skunkstream.java
create mode 100644 test.ini
create mode 100644 test.png
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6a3417b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/out/
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/libraries/skunkworks.xml b/.idea/libraries/skunkworks.xml
new file mode 100644
index 0000000..1dd35c0
--- /dev/null
+++ b/.idea/libraries/skunkworks.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..07115cd
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..69a4127
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/9slice-2.png b/9slice-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..e26ebe0f734bc4a82225f0505bb9fb654e177b82
GIT binary patch
literal 228
zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>ndj-^7$Pw>
zIpF|PnjPNH`GmhE&k;hf>Vwka^fkRWm!znClxbEF~m$swsFN5;Mha3zRb8MG=
T{V;hp(4`EXu6{1-oD!M<6a!uL
literal 0
HcmV?d00001
diff --git a/fonts/ega-8x14.png b/fonts/ega-8x14.png
new file mode 100644
index 0000000000000000000000000000000000000000..5da0d32b1ce87d4ceb87a9ca50201bbdf04e4fff
GIT binary patch
literal 4214
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
M07*qoM6N<$f(^zqUH||9
literal 0
HcmV?d00001
diff --git a/fonts/thin-6x12.png b/fonts/thin-6x12.png
new file mode 100644
index 0000000000000000000000000000000000000000..6521b923044009f809a8e0c774b77eebf1c79bf4
GIT binary patch
literal 1046
zcmeAS@N?(olHy`uVBq!ia0vp^2|#>+gAGXjZb`caq!^2X+?^QKos)UVz`%UL)5S5Q
zV$Rz;f%&f$c-kH=yY>J7={L(f&TM*Utf)Ej-t%W$t}wO-u;o~-7YFJ^0y6@@%yHe^M~C}r_HmjoKKy$|lUgP7Yr*fw%pa})ewFvaLurlP{O3m6vwxR;
z-xce`>3>d^VZ-{zU#0S=cxf)x?SHhlsCupV>)6ZM!H=f?zIEuunqzwMiz~L;tV$1&
zJDU3Wrf<2jSa00YogCw)?T;b*FQF_Pq%tv?`s=cC2F!+YGdh^)VP{0TwPZGFRoT#
zVE7>W@RUN-+Z#oxUmqP^{k8wqrqzpo*+ti{m-||?Cfxsu{lbjq;?T+~dD~*{&iMMN
zGw$~5TiNNqA8v|2WnX%C?#(x@_a~fD`@H=7LZesbO1`{dTUA$=7B2gA^4|F`_V}z_
z{hMKm-%QV2tKBv8?Zf5fEuWsh?6KRG!v{_;TM)YVQ=YbepnpBH(!CeK?y31(z6qTx
z>-pZiMUJg+nZT0Lxb$x*tWT`mTS(ruYA7B
z_U!A@!~aDMU!SS^>lsu(Ey!9WYQOf=z`t>OwhIQ|?!9*RR8>snkGFLPtJglW%sH@c
z|1O)~cGa<8B17)4(D@a9w)oY0C6QBK3ZLGwN>00FZS5QPjbX~{o4I}G=Txmzn$Nm*
z&rThy+b_@Vo@r@V{qM1_zSr?8{)6W}XYs}DefxW6)iy)x+DiUsv*o^ug!L}iyjYT9
z!R?3bv2H&%q<|bKe@vpvg*6t>9T*j+1&l_P7`4`>lwZc_PMD53+i^_Fg+S*RF4y^*wF3sgs;FcPg{!$KCy_UHbLWtzFap**(ZO
zbH`)tV%dxL0yl=IKU<;ndqY^p?LWm^5+}c#`?%jNN?N{jPL*BW?acMt*XPE3v2Hx`
zo_SBq)Eyo--o3f=)nxax`kRGc_^R$3AZ0Y-nIG!^FzsfW`ak2tos%G4p00i_>zopr
E03P53g8%>k
literal 0
HcmV?d00001
diff --git a/skunkstream.iml b/skunkstream.iml
new file mode 100644
index 0000000..8c8be27
--- /dev/null
+++ b/skunkstream.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/com/danitheskunk/skunkstream/IElement.java b/src/com/danitheskunk/skunkstream/IElement.java
new file mode 100644
index 0000000..be6a1df
--- /dev/null
+++ b/src/com/danitheskunk/skunkstream/IElement.java
@@ -0,0 +1,7 @@
+package com.danitheskunk.skunkstream;
+
+import com.danitheskunk.skunkworks.gfx.IRenderContext;
+
+public interface IElement {
+ void render(IRenderContext rc);
+}
diff --git a/src/com/danitheskunk/skunkstream/Image.java b/src/com/danitheskunk/skunkstream/Image.java
new file mode 100644
index 0000000..4434293
--- /dev/null
+++ b/src/com/danitheskunk/skunkstream/Image.java
@@ -0,0 +1,34 @@
+package com.danitheskunk.skunkstream;
+
+import com.danitheskunk.skunkworks.Recti;
+import com.danitheskunk.skunkworks.Vec2i;
+import com.danitheskunk.skunkworks.gfx.Color;
+import com.danitheskunk.skunkworks.gfx.IRenderContext;
+import com.danitheskunk.skunkworks.gfx.ITexture;
+
+public class Image implements IElement {
+ private final Vec2i pos;
+ private final ITexture texture;
+ private final Vec2i size;
+ private final Color color;
+
+ public Image(Vec2i pos, ITexture texture, Vec2i size, Color color) {
+ this.pos = pos;
+ this.texture = texture;
+ this.size = size;
+ this.color = color;
+ }
+
+ @Override
+ public void render(IRenderContext rc) {
+ if(size == Vec2i.ZERO) {
+ rc.drawTexture(pos, texture, color);
+ } else {
+ rc.drawTextureRectangle(new Recti(pos, size),
+ texture,
+ color,
+ false
+ );
+ }
+ }
+}
diff --git a/src/com/danitheskunk/skunkstream/Label.java b/src/com/danitheskunk/skunkstream/Label.java
new file mode 100644
index 0000000..dd0008e
--- /dev/null
+++ b/src/com/danitheskunk/skunkstream/Label.java
@@ -0,0 +1,30 @@
+package com.danitheskunk.skunkstream;
+
+import com.danitheskunk.skunkworks.Vec2i;
+import com.danitheskunk.skunkworks.gfx.Color;
+import com.danitheskunk.skunkworks.gfx.IRenderContext;
+import com.danitheskunk.skunkworks.gfx.font.IFont;
+
+public class Label implements IElement {
+ private final Vec2i pos;
+ private final String text;
+ private final IFont font;
+ private final Color color;
+
+ public Label(Vec2i pos, String text, IFont font, Color color) {
+ this.pos = pos;
+ this.text = text;
+ this.font = font;
+ this.color = color;
+ }
+
+ @Override
+ public void render(IRenderContext rc) {
+ rc.drawString(
+ pos,
+ text,
+ font,
+ color
+ );
+ }
+}
diff --git a/src/com/danitheskunk/skunkstream/NineSlice.java b/src/com/danitheskunk/skunkstream/NineSlice.java
new file mode 100644
index 0000000..0cfbb21
--- /dev/null
+++ b/src/com/danitheskunk/skunkstream/NineSlice.java
@@ -0,0 +1,23 @@
+package com.danitheskunk.skunkstream;
+
+import com.danitheskunk.skunkworks.Recti;
+import com.danitheskunk.skunkworks.Vec2i;
+import com.danitheskunk.skunkworks.gfx.IRenderContext;
+
+public class NineSlice implements IElement {
+ private final Vec2i pos;
+ private final com.danitheskunk.skunkworks.gfx.NineSlice nineSlice;
+ private final Vec2i size;
+
+ public NineSlice(Vec2i pos,
+ com.danitheskunk.skunkworks.gfx.NineSlice nineSlice, Vec2i size) {
+ this.pos = pos;
+ this.nineSlice = nineSlice;
+ this.size = size;
+ }
+
+ @Override
+ public void render(IRenderContext rc) {
+ rc.drawNineSlice(nineSlice, new Recti(pos, size));
+ }
+}
diff --git a/src/com/danitheskunk/skunkstream/Skunkstream.java b/src/com/danitheskunk/skunkstream/Skunkstream.java
new file mode 100644
index 0000000..eac8723
--- /dev/null
+++ b/src/com/danitheskunk/skunkstream/Skunkstream.java
@@ -0,0 +1,87 @@
+package com.danitheskunk.skunkstream;
+
+import com.danitheskunk.skunkworks.BaseGame;
+import com.danitheskunk.skunkworks.Data;
+import com.danitheskunk.skunkworks.Vec2i;
+import com.danitheskunk.skunkworks.gfx.IRenderContext;
+import com.danitheskunk.skunkworks.gfx.ITexture;
+import com.danitheskunk.skunkworks.gfx.font.IFont;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class Skunkstream extends BaseGame {
+ Data data;
+ List elements;
+ HashMap fonts;
+ HashMap textures;
+ HashMap nineSlices;
+
+ public Skunkstream() {
+ super(new Vec2i(1920, 1080), "Skunkstream v0.0");
+ data = engine.loadDataWatched("c:\\dev\\skunkstream\\test.ini");
+ elements = new ArrayList<>();
+ fonts = new HashMap<>();
+ textures = new HashMap<>();
+ nineSlices = new HashMap<>();
+ fonts.put("", debugFont);
+ prepare();
+ data.onReload(this::prepare);
+ }
+
+ public static void main(String params[]) {
+ new Skunkstream().run();
+ }
+
+ void prepare() {
+ elements.clear();
+ var cats = data.getCategories();
+ for(var cat : cats) {
+ if(!cat.equals("")) {
+ var type = data.get(cat, "type");
+ if(type.equals("label")) {
+ elements.add(new Label(
+ data.getVec2i(cat, "pos"),
+ data.get(cat, "text"),
+ fonts.get(data.get(cat, "font")),
+ data.getColor(cat, "color")
+ ));
+ } else if(type.equals("image")) {
+ var path = data.get(cat, "path");
+ if(!textures.containsKey(path)) {
+ textures.put(path, window.loadTexture(path));
+ }
+ elements.add(new Image(
+ data.getVec2i(cat, "pos"),
+ textures.get(path),
+ data.getVec2i(cat, "size"),
+ data.getColor(cat, "color")
+ ));
+ } else if(type.equals("9slice")) {
+ var path = data.get(cat, "path");
+ if(!nineSlices.containsKey(path)) {
+ nineSlices.put(path, window.loadNineSlice(path));
+ }
+ elements.add(new NineSlice(
+ data.getVec2i(cat, "pos"),
+ nineSlices.get(path),
+ data.getVec2i(cat, "size")
+ ));
+ } else if(type.equals("font")) {
+ if(!fonts.containsKey(cat)) {
+ var path = data.get(cat, "path");
+ fonts.put(cat, window.loadFontTileset(path));
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void render(IRenderContext rc) {
+ for(var element : elements) {
+ element.render(rc);
+ }
+ }
+}
diff --git a/test.ini b/test.ini
new file mode 100644
index 0000000..109e533
--- /dev/null
+++ b/test.ini
@@ -0,0 +1,28 @@
+[thin_font]
+type = font
+path = fonts/thin-6x12.png
+
+[test_img]
+type = image
+path = test.png
+pos = 50, 450
+size = 500, 100
+color = #ff0000
+
+[test_label]
+type = label
+text = Test1234
+pos = 100x500
+
+[test_label2]
+type = label
+text = nya! thin font test
+pos = 100, 516
+color = #ff00ffff
+font = thin_font
+
+[test_9slice]
+type = 9slice
+path = 9slice-2.png
+pos = 200, 200
+size = 100, 50
\ No newline at end of file
diff --git a/test.png b/test.png
new file mode 100644
index 0000000000000000000000000000000000000000..750c07246dc35af578913cee3832b0bfc0ef175c
GIT binary patch
literal 1615
zcmY*aeN>WH97dx_O_7#sxxq>6Y#z&*jXo5PUtyAE*!)N{r=#+)iAGLAgTyiuW+v`*
zR;ImvPSYWpPW)!1p|ny~4bq%|nu>^@Q?m)=UQqJvkNe(p@B6#IkLP)Q_x^a2fVbNG
z>1GH7V&!+#ClH)Ph5`Ek{5~wtCWDh%LLmMyq*{Vhg9|9h`-C?HQp@>JN8AXmH(fk>
zIspQKKQat6F{R=>1hR3&&&NABIdV$=G&3S(`^G_$gWt~K$5-tynURKF+KV@|ha%dF
z>@tVYEd|E4UVfy=3a;)lwDmZ0_&8x(gmRE8?-^vp=Su@kB
zLrBUPEsO9(J8?SpJSu!>d-aMP0+Gnx8j8hHJ|C|_a%YeP7|h(v+s!oFch!Y0(Y0}!Ffm&wDwtIO_rAz
z!r-Z$%HA5JTA%O@>5a(DZ1F1^0>W
z2z-Y{BgL8BC<&O8(;%+}c5oEpWZc8MM
zhmd9!wluY#Gi4b9%n6ru`9wat0T+Bc>3yv&W86FY7Q1y_WD1!*Z_bcd2
z%2s7>>N{rGlv4^N@c0z8M$v|?awbi$S22P*8%t`M$bJ@x^^vuF^6PZ!gua@G%bK$M
zGH5-5ZxXu}D9&re)nmLg^Nj^cO&>-y02G%onJ9B#BcMZ1up%jXL5hAS?V4^}!aN=@
zc+S-x=wDoU{?fkanh|)pVY6bapt83-Nhr|fx8nR$fMRA_b5yB(!p6k0lfs_BLkIKp
z9Jz8p$ogK*xJBnzlP@oKf;8b-S2h^Q$ra%4(Me(beel{hl9M&Nq>z=Gp3BBqXzeEu*hHC5QB{`h=W8k>!X%)b@kUU>z6`+kWY7?Y<%%6Ht
z+(SooP%|#cG#`;enFD#fR^?+R)l8zy;gu+`hL5+b2^wZntU++A+7$RZ#l$T+hnVmf
zMEPEB_`8+~=#Du?c0v0l(
ztpUMY_l2)siu|P+dmV1}*-oS0;I;7y${YI|f`Z?lFI61^hGTkCt
zZ`GwlevmSX)fCPT3Od_**N@w1UTBvyZu6)aCgjsQu_ErF8L&!B
zg5(6rt%?eiM3aHy9}cgAHAJV7D!ORwvYS&*Vug1Ms{$zc-~SPeC`|m)I~*WtfTBBF
z*HFHZ#IB6v-Ksa}6i0IHHnnU|5<8MSgA7Wt1d2H(<5H{-pHFyR*C2V$*!#2Onb>6g
z2iE6lEj6ook(S%PFOltG0=dm4z*+9N8&w*>JvVNXVruK}Bpk5GccWgr0B4b=o2o_C
z$){#+174SaE;4VJY`44bxWEf?ikm`}Glhw;K{unYzbLdm1C)$PvEqSAmSGj=STYBb^Fo!7T2{c
dRrNPoYj%!pXZ)DB3w#71en$vC)rY@L`wz6^&+z~N
literal 0
HcmV?d00001