
Componency
Активный0.0
Установок
Последнее обновление
Версии
Componency
Библиотека для создания пользовательских интерфейсов, разработанная с нуля для работы в любой среде. Основана на декларативном подходе программирования, что делает процесс создания UI простым и интуитивно понятным.
Вдохновение и концепция
Componency черпает идеи из нескольких проектов:
- Дизайн Elementa
- Соглашения об именовании Figma
- Подход к созданию DSL в Ktor
Эта библиотека объединяет лучшие практики из этих проектов, предлагая удобное решение для построения интерфейсов.
Особенности использования
Библиотека в первую очередь ориентирована на Kotlin, но также поддерживает работу с Java. Все примеры в документации представлены на Kotlin, однако функциональность доступна и для Java-разработчиков.
Настройка проекта
Добавление репозитория
Для Groovy (.gradle):
maven {
name = "Deftu Snapshots"
url = "https://maven.deftu.dev/snapshots"
}
Для Kotlin (.gradle.kts):
maven(url = "https://maven.deftu.dev/snapshots") {
name = "Deftu Snapshots"
}
Добавление зависимости
Для Groovy (.gradle):
modImplementation "dev.deftu:componency:<version>"
Для Kotlin (.gradle.kts):
implementation("dev.deftu:componency:<version>")
Основы работы
Создание движка
Для использования библиотеки необходимо создать движок Componency, который обеспечивает взаимодействие с системой рендеринга:
package com.example
import dev.deftu.componency.engine.Engine
import dev.deftu.componency.engine.InputEngine
import dev.deftu.componency.engine.RenderEngine
import java.awt.Color
class MyEngine : Engine {
override val inputEngine: InputEngine by lazy {
MyInputEngine()
}
override val renderEngine: RenderEngine by lazy {
MyRenderEngine()
}
}
class MyInputEngine : InputEngine {
override val mouseX: Float = 0f
override val mouseY: Float = 0f
}
class MyRenderEngine : RenderEngine {
override val viewportWidth: Int = 0
override val viewportHeight: Int = 0
override val animationFps: Int = 144 // Рекомендуется не более 300
override fun startFrame() {
// Начало рендеринга кадра (применение трансформаций и т.д.)
}
override fun endFrame() {
// Завершение рендеринга кадра (применение трансформаций и т.д.)
}
override fun fill(x1: Float, y1: Float, x2: Float, y2: Float, color: Color, radius: Float) {
// Заливка прямоугольника цветом с указанным радиусом
}
}
Создание пользовательского интерфейса
После настройки движка можно приступать к созданию UI:
object Main {
@JvmStatic
fun main(args: Array<String>) {
val engine = MyEngine()
val ui = MyUI(engine)
// В цикле рендеринга достаточно вызвать ui.render()
для отображения интерфейса
ui.render() // (Это заглушка для вашего реального цикла рендеринга)
}
}
class MyUI(engine: Engine) {
// Обычно в качестве корневого компонента используется фрейм
private val frame = FrameComponent().configure {
// В Componency свойства определяются в собственной области видимости при настройке
// Большинство часто используемых свойств имеют расширения для удобного доступа
properties {
width = 100.percent
height = 100.percent
}
}.makeRoot(engine) // Делаем фрейм корневым компонентом UI, передавая ему движок
private val box = RectangleComponent().configure {
properties {
x = 25.percent
y = 25.percent
width = 50.percent
height = 50.percent
color = Color.RED.asProperty
}
}.attachTo(frame) // Добавляем прямоугольник как дочерний элемент фрейма
// Здесь можно добавить дополнительные компоненты к фрейму или прямоугольнику
// Предоставляем внешний метод для рендеринга нашего фрейма
fun render() {
frame.handleRender()
}
}
Дополнительные примеры
Для более сложных примеров можно ознакомиться с базовыми примерами в соответствующей директории (Java, Kotlin).
Также доступен пример реализации для LWJGL3.
Использование в Minecraft
Современные версии Minecraft (1.16.5 и выше)
Для использования в современных версиях Minecraft достаточно добавить зависимость в скрипт сборки.
Для Groovy (.gradle):
modImplementation "dev.deftu:componency-minecraft-<minecraft version>-<mod loader>:<version>"
Для Kotlin (.gradle.kts):
implementation("dev.deftu:componency-minecraft-<minecraft version>-<mod loader>:<version>")
Устаревшие версии Minecraft (1.12.2 и 1.8.9)
Для устаревших версий требуется дополнительная настройка с использованием твикера управления зависимостями, который обеспечивает загрузку последней версии библиотеки и принудительное использование LWJGL 3.
Для Groovy (.gradle):
dependencies {
modImplementation "dev.deftu:componency-minecraft-<minecraft version>-<mod loader>:<version>"
modImplementation "dev.deftu:componency-minecraft-tweaker-<minecraft version>-<mod loader>:<version>"
}
jar {
manifest {
attributes(
"TweakClass": "dev.deftu.componency.minecraft.tweaker.ComponencyTweaker"
)
}
}
Для Kotlin (.gradle.kts):
dependencies {
implementation("dev.deftu:componency-minecraft-<minecraft version>-<mod loader>:<version>")
implementation("dev.deftu:componency-minecraft-tweaker-<minecraft version>-<mod loader>:<version>")
}
tasks.jar {
manifest {
attributes(
"TweakClass" to "dev.deftu.componency.minecraft.tweaker.ComponencyTweaker"
)
}
}
Благодарности
- nea89o / HypixelDev - твикер управления зависимостями для Forge 1.8.9 & 1.12.2
- nextdayy / xtrm / Polyfrost - вдохновение для настройки движка и загрузчик LWJGL 3 для устаревших версий Minecraft
В разработке
- Отладчик
Проект распространяется под лицензией LGPL-3.0