diff --git a/ModuleComputers/ModuleComputers.iml b/ModuleComputers/ModuleComputers.iml index 6be3d1898..bc46cc7e7 100644 --- a/ModuleComputers/ModuleComputers.iml +++ b/ModuleComputers/ModuleComputers.iml @@ -14,5 +14,6 @@ + \ No newline at end of file diff --git a/ModuleComputers/lib/TerrarumTSVM.jar b/ModuleComputers/lib/TerrarumTSVM.jar index 5c0bd286d..5c4d49d52 100644 Binary files a/ModuleComputers/lib/TerrarumTSVM.jar and b/ModuleComputers/lib/TerrarumTSVM.jar differ diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt new file mode 100644 index 000000000..409d28aa1 --- /dev/null +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt @@ -0,0 +1,148 @@ +package net.torvald.terrarum.modulecomputers.gameactors + +import com.badlogic.gdx.Gdx +import com.badlogic.gdx.Input +import com.badlogic.gdx.graphics.Camera +import com.badlogic.gdx.graphics.GL20 +import com.badlogic.gdx.graphics.OrthographicCamera +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.utils.Disposable +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.cancel +import kotlinx.coroutines.launch +import net.torvald.terrarum.* +import net.torvald.terrarum.gameactors.AVKey +import net.torvald.terrarum.modulebasegame.gameactors.* +import net.torvald.terrarum.ui.Toolkit +import net.torvald.terrarum.ui.UICanvas +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack +import net.torvald.tsvm.* +import net.torvald.tsvm.peripheral.* + +/** + * Created by minjaesong on 2021-12-04. + */ +class FixtureHomeComputer : FixtureBase { + + private val vm = VM(0x200000, TheRealWorld(), arrayOf( + VMProgramRom(ModMgr.getPath("dwarventech", "bios/tsvmbios.rom")) + )) + private val vmRunner: VMRunner + private val coroutineJob: Job + + constructor() : super( + BlockBox(BlockBox.NO_COLLISION, 1, 1), + mainUI = UIHomeComputer(), + inventory = FixtureInventory(40, FixtureInventory.CAPACITY_MODE_COUNT), + nameFun = { "Computer" } + ) { + density = 1400.0 + setHitboxDimension(TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE, 0, -1) + + makeNewSprite(TextureRegionPack(CommonResourcePool.getAsTextureRegion("dwarventech-sprites-fixtures-desktop_computer.tga").texture, TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE)) + sprite!!.setRowsAndFrames(1, 1) + + actorValue[AVKey.BASEMASS] = 20.0 + + + val gpu = ReferenceGraphicsAdapter(ModMgr.getPath("dwarventech", "gui"), vm) +// vm.getIO().blockTransferPorts[0].attachDevice(TestDiskDrive(vm, 0, ...)) + + vm.peripheralTable[1] = PeripheralEntry( + gpu, + GraphicsAdapter.VRAM_SIZE, + 16, + 0 + ) + + vm.getPrintStream = { gpu.getPrintStream() } + vm.getErrorStream = { gpu.getErrorStream() } + vm.getInputStream = { gpu.getInputStream() } + + (mainUI as UIHomeComputer).vm = vm + + vmRunner = VMRunnerFactory(ModMgr.getPath("dwarventech", "bios"), vm, "js") + coroutineJob = GlobalScope.launch { + vmRunner.executeCommand(vm.roms[0]!!.readAll()) + } + + App.disposables.add(Disposable { + vmRunner.close() + coroutineJob.cancel("fixture disposal") + vm.dispose() + }) + } + + override fun reload() { + super.reload() + + (mainUI as UIHomeComputer).vm = vm + } +} + +internal class UIHomeComputer : UICanvas( + toggleKeyLiteral = Input.Keys.ESCAPE, // FIXME why do I have specify ESC for it to function? ESC should be work as the default key + toggleButtonLiteral = App.getConfigInt("control_gamepad_start"), +) { + override var width = 640 + override var height = 480 + override var openCloseTime = 0f + + private val drawOffX = (width - 560).div(2).toFloat() + private val drawOffY = (height - 448).div(2).toFloat() + + private lateinit var batch: SpriteBatch + private lateinit var camera: OrthographicCamera + + internal lateinit var vm: VM + + init { + batch = SpriteBatch() + camera = OrthographicCamera(width.toFloat(), height.toFloat()) + camera.setToOrtho(false) + camera.update() + batch.projectionMatrix = camera.combined + } + + override fun updateUI(delta: Float) { + } + + override fun renderUI(otherBatch: SpriteBatch, camera: Camera) { + otherBatch.end() + + setCameraPosition(0f, 0f) + (vm.peripheralTable[1].peripheral as? GraphicsAdapter)?.let { gpu -> + val clearCol = gpu.getBackgroundColour() + Gdx.gl.glClearColor(clearCol.r, clearCol.g, clearCol.b, clearCol.a) + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) + gpu.render(Gdx.graphics.deltaTime, batch, posX + drawOffX, posY + drawOffY) + } + + otherBatch.begin() + otherBatch.color = Toolkit.Theme.COL_INACTIVE + Toolkit.drawBoxBorder(otherBatch, posX - 1, posY - 1, width + 2, height + 2) + } + + private fun setCameraPosition(newX: Float, newY: Float) { + camera.position.set((-newX + width / 2), (-newY + height / 2), 0f) // deliberate integer division + camera.update() + batch.projectionMatrix = camera.combined + } + + override fun doOpening(delta: Float) { + } + + override fun doClosing(delta: Float) { + } + + override fun endOpening(delta: Float) { + } + + override fun endClosing(delta: Float) { + } + + override fun dispose() { + } + +} \ No newline at end of file diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt new file mode 100644 index 000000000..a570ccaca --- /dev/null +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt @@ -0,0 +1,51 @@ +package net.torvald.terrarum.modulecomputers.gameitems + +import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.CommonResourcePool +import net.torvald.terrarum.ModMgr +import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.gameactors.ActorWithBody +import net.torvald.terrarum.gameitems.GameItem +import net.torvald.terrarum.gameitems.ItemID +import net.torvald.terrarum.gameitems.inInteractableRange +import net.torvald.terrarum.itemproperties.Material +import net.torvald.terrarum.modulecomputers.gameactors.FixtureHomeComputer + +/** + * Created by minjaesong on 2021-12-04. + */ +class ItemHomeComputer(originalID: ItemID) : GameItem(originalID) { + + override var dynamicID: ItemID = originalID + override val originalName = "Computer" + override var baseMass = 20.0 + override var stackable = true + override var inventoryCategory = Category.MISC + override val isUnique = false + override val isDynamic = false + override val material = Material() + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsTextureRegion("dwarventech-sprites-fixtures-desktop_computer.tga") + override var baseToolSize: Double? = baseMass + + + init { + CommonResourcePool.addToLoadingList("dwarventech-sprites-fixtures-desktop_computer.tga") { +// val t = TextureRegion(Texture(ModMgr.getGdxFile("dwarventech", "nonexisting_file!!!"))) + val t = TextureRegion(Texture(ModMgr.getGdxFile("dwarventech", "sprites/fixtures/desktop_computer.tga"))) + t.flip(false, true) + /*return*/t + } + CommonResourcePool.loadAll() + + equipPosition = EquipPosition.HAND_GRIP + } + + override fun startPrimaryUse(actor: ActorWithBody, delta: Float) = inInteractableRange(actor) { + val item = FixtureHomeComputer() + + item.spawn(Terrarum.mouseTileX, Terrarum.mouseTileY - item.blockBox.height + 1) + // return true when placed, false when cannot be placed + } +} \ No newline at end of file diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt index 7fd79e77d..957cd6704 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt @@ -64,7 +64,7 @@ class ItemWearableWorldRadar(originalID: String) : GameItem(originalID) { vm.getErrorStream = { System.err } vm.getInputStream = { System.`in` } - vmRunner = VMRunnerFactory(vm, "js") + vmRunner = VMRunnerFactory(ModMgr.getPath("dwarventech", "bios"), vm, "js") coroutineJob = GlobalScope.launch { vmRunner.executeCommand(vm.roms[0]!!.readAll()) } diff --git a/assets/mods/dwarventech/ModuleComputers.jar b/assets/mods/dwarventech/ModuleComputers.jar index 2c84e0e43..f0c61d03e 100644 Binary files a/assets/mods/dwarventech/ModuleComputers.jar and b/assets/mods/dwarventech/ModuleComputers.jar differ diff --git a/assets/JS_INIT.js b/assets/mods/dwarventech/bios/JS_INIT.js similarity index 100% rename from assets/JS_INIT.js rename to assets/mods/dwarventech/bios/JS_INIT.js diff --git a/assets/mods/dwarventech/bios/tsvmbios.js b/assets/mods/dwarventech/bios/tsvmbios.js new file mode 100644 index 000000000..afbee646e --- /dev/null +++ b/assets/mods/dwarventech/bios/tsvmbios.js @@ -0,0 +1,77 @@ +con.reset_graphics();con.curs_set(0);con.clear(); +graphics.resetPalette();graphics.setBackground(0,0,0); + +let logo = gzip.decomp(base64.atob("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")); + +// display logo in mundane, true-to-msx way +graphics.setFramebufferScroll(0,-164); +// hide entire framebuffer with black text to hide the slow image drawing +con.color_pair(0,0); +for(let i=0;i<2560;i++)graphics.putSymbolAt(1+(i/80)|0,1+(i%80),239); +// draw logo +for(let i=0;i=tlen)break; +graphics.setFramebufferScroll(0,-((1.0-tdiff/tlen)*164)|0);} + + +// show how much ram is there +con.color_pair(239,14); +let vramstr="VIDEO RAM : 256 Kbytes"; +let uramstr=` USER RAM : ${system.maxmem()>>>10} Kbytes`; +con.move(20,(80-vramstr.length)/2);println(vramstr); +con.move(21,(80-uramstr.length)/2);println(uramstr); + +/////////////////////////////////////////////////////////////////////////////// + + +// probe bootable device + +/*var _BIOS = {}; + +// Syntax: [Port, Drive-number] +// Port #0-3: Serial port 1-4 +// #4+ : Left for future extension +// Drive-number always starts at 1 +_BIOS.FIRST_BOOTABLE_PORT = [0,1]; // ah screw it + +Object.freeze(_BIOS);*/ + +/////////////////////////////////////////////////////////////////////////////// + +// make user wait around because why not + +tmr = sys.nanoTime(); +while (sys.nanoTime() - tmr < 2147483648) sys.spin(); +// clear screen +graphics.clearPixels(255);con.color_pair(239,255); +con.clear();con.move(1,1); + +/////////////////////////////////////////////////////////////////////////////// + +// load a bootsector using 'LOADBOOT' +let portNumber = 0; +let driveStatus = 0; +while (portNumber < 4) { + if (com.areYouThere(portNumber)) { + com.sendMessage(portNumber, "LOADBOOT"); + driveStatus = com.getStatusCode(portNumber); + if (driveStatus == 0) break; + } + portNumber += 1; +} +if (portNumber < 4) { +// eval(com.fetchResponse(portNumber).trimNull()); + // using Function() so that BIOS variables won't get leaked in + {Function("\"use strict\";var _BIOS={};_BIOS.FIRST_BOOTABLE_PORT=[0,1];Object.freeze(_BIOS);"+com.fetchResponse(portNumber).trimNull())()}; +} +else { + printerrln("No bootable medium found."); +} diff --git a/assets/mods/dwarventech/bios/tsvmbios.rom b/assets/mods/dwarventech/bios/tsvmbios.rom new file mode 100644 index 000000000..032bbbf00 Binary files /dev/null and b/assets/mods/dwarventech/bios/tsvmbios.rom differ diff --git a/assets/mods/dwarventech/gui/FontROM7x14.png b/assets/mods/dwarventech/gui/FontROM7x14.png new file mode 100644 index 000000000..1ce24f818 --- /dev/null +++ b/assets/mods/dwarventech/gui/FontROM7x14.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6bc2330ab69294b7958d10eb1b47f1d5a5e54f3c4f84a71a2cf75407ec8a510 +size 3701 diff --git a/assets/mods/dwarventech/items/itemid.csv b/assets/mods/dwarventech/items/itemid.csv index c10ec57a0..aa536874a 100644 --- a/assets/mods/dwarventech/items/itemid.csv +++ b/assets/mods/dwarventech/items/itemid.csv @@ -1,2 +1,3 @@ "id";"classname" "1";"net.torvald.terrarum.modulecomputers.gameitems.ItemWearableWorldRadar" +"2";"net.torvald.terrarum.modulecomputers.gameitems.ItemHomeComputer" diff --git a/assets/mods/dwarventech/sprites/desktop_computer.tga b/assets/mods/dwarventech/sprites/fixtures/desktop_computer.tga similarity index 100% rename from assets/mods/dwarventech/sprites/desktop_computer.tga rename to assets/mods/dwarventech/sprites/fixtures/desktop_computer.tga diff --git a/assets/4096.frag b/assets/shaders/4096.frag similarity index 100% rename from assets/4096.frag rename to assets/shaders/4096.frag diff --git a/assets/4096.vert b/assets/shaders/4096.vert similarity index 100% rename from assets/4096.vert rename to assets/shaders/4096.vert diff --git a/assets/4096_bayer.frag b/assets/shaders/4096_bayer.frag similarity index 100% rename from assets/4096_bayer.frag rename to assets/shaders/4096_bayer.frag diff --git a/assets/4096_bayer_aaa1.frag b/assets/shaders/4096_bayer_aaa1.frag similarity index 100% rename from assets/4096_bayer_aaa1.frag rename to assets/shaders/4096_bayer_aaa1.frag diff --git a/assets/4096_bayer_rgb1.frag b/assets/shaders/4096_bayer_rgb1.frag similarity index 100% rename from assets/4096_bayer_rgb1.frag rename to assets/shaders/4096_bayer_rgb1.frag diff --git a/assets/4096_bayer_skyboxfill.frag b/assets/shaders/4096_bayer_skyboxfill.frag similarity index 100% rename from assets/4096_bayer_skyboxfill.frag rename to assets/shaders/4096_bayer_skyboxfill.frag diff --git a/assets/LDR_RGBA_21.png b/assets/shaders/LDR_RGBA_21.png similarity index 100% rename from assets/LDR_RGBA_21.png rename to assets/shaders/LDR_RGBA_21.png diff --git a/assets/aaaxmul.frag b/assets/shaders/aaaxmul.frag similarity index 100% rename from assets/aaaxmul.frag rename to assets/shaders/aaaxmul.frag diff --git a/assets/alphadither.frag b/assets/shaders/alphadither.frag similarity index 100% rename from assets/alphadither.frag rename to assets/shaders/alphadither.frag diff --git a/assets/aonly.frag b/assets/shaders/aonly.frag similarity index 100% rename from assets/aonly.frag rename to assets/shaders/aonly.frag diff --git a/assets/blendGlow.frag b/assets/shaders/blendGlow.frag similarity index 100% rename from assets/blendGlow.frag rename to assets/shaders/blendGlow.frag diff --git a/assets/blendGlow.vert b/assets/shaders/blendGlow.vert similarity index 100% rename from assets/blendGlow.vert rename to assets/shaders/blendGlow.vert diff --git a/assets/blur.frag b/assets/shaders/blur.frag similarity index 100% rename from assets/blur.frag rename to assets/shaders/blur.frag diff --git a/assets/blur.vert b/assets/shaders/blur.vert similarity index 100% rename from assets/blur.vert rename to assets/shaders/blur.vert diff --git a/assets/blur2.frag b/assets/shaders/blur2.frag similarity index 100% rename from assets/blur2.frag rename to assets/shaders/blur2.frag diff --git a/assets/blur_dither.frag b/assets/shaders/blur_dither.frag similarity index 100% rename from assets/blur_dither.frag rename to assets/shaders/blur_dither.frag diff --git a/assets/crt.frag b/assets/shaders/crt.frag similarity index 100% rename from assets/crt.frag rename to assets/shaders/crt.frag diff --git a/assets/diff.frag b/assets/shaders/diff.frag similarity index 100% rename from assets/diff.frag rename to assets/shaders/diff.frag diff --git a/assets/dither_512_0.tga b/assets/shaders/dither_512_0.tga similarity index 100% rename from assets/dither_512_0.tga rename to assets/shaders/dither_512_0.tga diff --git a/assets/dither_512_1.tga b/assets/shaders/dither_512_1.tga similarity index 100% rename from assets/dither_512_1.tga rename to assets/shaders/dither_512_1.tga diff --git a/assets/dither_512_2.tga b/assets/shaders/dither_512_2.tga similarity index 100% rename from assets/dither_512_2.tga rename to assets/shaders/dither_512_2.tga diff --git a/assets/dither_512_3.tga b/assets/shaders/dither_512_3.tga similarity index 100% rename from assets/dither_512_3.tga rename to assets/shaders/dither_512_3.tga diff --git a/assets/dither_512_4.tga b/assets/shaders/dither_512_4.tga similarity index 100% rename from assets/dither_512_4.tga rename to assets/shaders/dither_512_4.tga diff --git a/assets/dither_512_5.tga b/assets/shaders/dither_512_5.tga similarity index 100% rename from assets/dither_512_5.tga rename to assets/shaders/dither_512_5.tga diff --git a/assets/dither_512_6.tga b/assets/shaders/dither_512_6.tga similarity index 100% rename from assets/dither_512_6.tga rename to assets/shaders/dither_512_6.tga diff --git a/assets/dither_512_7.tga b/assets/shaders/dither_512_7.tga similarity index 100% rename from assets/dither_512_7.tga rename to assets/shaders/dither_512_7.tga diff --git a/assets/hicolour.frag b/assets/shaders/hicolour.frag similarity index 100% rename from assets/hicolour.frag rename to assets/shaders/hicolour.frag diff --git a/assets/loadingCircle.frag b/assets/shaders/loadingCircle.frag similarity index 100% rename from assets/loadingCircle.frag rename to assets/shaders/loadingCircle.frag diff --git a/assets/passthrurgb.frag b/assets/shaders/passthrurgb.frag similarity index 100% rename from assets/passthrurgb.frag rename to assets/shaders/passthrurgb.frag diff --git a/assets/quickgreyscale.frag b/assets/shaders/quickgreyscale.frag similarity index 100% rename from assets/quickgreyscale.frag rename to assets/shaders/quickgreyscale.frag diff --git a/assets/quickgreyscale.vert b/assets/shaders/quickgreyscale.vert similarity index 100% rename from assets/quickgreyscale.vert rename to assets/shaders/quickgreyscale.vert diff --git a/assets/raytracelight.frag b/assets/shaders/raytracelight.frag similarity index 100% rename from assets/raytracelight.frag rename to assets/shaders/raytracelight.frag diff --git a/assets/reflect.frag b/assets/shaders/reflect.frag similarity index 100% rename from assets/reflect.frag rename to assets/shaders/reflect.frag diff --git a/assets/rgbonly.frag b/assets/shaders/rgbonly.frag similarity index 100% rename from assets/rgbonly.frag rename to assets/shaders/rgbonly.frag diff --git a/assets/rgbxmul.frag b/assets/shaders/rgbxmul.frag similarity index 100% rename from assets/rgbxmul.frag rename to assets/shaders/rgbxmul.frag diff --git a/assets/skyboxfill.frag b/assets/shaders/skyboxfill.frag similarity index 100% rename from assets/skyboxfill.frag rename to assets/shaders/skyboxfill.frag diff --git a/assets/tiling.frag b/assets/shaders/tiling.frag similarity index 100% rename from assets/tiling.frag rename to assets/shaders/tiling.frag diff --git a/assets/tiling_dither.frag b/assets/shaders/tiling_dither.frag similarity index 100% rename from assets/tiling_dither.frag rename to assets/shaders/tiling_dither.frag diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index 4593790b5..b524d6ec2 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -418,18 +418,18 @@ public class App implements ApplicationListener { // set GL graphics constants for (int i = 0; i < ditherPatterns.length; i++) { - Texture t = new Texture(Gdx.files.internal("assets/dither_512_"+i+".tga")); + Texture t = new Texture(Gdx.files.internal("assets/shaders/dither_512_"+i+".tga")); t.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Linear); t.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); ditherPatterns[i] = t; } - shaderBayerSkyboxFill = loadShaderFromFile("assets/4096.vert", "assets/4096_bayer_skyboxfill.frag"); - shaderHicolour = loadShaderFromFile("assets/4096.vert", "assets/hicolour.frag"); - shaderDebugDiff = loadShaderFromFile("assets/4096.vert", "assets/diff.frag"); + shaderBayerSkyboxFill = loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/4096_bayer_skyboxfill.frag"); + shaderHicolour = loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/hicolour.frag"); + shaderDebugDiff = loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/diff.frag"); shaderPassthruRGB = SpriteBatch.createDefaultShader(); - shaderColLUT = loadShaderFromFile("assets/4096.vert", "assets/passthrurgb.frag"); - shaderReflect = loadShaderFromFile("assets/4096.vert", "assets/reflect.frag"); + shaderColLUT = loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/passthrurgb.frag"); + shaderReflect = loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/reflect.frag"); fullscreenQuad = new Mesh( true, 4, 6, @@ -858,7 +858,8 @@ public class App implements ApplicationListener { // test print System.out.println("[App] Test printing every registered item"); - Terrarum.INSTANCE.getItemCodex().getItemCodex().values().stream().map(GameItem::getOriginalID).forEach(System.out::println); + Terrarum.INSTANCE.getItemCodex().getItemCodex().values().stream().map(GameItem::getOriginalID).forEach((String s) -> System.out.print(s+" ")); + System.out.println(); // create tile atlas diff --git a/src/net/torvald/terrarum/ColorLimiterTest.kt b/src/net/torvald/terrarum/ColorLimiterTest.kt index c134f8f8c..6eb48fcba 100644 --- a/src/net/torvald/terrarum/ColorLimiterTest.kt +++ b/src/net/torvald/terrarum/ColorLimiterTest.kt @@ -38,7 +38,7 @@ object ColorLimiterTest : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - shader4096 = ShaderProgram(Gdx.files.internal("assets/4096.vert"), Gdx.files.internal("assets/4096_bayer.frag")) + shader4096 = ShaderProgram(Gdx.files.internal("assets/shaders/4096.vert"), Gdx.files.internal("assets/shaders/4096_bayer.frag")) shader4096.bind() shader4096.setUniformf("rcount", 4f) shader4096.setUniformf("gcount", 4f) diff --git a/src/net/torvald/terrarum/GlslTilingTest.kt b/src/net/torvald/terrarum/GlslTilingTest.kt index 5b7eecc18..c0739741f 100644 --- a/src/net/torvald/terrarum/GlslTilingTest.kt +++ b/src/net/torvald/terrarum/GlslTilingTest.kt @@ -47,7 +47,7 @@ object GlslTilingTest : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - shader = ShaderProgram(Gdx.files.internal("assets/4096.vert"), Gdx.files.internal("assets/tiling.frag")) + shader = ShaderProgram(Gdx.files.internal("assets/shaders/4096.vert"), Gdx.files.internal("assets/shaders/tiling.frag")) font = TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap", flipY = false) diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 1134f4081..1e2c6cdde 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -63,6 +63,19 @@ object ModMgr { "\tJarfile: $jar\n" + "\tDependencies: ${dependencies.joinToString("\n\t")}" } + + data class ModuleErrorInfo( + val type: LoadErrorType, + val moduleName: String, + val cause: Throwable? = null, + ) + + enum class LoadErrorType { + YOUR_FAULT, + MY_FAULT, + NOT_EVEN_THERE + } + const val modDir = "./assets/mods" /** Module name (directory name), ModuleMetadata */ @@ -73,6 +86,12 @@ object ModMgr { val loadOrder = ArrayList() + val errorLogs = ArrayList() + + fun logError(type: LoadErrorType, moduleName: String, cause: Throwable? = null) { + errorLogs.add(ModuleErrorInfo(type, moduleName, cause)) + } + init { // load modules val loadOrderCSVparser = CSVParser.parse( @@ -139,6 +158,9 @@ object ModMgr { printdbgerr(this, "$moduleName failed to load, skipping...") printdbgerr(this, "\t$e") print(App.csiR); e.printStackTrace(System.out); print(App.csi0) + + logError(LoadErrorType.YOUR_FAULT, moduleName, e) + moduleInfo.remove(moduleName) } @@ -162,12 +184,18 @@ object ModMgr { } catch (noSuchModule: FileNotFoundException) { printdbgerr(this, "No such module: $moduleName, skipping...") + + logError(LoadErrorType.NOT_EVEN_THERE, moduleName) + moduleInfo.remove(moduleName) } catch (e: Throwable) { printdbgerr(this, "There was an error while loading module $moduleName") printdbgerr(this, "\t$e") print(App.csiR); e.printStackTrace(System.out); print(App.csi0) + + logError(LoadErrorType.YOUR_FAULT, moduleName, e) + moduleInfo.remove(moduleName) } finally { diff --git a/src/net/torvald/terrarum/ShitOnGlsl.kt b/src/net/torvald/terrarum/ShitOnGlsl.kt index 61c28ddba..2f017795e 100644 --- a/src/net/torvald/terrarum/ShitOnGlsl.kt +++ b/src/net/torvald/terrarum/ShitOnGlsl.kt @@ -39,7 +39,7 @@ object ShitOnGlsl : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - shader = ShaderProgram(Gdx.files.internal("assets/4096.vert"), Gdx.files.internal("assets/crt.frag")) + shader = ShaderProgram(Gdx.files.internal("assets/shaders/4096.vert"), Gdx.files.internal("assets/shaders/crt.frag")) font = TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap", flipY = false) diff --git a/src/net/torvald/terrarum/TestTestTest.kt b/src/net/torvald/terrarum/TestTestTest.kt index af3ba7955..64179f62e 100644 --- a/src/net/torvald/terrarum/TestTestTest.kt +++ b/src/net/torvald/terrarum/TestTestTest.kt @@ -196,7 +196,7 @@ object TestTestMain : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - blurShader = ShaderProgram(Gdx.files.internal("assets/blur.vert"), Gdx.files.internal("assets/blur.frag")) + blurShader = ShaderProgram(Gdx.files.internal("assets/shaders/blur.vert"), Gdx.files.internal("assets/shaders/blur.frag")) batch = SpriteBatch() diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index 364f98a3c..8117b5b7e 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -56,8 +56,8 @@ open class ActorWithBody : Actor { get() = Terrarum.ingame?.world - @Transient internal var sprite: SpriteAnimation? = null - @Transient internal var spriteGlow: SpriteAnimation? = null + @Transient var sprite: SpriteAnimation? = null + @Transient var spriteGlow: SpriteAnimation? = null var drawMode = BlendMode.NORMAL diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 53535d1dc..f624c2528 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -114,18 +114,18 @@ object IngameRenderer : Disposable { // these codes will run regardless of the invocation of the "initialise()" function // the "initialise()" function will also be called init { - shaderBlurDither = App.loadShaderFromFile("assets/blur.vert", "assets/blur_dither.frag") - shaderRGBOnlyDither = App.loadShaderFromFile("assets/4096.vert", "assets/4096_bayer_rgb1.frag") - shaderAtoGreyDither = App.loadShaderFromFile("assets/4096.vert", "assets/4096_bayer_aaa1.frag") + shaderBlurDither = App.loadShaderFromFile("assets/shaders/blur.vert", "assets/shaders/blur_dither.frag") + shaderRGBOnlyDither = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/4096_bayer_rgb1.frag") + shaderAtoGreyDither = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/4096_bayer_aaa1.frag") - shaderBlurRaw = App.loadShaderFromFile("assets/blur.vert", "assets/blur.frag") - shaderRGBOnlyRaw = App.loadShaderFromFile("assets/4096.vert", "assets/rgbonly.frag") - shaderAtoGreyRaw = App.loadShaderFromFile("assets/4096.vert", "assets/aonly.frag") + shaderBlurRaw = App.loadShaderFromFile("assets/shaders/blur.vert", "assets/shaders/blur.frag") + shaderRGBOnlyRaw = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/rgbonly.frag") + shaderAtoGreyRaw = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/aonly.frag") - shaderBayer = App.loadShaderFromFile("assets/4096.vert", "assets/4096_bayer.frag") // always load the shader regardless of config because the config may cange - shaderAlphaDither = App.loadShaderFromFile("assets/4096.vert", "assets/alphadither.frag") - shaderBlendGlow = App.loadShaderFromFile("assets/blendGlow.vert", "assets/blendGlow.frag") + shaderBayer = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/4096_bayer.frag") // always load the shader regardless of config because the config may cange + shaderAlphaDither = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/alphadither.frag") + shaderBlendGlow = App.loadShaderFromFile("assets/shaders/blendGlow.vert", "assets/shaders/blendGlow.frag") if (!shaderBlendGlow.isCompiled) { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt index 15796ab3a..aa8bbdbf3 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt @@ -21,6 +21,7 @@ object UITitleRemoConYaml { - MENU_MODULES : net.torvald.terrarum.ModOptionsHost - MENU_LABEL_RETURN+WRITETOCONFIG - MENU_MODULES : net.torvald.terrarum.modulebasegame.ui.UITitleModules + - MENU_LABEL_RETURN - MENU_LABEL_CREDITS - MENU_LABEL_COPYRIGHT : net.torvald.terrarum.modulebasegame.ui.UITitleCredits - MENU_CREDIT_GPL_DNT : net.torvald.terrarum.modulebasegame.ui.UITitleGPL3 diff --git a/src/net/torvald/terrarum/ui/ConsoleWindow.kt b/src/net/torvald/terrarum/ui/ConsoleWindow.kt index bee95e93d..a1c2b17f2 100644 --- a/src/net/torvald/terrarum/ui/ConsoleWindow.kt +++ b/src/net/torvald/terrarum/ui/ConsoleWindow.kt @@ -1,5 +1,6 @@ package net.torvald.terrarum.ui +import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color @@ -56,6 +57,8 @@ class ConsoleWindow : UICanvas() { private val textinput = UIItemTextLineInput(this, 0, 0, this.width) + private var clickLatched = false + init { reset() addUIitem(textinput) @@ -75,6 +78,12 @@ class ConsoleWindow : UICanvas() { } it.setTooltipMessage(if (lb.size > 0) lb.joinToString("\n") else null) + + // click to enter the actor's reference ID + if (lb.size > 0 && !clickLatched && Gdx.input.isButtonPressed(App.getConfigInt("config_mouseprimary"))) { + clickLatched = true + textinput.appendText(lb.first().substringBefore(' ')) + } } else { it.setTooltipMessage(null) @@ -82,6 +91,11 @@ class ConsoleWindow : UICanvas() { } uiItems.forEach { it.update(delta) } + + + if (!Gdx.input.isButtonPressed(App.getConfigInt("config_mouseprimary"))) { + clickLatched = false + } } override fun renderUI(batch: SpriteBatch, camera: Camera) { diff --git a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt index 00d9379c0..b7750b346 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt @@ -611,7 +611,9 @@ class UIItemTextLineInput( clearText() textbuf.addAll(s.toCodePoints()) } - + fun appendText(s: String) { + textbuf.addAll(s.toCodePoints()) + } override fun dispose() { fbo.dispose() } diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt index b409077b7..2160a1f80 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt @@ -85,7 +85,7 @@ internal object BlocksDrawer { private lateinit var tilesQuad: Mesh - private val shader = App.loadShaderFromFile("assets/4096.vert", "assets/tiling_dither.frag") + private val shader = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/tiling_dither.frag") init {