Compare commits
4 Commits
4a39f3659d
...
460d63d472
| Author | SHA1 | Date | |
|---|---|---|---|
|
460d63d472
|
|||
|
efb137f2a1
|
|||
|
c21570f912
|
|||
|
887b4b09ec
|
@@ -37,6 +37,9 @@ dependencies {
|
||||
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib"
|
||||
|
||||
// CLI arg parser
|
||||
implementation "com.xenomachina:kotlin-argparser:${kotlinArgParserVersion}"
|
||||
|
||||
// JSON Proto
|
||||
implementation "com.google.protobuf:protobuf-java-util:${protobufVersion}"
|
||||
|
||||
|
||||
@@ -1,15 +1,24 @@
|
||||
package com.bartlomiejpluta.base.editor
|
||||
|
||||
import com.bartlomiejpluta.base.editor.cli.model.CLIArgs
|
||||
import com.bartlomiejpluta.base.editor.cli.runner.CLIRunner
|
||||
import com.bartlomiejpluta.base.editor.code.build.exception.BuildException
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildPipelineService
|
||||
import com.bartlomiejpluta.base.editor.command.service.DefaultUndoRedoService
|
||||
import com.bartlomiejpluta.base.editor.main.controller.MainController
|
||||
import com.bartlomiejpluta.base.editor.main.view.MainView
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
import com.xenomachina.argparser.ArgParser
|
||||
import com.xenomachina.argparser.mainBody
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.CommandLineRunner
|
||||
import org.springframework.boot.SpringApplication
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication
|
||||
import org.springframework.context.ConfigurableApplicationContext
|
||||
import tornadofx.App
|
||||
import tornadofx.DIContainer
|
||||
import tornadofx.FX
|
||||
import tornadofx.launch
|
||||
import tornadofx.*
|
||||
import java.io.File
|
||||
import javax.annotation.PostConstruct
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@SpringBootApplication
|
||||
@@ -19,6 +28,9 @@ open class EditorApp : App(MainView::class) {
|
||||
@Autowired
|
||||
private lateinit var mainController: MainController
|
||||
|
||||
@Autowired
|
||||
private lateinit var cliRunner: CLIRunner
|
||||
|
||||
override fun init() {
|
||||
this.context = SpringApplication.run(this.javaClass)
|
||||
context.autowireCapableBeanFactory.autowireBean(this)
|
||||
@@ -29,6 +41,11 @@ open class EditorApp : App(MainView::class) {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBeforeShow(view: UIComponent) {
|
||||
super.onBeforeShow(view)
|
||||
cliRunner.run(*parameters.raw.toTypedArray())
|
||||
}
|
||||
|
||||
override fun stop() {
|
||||
super.stop()
|
||||
context.close()
|
||||
@@ -36,6 +53,23 @@ open class EditorApp : App(MainView::class) {
|
||||
}
|
||||
}
|
||||
|
||||
@SpringBootApplication
|
||||
open class CLIApp(
|
||||
@Autowired private val cliRunner: CLIRunner
|
||||
) : CommandLineRunner {
|
||||
override fun run(vararg args: String) {
|
||||
cliRunner.run(*args)
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
launch<EditorApp>(args)
|
||||
mainBody {
|
||||
ArgParser(args).parseInto(::CLIArgs).run {
|
||||
if (headless) {
|
||||
SpringApplication.run(CLIApp::class.java, *args)
|
||||
} else {
|
||||
launch<EditorApp>(args)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.bartlomiejpluta.base.editor.cli.model
|
||||
|
||||
import com.xenomachina.argparser.ArgParser
|
||||
import com.xenomachina.argparser.default
|
||||
import java.io.File
|
||||
|
||||
class CLIArgs(parser: ArgParser) {
|
||||
val headless by parser.flagging("-H", "--headless", help = "run editor in headless mode (without GUI)")
|
||||
.default(false)
|
||||
val project by parser.storing("-p", "--project", help = "project file") { File(this) }.default(null)
|
||||
val build by parser.flagging("-b", "--build", help = "build project").default(false)
|
||||
val output by parser.storing("-o", "--output", help = "define build output folder") { File(this) }.default(null)
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.bartlomiejpluta.base.editor.cli.runner
|
||||
|
||||
import com.bartlomiejpluta.base.editor.cli.model.CLIArgs
|
||||
import com.bartlomiejpluta.base.editor.code.build.exception.BuildException
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildPipelineService
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||
import com.xenomachina.argparser.ArgParser
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.stereotype.Component
|
||||
import java.io.File
|
||||
|
||||
@Component
|
||||
class CLIRunner(
|
||||
@Autowired private val context: ProjectContext,
|
||||
@Autowired private val pipelineService: BuildPipelineService
|
||||
) {
|
||||
|
||||
fun run(vararg args: String) = ArgParser(args).parseInto(::CLIArgs).run {
|
||||
handleOpenProject(project)
|
||||
handleChangeOutput(output)
|
||||
handleRunBuild(build)
|
||||
}
|
||||
|
||||
private fun handleOpenProject(project: File?) = project?.let {
|
||||
context.open(it)
|
||||
}
|
||||
|
||||
private fun handleChangeOutput(output: File?) = output?.let {
|
||||
context.project?.changeBuildDirectory(it)
|
||||
}
|
||||
|
||||
private fun handleRunBuild(build: Boolean) {
|
||||
if (!build) {
|
||||
return
|
||||
}
|
||||
|
||||
pipelineService.initStreams(System.out, System.err)
|
||||
val startTime = System.currentTimeMillis()
|
||||
|
||||
try {
|
||||
context.project?.let { project -> pipelineService.runPipeline(project) }
|
||||
println("Build completed")
|
||||
} catch (e: BuildException) {
|
||||
System.err.println("Build failed")
|
||||
} finally {
|
||||
val buildingTime = (System.currentTimeMillis() - startTime) / 1000.0
|
||||
println("Finished in [${buildingTime}s]")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,23 @@
|
||||
package com.bartlomiejpluta.base.editor.code.build.packager
|
||||
|
||||
import java.io.File
|
||||
import java.io.PrintStream
|
||||
import java.io.PrintWriter
|
||||
|
||||
interface JarPackager {
|
||||
fun pack(sourceDirectory: File, targetJar: File, root: String = ".")
|
||||
fun copy(file: File, targetJar: File, root: String = ".")
|
||||
fun pack(
|
||||
sourceDirectory: File,
|
||||
targetJar: File,
|
||||
root: String = ".",
|
||||
stdout: PrintStream = System.out,
|
||||
stderr: PrintStream = System.err
|
||||
)
|
||||
|
||||
fun copy(
|
||||
file: File,
|
||||
targetJar: File,
|
||||
root: String = ".",
|
||||
stdout: PrintStream = System.out,
|
||||
stderr: PrintStream = System.err
|
||||
)
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.editor.code.build.packager
|
||||
|
||||
import org.springframework.stereotype.Component
|
||||
import java.io.File
|
||||
import java.io.PrintStream
|
||||
import java.net.URI
|
||||
import java.nio.file.FileSystems
|
||||
import java.nio.file.Files
|
||||
@@ -11,7 +12,12 @@ import java.nio.file.StandardCopyOption
|
||||
@Component
|
||||
class ZipBasedJarPackager : JarPackager {
|
||||
|
||||
override fun pack(sourceDirectory: File, targetJar: File, root: String) {
|
||||
override fun pack(sourceDirectory: File, targetJar: File, root: String, stdout: PrintStream, stderr: PrintStream) {
|
||||
if (!sourceDirectory.exists()) {
|
||||
stderr.println("Warning: Folder ${sourceDirectory} does not exist, it will be ignored")
|
||||
return
|
||||
}
|
||||
|
||||
val env = mapOf("create" to "true")
|
||||
val zip = targetJar.toPath()
|
||||
val uri = URI.create("jar:" + zip.toUri())
|
||||
@@ -28,7 +34,7 @@ class ZipBasedJarPackager : JarPackager {
|
||||
}
|
||||
}
|
||||
|
||||
override fun copy(file: File, targetJar: File, root: String) {
|
||||
override fun copy(file: File, targetJar: File, root: String, stdout: PrintStream, stderr: PrintStream) {
|
||||
val env = mapOf("create" to "true")
|
||||
val zip = targetJar.toPath()
|
||||
val uri = URI.create("jar:" + zip.toUri())
|
||||
|
||||
@@ -1,12 +1,110 @@
|
||||
package com.bartlomiejpluta.base.editor.code.build.pipeline
|
||||
|
||||
import javafx.beans.property.BooleanProperty
|
||||
import javafx.concurrent.Task
|
||||
import com.bartlomiejpluta.base.editor.code.build.asset.AssetSerializer
|
||||
import com.bartlomiejpluta.base.editor.code.build.compiler.Compiler
|
||||
import com.bartlomiejpluta.base.editor.code.build.database.DatabaseAssembler
|
||||
import com.bartlomiejpluta.base.editor.code.build.game.GameEngineProvider
|
||||
import com.bartlomiejpluta.base.editor.code.build.generator.CodeGenerator
|
||||
import com.bartlomiejpluta.base.editor.code.build.packager.JarPackager
|
||||
import com.bartlomiejpluta.base.editor.code.build.project.ProjectAssembler
|
||||
import com.bartlomiejpluta.base.editor.code.dependency.DependenciesProvider
|
||||
import com.bartlomiejpluta.base.editor.file.model.FileSystemNode
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.stereotype.Component
|
||||
import java.io.OutputStream
|
||||
import java.io.PrintStream
|
||||
|
||||
interface BuildPipelineService {
|
||||
fun initStreams(stdout: OutputStream, stderr: OutputStream)
|
||||
val isRunningProperty: BooleanProperty
|
||||
fun build(): Task<Boolean>
|
||||
fun clean()
|
||||
@Component
|
||||
open class BuildPipelineService {
|
||||
|
||||
@Autowired
|
||||
private lateinit var dependenciesProvider: DependenciesProvider
|
||||
|
||||
@Autowired
|
||||
private lateinit var generators: List<CodeGenerator>
|
||||
|
||||
@Autowired
|
||||
private lateinit var compiler: Compiler
|
||||
|
||||
@Autowired
|
||||
private lateinit var packager: JarPackager
|
||||
|
||||
@Autowired
|
||||
private lateinit var engineProvider: GameEngineProvider
|
||||
|
||||
@Autowired
|
||||
private lateinit var assetSerializer: AssetSerializer
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectAssembler: ProjectAssembler
|
||||
|
||||
@Autowired
|
||||
private lateinit var databaseAssembler: DatabaseAssembler
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectContext: ProjectContext
|
||||
|
||||
private lateinit var stdout: OutputStream
|
||||
private lateinit var stderr: OutputStream
|
||||
private var out: PrintStream = System.out
|
||||
private var err: PrintStream = System.err
|
||||
|
||||
fun initStreams(stdout: OutputStream, stderr: OutputStream) {
|
||||
this.stdout = stdout
|
||||
this.stderr = stderr
|
||||
this.out = PrintStream(stdout)
|
||||
this.err = PrintStream(stderr)
|
||||
}
|
||||
|
||||
fun runPipeline(project: Project) {
|
||||
prepareBuildDirectory(project)
|
||||
|
||||
val outputFile = project.buildOutputJarFile
|
||||
|
||||
out.println("Providing compile-time dependencies...")
|
||||
val dependencies = dependenciesProvider.provideDependenciesTo(project.buildDependenciesDirectory)
|
||||
|
||||
out.println("Generating sources...")
|
||||
generators.forEach(CodeGenerator::generate)
|
||||
|
||||
out.println("Compiling sources...")
|
||||
compiler.compile(
|
||||
arrayOf(project.codeFSNode, FileSystemNode(project.buildGeneratedCodeDirectory)),
|
||||
project.buildClassesDirectory,
|
||||
dependencies.toTypedArray(),
|
||||
out,
|
||||
err
|
||||
)
|
||||
|
||||
out.println("Assembling game engine...")
|
||||
engineProvider.provideBaseGameEngine(outputFile, out, err)
|
||||
|
||||
out.println("Linking compilation units...")
|
||||
packager.pack(project.buildClassesDirectory, outputFile, "BOOT-INF/classes")
|
||||
|
||||
out.println("Serializing project assets...")
|
||||
assetSerializer.serializeAssets(project)
|
||||
|
||||
out.println("Assembling project assets...")
|
||||
projectAssembler.assembly(project, outputFile, out, err)
|
||||
|
||||
out.println("Assembling database...")
|
||||
databaseAssembler.assembly(project, outputFile, out, err)
|
||||
}
|
||||
|
||||
private fun prepareBuildDirectory(project: Project) {
|
||||
project.buildDirectory.deleteRecursively()
|
||||
|
||||
project.buildClassesDirectory.mkdirs()
|
||||
project.buildOutDirectory.mkdirs()
|
||||
project.buildDependenciesDirectory.mkdirs()
|
||||
project.buildGeneratedCodeDirectory.mkdirs()
|
||||
}
|
||||
|
||||
fun clean() {
|
||||
projectContext.project?.apply { buildDirectory.deleteRecursively() }
|
||||
out.println("Cleaning done")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.bartlomiejpluta.base.editor.code.build.pipeline
|
||||
|
||||
import javafx.beans.property.BooleanProperty
|
||||
import javafx.concurrent.Task
|
||||
import java.io.OutputStream
|
||||
|
||||
interface BuildService {
|
||||
fun initStreams(stdout: OutputStream, stderr: OutputStream)
|
||||
val isRunningProperty: BooleanProperty
|
||||
fun build(): Task<Boolean>
|
||||
fun clean()
|
||||
}
|
||||
@@ -22,31 +22,10 @@ import java.io.OutputStream
|
||||
import java.io.PrintStream
|
||||
|
||||
@Component
|
||||
class DefaultBuildPipelineService : BuildPipelineService {
|
||||
class DefaultBuildService : BuildService {
|
||||
|
||||
@Autowired
|
||||
private lateinit var dependenciesProvider: DependenciesProvider
|
||||
|
||||
@Autowired
|
||||
private lateinit var generators: List<CodeGenerator>
|
||||
|
||||
@Autowired
|
||||
private lateinit var compiler: Compiler
|
||||
|
||||
@Autowired
|
||||
private lateinit var packager: JarPackager
|
||||
|
||||
@Autowired
|
||||
private lateinit var engineProvider: GameEngineProvider
|
||||
|
||||
@Autowired
|
||||
private lateinit var assetSerializer: AssetSerializer
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectAssembler: ProjectAssembler
|
||||
|
||||
@Autowired
|
||||
private lateinit var databaseAssembler: DatabaseAssembler
|
||||
private lateinit var pipelineService: BuildPipelineService
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectContext: ProjectContext
|
||||
@@ -56,14 +35,16 @@ class DefaultBuildPipelineService : BuildPipelineService {
|
||||
|
||||
private lateinit var stdout: OutputStream
|
||||
private lateinit var stderr: OutputStream
|
||||
private lateinit var out: PrintStream
|
||||
private lateinit var err: PrintStream
|
||||
private var out: PrintStream = System.out
|
||||
private var err: PrintStream = System.err
|
||||
|
||||
override fun initStreams(stdout: OutputStream, stderr: OutputStream) {
|
||||
pipelineService.initStreams(stdout, stderr)
|
||||
this.stdout = stdout
|
||||
this.stderr = stderr
|
||||
this.out = PrintStream(stdout)
|
||||
this.err = PrintStream(stderr)
|
||||
|
||||
}
|
||||
|
||||
override val isRunningProperty = false.toProperty()
|
||||
@@ -89,7 +70,9 @@ class DefaultBuildPipelineService : BuildPipelineService {
|
||||
val startTime = System.currentTimeMillis()
|
||||
|
||||
try {
|
||||
projectContext.project?.let(this@DefaultBuildPipelineService::runPipeline)
|
||||
eventbus.fire(ClearBuildLogsEvent)
|
||||
|
||||
projectContext.project?.let(pipelineService::runPipeline)
|
||||
out.println("Build completed")
|
||||
return@runAsync true
|
||||
} catch (e: BuildException) {
|
||||
@@ -103,52 +86,6 @@ class DefaultBuildPipelineService : BuildPipelineService {
|
||||
false
|
||||
}
|
||||
|
||||
private fun runPipeline(project: Project) {
|
||||
eventbus.fire(ClearBuildLogsEvent)
|
||||
prepareBuildDirectory(project)
|
||||
|
||||
val outputFile = project.buildOutputJarFile
|
||||
|
||||
out.println("Providing compile-time dependencies...")
|
||||
val dependencies = dependenciesProvider.provideDependenciesTo(project.buildDependenciesDirectory)
|
||||
|
||||
out.println("Generating sources...")
|
||||
generators.forEach(CodeGenerator::generate)
|
||||
|
||||
out.println("Compiling sources...")
|
||||
compiler.compile(
|
||||
arrayOf(project.codeFSNode, FileSystemNode(project.buildGeneratedCodeDirectory)),
|
||||
project.buildClassesDirectory,
|
||||
dependencies.toTypedArray(),
|
||||
out,
|
||||
err
|
||||
)
|
||||
|
||||
out.println("Assembling game engine...")
|
||||
engineProvider.provideBaseGameEngine(outputFile, out, err)
|
||||
|
||||
out.println("Linking compilation units...")
|
||||
packager.pack(project.buildClassesDirectory, outputFile, "BOOT-INF/classes")
|
||||
|
||||
out.println("Serializing project assets...")
|
||||
assetSerializer.serializeAssets(project)
|
||||
|
||||
out.println("Assembling project assets...")
|
||||
projectAssembler.assembly(project, outputFile, out, err)
|
||||
|
||||
out.println("Assembling database...")
|
||||
databaseAssembler.assembly(project, outputFile, out, err)
|
||||
}
|
||||
|
||||
private fun prepareBuildDirectory(project: Project) {
|
||||
project.buildDirectory.deleteRecursively()
|
||||
|
||||
project.buildClassesDirectory.mkdirs()
|
||||
project.buildOutDirectory.mkdirs()
|
||||
project.buildDependenciesDirectory.mkdirs()
|
||||
project.buildGeneratedCodeDirectory.mkdirs()
|
||||
}
|
||||
|
||||
override fun clean() {
|
||||
projectContext.project?.apply { buildDirectory.deleteRecursively() }
|
||||
out.println("Cleaning done")
|
||||
@@ -16,26 +16,46 @@ class DefaultProjectAssembler : ProjectAssembler {
|
||||
|
||||
override fun assembly(project: Project, targetJar: File, stdout: PrintStream, stderr: PrintStream) {
|
||||
try {
|
||||
tryToAssembly(project, targetJar)
|
||||
tryToAssembly(project, targetJar, stdout, stderr)
|
||||
} catch (e: Exception) {
|
||||
stderr.println("[$TAG] ${e.message}")
|
||||
throw BuildException()
|
||||
}
|
||||
}
|
||||
|
||||
private fun tryToAssembly(project: Project, targetJar: File) {
|
||||
packager.copy(project.binaryProjectFile, targetJar, "BOOT-INF/classes/project")
|
||||
packager.pack(project.buildAssetsMapsDir, targetJar, "BOOT-INF/classes/project/maps")
|
||||
private fun tryToAssembly(project: Project, targetJar: File, stdout: PrintStream, stderr: PrintStream) {
|
||||
stdout.println("[$TAG] Assembling project")
|
||||
packager.copy(project.binaryProjectFile, targetJar, "BOOT-INF/classes/project", stdout, stderr)
|
||||
|
||||
packager.pack(project.tileSetsDirectory, targetJar, "BOOT-INF/classes/project/tilesets")
|
||||
packager.pack(project.autoTilesDirectory, targetJar, "BOOT-INF/classes/project/autotiles")
|
||||
packager.pack(project.imagesDirectory, targetJar, "BOOT-INF/classes/project/images")
|
||||
packager.pack(project.characterSetsDirectory, targetJar, "BOOT-INF/classes/project/charsets")
|
||||
packager.pack(project.animationsDirectory, targetJar, "BOOT-INF/classes/project/animations")
|
||||
packager.pack(project.iconSetsDirectory, targetJar, "BOOT-INF/classes/project/iconsets")
|
||||
packager.pack(project.fontsDirectory, targetJar, "BOOT-INF/classes/project/fonts")
|
||||
packager.pack(project.widgetsDirectory, targetJar, "BOOT-INF/classes/project/widgets")
|
||||
packager.pack(project.audioDirectory, targetJar, "BOOT-INF/classes/project/audio")
|
||||
stdout.println("[$TAG] Assembling maps")
|
||||
packager.pack(project.buildAssetsMapsDir, targetJar, "BOOT-INF/classes/project/maps", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling tilesets")
|
||||
packager.pack(project.tileSetsDirectory, targetJar, "BOOT-INF/classes/project/tilesets", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling autotiles")
|
||||
packager.pack(project.autoTilesDirectory, targetJar, "BOOT-INF/classes/project/autotiles", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling images")
|
||||
packager.pack(project.imagesDirectory, targetJar, "BOOT-INF/classes/project/images", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling character sets")
|
||||
packager.pack(project.characterSetsDirectory, targetJar, "BOOT-INF/classes/project/charsets", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling animations")
|
||||
packager.pack(project.animationsDirectory, targetJar, "BOOT-INF/classes/project/animations", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling icon sets")
|
||||
packager.pack(project.iconSetsDirectory, targetJar, "BOOT-INF/classes/project/iconsets", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling fonts")
|
||||
packager.pack(project.fontsDirectory, targetJar, "BOOT-INF/classes/project/fonts", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling widgets")
|
||||
packager.pack(project.widgetsDirectory, targetJar, "BOOT-INF/classes/project/widgets", stdout, stderr)
|
||||
|
||||
stdout.println("[$TAG] Assembling audio")
|
||||
packager.pack(project.audioDirectory, targetJar, "BOOT-INF/classes/project/audio", stdout, stderr)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.bartlomiejpluta.base.editor.code.view.build
|
||||
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildPipelineService
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildService
|
||||
import com.bartlomiejpluta.base.editor.common.logs.component.LogsPane
|
||||
import com.bartlomiejpluta.base.editor.event.ClearBuildLogsEvent
|
||||
import org.kordamp.ikonli.javafx.FontIcon
|
||||
import tornadofx.*
|
||||
|
||||
class BuildLogsView : View() {
|
||||
private val pipelineService: BuildPipelineService by di()
|
||||
private val pipelineService: BuildService by di()
|
||||
|
||||
private val logsPane = LogsPane()
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.bartlomiejpluta.base.editor.main.view
|
||||
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildPipelineService
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildService
|
||||
import com.bartlomiejpluta.base.editor.main.controller.MainController
|
||||
import com.bartlomiejpluta.base.editor.process.runner.app.ApplicationRunner
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
@@ -10,7 +10,7 @@ import tornadofx.*
|
||||
class MainMenuView : View() {
|
||||
private val mainController: MainController by di()
|
||||
private val projectContext: ProjectContext by di()
|
||||
private val buildPipelineService: BuildPipelineService by di()
|
||||
private val buildPipelineService: BuildService by di()
|
||||
private val applicationRunner: ApplicationRunner by di()
|
||||
|
||||
override val root = menubar {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.bartlomiejpluta.base.editor.process.runner.app
|
||||
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildPipelineService
|
||||
import com.bartlomiejpluta.base.editor.code.build.pipeline.BuildService
|
||||
import com.bartlomiejpluta.base.editor.event.ClearProcessLogsEvent
|
||||
import com.bartlomiejpluta.base.editor.process.runner.jar.JarRunner
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
@@ -24,7 +24,7 @@ class DefaultApplicationRunner : ApplicationRunner {
|
||||
private lateinit var projectContext: ProjectContext
|
||||
|
||||
@Autowired
|
||||
private lateinit var pipelineService: BuildPipelineService
|
||||
private lateinit var pipelineService: BuildService
|
||||
|
||||
@Autowired
|
||||
private lateinit var jarRunner: JarRunner
|
||||
|
||||
@@ -47,7 +47,8 @@ class Project {
|
||||
val widgets = observableListOf<WidgetAsset>()
|
||||
val sounds = observableListOf<SoundAsset>()
|
||||
|
||||
val assetLists = listOf(maps, tileSets, autoTiles, images, characterSets, animations, iconSets, fonts, widgets, sounds)
|
||||
val assetLists =
|
||||
listOf(maps, tileSets, autoTiles, images, characterSets, animations, iconSets, fonts, widgets, sounds)
|
||||
|
||||
val mapsDirectoryProperty = SimpleObjectProperty<File>()
|
||||
var mapsDirectory by mapsDirectoryProperty
|
||||
@@ -98,7 +99,6 @@ class Project {
|
||||
// Build directories
|
||||
val buildDirectoryProperty = SimpleObjectProperty<File>()
|
||||
var buildDirectory by buildDirectoryProperty
|
||||
private set
|
||||
|
||||
val buildClassesDirectoryProperty = SimpleObjectProperty<File>()
|
||||
var buildClassesDirectory by buildClassesDirectoryProperty
|
||||
@@ -132,7 +132,8 @@ class Project {
|
||||
var buildAssetsDir by buildAssetsDirProperty
|
||||
private set
|
||||
|
||||
val binaryProjectFileProperty = createObjectBinding({ File(buildAssetsDir, BINARY_PROJECT_FILE) }, buildAssetsDirProperty)
|
||||
val binaryProjectFileProperty =
|
||||
createObjectBinding({ File(buildAssetsDir, BINARY_PROJECT_FILE) }, buildAssetsDirProperty)
|
||||
val binaryProjectFile by binaryProjectFileProperty
|
||||
|
||||
val buildAssetsMapsDirProperty = createObjectBinding({ File(buildAssetsDir, MAPS_DIR) }, buildAssetsDirProperty)
|
||||
@@ -154,17 +155,22 @@ class Project {
|
||||
widgetsDirectory = File(it, WIDGETS_DIR)
|
||||
audioDirectory = File(it, AUDIO_DIR)
|
||||
codeDirectory = File(it, CODE_DIR)
|
||||
buildDirectory = File(it, BUILD_DIR)
|
||||
buildClassesDirectory = File(it, BUILD_CLASSES_DIR)
|
||||
buildDependenciesDirectory = File(it, BUILD_DEPENDENCIES_DIR)
|
||||
buildGeneratedCodeDirectory = File(it, BUILD_GENERATED_DIR)
|
||||
buildAssetsDir = File(it, BUILD_ASSETS_DIR)
|
||||
buildDatabaseDumpDirectory = File(it, BUILD_DATABASE_DUMP_DIR)
|
||||
buildOutDirectory = File(it, BUILD_OUT_DIR)
|
||||
|
||||
changeBuildDirectory(File(it, BUILD_DIR))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun changeBuildDirectory(dir: File) {
|
||||
buildDirectory = File(dir, BUILD_DIR)
|
||||
buildClassesDirectory = File(dir, BUILD_CLASSES_DIR)
|
||||
buildDependenciesDirectory = File(dir, BUILD_DEPENDENCIES_DIR)
|
||||
buildGeneratedCodeDirectory = File(dir, BUILD_GENERATED_DIR)
|
||||
buildAssetsDir = File(dir, BUILD_ASSETS_DIR)
|
||||
buildDatabaseDumpDirectory = File(dir, BUILD_DATABASE_DUMP_DIR)
|
||||
buildOutDirectory = File(dir, BUILD_OUT_DIR)
|
||||
}
|
||||
|
||||
fun init() {
|
||||
database = H2DBDataSource(databaseFile)
|
||||
mkdirs()
|
||||
@@ -174,7 +180,7 @@ class Project {
|
||||
database.close()
|
||||
}
|
||||
|
||||
private fun mkdirs() {
|
||||
fun mkdirs() {
|
||||
sourceDirectory?.mkdirs()
|
||||
mapsDirectory?.mkdirs()
|
||||
tileSetsDirectory?.mkdirs()
|
||||
@@ -208,11 +214,11 @@ class Project {
|
||||
const val AUDIO_DIR = "audio"
|
||||
const val CODE_DIR = "src/main/java"
|
||||
const val BUILD_DIR = "build"
|
||||
const val BUILD_CLASSES_DIR = "$BUILD_DIR/classes"
|
||||
const val BUILD_OUT_DIR = "$BUILD_DIR/out"
|
||||
const val BUILD_DEPENDENCIES_DIR = "$BUILD_DIR/dependencies"
|
||||
const val BUILD_GENERATED_DIR = "$BUILD_DIR/generated"
|
||||
const val BUILD_ASSETS_DIR = "$BUILD_DIR/assets"
|
||||
const val BUILD_DATABASE_DUMP_DIR = "$BUILD_DIR/db"
|
||||
const val BUILD_CLASSES_DIR = "classes"
|
||||
const val BUILD_OUT_DIR = "out"
|
||||
const val BUILD_DEPENDENCIES_DIR = "dependencies"
|
||||
const val BUILD_GENERATED_DIR = "generated"
|
||||
const val BUILD_ASSETS_DIR = "assets"
|
||||
const val BUILD_DATABASE_DUMP_DIR = "db"
|
||||
}
|
||||
}
|
||||
|
||||
15
flake.nix
15
flake.nix
@@ -24,5 +24,18 @@
|
||||
base = pkgs.callPackage ./editor.nix (inputs // {inherit system;});
|
||||
default = base;
|
||||
};
|
||||
});
|
||||
|
||||
devShells.default = pkgs.callPackage ./shell.nix {inherit system;};
|
||||
})
|
||||
// {
|
||||
nixosModules = rec {
|
||||
base = import ./systemModule.nix self;
|
||||
default = base;
|
||||
};
|
||||
|
||||
homeManagerModules = rec {
|
||||
base = import ./homeManagerModule.nix self;
|
||||
default = base;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
20
gradle.lock
20
gradle.lock
@@ -457,6 +457,26 @@
|
||||
"hash": "sha256-VKNPqFAqRryQ79tJJiYAWR+oC/mjT1pMeYMRrsFsqXc="
|
||||
}
|
||||
},
|
||||
"com.xenomachina:kotlin-argparser:2.0.7": {
|
||||
"kotlin-argparser-2.0.7.jar": {
|
||||
"url": "https://repo.maven.apache.org/maven2/com/xenomachina/kotlin-argparser/2.0.7/kotlin-argparser-2.0.7.jar",
|
||||
"hash": "sha256-/wMS6nwU/l7OjE5hf6hVpAj5NvtFPDxb49fVfnoUN1M="
|
||||
},
|
||||
"kotlin-argparser-2.0.7.pom": {
|
||||
"url": "https://repo.maven.apache.org/maven2/com/xenomachina/kotlin-argparser/2.0.7/kotlin-argparser-2.0.7.pom",
|
||||
"hash": "sha256-Oi3hHJvOk2WolEAvp3fmbPgolrHpB86tWShPAjrfhvI="
|
||||
}
|
||||
},
|
||||
"com.xenomachina:xenocom:0.0.7": {
|
||||
"xenocom-0.0.7.jar": {
|
||||
"url": "https://repo.maven.apache.org/maven2/com/xenomachina/xenocom/0.0.7/xenocom-0.0.7.jar",
|
||||
"hash": "sha256-xiQmUrnoLXzk6BHDz3YCWC+46NyRk7PLfzR14CCqaNE="
|
||||
},
|
||||
"xenocom-0.0.7.pom": {
|
||||
"url": "https://repo.maven.apache.org/maven2/com/xenomachina/xenocom/0.0.7/xenocom-0.0.7.pom",
|
||||
"hash": "sha256-tN/7gDFK2W32lbNKB6orVLVoGNLziKKoE/h1ExDqF2s="
|
||||
}
|
||||
},
|
||||
"com.zaxxer:HikariCP:5.0.0": {
|
||||
"HikariCP-5.0.0.jar": {
|
||||
"url": "https://repo.maven.apache.org/maven2/com/zaxxer/HikariCP/5.0.0/HikariCP-5.0.0.jar",
|
||||
|
||||
@@ -18,3 +18,4 @@ apacheCommonsVersion=3.6.1
|
||||
h2Version=1.4.200
|
||||
hikariVersion=5.0.0
|
||||
javaPoetVersion=1.13.0
|
||||
kotlinArgParserVersion=2.0.7
|
||||
|
||||
16
homeManagerModule.nix
Normal file
16
homeManagerModule.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
flake: {
|
||||
config,
|
||||
lib,
|
||||
system,
|
||||
...
|
||||
}: let
|
||||
cfg = config.programs.base-editor;
|
||||
in {
|
||||
options.programs.base-editor = {
|
||||
enable = lib.mkEnableOption "BASE Editor";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = [flake.packages.${system}.default];
|
||||
};
|
||||
}
|
||||
9
shell.nix
Normal file
9
shell.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{pkgs, ...}:
|
||||
pkgs.mkShell {
|
||||
name = "base-game-engine-development-shell";
|
||||
|
||||
nativeBuildInputs = [pkgs.gradle_7];
|
||||
|
||||
LD_LIBRARY_PATH = with pkgs; "${xorg.libXtst}/lib:${openjfx17}/lib:${glib.out}/lib:${alsa-lib}/lib:${libGL}/lib:${gtk3}/lib";
|
||||
PROTOBUF_EXECUTABLE = "${pkgs.protobuf_21}/bin/protoc";
|
||||
}
|
||||
16
systemModule.nix
Normal file
16
systemModule.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
flake: {
|
||||
config,
|
||||
lib,
|
||||
system,
|
||||
...
|
||||
}: let
|
||||
cfg = config.programs.base-editor;
|
||||
in {
|
||||
options.programs.base-editor = {
|
||||
enable = lib.mkEnableOption "BASE Editor";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [flake.packages.${system}.default];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user