From 5b62fe3f09450260fde5d02f26c496a6952f26f9 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 4 Feb 2022 14:52:17 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20StarboundClient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ => client}/freetype/struct/CMacros.java | 2 +- .../{ => client}/freetype/struct/FT_BBox.java | 2 +- .../freetype/struct/FT_Bitmap.java | 2 +- .../freetype/struct/FT_Bitmap_Size.java | 2 +- .../freetype/struct/FT_CharMapRec.java | 2 +- .../freetype/struct/FT_Encoding.java | 2 +- .../freetype/struct/FT_EncodingNative.java | 2 +- .../freetype/struct/FT_FaceRec.java | 2 +- .../freetype/struct/FT_Fixed.java | 2 +- .../freetype/struct/FT_Generic.java | 2 +- .../freetype/struct/FT_GlyphSlotRec.java | 2 +- .../freetype/struct/FT_Glyph_Format.java | 2 +- .../struct/FT_Glyph_FormatNative.java | 2 +- .../freetype/struct/FT_Glyph_Metrics.java | 2 +- .../{ => client}/freetype/struct/FT_Long.java | 2 +- .../freetype/struct/FT_Matrix.java | 2 +- .../freetype/struct/FT_Outline.java | 2 +- .../freetype/struct/FT_Pixel_Mode.java | 2 +- .../{ => client}/freetype/struct/FT_Pos.java | 2 +- .../freetype/struct/FT_SizeRec.java | 2 +- .../freetype/struct/FT_Size_Metrics.java | 2 +- .../freetype/struct/FT_SubGlyphRec.java | 2 +- .../freetype/struct/FT_Vector.java | 2 +- .../ru/dbotthepony/kstarbound/GameRegistry.kt | 13 - .../kotlin/ru/dbotthepony/kstarbound/Main.kt | 128 ++-------- .../ru/dbotthepony/kstarbound/Starbound.kt | 8 +- .../kstarbound/client/StarboundClient.kt | 228 ++++++++++++++++++ .../{ => client}/freetype/Constants.kt | 2 +- .../{ => client}/freetype/Errors.kt | 2 +- .../{ => client}/freetype/FreeType.kt | 4 +- .../kstarbound/{ => client}/gl/ErrorCheck.kt | 2 +- .../{ => client}/gl/GLAttributeList.kt | 2 +- .../kstarbound/{ => client}/gl/GLShader.kt | 2 +- .../{ => client}/gl/GLShaderProgram.kt | 2 +- .../{ => client}/gl/GLStateTracker.kt | 33 ++- .../kstarbound/{ => client}/gl/GLTexture.kt | 2 +- .../{ => client}/gl/GLVertexArrayObject.kt | 2 +- .../{ => client}/gl/GLVertexBufferObject.kt | 2 +- .../{ => client}/gl/VertexBuilder.kt | 5 +- .../{ => client}/render/BakedProgramState.kt | 6 +- .../kstarbound/{ => client}/render/Camera.kt | 2 +- .../{ => client}/render/ChunkRenderer.kt | 3 +- .../kstarbound/{ => client}/render/Font.kt | 9 +- .../{ => client}/render/TileRenderer.kt | 4 +- .../ru/dbotthepony/kstarbound/util/Color.kt | 1 + 45 files changed, 334 insertions(+), 174 deletions(-) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/CMacros.java (84%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_BBox.java (76%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Bitmap.java (98%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Bitmap_Size.java (86%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_CharMapRec.java (87%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Encoding.java (96%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_EncodingNative.java (60%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_FaceRec.java (99%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Fixed.java (88%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Generic.java (77%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_GlyphSlotRec.java (99%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Glyph_Format.java (89%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Glyph_FormatNative.java (61%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Glyph_Metrics.java (88%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Long.java (57%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Matrix.java (73%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Outline.java (94%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Pixel_Mode.java (80%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Pos.java (56%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_SizeRec.java (91%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Size_Metrics.java (93%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_SubGlyphRec.java (86%) rename src/main/java/ru/dbotthepony/kstarbound/{ => client}/freetype/struct/FT_Vector.java (86%) delete mode 100644 src/main/kotlin/ru/dbotthepony/kstarbound/GameRegistry.kt create mode 100644 src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/freetype/Constants.kt (94%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/freetype/Errors.kt (99%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/freetype/FreeType.kt (95%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/ErrorCheck.kt (97%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/GLAttributeList.kt (98%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/GLShader.kt (97%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/GLShaderProgram.kt (99%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/GLStateTracker.kt (87%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/GLTexture.kt (99%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/GLVertexArrayObject.kt (96%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/GLVertexBufferObject.kt (97%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/gl/VertexBuilder.kt (98%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/render/BakedProgramState.kt (90%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/render/Camera.kt (89%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/render/ChunkRenderer.kt (97%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/render/Font.kt (97%) rename src/main/kotlin/ru/dbotthepony/kstarbound/{ => client}/render/TileRenderer.kt (98%) diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/CMacros.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/CMacros.java similarity index 84% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/CMacros.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/CMacros.java index 162df661..2c0197ad 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/CMacros.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/CMacros.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_BBox.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_BBox.java similarity index 76% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_BBox.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_BBox.java index 1e1f830d..5656fdfb 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_BBox.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_BBox.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Bitmap.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Bitmap.java similarity index 98% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Bitmap.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Bitmap.java index 729c494f..f844bff0 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Bitmap.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Bitmap.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Pointer; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Bitmap_Size.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Bitmap_Size.java similarity index 86% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Bitmap_Size.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Bitmap_Size.java index 05e442fb..c477075d 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Bitmap_Size.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Bitmap_Size.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_CharMapRec.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_CharMapRec.java similarity index 87% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_CharMapRec.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_CharMapRec.java index 11f48317..93ae9ff7 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_CharMapRec.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_CharMapRec.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Pointer; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Encoding.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Encoding.java similarity index 96% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Encoding.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Encoding.java index acbdbe5f..5c9d00e1 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Encoding.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Encoding.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_EncodingNative.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_EncodingNative.java similarity index 60% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_EncodingNative.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_EncodingNative.java index d669eafc..d7176cd1 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_EncodingNative.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_EncodingNative.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_FaceRec.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_FaceRec.java similarity index 99% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_FaceRec.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_FaceRec.java index c84427a2..5d887b6d 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_FaceRec.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_FaceRec.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Pointer; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Fixed.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Fixed.java similarity index 88% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Fixed.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Fixed.java index 283a2486..bd0c9c90 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Fixed.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Fixed.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Generic.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Generic.java similarity index 77% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Generic.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Generic.java index d1fd5456..b8ba85e4 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Generic.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Generic.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Pointer; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_GlyphSlotRec.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_GlyphSlotRec.java similarity index 99% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_GlyphSlotRec.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_GlyphSlotRec.java index e14c1a2a..464f4f49 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_GlyphSlotRec.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_GlyphSlotRec.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Pointer; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_Format.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_Format.java similarity index 89% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_Format.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_Format.java index 0f42dda4..157dcc30 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_Format.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_Format.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_FormatNative.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_FormatNative.java similarity index 61% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_FormatNative.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_FormatNative.java index 0f10ee29..3613b686 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_FormatNative.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_FormatNative.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_Metrics.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_Metrics.java similarity index 88% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_Metrics.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_Metrics.java index 146342fc..9f3886eb 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Glyph_Metrics.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Glyph_Metrics.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Long.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Long.java similarity index 57% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Long.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Long.java index 99297897..6a22d7b3 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Long.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Long.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Matrix.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Matrix.java similarity index 73% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Matrix.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Matrix.java index f2a56464..4061bc37 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Matrix.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Matrix.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Outline.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Outline.java similarity index 94% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Outline.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Outline.java index e2c792ed..b2d32c32 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Outline.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Outline.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Pointer; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Pixel_Mode.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Pixel_Mode.java similarity index 80% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Pixel_Mode.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Pixel_Mode.java index 2af52568..9398c587 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Pixel_Mode.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Pixel_Mode.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; public enum FT_Pixel_Mode { FT_PIXEL_MODE_NONE, diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Pos.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Pos.java similarity index 56% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Pos.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Pos.java index 656366d3..367e5b2b 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Pos.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Pos.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.NativeLong; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_SizeRec.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_SizeRec.java similarity index 91% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_SizeRec.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_SizeRec.java index 236d56df..77898001 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_SizeRec.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_SizeRec.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Pointer; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Size_Metrics.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Size_Metrics.java similarity index 93% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Size_Metrics.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Size_Metrics.java index 65bf9f90..385ca615 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Size_Metrics.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Size_Metrics.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_SubGlyphRec.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_SubGlyphRec.java similarity index 86% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_SubGlyphRec.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_SubGlyphRec.java index 2525c7b5..8fe316e1 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_SubGlyphRec.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_SubGlyphRec.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Structure; diff --git a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Vector.java b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Vector.java similarity index 86% rename from src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Vector.java rename to src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Vector.java index eccef5b9..a4ca87a1 100644 --- a/src/main/java/ru/dbotthepony/kstarbound/freetype/struct/FT_Vector.java +++ b/src/main/java/ru/dbotthepony/kstarbound/client/freetype/struct/FT_Vector.java @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype.struct; +package ru.dbotthepony.kstarbound.client.freetype.struct; import com.sun.jna.Structure; import ru.dbotthepony.kstarbound.math.Vector2i; diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/GameRegistry.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/GameRegistry.kt deleted file mode 100644 index 36ec703a..00000000 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/GameRegistry.kt +++ /dev/null @@ -1,13 +0,0 @@ -package ru.dbotthepony.kstarbound - -class GameRegistry { - private val table = HashMap() - val access: Map by table - - var frozen = false - private set - - fun freeze() { - frozen = true - } -} diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/Main.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/Main.kt index 33752453..d2e48b56 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/Main.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/Main.kt @@ -2,25 +2,20 @@ package ru.dbotthepony.kstarbound import org.apache.logging.log4j.LogManager import org.lwjgl.Version -import org.lwjgl.glfw.Callbacks.glfwFreeCallbacks import org.lwjgl.glfw.GLFW.* -import org.lwjgl.glfw.GLFWErrorCallback import org.lwjgl.opengl.GL46.* -import org.lwjgl.system.MemoryStack.stackPush -import org.lwjgl.system.MemoryUtil.NULL -import ru.dbotthepony.kstarbound.defs.TileDefinition -import ru.dbotthepony.kstarbound.gl.* -import ru.dbotthepony.kstarbound.math.* -import ru.dbotthepony.kstarbound.render.* +import ru.dbotthepony.kstarbound.client.StarboundClient +import ru.dbotthepony.kstarbound.math.Matrix4f +import ru.dbotthepony.kstarbound.client.render.Camera +import ru.dbotthepony.kstarbound.client.render.ChunkRenderer +import ru.dbotthepony.kstarbound.client.render.TextAlignX +import ru.dbotthepony.kstarbound.client.render.TextAlignY import ru.dbotthepony.kstarbound.util.Color import ru.dbotthepony.kstarbound.util.formatBytesShort import java.io.File private val LOGGER = LogManager.getLogger() -var terminateGame = false - private set - var viewportWidth = 800 private set @@ -47,19 +42,20 @@ var window = 0L fun main() { LOGGER.info("Running LWJGL ${Version.getVersion()}") - try { - init() - loop() - } finally { - if (window != NULL) { - glfwFreeCallbacks(window) - glfwDestroyWindow(window) - } + val client = StarboundClient() - glfwTerminate() - glfwSetErrorCallback(null)?.free() + Starbound.addFilePath(File("./unpacked_assets/")) - terminateGame = true + Starbound.initializeGame { finished, replaceStatus, status -> + client.pushLoadingText(status, replaceStatus) + } + + client.onTermination { + Starbound.terminateLoading = true + } + + while (client.renderFrame()) { + Starbound.pollCallbacks() } } @@ -67,94 +63,14 @@ private var camera: Camera? = null private val startupTextList = ArrayList() private var finishStartupRendering = Long.MAX_VALUE -private fun init() { - GLFWErrorCallback.create { error, description -> - LOGGER.error("LWJGL error {}: {}", error, description) - }.set() - - check(glfwInit()) { "Unable to initialize GLFW" } - - glfwDefaultWindowHints() - - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE) - glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE) - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4) - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6) - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE) - - window = glfwCreateWindow(viewportWidth, viewportHeight, "LWJGL Window!", NULL, NULL) - require(window != NULL) { "Unable to create GLFW window" } - - glfwSetKeyCallback(window) { window, key, scancode, action, mods -> - if (key == GLFW_KEY_ESCAPE || key == GLFW_RELEASE) { - glfwSetWindowShouldClose(window, true) - } else { - camera?.userInput(key, scancode, action, mods) - } - } - - glfwSetFramebufferSizeCallback(window) { _, w, h -> - viewportWidth = w - viewportHeight = h - viewportMatrixGUI = updateViewportMatrixA() - viewportMatrixGame = updateViewportMatrixB() - glViewport(0, 0, w, h) - } - - val stack = stackPush() - - try { - val pWidth = stack.mallocInt(1) - val pHeight = stack.mallocInt(1) - - glfwGetWindowSize(window, pWidth, pHeight) - - val vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor())!! - - glfwSetWindowPos( - window, - (vidmode.width() - pWidth[0]) / 2, - (vidmode.height() - pHeight[0]) / 2 - ) - } finally { - stack.close() - } - - glfwMakeContextCurrent(window) - - // vsync - glfwSwapInterval(1) - - glfwShowWindow(window) - - startupTextList.add("Initialized GLFW window") - - Starbound.addFilePath(File("./unpacked_assets/")) - - Starbound.initializeGame { finished, replaceStatus, status -> - if (replaceStatus) { - if (startupTextList.isEmpty()) { - startupTextList.add(status) - } else { - startupTextList[startupTextList.size - 1] = status - } - } else { - startupTextList.add(status) - } - - if (finished) { - finishStartupRendering = System.currentTimeMillis() + 4000L - } - } -} - var frameRenderTime = 1.0 private set val framesPerSecond get() = 1.0 / frameRenderTime private fun loop() { - val state = GLStateTracker() + val client = StarboundClient() + val state = client.gl startupTextList.add("Initialized OpenGL context") camera = Camera() @@ -166,7 +82,7 @@ private fun loop() { var chunkRenderer: ChunkRenderer? = null - Starbound.onInitialize { + /*Starbound.onInitialize { val chunk = Starbound.world.getOrMakeChunk(Vector2i(2, 2)) var x = 0 @@ -208,7 +124,7 @@ private fun loop() { chunkRenderer = ChunkRenderer(state, chunk, Starbound.world) chunkRenderer!!.tesselateStatic() chunkRenderer!!.uploadStatic() - } + }*/ val runtime = Runtime.getRuntime() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt index 0f9d5a83..69cbcaba 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt @@ -14,12 +14,12 @@ class TileDefLoadingException(message: String, cause: Throwable? = null) : Illeg object Starbound { private val tiles = HashMap() val tilesAccess = object : Map by tiles {} - val world = World() var initializing = false private set var initialized = false private set + var terminateLoading = false private val _filepath = ArrayList() val filepath = object : List by _filepath {} @@ -70,12 +70,12 @@ object Starbound { initializing = true - Thread { + Thread({ val time = System.currentTimeMillis() callback(false, false, "Loading materials...") loadTileMaterials { - if (terminateGame) { + if (terminateLoading) { throw InterruptedException("Game is terminating") } @@ -87,7 +87,7 @@ object Starbound { initializing = false initialized = true callback(true, false, "Finished loading in ${System.currentTimeMillis() - time}ms") - }.start() + }, "Asset Loader").start() } fun onInitialize(callback: () -> Unit) { diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt new file mode 100644 index 00000000..c63d84a5 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt @@ -0,0 +1,228 @@ +package ru.dbotthepony.kstarbound.client + +import org.apache.logging.log4j.LogManager +import org.lwjgl.glfw.Callbacks +import org.lwjgl.glfw.GLFW +import org.lwjgl.glfw.GLFWErrorCallback +import org.lwjgl.opengl.GL46.* +import org.lwjgl.system.MemoryStack +import org.lwjgl.system.MemoryUtil +import ru.dbotthepony.kstarbound.client.gl.GLStateTracker +import ru.dbotthepony.kstarbound.math.Matrix4f +import ru.dbotthepony.kstarbound.client.render.Camera +import ru.dbotthepony.kstarbound.client.render.TextAlignX +import ru.dbotthepony.kstarbound.client.render.TextAlignY +import ru.dbotthepony.kstarbound.util.Color +import ru.dbotthepony.kstarbound.util.formatBytesShort +import ru.dbotthepony.kstarbound.world.World + +class StarboundClient : AutoCloseable { + val window: Long + val camera = Camera() + + var gameTerminated = false + private set + + var viewportWidth = 800 + private set + + var viewportHeight = 600 + private set + + var viewportMatrixGUI = updateViewportMatrixA() + private set + + var viewportMatrixGame = updateViewportMatrixB() + private set + + private val startupTextList = ArrayList() + private var finishStartupRendering = System.currentTimeMillis() + 4000L + + fun pushLoadingText(text: String, replace: Boolean = false) { + if (replace) { + if (startupTextList.isEmpty()) { + startupTextList.add(text) + } else { + startupTextList[startupTextList.size - 1] = text + } + } else { + startupTextList.add(text) + } + + finishStartupRendering = System.currentTimeMillis() + 4000L + } + + private fun updateViewportMatrixA(): Matrix4f { + return Matrix4f.ortho(0f, viewportWidth.toFloat(), 0f, viewportHeight.toFloat(), 0.1f, 100f) + } + + private fun updateViewportMatrixB(): Matrix4f { + return Matrix4f.orthoDirect(0f, viewportWidth.toFloat(), 0f, viewportHeight.toFloat(), 1f, 100f) + } + + init { + GLFWErrorCallback.create { error, description -> + LOGGER.error("LWJGL error {}: {}", error, description) + }.set() + + check(GLFW.glfwInit()) { "Unable to initialize GLFW" } + + GLFW.glfwDefaultWindowHints() + + GLFW.glfwWindowHint(GLFW.GLFW_VISIBLE, GLFW.GLFW_FALSE) + GLFW.glfwWindowHint(GLFW.GLFW_RESIZABLE, GLFW.GLFW_TRUE) + GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 4) + GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MINOR, 6) + GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_PROFILE, GLFW.GLFW_OPENGL_CORE_PROFILE) + + window = GLFW.glfwCreateWindow(viewportWidth, viewportHeight, "KStarbound", MemoryUtil.NULL, MemoryUtil.NULL) + require(window != MemoryUtil.NULL) { "Unable to create GLFW window" } + startupTextList.add("Created GLFW window") + + GLFW.glfwSetKeyCallback(window) { window, key, scancode, action, mods -> + if (key == GLFW.GLFW_KEY_ESCAPE || key == GLFW.GLFW_RELEASE) { + GLFW.glfwSetWindowShouldClose(window, true) + } else { + camera.userInput(key, scancode, action, mods) + } + } + + GLFW.glfwSetFramebufferSizeCallback(window) { _, w, h -> + viewportWidth = w + viewportHeight = h + viewportMatrixGUI = updateViewportMatrixA() + viewportMatrixGame = updateViewportMatrixB() + glViewport(0, 0, w, h) + } + + val stack = MemoryStack.stackPush() + + try { + val pWidth = stack.mallocInt(1) + val pHeight = stack.mallocInt(1) + + GLFW.glfwGetWindowSize(window, pWidth, pHeight) + + val vidmode = GLFW.glfwGetVideoMode(GLFW.glfwGetPrimaryMonitor())!! + + GLFW.glfwSetWindowPos( + window, + (vidmode.width() - pWidth[0]) / 2, + (vidmode.height() - pHeight[0]) / 2 + ) + } finally { + stack.close() + } + + GLFW.glfwMakeContextCurrent(window) + + // vsync + GLFW.glfwSwapInterval(1) + + GLFW.glfwShowWindow(window) + pushLoadingText("Initialized GLFW window") + } + + val gl = GLStateTracker() + + fun ensureSameThread() = gl.ensureSameThread() + + init { + pushLoadingText("Initialized OpenGL context") + gl.clearColor = Color.SLATE_GREY + + gl.blend = true + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + } + + var frameRenderTime = 1.0 + private set + + val framesPerSecond get() = 1.0 / frameRenderTime + + var world: World? = World() + + fun renderFrame(): Boolean { + ensureSameThread() + + if (GLFW.glfwWindowShouldClose(window)) { + close() + return false + } + + val measure = GLFW.glfwGetTime() + + glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) + + gl.matrixStack.clear(viewportMatrixGame.toMutableMatrix()) + camera.translate(gl.matrixStack.last) + + gl.matrixStack.clear(viewportMatrixGUI.toMutableMatrix().translate(z = 2f)) + + val thisTime = System.currentTimeMillis() + + if (startupTextList.isNotEmpty() && thisTime <= finishStartupRendering) { + var alpha = 1f + + if (finishStartupRendering - thisTime < 1000L) { + alpha = (finishStartupRendering - thisTime) / 1000f + } + + gl.matrixStack.push() + gl.matrixStack.translateWithScale(y = viewportHeight.toFloat()) + var shade = 255 + + for (i in startupTextList.size - 1 downTo 0) { + val size = gl.font.render(startupTextList[i], alignY = TextAlignY.BOTTOM, scale = 0.4f, color = Color.SHADES_OF_GRAY[shade].copy(alpha = alpha)) + gl.matrixStack.translateWithScale(y = -size.height * 1.2f) + + if (shade > 120) { + shade -= 10 + } + } + + gl.matrixStack.pop() + } + + val runtime = Runtime.getRuntime() + + gl.font.render("FPS: %.2f".format(framesPerSecond), scale = 0.4f) + gl.font.render("Mem: ${formatBytesShort(runtime.totalMemory() - runtime.freeMemory())}", x = viewportWidth.toFloat(), scale = 0.4f, alignX = TextAlignX.RIGHT) + + GLFW.glfwSwapBuffers(window) + GLFW.glfwPollEvents() + + frameRenderTime = GLFW.glfwGetTime() - measure + + return true + } + + private val terminateCallbacks = ArrayList<() -> Unit>() + + fun onTermination(lambda: () -> Unit) { + terminateCallbacks.add(lambda) + } + + override fun close() { + if (gameTerminated) + return + + if (window != MemoryUtil.NULL) { + Callbacks.glfwFreeCallbacks(window) + GLFW.glfwDestroyWindow(window) + } + + GLFW.glfwTerminate() + GLFW.glfwSetErrorCallback(null)?.free() + + gameTerminated = true + + for (callback in terminateCallbacks) { + callback.invoke() + } + } + + companion object { + private val LOGGER = LogManager.getLogger(StarboundClient::class.java) + } +} diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/freetype/Constants.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/Constants.kt similarity index 94% rename from src/main/kotlin/ru/dbotthepony/kstarbound/freetype/Constants.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/Constants.kt index 21f84a69..9cd25735 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/freetype/Constants.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/Constants.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype +package ru.dbotthepony.kstarbound.client.freetype enum class LoadFlag(val value: Long) { DEFAULT (0x0), diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/freetype/Errors.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/Errors.kt similarity index 99% rename from src/main/kotlin/ru/dbotthepony/kstarbound/freetype/Errors.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/Errors.kt index a1df08ab..3984ac9a 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/freetype/Errors.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/Errors.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.freetype +package ru.dbotthepony.kstarbound.client.freetype sealed class FreeTypeException(message: String, cause: Throwable?) : RuntimeException(message, cause) { abstract val code: Int diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/freetype/FreeType.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/FreeType.kt similarity index 95% rename from src/main/kotlin/ru/dbotthepony/kstarbound/freetype/FreeType.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/FreeType.kt index 430f76a5..23dede4a 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/freetype/FreeType.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/freetype/FreeType.kt @@ -1,8 +1,8 @@ -package ru.dbotthepony.kstarbound.freetype +package ru.dbotthepony.kstarbound.client.freetype import com.sun.jna.* import com.sun.jna.ptr.LongByReference -import ru.dbotthepony.kstarbound.freetype.struct.FT_FaceRec +import ru.dbotthepony.kstarbound.client.freetype.struct.FT_FaceRec import kotlin.reflect.KProperty private typealias LPointer = Long diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/ErrorCheck.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/ErrorCheck.kt similarity index 97% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/ErrorCheck.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/ErrorCheck.kt index 907f6729..27f0e5fa 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/ErrorCheck.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/ErrorCheck.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import org.lwjgl.opengl.GL46.* diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLAttributeList.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLAttributeList.kt similarity index 98% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLAttributeList.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLAttributeList.kt index 59a2de86..0ba7c84c 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLAttributeList.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLAttributeList.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import com.google.common.collect.ImmutableList import org.lwjgl.opengl.GL46.* diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLShader.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLShader.kt similarity index 97% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLShader.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLShader.kt index 45dea9c0..5ca447a3 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLShader.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLShader.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import org.lwjgl.opengl.GL20 import org.lwjgl.opengl.GL46.* diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLShaderProgram.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLShaderProgram.kt similarity index 99% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLShaderProgram.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLShaderProgram.kt index 5e490d49..d0d4117d 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLShaderProgram.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLShaderProgram.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Object2ObjectFunction diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLStateTracker.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLStateTracker.kt similarity index 87% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLStateTracker.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLStateTracker.kt index f3e547db..0c8cbfea 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLStateTracker.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLStateTracker.kt @@ -1,14 +1,15 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import org.lwjgl.opengl.GL import org.lwjgl.opengl.GL46.* import ru.dbotthepony.kstarbound.Starbound -import ru.dbotthepony.kstarbound.freetype.FreeType +import ru.dbotthepony.kstarbound.api.IStruct4f +import ru.dbotthepony.kstarbound.client.freetype.FreeType import ru.dbotthepony.kstarbound.math.Matrix4f import ru.dbotthepony.kstarbound.math.Matrix4fStack -import ru.dbotthepony.kstarbound.render.Font -import ru.dbotthepony.kstarbound.render.TileRenderer -import ru.dbotthepony.kstarbound.render.TileRenderers +import ru.dbotthepony.kstarbound.client.render.Font +import ru.dbotthepony.kstarbound.client.render.TileRenderer +import ru.dbotthepony.kstarbound.client.render.TileRenderers import ru.dbotthepony.kstarbound.util.Color import java.io.File import kotlin.reflect.KProperty @@ -35,6 +36,23 @@ private class GLStateSwitchTracker(private val enum: Int, private var value: Boo } } +private class GLStateGenericTracker(private var value: T, private val lambda: (T) -> Unit) { + operator fun getValue(glStateTracker: GLStateTracker, property: KProperty<*>): T { + return value + } + + operator fun setValue(glStateTracker: GLStateTracker, property: KProperty<*>, value: T) { + glStateTracker.ensureSameThread() + + if (value == this.value) + return + + lambda.invoke(value) + checkForGLError() + this.value = value + } +} + open class GLTransformableProgram(state: GLStateTracker, vararg shaders: GLShader) : GLShaderProgram(state, *shaders) { init { link() @@ -142,6 +160,11 @@ class GLStateTracker { checkForGLError() } + var clearColor by GLStateGenericTracker(Color.WHITE) { + val (r, g, b, a) = it + glClearColor(r, g, b, a) + } + init { glActiveTexture(GL_TEXTURE0) checkForGLError() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLTexture.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLTexture.kt similarity index 99% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLTexture.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLTexture.kt index 203272da..a78fc691 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLTexture.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLTexture.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import org.apache.logging.log4j.LogManager import org.lwjgl.opengl.GL11 diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLVertexArrayObject.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLVertexArrayObject.kt similarity index 96% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLVertexArrayObject.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLVertexArrayObject.kt index 9afa2eff..1670f4ad 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLVertexArrayObject.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLVertexArrayObject.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import org.lwjgl.opengl.GL46.* import java.io.Closeable diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLVertexBufferObject.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLVertexBufferObject.kt similarity index 97% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLVertexBufferObject.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLVertexBufferObject.kt index 05020ee2..e8b9bf18 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/GLVertexBufferObject.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/GLVertexBufferObject.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import org.lwjgl.opengl.GL46.* import java.io.Closeable diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/VertexBuilder.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/VertexBuilder.kt similarity index 98% rename from src/main/kotlin/ru/dbotthepony/kstarbound/gl/VertexBuilder.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/VertexBuilder.kt index 02e0d2b2..50df99b1 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/gl/VertexBuilder.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/VertexBuilder.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.gl +package ru.dbotthepony.kstarbound.client.gl import org.lwjgl.opengl.GL46.* import java.nio.ByteBuffer @@ -17,7 +17,8 @@ object VertexTransformers { v0: Float, u1: Float, v1: Float, - lambda: VertexTransformer = emptyTransform): VertexTransformer { + lambda: VertexTransformer = emptyTransform + ): VertexTransformer { return transformer@{ it, index -> when (index) { 0 -> it.pushVec2f(u0, v0) diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/render/BakedProgramState.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/BakedProgramState.kt similarity index 90% rename from src/main/kotlin/ru/dbotthepony/kstarbound/render/BakedProgramState.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/render/BakedProgramState.kt index 8817369a..ded559ef 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/render/BakedProgramState.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/BakedProgramState.kt @@ -1,7 +1,11 @@ -package ru.dbotthepony.kstarbound.render +package ru.dbotthepony.kstarbound.client.render import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL46.* +import ru.dbotthepony.kstarbound.client.gl.GLShaderProgram +import ru.dbotthepony.kstarbound.client.gl.GLVertexArrayObject +import ru.dbotthepony.kstarbound.client.gl.VertexBuilder +import ru.dbotthepony.kstarbound.client.gl.checkForGLError import ru.dbotthepony.kstarbound.gl.* import ru.dbotthepony.kstarbound.math.FloatMatrix import ru.dbotthepony.kstarbound.math.Matrix4f diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/render/Camera.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/Camera.kt similarity index 89% rename from src/main/kotlin/ru/dbotthepony/kstarbound/render/Camera.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/render/Camera.kt index d410227d..c87f7159 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/render/Camera.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/Camera.kt @@ -1,4 +1,4 @@ -package ru.dbotthepony.kstarbound.render +package ru.dbotthepony.kstarbound.client.render import ru.dbotthepony.kstarbound.math.* diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/render/ChunkRenderer.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/ChunkRenderer.kt similarity index 97% rename from src/main/kotlin/ru/dbotthepony/kstarbound/render/ChunkRenderer.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/render/ChunkRenderer.kt index b8d86d1f..859eb56e 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/render/ChunkRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/ChunkRenderer.kt @@ -1,5 +1,6 @@ -package ru.dbotthepony.kstarbound.render +package ru.dbotthepony.kstarbound.client.render +import ru.dbotthepony.kstarbound.client.gl.GLStateTracker import ru.dbotthepony.kstarbound.gl.* import ru.dbotthepony.kstarbound.math.FloatMatrix import ru.dbotthepony.kstarbound.world.Chunk diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/render/Font.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/Font.kt similarity index 97% rename from src/main/kotlin/ru/dbotthepony/kstarbound/render/Font.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/render/Font.kt index ee27ddde..3f58e047 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/render/Font.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/Font.kt @@ -1,12 +1,11 @@ -package ru.dbotthepony.kstarbound.render +package ru.dbotthepony.kstarbound.client.render import it.unimi.dsi.fastutil.chars.Char2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Object2ObjectFunction import org.lwjgl.opengl.GL46.* -import org.w3c.dom.Text -import ru.dbotthepony.kstarbound.freetype.LoadFlag -import ru.dbotthepony.kstarbound.freetype.struct.FT_Pixel_Mode -import ru.dbotthepony.kstarbound.gl.* +import ru.dbotthepony.kstarbound.client.freetype.LoadFlag +import ru.dbotthepony.kstarbound.client.gl.* +import ru.dbotthepony.kstarbound.client.freetype.struct.FT_Pixel_Mode import ru.dbotthepony.kstarbound.math.Matrix4fStack import ru.dbotthepony.kstarbound.util.Color diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/render/TileRenderer.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/TileRenderer.kt similarity index 98% rename from src/main/kotlin/ru/dbotthepony/kstarbound/render/TileRenderer.kt rename to src/main/kotlin/ru/dbotthepony/kstarbound/client/render/TileRenderer.kt index cf7a1c0e..d720154f 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/render/TileRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/TileRenderer.kt @@ -1,12 +1,12 @@ -package ru.dbotthepony.kstarbound.render +package ru.dbotthepony.kstarbound.client.render import org.apache.logging.log4j.LogManager import org.lwjgl.opengl.GL46.* import ru.dbotthepony.kstarbound.Starbound +import ru.dbotthepony.kstarbound.client.gl.* import ru.dbotthepony.kstarbound.defs.TileDefinition import ru.dbotthepony.kstarbound.defs.TileRenderMatchPiece import ru.dbotthepony.kstarbound.defs.TileRenderPiece -import ru.dbotthepony.kstarbound.gl.* import ru.dbotthepony.kstarbound.math.Vector2i import ru.dbotthepony.kstarbound.util.Color import ru.dbotthepony.kstarbound.world.ITileChunk diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/util/Color.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/util/Color.kt index 03fb6559..35d3ba82 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/util/Color.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/util/Color.kt @@ -9,6 +9,7 @@ data class Color(val red: Float, val green: Float, val blue: Float, val alpha: F companion object { val WHITE = Color(1f, 1f, 1f) + val SLATE_GREY = Color(0.2f, 0.2f, 0.2f) val SHADES_OF_GRAY = ArrayList().let { for (i in 0 .. 256) {