From 1c8cc2cd63ea31e19f95e43b8a9470555865ed28 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Wed, 23 Sep 2026 19:08:16 +0300 Subject: [PATCH 01/25] VFX System & UI Docking Improvements --- .../hollowengine/client/HollowCoreClient.kt | 4 + .../client/models/internal/Material.kt | 49 +- .../internal/rendering/PipelineRenderer.kt | 34 +- .../internal/rendering/RenderMaterial.kt | 25 + .../hollowengine/client/ui/UiCursorManager.kt | 1 + .../hollowengine/client/ui/UiSpring.kt | 72 +++ .../hollowengine/client/ui/UiValues.kt | 3 +- .../client/ui/docking/DockModel.kt | 35 +- .../client/ui/docking/DockSideStripe.kt | 257 +++++++-- .../client/ui/docking/DockingCompose.kt | 39 +- .../ui/docking/DockingOverlayCompose.kt | 47 +- .../client/ui/docking/DockingPinned.kt | 208 +++++++ .../client/ui/docking/DockingState.kt | 139 +---- .../ui/ide/HollowIdeBuiltinFileTypes.kt | 11 + .../client/ui/ide/HollowIdeLayoutStore.kt | 19 +- .../client/ui/ide/HollowIdeMenuItems.kt | 2 + .../client/ui/ide/HollowIdeOverlay.kt | 15 +- .../client/ui/ide/HollowIdeToolWindows.kt | 26 +- .../client/ui/ide/IdeSceneHost.kt | 111 ++++ .../ui/ide/files/HollowIdeVfxDocument.kt | 153 +++++ .../ui/ide/files/animator/AnimatorWidgets.kt | 40 -- .../client/ui/ide/files/vfx/VfxColorField.kt | 270 +++++++++ .../client/ui/ide/files/vfx/VfxCurveDialog.kt | 117 ++++ .../client/ui/ide/files/vfx/VfxDriven.kt | 37 ++ .../client/ui/ide/files/vfx/VfxEditorPanel.kt | 375 ++++++++++++ .../client/ui/ide/files/vfx/VfxFields.kt | 485 ++++++++++++++++ .../client/ui/ide/files/vfx/VfxInspector.kt | 407 +++++++++++++ .../ui/ide/files/vfx/VfxModuleInspector.kt | 203 +++++++ .../ui/ide/files/vfx/VfxPreviewGizmo.kt | 376 ++++++++++++ .../ui/ide/files/vfx/VfxPreviewState.kt | 337 +++++++++++ .../ui/ide/files/vfx/VfxTimelineBridge.kt | 266 +++++++++ .../ui/ide/panels/VanillaModelEditorPanel.kt | 10 +- .../client/ui/ide/timeline/TimelineApi.kt | 145 ++--- .../ui/ide/timeline/TimelineController.kt | 121 ++-- .../client/ui/ide/timeline/TimelineHistory.kt | 34 +- .../client/ui/ide/timeline/TimelineKeys.kt | 103 ++++ .../client/ui/ide/timeline/TimelineTypes.kt | 3 - .../ide/timeline/cutscene/CameraCutscene.kt | 66 +-- .../ui/ide/timeline/cutscene/CutsceneData.kt | 30 +- .../cutscene/CutsceneEditorSession.kt | 99 +--- .../timeline/cutscene/CutsceneEnvironment.kt | 3 - .../timeline/cutscene/CutsceneMigrations.kt | 93 ++- .../client/ui/ide/timeline/ui/CutsceneLang.kt | 10 - .../ide/timeline/ui/HollowTimelineChrome.kt | 201 ++++--- .../ide/timeline/ui/HollowTimelineCurves.kt | 11 +- .../ui/ide/timeline/ui/HollowTimelinePanel.kt | 11 +- .../timeline/ui/HollowTimelineProperties.kt | 50 +- ...log.kt => HollowTimelinePropertyDialog.kt} | 64 --- .../ide/timeline/ui/HollowTimelineSupport.kt | 71 +-- .../ui/ide/timeline/ui/IdeTimelineHost.kt | 219 +++++++ .../client/ui/inspector/Inspector.kt | 39 +- .../ui/render/UiTextOverflowResolver.kt | 14 + .../hollowengine/client/ui/widgets/UiModel.kt | 15 +- .../client/ui/widgets/UiTreeView.kt | 8 +- .../client/utils/ForgeKotlinClient.kt | 4 + .../hollowengine/client/vfx/VfxAssets.kt | 47 ++ .../client/vfx/VfxBoneAttachmentRuntime.kt | 124 ++++ .../hollowengine/client/vfx/VfxEmitter.kt | 541 ++++++++++++++++++ .../hollowengine/client/vfx/VfxEnvironment.kt | 131 +++++ .../hollowengine/client/vfx/VfxExpressions.kt | 155 +++++ .../hollowengine/client/vfx/VfxFrame.kt | 93 +++ .../hollowengine/client/vfx/VfxInstance.kt | 341 +++++++++++ .../client/vfx/VfxModuleRuntime.kt | 299 ++++++++++ .../hollowengine/client/vfx/VfxParticles.kt | 100 ++++ .../hollowengine/client/vfx/VfxSamplers.kt | 198 +++++++ .../hollowengine/client/vfx/VfxScenes.kt | 170 ++++++ .../client/vfx/render/VfxDraws.kt | 141 +++++ .../client/vfx/render/VfxQuadPacker.kt | 329 +++++++++++ .../client/vfx/render/VfxQuadRenderer.kt | 311 ++++++++++ .../client/vfx/render/VfxWorldRenderer.kt | 66 +++ .../common/commands/HollowEngineCommands.kt | 36 ++ .../common/models/RigAttachmentTypes.kt | 10 + .../common/registry/ModShaders.kt | 9 + .../story/functions/effects/VfxEffects.kt | 28 + .../common/vfx/VfxBoneAttachment.kt | 34 ++ .../hollowengine/common/vfx/VfxEffect.kt | 233 ++++++++ .../hollowengine/common/vfx/VfxFormat.kt | 56 ++ .../common/vfx/VfxMaterialSpec.kt | 67 +++ .../hollowengine/common/vfx/VfxPlayback.kt | 143 +++++ .../hollowengine/common/vfx/VfxRegistries.kt | 194 +++++++ .../hollowengine/common/vfx/VfxSpecs.kt | 334 +++++++++++ .../hollowengine/common/vfx/VfxValue.kt | 282 +++++++++ .../common/vfx/modules/VfxCollisionSpec.kt | 31 + .../common/vfx/modules/VfxForceSpec.kt | 54 ++ .../common/vfx/modules/VfxModules.kt | 30 + .../common/vfx/modules/VfxNoiseSpec.kt | 39 ++ .../common/vfx/modules/VfxUvAnimationSpec.kt | 43 ++ .../modules/VfxVelocityOverLifetimeSpec.kt | 31 + .../fabric/internal/IrisHelper.kt | 7 + .../rendering/IrisParticlePrograms.kt | 144 +++++ .../lang/en_us/hollowengine/gui/docking.json | 5 + .../en_us/hollowengine/gui/ide/cutscene.json | 10 - .../en_us/hollowengine/gui/ide/windows.json | 4 +- .../en_us/hollowengine/gui/rig_editor.json | 3 +- .../main/lang/en_us/hollowengine/gui/vfx.json | 219 +++++++ .../lang/ru_ru/hollowengine/gui/docking.json | 5 + .../ru_ru/hollowengine/gui/ide/cutscene.json | 10 - .../ru_ru/hollowengine/gui/ide/windows.json | 4 +- .../ru_ru/hollowengine/gui/rig_editor.json | 3 +- .../main/lang/ru_ru/hollowengine/gui/vfx.json | 219 +++++++ .../shaders/core/vfx_particle.fsh | 39 ++ .../shaders/core/vfx_particle.json | 34 ++ .../shaders/core/vfx_particle.vsh | 41 ++ .../hollowengine/textures/gui/icons/curve.svg | 3 + .../hollowengine/textures/gui/icons/info.svg | 3 + .../textures/gui/icons/keyframe.svg | 3 + .../hollowengine/textures/gui/icons/range.svg | 3 + .../hollowengine/ui/styles/inspector.hss | 58 +- .../assets/hollowengine/vfx/example.vfx | 271 +++++++++ runtime/src/test/kotlin/VfxFormatTests.kt | 156 +++++ .../HollowIdeFileTypeRegistryTest.kt | 2 + .../timeline/ui/HollowTimelinePointerTest.kt | 4 +- .../client/ui/docking/DockingStateTest.kt | 56 ++ .../client/ui/render/UiTextClipTest.kt | 29 + .../cutscene/CutsceneCurveTest.kt | 2 +- .../cutscene/CutsceneMigrationTest.kt | 10 +- .../hollowengine/cutscene/CutsceneTest.kt | 146 +---- 117 files changed, 10734 insertions(+), 1046 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/RenderMaterial.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiSpring.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeVfxDocument.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt rename runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/{HollowTimelineLayerDialog.kt => HollowTimelinePropertyDialog.kt} (54%) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEnvironment.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxFrame.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/story/functions/effects/VfxEffects.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxBoneAttachment.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxFormat.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxPlayback.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxCollisionSpec.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxForceSpec.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxModules.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxNoiseSpec.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxUvAnimationSpec.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxVelocityOverLifetimeSpec.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt create mode 100644 runtime/src/main/lang/en_us/hollowengine/gui/vfx.json create mode 100644 runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/curve.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyframe.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/range.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/vfx/example.vfx create mode 100644 runtime/src/test/kotlin/VfxFormatTests.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt index b629bd2d1..da3c00323 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt @@ -6,6 +6,8 @@ import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.models.internal.manager.HollowModelManager import ru.hollowhorizon.hollowengine.client.particles.BedrockParticles import ru.hollowhorizon.hollowengine.client.render.RenderManager +import ru.hollowhorizon.hollowengine.client.vfx.VfxAssets +import ru.hollowhorizon.hollowengine.client.vfx.VfxBoneBindings import ru.hollowhorizon.hollowengine.client.render.entity.EmptyEntityRenderer import ru.hollowhorizon.hollowengine.client.ui.render.UiPathTileResources import ru.hollowhorizon.hollowengine.client.ui.screen.HollowUiDemoScreen @@ -28,12 +30,14 @@ object HollowCoreClient { init { RenderSystem.recordRenderCall(RenderManager::onInitialize) + VfxBoneBindings.register() } @SubscribeEvent fun onRegisterReloadListener(event: RegisterReloadListenersEvent.Client) { event.register(HollowModelManager) event.register(BedrockParticles) + event.register(VfxAssets) event.register(UiPathTileResources) event.register(UiFontResources) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/Material.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/Material.kt index aebdc4d2d..90cd3d499 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/Material.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/Material.kt @@ -1,7 +1,15 @@ package ru.hollowhorizon.hollowengine.client.models.internal +import com.mojang.blaze3d.systems.RenderSystem +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.ShaderInstance import net.minecraft.resources.ResourceLocation +import org.lwjgl.opengl.GL33 import ru.hollowhorizon.hollowengine.HollowEngine.MODID +import ru.hollowhorizon.hollowengine.client.models.internal.rendering.MaterialBindContext +import ru.hollowhorizon.hollowengine.client.models.internal.rendering.RenderMaterial +import ru.hollowhorizon.hollowengine.client.utils.areShadersEnabled +import ru.hollowhorizon.hollowengine.client.utils.toTexture import ru.hollowhorizon.hollowengine.common.utils.Color import ru.hollowhorizon.hollowengine.common.utils.rl @@ -20,12 +28,49 @@ data class Material( var doubleSided: Boolean = false, var blend: Blend = Blend.OPAQUE, var emissive: Boolean = false, -) { +) : RenderMaterial { enum class Blend { OPAQUE, BLEND } + override val isTranslucent: Boolean get() = blend == Blend.BLEND + + override fun bind(context: MaterialBindContext) { + val shader = context.shader + if (context.colorLocation != -1) { + GL33.glVertexAttrib4f(context.colorLocation, color.r, color.g, color.b, color.a) + } + + if (areShadersEnabled) { + bindExtraMap(shader, "normals", normalTexture) + bindExtraMap(shader, "specular", specularTexture) + } + + RenderSystem.activeTexture(COLOR_MAP_INDEX) + RenderSystem.bindTexture(Minecraft.getInstance().textureManager.getTexture(texture).id) + + if (doubleSided) RenderSystem.disableCull() else RenderSystem.enableCull() + + when (blend) { + Blend.OPAQUE -> RenderSystem.disableBlend() + Blend.BLEND -> { + RenderSystem.enableBlend() + RenderSystem.defaultBlendFunc() + } + } + } + + override fun clear(context: MaterialBindContext) = Unit + + private fun bindExtraMap(shader: ShaderInstance, uniform: String, map: ResourceLocation) { + val location = GL33.glGetUniformLocation(shader.id, uniform) + if (location == -1) return + + RenderSystem.activeTexture(COLOR_MAP_INDEX + GL33.glGetUniformi(shader.id, location)) + RenderSystem.bindTexture(map.toTexture().id) + } + companion object { val MISSING_TEXTURE = "$MODID:default_color_map".rl val MISSING_NORMAL = "$MODID:default_normal_map".rl val MISSING_SPECULAR = "$MODID:default_specular_map".rl } -} \ No newline at end of file +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/PipelineRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/PipelineRenderer.kt index bb76e6959..77536e298 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/PipelineRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/PipelineRenderer.kt @@ -589,39 +589,7 @@ class PipelineRenderer(private val primitive: Primitive) : MeshRenderer { } private fun applyMaterial(shader: ShaderInstance, material: Material, colorLocation: Int = 1) { - if (colorLocation != -1) { - GL33.glVertexAttrib4f(colorLocation, material.color.r, material.color.g, material.color.b, material.color.a) - } - - var normal = 0 - var specular = 0 - - if (areShadersEnabled) { - GL33.glGetUniformLocation(shader.id, "normals").takeIf { it != -1 }?.let { - RenderSystem.activeTexture(COLOR_MAP_INDEX + GL33.glGetUniformi(shader.id, it)) - normal = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D) - RenderSystem.bindTexture(material.normalTexture.toTexture().id) - } - GL33.glGetUniformLocation(shader.id, "specular").takeIf { it != -1 }?.let { - RenderSystem.activeTexture(COLOR_MAP_INDEX + GL33.glGetUniformi(shader.id, it)) - specular = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D) - RenderSystem.bindTexture(material.specularTexture.toTexture().id) - } - } - - RenderSystem.activeTexture(COLOR_MAP_INDEX) - RenderSystem.bindTexture(Minecraft.getInstance().textureManager.getTexture(material.texture).id) - - if (material.doubleSided) RenderSystem.disableCull() - else RenderSystem.enableCull() - - when (material.blend) { - Material.Blend.OPAQUE -> RenderSystem.disableBlend() - Material.Blend.BLEND -> { - RenderSystem.enableBlend() - RenderSystem.defaultBlendFunc() - } - } + material.bind(MaterialBindContext(shader, colorLocation)) } override fun destroy() { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/RenderMaterial.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/RenderMaterial.kt new file mode 100644 index 000000000..9cf7963c4 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/internal/rendering/RenderMaterial.kt @@ -0,0 +1,25 @@ +package ru.hollowhorizon.hollowengine.client.models.internal.rendering + +import net.minecraft.client.renderer.ShaderInstance + +/** + * The appearance of the surface to be rendered. + */ +interface RenderMaterial { + /** + * Should the rendering calls for this material be sorted from far to near? + * + * For example, for semi-transparent materials. + */ + val isTranslucent: Boolean + + fun bind(context: MaterialBindContext) + + /** Undoes whatever [bind] set if it needs to be undone. */ + fun clear(context: MaterialBindContext) = Unit +} + +/** + * What a material is being bound for. + */ +class MaterialBindContext(val shader: ShaderInstance, val colorLocation: Int = -1) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCursorManager.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCursorManager.kt index bcafb7ec9..229ab4221 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCursorManager.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCursorManager.kt @@ -68,5 +68,6 @@ object UiCursorManager { UiCursorShape.RESIZE_VERTICAL -> GLFW_RESIZE_NS_CURSOR UiCursorShape.RESIZE_NESW -> GLFW_RESIZE_NESW_CURSOR UiCursorShape.RESIZE_NWSE -> GLFW_RESIZE_NWSE_CURSOR + UiCursorShape.NOT_ALLOWED -> GLFW_NOT_ALLOWED_CURSOR } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiSpring.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiSpring.kt new file mode 100644 index 000000000..eb16f2a21 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiSpring.kt @@ -0,0 +1,72 @@ +package ru.hollowhorizon.hollowengine.client.ui + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import kotlin.math.abs + +/** + * A number that springs towards its target instead of jumping there. Whoever owns it calls + * [advance] from a `withFrameNanos` loop. + * + * [rest] is how close counts as arrived; it has to be small next to the steps the value takes, or + * the last stretch of the motion is a visible jump. + */ +internal class SpringFloat(initial: Float, private val rest: Float = 0.05f) { + var value by mutableStateOf(initial) + private set + + var target: Float = initial + + private var velocity = 0f + private var lastFrame = 0L + + /** Puts the value there at once, for changes the pointer is already animating by hand. */ + fun snapTo(next: Float) { + target = next + value = next + velocity = 0f + } + + fun advance(frameNanos: Long) { + val previous = lastFrame + lastFrame = frameNanos + if (previous == 0L) return + + val delta = target - value + if (abs(delta) < rest && abs(velocity) < rest) { + if (value != target) value = target + velocity = 0f + return + } + + val dt = ((frameNanos - previous) / 1_000_000_000f).coerceIn(0f, 0.05f) + velocity += (delta * 300f - velocity * 32f) * dt + value += velocity * dt + } +} + +/** + * The zoom of an orbit preview, kept as a camera distance or as a model scale. + */ +internal class SpringZoom( + initial: Float, + private val min: Float, + private val max: Float, + private val perNotch: Float, +) { + private val spring = SpringFloat(initial, rest = 0.0005f) + + val value: Float get() = spring.value + + fun scroll(scrollY: Float) { + if (scrollY == 0f) return + val factor = if (scrollY > 0f) perNotch else 1f / perNotch + spring.target = (spring.target * factor).coerceIn(min, max) + } + + fun advance(frameNanos: Long) = spring.advance(frameNanos) +} + +/** How much one wheel notch scales a model preview. */ +internal const val ModelZoomPerNotch = 1f / 1.2f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt index 3def79ffd..200a00874 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt @@ -268,7 +268,8 @@ enum class UiCursorShape { RESIZE_HORIZONTAL, RESIZE_VERTICAL, RESIZE_NESW, - RESIZE_NWSE + RESIZE_NWSE, + NOT_ALLOWED } sealed interface UiLength { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt index 68546a943..28a6dfdab 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt @@ -1,5 +1,7 @@ package ru.hollowhorizon.hollowengine.client.ui.docking +import androidx.compose.runtime.compositionLocalOf + data class DockItem( val id: String, val title: String, @@ -10,6 +12,7 @@ data class DockItem( val dirty: Boolean = false, val singleTabPresentation: DockSingleTabPresentation = DockSingleTabPresentation.BAR, val pinnable: Boolean = false, + val titleInToolbar: Boolean = false, ) /** Which edge of the dock space a pinned item's stripe button sits on. */ @@ -22,14 +25,38 @@ enum class DockSide { val opposite: DockSide get() = if (this == LEFT) RIGHT else LEFT } +/** + * Which half of a stripe a tool window sits in. + * + * The top half opens beside the editor, above the bottom area. The bottom half opens into the area + * under the editor and the side panels, the full width between the stripes. + */ +enum class DockStripeGroup { + TOP, + BOTTOM, +} + +/** Where on the stripes a tool window is parked; one window per anchor is open at a time. */ +data class DockAnchor(val side: DockSide, val group: DockStripeGroup = DockStripeGroup.TOP) { + companion object { + val all: List = DockSide.entries.flatMap { side -> + DockStripeGroup.entries.map { group -> DockAnchor(side, group) } + } + } +} + data class DockPinnedItem( val item: DockItem, val side: DockSide, val width: Float = DefaultPinnedWidth, -) + val group: DockStripeGroup = DockStripeGroup.TOP, +) { + val anchor: DockAnchor get() = DockAnchor(side, group) +} /** Width a tool window's panel takes the first time it is pinned. */ const val DefaultPinnedWidth = 260f +const val DefaultBottomHeight = 220f enum class DockSingleTabPresentation { BAR, @@ -306,3 +333,9 @@ internal class DockIdGenerator { fun nextWindowId(): String = "dock-window-${nextWindow++}" } + +/** The title a parked window is expected to show itself, when it asked for [DockItem.titleInToolbar]. */ +class DockPanelTitle(val title: String, val icon: String?) + +/** Set for the content of a parked window that draws its own title; null everywhere else. */ +val LocalDockPanelTitle = compositionLocalOf { null } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt index fad733c74..b104d10e7 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt @@ -1,23 +1,66 @@ package ru.hollowhorizon.hollowengine.client.ui.docking -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.withFrameNanos import kotlinx.coroutines.delay -import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.Box +import ru.hollowhorizon.hollowengine.client.ui.Column +import ru.hollowhorizon.hollowengine.client.ui.Image +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.Row +import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.UiAlign +import ru.hollowhorizon.hollowengine.client.ui.UiCursorShape +import ru.hollowhorizon.hollowengine.client.ui.UiPopupAlignment +import ru.hollowhorizon.hollowengine.client.ui.align +import ru.hollowhorizon.hollowengine.client.ui.alignItems +import ru.hollowhorizon.hollowengine.client.ui.clip +import ru.hollowhorizon.hollowengine.client.ui.cursor +import ru.hollowhorizon.hollowengine.client.ui.grow +import ru.hollowhorizon.hollowengine.client.ui.input +import ru.hollowhorizon.hollowengine.client.ui.isRightClick import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.onDrag +import ru.hollowhorizon.hollowengine.client.ui.onPlaced +import ru.hollowhorizon.hollowengine.client.ui.onPress +import ru.hollowhorizon.hollowengine.client.ui.onRelease +import ru.hollowhorizon.hollowengine.client.ui.percent +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.size +import ru.hollowhorizon.hollowengine.client.ui.textWrap import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.client.utils.lang +import kotlin.math.abs +import kotlin.math.hypot import kotlin.time.Duration.Companion.milliseconds /** Edge of a stripe button. */ private const val StripeButtonSize = 22f +/** A button and the gap after it, as `.dock-stripe` lays them out. */ +private const val StripeButtonPitch = 24f + /** How long a panel takes to push the editor aside, and to give the room back. */ private const val PanelSlideMillis = 160L -/** Width of the handle that drags a pinned panel's inner edge. */ -private const val PanelSplitterWidth = 3f +/** Width of the handles that drag a panel's inner edge. */ +internal const val PanelSplitterWidth = 3f + +/** How far a stripe button has to move before a press becomes a drag rather than a click. */ +private const val DragThreshold = 4f + +/** How far past its stripe a button has to be dragged to come off it as a floating window. */ +private const val UndockDistance = 28f internal fun DockingState.edgeWidth(side: DockSide): Float { val stripe = if (stripesVisible && pinnedOn(side).isNotEmpty()) StripeButtonSize else 0f @@ -25,65 +68,90 @@ internal fun DockingState.edgeWidth(side: DockSide): Float { return stripe + panel } -/** - * One edge of the dock space: the stripe of buttons for the tool windows parked on [side], and the - * panel the open one expands into. - */ -@Composable -internal fun DockSideEdge( - side: DockSide, - state: DockingState, - tabBarActions: DockTabBarActions, - content: DockItemContent, -) { - if (side == DockSide.LEFT) { - DockStripe(side, state) - DockPinnedPanel(side, state, tabBarActions, content) - } else { - DockPinnedPanel(side, state, tabBarActions, content) - DockStripe(side, state) - } -} +internal fun stripeId(side: DockSide): String = "dock-stripe-${side.tag}" + +internal fun stripeButtonId(itemId: String): String = "dock-stripe-button-$itemId" +/** The buttons of the top half, a gap, then buttons of the bottom half. */ @Composable -private fun DockStripe(side: DockSide, state: DockingState) { - val items = state.pinnedOn(side) - val open = state.stripesVisible && items.isNotEmpty() +internal fun DockStripe(side: DockSide, state: DockingState) { + val open = state.stripesVisible && state.pinnedOn(side).isNotEmpty() + var height by remember { mutableStateOf(0f) } Column( - id = "dock-stripe-${side.tag}", + id = stripeId(side), tags = listOf(DockTags.Stripe, side.tag), modifier = Modifier.size(if (open) StripeButtonSize.px else 0.px, 100.percent) - .alignItems(horizontal = UiAlign.CENTER).clip(), + .alignItems(horizontal = UiAlign.CENTER).clip().onPlaced { height = it.height }, ) { - items.forEach { pinned -> - key(pinned.item.id) { DockStripeButton(pinned, state) } + state.pinnedIn(DockAnchor(side, DockStripeGroup.TOP)).forEach { pinned -> + key(pinned.item.id) { DockStripeButton(pinned, state) { height } } + } + Box(modifier = Modifier.size(1.px, 0.px).grow(1f)) + state.pinnedIn(DockAnchor(side, DockStripeGroup.BOTTOM)).forEach { pinned -> + key(pinned.item.id) { DockStripeButton(pinned, state) { height } } } } } +/** + * A stripe button. A click opens or closes its window. Dragged along the stripe it moves, into the + * other half as well. + */ @Composable -private fun DockStripeButton(pinned: DockPinnedItem, state: DockingState) { +private fun DockStripeButton(pinned: DockPinnedItem, state: DockingState, stripeHeight: () -> Float) { val item = pinned.item - val expanded = state.expandedOn(pinned.side)?.item?.id == item.id + val expanded = state.expandedIn(pinned.anchor)?.item?.id == item.id var anchor by remember { mutableStateOf(UiRect.Zero) } var menu by remember { mutableStateOf(false) } + val dragging = remember { booleanArrayOf(false) } Box( - id = "dock-stripe-button-${item.id}", + id = stripeButtonId(item.id), tags = buildList { add(DockTags.StripeButton) if (expanded) add(DockTags.Selected) }, - modifier = Modifier.size(StripeButtonSize.px, StripeButtonSize.px).input(hoverable = true, clickable = true) + modifier = Modifier.size(StripeButtonSize.px, StripeButtonSize.px) + .input(hoverable = true, clickable = true, draggable = true) .cursor(UiCursorShape.HAND).tooltipOnHover(item.title.lang, alignment = pinned.side.asideAlignment) - .onPlaced { anchor = it }.onPress { event -> + .onPlaced { anchor = it } + .onPress { event -> + dragging[0] = false if (event.isRightClick()) { menu = true event.consume() } - }.onClick { event -> - if (!event.isRightClick()) state.togglePinned(item.id) + } + .onDrag { event -> + if (event.isRightClick()) return@onDrag + if (!dragging[0] && hypot(event.dragTotalX, event.dragTotalY) < DragThreshold) return@onDrag + dragging[0] = true event.consume() + + if (abs(event.dragTotalX) > StripeButtonSize + UndockDistance) { + val spaceX = event.localXInAncestor(DockTags.Space) ?: event.rootLocalX + val spaceY = event.localYInAncestor(DockTags.Space) ?: event.rootLocalY + state.undockPinned(item.id, spaceX - event.localX, spaceY - event.localY, stripeButtonId(item.id)) + return@onDrag + } + + val height = stripeHeight() + val along = event.localYInAncestor(stripeId(pinned.side)) ?: return@onDrag + if (height <= 0f) return@onDrag + val group = if (along < height / 2f) DockStripeGroup.TOP else DockStripeGroup.BOTTOM + val target = DockAnchor(pinned.side, group) + val others = state.pinnedIn(target).count { it.item.id != item.id } + val index = if (group == DockStripeGroup.TOP) { + (along / StripeButtonPitch).toInt() + } else { + others - ((height - along) / StripeButtonPitch).toInt() + } + state.movePinned(item.id, target, index.coerceIn(0, others)) + } + .onRelease { event -> + event.consume() + if (!dragging[0] && !event.isRightClick()) state.togglePinned(item.id) + dragging[0] = false }, ) { item.icon?.let { icon -> @@ -104,8 +172,10 @@ private fun DockStripeButton(pinned: DockPinnedItem, state: DockingState) { private fun stripeMenuItems(pinned: DockPinnedItem, state: DockingState): List { val itemId = pinned.item.id + val otherGroup = if (pinned.group == DockStripeGroup.TOP) DockStripeGroup.BOTTOM else DockStripeGroup.TOP return buildList { - add(UiDropdownItem(label = DockLang.pinTo(pinned.side.opposite)) { state.pin(itemId, pinned.side.opposite) }) + add(UiDropdownItem(label = DockLang.moveTo(otherGroup)) { state.pin(itemId, pinned.side, otherGroup) }) + add(UiDropdownItem(label = DockLang.pinTo(pinned.side.opposite)) { state.pin(itemId, pinned.side.opposite, pinned.group) }) add(UiDropdownItem(label = DockLang.Undock) { state.unpin(itemId) }) if (pinned.item.closable) { add(UiDropdownItem(label = DockLang.Close) { state.close(itemId) }) @@ -114,8 +184,12 @@ private fun stripeMenuItems(pinned: DockPinnedItem, state: DockingState): List + state.setBottomHeight(heightAtPress[0] - event.dragTotalY) + event.consume() + }, + ) + Row( + id = "dock-bottom-area", + tags = listOf(DockTags.PinnedPanel, "bottom"), + modifier = Modifier.size(100.percent, state.bottomHeight.px).clip(), + ) { + val both = left != null && right != null + left?.let { panel -> + Column( + id = "dock-bottom-left", + modifier = Modifier.size(0.px, 100.percent).grow(if (both) state.bottomFraction else 1f).clip(), + ) { DockPinnedBody(panel, state, tabBarActions, content) } + } + if (both) DockBottomDivider(state) + right?.let { panel -> + Column( + id = "dock-bottom-right", + modifier = Modifier.size(0.px, 100.percent).grow(if (both) 1f - state.bottomFraction else 1f).clip(), + ) { DockPinnedBody(panel, state, tabBarActions, content) } + } + } +} + +@Composable +private fun DockBottomDivider(state: DockingState) { + val fractionAtPress = remember { floatArrayOf(state.bottomFraction) } + Box( + id = "dock-bottom-divider", + tags = listOf(DockTags.Splitter), + modifier = Modifier.size(PanelSplitterWidth.px, 100.percent) + .input(hoverable = true, draggable = true).cursor(UiCursorShape.RESIZE_HORIZONTAL) + .onPress { fractionAtPress[0] = state.bottomFraction } + .onDrag { event -> + val width = event.parentWidth - PanelSplitterWidth + if (width > 0f) state.setBottomFraction(fractionAtPress[0] + event.dragTotalX / width) + event.consume() + }, + ) +} + +/** A parked window as it shows when open: its header, then its content. */ +@Composable +private fun DockPinnedBody( + panel: DockPinnedItem, + state: DockingState, + tabBarActions: DockTabBarActions, + content: DockItemContent, +) { + val item = panel.item + if (!item.titleInToolbar) DockPanelHeader(panel, tabBarActions) + Box( + id = "$PinnedContentPrefix${item.id}-content", + tags = listOf(DockTags.Content), + modifier = Modifier.size(100.percent, 0.px).grow(1f).clip().input(hoverable = true, clickable = true) + .onPress { state.expand(item.id) }, + ) { + key(item.id) { + val title = if (item.titleInToolbar) DockPanelTitle(item.title.lang, item.icon) else null + CompositionLocalProvider(LocalDockPanelTitle provides title) { + DockContentBody { content(item) } } } } - if (side == DockSide.LEFT) DockPanelSplitter(panel, side, state, open, sliding) } @Composable @@ -218,7 +367,7 @@ private fun DockPanelSplitter( ) } -private val DockSide.tag: String get() = if (this == DockSide.LEFT) "left" else "right" +internal val DockSide.tag: String get() = if (this == DockSide.LEFT) "left" else "right" private val DockSide.asideAlignment: UiPopupAlignment get() = if (this == DockSide.LEFT) { @@ -243,10 +392,16 @@ internal object DockLang { val PinLeft: String get() = "$Root.pin_left".lang val PinRight: String get() = "$Root.pin_right".lang + val PinLeftBottom: String get() = "$Root.pin_left_bottom".lang + val PinRightBottom: String get() = "$Root.pin_right_bottom".lang val Undock: String get() = "$Root.undock".lang val Close: String get() = "$Root.close".lang val HideStripes: String get() = "$Root.hide_stripes".lang val ShowStripes: String get() = "$Root.show_stripes".lang + val ParkHere: String get() = "$Root.park_here".lang fun pinTo(side: DockSide): String = if (side == DockSide.LEFT) PinLeft else PinRight + + fun moveTo(group: DockStripeGroup): String = + if (group == DockStripeGroup.TOP) "$Root.move_to_top".lang else "$Root.move_to_bottom".lang } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt index a3e04c412..7fd1a5150 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt @@ -41,20 +41,27 @@ fun DockSpace( modifier = modifier.style("hollowengine:ui/styles/docking.hss").clip(), ) { Row(id = "$id-body", modifier = Modifier.size(100.percent, 100.percent)) { - DockSideEdge(DockSide.LEFT, state, tabBarActions, content) - Box( - id = "$id-root", - mode = UiBoxMode.STACK, - tags = listOf(DockTags.Root), - modifier = Modifier.size(0.px, 100.percent).grow(1f), - ) { - state.root?.let { root -> - key(root.id) { - DockNodeView(root, state, tabContent, tabBarActions, content) + DockStripe(DockSide.LEFT, state) + Column(id = "$id-center", modifier = Modifier.size(0.px, 100.percent).grow(1f)) { + Row(id = "$id-upper", modifier = Modifier.size(100.percent, 0.px).grow(1f)) { + DockSidePanel(DockSide.LEFT, state, tabBarActions, content) + Box( + id = "$id-root", + mode = UiBoxMode.STACK, + tags = listOf(DockTags.Root), + modifier = Modifier.size(0.px, 100.percent).grow(1f), + ) { + state.root?.let { root -> + key(root.id) { + DockNodeView(root, state, tabContent, tabBarActions, content) + } + } } + DockSidePanel(DockSide.RIGHT, state, tabBarActions, content) } + DockBottomArea(state, tabBarActions, content) } - DockSideEdge(DockSide.RIGHT, state, tabBarActions, content) + DockStripe(DockSide.RIGHT, state) } state.floatingWindows.forEachIndexed { index, window -> @@ -64,7 +71,13 @@ fun DockSpace( } if (state.draggedWindowId != null) { - DockDropOverlay(state, state.edgeWidth(DockSide.LEFT), state.edgeWidth(DockSide.RIGHT)) + DockDropOverlay( + state, + state.edgeWidth(DockSide.LEFT), + state.edgeWidth(DockSide.RIGHT), + state.bottomAreaHeight(), + ) + if (state.canPinDraggedWindow()) DockStripeDropZones(state) } } } @@ -423,6 +436,8 @@ private fun DockTab( private fun tabMenuItems(item: DockItem, state: DockingState): List = buildList { add(UiDropdownItem(label = DockLang.PinLeft) { state.pin(item.id, DockSide.LEFT) }) add(UiDropdownItem(label = DockLang.PinRight) { state.pin(item.id, DockSide.RIGHT) }) + add(UiDropdownItem(label = DockLang.PinLeftBottom) { state.pin(item.id, DockSide.LEFT, DockStripeGroup.BOTTOM) }) + add(UiDropdownItem(label = DockLang.PinRightBottom) { state.pin(item.id, DockSide.RIGHT, DockStripeGroup.BOTTOM) }) if (item.closable) { add(UiDropdownItem(label = DockLang.Close, separatorBefore = true) { state.close(item.id) }) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt index 55b9ff01c..bc56f0444 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt @@ -1,8 +1,12 @@ package ru.hollowhorizon.hollowengine.client.ui.docking import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover @Composable internal fun FloatingResizeHandle(window: FloatingDockWindow, state: DockingState) { @@ -30,12 +34,12 @@ internal fun FloatingResizeHandle(window: FloatingDockWindow, state: DockingStat } @Composable -internal fun DockDropOverlay(state: DockingState, leftInset: Float = 0f, rightInset: Float = 0f) { +internal fun DockDropOverlay(state: DockingState, leftInset: Float = 0f, rightInset: Float = 0f, bottomInset: Float = 0f) { Box( id = "dock-drop-overlay", tags = listOf(DockTags.DropOverlay), modifier = Modifier.size(100.percent, 100.percent) - .padding(leftInset.px, 0.px, rightInset.px, 0.px) + .padding(leftInset.px, 0.px, rightInset.px, bottomInset.px) .layer(10_000) ) { val root = state.root @@ -203,3 +207,42 @@ private val DockResizeEdge.cursorShape: UiCursorShape DockResizeEdge.BOTTOM_LEFT, -> UiCursorShape.RESIZE_NESW } + +@Composable +internal fun DockStripeDropZones(state: DockingState) { + var hovered by remember { mutableStateOf(null) } + Box( + id = "dock-stripe-drop-zones", + mode = UiBoxMode.STACK, + modifier = Modifier.size(100.percent, 100.percent).layer(10_001).inputTransparent(), + ) { + DockAnchor.all.forEach { anchor -> + val active = hovered == anchor + val horizontal = if (anchor.side == DockSide.LEFT) UiAlign.START else UiAlign.END + val vertical = if (anchor.group == DockStripeGroup.TOP) UiAlign.START else UiAlign.END + Box( + id = "dock-stripe-drop-${anchor.side.tag}-${anchor.group.name.lowercase()}", + tags = listOf(DockTags.DropZone), + modifier = Modifier.size(StripeDropWidth.px, 48.percent) + .align(horizontal, vertical) + .background(if (active) DockColors.DropZoneActive else DockColors.DropZone) + .border(1.px, if (active) DockColors.DropZoneBorderActive else DockColors.DropZoneBorder) + .input(hoverable = true, clickable = true) + .tooltipOnHover(DockLang.ParkHere) + .onHover { hovered = anchor } + .onExit { if (hovered == anchor) hovered = null } + .onRelease { event -> + state.pinDraggedWindow(anchor) + event.consume() + }, + ) + } + } +} + +private const val StripeDropWidth = 28f + +internal fun DockingState.bottomAreaHeight(): Float { + val open = DockSide.entries.any { side -> expandedIn(DockAnchor(side, DockStripeGroup.BOTTOM)) != null } + return if (open) bottomHeight + PanelSplitterWidth else 0f +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt new file mode 100644 index 000000000..054dd75bb --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt @@ -0,0 +1,208 @@ +package ru.hollowhorizon.hollowengine.client.ui.docking + +private const val MinPinnedWidth = 60f +private const val MaxPinnedWidth = 900f +private const val MinBottomHeight = 60f +private const val MaxBottomHeight = 900f +private const val MinBottomFraction = 0.15f +private const val MaxBottomFraction = 0.85f + +/** The stripe buttons on [side], in the order they are drawn. */ +fun DockingState.pinnedOn(side: DockSide): List = + DockStripeGroup.entries.flatMap { group -> pinnedIn(DockAnchor(side, group)) } + +fun DockingState.pinnedIn(anchor: DockAnchor): List = pinnedItems.filter { it.anchor == anchor } + +/** The window open in [anchor], or null while that half is collapsed. */ +fun DockingState.expandedIn(anchor: DockAnchor): DockPinnedItem? { + val itemId = expandedByAnchor[anchor] ?: return null + return pinnedItems.firstOrNull { it.item.id == itemId && it.anchor == anchor } +} + +/** The side panel of [side]: the window open in the top half of its stripe. */ +fun DockingState.expandedOn(side: DockSide): DockPinnedItem? = expandedIn(DockAnchor(side)) + +fun DockingState.pinnedItem(itemId: String): DockPinnedItem? = pinnedItems.firstOrNull { it.item.id == itemId } + +fun DockingState.isPinned(itemId: String): Boolean = pinnedItem(itemId) != null + +/** + * Parks a tool window on a stripe and opens it there. + */ +fun DockingState.pin(itemId: String, side: DockSide, group: DockStripeGroup = DockStripeGroup.TOP): Boolean { + val anchor = DockAnchor(side, group) + if (isPinned(itemId)) { + movePinned(itemId, anchor, pinnedIn(anchor).size) + return expand(itemId) + } + + val item = item(itemId) ?: return false + if (!item.pinnable) return false + removeItemForDock(itemId) ?: return false + pinnedItems += DockPinnedItem(item, side, DefaultPinnedWidth.coerceAtLeast(item.minWidth), group) + stripesVisible = true + return expand(itemId) +} + +/** + * Moves a parked window to [index] among the buttons of [anchor]. + */ +fun DockingState.movePinned(itemId: String, anchor: DockAnchor, index: Int): Boolean { + val current = pinnedItem(itemId) ?: return false + val wasOpen = expandedByAnchor[current.anchor] == itemId + val others = pinnedItems.filterNot { it.item.id == itemId } + val moved = current.copy(side = anchor.side, group = anchor.group) + + val before = others.filter { it.anchor == anchor }.getOrNull(index.coerceAtLeast(0)) + val position = before?.let { others.indexOf(it) } ?: run { + val lastOfAnchor = others.indexOfLast { it.anchor == anchor } + if (lastOfAnchor >= 0) lastOfAnchor + 1 else others.size + } + val next = others.toMutableList().apply { add(position, moved) } + if (next == pinnedItems.toList()) return false + + pinnedItems.clear() + pinnedItems += next + if (wasOpen && current.anchor != anchor) { + expandedByAnchor.remove(current.anchor) + expandedByAnchor[anchor] = itemId + } + return true +} + +/** Takes a pinned item off its stripe and docks it back into the tree at [target]. */ +fun DockingState.unpin(itemId: String, target: DockTarget = DockTarget.Root): Boolean { + val pinned = takeOffStripe(itemId) ?: return false + open(pinned.item, target) + return true +} + +/** + * Takes a pinned item off its stripe into a floating window that is being dragged. + */ +fun DockingState.undockPinned(itemId: String, x: Float, y: Float, dragKey: String): DockWindowDragStart? { + val pinned = takeOffStripe(itemId) ?: return null + val item = pinned.item + val stack = newStack(listOf(item), item.id) ?: return null + val window = newWindow( + stack, + x, + y, + pinned.width.coerceAtLeast(item.minWidth), + FloatingHeight.coerceAtLeast(item.minHeight), + ).copy(dragKey = dragKey) + floatingWindows += window + startDraggingWindow(window.id) + focus(item.id) + return DockWindowDragStart(window.id, created = true) +} + +/** Whether the window being dragged could be parked on a stripe. */ +fun DockingState.canPinDraggedWindow(): Boolean { + val window = floatingWindows.firstOrNull { it.id == draggedWindowId } ?: return false + return window.stack.items.all { it.pinnable } +} + +/** Parks every window of the dragged floating window in [anchor], and opens the one on show. */ +fun DockingState.pinDraggedWindow(anchor: DockAnchor): Boolean { + val index = floatingWindows.indexOfFirst { it.id == draggedWindowId } + if (index < 0 || !canPinDraggedWindow()) { + finishDraggingWindow() + return false + } + val window = floatingWindows.removeAt(index) + window.stack.items.forEach { item -> + pinnedItems += DockPinnedItem(item, anchor.side, window.width.coerceAtLeast(item.minWidth), anchor.group) + } + stripesVisible = true + finishDraggingWindow() + return expand(window.stack.selectedItem?.id ?: window.stack.items.first().id) +} + +private fun DockingState.takeOffStripe(itemId: String): DockPinnedItem? { + val index = pinnedItems.indexOfFirst { it.item.id == itemId } + if (index < 0) return null + val pinned = pinnedItems.removeAt(index) + if (expandedByAnchor[pinned.anchor] == itemId) expandedByAnchor.remove(pinned.anchor) + return pinned +} + +/** Opens a pinned item's panel, collapsing whatever its half of the stripe had open. */ +fun DockingState.expand(itemId: String): Boolean { + val pinned = pinnedItem(itemId) ?: return false + expandedByAnchor[pinned.anchor] = itemId + focusedItemId = itemId + return true +} + +/** Collapses [anchor] back to its bare buttons. */ +fun DockingState.collapse(anchor: DockAnchor) { + val itemId = expandedByAnchor.remove(anchor) ?: return + if (focusedItemId == itemId) focusedItemId = firstItemId() +} + +/** Is the current panel visible regardless of its mode. */ +fun DockingState.isOnScreen(itemId: String): Boolean { + val pinned = pinnedItem(itemId) ?: return contains(itemId) + return expandedByAnchor[pinned.anchor] == itemId +} + +/** Turns a window off, or back on, wherever it lives. */ +fun DockingState.toggleOnScreen(itemId: String): Boolean { + if (isPinned(itemId)) return togglePinned(itemId) + if (!contains(itemId)) return false + return close(itemId) +} + +/** Opens that panel, or closes it if it was already open. */ +fun DockingState.togglePinned(itemId: String): Boolean { + val pinned = pinnedItem(itemId) ?: return false + if (expandedByAnchor[pinned.anchor] == itemId) { + collapse(pinned.anchor) + return true + } + return expand(itemId) +} + +/** Remembers the width the user dragged a side panel to. */ +fun DockingState.setPinnedWidth(itemId: String, width: Float): Boolean { + val index = pinnedItems.indexOfFirst { it.item.id == itemId } + if (index < 0) return false + val pinned = pinnedItems[index] + val next = width.coerceIn(pinned.item.minWidth.coerceAtLeast(MinPinnedWidth), MaxPinnedWidth) + if (next == pinned.width) return false + pinnedItems[index] = pinned.copy(width = next) + return true +} + +fun DockingState.setBottomHeight(height: Float) { + bottomHeight = height.coerceIn(MinBottomHeight, MaxBottomHeight) +} + +fun DockingState.setBottomFraction(fraction: Float) { + bottomFraction = fraction.coerceIn(MinBottomFraction, MaxBottomFraction) +} + +/** Restores the stripes from a stored layout, dropping items the tree already holds. */ +fun DockingState.applyPinned( + items: List, + expanded: Map, + visible: Boolean = true, + bottomHeight: Float = DefaultBottomHeight, + bottomFraction: Float = 0.5f, +) { + pinnedItems.clear() + pinnedItems += items.filterNot { contains(it.item.id) } + expandedByAnchor.clear() + expanded.forEach { (anchor, itemId) -> + if (pinnedItems.any { it.item.id == itemId && it.anchor == anchor }) expandedByAnchor[anchor] = itemId + } + stripesVisible = visible + setBottomHeight(bottomHeight) + setBottomFraction(bottomFraction) +} + +/** Which item each half has open, for storing the layout. */ +fun DockingState.expandedPinned(): Map = expandedByAnchor.toMap() + +private const val FloatingHeight = 220f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt index 4bafe402f..1bffb3a8f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt @@ -5,8 +5,6 @@ import ru.hollowhorizon.hollowengine.client.ui.UiEvent private const val MinSplitFraction = 0.1f private const val MaxSplitFraction = 0.9f -private const val MinPinnedWidth = 60f -private const val MaxPinnedWidth = 900f class DockingState { private val ids = DockIdGenerator() @@ -19,7 +17,7 @@ class DockingState { val floatingWindows = mutableStateListOf() var focusedItemId: String? by mutableStateOf(null) - private set + internal set var draggedWindowId: String? by mutableStateOf(null) private set @@ -33,12 +31,20 @@ class DockingState { /** Tool windows parked on the side stripes, in the order their buttons appear. */ val pinnedItems = mutableStateListOf() - /** The item each side currently has expanded into a panel, by side. */ - private val expandedBySide = mutableStateMapOf() + /** The item each stripe half currently has open, by where it is parked. */ + internal val expandedByAnchor = mutableStateMapOf() /** Whether the stripes are drawn at all. Hidden, the editor runs edge to edge. */ var stripesVisible: Boolean by mutableStateOf(true) + /** Height of the area under the editor and the side panels that the bottom halves open into. */ + var bottomHeight: Float by mutableStateOf(DefaultBottomHeight) + internal set + + /** How much of the bottom area the left stripe's window takes when both bottom halves are open. */ + var bottomFraction: Float by mutableStateOf(0.5f) + internal set + private var tabGrab: DockTabGrabState? by mutableStateOf(null) private val tabSwapOffsets = mutableStateMapOf() private var tabSwapRevision = 0L @@ -101,7 +107,7 @@ class DockingState { floatingWindows.clear() floatingWindows += floating pinnedItems.clear() - expandedBySide.clear() + expandedByAnchor.clear() focusedItemId = focused?.takeIf(::contains) ?: firstItemId() focusedItemId?.let { this.root = this.root?.select(it) } } @@ -110,7 +116,7 @@ class DockingState { val pinnedIndex = pinnedItems.indexOfFirst { it.item.id == itemId } if (pinnedIndex >= 0) { val pinned = pinnedItems.removeAt(pinnedIndex) - if (expandedBySide[pinned.side] == itemId) expandedBySide.remove(pinned.side) + if (expandedByAnchor[pinned.anchor] == itemId) expandedByAnchor.remove(pinned.anchor) if (focusedItemId == itemId) focusedItemId = firstItemId() return true } @@ -158,6 +164,9 @@ class DockingState { } fun focusContent(contentNodeId: String): Boolean { + if (contentNodeId.startsWith(PinnedContentPrefix)) { + return expand(contentNodeId.removePrefix(PinnedContentPrefix).removeSuffix("-content")) + } val containerId = contentNodeId.removeSuffix("-content") val stack = findStack(containerId) ?: floatingWindows.firstOrNull { it.id == containerId }?.stack @@ -176,115 +185,6 @@ class DockingState { focusedItemId = null } - /** The stripe buttons on [side], in the order they are drawn. */ - fun pinnedOn(side: DockSide): List = pinnedItems.filter { it.side == side } - - /** The item [side] currently has expanded into a panel, or null while the side is collapsed. */ - fun expandedOn(side: DockSide): DockPinnedItem? { - val itemId = expandedBySide[side] ?: return null - return pinnedItems.firstOrNull { it.item.id == itemId && it.side == side } - } - - fun pinnedItem(itemId: String): DockPinnedItem? = pinnedItems.firstOrNull { it.item.id == itemId } - - fun isPinned(itemId: String): Boolean = pinnedItem(itemId) != null - - /** - * Parks a tool window on [side]'s stripe and expands it there. An item already on a stripe just - * moves to the other side, keeping the width it had. - */ - fun pin(itemId: String, side: DockSide): Boolean { - val index = pinnedItems.indexOfFirst { it.item.id == itemId } - if (index >= 0) { - val current = pinnedItems[index] - if (current.side == side) return expand(itemId) - if (expandedBySide[current.side] == itemId) expandedBySide.remove(current.side) - pinnedItems[index] = current.copy(side = side) - return expand(itemId) - } - - val item = item(itemId) ?: return false - if (!item.pinnable) return false - removeItemForDock(itemId) ?: return false - pinnedItems += DockPinnedItem(item, side, DefaultPinnedWidth.coerceAtLeast(item.minWidth)) - stripesVisible = true - return expand(itemId) - } - - /** Takes a pinned item off its stripe and docks it back into the tree at [target]. */ - fun unpin(itemId: String, target: DockTarget = DockTarget.Root): Boolean { - val index = pinnedItems.indexOfFirst { it.item.id == itemId } - if (index < 0) return false - val pinned = pinnedItems.removeAt(index) - if (expandedBySide[pinned.side] == itemId) expandedBySide.remove(pinned.side) - open(pinned.item, target) - return true - } - - /** Expands a pinned item's panel, collapsing whatever its side had open. */ - fun expand(itemId: String): Boolean { - val pinned = pinnedItem(itemId) ?: return false - expandedBySide[pinned.side] = itemId - focusedItemId = itemId - return true - } - - /** Collapses [side] back to its bare stripe. */ - fun collapse(side: DockSide) { - val itemId = expandedBySide.remove(side) ?: return - if (focusedItemId == itemId) focusedItemId = firstItemId() - } - - /** Whether the window is actually in front of the player: docked, floating, or an open panel. */ - fun isOnScreen(itemId: String): Boolean { - val pinned = pinnedItem(itemId) ?: return contains(itemId) - return expandedBySide[pinned.side] == itemId - } - - /** - * Turns a window off, or back on, wherever it lives. - */ - fun toggleOnScreen(itemId: String): Boolean { - if (isPinned(itemId)) return togglePinned(itemId) - if (!contains(itemId)) return false - return close(itemId) - } - - /** What a click on a stripe button does: opens that panel, or closes it if it was already open. */ - fun togglePinned(itemId: String): Boolean { - val pinned = pinnedItem(itemId) ?: return false - if (expandedBySide[pinned.side] == itemId) { - collapse(pinned.side) - return true - } - return expand(itemId) - } - - /** Remembers the width the player dragged a pinned panel to. */ - fun setPinnedWidth(itemId: String, width: Float): Boolean { - val index = pinnedItems.indexOfFirst { it.item.id == itemId } - if (index < 0) return false - val pinned = pinnedItems[index] - val next = width.coerceIn(pinned.item.minWidth.coerceAtLeast(MinPinnedWidth), MaxPinnedWidth) - if (next == pinned.width) return false - pinnedItems[index] = pinned.copy(width = next) - return true - } - - /** Restores the stripes from a stored layout, dropping items the tree already holds. */ - fun applyPinned(items: List, expanded: Map, visible: Boolean = true) { - pinnedItems.clear() - pinnedItems += items.filterNot { contains(it.item.id) } - expandedBySide.clear() - expanded.forEach { (side, itemId) -> - if (pinnedItems.any { it.item.id == itemId && it.side == side }) expandedBySide[side] = itemId - } - stripesVisible = visible - } - - /** Which item each side has expanded, for storing the layout. */ - fun expandedPinned(): Map = expandedBySide.toMap() - fun dock(itemId: String, target: DockTarget): Boolean { val removal = removeItemForDock(itemId) ?: return false val node = DockNode.Stack(ids.nextStackId(), listOf(removal), removal.id) @@ -576,7 +476,7 @@ class DockingState { return changed } - private fun removeItemForDock(itemId: String): DockItem? { + internal fun removeItemForDock(itemId: String): DockItem? { val dockedRemoval = root?.removeItem(itemId) if (dockedRemoval?.item != null) { root = dockedRemoval.root @@ -602,7 +502,7 @@ class DockingState { return item } - private fun firstItemId(): String? { + internal fun firstItemId(): String? { return root?.firstItemId() ?: floatingWindows.firstOrNull()?.stack?.items?.firstOrNull()?.id } @@ -800,3 +700,6 @@ private fun DockNode.mapStacks(transform: (DockNode.Stack) -> DockNode.Stack): D } internal fun tabNodeId(itemId: String): String = "dock-tab-$itemId" + +/** The start of the id of an open parked window's content, which the id of the window follows. */ +internal const val PinnedContentPrefix = "dock-pinned-" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt index d722dba75..b0837f036 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt @@ -4,6 +4,7 @@ import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeAnimatorDocume import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeImageDocument import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeRigDocument import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeSoundsDocument +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument internal const val SoundsFileName = "sounds.json" @@ -14,8 +15,18 @@ internal fun HollowIdeFileTypeRegistry.registerBuiltinFileTypes( soundsEditor: HollowIdeFileEditor, animatorEditor: HollowIdeFileEditor, rigEditor: HollowIdeFileEditor, + vfxEditor: HollowIdeFileEditor, textEditor: HollowIdeFileEditor, ) { + register( + HollowIdeFileType.extensions( + id = "vfx", + extensions = listOf(".vfx"), + priority = 280, + loader = { _, bytes -> HollowIdeVfxDocument(bytes) }, + editor = vfxEditor, + ), + ) register( HollowIdeFileType.extensions( id = "rig", diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt index c9f9f741a..8dfc4fbe2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt @@ -3,13 +3,18 @@ package ru.hollowhorizon.hollowengine.client.ui.ide import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import org.apache.logging.log4j.LogManager +import ru.hollowhorizon.hollowengine.client.ui.docking.DefaultBottomHeight import ru.hollowhorizon.hollowengine.client.ui.docking.DefaultPinnedWidth +import ru.hollowhorizon.hollowengine.client.ui.docking.DockAnchor import ru.hollowhorizon.hollowengine.client.ui.docking.DockItem import ru.hollowhorizon.hollowengine.client.ui.docking.DockNode import ru.hollowhorizon.hollowengine.client.ui.docking.DockOrientation import ru.hollowhorizon.hollowengine.client.ui.docking.DockPinnedItem import ru.hollowhorizon.hollowengine.client.ui.docking.DockSide +import ru.hollowhorizon.hollowengine.client.ui.docking.DockStripeGroup import ru.hollowhorizon.hollowengine.client.ui.docking.DockingState +import ru.hollowhorizon.hollowengine.client.ui.docking.applyPinned +import ru.hollowhorizon.hollowengine.client.ui.docking.expandedPinned import ru.hollowhorizon.hollowengine.common.config.Config import java.util.* import kotlin.io.path.createParentDirectories @@ -44,6 +49,7 @@ internal data class StoredPinnedItem( val id: String, val side: DockSide = DockSide.LEFT, val width: Float = DefaultPinnedWidth, + val group: DockStripeGroup = DockStripeGroup.TOP, val expanded: Boolean = false, ) @@ -55,6 +61,8 @@ internal data class StoredDockLayout( val focused: String? = null, val pinned: List = emptyList(), val stripesVisible: Boolean = true, + val bottomHeight: Float = DefaultBottomHeight, + val bottomFraction: Float = 0.5f, ) /** @@ -104,10 +112,13 @@ internal fun DockingState.capture(): StoredDockLayout { id = pinned.item.id, side = pinned.side, width = pinned.width, - expanded = expanded[pinned.side] == pinned.item.id, + expanded = expanded[pinned.anchor] == pinned.item.id, + group = pinned.group, ) }, stripesVisible = stripesVisible, + bottomHeight = bottomHeight, + bottomFraction = bottomFraction, ) } @@ -129,14 +140,16 @@ internal fun DockingState.restore(layout: StoredDockLayout, resolve: (String) -> } val pinned = layout.pinned.mapNotNull { stored -> val item = resolve(stored.id)?.takeIf { it.pinnable } ?: return@mapNotNull null - DockPinnedItem(item, stored.side, stored.width) + DockPinnedItem(item, stored.side, stored.width, stored.group) } if (root == null && floating.isEmpty() && pinned.isEmpty()) return false applyLayout(root, floating, layout.focused) applyPinned( items = pinned, - expanded = layout.pinned.filter { it.expanded }.associate { it.side to it.id }, + expanded = layout.pinned.filter { it.expanded }.associate { DockAnchor(it.side, it.group) to it.id }, visible = layout.stripesVisible, + bottomHeight = layout.bottomHeight, + bottomFraction = layout.bottomFraction, ) return true } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt index 2a4db9977..eba158a0a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt @@ -5,6 +5,8 @@ import ru.hollowhorizon.hollowengine.client.editor.GizmoEditMode import ru.hollowhorizon.hollowengine.client.editor.TransformGizmoEditor import ru.hollowhorizon.hollowengine.client.ui.docking.DockLang import ru.hollowhorizon.hollowengine.client.ui.docking.DockingState +import ru.hollowhorizon.hollowengine.client.ui.docking.isOnScreen +import ru.hollowhorizon.hollowengine.client.ui.docking.toggleOnScreen import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownMark import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownSlider diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt index 44bed6556..5c5862d71 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt @@ -14,9 +14,10 @@ import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeImageEditor import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeSoundsEditor import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.HollowIdeAnimatorEditor import ru.hollowhorizon.hollowengine.client.ui.ide.files.rig.RigEditorPanel +import ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx.VfxEditorPanel import ru.hollowhorizon.hollowengine.client.ui.ide.panels.* import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CutsceneEditorSessions -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.CutsceneTimelineDock +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.TimelineDock import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorLang import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorPanel import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorSelection @@ -62,7 +63,8 @@ internal const val AssetManagerId = "ide-asset-manager" internal const val ProjectFilterInputId = "ide-project-filter" internal const val ConsoleId = "ide-console" -internal const val CutsceneTimelineId = "ide-cutscene-timeline" +internal const val TimelineId = "ide-cutscene-timeline" +internal const val SceneId = "ide-scene" internal const val InspectorId = "ide-inspector" internal const val GameViewportId = "ide-game-viewport" internal const val GameViewportNodeId = "game-viewport" @@ -97,6 +99,7 @@ object HollowIdeOverlay { soundsEditor = { file -> HollowIdeSoundsEditor(file) }, animatorEditor = { file -> HollowIdeAnimatorEditor(file) }, rigEditor = { file -> RigEditorPanel(file) }, + vfxEditor = { file -> VfxEditorPanel(file) }, textEditor = { file -> FileEditor(file) }, ) registerAssetFileTypes( @@ -919,14 +922,14 @@ object HollowIdeOverlay { ) ConsoleId -> HollowIdeConsolePanel(console) - CutsceneTimelineId -> CutsceneTimelineDock( - session = CutsceneEditorSessions.default, - keyboardActive = dock.focusedItemId == CutsceneTimelineId, - ) + TimelineId -> TimelineDock(keyboardActive = dock.focusedItemId == TimelineId) + + SceneId -> SceneDock() InspectorId -> InspectorPanel( target = InspectorSelection.current, empty = InspectorLang.nothingSelected, + keepScroll = true, ) GameViewportId -> GameViewportDock( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt index 8e5e385af..b0c71fe29 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt @@ -29,6 +29,7 @@ internal class HollowIdeToolWindow( val minHeight: Float = 32f, val closable: Boolean = true, val singleTabPresentation: DockSingleTabPresentation = DockSingleTabPresentation.BAR, + val titleInToolbar: Boolean = false, ) { val title: String get() = titleKey.lang @@ -41,6 +42,7 @@ internal class HollowIdeToolWindow( minHeight = minHeight, singleTabPresentation = singleTabPresentation, pinnable = true, + titleInToolbar = titleInToolbar, ) } @@ -70,14 +72,24 @@ internal object HollowIdeToolWindows { minWidth = 180f, minHeight = 90f, ) - val CutsceneTimeline = HollowIdeToolWindow( - id = CutsceneTimelineId, - titleKey = "hollowengine.gui.ide.windows.cutscene_timeline", + val Timeline = HollowIdeToolWindow( + id = TimelineId, + titleKey = "hollowengine.gui.ide.windows.timeline", icon = CutsceneIcon, placement = DockPlacement.BOTTOM, anchors = listOf(ToolWindowAnchor.EDITORS, ToolWindowAnchor.PROJECT), minWidth = 260f, minHeight = 130f, + titleInToolbar = true, + ) + val Scene = HollowIdeToolWindow( + id = SceneId, + titleKey = "hollowengine.gui.ide.windows.scene", + icon = "hollowengine:textures/gui/icons/layers.svg", + placement = DockPlacement.LEFT, + anchors = listOf(ToolWindowAnchor.PROJECT, ToolWindowAnchor.EDITORS), + minWidth = 160f, + minHeight = 120f, ) val Inspector = HollowIdeToolWindow( id = InspectorId, @@ -109,14 +121,14 @@ internal object HollowIdeToolWindows { ) val menu: List = listOf( - Project, Inspector, AssetManager, Console, + Project, Scene, Inspector, AssetManager, Console, null, - CutsceneTimeline, GameViewport, + Timeline, GameViewport, ) /** Every window the editor knows how to open, for turning a remembered id back into one. */ val all: List = listOf( - Project, AssetManager, Console, CutsceneTimeline, Inspector, GameViewport, UiProfiler, + Project, Scene, AssetManager, Console, Timeline, Inspector, GameViewport, UiProfiler, ) fun byId(id: String): HollowIdeToolWindow? = all.firstOrNull { it.id == id } @@ -132,7 +144,7 @@ internal fun DockingState.openToolWindow(window: HollowIdeToolWindow, model: Hol when (anchor) { ToolWindowAnchor.EDITORS -> model.files.values.firstOrNull { contains(it.id) }?.id ToolWindowAnchor.PROJECT -> ProjectTreeId.takeIf(::contains) - ToolWindowAnchor.TIMELINE -> CutsceneTimelineId.takeIf(::contains) + ToolWindowAnchor.TIMELINE -> TimelineId.takeIf(::contains) } } open(window.dockItem(), DockTarget(anchor, window.placement)) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt new file mode 100644 index 000000000..0037ca5c0 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt @@ -0,0 +1,111 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide + +import androidx.compose.runtime.* +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorColors +import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorStylesheet +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeView +import ru.hollowhorizon.hollowengine.client.utils.lang + +/** + * A hierarchy, that scene window shows. + */ +class SceneTarget( + val id: String, + val title: String, + val items: List>, + /** `null` when the selection is dropped. */ + val onSelect: (String?) -> Unit, + val onToggle: (String) -> Unit, + /** What to say when the tree is empty. */ + val empty: String, + /** Buttons the owner wants above the tree, such as adding and removing. */ + val actions: HollowUiContent? = null, +) + +/** + * Whose hierarchy the scene window shows. Last publisher wins, like the inspector. + */ +object IdeScenes { + var current: SceneTarget? by mutableStateOf(null) + private set + + private var owner: String? = null + + fun publish(source: String, target: SceneTarget?) { + if (target == null) { + release(source) + return + } + owner = source + current = target + } + + fun release(source: String) { + if (owner != source) return + owner = null + current = null + } +} + +/** + * Keeps [target] in the scene window for as long as this editor is composed. + * + * Unlike the inspector, the tree itself changes as the file is edited, so [key] normally carries the + * revision of whatever is being shown. + */ +@Composable +fun PublishScene(source: String, key: Any?, target: () -> SceneTarget?) { + LaunchedEffect(source, key) { IdeScenes.publish(source, target()) } + DisposableEffect(source) { onDispose { IdeScenes.release(source) } } +} + +/** + * The scene window, hierarchy of whatever is open, or nothing. + */ +@Composable +internal fun SceneDock() { + val target = IdeScenes.current + + Column( + modifier = Modifier.size(100.percent, 100.percent).style(AnimatorStylesheet).background(AnimatorColors.Panel) + .padding(6.px).gap(4.px), + ) { + if (target == null) { + Text( + "hollowengine.gui.ide.windows.scene_empty".lang, + modifier = Modifier.fontSize(9f).foreground(AnimatorColors.Muted), + ) + return@Column + } + + Row(modifier = Modifier.size(100.percent).gap(4.px)) { + Text( + target.title, + modifier = Modifier.fontSize(10f).foreground(AnimatorColors.Muted).grow(1f), + ) + target.actions?.invoke() + } + + if (target.items.isEmpty()) { + Text(target.empty, modifier = Modifier.fontSize(9f).foreground(AnimatorColors.Muted)) + return@Column + } + + UiTreeView( + items = target.items, + onToggle = { item -> target.onToggle(item.id) }, + onSelect = { item, event -> target.onSelect(item.id.takeUnless { item.selected && event.isCtrlDown() }) }, + onBackgroundClick = { target.onSelect(null) }, + fillRowWidth = true, + modifier = Modifier.size(100.percent, 0.px).grow(1f).scrollable(horizontal = false) + .onKeyInput { input -> + if (input.key != GLFW.GLFW_KEY_ESCAPE || target.items.none { it.selected }) return@onKeyInput + target.onSelect(null) + input.consume() + } + ) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeVfxDocument.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeVfxDocument.kt new file mode 100644 index 000000000..515b93d10 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeVfxDocument.kt @@ -0,0 +1,153 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeFileDocument +import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect +import ru.hollowhorizon.hollowengine.common.vfx.VfxFormat + +/** + * An open `.vfx` file: one [VfxEffect] the editor rewrites whole. + */ +class HollowIdeVfxDocument(bytes: ByteArray) : HollowIdeFileDocument { + var effect by mutableStateOf(VfxEffect.EMPTY) + private set + + /** What went wrong reading the file, or null when it read fine. */ + var error by mutableStateOf(null) + private set + + private var original: String = "" + + override val readOnly: Boolean get() = error != null + + var isModified by mutableStateOf(false) + private set + + var revision by mutableStateOf(0) + private set + + private var editorState: Any? = null + + init { + load(bytes) + } + + @Suppress("UNCHECKED_CAST") + fun editorState(create: () -> T): T = (editorState as? T) ?: create().also { editorState = it } + + /** Effects to go back to, newest last; the timeline part is not in them, it has its own history. */ + private val undoStack = ArrayDeque() + private val redoStack = ArrayDeque() + + /** The effect as it was when a gesture started; the whole gesture becomes one step back. */ + private var gestureStart: VfxEffect? = null + private var lastMergeKey: String? = null + private var lastEditNanos = 0L + + var canUndo by mutableStateOf(false) + private set + var canRedo by mutableStateOf(false) + private set + + /** + * Replaces the effect with what [change] makes of it. + */ + fun edit(mergeKey: String? = null, history: Boolean = true, change: (VfxEffect) -> VfxEffect) { + if (readOnly) return + + val next = change(effect) + if (next == effect) return + + if (history && gestureStart == null) { + val now = System.nanoTime() + val merges = mergeKey != null && mergeKey == lastMergeKey && now - lastEditNanos < MERGE_WINDOW_NANOS + if (!merges) remember(effect) + lastMergeKey = mergeKey + lastEditNanos = now + } + apply(next) + } + + /** Starts a gesture, such as dragging a handle, that should go back in one step. */ + fun beginGesture() { + if (gestureStart == null) gestureStart = effect + } + + fun endGesture() { + val start = gestureStart ?: return + gestureStart = null + lastMergeKey = null + if (start != effect) remember(start) + } + + fun undo(): Boolean { + val previous = undoStack.removeLastOrNull() ?: return false + redoStack.addLast(effect) + lastMergeKey = null + apply(previous.copy(timeline = effect.timeline)) + return true + } + + fun redo(): Boolean { + val next = redoStack.removeLastOrNull() ?: return false + undoStack.addLast(effect) + lastMergeKey = null + apply(next.copy(timeline = effect.timeline)) + return true + } + + private fun remember(state: VfxEffect) { + undoStack.addLast(state) + while (undoStack.size > HISTORY_LIMIT) undoStack.removeFirst() + redoStack.clear() + refreshHistoryState() + } + + private fun apply(next: VfxEffect) { + effect = next + isModified = true + revision++ + refreshHistoryState() + } + + private fun refreshHistoryState() { + canUndo = undoStack.isNotEmpty() + canRedo = redoStack.isNotEmpty() + } + + override fun encode(): ByteArray = if (readOnly) original.toByteArray() else VfxFormat.write(effect).toByteArray() + + override fun reload(bytes: ByteArray) { + if (!readOnly && bytes.toString(Charsets.UTF_8) == VfxFormat.write(effect)) return + undoStack.clear() + redoStack.clear() + refreshHistoryState() + load(bytes) + isModified = false + revision++ + } + + override fun markSaved() { + isModified = false + } + + private fun load(bytes: ByteArray) { + original = bytes.toString(Charsets.UTF_8) + try { + effect = VfxFormat.read(original) + error = null + } catch (e: Exception) { + effect = VfxEffect.EMPTY + error = e.message ?: e::class.simpleName + HollowEngine.LOGGER.warn("Could not read effect: {}", error) + } + } + + private companion object { + const val HISTORY_LIMIT = 100 + const val MERGE_WINDOW_NANOS = 700_000_000L + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt index 86d8d448d..bf24d7aa2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt @@ -1,9 +1,6 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.animator import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.inspector.TextRow @@ -11,43 +8,6 @@ import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover internal const val AnimatorStylesheet = "hollowengine:ui/styles/animator-editor.hss" -/** - * A number that springs towards its target instead of jumping there. - */ -internal class SpringFloat(initial: Float) { - var value by mutableStateOf(initial) - private set - - var target: Float = initial - - private var velocity = 0f - private var lastFrame = 0L - - /** Puts the value there at once, for changes the pointer is already animating by hand. */ - fun snapTo(next: Float) { - target = next - value = next - velocity = 0f - } - - fun advance(frameNanos: Long) { - val previous = lastFrame - lastFrame = frameNanos - if (previous == 0L) return - - val delta = target - value - if (kotlin.math.abs(delta) < 0.05f && kotlin.math.abs(velocity) < 0.05f) { - value = target - velocity = 0f - return - } - - val dt = ((frameNanos - previous) / 1_000_000_000f).coerceIn(0f, 0.05f) - velocity += (delta * 300f - velocity * 32f) * dt - value += velocity * dt - } -} - @Composable internal fun AnimatorButton( label: String, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt new file mode 100644 index 000000000..a05ba727a --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt @@ -0,0 +1,270 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.* +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint +import ru.hollowhorizon.hollowengine.client.ui.widgets.ColorPicker +import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover +import ru.hollowhorizon.hollowengine.common.vfx.* + +/** + * Color property: color, gradient over time, or a value per channel. + */ +@Composable +fun VfxColorRow( + label: String, + value: VfxColorValue, + property: String? = null, + hint: String? = null, + onChange: (VfxColorValue) -> Unit, +) { + val focus = LocalVfxFieldFocus.current + val driven = property?.let { LocalVfxDriven.current(it) } + var open by remember { mutableStateOf(false) } + var anchor by remember { mutableStateOf(UiRect.Zero) } + val current = when (value) { + is VfxColorValue.Solid -> "solid" + is VfxColorValue.Gradient -> "gradient" + is VfxColorValue.Channels -> "channels" + } + + if (driven != null) { + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint) + val authored = value.constants() + val shown = VfxRgba( + if (driven.drives(0)) driven.value(0) else authored[0], + if (driven.drives(1)) driven.value(1) else authored[1], + if (driven.drives(2)) driven.value(2) else authored[2], + if (driven.drives(3)) driven.value(3) else authored[3], + ) + Box( + tags = listOf("vfx-driven"), + modifier = Modifier.size(0.px, CurveCellHeight.px).grow(1f).input(hoverable = true) + .cursor(UiCursorShape.NOT_ALLOWED).tooltipOnHover(vfxText("driven_hint")).drawBehind(key = shown) { + drawChecker(size.width, size.height) + drawRect(UiPaint.Color(shown.toUi()), radius = 3f) + }, + ) + InspectorIcon(KeyframeIcon, vfxText("driven_show")) { focus(property) } + } + return + } + + Column(modifier = Modifier.size(100.percent).gap(2.px)) { + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint) + if (value is VfxColorValue.Channels) { + Text( + vfxText("color_channels"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).fontSize(9f).foreground(HintTint), + ) + } else { + ColorPalette( + value, + modifier = Modifier.size(0.px, CurveCellHeight.px).grow(1f).onPlaced { anchor = it }, + ) { + open = !open + if (property != null) focus(property) + } + } + ColorKindPicker(current, onChange) + } + + if (value is VfxColorValue.Channels) { + VfxValueRow(" R", value.r, property, channel = 0) { onChange(value.copy(r = it)) } + VfxValueRow(" G", value.g, property, channel = 1) { onChange(value.copy(g = it)) } + VfxValueRow(" B", value.b, property, channel = 2) { onChange(value.copy(b = it)) } + VfxValueRow(" A", value.a, property, channel = 3) { onChange(value.copy(a = it)) } + } + } + + if (!open || value is VfxColorValue.Channels) return + Popup( + anchorBounds = anchor, + id = "vfx-color-popup", + tags = listOf("vfx-popup"), + onDismiss = { open = false }, + ) { + when (value) { + is VfxColorValue.Solid -> ColorPicker( + value = value.color.toUi(), + onValueChange = { onChange(VfxColorValue.Solid(it.toRgba())) }, + ) + + is VfxColorValue.Gradient -> GradientEditor(value, onChange) + is VfxColorValue.Channels -> Unit + } + } +} + +@Composable +private fun GradientEditor(value: VfxColorValue.Gradient, onChange: (VfxColorValue) -> Unit) { + var editing by remember { mutableStateOf(0) } + + Column(modifier = Modifier.size(220.px, UiLength.Fit).gap(4.px)) { + ColorPalette(value, modifier = Modifier.size(100.percent, 14.px)) {} + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxSourcePicker(value.source) { onChange(value.copy(source = it)) } + InspectorButton(vfxText("stop_add")) { + val last = value.gradient.stops.lastOrNull() + val position = ((last?.position ?: 0f) + 0.25f).coerceAtMost(1f) + val stops = value.gradient.stops + VfxGradientStop(position, last?.color ?: VfxRgba.WHITE) + onChange(value.copy(gradient = VfxGradient(stops.sortedBy { it.position }))) + } + } + value.gradient.stops.forEachIndexed { index, stop -> + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + Box( + id = "vfx-gradient-stop-$index", + modifier = Modifier.size(PaletteWidth.px, CurveCellHeight.px) + .input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) + .drawBehind(key = stop.color to (index == editing)) { + drawRect(UiPaint.Color(stop.color.toUi()), radius = 3f) + if (index == editing) { + drawRect(UiRect(0f, size.height - 2f, size.width, 2f), UiPaint.Color(Accent)) + } + }.onClick { event -> + editing = index + event.consume() + }, + ) + Text(vfxText("stop_at"), modifier = Modifier.fontSize(8f).foreground(HintTint)) + VfxNumberCellInline(stop.position) { position -> + onChange( + value.copy( + gradient = value.gradient.withStop( + index, stop.copy(position = position.coerceIn(0f, 1f)) + ) + ) + ) + } + InspectorIcon(RemoveIcon, vfxText("key_remove")) { + onChange(value.copy(gradient = value.gradient.withoutStop(index))) + } + } + } + value.gradient.stops.getOrNull(editing)?.let { stop -> + ColorPicker( + value = stop.color.toUi(), + onValueChange = { picked -> + onChange( + value.copy( + gradient = value.gradient.withStop( + editing, stop.copy(color = picked.toRgba()) + ) + ) + ) + }, + ) + } + } +} + +@Composable +private fun ColorPalette(value: VfxColorValue, modifier: Modifier, onClick: () -> Unit) { + Box( + modifier = modifier.input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) + .drawBehind(key = value) { + val width = size.width + val height = size.height + if (width <= 0f || height <= 0f) return@drawBehind + + drawChecker(width, height) + when (value) { + is VfxColorValue.Solid -> drawRect(UiPaint.Color(value.color.toUi()), radius = 3f) + + is VfxColorValue.Gradient -> { + val steps = 32 + val columnWidth = width / steps + for (step in 0 until steps) { + val stop = value.gradient.colorAt(step.toFloat() / (steps - 1)) + drawRect( + UiRect(step * columnWidth, 0f, maxOf(columnWidth, 1f), height), + UiPaint.Color(stop.toUi()), + ) + } + } + + is VfxColorValue.Channels -> drawRect(UiPaint.Color(CurveBackground)) + } + }.onClick { event -> + onClick() + event.consume() + }, + ) +} + +/** A checkerboard under a color, so its alpha can be seen. */ +private fun UiCanvasDrawScope.drawChecker(width: Float, height: Float) { + val cell = 4f + var y = 0f + var row = 0 + while (y < height) { + var x = 0f + var column = row + while (x < width) { + val color = if (column % 2 == 0) CheckerLight else CheckerDark + drawRect(UiRect(x, y, minOf(cell, width - x), minOf(cell, height - y)), UiPaint.Color(color)) + x += cell + column++ + } + y += cell + row++ + } +} + +@Composable +private fun ColorKindPicker(current: String, onChange: (VfxColorValue) -> Unit) { + var open by remember { mutableStateOf(false) } + var anchor by remember { mutableStateOf(UiRect.Zero) } + + Box(modifier = Modifier.onPlaced { anchor = it }) { + InspectorIcon(colorKindIcon(current), vfxText("color_$current")) { open = true } + } + if (!open) return + + ContextMenu( + id = "vfx-color-kind", + anchorBounds = anchor, + items = listOf("solid", "gradient", "channels").map { kind -> + UiDropdownItem(vfxText("color_$kind"), icon = colorKindIcon(kind), checked = kind == current) { + onChange( + when (kind) { + "solid" -> VfxColorValue.Solid() + "gradient" -> VfxColorValue.Gradient() + else -> VfxColorValue.Channels() + } + ) + } + }, + onExpandedChange = { if (!it) open = false }, + ) +} + +private fun colorKindIcon(kind: String): String = when (kind) { + "solid" -> "hollowengine:textures/gui/icons/types.svg" + "gradient" -> "hollowengine:textures/gui/icons/curve.svg" + else -> "hollowengine:textures/gui/icons/math.svg" +} + +private fun VfxGradient.withStop(index: Int, stop: VfxGradientStop): VfxGradient = + VfxGradient(stops.toMutableList().also { it[index] = stop }.sortedBy { it.position }) + +private fun VfxGradient.withoutStop(index: Int): VfxGradient = VfxGradient(stops.filterIndexed { at, _ -> at != index }) + +internal fun VfxRgba.toUi(): UiColor = UiColor(r, g, b, a) + +internal fun UiColor.toRgba(): VfxRgba = VfxRgba(red, green, blue, alpha) + +private const val PaletteWidth = 26f +private const val RemoveIcon = "hollowengine:textures/gui/icons/remove.svg" +private const val KeyframeIcon = "hollowengine:textures/gui/icons/keyframe.svg" + +private val Accent = UiColor(0.84f, 0.5f, 0.11f, 1f) +private val CheckerLight = UiColor(0.32f, 0.33f, 0.36f, 1f) +private val CheckerDark = UiColor(0.2f, 0.21f, 0.23f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt new file mode 100644 index 000000000..f6e3f6a7a --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt @@ -0,0 +1,117 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.* +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimProperty +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.FloatPropertyType +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineController +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.EmbeddedTimelineEditor +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.TimelineFeatures +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton +import ru.hollowhorizon.hollowengine.common.vfx.VfxCurve +import ru.hollowhorizon.hollowengine.common.vfx.VfxTimeSource +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue + +/** + * The curve of a value in graph editor. + */ +@Composable +internal fun VfxCurveDialog(value: VfxValue.OverTime, onChange: (VfxValue) -> Unit, onClose: () -> Unit) { + var current by remember { mutableStateOf(value) } + val controller = remember { curveController(value) } + + fun publish(next: VfxValue.OverTime) { + current = next + onChange(next) + } + + fun preset(curve: VfxCurve) { + controller.replaceKeys(curve) + publish(current.copy(curve = curve)) + } + + Popup( + anchorBounds = LocalUiViewport.current, + alignment = Centered, + id = "vfx-curve-dialog", + tags = listOf("vfx-popup", "vfx-curve-dialog"), + layer = 100, + modal = true, + onDismiss = onClose, + ) { + Column(modifier = Modifier.size(DialogWidth.px, DialogHeight.px).gap(6.px)) { + Row(modifier = Modifier.size(100.percent).gap(4.px).alignItems(vertical = UiAlign.CENTER)) { + Text(vfxText("curve_title"), tags = listOf("insp-title"), modifier = Modifier.grow(1f).fontSize(10f)) + InspectorButton(vfxText("curve_fade_out")) { preset(VfxCurve.ramp(1f, 0f)) } + InspectorButton(vfxText("curve_fade_in")) { preset(VfxCurve.ramp(0f, 1f)) } + InspectorButton(vfxText("curve_flat")) { preset(VfxCurve.flat(1f)) } + VfxFieldLabel(vfxText("curve_scale"), width = 58f) + Row(modifier = Modifier.size(56.px)) { + VfxNumberCellInline(current.scale) { publish(current.copy(scale = it)) } + } + VfxSourcePicker(current.source) { source -> + controller.workAreaEnd = domainOf(source, current.curve) + publish(current.copy(source = source)) + } + InspectorIcon(CloseIcon, vfxText("close")) { onClose() } + } + EmbeddedTimelineEditor( + controller = controller, + onChanged = { publish(current.copy(curve = controller.readCurve())) }, + features = CurveFeatures, + modifier = Modifier.size(100.percent, 0.px).grow(1f), + ) + } + } +} + +private fun curveController(value: VfxValue.OverTime): TimelineController { + val controller = TimelineController() + val name = vfxText("kind_curve") + val property = AnimProperty(CurvePropertyId, name, FloatPropertyType(name), value.curve.valueAt(0f, 1f)) + controller.addProperty(listOf(name), property) + controller.replaceKeys(value.curve) + controller.workAreaEnd = domainOf(value.source, value.curve) + controller.headerWidth = HeaderWidth + controller.pixelsPerSecond = (GraphWidth / controller.workAreaEnd).coerceIn(10f, 500f) + controller.enterCurveView() + controller.frameCurves() + return controller +} + +private fun domainOf(source: VfxTimeSource, curve: VfxCurve): Float = + if (source == VfxTimeSource.LIFETIME) 1f else (curve.keys.maxOfOrNull { it.time } ?: 1f).coerceAtLeast(1f) + +private fun TimelineController.curve() = allProperties().single().curves.single() + +private fun TimelineController.replaceKeys(curve: VfxCurve) { + val target = curve() + target.keyframes.clear() + curve.keys.forEach { key -> target.keyframes.add(key.toEditor()) } + target.sort() + clearSelection() + frameCurves() +} + +private fun TimelineController.readCurve(): VfxCurve { + val target = curve() + return VfxCurve(target.keyframes.map { key -> key.toStored(target) }) +} + +private val Centered = UiPopupAlignment( + anchorHorizontal = UiAlign.CENTER, + anchorVertical = UiAlign.CENTER, + popupHorizontal = UiAlign.CENTER, + popupVertical = UiAlign.CENTER, +) + +private val CurveFeatures = TimelineFeatures(capture = false, storage = false, cameraPreview = false, playback = false) + +private const val CurvePropertyId = "vfx-curve" +private const val DialogWidth = 780f +private const val DialogHeight = 440f +private const val HeaderWidth = 150f + +private const val GraphWidth = DialogWidth - HeaderWidth - 220f - 80f + +private const val CloseIcon = "hollowengine:textures/gui/icons/cross.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt new file mode 100644 index 000000000..8b39665c6 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt @@ -0,0 +1,37 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables + +/** + * What the timeline holds for the properties of [nodeId], as the preview plays it. + */ +internal fun vfxDrivenLookup( + document: HollowIdeVfxDocument, + preview: VfxPreviewState, + nodeId: String, +): (String) -> VfxDrivenValue? = lookup@{ property -> + val track = document.effect.timeline.track(nodeId, property) ?: return@lookup null + val channels = track.curves.filter { it.visible && it.keys.isNotEmpty() }.map { it.channel }.toSet() + if (channels.isEmpty()) return@lookup null + + preview.time + preview.revision + VfxDrivenValue(currentValues(preview.instance?.node(nodeId), property), channels) +} + +/** The values the running node has for [property] this frame. */ +private fun currentValues(node: VfxNodeRuntime?, property: String): FloatArray { + if (node == null) return FloatArray(4) + return when (property) { + VfxAnimatables.POSITION -> node.transform.position.asArray() + VfxAnimatables.ROTATION -> node.transform.rotation.asArray() + VfxAnimatables.SCALE -> node.transform.scale.asArray() + VfxAnimatables.ENABLED -> floatArrayOf(if (node.enabled) 1f else 0f) + else -> node.drive(property)?.values?.copyOf() ?: FloatArray(4) + } +} + +private fun Vec3f.asArray() = floatArrayOf(x, y, z) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt new file mode 100644 index 000000000..b718d5b3b --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt @@ -0,0 +1,375 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.* +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeOpenFile +import ru.hollowhorizon.hollowengine.client.ui.ide.PublishScene +import ru.hollowhorizon.hollowengine.client.ui.ide.SceneTarget +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorColors +import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorIconButton +import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorStylesheet +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.PublishTimeline +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.TimelineTarget +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.hasInspectableSelection +import ru.hollowhorizon.hollowengine.client.ui.inspector.PublishInspector +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.shape.GenericShape +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint +import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiKeyInput +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeTypes +import kotlin.time.Duration.Companion.milliseconds + +private const val AutoSaveDelayMillis = 900L + +private const val PlayIcon = "hollowengine:textures/gui/icons/play.svg" +private const val PauseIcon = "hollowengine:textures/gui/icons/pause.svg" +private const val RestartIcon = "hollowengine:textures/gui/icons/reload.svg" +private const val FloorIcon = "hollowengine:textures/gui/icons/layers.svg" +private const val ShapeIcon = "hollowengine:textures/gui/icons/box.svg" +private const val AddIcon = "hollowengine:textures/gui/icons/add.svg" +private const val RemoveIcon = "hollowengine:textures/gui/icons/remove.svg" + +/** + * The editor for a `.vfx` file. + * + * The hierarchy goes to the [ru.hollowhorizon.hollowengine.client.ui.ide.SceneDock], curves to the timeline window and the fields to the + * inspector. + */ +@Composable +internal fun VfxEditorPanel(file: HollowIdeOpenFile) { + val document = file.document as HollowIdeVfxDocument + val state = remember(document) { document.editorState { VfxEditorState(document) } } + val session = state.session + + LaunchedEffect(document.revision) { + file.updateDirty(document.isModified) + session.sync() + if (!document.isModified) return@LaunchedEffect + delay(AutoSaveDelayMillis.milliseconds) + if (document.isModified) file.save() + } + + LaunchedEffect(document) { + while (isActive) { + withFrameNanos { frameNanos -> + state.preview.advanceCamera(frameNanos) + val rebuilt = state.preview.sync(document.effect, file.path) + val sought = state.preview.applyPendingSeek() + val delta = state.preview.deltaSinceLastFrame() + if (session.timeline.isPlaying && delta > 0f) state.preview.advanceBy(delta) + if (rebuilt || session.timeline.isPlaying && !sought) { + session.timeline.followPlayhead(state.preview.time) + } + } + } + } + + val selected = state.selected?.takeIf { document.effect.node(it) != null } + + val timelineHasSelection = session.timeline.hasInspectableSelection() + PublishInspector(source = "vfx-${file.path}", key = selected to timelineHasSelection) { + when { + timelineHasSelection -> null + selected != null -> vfxNodeInspector(document, state, selected) + else -> vfxEffectInspector(document, state) + } + } + + PublishScene( + source = "vfx-${file.path}", + key = Triple(document.revision, state.selected, state.expanded.toList()), + ) { + sceneTarget(document, state) + } + + PublishTimeline(source = "vfx-${file.path}", key = file.path) { + TimelineTarget( + id = "vfx-${file.path}", + controller = session.timeline, + refresh = { + session.commit() + session.applyListing() + }, + ) + } + + Column( + modifier = Modifier.size(100.percent, 100.percent).style(AnimatorStylesheet).background(AnimatorColors.Canvas) + .focusScope(), + ) { + document.error?.let { message -> + Text( + vfxText("broken_file") + " " + message, + modifier = Modifier.size(100.percent).padding(6.px).fontSize(10f).foreground(AnimatorColors.Muted), + ) + } + + Box(mode = UiBoxMode.STACK, modifier = Modifier.size(100.percent, 0.px).grow(1f)) { + Viewport(document, state, selected) + Toolbar(state) + ParticleCounter(state.preview) + } + } +} + +@Composable +private fun Toolbar(state: VfxEditorState) { + val timeline = state.session.timeline + val preview = state.preview + Column(modifier = Modifier.position(8.px, 8.px).gap(4.px)) { + AnimatorIconButton( + icon = if (timeline.isPlaying) PauseIcon else PlayIcon, + tooltip = vfxText(if (timeline.isPlaying) "pause" else "play"), + active = timeline.isPlaying, + ) { timeline.isPlaying = !timeline.isPlaying } + AnimatorIconButton(RestartIcon, vfxText("restart")) { + preview.restart() + timeline.followPlayhead(0f) + } + AnimatorIconButton(FloorIcon, vfxText("toggle_floor"), active = preview.showFloor) { + preview.showFloor = !preview.showFloor + } + AnimatorIconButton(ShapeIcon, vfxText("toggle_shape"), active = preview.showShape) { + preview.showShape = !preview.showShape + } + } +} + +/** What editor is looking at, as opposed to what it is editing. */ +internal class VfxEditorState(document: HollowIdeVfxDocument) { + val preview = VfxPreviewState() + val session = VfxTimelineSession(document, preview).also { it.timeline.isPlaying = true } + + var selected by mutableStateOf(null) + private set + val expanded = mutableStateListOf() + + /** Which inspector sections are open, kept here so they survive switching between nodes. */ + private val sections = mutableStateMapOf() + + /** Where the add-node menu opens from, once scene window has laid its button out. */ + var addAnchor by mutableStateOf(UiRect.Zero) + var addMenuOpen by mutableStateOf(false) + + /** The gizmo handle being dragged, with node as it was when drag started. */ + var drag: VfxGizmoHandle? = null + + /** What dragged handle is set to right now, drawn beside it. */ + var readout by mutableStateOf(null) + + fun isSectionOpen(key: String, default: Boolean): Boolean = sections[key] ?: default + + fun toggleSection(key: String, default: Boolean) { + sections[key] = !(sections[key] ?: default) + } + + fun select(id: String?) { + selected = id + id?.let(session::touch) + session.timeline.clearSelection() + } + + fun focusProperty(nodeId: String, property: String) = session.focus(nodeId, property) +} + +/** The node tree, as shared scene window shows it. */ +private fun sceneTarget(document: HollowIdeVfxDocument, state: VfxEditorState) = SceneTarget( + id = "vfx-nodes", + title = vfxText("nodes"), + items = buildList { appendNodes(document.effect.nodes, state.expanded, state.selected) }, + onSelect = { id -> state.select(id) }, + onToggle = { id -> if (id in state.expanded) state.expanded.remove(id) else state.expanded.add(id) }, + empty = vfxText("no_nodes"), +) { + SceneActions(document, state) +} + +@Composable +private fun SceneActions(document: HollowIdeVfxDocument, state: VfxEditorState) { + Row(modifier = Modifier.gap(2.px)) { + Box(modifier = Modifier.onPlaced { state.addAnchor = it }) { + AnimatorIconButton(AddIcon, vfxText("add_node")) { state.addMenuOpen = true } + } + if (state.selected != null) { + AnimatorIconButton(RemoveIcon, vfxText("remove_node")) { + state.selected?.let { id -> + document.edit { it.withoutNode(id) } + state.select(null) + } + } + } + } + + if (state.addMenuOpen) { + ContextMenu( + id = "vfx-add-node", + anchorBounds = state.addAnchor, + items = VfxNodeTypes.all.mapNotNull { type -> + val createDefault = type.createDefault ?: return@mapNotNull null + UiDropdownItem(type.titleKey.lang) { + val created = createDefault() + document.edit { effect -> effect.withChild(state.selected, created) } + state.select(created.id) + } + }, + onExpandedChange = { if (!it) state.addMenuOpen = false }, + ) + } +} + +/** + * The preview itself, and the gizmo over it. + */ +@Composable +private fun Viewport(document: HollowIdeVfxDocument, state: VfxEditorState, selected: String?) { + val preview = state.preview + val node = selected?.let { document.effect.node(it) } + val runtime = selected?.let { preview.instance?.node(it) } + val driven = selected?.let { vfxDrivenLookup(document, preview, it) } ?: { null } + + val gizmoKey = listOf( + preview.yaw, preview.pitch, preview.distance, preview.targetX, preview.targetY, preview.targetZ, + preview.viewportWidth, preview.viewportHeight, preview.time, preview.showShape, preview.revision, node, + ) + val gizmo = remember(gizmoKey) { + if (node == null) VfxGizmo.EMPTY else VfxGizmos.build(preview, node, runtime, preview.showShape, driven) + } + + Box( + id = "vfx-viewport", + mode = UiBoxMode.STACK, + modifier = Modifier.size(100.percent, 100.percent).clip().onPlaced { rect -> + preview.viewportWidth = rect.width + preview.viewportHeight = rect.height + }.input(hoverable = true, draggable = true).cursor(UiCursorShape.HAND).focus() + .onKeyInput { input -> if (handleHistoryKeys(document, input)) input.consume() }.onPress { event -> + val left = event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT + val handle = if (left) gizmo.handleAt(event.localX, event.localY) else null + state.drag = handle + state.readout = null + if (handle != null) document.beginGesture() else preview.beginCameraDrag() + }.onDrag { event -> + val handle = state.drag + val current = selected?.let { document.effect.node(it) } + when { + handle != null && current != null -> { + val fine = event.modifiers and GLFW.GLFW_MOD_SHIFT != 0 + val snap = event.modifiers and GLFW.GLFW_MOD_CONTROL != 0 + val distance = VfxGizmos.dragDistance(handle, event.dragTotalX, event.dragTotalY, fine, snap) + document.edit { it.withNode(handle.apply(current, distance)) } + state.readout = VfxGizmoReadout(handle.x, handle.y, handle.readout(distance)) + } + + event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT -> preview.pan(event.dragTotalX, event.dragTotalY) + else -> preview.orbit(event.dragTotalX, event.dragTotalY) + } + event.consume() + }.onRelease { + if (state.drag != null) document.endGesture() + state.drag = null + state.readout = null + }.onScroll { event -> + preview.zoom(event.scrollY) + event.consume() + }.drawBehind(key = preview) { + drawGl { preview.render(rect, poseStack) } + }, + ) { + Box( + modifier = Modifier.size(100.percent, 100.percent).inputTransparent() + .drawBehind(key = gizmo to state.drag?.id) { drawGizmo(gizmo, state.drag?.id) }, + ) + state.readout?.let { readout -> + Text( + formatNumber(readout.value), + tags = listOf("vfx-gizmo-readout"), + modifier = Modifier.position((readout.x + 10f).px, (readout.y - 20f).px).inputTransparent(), + ) + } + } +} + +private fun handleHistoryKeys(document: HollowIdeVfxDocument, input: UiKeyInput): Boolean { + if (input.repeat || !input.control) return false + return when (input.key) { + GLFW.GLFW_KEY_Z if input.shift -> document.redo() + GLFW.GLFW_KEY_Z -> document.undo() + GLFW.GLFW_KEY_Y -> document.redo() + else -> false + } +} + +/** The number beside the handle being dragged. */ +internal class VfxGizmoReadout(val x: Float, val y: Float, val value: Float) + +private fun UiCanvasDrawScope.drawGizmo(gizmo: VfxGizmo, active: String?) { + gizmo.lines.groupBy { it.color }.forEach { (color, lines) -> + val path = GenericShape { + lines.forEach { line -> + moveTo(line.x0, line.y0) + lineTo(line.x1, line.y1) + } + } + drawShape(path, bounds, UiPaint.Color(color), UiDrawStyle.Stroke(width = 1.4f)) + } + gizmo.handles.forEach { handle -> + val half = if (handle.id == active) 5f else 4f + drawRect( + UiRect(handle.x - half - 1f, handle.y - half - 1f, half * 2f + 2f, half * 2f + 2f), + UiPaint.Color(HandleOutline), + radius = 2f, + ) + drawRect( + UiRect(handle.x - half, handle.y - half, half * 2f, half * 2f), UiPaint.Color(handle.color), radius = 1.5f + ) + } +} + +@Composable +private fun ParticleCounter(preview: VfxPreviewState) { + if (preview.viewportHeight <= 0f) return + Text( + vfxText("particles") + ": " + preview.liveParticles, + modifier = Modifier.position(8.px, (preview.viewportHeight - 18f).px).padding(4.px, 1.px) + .background(CounterBackground).borderRadius(3f).fontSize(9f).foreground(AnimatorColors.Muted) + .inputTransparent(), + ) +} + +private val HandleOutline = UiColor(0.05f, 0.05f, 0.06f, 0.9f) +private val CounterBackground = UiColor(0.06f, 0.07f, 0.08f, 0.7f) + +private fun MutableList>.appendNodes( + nodes: List, + expanded: List, + selected: String?, + depth: Int = 0, +) { + nodes.forEach { node -> + val type = VfxNodeTypes.of(node) + add( + UiTreeItem( + id = node.id, + label = if (node.enabled) node.name else "${node.name} (${vfxText("off")})", + depth = depth, + payload = node, + icon = type?.icon, + hasChildren = node.children.isNotEmpty(), + expanded = node.id in expanded, + selected = node.id == selected, + ) + ) + if (node.children.isNotEmpty() && node.id in expanded) { + appendNodes(node.children, expanded, selected, depth + 1) + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt new file mode 100644 index 000000000..ac956727e --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt @@ -0,0 +1,485 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.* +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorIconButton +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint +import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow +import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextInputFilter +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxCurve +import ru.hollowhorizon.hollowengine.common.vfx.VfxTimeSource +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value +import kotlin.math.abs + +/** + * What the inspector calls when a field of an animatable property takes the focus, with the id of + * that property. + */ +val LocalVfxFieldFocus = staticCompositionLocalOf<(String) -> Unit> { {} } + +/** + * What the timeline currently writes into a property, or null when it has no keys for it. + */ +val LocalVfxDriven = staticCompositionLocalOf<(String) -> VfxDrivenValue?> { { null } } + +/** The value a timeline track holds right now, and which of its channels track has keys on. */ +class VfxDrivenValue(val values: FloatArray, private val channels: Set) { + fun drives(channel: Int): Boolean = channel in channels + + fun value(channel: Int): Float = values.getOrElse(channel) { 0f } +} + +/** + * The shapes a number can take. + * + * Switching between them keeps the row where it is: a constant is one field, a range two, an + * expression one wide field, and a curve, the only one that cannot be typed, shows its shape. + */ +private enum class VfxValueKind(val key: String, val icon: String) { + CONST("kind_const", "hollowengine:textures/gui/icons/types.svg"), + RANGE("kind_range", "hollowengine:textures/gui/icons/range.svg"), + CURVE("kind_curve", "hollowengine:textures/gui/icons/curve.svg"), + EXPR("kind_expr", "hollowengine:textures/gui/icons/math.svg"); +} + +private fun VfxValue.kind(): VfxValueKind = when (this) { + is VfxValue.Const -> VfxValueKind.CONST + is VfxValue.Range -> VfxValueKind.RANGE + is VfxValue.OverTime -> VfxValueKind.CURVE + is VfxValue.Expr -> VfxValueKind.EXPR +} + +/** A sample of the value, for carrying something over when the shape changes. */ +private fun VfxValue.sample(): Float = when (this) { + is VfxValue.Const -> value + is VfxValue.Range -> from + is VfxValue.OverTime -> curve.valueAt(0f) + is VfxValue.Expr -> source.trim().toFloatOrNull() ?: 1f +} + +private fun VfxValue.asKind(kind: VfxValueKind): VfxValue { + if (kind() == kind) return this + val sample = sample() + return when (kind) { + VfxValueKind.CONST -> VfxValue.Const(sample) + VfxValueKind.RANGE -> VfxValue.Range(sample, sample) + VfxValueKind.CURVE -> VfxValue.OverTime(VfxCurve.ramp(sample, 0f)) + VfxValueKind.EXPR -> VfxValue.Expr(formatNumber(sample)) + } +} + +internal fun formatNumber(value: Float): String = + if (value == value.toInt().toFloat() && abs(value) < 1.0e7f) value.toInt().toString() + else "%.4f".format(value).replace(',', '.').trimEnd('0').trimEnd('.') + +/** The label of a row, with the explanation that used to sit in brackets behind a hover icon. */ +@Composable +fun VfxFieldLabel(label: String, hint: String? = null, width: Float = FieldLabelWidth) { + if (label.isEmpty()) return + Row(modifier = Modifier.size(width.px, UiLength.Fit).gap(2.px).alignItems(vertical = UiAlign.CENTER)) { + Text( + label, + tags = listOf("insp-inline-label"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).textWrap(false).textOverflow(UiTextOverflow.DOTS), + ) + if (!hint.isNullOrBlank()) HintIcon(hint) + } +} + +@Composable +private fun HintIcon(text: String) { + Image( + InfoIcon, + tags = listOf("vfx-hint-icon"), + modifier = Modifier.size(9.px, 9.px).tint(HintTint).tooltipOnHover(text), + ) +} + +/** + * One authored number on one line. + */ +@Composable +fun VfxValueRow( + label: String, + value: VfxValue, + property: String? = null, + hint: String? = null, + channel: Int = 0, + onChange: (VfxValue) -> Unit, +) { + val driven = property?.let { LocalVfxDriven.current(it) }?.takeIf { it.drives(channel) } + + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint) + if (driven != null) { + DrivenCell(driven.value(channel)) + DrivenMark(property) + } else { + ValueCells(value, property, onChange) + KindPicker(value, onChange) + } + } +} + +/** + * Three values that make one vector. + */ +@Composable +fun VfxVec3Row( + label: String, + value: VfxVec3Value, + property: String? = null, + hint: String? = null, + uniform: Boolean = false, + onChange: (VfxVec3Value) -> Unit, +) { + if (uniform) { + VfxValueRow(label, value.x, property, hint) { onChange(VfxVec3Value(it, it, it)) } + return + } + + val compact = value.x is VfxValue.Const && value.y is VfxValue.Const && value.z is VfxValue.Const + if (!compact) { + Column(modifier = Modifier.size(100.percent).gap(2.px)) { + Row(modifier = Modifier.size(100.percent).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel( + label, + hint + ) + } + VfxValueRow(" X", value.x, property, channel = 0) { onChange(value.copy(x = it)) } + VfxValueRow(" Y", value.y, property, channel = 1) { onChange(value.copy(y = it)) } + VfxValueRow(" Z", value.z, property, channel = 2) { onChange(value.copy(z = it)) } + } + return + } + + val driven = property?.let { LocalVfxDriven.current(it) } + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint, VectorLabelWidth) + AxisNumber( + "X", + value.x.value, + property, + driven, + 0 + ) { onChange(value.copy(x = VfxValue.of(it))) } + AxisNumber( + "Y", + value.y.value, + property, + driven, + 1 + ) { onChange(value.copy(y = VfxValue.of(it))) } + AxisNumber( + "Z", + value.z.value, + property, + driven, + 2 + ) { onChange(value.copy(z = VfxValue.of(it))) } + if (driven != null) { + DrivenMark(property) + } else { + KindPicker(value.x) { picked -> + onChange(VfxVec3Value(picked, value.y.asKind(picked.kind()), value.z.asKind(picked.kind()))) + } + } + } +} + +/** Three plain numbers on one line: a position, a direction, an axis. */ +@Composable +fun VfxFloat3Row( + label: String, + value: Vec3f, + property: String? = null, + hint: String? = null, + onChange: (Vec3f) -> Unit, +) { + val driven = property?.let { LocalVfxDriven.current(it) } + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint, VectorLabelWidth) + AxisNumber("X", value.x, property, driven, 0) { onChange(Vec3f(it, value.y, value.z)) } + AxisNumber("Y", value.y, property, driven, 1) { onChange(Vec3f(value.x, it, value.z)) } + AxisNumber("Z", value.z, property, driven, 2) { onChange(Vec3f(value.x, value.y, it)) } + if (driven != null) DrivenMark(property) + } +} + +/** One plain number, for the settings that are not values: a duration, a limit, a step. */ +@Composable +fun VfxNumberRow( + label: String, + value: Float, + hint: String? = null, + min: Float = -Float.MAX_VALUE, + max: Float = Float.MAX_VALUE, + onChange: (Float) -> Unit, +) { + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint) + NumberCell(value, null, whole = false) { onChange(it.coerceIn(min, max)) } + } +} + +@Composable +fun VfxIntRow( + label: String, + value: Int, + hint: String? = null, + min: Int = Int.MIN_VALUE, + max: Int = Int.MAX_VALUE, + onChange: (Int) -> Unit, +) { + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint) + NumberCell(value.toFloat(), null, whole = true) { onChange(it.toInt().coerceIn(min, max)) } + } +} + +/** An axis name in its color, then the number, or what the timeline holds for it. */ +@Composable +private fun AxisNumber( + axis: String, + value: Float, + property: String?, + driven: VfxDrivenValue?, + channel: Int, + onChange: (Float) -> Unit, +) { + Row(modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(vertical = UiAlign.CENTER)) { + Text(axis, modifier = Modifier.fontSize(8f).foreground(axisColor(axis))) + if (driven != null && driven.drives(channel)) { + DrivenCell(driven.value(channel)) + } else { + NumberCell(value, property, whole = false, onChange = onChange) + } + } +} + +private fun axisColor(axis: String): UiColor = when (axis) { + "X", "U" -> UiColor(0.91f, 0.42f, 0.42f, 1f) + "Y", "V" -> UiColor(0.52f, 0.82f, 0.45f, 1f) + else -> UiColor(0.45f, 0.62f, 0.95f, 1f) +} + +@Composable +private fun DrivenCell(value: Float) { + Box( + tags = listOf("insp-input", "insp-inline-input", "vfx-driven"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).input(hoverable = true).cursor(UiCursorShape.NOT_ALLOWED) + .tooltipOnHover(vfxText("driven_hint")), + ) { + Text(formatNumber(value), modifier = Modifier.fontSize(9f).textWrap(false)) + } +} + +@Composable +private fun DrivenMark(property: String?) { + val focus = LocalVfxFieldFocus.current + InspectorIcon(KeyframeIcon, vfxText("driven_show")) { if (property != null) focus(property) } +} + +@Composable +private fun NumberCell(value: Float, property: String?, whole: Boolean, onChange: (Float) -> Unit) { + val focus = LocalVfxFieldFocus.current + var draft by remember { mutableStateOf(formatNumber(value)) } + var lastExternal by remember { mutableStateOf(value) } + if (value != lastExternal) { + lastExternal = value + if (draft.toFloatOrNull() != value) draft = formatNumber(value) + } + + TextField( + value = draft, + fontSize = 9f, + filter = if (whole) UiTextInputFilter.INTEGER else UiTextInputFilter.DECIMAL, + tags = listOf("insp-input", "insp-inline-input", "numeric"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).onFocus { if (property != null) focus(property) }, + onChange = { text -> + draft = text + text.toFloatOrNull()?.let { number -> + lastExternal = number + onChange(number) + } + }, + ) +} + +@Composable +internal fun VfxNumberCellInline(value: Float, onChange: (Float) -> Unit) = + NumberCell(value, null, whole = false, onChange = onChange) + +@Composable +private fun TextCell(text: String, property: String?, onChange: (String) -> Unit) { + val focus = LocalVfxFieldFocus.current + var draft by remember { mutableStateOf(text) } + var lastExternal by remember { mutableStateOf(text) } + if (text != lastExternal) { + lastExternal = text + draft = text + } + + TextField( + value = draft, + fontSize = 9f, + placeholder = vfxText("expression_placeholder"), + tags = listOf("insp-input", "insp-inline-input", "vfx-expression"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).onFocus { if (property != null) focus(property) } + .tooltipOnHover(vfxText("expression_hint")), + onChange = { typed -> + draft = typed + lastExternal = typed + onChange(typed) + }, + ) +} + +@Composable +private fun ValueCells(value: VfxValue, property: String?, onChange: (VfxValue) -> Unit) { + when (value) { + is VfxValue.Const -> NumberCell(value.value, property, whole = false) { onChange(VfxValue.Const(it)) } + + is VfxValue.Range -> { + NumberCell(value.from, property, whole = false) { onChange(value.copy(from = it)) } + Text("—", modifier = Modifier.fontSize(8f).foreground(HintTint)) + NumberCell(value.to, property, whole = false) { onChange(value.copy(to = it)) } + } + + is VfxValue.Expr -> TextCell(value.source, property) { onChange(VfxValue.Expr(it)) } + is VfxValue.OverTime -> CurveCell(value, property, onChange) + } +} + +@Composable +private fun CurveCell(value: VfxValue.OverTime, property: String?, onChange: (VfxValue) -> Unit) { + val focus = LocalVfxFieldFocus.current + var editing by remember { mutableStateOf(false) } + + VfxCurvePreview( + curve = value.curve, + modifier = Modifier.size(0.px, CurveCellHeight.px).grow(1f).input(hoverable = true, clickable = true) + .cursor(UiCursorShape.HAND).tooltipOnHover(vfxText("curve_open")).onPress { event -> + editing = true + if (property != null) focus(property) + event.consume() + }, + ) + + if (editing) VfxCurveDialog(value, onChange = onChange, onClose = { editing = false }) +} + +@Composable +private fun KindPicker(value: VfxValue, onChange: (VfxValue) -> Unit) { + var open by remember { mutableStateOf(false) } + var anchor by remember { mutableStateOf(UiRect.Zero) } + val kind = value.kind() + + Box(modifier = Modifier.onPlaced { anchor = it }) { + InspectorIcon(kind.icon, vfxText(kind.key)) { open = true } + } + + if (!open) return + ContextMenu( + id = "vfx-kind-$kind", + anchorBounds = anchor, + items = VfxValueKind.entries.map { entry -> + UiDropdownItem(vfxText(entry.key), icon = entry.icon, checked = entry == kind) { + onChange(value.asKind(entry)) + } + }, + onExpandedChange = { if (!it) open = false }, + ) +} + +@Composable +internal fun VfxSourcePicker(source: VfxTimeSource, onChange: (VfxTimeSource) -> Unit) { + var open by remember { mutableStateOf(false) } + var anchor by remember { mutableStateOf(UiRect.Zero) } + + Box(modifier = Modifier.onPlaced { anchor = it }) { + InspectorButton(vfxText("source_${source.name.lowercase()}")) { open = true } + } + if (!open) return + + ContextMenu( + id = "vfx-source", + anchorBounds = anchor, + items = VfxTimeSource.entries.map { entry -> + UiDropdownItem(vfxText("source_${entry.name.lowercase()}"), checked = entry == source) { onChange(entry) } + }, + onExpandedChange = { if (!it) open = false }, + ) +} + +@Composable +internal fun VfxCurvePreview(curve: VfxCurve, modifier: Modifier) { + Box( + modifier = modifier.drawBehind(key = curve) { + val width = size.width + val height = size.height + if (width <= 0f || height <= 0f) return@drawBehind + + drawRect(UiRect(0f, 0f, width, height), UiPaint.Color(CurveBackground), radius = 3f) + + val keys = curve.keys + if (keys.isEmpty()) return@drawBehind + + val start = keys.first().time + val span = (keys.last().time - start).takeIf { it > 1.0e-4f } ?: 1f + var minimum = keys.minOf { it.value } + var maximum = keys.maxOf { it.value } + if (maximum - minimum < 1.0e-4f) { + minimum -= 0.5f + maximum += 0.5f + } + + val inset = 2f + val usable = height - inset * 2f + val columnWidth = width / CurvePreviewSteps + var previousY = Float.NaN + for (step in 0 until CurvePreviewSteps) { + val t = step.toFloat() / (CurvePreviewSteps - 1) + val sampled = curve.valueAt(start + span * t) + val y = inset + usable - ((sampled - minimum) / (maximum - minimum)).coerceIn(0f, 1f) * usable + val top = if (previousY.isNaN()) y else minOf(previousY, y) + val bottom = if (previousY.isNaN()) y else maxOf(previousY, y) + drawRect( + UiRect(step * columnWidth, top, maxOf(columnWidth, 1f), maxOf(bottom - top, 1.5f)), + UiPaint.Color(CurveLine), + ) + previousY = y + } + }, + ) +} + +@Composable +internal fun InspectorIcon(icon: String, tooltip: String, onClick: () -> Unit) { + InspectorIconButton(icon = icon, tooltip = tooltip, tags = listOf("insp-inline-icon"), onClick = onClick) +} + +internal fun vfxText(name: String): String = "hollowengine.gui.vfx.$name".lang + +internal const val FieldLabelWidth = 92f + +/** Vectors carry three fields, so their short labels ("Position") get less of the line. */ +internal const val VectorLabelWidth = 54f + +internal const val CurveCellHeight = 16f +private const val CurvePreviewSteps = 40 +private const val InfoIcon = "hollowengine:textures/gui/icons/info.svg" +private const val KeyframeIcon = "hollowengine:textures/gui/icons/keyframe.svg" + +internal val HintTint = UiColor(0.55f, 0.58f, 0.65f, 1f) +internal val CurveBackground = UiColor(0.09f, 0.1f, 0.11f, 1f) +private val CurveLine = UiColor(0.85f, 0.75f, 0.45f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt new file mode 100644 index 000000000..c2e9888ac --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt @@ -0,0 +1,407 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.inspector.* +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.common.vfx.* + +/** What the shared inspector shows for the selected node of an effect. */ +internal fun vfxNodeInspector( + document: HollowIdeVfxDocument, + state: VfxEditorState, + nodeId: String, +): InspectorTarget { + val node = document.effect.node(nodeId) + val type = node?.let(VfxNodeTypes::of) + return InspectorTarget( + id = "vfx-node-$nodeId", + title = node?.name ?: nodeId, + subtitle = type?.titleKey?.lang, + icon = type?.icon, + ) { + val live = document.effect.node(nodeId) ?: return@InspectorTarget + CompositionLocalProvider( + LocalVfxFieldFocus provides { property -> state.focusProperty(nodeId, property) }, + LocalVfxDriven provides vfxDrivenLookup(document, state.preview, nodeId), + ) { + NodeFields(document, state, live) + } + } +} + +private fun HollowIdeVfxDocument.replace(node: VfxNodeSpec) = edit(mergeKey = "node:${node.id}") { it.withNode(node) } + +@Composable +private fun NodeFields(document: HollowIdeVfxDocument, state: VfxEditorState, node: VfxNodeSpec) { + Folding(state, "node", vfxText("section_node")) { + NameRow(vfxText("name"), node.name) { document.replace(node.withCommon(name = it)) } + ToggleRow(vfxText("enabled"), node.enabled) { document.replace(node.withCommon(enabled = it)) } + } + + Folding(state, "transform", vfxText("section_transform"), openByDefault = false) { + val transform = node.transform + VfxFloat3Row(vfxText("position"), transform.position, VfxAnimatables.POSITION) { + document.replace(node.withCommon(transform = transform.copy(position = it))) + } + VfxFloat3Row(vfxText("rotation"), transform.rotation, VfxAnimatables.ROTATION) { + document.replace(node.withCommon(transform = transform.copy(rotation = it))) + } + VfxFloat3Row(vfxText("scale"), transform.scale, VfxAnimatables.SCALE) { + document.replace(node.withCommon(transform = transform.copy(scale = it))) + } + } + + if (node is VfxEmitterSpec) EmitterFields(document, state, node) +} + +/** A section that remembers whether it is open per effect editor. */ +@Composable +internal fun Folding( + state: VfxEditorState, + key: String, + title: String, + openByDefault: Boolean = true, + content: @Composable () -> Unit, +) { + val open = state.isSectionOpen(key, openByDefault) + CollapsibleSection(title, open, id = "vfx-section-$key", onToggle = { state.toggleSection(key, openByDefault) }) { + content() + } +} + +@Composable +private fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { + val emission = emitter.emission + Folding(state, "emission", vfxText("section_emission")) { + VfxValueRow(vfxText("rate"), emission.rate, VfxAnimatables.RATE, vfxText("rate_hint")) { + document.replace(emitter.withEmitter(emission = emission.copy(rate = it))) + } + VfxIntRow(vfxText("burst"), emission.burst, vfxText("burst_hint"), min = 0, max = 4096) { + document.replace(emitter.withEmitter(emission = emission.copy(burst = it))) + } + VfxNumberRow(vfxText("duration"), emission.duration, vfxText("duration_hint"), min = 0f) { + document.replace(emitter.withEmitter(emission = emission.copy(duration = it))) + } + ToggleRow(vfxText("loop"), emission.loop) { + document.replace(emitter.withEmitter(emission = emission.copy(loop = it))) + } + if (emission.loop) { + VfxNumberRow(vfxText("loop_delay"), emission.loopDelay, vfxText("loop_delay_hint"), min = 0f) { + document.replace(emitter.withEmitter(emission = emission.copy(loopDelay = it))) + } + } + VfxIntRow( + vfxText("max_particles"), + emission.maxParticles, + vfxText("max_particles_hint"), + min = 1, + max = 20_000 + ) { + document.replace(emitter.withEmitter(emission = emission.copy(maxParticles = it))) + } + } + + ShapeFields(document, state, emitter) + + val spawn = emitter.spawn + Folding(state, "spawn", vfxText("section_spawn")) { + VfxValueRow(vfxText("lifetime"), spawn.lifetime, VfxAnimatables.LIFETIME, vfxText("lifetime_hint")) { + document.replace(emitter.withEmitter(spawn = spawn.copy(lifetime = it))) + } + VfxValueRow(vfxText("speed"), spawn.speed, VfxAnimatables.SPEED, vfxText("speed_hint")) { + document.replace(emitter.withEmitter(spawn = spawn.copy(speed = it))) + } + VfxVec3Row(vfxText("spawn_offset"), spawn.offset, VfxAnimatables.OFFSET, vfxText("spawn_offset_hint")) { + document.replace(emitter.withEmitter(spawn = spawn.copy(offset = it))) + } + VfxValueRow( + vfxText("inherit_velocity"), + spawn.inheritVelocity, + VfxAnimatables.INHERIT_VELOCITY, + vfxText("inherit_velocity_hint"), + ) { + document.replace(emitter.withEmitter(spawn = spawn.copy(inheritVelocity = it))) + } + } + + val appearance = emitter.appearance + Folding(state, "appearance", vfxText("section_appearance")) { + ToggleRow(vfxText("uniform_size"), appearance.uniformSize) { + document.replace(emitter.withEmitter(appearance = appearance.copy(uniformSize = it))) + } + VfxVec3Row( + vfxText("size"), + appearance.size, + VfxAnimatables.SIZE, + vfxText("size_hint"), + uniform = appearance.uniformSize, + ) { + document.replace(emitter.withEmitter(appearance = appearance.copy(size = it))) + } + VfxVec3Row(vfxText("spin"), appearance.rotation, VfxAnimatables.SPIN, vfxText("spin_hint")) { + document.replace(emitter.withEmitter(appearance = appearance.copy(rotation = it))) + } + VfxColorRow(vfxText("color"), appearance.color, VfxAnimatables.COLOR, vfxText("color_hint")) { + document.replace(emitter.withEmitter(appearance = appearance.copy(color = it))) + } + } + + val motion = emitter.motion + Folding(state, "motion", vfxText("section_motion")) { + VfxValueRow(vfxText("gravity"), motion.gravity, VfxAnimatables.GRAVITY, vfxText("gravity_hint")) { + document.replace(emitter.withEmitter(motion = motion.copy(gravity = it))) + } + VfxValueRow(vfxText("drag"), motion.drag, VfxAnimatables.DRAG, vfxText("drag_hint")) { + document.replace(emitter.withEmitter(motion = motion.copy(drag = it))) + } + } + + when (emitter) { + is VfxQuadEmitterSpec -> QuadFields(document, state, emitter) + is VfxMeshEmitterSpec -> MeshFields(document, state, emitter) + else -> Unit + } + + VfxModuleSections(document, state, emitter) + + Folding(state, "space", vfxText("section_space"), openByDefault = false) { + Pills(VfxSimulationSpace.entries, emitter.space, { vfxText("space_${it.name.lowercase()}") }) { + document.replace(emitter.withEmitter(space = it)) + } + if (emitter.space == VfxSimulationSpace.LOCAL) { + ToggleRow(vfxText("inherit_rotation"), emitter.inheritRotation) { + document.replace(emitter.withEmitter(inheritRotation = it)) + } + ToggleRow(vfxText("inherit_scale"), emitter.inheritScale) { + document.replace(emitter.withEmitter(inheritScale = it)) + } + } + VfxNumberRow(vfxText("max_step"), emitter.maxStep, vfxText("max_step_hint"), min = 1f / 240f, max = 0.25f) { + document.replace(emitter.withEmitter(maxStep = it)) + } + } +} + +/** The shape shows only what chosen kind reads. */ +@Composable +private fun ShapeFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { + val shape = emitter.shape + fun update(next: VfxShape) = document.replace(emitter.withEmitter(shape = next)) + + Folding(state, "shape", vfxText("section_shape")) { + Pills(VfxShapeKind.entries, shape.kind, { vfxText("shape_${it.name.lowercase()}") }) { + update(shape.copy(kind = it)) + } + + val round = + shape.kind == VfxShapeKind.SPHERE || shape.kind == VfxShapeKind.CONE || shape.kind == VfxShapeKind.DISC + if (round) { + VfxValueRow( + vfxText("radius"), + shape.radius, + VfxAnimatables.SHAPE_RADIUS + ) { update(shape.copy(radius = it)) } + VfxValueRow( + vfxText("thickness"), + shape.thickness, + VfxAnimatables.SHAPE_THICKNESS, + vfxText("thickness_hint") + ) { + update(shape.copy(thickness = it)) + } + } + if (shape.kind == VfxShapeKind.CONE) { + VfxValueRow(vfxText("angle"), shape.angle, VfxAnimatables.SHAPE_ANGLE, vfxText("angle_hint")) { + update(shape.copy(angle = it)) + } + } + if (shape.kind == VfxShapeKind.BOX) { + VfxVec3Row(vfxText("extents"), shape.extents, VfxAnimatables.SHAPE_EXTENTS, vfxText("extents_hint")) { + update(shape.copy(extents = it)) + } + } + if (shape.kind == VfxShapeKind.LINE) { + VfxVec3Row(vfxText("line_end"), shape.extents, VfxAnimatables.SHAPE_EXTENTS, vfxText("line_end_hint")) { + update(shape.copy(extents = it)) + } + } + + Text(vfxText("direction_mode"), tags = listOf("insp-inline-label")) + Pills(VfxDirectionMode.entries, shape.directionMode, { vfxText("aim_${it.name.lowercase()}") }) { + update(shape.copy(directionMode = it)) + } + val readsDirection = + shape.directionMode == VfxDirectionMode.FIXED || shape.directionMode == VfxDirectionMode.SHAPE && (shape.kind == VfxShapeKind.POINT || shape.kind == VfxShapeKind.BOX || shape.kind == VfxShapeKind.LINE) + if (readsDirection) { + VfxFloat3Row(vfxText("direction"), shape.direction) { update(shape.copy(direction = it)) } + } + } +} + +@Composable +private fun QuadFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxQuadEmitterSpec) { + val material = emitter.material + fun update(next: VfxMaterialSpec) = document.replace(emitter.copy(material = next)) + + Folding(state, "material", vfxText("section_material")) { + TextRow(vfxText("texture"), material.texture) { update(material.copy(texture = it)) } + Text(vfxText("blend"), tags = listOf("insp-inline-label")) + BlendPicker(material.blend) { update(material.copy(blend = it)) } + ToggleRow(vfxText("lit_by_world"), material.lighting == VfxLighting.WORLD) { lit -> + update(material.copy(lighting = if (lit) VfxLighting.WORLD else VfxLighting.UNLIT)) + } + UvRows(material.uv) { update(material.copy(uv = it)) } + } + + Folding(state, "depth", vfxText("section_depth"), openByDefault = false) { + ToggleRow(vfxText("depth_test"), material.depthTest) { update(material.copy(depthTest = it)) } + ToggleRow(vfxText("depth_write"), material.depthWrite) { update(material.copy(depthWrite = it)) } + ToggleRow(vfxText("cull"), material.cull) { update(material.copy(cull = it)) } + } + + Folding(state, "facing", vfxText("section_facing")) { + Pills(VfxFacing.entries, emitter.facing, { vfxText("facing_${it.name.lowercase()}") }) { + document.replace(emitter.copy(facing = it)) + } + if (emitter.facing == VfxFacing.CAMERA_AXIS) { + VfxFloat3Row(vfxText("facing_axis"), emitter.facingAxis) { document.replace(emitter.copy(facingAxis = it)) } + } + } +} + +@Composable +private fun UvRows(uv: VfxUvRect, onChange: (VfxUvRect) -> Unit) { + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(vfxText("uv_from"), vfxText("uv_hint")) + UvNumber("U", uv.u0) { onChange(uv.copy(u0 = it)) } + UvNumber("V", uv.v0) { onChange(uv.copy(v0 = it)) } + } + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(vfxText("uv_to")) + UvNumber("U", uv.u1) { onChange(uv.copy(u1 = it)) } + UvNumber("V", uv.v1) { onChange(uv.copy(v1 = it)) } + } +} + +@Composable +private fun UvNumber(axis: String, value: Float, onChange: (Float) -> Unit) { + Row(modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(vertical = UiAlign.CENTER)) { + Text(axis, modifier = Modifier.fontSize(8f).foreground(UiColor(0.55f, 0.58f, 0.65f, 1f))) + VfxNumberCellInline(value) { onChange(it.coerceIn(0f, 1f)) } + } +} + +@Composable +private fun BlendPicker(current: VfxBlend, onChange: (VfxBlend) -> Unit) { + Row(modifier = Modifier.size(100.percent).gap(4.px)) { + VfxBlend.entries.forEach { blend -> + val selected = blend == current + Column( + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(horizontal = UiAlign.CENTER) + .input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) + .tooltipOnHover(vfxText("blend_${blend.name.lowercase()}_hint")).onClick { event -> + onChange(blend) + event.consume() + }, + ) { + Box( + modifier = Modifier.size(100.percent, 26.px).drawBehind(key = blend to selected) { + drawBlendPreview(blend, size.width, size.height, selected) + }, + ) + Text( + vfxText("blend_${blend.name.lowercase()}"), + modifier = Modifier.fontSize(8f).foreground(if (selected) SelectedText else MutedText), + ) + } + } + } +} + +private fun UiCanvasDrawScope.drawBlendPreview( + blend: VfxBlend, + width: Float, + height: Float, + selected: Boolean, +) { + val half = width / 2f + drawRect(UiRect(0f, 0f, half, height), UiPaint.Color(DarkGround)) + drawRect(UiRect(half, 0f, width - half, height), UiPaint.Color(LightGround)) + + val inset = height * 0.22f + val left = UiRect(width * 0.2f, inset, half - width * 0.2f, height - inset * 2f) + val right = UiRect(half, inset, half - width * 0.2f, height - inset * 2f) + drawRect(left, UiPaint.Color(blended(blend, DarkGround))) + drawRect(right, UiPaint.Color(blended(blend, LightGround))) + + val border = if (selected) SelectedBorder else IdleBorder + drawRect(UiRect(0f, 0f, width, 1f), UiPaint.Color(border)) + drawRect(UiRect(0f, height - 1f, width, 1f), UiPaint.Color(border)) + drawRect(UiRect(0f, 0f, 1f, height), UiPaint.Color(border)) + drawRect(UiRect(width - 1f, 0f, 1f, height), UiPaint.Color(border)) +} + +/** What the sample particle leaves on [ground], worked out the way the blend state would. */ +private fun blended(blend: VfxBlend, ground: UiColor): UiColor { + val alpha = SampleParticle.alpha + fun channel(source: Float, destination: Float): Float = when (blend) { + VfxBlend.OPAQUE -> source + VfxBlend.BLEND -> source * alpha + destination * (1f - alpha) + VfxBlend.ADDITIVE -> (destination + source * alpha).coerceAtMost(1f) + VfxBlend.MULTIPLY -> source * destination + destination * (1f - alpha) + } + return UiColor( + channel(SampleParticle.red, ground.red), + channel(SampleParticle.green, ground.green), + channel(SampleParticle.blue, ground.blue), + 1f, + ) +} + +@Composable +private fun MeshFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxMeshEmitterSpec) { + Folding(state, "model", vfxText("section_model")) { + TextRow(vfxText("model"), emitter.model) { document.replace(emitter.copy(model = it)) } + ToggleRow(vfxText("align_to_velocity"), emitter.alignToVelocity) { + document.replace(emitter.copy(alignToVelocity = it)) + } + ToggleRow(vfxText("emissive"), emitter.emissive) { document.replace(emitter.copy(emissive = it)) } + } +} + +/** What the inspector shows when nothing in the tree is selected. */ +internal fun vfxEffectInspector(document: HollowIdeVfxDocument, state: VfxEditorState): InspectorTarget = + InspectorTarget(id = "vfx-effect", title = vfxText("effect")) { + val effect = document.effect + Folding(state, "timeline", vfxText("section_timeline")) { + VfxNumberRow( + vfxText("timeline_duration"), + effect.timeline.duration, + vfxText("timeline_duration_hint"), + min = 0.1f + ) { duration -> + document.edit { it.copy(timeline = it.timeline.copy(duration = duration)) } + } + ToggleRow(vfxText("timeline_loop"), effect.timeline.loop) { loop -> + document.edit { it.copy(timeline = it.timeline.copy(loop = loop)) } + } + } + Folding(state, "stats", vfxText("section_stats")) { + Readonly(vfxText("nodes"), effect.walk().size.toString()) + Readonly(vfxText("expressions"), effect.expressions().size.toString()) + } + } + +private val SampleParticle = UiColor(1f, 0.55f, 0.15f, 0.75f) +private val DarkGround = UiColor(0.12f, 0.13f, 0.15f, 1f) +private val LightGround = UiColor(0.78f, 0.8f, 0.84f, 1f) +private val SelectedBorder = UiColor(0.84f, 0.5f, 0.11f, 1f) +private val IdleBorder = UiColor(0.19f, 0.2f, 0.24f, 1f) +private val SelectedText = UiColor(0.93f, 0.94f, 0.96f, 1f) +private val MutedText = UiColor(0.55f, 0.58f, 0.65f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt new file mode 100644 index 000000000..e6a61e6f0 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt @@ -0,0 +1,203 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import ru.hollowhorizon.hollowengine.client.ui.Box +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.Row +import ru.hollowhorizon.hollowengine.client.ui.UiAlign +import ru.hollowhorizon.hollowengine.client.ui.alignItems +import ru.hollowhorizon.hollowengine.client.ui.gap +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.inspector.Hint +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton +import ru.hollowhorizon.hollowengine.client.ui.inspector.Pills +import ru.hollowhorizon.hollowengine.client.ui.inspector.ToggleRow +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.onPlaced +import ru.hollowhorizon.hollowengine.client.ui.percent +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.size +import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxCollisionAction +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxCollisionSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceKind +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxModuleSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxModuleTypes +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxNoiseSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvMode +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxVelocityOverLifetimeSpec + +/** + * The modules of an emitter, one folding section each, and a menu of what can still be added. + */ +@Composable +internal fun VfxModuleSections(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { + emitter.modules.forEachIndexed { index, module -> + val type = VfxModuleTypes.of(module) + val title = type?.titleKey?.lang ?: module.id + Folding(state, "module-${emitter.id}-${module.id}", title) { + Row(modifier = Modifier.size(100.percent).gap(4.px).alignItems(vertical = UiAlign.CENTER)) { + ToggleRow(vfxText("module_enabled"), module.enabled) { + document.replaceModule(emitter, index, module.withEnabled(it)) + } + InspectorButton(vfxText("module_remove")) { document.removeModule(emitter, index) } + } + ModuleFields(document, emitter, index, module) + } + } + + AddModuleButton(document, emitter) +} + +@Composable +private fun AddModuleButton(document: HollowIdeVfxDocument, emitter: VfxEmitterSpec) { + val addable = VfxModuleTypes.forEmitter(emitter) + .filter { it.createDefault != null } + .filter { type -> type.repeatable || emitter.modules.none { type.specClass.isInstance(it) } } + if (addable.isEmpty()) return + + var open by remember { mutableStateOf(false) } + var anchor by remember { mutableStateOf(UiRect.Zero) } + + Box(modifier = Modifier.size(100.percent).onPlaced { anchor = it }) { + InspectorButton(vfxText("module_add")) { open = true } + } + if (!open) return + + ContextMenu( + id = "vfx-add-module", + anchorBounds = anchor, + items = addable.map { type -> + UiDropdownItem(type.titleKey.lang) { + type.createDefault?.invoke()?.let { document.addModule(emitter, it) } + } + }, + onExpandedChange = { if (!it) open = false }, + ) +} + +@Composable +private fun ModuleFields( + document: HollowIdeVfxDocument, + emitter: VfxEmitterSpec, + index: Int, + module: VfxModuleSpec, +) { + fun replace(next: VfxModuleSpec) = document.replaceModule(emitter, index, next) + fun property(field: String) = VfxAnimatables.moduleProperty(module.id, field) + + when (module) { + is VfxVelocityOverLifetimeSpec -> { + Pills(VfxSimulationSpace.entries, module.space, { vfxText("space_${it.name.lowercase()}") }) { + replace(module.copy(space = it)) + } + VfxVec3Row(vfxText("velocity"), module.velocity, property("velocity"), vfxText("velocity_hint")) { + replace(module.copy(velocity = it)) + } + } + + is VfxForceSpec -> { + Pills(VfxForceKind.entries, module.kind, { vfxText("force_${it.name.lowercase()}") }) { + replace(module.copy(kind = it)) + } + VfxValueRow(vfxText("strength"), module.strength, property("strength"), vfxText("force_strength_hint")) { + replace(module.copy(strength = it)) + } + if (module.kind == VfxForceKind.DIRECTIONAL || module.kind == VfxForceKind.VORTEX) { + VfxFloat3Row(vfxText("direction"), module.direction) { replace(module.copy(direction = it)) } + } + if (module.kind != VfxForceKind.DIRECTIONAL) { + VfxFloat3Row(vfxText("force_center"), module.center, hint = vfxText("force_center_hint")) { + replace(module.copy(center = it)) + } + } + VfxValueRow(vfxText("radius"), module.radius, property("radius"), vfxText("force_radius_hint")) { + replace(module.copy(radius = it)) + } + ToggleRow(vfxText("falloff"), module.falloff) { replace(module.copy(falloff = it)) } + } + + is VfxNoiseSpec -> { + VfxValueRow(vfxText("strength"), module.strength, property("strength")) { replace(module.copy(strength = it)) } + VfxValueRow(vfxText("frequency"), module.frequency, property("frequency"), vfxText("frequency_hint")) { + replace(module.copy(frequency = it)) + } + VfxNumberRow(vfxText("scroll_speed"), module.scrollSpeed, vfxText("scroll_speed_hint")) { + replace(module.copy(scrollSpeed = it)) + } + VfxIntRow(vfxText("octaves"), module.octaves, vfxText("octaves_hint"), min = 1, max = 4) { + replace(module.copy(octaves = it)) + } + } + + is VfxCollisionSpec -> { + Pills(VfxCollisionAction.entries, module.action, { vfxText("hit_${it.name.lowercase()}") }) { + replace(module.copy(action = it)) + } + if (module.action == VfxCollisionAction.BOUNCE) { + VfxNumberRow(vfxText("bounce"), module.bounce, vfxText("bounce_hint"), min = 0f, max = 1f) { + replace(module.copy(bounce = it)) + } + } + if (module.action != VfxCollisionAction.DIE) { + VfxNumberRow(vfxText("friction"), module.friction, vfxText("friction_hint"), min = 0f, max = 1f) { + replace(module.copy(friction = it)) + } + VfxNumberRow(vfxText("lifetime_loss"), module.lifetimeLoss, vfxText("lifetime_loss_hint"), min = 0f) { + replace(module.copy(lifetimeLoss = it)) + } + } + VfxNumberRow(vfxText("hit_radius"), module.radius, vfxText("hit_radius_hint"), min = 0f, max = 1f) { + replace(module.copy(radius = it)) + } + } + + is VfxUvAnimationSpec -> { + VfxIntRow(vfxText("uv_columns"), module.columns, min = 1, max = 64) { replace(module.copy(columns = it)) } + VfxIntRow(vfxText("uv_rows"), module.rows, min = 1, max = 64) { replace(module.copy(rows = it)) } + VfxIntRow(vfxText("uv_frames"), module.frames, vfxText("uv_frames_hint"), min = 0, max = 4096) { + replace(module.copy(frames = it)) + } + Pills(VfxUvMode.entries, module.mode, { vfxText("uv_${it.name.lowercase()}") }) { + replace(module.copy(mode = it)) + } + when (module.mode) { + VfxUvMode.FPS -> VfxNumberRow(vfxText("fps"), module.fps, min = 0f) { replace(module.copy(fps = it)) } + VfxUvMode.OVER_LIFETIME -> VfxNumberRow(vfxText("cycles"), module.cycles, vfxText("cycles_hint"), min = 0f) { + replace(module.copy(cycles = it)) + } + + VfxUvMode.RANDOM_FRAME -> Unit + } + } + + else -> Hint(vfxText("module_unknown")) + } +} + +private fun HollowIdeVfxDocument.replaceModule(emitter: VfxEmitterSpec, index: Int, module: VfxModuleSpec) { + val modules = emitter.modules.toMutableList() + if (index !in modules.indices) return + modules[index] = module + edit(mergeKey = "node:${emitter.id}") { it.withNode(emitter.withEmitter(modules = modules)) } +} + +private fun HollowIdeVfxDocument.removeModule(emitter: VfxEmitterSpec, index: Int) { + val modules = emitter.modules.filterIndexed { at, _ -> at != index } + edit(mergeKey = "node:${emitter.id}") { it.withNode(emitter.withEmitter(modules = modules)) } +} + +private fun HollowIdeVfxDocument.addModule(emitter: VfxEmitterSpec, module: VfxModuleSpec) { + edit { it.withNode(emitter.withEmitter(modules = emitter.modules + module)) } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt new file mode 100644 index 000000000..0b380175f --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt @@ -0,0 +1,376 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import org.joml.Matrix4f +import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.ui.UiColor +import ru.hollowhorizon.hollowengine.client.vfx.VfxFrame +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.* +import kotlin.math.* + +/** One line of the gizmo, already in panel pixels. */ +data class VfxGizmoLine(val x0: Float, val y0: Float, val x1: Float, val y1: Float, val color: UiColor) + +/** + * A draggable point of the gizmo. + */ +class VfxGizmoHandle( + val id: String, + val x: Float, + val y: Float, + val screenAxisX: Float, + val screenAxisY: Float, + val color: UiColor, + val readout: (Float) -> Float, + val apply: (VfxNodeSpec, Float) -> VfxNodeSpec, +) + +class VfxGizmo(val lines: List, val handles: List) { + fun handleAt(x: Float, y: Float): VfxGizmoHandle? = + handles.filter { (it.x - x) * (it.x - x) + (it.y - y) * (it.y - y) <= PICK_RADIUS * PICK_RADIUS } + .minByOrNull { (it.x - x) * (it.x - x) + (it.y - y) * (it.y - y) } + + companion object { + val EMPTY = VfxGizmo(emptyList(), emptyList()) + const val PICK_RADIUS = 7f + } +} + +/** + * Builds the gizmo of one node as the preview camera sees it. + */ +object VfxGizmos { + fun build( + preview: VfxPreviewState, + node: VfxNodeSpec, + runtime: VfxNodeRuntime?, + showShape: Boolean, + driven: (String) -> VfxDrivenValue?, + ): VfxGizmo { + val width = preview.viewportWidth + val height = preview.viewportHeight + if (width <= 1f || height <= 1f || runtime == null) return VfxGizmo.EMPTY + + val builder = Builder(preview, preview.panelMatrix(width, height), runtime.frame, driven) + if (showShape && node is VfxEmitterSpec) builder.shape(node.shape) + builder.moveArrows(runtime.parent?.frame, node) + return VfxGizmo(builder.lines, builder.handles) + } + + /** + * How far a drag of ([dx], [dy]) pixels moves [handle], in its own units: Shift is ten times finer, Ctrl rounds to a step. + */ + fun dragDistance(handle: VfxGizmoHandle, dx: Float, dy: Float, fine: Boolean, snap: Boolean): Float { + val lengthSquared = handle.screenAxisX * handle.screenAxisX + handle.screenAxisY * handle.screenAxisY + if (lengthSquared < 1.0e-4f) return 0f + var distance = (dx * handle.screenAxisX + dy * handle.screenAxisY) / lengthSquared + if (fine) distance *= FINE_FACTOR + if (snap) { + val tick = if (fine) FINE_TICK else TICK + distance = round(distance / tick) * tick + } + return distance + } + + private class Builder( + private val preview: VfxPreviewState, + private val matrix: Matrix4f, + private val frame: VfxFrame, + private val driven: (String) -> VfxDrivenValue?, + ) { + val lines = ArrayList() + val handles = ArrayList() + + private val point = MutableVec3f() + private val basis = preview.cameraBasis() + + private fun world(x: Float, y: Float, z: Float): Vector3f { + frame.transformPoint(Vec3f(x, y, z), point) + return Vector3f(point.x, point.y, point.z) + } + + fun segment(a: Vector3f, b: Vector3f, color: UiColor) { + val (start, end) = clipToNear(a, b) ?: return + val from = preview.project(matrix, start) ?: return + val to = preview.project(matrix, end) ?: return + if (!sane(from) || !sane(to)) return + lines += VfxGizmoLine(from.x, from.y, to.x, to.y, color) + } + + private fun clipToNear(a: Vector3f, b: Vector3f): Pair? { + val da = Vector3f(a).sub(basis.eye).dot(basis.forward) - NEAR_CLIP + val db = Vector3f(b).sub(basis.eye).dot(basis.forward) - NEAR_CLIP + if (da < 0f && db < 0f) return null + if (da >= 0f && db >= 0f) return a to b + val t = da / (da - db) + val cut = Vector3f(a).lerp(b, t) + return if (da < 0f) cut to b else a to cut + } + + private fun sane(point: Vector3f): Boolean = + point.x in -SCREEN_LIMIT..SCREEN_LIMIT && point.y in -SCREEN_LIMIT..SCREEN_LIMIT + + private fun polyline(points: List, color: UiColor, closed: Boolean) { + for (index in 0 until points.size - 1) segment(points[index], points[index + 1], color) + if (closed && points.size > 2) segment(points.last(), points.first(), color) + } + + private fun circle(radius: Float, plane: Int, height: Float, color: UiColor) { + val points = (0 until CIRCLE_SEGMENTS).map { index -> + val angle = index * (2.0 * PI / CIRCLE_SEGMENTS).toFloat() + val u = cos(angle) * radius + val v = sin(angle) * radius + when (plane) { + PLANE_XZ -> world(u, height, v) + PLANE_XY -> world(u, v, height) + else -> world(height, u, v) + } + } + polyline(points, color, closed = true) + } + + private fun handle( + id: String, + local: Vector3f, + direction: Vector3f, + color: UiColor, + readout: (Float) -> Float, + apply: (VfxNodeSpec, Float) -> VfxNodeSpec, + ) { + val base = world(local.x, local.y, local.z) + val tip = world(local.x + direction.x, local.y + direction.y, local.z + direction.z) + val from = preview.project(matrix, base) ?: return + val to = preview.project(matrix, tip) ?: return + if (!sane(from)) return + handles += VfxGizmoHandle(id, from.x, from.y, to.x - from.x, to.y - from.y, color, readout, apply) + } + + private fun current(property: String, channel: Int, value: VfxValue, fallback: Float): Float { + val keyed = driven(property)?.takeIf { it.drives(channel) } + return keyed?.value(channel) ?: value.constantOr(fallback) + } + + private fun editable(property: String, channel: Int, value: VfxValue): Boolean = + value is VfxValue.Const && driven(property)?.drives(channel) != true + + fun shape(shape: VfxShape) { + val radius = current(VfxAnimatables.SHAPE_RADIUS, 0, shape.radius, 0.5f) + val thickness = current(VfxAnimatables.SHAPE_THICKNESS, 0, shape.thickness, 1f) + val radiusEditable = editable(VfxAnimatables.SHAPE_RADIUS, 0, shape.radius) + + fun radiusHandle() { + if (!radiusEditable) return + handle( + "radius", Vector3f(radius, 0f, 0f), Vector3f(1f, 0f, 0f), HandleColor, + readout = { (radius + it).coerceAtLeast(0f) }, + ) { node, delta -> + node.withShape { it.copy(radius = VfxValue.Const((radius + delta).coerceAtLeast(0f))) } + } + } + + when (shape.kind) { + VfxShapeKind.POINT -> { + val size = 0.08f + segment(world(-size, 0f, 0f), world(size, 0f, 0f), ShapeColor) + segment(world(0f, -size, 0f), world(0f, size, 0f), ShapeColor) + segment(world(0f, 0f, -size), world(0f, 0f, size), ShapeColor) + } + + VfxShapeKind.SPHERE -> { + circle(radius, PLANE_XZ, 0f, ShapeColor) + circle(radius, PLANE_XY, 0f, ShapeColor) + circle(radius, PLANE_YZ, 0f, ShapeColor) + if (thickness < 1f) circle(radius * (1f - thickness), PLANE_XZ, 0f, ShapeFaint) + radiusHandle() + } + + VfxShapeKind.DISC -> { + circle(radius, PLANE_XZ, 0f, ShapeColor) + if (thickness < 1f) circle(radius * (1f - thickness), PLANE_XZ, 0f, ShapeFaint) + radiusHandle() + } + + VfxShapeKind.CONE -> cone(shape, radius) + VfxShapeKind.BOX -> box(shape) + VfxShapeKind.LINE -> line(shape) + } + } + + private fun cone(shape: VfxShape, radius: Float) { + val angle = current(VfxAnimatables.SHAPE_ANGLE, 0, shape.angle, 25f).coerceIn(0f, 89f) + val top = radius + tan(Math.toRadians(angle.toDouble())).toFloat() * CONE_PREVIEW_HEIGHT + circle(radius, PLANE_XZ, 0f, ShapeColor) + circle(top, PLANE_XZ, CONE_PREVIEW_HEIGHT, ShapeFaint) + for (index in 0 until 4) { + val around = index * (PI / 2.0).toFloat() + segment( + world(cos(around) * radius, 0f, sin(around) * radius), + world(cos(around) * top, CONE_PREVIEW_HEIGHT, sin(around) * top), + ShapeFaint, + ) + } + if (editable(VfxAnimatables.SHAPE_RADIUS, 0, shape.radius)) { + handle( + "radius", Vector3f(radius, 0f, 0f), Vector3f(1f, 0f, 0f), HandleColor, + readout = { (radius + it).coerceAtLeast(0f) }, + ) { node, delta -> + node.withShape { it.copy(radius = VfxValue.Const((radius + delta).coerceAtLeast(0f))) } + } + } + if (editable(VfxAnimatables.SHAPE_ANGLE, 0, shape.angle)) { + fun degreesFor(delta: Float): Float { + val spread = ((top + delta - radius) / CONE_PREVIEW_HEIGHT).coerceAtLeast(0f) + return Math.toDegrees(atan(spread).toDouble()).toFloat().coerceIn(0f, 89f) + } + handle( + "angle", Vector3f(top, CONE_PREVIEW_HEIGHT, 0f), Vector3f(1f, 0f, 0f), AngleColor, + readout = ::degreesFor, + ) { node, delta -> node.withShape { it.copy(angle = VfxValue.Const(degreesFor(delta))) } } + } + } + + private fun box(shape: VfxShape) { + val extents = shape.extents + val x = current(VfxAnimatables.SHAPE_EXTENTS, 0, extents.x, 0.5f) + val y = current(VfxAnimatables.SHAPE_EXTENTS, 1, extents.y, 0.5f) + val z = current(VfxAnimatables.SHAPE_EXTENTS, 2, extents.z, 0.5f) + val corners = listOf( + world(-x, -y, -z), world(x, -y, -z), world(x, -y, z), world(-x, -y, z), + world(-x, y, -z), world(x, y, -z), world(x, y, z), world(-x, y, z), + ) + polyline(corners.subList(0, 4), ShapeColor, closed = true) + polyline(corners.subList(4, 8), ShapeColor, closed = true) + for (index in 0 until 4) segment(corners[index], corners[index + 4], ShapeColor) + + if (editable(VfxAnimatables.SHAPE_EXTENTS, 0, extents.x)) { + handle( + "extent-x", + Vector3f(x, 0f, 0f), + Vector3f(1f, 0f, 0f), + AxisX, + { (x + it).coerceAtLeast(0f) }) { node, delta -> + node.withShape { it.copy(extents = it.extents.copy(x = VfxValue.Const((x + delta).coerceAtLeast(0f)))) } + } + } + if (editable(VfxAnimatables.SHAPE_EXTENTS, 1, extents.y)) { + handle( + "extent-y", + Vector3f(0f, y, 0f), + Vector3f(0f, 1f, 0f), + AxisY, + { (y + it).coerceAtLeast(0f) }) { node, delta -> + node.withShape { it.copy(extents = it.extents.copy(y = VfxValue.Const((y + delta).coerceAtLeast(0f)))) } + } + } + if (editable(VfxAnimatables.SHAPE_EXTENTS, 2, extents.z)) { + handle( + "extent-z", + Vector3f(0f, 0f, z), + Vector3f(0f, 0f, 1f), + AxisZ, + { (z + it).coerceAtLeast(0f) }) { node, delta -> + node.withShape { it.copy(extents = it.extents.copy(z = VfxValue.Const((z + delta).coerceAtLeast(0f)))) } + } + } + } + + private fun line(shape: VfxShape) { + val extents = shape.extents + val end = Vector3f( + current(VfxAnimatables.SHAPE_EXTENTS, 0, extents.x, 0.5f), + current(VfxAnimatables.SHAPE_EXTENTS, 1, extents.y, 0.5f), + current(VfxAnimatables.SHAPE_EXTENTS, 2, extents.z, 0.5f), + ) + segment(world(0f, 0f, 0f), world(end.x, end.y, end.z), ShapeColor) + + val length = end.length() + val editable = (0..2).all { channel -> + editable(VfxAnimatables.SHAPE_EXTENTS, channel, listOf(extents.x, extents.y, extents.z)[channel]) + } + if (!editable || length <= 1.0e-4f) return + + val direction = Vector3f(end).div(length) + handle("line-end", end, direction, HandleColor, { (length + it).coerceAtLeast(0f) }) { node, delta -> + val stretched = Vector3f(direction).mul((length + delta).coerceAtLeast(0f)) + node.withShape { + it.copy( + extents = it.extents.copy( + x = VfxValue.Const(stretched.x), + y = VfxValue.Const(stretched.y), + z = VfxValue.Const(stretched.z), + ) + ) + } + } + } + + fun moveArrows(parent: VfxFrame?, node: VfxNodeSpec) { + val origin = Vector3f(frame.position.x, frame.position.y, frame.position.z) + val length = Vector3f(origin).sub(basis.eye).length() * ARROW_SHARE + val keyed = driven(VfxAnimatables.POSITION) + + listOf(Vec3f.X_AXIS, Vec3f.Y_AXIS, Vec3f.Z_AXIS).forEachIndexed { index, axis -> + val color = listOf(AxisX, AxisY, AxisZ)[index] + val direction = MutableVec3f() + if (parent != null) parent.transformDirection(axis, direction) else direction.set(axis) + val scale = sqrt(direction.sqrLength()).takeIf { it > 1.0e-6f } ?: 1f + val unit = Vector3f(direction.x / scale, direction.y / scale, direction.z / scale) + val tip = Vector3f(unit).mul(length).add(origin) + segment(origin, tip, color) + if (keyed?.drives(index) == true) return@forEachIndexed + + val from = preview.project(matrix, origin) ?: return@forEachIndexed + val to = preview.project(matrix, tip) ?: return@forEachIndexed + if (!sane(to)) return@forEachIndexed + val perUnit = scale / length + val start = node.transform.position + val startValue = listOf(start.x, start.y, start.z)[index] + handles += VfxGizmoHandle( + id = "move-$index", + x = to.x, + y = to.y, + screenAxisX = (to.x - from.x) * perUnit, + screenAxisY = (to.y - from.y) * perUnit, + color = color, + readout = { startValue + it }, + ) { spec, delta -> + val moved = when (index) { + 0 -> Vec3f(start.x + delta, start.y, start.z) + 1 -> Vec3f(start.x, start.y + delta, start.z) + else -> Vec3f(start.x, start.y, start.z + delta) + } + spec.withCommon(transform = spec.transform.copy(position = moved)) + } + } + } + } + + private fun VfxNodeSpec.withShape(change: (VfxShape) -> VfxShape): VfxNodeSpec { + val emitter = this as? VfxEmitterSpec ?: return this + return emitter.withEmitter(shape = change(emitter.shape)) + } + + private const val CIRCLE_SEGMENTS = 40 + private const val PLANE_XZ = 0 + private const val PLANE_XY = 1 + private const val PLANE_YZ = 2 + private const val CONE_PREVIEW_HEIGHT = 1f + private const val NEAR_CLIP = 0.06f + private const val SCREEN_LIMIT = 8000f + + private const val ARROW_SHARE = 0.14f + + private const val FINE_FACTOR = 0.1f + private const val TICK = 0.1f + private const val FINE_TICK = 0.01f + + private val ShapeColor = UiColor(0.98f, 0.78f, 0.35f, 0.9f) + private val ShapeFaint = UiColor(0.98f, 0.78f, 0.35f, 0.45f) + private val HandleColor = UiColor(1f, 0.9f, 0.55f, 1f) + private val AngleColor = UiColor(0.75f, 0.55f, 1f, 1f) + private val AxisX = UiColor(0.91f, 0.36f, 0.36f, 1f) + private val AxisY = UiColor(0.45f, 0.82f, 0.4f, 1f) + private val AxisZ = UiColor(0.4f, 0.6f, 0.98f, 1f) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt new file mode 100644 index 000000000..5c5439b54 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt @@ -0,0 +1,337 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.VertexSorting +import net.minecraft.client.Minecraft +import org.joml.Matrix4f +import org.joml.Vector3f +import org.joml.Vector4f +import ru.hollowhorizon.hollowengine.client.handlers.TickHandler +import ru.hollowhorizon.hollowengine.client.render.DebugLines +import ru.hollowhorizon.hollowengine.client.ui.SpringZoom +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.vfx.VfxBudget +import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance +import ru.hollowhorizon.hollowengine.client.vfx.VfxPlaneEnvironment +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxDrawCollector +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadDraw +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadRenderer +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxView +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect +import kotlin.math.ceil +import kotlin.math.cos +import kotlin.math.sin + +/** + * The preview of the effect being edited: an orbit camera with perspective, a floor, and one + * playing instance. + */ +@Stable +class VfxPreviewState { + var yaw by mutableStateOf(35f) + var pitch by mutableStateOf(22f) + private val zoomSpring = SpringZoom(4.5f, MIN_DISTANCE, MAX_DISTANCE, perNotch = ZOOM_PER_NOTCH) + val distance: Float get() = zoomSpring.value + var targetX by mutableStateOf(0f) + var targetY by mutableStateOf(0.7f) + var targetZ by mutableStateOf(0f) + + var showFloor by mutableStateOf(true) + var showShape by mutableStateOf(true) + + /** The viewport size in panel pixels, which gizmo projects into. */ + var viewportWidth by mutableStateOf(0f) + var viewportHeight by mutableStateOf(0f) + + /** How far the effect has been simulated. */ + var time by mutableStateOf(0f) + private set + + /** Bumped whenever [instance] is replaced, so what reads its nodes knows to look again. */ + var revision by mutableStateOf(0) + private set + + /** Particles alive, refreshed by the editor clock rather than read from the instance by the UI. */ + var liveParticles by mutableStateOf(0) + private set + + var instance: VfxInstance? = null + private set + + private var builtFor: VfxEffect? = null + private var lastGameTime = Float.NaN + private val draws = ArrayList() + + /** + * Brings the playing instance in line with [effect]. Returns whether it had to be rebuilt. + */ + fun sync(effect: VfxEffect, asset: String): Boolean { + if (builtFor === effect) return false + val playing = instance + val previous = builtFor + builtFor = effect + if (playing != null && previous != null && playing.adoptPlacement(effect)) { + revision++ + return false + } + + val at = time + instance = VfxInstance(effect, asset, VfxPlaneEnvironment(0.0), seed = PREVIEW_SEED).also { it.update(0f) } + revision++ + time = 0f + lastGameTime = Float.NaN + if (at in 0f..CATCH_UP_LIMIT) seek(at) else refreshCount() + return true + } + + fun restart() { + instance?.restart() + time = 0f + lastGameTime = Float.NaN + refreshCount() + } + + /** Seconds the effect has been running for, measured against the game clock. */ + fun deltaSinceLastFrame(): Float { + val now = TickHandler.gameTime + val dt = when { + lastGameTime.isNaN() -> 0f + else -> ((now - lastGameTime) / TICKS_PER_SECOND).coerceIn(0f, MAX_STEP) + } + lastGameTime = now + return dt + } + + /** + * Moves the effect to [seconds]. + */ + fun seek(seconds: Float) { + val target = seconds.coerceAtLeast(0f) + if (target < time) restart() + + val distance = target - time + if (distance > CATCH_UP_EPSILON) { + val steps = ceil(distance / CATCH_UP_STEP).toInt().coerceIn(1, MAX_CATCH_UP_STEPS) + val step = distance / steps + repeat(steps) { advanceBy(step) } + } + time = target + } + + private var pendingSeek = Float.NaN + + /** + * Asks for [seek] on the next frame. + */ + fun requestSeek(seconds: Float) { + pendingSeek = seconds + } + + /** Runs the seek asked for since the last frame, if any; returns whether there was one. */ + fun applyPendingSeek(): Boolean { + val target = pendingSeek + if (target.isNaN()) return false + pendingSeek = Float.NaN + seek(target) + return true + } + + /** Advances the effect by [dt] seconds. */ + fun advanceBy(dt: Float) { + val playing = instance ?: return + + playing.partialTick = TickHandler.partialTick + playing.gameTime = TickHandler.gameTime + playing.budget = VfxBudget.share(1) + playing.update(dt) + time = playing.time + refreshCount() + } + + private fun refreshCount() { + val count = instance?.particleCount ?: 0 + if (count != liveParticles) liveParticles = count + } + + private var dragYaw = 0f + private var dragPitch = 0f + private val dragTarget = Vector3f() + + /** Remembers the camera as it was when a drag started; drag is measured from here. */ + fun beginCameraDrag() { + dragYaw = yaw + dragPitch = pitch + dragTarget.set(targetX, targetY, targetZ) + } + + fun orbit(totalX: Float, totalY: Float) { + yaw = (dragYaw - totalX * ORBIT_SPEED) % 360f + pitch = (dragPitch + totalY * ORBIT_SPEED).coerceIn(-89f, 89f) + } + + /** Slides point, that camera circles around, along the screen, by a share of the distance. */ + fun pan(totalX: Float, totalY: Float) { + val basis = cameraBasis() + val scale = distance * PAN_SPEED + targetX = dragTarget.x + (-basis.right.x * totalX + basis.up.x * totalY) * scale + targetY = dragTarget.y + (-basis.right.y * totalX + basis.up.y * totalY) * scale + targetZ = dragTarget.z + (-basis.right.z * totalX + basis.up.z * totalY) * scale + } + + /** One wheel notch, scrolling up moves the camera back. */ + fun zoom(scrollY: Float) = zoomSpring.scroll(scrollY) + + fun advanceCamera(frameNanos: Long) = zoomSpring.advance(frameNanos) + + class Basis(val eye: Vector3f, val right: Vector3f, val up: Vector3f, val forward: Vector3f) + + /** Where the camera is and where it looks, in effect space. */ + fun cameraBasis(): Basis { + val yawRad = Math.toRadians(yaw.toDouble()).toFloat() + val pitchRad = Math.toRadians(pitch.toDouble()).toFloat() + val back = Vector3f(cos(pitchRad) * sin(yawRad), sin(pitchRad), cos(pitchRad) * cos(yawRad)) + val eye = Vector3f(targetX, targetY, targetZ).add(Vector3f(back).mul(distance)) + val forward = Vector3f(back).negate() + val right = Vector3f(forward).cross(Vector3f(0f, 1f, 0f)).normalize() + val up = Vector3f(right).cross(forward).normalize() + return Basis(eye, right, up, forward) + } + + fun viewMatrix(): Matrix4f { + val basis = cameraBasis() + return Matrix4f().setLookAt( + basis.eye.x, basis.eye.y, basis.eye.z, + targetX, targetY, targetZ, + 0f, 1f, 0f, + ) + } + + fun perspective(width: Float, height: Float): Matrix4f = + Matrix4f().setPerspective(FIELD_OF_VIEW, (width / height.coerceAtLeast(1f)).coerceAtLeast(0.01f), NEAR, FAR) + + /** + * Normalized device coordinates to panel pixels. + */ + private fun pixels(rect: UiRect): Matrix4f { + val halfWidth = rect.width / 2f + val halfHeight = rect.height / 2f + return Matrix4f( + halfWidth, 0f, 0f, 0f, + 0f, -halfHeight, 0f, 0f, + 0f, 0f, -PANEL_DEPTH, 0f, + rect.x + halfWidth, rect.y + halfHeight, 0f, 1f, + ) + } + + /** Effect space to panel pixels, before the perspective division. */ + fun panelMatrix(width: Float, height: Float): Matrix4f = + pixels(UiRect(0f, 0f, width, height)).mul(perspective(width, height)).mul(viewMatrix()) + + /** Where [point] lands in the panel, or null when it is behind the camera. */ + fun project(matrix: Matrix4f, point: Vector3f): Vector3f? { + val clip = matrix.transform(Vector4f(point, 1f)) + if (clip.w <= NEAR) return null + return Vector3f(clip.x / clip.w, clip.y / clip.w, clip.w) + } + + /** Draws the floor and the effect into [rect]; called from a `drawGl` block. */ + fun render(rect: UiRect, stack: PoseStack) { + val playing = instance ?: return + if (rect.width <= 1f || rect.height <= 1f) return + + val view = viewMatrix() + val projection = + Matrix4f(RenderSystem.getProjectionMatrix()).mul(RenderSystem.getModelViewMatrix()).mul(stack.last().pose()) + .mul(pixels(rect)).mul(perspective(rect.width, rect.height)) + + val savedProjection = Matrix4f(RenderSystem.getProjectionMatrix()) + val savedSorting = RenderSystem.getVertexSorting() + val modelView = RenderSystem.getModelViewStack() + modelView.pushMatrix() + modelView.identity() + RenderSystem.applyModelViewMatrix() + RenderSystem.setProjectionMatrix(projection, VertexSorting.DISTANCE_TO_ORIGIN) + + try { + val viewStack = PoseStack() + viewStack.mulPose(view) + + val buffers = Minecraft.getInstance().renderBuffers().bufferSource() + if (showFloor) { + val lines = DebugLines.batch(buffers, viewStack, DebugLines.PANEL) + drawFloor(lines) + buffers.endBatch(DebugLines.PANEL) + } + + VfxDrawCollector.renderMeshes(playing, view) + buffers.endBatch() + + draws.clear() + VfxDrawCollector.collectQuads(playing, Matrix4f(), draws) + if (draws.isNotEmpty()) { + val basis = cameraBasis() + VfxQuadRenderer.render( + draws, + VfxView( + modelView = view, + projection = projection, + right = basis.right, + up = basis.up, + eye = basis.eye, + ), + ) + draws.clear() + } + } finally { + RenderSystem.setProjectionMatrix(savedProjection, savedSorting) + modelView.popMatrix() + RenderSystem.applyModelViewMatrix() + } + } + + private fun drawFloor(lines: DebugLines.Batch) { + val half = FLOOR_HALF_SIZE + for (step in -half..half) { + val offset = step.toFloat() + val color = if (step == 0) AXIS_COLOR else GRID_COLOR + lines.line(Vec3f(-half.toFloat(), 0f, offset), Vec3f(half.toFloat(), 0f, offset), color) + lines.line(Vec3f(offset, 0f, -half.toFloat()), Vec3f(offset, 0f, half.toFloat()), color) + } + } + + private companion object { + const val TICKS_PER_SECOND = 20f + const val MAX_STEP = 0.25f + + const val PREVIEW_SEED = 0x5EED + + val FIELD_OF_VIEW = Math.toRadians(50.0).toFloat() + const val NEAR = 0.05f + const val FAR = 200f + + const val PANEL_DEPTH = 500f + + const val ORBIT_SPEED = 0.35f + const val PAN_SPEED = 0.0025f + const val MIN_DISTANCE = 0.3f + const val MAX_DISTANCE = 60f + const val ZOOM_PER_NOTCH = 1.1f + + const val FLOOR_HALF_SIZE = 6 + + const val CATCH_UP_STEP = 1f / 30f + const val CATCH_UP_EPSILON = 1.0e-4f + const val MAX_CATCH_UP_STEPS = 90 + + const val CATCH_UP_LIMIT = 4f + + const val GRID_COLOR = 0x40AFC4E0 + const val AXIS_COLOR = 0x80DCBF73.toInt() + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt new file mode 100644 index 000000000..7a7cccfb1 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt @@ -0,0 +1,266 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.* +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.common.utils.Color +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.* + +/** + * Puts the effect timeline into the editor timeline and takes it back out. + */ +class VfxTimelineSession( + private val document: HollowIdeVfxDocument, + private val preview: VfxPreviewState, +) { + val timeline = TimelineController() + + /** Properties the author asked for, as `node|property`. */ + private val pinned = LinkedHashSet() + + /** Properties the author took off the list; they stay off even with keys. */ + private val hidden = HashSet() + + /** Nodes that were selected at some point, so their group row stays. */ + private val touched = LinkedHashSet() + + private var suppressCommit = false + private var builtFor: Int = -1 + private var signature: List = emptyList() + + init { + timeline.onChanged = { + commit() + applyListing() + } + timeline.onTimeChanged = { preview.requestSeek(timeline.currentTime) } + timeline.onHideProperty = { property -> hide(property.id) } + timeline.onHideGroup = { group -> hideNode(group) } + } + + /** Rebuilds the tracks when the node tree, or the properties it offers, changed under the timeline. */ + fun sync() { + if (builtFor == document.revision) return + builtFor = document.revision + + val next = signatureOf() + if (next == signature && timeline.groups.isNotEmpty()) return + load() + } + + /** Resets the editor state and builds it again from the file. */ + fun load() { + suppressCommit = true + timeline.groups.clear() + + val effect = document.effect + timeline.workAreaEnd = effect.timeline.duration.coerceAtLeast(0.1f) + + val names = effect.walk().groupingBy { it.name }.eachCount() + effect.walk().forEach { node -> + val label = if ((names[node.name] ?: 0) > 1) "${node.name} (${node.id})" else node.name + VfxAnimatables.forNode(node).forEach { animatable -> + val property = timeline.addProperty(listOf(label), buildProperty(node, animatable)) + fill(property, effect.timeline.track(node.id, animatable.id)) + } + } + + signature = signatureOf() + builtFor = document.revision + suppressCommit = false + applyListing() + } + + /** Lists the property of [nodeId] the author is editing, so its keys are one glance away. */ + fun focus(nodeId: String, property: String) { + val id = propertyId(nodeId, property) + touched += nodeId + pinned += id + hidden -= id + applyListing() + } + + /** Keeps the row of [nodeId] once it has been selected. */ + fun touch(nodeId: String) { + if (touched.add(nodeId)) applyListing() + } + + private fun hide(id: String) { + pinned -= id + hidden += id + applyListing() + } + + private fun hideNode(group: TrackGroup) { + val properties = group.allProperties() + val node = properties.firstOrNull()?.let(::nodeOf) ?: return + touched -= node + properties.forEach { property -> + pinned -= property.id + hidden += property.id + } + applyListing() + } + + /** Decides which rows track list shows. */ + fun applyListing() { + timeline.groups.forEach { group -> applyListing(group) } + } + + private fun applyListing(group: TrackGroup) { + group.children.forEach(::applyListing) + group.properties.forEach { property -> + val keyed = property.curves.any { it.keyframes.isNotEmpty() } + property.isListed = property.id !in hidden && (keyed || property.id in pinned) + } + val node = group.properties.firstOrNull()?.let(::nodeOf) + group.isListed = node != null && node in touched + } + + /** Writes whatever the editor holds back into the file. */ + fun commit() { + if (suppressCommit) return + + val tracks = timeline.allProperties().mapNotNull { property -> + val node = nodeOf(property) ?: return@mapNotNull null + val animatable = animatableOf(property) ?: return@mapNotNull null + val curves = property.curves.mapIndexedNotNull { channel, curve -> + if (curve.keyframes.isEmpty()) null + else VfxTrackCurve(channel, curve.isVisible, curve.keyframes.map { key -> key.toStored(curve) }) + } + if (curves.isEmpty()) null else VfxTrack(node, animatable, curves) + } + + val spec = VfxTimelineSpec( + duration = timeline.workAreaEnd, + loop = document.effect.timeline.loop, + tracks = tracks, + ) + if (spec == document.effect.timeline) return + + suppressCommit = true + document.edit(history = false) { it.copy(timeline = spec) } + builtFor = document.revision + suppressCommit = false + } + + /** What the timeline rows depend on, which nodes there are, what they are called, what they offer. */ + private fun signatureOf(): List = document.effect.walk().map { node -> + Triple(node.id, node.name, VfxAnimatables.forNode(node).map { it.id }) + } + + private fun buildProperty(node: VfxNodeSpec, animatable: VfxAnimatable): AnimProperty<*> { + val id = propertyId(node.id, animatable.id) + val title = animatable.titleKey.lang + val name = animatable.ownerTitleKey?.let { "${it.lang} · $title" } ?: title + val defaults = animatable.read(node) + + return when (animatable.kind) { + VfxAnimatableKind.TOGGLE -> AnimProperty(id, name, TogglePropertyType, defaults.getOrElse(0) { 1f }) + VfxAnimatableKind.FLOAT -> AnimProperty(id, name, FloatPropertyType(name), defaults.getOrElse(0) { 0f }) + VfxAnimatableKind.VEC3 -> AnimProperty(id, name, TranslationPropertyType(), vector(defaults)) + VfxAnimatableKind.ROTATION -> AnimProperty( + id, + name, + RotationPropertyType(RotationMode.EULER), + vector(defaults), + ) + + VfxAnimatableKind.COLOR -> AnimProperty(id, name, ColorChannelsPropertyType, defaults.copyOf(4)) + } + } + + private fun vector(values: FloatArray) = + Vec3f(values.getOrElse(0) { 0f }, values.getOrElse(1) { 0f }, values.getOrElse(2) { 0f }) + + private fun fill(property: AnimProperty<*>, track: VfxTrack?) { + if (track == null) return + + track.curves.forEach { stored -> + val curve = property.curves.getOrNull(stored.channel) ?: return@forEach + curve.isVisible = stored.visible + stored.keys.forEach { key -> curve.keyframes.add(key.toEditor()) } + curve.sort() + } + } + + private fun propertyId(node: String, property: String) = "$node|$property" + + /** The node a timeline row belongs to, as packed into its id. */ + private fun nodeOf(property: AnimProperty<*>): String? = property.id.split('|', limit = 2).getOrNull(0) + + private fun animatableOf(property: AnimProperty<*>): String? = property.id.split('|', limit = 2).getOrNull(1) +} + +/** On or off, held between keys; the editor draws it as a step curve and never interpolates it. */ +private object TogglePropertyType : PropertyType { + override val id = "vfx_toggle" + + override val channels = listOf( + ChannelSpec( + name = "On", + color = ChannelColors.SCALAR, + sampling = ChannelSampling.DISCRETE, + valueOptions = listOf( + ChannelValueOption(0f, "hollowengine.gui.vfx.off"), + ChannelValueOption(1f, "hollowengine.gui.vfx.on"), + ), + ), + ) + + override fun decompose(value: Float, into: FloatArray) { + into[0] = value + } + + override fun compose(values: FloatArray): Float = if (values[0] >= 0.5f) 1f else 0f +} + +/** Red, green, blue and alpha as four curves, the way a color is keyed. */ +private object ColorChannelsPropertyType : PropertyType { + override val id = "vfx_color" + + override val channels = listOf( + ChannelSpec(name = "R", color = Color("E06C75")), + ChannelSpec(name = "G", color = Color("98C379")), + ChannelSpec(name = "B", color = Color("61AFEF")), + ChannelSpec(name = "A", color = Color("ABB2BF")), + ) + + override fun decompose(value: FloatArray, into: FloatArray) { + for (channel in 0 until 4) into[channel] = value.getOrElse(channel) { 1f } + } + + override fun compose(values: FloatArray): FloatArray = values.copyOf(4) +} + +internal fun VfxKey.toEditor(): Keyframe = Keyframe( + time = time, + value = value, + interpolation = when (interpolation) { + VfxInterpolation.CONSTANT -> KeyInterpolation.CONSTANT + VfxInterpolation.LINEAR -> KeyInterpolation.LINEAR + VfxInterpolation.BEZIER -> KeyInterpolation.BEZIER + }, + handleMode = HandleMode.FREE, + incoming = KeyTangent(inTime, inValue), + outgoing = KeyTangent(outTime, outValue), +) + +/** A key as the file stores it. */ +internal fun Keyframe.toStored(curve: ChannelCurve): VfxKey { + val tangents = curve.effectiveTangents(this) + return VfxKey( + time = time, + value = value, + interpolation = when (interpolation) { + KeyInterpolation.CONSTANT -> VfxInterpolation.CONSTANT + KeyInterpolation.LINEAR -> VfxInterpolation.LINEAR + KeyInterpolation.BEZIER -> VfxInterpolation.BEZIER + }, + inTime = tangents.incoming.time, + inValue = tangents.incoming.value, + outTime = tangents.outgoing.time, + outValue = tangents.outgoing.value, + ) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/VanillaModelEditorPanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/VanillaModelEditorPanel.kt index 0d95610ba..76f225241 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/VanillaModelEditorPanel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/VanillaModelEditorPanel.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.* import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack import com.mojang.blaze3d.vertex.VertexSorting +import kotlinx.coroutines.isActive import net.minecraft.client.Minecraft import net.minecraft.client.renderer.LightTexture import net.minecraft.client.renderer.Sheets @@ -81,6 +82,9 @@ private fun VanillaModelToggle(icon: String, tooltip: String, active: Boolean, o @Composable private fun VanillaModelPreview(state: VanillaModelViewerState, modifier: Modifier = Modifier) { + LaunchedEffect(state) { + while (isActive) withFrameNanos(state.zoomSpring::advance) + } Box( modifier = Modifier .input(hoverable = true, draggable = true) @@ -97,8 +101,7 @@ private fun VanillaModelPreview(state: VanillaModelViewerState, modifier: Modifi event.consume() } .onScroll { event -> - val factor = if (event.scrollY > 0f) 0.9f else 1.1f - state.zoom = (state.zoom * factor).coerceIn(0.1f, 10f) + state.zoomSpring.scroll(event.scrollY) event.consume() } .drawBehind(key = state) { @@ -116,7 +119,8 @@ private class VanillaModelViewerState( ) { var yaw by mutableStateOf(35f) var pitch by mutableStateOf(25f) - var zoom by mutableStateOf(0.72f) + val zoomSpring = SpringZoom(0.72f, min = 0.1f, max = 10f, perNotch = ModelZoomPerNotch) + val zoom: Float get() = zoomSpring.value var offsetX by mutableStateOf(0f) var offsetY by mutableStateOf(0f) var showGrid by mutableStateOf(true) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt index 0fd777a49..792e6ca6f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt @@ -50,21 +50,6 @@ data class ChannelSpec( } } -/** How a layer's value is folded into layers below it produced. */ -enum class BlendMode { - /** Replaces the value below it (scaled by the layer's weight). */ - OVERRIDE, - - /** Adds on top, the mode for shakes, offsets and corrections. */ - ADD, - - /** Subtracts, the inverse of [ADD]. */ - SUBTRACT, - - /** Scales the value below it. */ - MULTIPLY, -} - /** A scalar keyframe on one channel curve. */ class Keyframe( var time: Float, @@ -203,20 +188,6 @@ class ChannelCurve(val spec: ChannelSpec) { } } -class AnimLayer(name: String, val channels: List) { - var nameState by mutableStateOf(name) - var isVisible by mutableStateOf(true) - var isLocked by mutableStateOf(false) - var isExpanded by mutableStateOf(true) - var blendMode by mutableStateOf(BlendMode.OVERRIDE) - var weight by mutableStateOf(1f) - - val keyframes: List get() = channels.flatMap { it.keyframes } - - fun curveOf(keyframe: Keyframe): ChannelCurve? = - channels.firstOrNull { curve -> curve.keyframes.any { it === keyframe } } -} - data class ChannelBounds(val minimum: Float? = null, val maximum: Float? = null) { fun clamp(value: Float): Float { var result = value @@ -230,6 +201,9 @@ data class ChannelBounds(val minimum: Float? = null, val maximum: Float? = null) } } +/** + * One animated property: a name, a type, and one curve per scalar component of it. + */ class AnimProperty( val id: String, name: String, @@ -241,62 +215,64 @@ class AnimProperty( var isExpanded by mutableStateOf(true) + /** Whether the curves of this property are drawn in the graph; it does not change the value. */ + var isVisible by mutableStateOf(true) + + /** A locked property cannot be edited, which is what keeps a finished track finished. */ + var isLocked by mutableStateOf(false) + + var isListed by mutableStateOf(true) + var type: PropertyType by mutableStateOf(type) private set - val layers = mutableStateListOf() + var curves: List = type.channels.map { ChannelCurve(it) } + private set val channels: List get() = type.channels - fun addLayer(name: String = "Layer ${layers.size + 1}", blendMode: BlendMode = BlendMode.OVERRIDE): AnimLayer { - val layer = AnimLayer(name, type.channels.map { ChannelCurve(it) }) - layer.blendMode = when { - layers.isEmpty() -> BlendMode.OVERRIDE - blendMode in type.blendModes -> blendMode - else -> type.blendModes.first() - } - layers.add(layer) - return layer - } + val keyframes: List get() = curves.flatMap { it.keyframes } fun retype(next: PropertyType) { if (next.channels == type.channels) { type = next return } - val resampled = layers.map { layer -> resample(layer, type, next) } + + val resampled = resample(type, next) type = next - val rebuilt = layers.mapIndexed { index, layer -> - val channels = next.channels.mapIndexed { channel, spec -> - ChannelCurve(spec).also { it.keyframes.addAll(resampled[index][channel]) } - } - AnimLayer(layer.nameState, channels).also { - it.blendMode = layer.blendMode - it.weight = layer.weight - it.isVisible = layer.isVisible - it.isLocked = layer.isLocked - it.isExpanded = layer.isExpanded - } + curves = next.channels.mapIndexed { channel, spec -> + ChannelCurve(spec).also { curve -> curve.keyframes.addAll(resampled[channel]) } } - layers.clear() - layers.addAll(rebuilt) } @Suppress("UNCHECKED_CAST") - internal fun restoreState(type: PropertyType<*>, layers: List) { + internal fun restoreState(type: PropertyType<*>, curves: List) { this.type = type as PropertyType - this.layers.clear() - this.layers.addAll(layers) + this.curves = curves } - private fun resample(layer: AnimLayer, from: PropertyType, to: PropertyType): List> { - val times = layer.channels.flatMap { curve -> curve.keyframes.map { it.time } } + /** + * Takes over the curves of [other], which has to be of the same type. + * + * Used when a property is rebound to a new target and its keys have to survive the swap. + */ + fun adoptCurves(other: AnimProperty<*>) { + if (other.type.channels != type.channels) return + curves = other.curves + isVisible = other.isVisible + isLocked = other.isLocked + } + + /** Keyframes carried over when the property changes type, such as euler to quaternion. */ + private fun resample(from: PropertyType, to: PropertyType): List> { + val times = curves.flatMap { curve -> curve.keyframes.map { it.time } } .distinctBy { round(it / ChannelCurve.KEY_TIME_EPSILON) }.sorted() val channelValues = to.channels.indices.map { mutableListOf() } val buffer = FloatArray(from.channels.size) times.forEach { time -> from.decompose(defaultValue, buffer) - layer.channels.forEachIndexed { index, curve -> + curves.forEachIndexed { index, curve -> buffer[index] = curve.valueAt(time, buffer[index]) } val value = from.compose(buffer) @@ -315,24 +291,14 @@ class AnimProperty( val size = type.channels.size val values = FloatArray(size) type.decompose(defaultValue, values) - layers.forEach { layer -> - if (!layer.isVisible) return@forEach - val weight = layer.weight - if (weight == 0f) return@forEach - for (channel in 0 until size) { - val curve = layer.channels.getOrNull(channel) ?: continue - if (!curve.isVisible) continue - val base = values[channel] - if (curve.spec.sampling == ChannelSampling.DISCRETE) { - values[channel] = curve.spec.normalize(curve.valueAt(time, base)) - } else { - val neutral = layer.blendMode.neutral(base) - val sampled = curve.valueAt(time, neutral) - values[channel] = layer.blendMode.blend(base, sampled, weight) - } - } + for (channel in 0 until size) { + val curve = curves.getOrNull(channel) ?: continue + val base = values[channel] + val sampled = curve.valueAt(time, base) + values[channel] = type.bounds(channel).clamp( + if (curve.spec.sampling == ChannelSampling.DISCRETE) curve.spec.normalize(sampled) else sampled + ) } - for (channel in 0 until size) values[channel] = type.bounds(channel).clamp(values[channel]) return type.compose(values) } @@ -340,21 +306,8 @@ class AnimProperty( apply?.invoke(valueAt(time)) } - fun curveOf(keyframe: Keyframe): ChannelCurve? = layers.firstNotNullOfOrNull { it.curveOf(keyframe) } - -} - -private fun BlendMode.neutral(base: Float): Float = when (this) { - BlendMode.OVERRIDE -> base - BlendMode.ADD, BlendMode.SUBTRACT -> 0f - BlendMode.MULTIPLY -> 1f -} - -private fun BlendMode.blend(base: Float, value: Float, weight: Float): Float = when (this) { - BlendMode.OVERRIDE -> base + (value - base) * weight - BlendMode.ADD -> base + value * weight - BlendMode.SUBTRACT -> base - value * weight - BlendMode.MULTIPLY -> base * (1f + (value - 1f) * weight) + fun curveOf(keyframe: Keyframe): ChannelCurve? = + curves.firstOrNull { curve -> curve.keyframes.any { it === keyframe } } } interface PropertyType { @@ -364,7 +317,6 @@ interface PropertyType { fun bounds(channel: Int): ChannelBounds = ChannelBounds.Unbounded val isChannelSpaceLinear: Boolean get() = true - val blendModes: Set get() = setOf(BlendMode.OVERRIDE, BlendMode.ADD, BlendMode.SUBTRACT) fun decompose(value: T, into: FloatArray) fun compose(values: FloatArray): T @@ -376,6 +328,13 @@ class TrackGroup(name: String) { var isLocked by mutableStateOf(false) var isVisible by mutableStateOf(true) + /** Whether the group row stays in the list when none of its properties is listed. */ + var isListed by mutableStateOf(true) + + /** Whether anything of this group has a row, which is what decides whether the group has one. */ + val hasListedContent: Boolean + get() = isListed || properties.any { it.isListed } || children.any { it.hasListedContent } + val children = mutableStateListOf() val properties = mutableStateListOf>() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt index a09733c75..557d2e778 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt @@ -51,8 +51,6 @@ class TimelineController { var isWorkAreaSelected by mutableStateOf(false) var isCameraPreviewEnabled by mutableStateOf(false) - var activeLayer by mutableStateOf(null) - val history = TimelineHistory(this) var onChanged: (() -> Unit)? = null @@ -61,6 +59,9 @@ class TimelineController { var captureExtraState: (() -> Any?)? = null var restoreExtraState: ((Any?) -> Unit)? = null + var onHideProperty: ((AnimProperty<*>) -> Unit)? = null + var onHideGroup: ((TrackGroup) -> Unit)? = null + fun group(path: List): TrackGroup { require(path.isNotEmpty()) { "Timeline group path must not be empty" } var currentGroups: MutableList = groups @@ -74,35 +75,26 @@ class TimelineController { fun addProperty(path: List, property: AnimProperty): AnimProperty { group(path).properties.add(property) - if (property.layers.isEmpty()) property.addLayer(BASE_LAYER_NAME) - if (activeLayer == null) activeLayer = property.layers.firstOrNull() return property } fun allProperties(): List> = groups.flatMap { it.allProperties() } - fun allLayers(): List = allProperties().flatMap { it.layers } - - fun allCurves(): List = allLayers().flatMap { it.channels } + fun allCurves(): List = allProperties().flatMap { it.curves } - fun propertyOf(layer: AnimLayer): AnimProperty<*>? = allProperties().firstOrNull { layer in it.layers } + fun propertyOf(curve: ChannelCurve): AnimProperty<*>? = + allProperties().firstOrNull { property -> property.curves.any { it === curve } } - fun targetLayer(property: AnimProperty<*>): AnimLayer? { - val active = activeLayer - if (active != null && active in property.layers) return active - return property.layers.firstOrNull() - } - - fun layerOf(keyframe: Keyframe): AnimLayer? = allLayers().firstOrNull { it.curveOf(keyframe) != null } + fun propertyOf(keyframe: Keyframe): AnimProperty<*>? = + allProperties().firstOrNull { it.curveOf(keyframe) != null } fun curveOf(keyframe: Keyframe): ChannelCurve? = allCurves().firstOrNull { curve -> curve.keyframes.any { it === keyframe } } - fun isLocked(layer: AnimLayer): Boolean { - if (layer.isLocked) return true - val owner = propertyOf(layer) ?: return false - return groupOf(owner)?.let { isLocked(it) } == true + fun isLocked(property: AnimProperty<*>): Boolean { + if (property.isLocked) return true + return groupOf(property)?.let { isLocked(it) } == true } fun groupOf(property: AnimProperty<*>): TrackGroup? { @@ -152,6 +144,15 @@ class TimelineController { onTimeChanged?.invoke() } + /** + * Moves the playhead to where whatever is being edited has actually got to. + */ + fun followPlayhead(time: Float) { + val end = workAreaEnd + currentTime = if (end > 0f) time.mod(end) else time.coerceAtLeast(0f) + allProperties().forEach { it.update(currentTime) } + } + fun applyCameraPreviewEnabled(isEnabled: Boolean) { isCameraPreviewEnabled = isEnabled onPreviewChanged?.invoke() @@ -223,9 +224,9 @@ class TimelineController { fun deleteSelectedKeyframes() { edit("Delete keyframes") { val doomed = selectedKeyframes.toList() - allLayers().forEach { layer -> - if (isLocked(layer)) return@forEach - layer.channels.forEach { curve -> + allProperties().forEach { property -> + if (isLocked(property)) return@forEach + property.curves.forEach { curve -> curve.keyframes.removeAll { key -> doomed.any { it === key } } } } @@ -262,9 +263,9 @@ class TimelineController { val delta = value - reference.value edit("Edit keyframe value") { selectedKeyframes.forEach { key -> - val layer = layerOf(key) ?: return@forEach - if (isLocked(layer)) return@forEach - val curve = layer.curveOf(key) ?: return@forEach + val property = propertyOf(key) ?: return@forEach + if (isLocked(property)) return@forEach + val curve = property.curveOf(key) ?: return@forEach val candidate = if (referenceCurve.spec.sampling == ChannelSampling.DISCRETE) { if (curve.spec.valueOptions != referenceCurve.spec.valueOptions) return@forEach value @@ -276,13 +277,11 @@ class TimelineController { } } - fun addKeyframes(layer: AnimLayer, time: Float): List { - if (isLocked(layer)) return emptyList() + fun addKeyframes(property: AnimProperty<*>, time: Float): List { + if (isLocked(property)) return emptyList() return edited("Add keyframe") { - val property = propertyOf(layer) - layer.channels.mapIndexed { channel, curve -> - val fallback = property?.let { defaultChannel(it, channel) } ?: 0f - setKey(curve, time, curve.valueAt(time, fallback), selectKey = false) + property.curves.mapIndexed { channel, curve -> + setKey(curve, time, curve.valueAt(time, defaultChannel(property, channel)), selectKey = false) }.also { select(it, additive = false) } } } @@ -321,8 +320,8 @@ class TimelineController { val created = mutableListOf() clipboard.forEach { clip -> if (live.none { it === clip.curve }) return@forEach - val layer = layerOfCurve(clip.curve) - if (layer != null && isLocked(layer)) return@forEach + val owner = propertyOf(clip.curve) + if (owner != null && isLocked(owner)) return@forEach val target = (time + clip.offset).coerceIn(0f, workAreaEnd) clip.curve.keyframes.removeAll { abs(it.time - target) <= KEYFRAME_TIME_EPSILON } val key = clip.state.toKeyframe().also { @@ -339,18 +338,12 @@ class TimelineController { private fun boundsOf(curve: ChannelCurve?): ChannelBounds { curve ?: return ChannelBounds.Unbounded - val property = allProperties().firstOrNull { owner -> - owner.layers.any { layer -> layer.channels.any { it === curve } } - } ?: return ChannelBounds.Unbounded - val channel = property.layers.firstNotNullOfOrNull { layer -> - layer.channels.indexOfFirst { it === curve }.takeIf { it >= 0 } - } ?: return ChannelBounds.Unbounded + val property = propertyOf(curve) ?: return ChannelBounds.Unbounded + val channel = property.curves.indexOfFirst { it === curve }.takeIf { it >= 0 } + ?: return ChannelBounds.Unbounded return property.bounds(channel) } - private fun layerOfCurve(curve: ChannelCurve): AnimLayer? = - allLayers().firstOrNull { layer -> layer.channels.any { it === curve } } - fun duplicateSelectedKeyframes() { val originals = selectedKeyframes.toList() @@ -359,8 +352,8 @@ class TimelineController { val created = mutableListOf() originals.forEach { original -> val curve = curveOf(original) ?: return@forEach - val layer = layerOf(original) ?: return@forEach - if (isLocked(layer)) return@forEach + val owner = propertyOf(original) ?: return@forEach + if (isLocked(owner)) return@forEach val target = findFreeTime(curve, original.time + KEYFRAME_TIME_EPSILON * 2f) if (curve.keyAt(target) != null) return@forEach val copy = original.copy(target) @@ -397,8 +390,8 @@ class TimelineController { val clones = LinkedHashMap() originals.forEach { original -> val curve = curveOf(original) ?: return@forEach - val layer = layerOf(original) ?: return@forEach - if (isLocked(layer)) return@forEach + val owner = propertyOf(original) ?: return@forEach + if (isLocked(owner)) return@forEach val target = findFreeTime(curve, original.time + KEYFRAME_TIME_EPSILON * 2f) if (curve.keyAt(target) != null) return@forEach val copy = original.copy(target) @@ -578,9 +571,9 @@ class TimelineController { fun frameCurves() { var lowest = Float.MAX_VALUE var highest = -Float.MAX_VALUE - allLayers().forEach { layer -> - if (!layer.isVisible) return@forEach - layer.channels.forEach { curve -> + allProperties().forEach { property -> + if (!property.isVisible) return@forEach + property.curves.forEach { curve -> if (!curve.isVisible) return@forEach if (!curve.spec.supportsCurveEditor) return@forEach if (focusedCurves.isNotEmpty() && !isFocused(curve)) return@forEach @@ -623,13 +616,9 @@ class TimelineController { PropertySnapshot( property = property, type = property.type, - layers = property.layers.map { layer -> - LayerSnapshot( - layer = layer, - state = LayerState.of(layer), - curves = layer.channels.map { curve -> curve.keyframes.map { KeyframeState.of(it) } }, - ) - }, + state = PropertyState.of(property), + curves = property.curves, + keys = property.curves.map { curve -> curve.keyframes.map { KeyframeState.of(it) } }, ) }, currentTime = currentTime, @@ -639,24 +628,17 @@ class TimelineController { internal fun restoreSnapshot(snapshot: TimelineSnapshot) { snapshot.properties.forEach { propertySnapshot -> - propertySnapshot.layers.forEach { layerSnapshot -> - layerSnapshot.state.applyTo(layerSnapshot.layer) - layerSnapshot.layer.channels.forEachIndexed { index, curve -> - curve.keyframes.clear() - layerSnapshot.curves.getOrNull(index) - ?.let { keys -> curve.keyframes.addAll(keys.map { it.toKeyframe() }) } - } + propertySnapshot.state.applyTo(propertySnapshot.property) + propertySnapshot.curves.forEachIndexed { index, curve -> + curve.keyframes.clear() + propertySnapshot.keys.getOrNull(index) + ?.let { keys -> curve.keyframes.addAll(keys.map { it.toKeyframe() }) } } - propertySnapshot.property.restoreState( - propertySnapshot.type, - propertySnapshot.layers.map { it.layer }, - ) + propertySnapshot.property.restoreState(propertySnapshot.type, propertySnapshot.curves) } selectedKeyframes.clear() val liveCurves = allCurves() focusedCurves.retainAll { curve -> liveCurves.any { it === curve } } - val liveLayers = allLayers() - if (liveLayers.none { it === activeLayer }) activeLayer = liveLayers.firstOrNull() currentTime = snapshot.currentTime workAreaEnd = snapshot.workAreaEnd restoreExtraState?.invoke(snapshot.extra) @@ -677,7 +659,6 @@ class TimelineController { } } -internal const val BASE_LAYER_NAME = "Base" internal fun AnimProperty<*>.decomposeDefault(into: FloatArray) { (type as PropertyType).decompose(defaultValue, into) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineHistory.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineHistory.kt index 82cc30a14..d6655dd7e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineHistory.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineHistory.kt @@ -22,42 +22,32 @@ internal data class KeyframeState( } } -internal data class LayerState( +internal data class PropertyState( val name: String, - val blendMode: BlendMode, - val weight: Float, val visible: Boolean, val locked: Boolean, ) { - fun applyTo(layer: AnimLayer) { - layer.nameState = name - layer.blendMode = blendMode - layer.weight = weight - layer.isVisible = visible - layer.isLocked = locked + fun applyTo(property: AnimProperty<*>) { + property.nameState = name + property.isVisible = visible + property.isLocked = locked } companion object { - fun of(layer: AnimLayer) = LayerState( - name = layer.nameState, - blendMode = layer.blendMode, - weight = layer.weight, - visible = layer.isVisible, - locked = layer.isLocked, + fun of(property: AnimProperty<*>) = PropertyState( + name = property.nameState, + visible = property.isVisible, + locked = property.isLocked, ) } } -internal data class LayerSnapshot( - val layer: AnimLayer, - val state: LayerState, - val curves: List>, -) - internal data class PropertySnapshot( val property: AnimProperty<*>, val type: PropertyType<*>, - val layers: List, + val state: PropertyState, + val curves: List, + val keys: List>, ) internal data class TimelineSnapshot( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt new file mode 100644 index 000000000..07e77a1f4 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt @@ -0,0 +1,103 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.timeline + +import org.lwjgl.glfw.GLFW + +/** + * The keyboard of the timeline window, whatever it is showing. + */ +object TimelineKeys { + private const val NUDGE_SMALL = 0.05f + private const val NUDGE_LARGE = 0.25f + + fun handle(timeline: TimelineController, key: Int, modifiers: Int): Boolean { + val ctrl = modifiers and GLFW.GLFW_MOD_CONTROL != 0 + val shift = modifiers and GLFW.GLFW_MOD_SHIFT != 0 + return when { + ctrl && key == GLFW.GLFW_KEY_Z -> { + if (shift) timeline.redo() else timeline.undo() + true + } + + ctrl && key == GLFW.GLFW_KEY_Y -> { + timeline.redo() + true + } + + ctrl && key == GLFW.GLFW_KEY_TAB -> { + if (timeline.viewMode == TimelineViewMode.CURVES) timeline.viewMode = TimelineViewMode.DOPE_SHEET + else timeline.enterCurveView() + true + } + + key == GLFW.GLFW_KEY_F -> { + timeline.frameCurves() + true + } + + key == GLFW.GLFW_KEY_S -> { + timeline.smoothSelectedKeyframes() + true + } + + key == GLFW.GLFW_KEY_DELETE || key == GLFW.GLFW_KEY_BACKSPACE -> { + timeline.deleteSelectedKeyframes() + true + } + + ctrl && key == GLFW.GLFW_KEY_D -> { + timeline.duplicateSelectedKeyframes() + true + } + + ctrl && key == GLFW.GLFW_KEY_C -> { + timeline.copySelectedKeyframes() + true + } + + ctrl && key == GLFW.GLFW_KEY_X -> { + timeline.cutSelectedKeyframes() + true + } + + ctrl && key == GLFW.GLFW_KEY_V -> { + timeline.pasteKeyframes() + true + } + + key == GLFW.GLFW_KEY_LEFT -> { + moveSelectionOrPlayhead(timeline, if (shift) -NUDGE_LARGE else -NUDGE_SMALL) + true + } + + key == GLFW.GLFW_KEY_RIGHT -> { + moveSelectionOrPlayhead(timeline, if (shift) NUDGE_LARGE else NUDGE_SMALL) + true + } + + key == GLFW.GLFW_KEY_ESCAPE -> { + timeline.clearSelection() + true + } + + key == GLFW.GLFW_KEY_HOME -> { + timeline.applyCurrentTime(0f) + true + } + + key == GLFW.GLFW_KEY_SPACE -> { + timeline.togglePlayback() + true + } + + else -> false + } + } + + private fun moveSelectionOrPlayhead(timeline: TimelineController, deltaSeconds: Float) { + if (timeline.selectedKeyframes.isEmpty()) { + timeline.applyCurrentTime(timeline.currentTime + deltaSeconds) + } else { + timeline.nudgeSelectedKeyframes(deltaSeconds) + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineTypes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineTypes.kt index 99b86bc53..683513b38 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineTypes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineTypes.kt @@ -20,7 +20,6 @@ class FloatPropertyType( ) : PropertyType { override val id = ID override val channels = listOf(ChannelSpec(name, ChannelColors.SCALAR)) - override val blendModes = setOf(BlendMode.OVERRIDE, BlendMode.ADD, BlendMode.SUBTRACT, BlendMode.MULTIPLY) override fun bounds(channel: Int) = bounds @@ -43,7 +42,6 @@ class TranslationPropertyType : PropertyType { ChannelSpec("Y", ChannelColors.Y), ChannelSpec("Z", ChannelColors.Z), ) - override val blendModes = setOf(BlendMode.OVERRIDE, BlendMode.ADD, BlendMode.SUBTRACT, BlendMode.MULTIPLY) override fun decompose(value: Vec3f, into: FloatArray) { into[0] = value.x @@ -80,7 +78,6 @@ class RotationPropertyType(val mode: RotationMode = RotationMode.EULER) : Proper ) } - override val blendModes = setOf(BlendMode.OVERRIDE, BlendMode.ADD, BlendMode.SUBTRACT) override val isChannelSpaceLinear = mode == RotationMode.EULER diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CameraCutscene.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CameraCutscene.kt index 0d3a2809e..9a5a76eca 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CameraCutscene.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CameraCutscene.kt @@ -96,7 +96,6 @@ class CutscenePlaybackController { fun setupTracks(data: CutsceneData, loop: Boolean = false, anchor: CutsceneAnchor = CutsceneAnchor.WHERE_RECORDED) { timeline.groups.clear() timeline.clearSelection() - timeline.activeLayer = null timeline.workAreaEnd = max(0.1f, data.duration) timeline.currentTime = 0f isLooping = loop @@ -158,45 +157,40 @@ class CutscenePlaybackController { fun reanchor(position: Vec3f, yaw: Float) { val previous = origin.frame val next = origin.moved(position, yaw).frame - translation.layers.filter { it.blendMode == BlendMode.OVERRIDE }.forEach { layer -> - rebaseLayer(layer, translation) { local -> next.toLocal(previous.toWorld(local)) } - } - rotation.layers.filter { it.blendMode == BlendMode.OVERRIDE }.forEach { layer -> - rebaseLayer(layer, rotation) { local -> next.toLocalRotation(previous.toWorldRotation(local)) } - } + rebase(translation) { local -> next.toLocal(previous.toWorld(local)) } + rebase(rotation) { local -> next.toLocalRotation(previous.toWorldRotation(local)) } origin = origin.moved(position, yaw) updateProperties() } /** - * Resamples the keys of a single layer using [convert] + * Resamples the keys of a property using [convert] */ - private fun rebaseLayer(layer: AnimLayer, property: AnimProperty, convert: (T) -> T) { + private fun rebase(property: AnimProperty, convert: (T) -> T) { val type = property.type val size = type.channels.size - val times = layer.channels.flatMap { curve -> curve.keyframes.map { it.time } }.distinct().sorted() + val times = property.curves.flatMap { curve -> curve.keyframes.map { it.time } }.distinct().sorted() if (times.isEmpty()) return val buffer = FloatArray(size) val converted = times.associateWith { time -> property.decomposeDefault(buffer) - layer.channels.forEachIndexed { index, curve -> buffer[index] = curve.valueAt(time, buffer[index]) } + property.curves.forEachIndexed { index, curve -> buffer[index] = curve.valueAt(time, buffer[index]) } val next = FloatArray(size) type.decompose(convert(type.compose(buffer)), next) next } - layer.channels.forEachIndexed { index, curve -> + property.curves.forEachIndexed { index, curve -> converted.forEach { (time, values) -> val key = curve.keyAt(time) ?: Keyframe(time, 0f).also { curve.keyframes.add(it) } key.value = values.getOrElse(index) { key.value } } curve.sort() } - rotateTangents(layer, property, convert, times) + rotateTangents(property, convert, times) } private fun rotateTangents( - layer: AnimLayer, property: AnimProperty, convert: (T) -> T, times: List, @@ -209,7 +203,7 @@ class CutscenePlaybackController { val incoming = FloatArray(size) val outgoing = FloatArray(size) times.forEach { time -> - val keys = layer.channels.map { it.keyAt(time) } + val keys = property.curves.map { it.keyAt(time) } if (keys.all { it == null }) return@forEach keys.forEachIndexed { index, key -> incoming[index] = key?.incoming?.value ?: 0f @@ -274,7 +268,6 @@ class CutscenePlaybackController { WeatherPropertyType(), CutsceneWeather.CLEAR, ) { environmentWeather = it } - if (timeline.activeLayer == null) timeline.activeLayer = translation.layers.firstOrNull() } @Suppress("UNCHECKED_CAST") @@ -289,9 +282,8 @@ class CutscenePlaybackController { val existing = timeline.allProperties().firstOrNull { it.id == id } if (existing != null && existing.type.id == type.id) { val bound = AnimProperty(id, existing.nameState, existing.type as PropertyType, defaultValue, apply) - bound.layers.addAll(existing.layers) + bound.adoptCurves(existing) bound.isExpanded = existing.isExpanded - if (bound.layers.isEmpty()) bound.addLayer(BASE_LAYER_NAME) val group = timeline.groupOf(existing) ?: timeline.group(path) group.properties[group.properties.indexOf(existing)] = bound return bound @@ -348,17 +340,13 @@ private fun createProperty(id: String, name: String, data: CutscenePropertyData) else -> AnimProperty(id, name, FloatPropertyType(name), 0f) } - data.layers.forEach { layerData -> - val layer = property.addLayer(layerData.name, CutsceneEnums.blendMode(layerData.blend)) - layer.weight = layerData.weight - layer.isVisible = layerData.visible - layer.isLocked = layerData.locked - layerData.curves.forEach { curveData -> - val curve = layer.channels.firstOrNull { it.name == curveData.channel } ?: return@forEach - curve.isVisible = curveData.visible - curveData.keyframes.forEach { curve.keyframes.add(it.toKeyframe(curve.spec)) } - curve.sort() - } + property.isVisible = data.visible + property.isLocked = data.locked + data.curves.forEach { curveData -> + val curve = property.curves.firstOrNull { it.name == curveData.channel } ?: return@forEach + curve.isVisible = curveData.visible + curveData.keyframes.forEach { curve.keyframes.add(it.toKeyframe(curve.spec)) } + curve.sort() } return property } @@ -376,11 +364,8 @@ private fun CutsceneKeyData.toKeyframe(spec: ChannelSpec) = Keyframe( outgoing = KeyTangent(outTime, outValue), ) -private fun AnimProperty<*>.hasVisibleKeys(): Boolean = layers.any { layer -> - layer.isVisible && layer.weight != 0f && layer.channels.any { curve -> - curve.isVisible && curve.keyframes.isNotEmpty() - } -} +private fun AnimProperty<*>.hasVisibleKeys(): Boolean = + curves.any { curve -> curve.isVisible && curve.keyframes.isNotEmpty() } private fun TrackGroup.toNode(): CutsceneNodeData = CutsceneNodeData( id = nameState, @@ -396,19 +381,12 @@ private fun AnimProperty<*>.toNode(): CutsceneNodeData = CutsceneNodeData( property = CutscenePropertyData( type = type.id, rotationMode = CutsceneEnums.nameOf((type as? RotationPropertyType)?.mode ?: RotationMode.EULER), - layers = layers.map { it.toData() }, + visible = isVisible, + locked = isLocked, + curves = curves.map { it.toData() }, ), ) -private fun AnimLayer.toData() = CutsceneLayerData( - name = nameState, - blend = CutsceneEnums.nameOf(blendMode), - weight = weight, - visible = isVisible, - locked = isLocked, - curves = channels.map { it.toData() }, -) - private fun ChannelCurve.toData() = CutsceneCurveData( channel = name, visible = isVisible, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneData.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneData.kt index 12751c230..5775fa1c2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneData.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneData.kt @@ -1,7 +1,6 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene import kotlinx.serialization.Serializable -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.BlendMode import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.HandleMode import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.KeyInterpolation import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.RotationMode @@ -30,21 +29,16 @@ data class CutsceneCurveData( val keyframes: List = emptyList(), ) -@Serializable -data class CutsceneLayerData( - val name: String, - val blend: String = CutsceneEnums.DEFAULT_BLEND, - val weight: Float = 1f, - val visible: Boolean = true, - val locked: Boolean = false, - val curves: List = emptyList(), -) - +/** + * One animated property: one curve per channel. + */ @Serializable data class CutscenePropertyData( val type: String, val rotationMode: String = CutsceneEnums.DEFAULT_ROTATION_MODE, - val layers: List = emptyList(), + val visible: Boolean = true, + val locked: Boolean = false, + val curves: List = emptyList(), ) @Serializable @@ -67,7 +61,6 @@ data class CutsceneData( object CutsceneEnums { const val DEFAULT_INTERPOLATION = "bezier" const val DEFAULT_HANDLES = "auto" - const val DEFAULT_BLEND = "override" const val DEFAULT_ROTATION_MODE = "euler" private val interpolations = mapOf( @@ -83,13 +76,6 @@ object CutsceneEnums { "free" to HandleMode.FREE, ) - private val blends = mapOf( - DEFAULT_BLEND to BlendMode.OVERRIDE, - "add" to BlendMode.ADD, - "subtract" to BlendMode.SUBTRACT, - "multiply" to BlendMode.MULTIPLY, - ) - private val rotationModes = mapOf( DEFAULT_ROTATION_MODE to RotationMode.EULER, "quaternion" to RotationMode.QUATERNION, @@ -103,10 +89,6 @@ object CutsceneEnums { fun nameOf(value: HandleMode): String = handles.entries.first { it.value == value }.key - fun blendMode(name: String): BlendMode = blends[name] ?: BlendMode.OVERRIDE - - fun nameOf(value: BlendMode): String = blends.entries.first { it.value == value }.key - fun rotationMode(name: String): RotationMode = rotationModes[name] ?: RotationMode.EULER fun nameOf(value: RotationMode): String = rotationModes.entries.first { it.value == value }.key diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEditorSession.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEditorSession.kt index 464b9e645..edcd3cb0d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEditorSession.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEditorSession.kt @@ -65,9 +65,8 @@ class CutsceneEditorSession { } private fun writeChannels(property: AnimProperty<*>, time: Float, values: List) { - val layer = layerFor(property) ?: return - if (timeline.isLocked(layer)) return - val created = layer.channels.mapIndexedNotNull { channel, curve -> + if (timeline.isLocked(property)) return + val created = property.curves.mapIndexedNotNull { channel, curve -> val value = values.getOrNull(channel) ?: return@mapIndexedNotNull null val unwrapped = curve.spec.unwrap(value, curve.valueAt(time, value)) timeline.setKey(curve, time, unwrapped, selectKey = false) @@ -75,8 +74,6 @@ class CutsceneEditorSession { timeline.select(created, additive = true) } - fun layerFor(property: AnimProperty<*>): AnimLayer? = timeline.targetLayer(property) - fun moveOrigin(position: Vec3f, yaw: Float, keepWorld: Boolean) { timeline.edit(if (keepWorld) "Re-anchor cutscene" else "Move cutscene") { if (keepWorld) playback.reanchor(position, yaw) @@ -93,99 +90,11 @@ class CutsceneEditorSession { } fun onHollowUiKey(key: Int, modifiers: Int): Boolean { - val ctrl = modifiers and GLFW.GLFW_MOD_CONTROL != 0 - val shift = modifiers and GLFW.GLFW_MOD_SHIFT != 0 - val handled = when { - ctrl && key == GLFW.GLFW_KEY_Z -> { - if (shift) timeline.redo() else timeline.undo() - true - } - - ctrl && key == GLFW.GLFW_KEY_Y -> { - timeline.redo() - true - } - - ctrl && key == GLFW.GLFW_KEY_TAB -> { - if (timeline.viewMode == TimelineViewMode.CURVES) timeline.viewMode = TimelineViewMode.DOPE_SHEET - else timeline.enterCurveView() - true - } - - key == GLFW.GLFW_KEY_F -> { - timeline.frameCurves() - true - } - - key == GLFW.GLFW_KEY_S -> { - timeline.smoothSelectedKeyframes() - true - } - - key == GLFW.GLFW_KEY_DELETE || key == GLFW.GLFW_KEY_BACKSPACE -> { - timeline.deleteSelectedKeyframes() - true - } - - ctrl && key == GLFW.GLFW_KEY_D -> { - timeline.duplicateSelectedKeyframes() - true - } - - ctrl && key == GLFW.GLFW_KEY_C -> { - timeline.copySelectedKeyframes() - true - } - - ctrl && key == GLFW.GLFW_KEY_X -> { - timeline.cutSelectedKeyframes() - true - } - - ctrl && key == GLFW.GLFW_KEY_V -> { - timeline.pasteKeyframes() - true - } - - key == GLFW.GLFW_KEY_LEFT -> { - moveSelectionOrPlayhead(if (shift) -KEYFRAME_NUDGE_LARGE else -KEYFRAME_NUDGE_SMALL) - true - } - - key == GLFW.GLFW_KEY_RIGHT -> { - moveSelectionOrPlayhead(if (shift) KEYFRAME_NUDGE_LARGE else KEYFRAME_NUDGE_SMALL) - true - } - - key == GLFW.GLFW_KEY_ESCAPE -> { - timeline.clearSelection() - true - } - - key == GLFW.GLFW_KEY_HOME -> { - timeline.applyCurrentTime(0f) - true - } - - key == GLFW.GLFW_KEY_SPACE -> { - timeline.togglePlayback() - true - } - - else -> false - } + val handled = TimelineKeys.handle(timeline, key, modifiers) if (handled) invalidateUi() return handled } - private fun moveSelectionOrPlayhead(deltaSeconds: Float) { - if (timeline.selectedKeyframes.isEmpty()) { - timeline.applyCurrentTime(timeline.currentTime + deltaSeconds) - } else { - timeline.nudgeSelectedKeyframes(deltaSeconds) - } - } - fun syncPlaybackFromTimeline() { playback.updateProperties() updatePreviewState() @@ -216,8 +125,6 @@ class CutsceneEditorSession { fun channelValues(property: AnimProperty<*>): List = property.decomposeAt(timeline.currentTime).toList() } -private const val KEYFRAME_NUDGE_SMALL = 0.05f -private const val KEYFRAME_NUDGE_LARGE = 0.25f object CutsceneEditorSessions { val default = CutsceneEditorSession() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEnvironment.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEnvironment.kt index dce337f15..4a76a133a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEnvironment.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneEnvironment.kt @@ -2,7 +2,6 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene import net.minecraft.client.Minecraft import net.minecraft.client.multiplayer.ClientLevel -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.BlendMode import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ChannelColors import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ChannelSampling import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ChannelSpec @@ -59,7 +58,6 @@ class TimeOfDayPropertyType : PropertyType { graphValueFormatter = TimeOfDayValueFormatter, ), ) - override val blendModes = setOf(BlendMode.OVERRIDE, BlendMode.ADD, BlendMode.SUBTRACT) override fun decompose(value: Float, into: FloatArray) { into[0] = value @@ -84,7 +82,6 @@ class WeatherPropertyType : PropertyType { }, ), ) - override val blendModes = setOf(BlendMode.OVERRIDE) override val isChannelSpaceLinear = false override fun decompose(value: CutsceneWeather, into: FloatArray) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneMigrations.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneMigrations.kt index 9aa055d67..e7e05cf7b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneMigrations.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneMigrations.kt @@ -3,27 +3,64 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import net.minecraft.nbt.Tag +import ru.hollowhorizon.hollowengine.HollowEngine import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.* import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f import ru.hollowhorizon.hollowengine.common.utils.nbt.NBTFormat import ru.hollowhorizon.hollowengine.common.utils.serialization.deserialize /** - * Reads cutscenes written before properties, layers and per-channel curves existed. + * Reads cutscenes written before the shape they have now. * * Version 1 stored one keyframe per *vector*, in absolute world coordinates, with a named easing. - * Version 2 added an origin and Bezier handles but kept the vector keys. Both are converted to the - * current shape: coordinates end up relative to an origin, and every vector key becomes one key per channel. + * Version 2 added an origin and Bezier handles but kept the vector keys. + * Version 3 had properties whose curves lived inside a stack of blended layers. + * All of them end up in the current shape: coordinates relative to an origin, one key per channel, and curves directly on the property. */ object CutsceneMigrations { - const val CURRENT_VERSION = 3 + const val CURRENT_VERSION = 4 - fun read(payload: Tag, version: Int): CutsceneData { - if (version >= CURRENT_VERSION) return NBTFormat.deserialize(payload) - val legacy: LegacyCutsceneData = NBTFormat.deserialize(payload) - return convert(legacy, version) + fun read(payload: Tag, version: Int): CutsceneData = when { + version >= CURRENT_VERSION -> NBTFormat.deserialize(payload) + version == 3 -> flattenLayers(NBTFormat.deserialize(payload)) + else -> convert(NBTFormat.deserialize(payload), version) } + /** + * Drops the layer stack of a version 3 cutscene, keeping the first layer that did anything. + */ + private fun flattenLayers(data: LayeredCutsceneData): CutsceneData = CutsceneData( + name = data.name, + duration = data.duration, + origin = data.origin, + nodes = data.nodes.map { it.flatten() }, + ) + + private fun LayeredNodeData.flatten(): CutsceneNodeData = CutsceneNodeData( + id = id, + name = name, + kind = kind, + children = children.map { it.flatten() }, + property = property?.let { stored -> + val layer = stored.layers.firstOrNull { it.visible && it.weight != 0f } ?: stored.layers.firstOrNull() + if (stored.layers.size > 1) { + HollowEngine.LOGGER.warn( + "Cutscene property '{}' had {} layers; keeping '{}' and dropping the rest", + name, + stored.layers.size, + layer?.name, + ) + } + CutscenePropertyData( + type = stored.type, + rotationMode = stored.rotationMode, + visible = layer?.visible ?: true, + locked = layer?.locked ?: false, + curves = layer?.curves.orEmpty(), + ) + }, + ) + internal fun convert(legacy: LegacyCutsceneData, version: Int): CutsceneData = legacy.toCutscene(version) private fun LegacyCutsceneData.toCutscene(version: Int): CutsceneData { @@ -152,10 +189,7 @@ object CutsceneMigrations { id = id, name = name, kind = CutsceneNodeKind.PROPERTY, - property = CutscenePropertyData( - type = type, - layers = listOf(CutsceneLayerData(name = "Base", curves = curves)), - ), + property = CutscenePropertyData(type = type, curves = curves), ) private fun Vec3f.component(index: Int): Float = when (index) { @@ -202,6 +236,41 @@ private object LegacyEasings { fun presetFor(easing: String): CurvePreset? = CurvePresets.byId(presets[easing] ?: "smooth") } +/** Version 3: properties whose curves lived inside a stack of blended layers. */ +@Serializable +internal data class LayeredLayerData( + val name: String, + val blend: String = "override", + val weight: Float = 1f, + val visible: Boolean = true, + val locked: Boolean = false, + val curves: List = emptyList(), +) + +@Serializable +internal data class LayeredPropertyData( + val type: String, + val rotationMode: String = CutsceneEnums.DEFAULT_ROTATION_MODE, + val layers: List = emptyList(), +) + +@Serializable +internal data class LayeredNodeData( + val id: String, + val name: String, + val kind: CutsceneNodeKind, + val children: List = emptyList(), + val property: LayeredPropertyData? = null, +) + +@Serializable +internal data class LayeredCutsceneData( + val name: String = "New Cutscene", + val duration: Float = 10f, + val origin: CutsceneOrigin = CutsceneOrigin(), + val nodes: List = emptyList(), +) + @Serializable internal data class LegacyAnchorData( val originX: Float = 0f, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt index 1d7d30efd..f3d61d16e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt @@ -71,17 +71,7 @@ internal object CutsceneLang { const val HANDLE_IN = ROOT + "handles.incoming" const val HANDLE_OUT = ROOT + "handles.outgoing" - const val LAYER_SETTINGS = ROOT + "layer.settings" const val PROPERTY_SETTINGS = ROOT + "property.settings" - const val LAYER_WEIGHT = ROOT + "layer.weight" - const val LAYER_VISIBLE = ROOT + "layer.visible" - const val LAYER_LOCKED = ROOT + "layer.locked" - const val LAYER_DELETE = ROOT + "layer.delete" - const val BLEND_MODE = ROOT + "layer.blend_mode" - const val BLEND_OVERRIDE = ROOT + "blend.override" - const val BLEND_ADD = ROOT + "blend.add" - const val BLEND_SUBTRACT = ROOT + "blend.subtract" - const val BLEND_MULTIPLY = ROOT + "blend.multiply" const val ROTATION_MODE = ROOT + "rotation.mode" const val ROTATION_EULER = ROOT + "rotation.euler" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt index 0b28f201c..870949862 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt @@ -3,6 +3,8 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui import androidx.compose.runtime.* import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.docking.DockTags +import ru.hollowhorizon.hollowengine.client.ui.docking.LocalDockPanelTitle import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.* import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollHandle import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow @@ -22,9 +24,23 @@ private const val DopeSheetIcon = "hollowengine:textures/gui/icons/layers.svg" private const val CurvesIcon = "hollowengine:textures/gui/icons/graph.svg" private const val FrameCurvesIcon = "hollowengine:textures/gui/icons/maximize.svg" private const val PulseIcon = "hollowengine:textures/gui/icons/pulse.svg" -private const val AddIcon = "hollowengine:textures/gui/icons/add.svg" private const val SettingsIcon = "hollowengine:textures/gui/icons/general.svg" +/** + * Which of the shared timeline controls make sense for what is being edited. + */ +class TimelineFeatures( + val capture: Boolean = true, + val storage: Boolean = true, + val cameraPreview: Boolean = true, + /** Play, pause and the jumps to either end; a curve with no clock has no use for them. */ + val playback: Boolean = true, +) { + companion object { + val CUTSCENE = TimelineFeatures() + } +} + @Composable internal fun TimelineToolbar( controller: TimelineController, @@ -32,34 +48,42 @@ internal fun TimelineToolbar( onSave: () -> Unit, onLoad: () -> Unit, refresh: () -> Unit, + features: TimelineFeatures = TimelineFeatures.CUTSCENE, ) { var menuOpen by remember { mutableStateOf(false) } Row( id = "cutscene-timeline-toolbar", - modifier = Modifier.size(100.percent, 34.px).alignItems(vertical = UiAlign.CENTER) + modifier = Modifier.size(100.percent, 28.px).alignItems(vertical = UiAlign.CENTER) .background(TimelineColors.Panel).border(1.px, TimelineColors.Border).padding(6.px, 0.px).gap(4.px), ) { - ToolbarIcon(StartIcon, "timeline-start") { - controller.isPlaying = false - controller.applyCurrentTime(0f) - refresh() - } - ToolbarIcon( - if (controller.isPlaying) PauseIcon else PlayIcon, - "timeline-play", - active = controller.isPlaying, - ) { - controller.togglePlayback() - refresh() - } - ToolbarIcon(EndIcon, "timeline-end") { - controller.isPlaying = false - controller.applyCurrentTime(controller.workAreaEnd) - refresh() + LocalDockPanelTitle.current?.let { panel -> + panel.icon?.let { icon -> Image(icon, tags = listOf(DockTags.PinnedHeaderIcon)) } + Text(panel.title, tags = listOf(DockTags.PinnedHeaderLabel), modifier = Modifier.textWrap(false)) + TimelineSeparator() } + if (features.playback) { + ToolbarIcon(StartIcon, "timeline-start") { + controller.isPlaying = false + controller.applyCurrentTime(0f) + refresh() + } + ToolbarIcon( + if (controller.isPlaying) PauseIcon else PlayIcon, + "timeline-play", + active = controller.isPlaying, + ) { + controller.togglePlayback() + refresh() + } + ToolbarIcon(EndIcon, "timeline-end") { + controller.isPlaying = false + controller.applyCurrentTime(controller.workAreaEnd) + refresh() + } - TimelineSeparator() + TimelineSeparator() + } ToolbarIcon( DopeSheetIcon, @@ -82,7 +106,7 @@ internal fun TimelineToolbar( TimelineSeparator() - Text( + if (features.playback) Text( "${formatSeconds(controller.currentTime)} / ${formatSeconds(controller.workAreaEnd)}", modifier = Modifier.align(vertical = UiAlign.CENTER).fontSize(11f).foreground(TimelineColors.Text), ) @@ -90,12 +114,14 @@ internal fun TimelineToolbar( // Push the trailing controls to the right edge. Box(modifier = Modifier.size(0.px, 1.px).grow(1f)) - ToolbarIcon(PulseIcon, "timeline-capture", tooltip = CutsceneLang.CAPTURE_KEYFRAME.lang) { - onCapture() - refresh() - } + if (features.capture) { + ToolbarIcon(PulseIcon, "timeline-capture", tooltip = CutsceneLang.CAPTURE_KEYFRAME.lang) { + onCapture() + refresh() + } - TimelineSeparator() + TimelineSeparator() + } if (controller.viewMode == TimelineViewMode.CURVES) { ToolbarIcon(FrameCurvesIcon, "timeline-frame-curves", tooltip = CutsceneLang.FRAME_CURVES.lang) { @@ -123,8 +149,8 @@ internal fun TimelineToolbar( expanded = menuOpen, onExpandedChange = { menuOpen = it }, tags = listOf("timeline-overflow"), - items = listOf( - UiDropdownItem(CutsceneLang.CAPTURE_KEYFRAME.lang, icon = PulseIcon) { + items = listOfNotNull( + if (!features.capture) null else UiDropdownItem(CutsceneLang.CAPTURE_KEYFRAME.lang, icon = PulseIcon) { onCapture(); refresh() }, UiDropdownItem( @@ -141,7 +167,7 @@ internal fun TimelineToolbar( ) { controller.smoothSelectedKeyframes(); refresh() }, - UiDropdownItem( + if (!features.cameraPreview) null else UiDropdownItem( if (controller.isCameraPreviewEnabled) CutsceneLang.CAMERA_PREVIEW_ON.lang else CutsceneLang.CAMERA_PREVIEW_OFF.lang, icon = "hollowengine:textures/gui/icons/film.svg", @@ -150,8 +176,14 @@ internal fun TimelineToolbar( controller.applyCameraPreviewEnabled(!controller.isCameraPreviewEnabled) refresh() }, - UiDropdownItem(CutsceneLang.SAVE.lang, icon = "hollowengine:textures/gui/icons/save.svg") { onSave() }, - UiDropdownItem(CutsceneLang.LOAD.lang, icon = "hollowengine:textures/gui/icons/load.svg") { onLoad() }, + if (!features.storage) null else UiDropdownItem( + CutsceneLang.SAVE.lang, + icon = "hollowengine:textures/gui/icons/save.svg", + ) { onSave() }, + if (!features.storage) null else UiDropdownItem( + CutsceneLang.LOAD.lang, + icon = "hollowengine:textures/gui/icons/load.svg", + ) { onLoad() }, ), ) } @@ -202,7 +234,6 @@ internal fun TimelineHeaders( verticalOffset: Float, ownsVerticalScroll: Boolean, contentHeight: Float, - onLayerSettings: (AnimLayer) -> Unit, onPropertySettings: (AnimProperty<*>) -> Unit, refresh: () -> Unit, ) { @@ -242,7 +273,7 @@ internal fun TimelineHeaders( ) { rows.forEach { row -> key(row.id) { - TimelineHeaderRow(row, controller, labelWidth, onLayerSettings, onPropertySettings, refresh) + TimelineHeaderRow(row, controller, labelWidth, onPropertySettings, refresh) } } } @@ -254,9 +285,8 @@ private fun headerLabelWidth(row: TimelineRow): Float = 8f + row.depth * 12f + row.label.length * 5.5f + headerControlsWidth(row) private fun headerControlsWidth(row: TimelineRow): Float = when (row.kind) { - TimelineRowKind.CHANNEL -> 40f - TimelineRowKind.LAYER -> 76f - else -> 58f + TimelineRowKind.CHANNEL -> 26f + else -> 82f } private const val EyeOnIcon = "hollowengine:textures/gui/icons/visible.svg" @@ -264,25 +294,23 @@ private const val EyeOffIcon = "hollowengine:textures/gui/icons/invisible.svg" private const val LockedIcon = "hollowengine:textures/gui/icons/locked.svg" private const val UnlockedIcon = "hollowengine:textures/gui/icons/unlocked.svg" private const val CollapseArrowIcon = "hollowengine:textures/gui/icons/arrow.svg" +private const val HideTrackIcon = "hollowengine:textures/gui/icons/cross.svg" @Composable private fun TimelineHeaderRow( row: TimelineRow, controller: TimelineController, width: Float, - onLayerSettings: (AnimLayer) -> Unit, onPropertySettings: (AnimProperty<*>) -> Unit, refresh: () -> Unit, ) { val top = row.y - TimelineRulerHeight - val isActiveLayer = row.kind == TimelineRowKind.LAYER && controller.activeLayer === row.layer val isCurveView = controller.viewMode == TimelineViewMode.CURVES val rowCurves = if (isCurveView) row.curves.filter { it.spec.supportsCurveEditor } else row.curves val isFocused = isCurveView && rowCurves.isNotEmpty() && rowCurves.all { controller.isFocused(it) } val color = when { row.kind == TimelineRowKind.GROUP -> TimelineColors.Group isFocused -> TimelineColors.Accent.withAlpha(0.26f) - isActiveLayer -> TimelineColors.Blue.withAlpha(0.28f) row.locked -> UiColor(0.09f, 0.09f, 0.1f, 1f) !row.visible -> UiColor(0.09f, 0.1f, 0.11f, 1f) row.kind == TimelineRowKind.CHANNEL -> TimelineColors.PanelAlt @@ -299,7 +327,6 @@ private fun TimelineHeaderRow( } when { row.group != null -> row.group.isCollapsed = !row.group.isCollapsed - row.kind == TimelineRowKind.LAYER -> controller.activeLayer = row.layer else -> if (!isCurveView) controller.clearSelection() } event.consume() @@ -319,15 +346,11 @@ private fun TimelineHeaderRow( .margin(2.px, 0.px, 4.px, 0.px), ) - row.kind == TimelineRowKind.PROPERTY -> Expander(row.property?.isExpanded == true) { - row.property?.let { it.isExpanded = !it.isExpanded } - refresh() - } - - row.kind == TimelineRowKind.LAYER -> Expander(row.layer?.isExpanded == true) { - row.layer?.let { it.isExpanded = !it.isExpanded } - refresh() - } + row.kind == TimelineRowKind.PROPERTY && (row.property?.curves?.size ?: 0) > 1 -> + Expander(row.property?.isExpanded == true) { + row.property?.let { it.isExpanded = !it.isExpanded } + refresh() + } } row.color?.let { swatch -> Box( @@ -339,18 +362,10 @@ private fun TimelineHeaderRow( Text( row.label, modifier = Modifier.grow(1f).align(vertical = UiAlign.CENTER) - .fontSize(if (row.kind == TimelineRowKind.CHANNEL) 10f else 11f) + .fontSize(if (row.kind == TimelineRowKind.CHANNEL) 9f else 10f) .foreground(if (row.visible) TimelineColors.Text else TimelineColors.Muted).textWrap(false), ) - row.layer?.takeIf { row.kind == TimelineRowKind.LAYER && it.blendMode != BlendMode.OVERRIDE } - ?.let { layer -> - Text( - blendModeLabel(layer.blendMode), - modifier = Modifier.align(vertical = UiAlign.CENTER).fontSize(9f) - .foreground(TimelineColors.Accent).textWrap(false).margin(0.px, 0.px, 4.px, 0.px), - ) - } - HeaderControls(row, controller, onLayerSettings, onPropertySettings, refresh) + HeaderControls(row, controller, onPropertySettings, refresh) } Box( modifier = Modifier.position(0.px, (row.height - 1f).px).size(width.px, 1.px) @@ -363,28 +378,33 @@ private fun TimelineHeaderRow( private fun HeaderControls( row: TimelineRow, controller: TimelineController, - onLayerSettings: (AnimLayer) -> Unit, onPropertySettings: (AnimProperty<*>) -> Unit, refresh: () -> Unit, ) { - when (row.kind) { - TimelineRowKind.CHANNEL -> { - val curve = row.curve ?: return - HeaderIconToggle(if (curve.isVisible) EyeOnIcon else EyeOffIcon, curve.isVisible, accent = false) { - curve.isVisible = !curve.isVisible + val hideProperty = controller.onHideProperty + val hideGroup = controller.onHideGroup + if (row.kind == TimelineRowKind.PROPERTY && hideProperty != null) { + row.property?.let { property -> + HeaderIconToggle(HideTrackIcon, active = false, accent = false) { + hideProperty(property) refresh() } } - - TimelineRowKind.LAYER -> { - val layer = row.layer ?: return - HeaderIconToggle(SettingsIcon, active = false, accent = false) { onLayerSettings(layer) } - HeaderIconToggle(if (layer.isVisible) EyeOnIcon else EyeOffIcon, layer.isVisible, accent = false) { - layer.isVisible = !layer.isVisible + } + if (row.kind == TimelineRowKind.GROUP && hideGroup != null) { + row.group?.let { group -> + HeaderIconToggle(HideTrackIcon, active = false, accent = false) { + hideGroup(group) refresh() } - HeaderIconToggle(if (layer.isLocked) LockedIcon else UnlockedIcon, layer.isLocked, accent = true) { - layer.isLocked = !layer.isLocked + } + } + + when (row.kind) { + TimelineRowKind.CHANNEL -> { + val curve = row.curve ?: return + HeaderIconToggle(if (curve.isVisible) EyeOnIcon else EyeOffIcon, curve.isVisible, accent = false) { + curve.isVisible = !curve.isVisible refresh() } } @@ -392,26 +412,28 @@ private fun HeaderControls( TimelineRowKind.PROPERTY -> { val property = row.property ?: return HeaderIconToggle(SettingsIcon, active = false, accent = false) { onPropertySettings(property) } - HeaderIconToggle(AddIcon, active = false, accent = false) { - val layer = property.addLayer(blendMode = BlendMode.ADD) - property.isExpanded = true - controller.activeLayer = layer - onLayerSettings(layer) + HeaderIconToggle( + if (property.isVisible) EyeOnIcon else EyeOffIcon, + property.isVisible, + accent = false, + ) { + property.isVisible = !property.isVisible refresh() } - val visible = property.layers.any { it.isVisible } - HeaderIconToggle(if (visible) EyeOnIcon else EyeOffIcon, visible, accent = false) { - property.layers.forEach { it.isVisible = !visible } + HeaderIconToggle( + if (property.isLocked) LockedIcon else UnlockedIcon, + property.isLocked, + accent = true, + ) { + property.isLocked = !property.isLocked refresh() } } TimelineRowKind.GROUP -> { val group = row.group ?: return - val visible = groupLayers(group).any { it.isVisible } - HeaderIconToggle(if (visible) EyeOnIcon else EyeOffIcon, visible, accent = false) { - groupLayers(group).forEach { it.isVisible = !visible } - group.isVisible = !visible + HeaderIconToggle(if (group.isVisible) EyeOnIcon else EyeOffIcon, group.isVisible, accent = false) { + group.isVisible = !group.isVisible refresh() } HeaderIconToggle(if (group.isLocked) LockedIcon else UnlockedIcon, group.isLocked, accent = true) { @@ -422,8 +444,6 @@ private fun HeaderControls( } } -private fun groupLayers(group: TrackGroup): List = group.allProperties().flatMap { it.layers } - @Composable private fun Expander(expanded: Boolean, onClick: () -> Unit) { Box( @@ -490,13 +510,6 @@ private fun TimelineSeparator() { Box(modifier = Modifier.size(1.px, 18.px).background(TimelineColors.Border)) } -internal fun blendModeLabel(mode: BlendMode): String = when (mode) { - BlendMode.OVERRIDE -> CutsceneLang.BLEND_OVERRIDE.lang - BlendMode.ADD -> CutsceneLang.BLEND_ADD.lang - BlendMode.SUBTRACT -> CutsceneLang.BLEND_SUBTRACT.lang - BlendMode.MULTIPLY -> CutsceneLang.BLEND_MULTIPLY.lang -} - internal fun formatSeconds(value: Float): String = "%.2f".format(value).replace(',', '.') /** Zoom keeping the visible centre roughly fixed; used by the toolbar buttons. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt index d4da2dbfd..9ec32be64 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt @@ -15,7 +15,7 @@ private const val CurvePointSize = 9f private const val CurveHandleSize = 7f internal data class CurveLane( - val layer: AnimLayer, + val property: AnimProperty<*>, val curve: ChannelCurve, val color: UiColor, val locked: Boolean, @@ -23,11 +23,10 @@ internal data class CurveLane( internal fun curveLanes(rows: List, controller: TimelineController): List { val lanes = rows.filter { it.kind == TimelineRowKind.PROPERTY && it.visible } - .mapNotNull { row -> row.property?.let { row to it } }.flatMap { (row, property) -> - property.layers.filter { it.isVisible }.flatMap { layer -> - layer.channels.filter { it.isVisible && it.spec.supportsCurveEditor }.map { curve -> - CurveLane(layer, curve, curve.color.toUiColor(), row.locked || layer.isLocked) - } + .mapNotNull { row -> row.property?.let { row to it } } + .flatMap { (row, property) -> + property.curves.filter { it.isVisible && it.spec.supportsCurveEditor }.map { curve -> + CurveLane(property, curve, curve.color.toUiColor(), row.locked) } } if (controller.focusedCurves.isEmpty()) return lanes diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt index b35376ebb..9680eb09e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt @@ -7,7 +7,6 @@ import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.CutsceneIcon import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorTarget import ru.hollowhorizon.hollowengine.client.ui.inspector.PublishInspector -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimLayer import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimProperty import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineController import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineViewMode @@ -33,7 +32,6 @@ internal val LocalTimelineRevision = staticCompositionLocalOf { 0 } fun CutsceneTimelineDock(session: CutsceneEditorSession, keyboardActive: Boolean = true) { session.uiRevision.value var dialog by remember { mutableStateOf(CutsceneDialog.NONE) } - var layerSettings by remember { mutableStateOf(null) } var propertySettings by remember { mutableStateOf?>(null) } LaunchedEffect(session) { @@ -63,7 +61,6 @@ fun CutsceneTimelineDock(session: CutsceneEditorSession, keyboardActive: Boolean onCapture = { session.captureFrame(session.timeline.currentTime) }, onSave = { dialog = CutsceneDialog.SAVE }, onLoad = { dialog = CutsceneDialog.LOAD }, - onLayerSettings = { layerSettings = it }, onPropertySettings = { propertySettings = it }, ) @@ -72,9 +69,6 @@ fun CutsceneTimelineDock(session: CutsceneEditorSession, keyboardActive: Boolean CutsceneDialog.LOAD -> LoadCutsceneDialog(session) { dialog = CutsceneDialog.NONE } CutsceneDialog.NONE -> {} } - layerSettings?.let { layer -> - LayerSettingsDialog(session.timeline, layer, session::invalidateUi) { layerSettings = null } - } propertySettings?.let { property -> PropertySettingsDialog(session.timeline, property, session::invalidateUi) { propertySettings = null } } @@ -110,8 +104,8 @@ fun HollowTimelineEditor( onCapture: () -> Unit = {}, onSave: () -> Unit = {}, onLoad: () -> Unit = {}, - onLayerSettings: (AnimLayer) -> Unit = {}, onPropertySettings: (AnimProperty<*>) -> Unit = {}, + features: TimelineFeatures = TimelineFeatures.CUTSCENE, ) { val bump = refresh val scroll = rememberScrollState() @@ -158,7 +152,7 @@ fun HollowTimelineEditor( } }, ) { - TimelineToolbar(controller, onCapture, onSave, onLoad, bump) + TimelineToolbar(controller, onCapture, onSave, onLoad, bump, features) Row(modifier = Modifier.size(100.percent, 0.px).grow(1f)) { TimelineHeaders( @@ -168,7 +162,6 @@ fun HollowTimelineEditor( verticalOffset = if (isCurveView) headerScroll.offsetY else scroll.offsetY, ownsVerticalScroll = isCurveView, contentHeight = scrollContentHeight, - onLayerSettings = onLayerSettings, onPropertySettings = onPropertySettings, refresh = bump, ) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineProperties.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineProperties.kt index d4c2d8eee..f01bb1a83 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineProperties.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineProperties.kt @@ -24,15 +24,26 @@ import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f /** The cutscene's own fields, composed inside whichever panel the shared inspector is drawn in. */ @Composable internal fun HollowTimelineProperties(session: CutsceneEditorSession, refresh: () -> Unit) { - val controller = session.timeline + PreviewSection(session.timeline, refresh) + OriginSection(session, refresh) + TimelineSelectionFields(session.timeline, refresh) { WorldReadout(session) } +} + +/** + * What is selected on a timeline: the keys and their curve, or the work area. + */ +@Composable +fun TimelineSelectionFields( + controller: TimelineController, + refresh: () -> Unit, + keyframeExtras: @Composable () -> Unit = {}, +) { val selectedKey = controller.selectedKeyframes.firstOrNull() val selectedCurve = selectedKey?.let { controller.curveOf(it) } - PreviewSection(controller, refresh) - OriginSection(session, refresh) when { selectedKey != null && selectedCurve != null -> { - KeyframeSection(session, selectedKey, selectedCurve, refresh) + KeyframeSection(controller, selectedKey, selectedCurve, refresh, keyframeExtras) if (selectedCurve.spec.supportsCurveEditor) { CurveSection(controller, selectedKey, selectedCurve, refresh) } @@ -51,6 +62,16 @@ internal fun HollowTimelineProperties(session: CutsceneEditorSession, refresh: ( } } +/** Whether a timeline has anything selected that [TimelineSelectionFields] would show. */ +fun TimelineController.hasInspectableSelection(): Boolean = selectedKeyframes.isNotEmpty() || isWorkAreaSelected + +/** A key that changes whenever what [TimelineSelectionFields] shows is a different thing. */ +fun TimelineController.selectionKey(): String { + val keyframe = selectedKeyframes.firstOrNull() + ?: return if (isWorkAreaSelected) "work-area" else "none" + return "key-${System.identityHashCode(curveOf(keyframe))}-${System.identityHashCode(keyframe)}" +} + @Composable private fun PreviewSection(controller: TimelineController, refresh: () -> Unit) { Section(CutsceneLang.PREVIEW.lang) { @@ -112,12 +133,12 @@ private fun OriginSection(session: CutsceneEditorSession, refresh: () -> Unit) { @Composable private fun KeyframeSection( - session: CutsceneEditorSession, + controller: TimelineController, keyframe: Keyframe, curve: ChannelCurve, refresh: () -> Unit, + extras: @Composable () -> Unit, ) { - val controller = session.timeline val count = controller.selectedKeyframes.size val title = if (count == 1) CutsceneLang.KEYFRAME.lang else CutsceneLang.KEYFRAMES.lang(count) Section(title) { @@ -127,13 +148,9 @@ private fun KeyframeSection( refresh() } if (curve.spec.valueOptions.isEmpty()) { - val layer = controller.layerOf(keyframe) - val channel = layer?.channels?.indexOf(curve) ?: -1 - val bounds = if (channel >= 0) { - layer?.let(controller::propertyOf)?.bounds(channel) - } else { - null - } ?: ChannelBounds.Unbounded + val owner = controller.propertyOf(keyframe) + val channel = owner?.curves?.indexOfFirst { it === curve } ?: -1 + val bounds = (if (channel >= 0) owner?.bounds(channel) else null) ?: ChannelBounds.Unbounded FloatRow( CutsceneLang.VALUE.lang, keyframe.value, @@ -149,7 +166,7 @@ private fun KeyframeSection( refresh() } } - WorldReadout(session) + extras() } } @@ -166,9 +183,8 @@ private fun DiscreteValueField(options: List, value: Float, } private fun channelPath(controller: TimelineController, curve: ChannelCurve): String { - val layer = controller.allLayers().firstOrNull { it.channels.any { channel -> channel === curve } } - val property = layer?.let { controller.propertyOf(it) } - return listOfNotNull(property?.nameState, layer?.nameState, curve.name).joinToString(" / ") + val property = controller.propertyOf(curve) + return listOfNotNull(property?.nameState, curve.name).joinToString(" / ") } @Composable diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineLayerDialog.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePropertyDialog.kt similarity index 54% rename from runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineLayerDialog.kt rename to runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePropertyDialog.kt index 90f622785..107470f9c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineLayerDialog.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePropertyDialog.kt @@ -6,70 +6,6 @@ import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.* import ru.hollowhorizon.hollowengine.client.utils.lang -@Composable -internal fun LayerSettingsDialog( - controller: TimelineController, - layer: AnimLayer, - refresh: () -> Unit, - onClose: () -> Unit, -) { - val property = controller.propertyOf(layer) ?: return onClose() - DialogFrame(CutsceneLang.LAYER_SETTINGS.lang, onClose) { - Text(property.nameState, modifier = Modifier.fontSize(10f).foreground(TimelineColors.Muted)) - TextField( - value = layer.nameState, - onChange = { layer.nameState = it; refresh() }, - modifier = Modifier.size(100.percent, 24.px).background(TimelineColors.Background) - .border(1.px, TimelineColors.Border, 3f).padding(6.px, 2.px).foreground(TimelineColors.Text) - .fontSize(11f), - ) - - Text(CutsceneLang.BLEND_MODE.lang, modifier = Modifier.fontSize(9f).foreground(TimelineColors.Muted)) - PillFlow(id = "layer-blend-modes") { - val modes = if (property.layers.firstOrNull() === layer) setOf(layer.blendMode) - else property.type.blendModes - modes.forEach { mode -> - Pill(blendModeLabel(mode), layer.blendMode == mode, id = "layer-blend-${mode.name}") { - controller.edit("Edit layer blending") { layer.blendMode = mode } - refresh() - } - } - } - - if (property.channels.any { it.supportsCurveEditor }) { - FloatRow(CutsceneLang.LAYER_WEIGHT.lang, layer.weight, min = 0f, max = 1f) { next -> - controller.edit("Edit layer weight") { layer.weight = next } - refresh() - } - } - - Row(modifier = Modifier.size(100.percent, 24.px).alignItems(vertical = UiAlign.CENTER).gap(6.px)) { - Pill(CutsceneLang.LAYER_VISIBLE.lang, layer.isVisible) { - layer.isVisible = !layer.isVisible - refresh() - } - Pill(CutsceneLang.LAYER_LOCKED.lang, layer.isLocked) { - layer.isLocked = !layer.isLocked - refresh() - } - } - - Row(modifier = Modifier.size(100.percent, UiLength.Auto).gap(8.px).align(horizontal = UiAlign.END)) { - if (property.layers.size > 1) { - ToolbarButton(CutsceneLang.LAYER_DELETE.lang, "layer-delete", TimelineColors.Danger) { - controller.edit("Delete layer") { - property.layers.remove(layer) - if (controller.activeLayer === layer) controller.activeLayer = property.layers.firstOrNull() - } - refresh() - onClose() - } - } - ToolbarButton(CutsceneLang.CLOSE.lang, "layer-close", TimelineColors.Blue) { onClose() } - } - } -} - @Composable internal fun PropertySettingsDialog( controller: TimelineController, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt index 6d6196c33..ea779616d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt @@ -2,7 +2,6 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.UiColor -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimLayer import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimProperty import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ChannelCurve import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.Keyframe @@ -22,11 +21,11 @@ import kotlin.math.min import kotlin.math.pow import kotlin.math.round -internal const val TimelineRulerHeight = 28f -internal const val TimelineGroupRowHeight = 22f -internal const val TimelinePropertyRowHeight = 24f -internal const val TimelineLayerRowHeight = 22f -internal const val TimelineChannelRowHeight = 20f +internal const val TimelineRulerHeight = 24f + +internal const val TimelineGroupRowHeight = 18f +internal const val TimelinePropertyRowHeight = 18f +internal const val TimelineChannelRowHeight = 15f internal const val TimelineLeftPadding = 58f internal const val CurveValueGutter = 46f internal const val TimelineMinContentWidth = 600f @@ -58,7 +57,6 @@ internal val PlayheadHeadShape: Shape = GenericShape { size -> internal enum class TimelineRowKind { GROUP, PROPERTY, - LAYER, CHANNEL, } @@ -71,7 +69,6 @@ internal data class TimelineRow( val kind: TimelineRowKind, val group: TrackGroup? = null, val property: AnimProperty<*>? = null, - val layer: AnimLayer? = null, val curve: ChannelCurve? = null, val locked: Boolean = false, val visible: Boolean = true, @@ -80,9 +77,8 @@ internal data class TimelineRow( val curves: List get() = when { curve != null -> listOf(curve) - layer != null -> layer.channels - property != null -> property.layers.flatMap { it.channels } - group != null -> group.allProperties().flatMap { owner -> owner.layers.flatMap { it.channels } } + property != null -> property.curves + group != null -> group.allProperties().flatMap { it.curves } else -> emptyList() } } @@ -92,6 +88,7 @@ internal fun timelineRows(controller: TimelineController, curveEditorOnly: Boole var y = TimelineRulerHeight fun appendGroup(group: TrackGroup, depth: Int, parentLocked: Boolean, parentVisible: Boolean) { + if (!group.hasListedContent) return if (curveEditorOnly && group.allProperties().none { property -> property.channels.any { it.supportsCurveEditor } }) return @@ -113,7 +110,12 @@ internal fun timelineRows(controller: TimelineController, curveEditorOnly: Boole group.children.forEach { appendGroup(it, depth + 1, locked, visible) } group.properties.forEach { property -> + if (!property.isListed) return@forEach if (curveEditorOnly && property.channels.none { it.supportsCurveEditor }) return@forEach + val propertyVisible = visible && property.isVisible + val propertyLocked = locked || property.isLocked + + val singleCurve = property.curves.singleOrNull() rows += TimelineRow( id = "timeline-property-${System.identityHashCode(property)}", label = property.nameState, @@ -122,46 +124,31 @@ internal fun timelineRows(controller: TimelineController, curveEditorOnly: Boole height = TimelinePropertyRowHeight, kind = TimelineRowKind.PROPERTY, property = property, - locked = locked, - visible = visible && property.layers.any { it.isVisible }, + curve = singleCurve, + locked = propertyLocked, + visible = propertyVisible && (singleCurve?.isVisible ?: true), + color = singleCurve?.color, ) y += TimelinePropertyRowHeight if (!property.isExpanded) return@forEach - property.layers.forEach { layer -> - val layerVisible = visible && layer.isVisible + if (property.curves.size <= 1) return@forEach + + property.curves.filter { !curveEditorOnly || it.spec.supportsCurveEditor }.forEach { curve -> rows += TimelineRow( - id = "timeline-layer-${System.identityHashCode(layer)}", - label = layer.nameState, + id = "timeline-channel-${System.identityHashCode(curve)}", + label = curve.name, depth = depth + 2, y = y, - height = TimelineLayerRowHeight, - kind = TimelineRowKind.LAYER, + height = TimelineChannelRowHeight, + kind = TimelineRowKind.CHANNEL, property = property, - layer = layer, - locked = locked || layer.isLocked, - visible = layerVisible, + curve = curve, + locked = propertyLocked, + visible = propertyVisible && curve.isVisible, + color = curve.color, ) - y += TimelineLayerRowHeight - if (!layer.isExpanded) return@forEach - - layer.channels.filter { !curveEditorOnly || it.spec.supportsCurveEditor }.forEach { curve -> - rows += TimelineRow( - id = "timeline-channel-${System.identityHashCode(curve)}", - label = curve.name, - depth = depth + 3, - y = y, - height = TimelineChannelRowHeight, - kind = TimelineRowKind.CHANNEL, - property = property, - layer = layer, - curve = curve, - locked = locked || layer.isLocked, - visible = layerVisible && curve.isVisible, - color = curve.color, - ) - y += TimelineChannelRowHeight - } + y += TimelineChannelRowHeight } } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt new file mode 100644 index 000000000..9b83d221b --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt @@ -0,0 +1,219 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.withFrameNanos +import kotlinx.coroutines.isActive +import ru.hollowhorizon.hollowengine.client.ui.Box +import ru.hollowhorizon.hollowengine.client.ui.Column +import ru.hollowhorizon.hollowengine.client.ui.HollowUiContent +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.Row +import ru.hollowhorizon.hollowengine.client.ui.UiBoxMode +import ru.hollowhorizon.hollowengine.client.ui.grow +import ru.hollowhorizon.hollowengine.client.ui.ide.CutsceneIcon +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimProperty +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineController +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineKeys +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CutsceneEditorSessions +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorStylesheet +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorTarget +import ru.hollowhorizon.hollowengine.client.ui.inspector.PublishInspector +import ru.hollowhorizon.hollowengine.client.ui.percent +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.scrollable +import ru.hollowhorizon.hollowengine.client.ui.size +import ru.hollowhorizon.hollowengine.client.ui.style +import ru.hollowhorizon.hollowengine.client.utils.lang + +/** + * What the timeline window is showing. + */ +class TimelineTarget( + val id: String, + val controller: TimelineController, + /** Called when the editor changed something the owner has to write down. */ + val refresh: () -> Unit, + val onKeyInput: (Int, Int) -> Boolean = { _, _ -> false }, + /** What the record button does, or null when this target has nothing to capture. */ + val onCapture: (() -> Unit)? = null, + val onSave: (() -> Unit)? = null, + val onLoad: (() -> Unit)? = null, + /** Advances whatever the timeline is driving, in seconds, while it is playing. */ + val advance: ((Float) -> Unit)? = null, + /** Dialogs and chrome the owner wants drawn over the timeline. */ + val overlay: HollowUiContent? = null, +) + +/** + * Whose timeline the shared window shows, wherever it is drawn. + * + * Last publisher wins, the same way the inspector works. + */ +object IdeTimelines { + var current: TimelineTarget? by mutableStateOf(null) + private set + + private var owner: String? = null + + fun publish(source: String, target: TimelineTarget?) { + if (target == null) { + release(source) + return + } + if (owner == source && current?.id == target.id) return + owner = source + current = target + } + + fun release(source: String) { + if (owner != source) return + owner = null + current = null + } +} + +/** + * Keeps [target] in the timeline window for as long as this editor is composed. + */ +@Composable +fun PublishTimeline(source: String, key: Any?, target: () -> TimelineTarget?) { + LaunchedEffect(source, key) { IdeTimelines.publish(source, target()) } + DisposableEffect(source) { onDispose { IdeTimelines.release(source) } } +} + +@Composable +fun TimelineDock(keyboardActive: Boolean = true) { + val target = IdeTimelines.current + if (target == null) { + CutsceneTimelineDock(CutsceneEditorSessions.default, keyboardActive) + return + } + + val controller = target.controller + var propertySettings by remember { mutableStateOf?>(null) } + + val revision = remember(target.id) { mutableStateOf(0) } + val refresh: () -> Unit = remember(target) { + { + target.refresh() + revision.value++ + } + } + revision.value + + LaunchedEffect(target.id) { + var lastNanos = -1L + while (isActive) { + withFrameNanos { now -> + val delta = if (lastNanos < 0L) 0f + else ((now - lastNanos) / 1_000_000_000.0).toFloat().coerceIn(0f, 0.1f) + lastNanos = now + + if (controller.isPlaying) target.advance?.invoke(delta) + if (controller.curveAxis.advance(now)) revision.value++ + } + } + } + + PublishInspector(source = "timeline-${target.id}", key = controller.selectionKey()) { + if (!controller.hasInspectableSelection()) return@PublishInspector null + InspectorTarget( + id = "timeline-${target.id}-${controller.selectionKey()}", + title = CutsceneLang.PROPERTIES.lang, + icon = CutsceneIcon, + ) { + revision.value + TimelineSelectionFields(controller, refresh) + } + } + + CompositionLocalProvider(LocalTimelineRevision provides revision.value) { + Box(id = "ide-timeline-dock", mode = UiBoxMode.STACK, modifier = Modifier.size(100.percent, 100.percent)) { + HollowTimelineEditor( + controller = controller, + refresh = refresh, + onKeyInput = { key, modifiers -> + val handled = target.onKeyInput(key, modifiers) || TimelineKeys.handle(controller, key, modifiers) + if (handled) refresh() + handled + }, + keyboardActive = keyboardActive, + onCapture = { target.onCapture?.invoke() }, + onSave = { target.onSave?.invoke() }, + onLoad = { target.onLoad?.invoke() }, + onPropertySettings = { propertySettings = it }, + features = TimelineFeatures( + capture = target.onCapture != null, + storage = target.onSave != null, + cameraPreview = false, + ), + ) + target.overlay?.invoke() + propertySettings?.let { property -> + PropertySettingsDialog(controller, property, refresh) { propertySettings = null } + } + } + } +} + +/** + * Timeline editor as a part of some other window. + */ +@Composable +fun EmbeddedTimelineEditor( + controller: TimelineController, + onChanged: () -> Unit, + features: TimelineFeatures, + modifier: Modifier = Modifier.size(100.percent, 100.percent), + selectionPanel: Boolean = true, +) { + val revision = remember(controller) { mutableStateOf(0) } + val refresh: () -> Unit = remember(controller) { + { + onChanged() + revision.value++ + } + } + revision.value + + LaunchedEffect(controller) { + while (isActive) { + withFrameNanos { now -> if (controller.curveAxis.advance(now)) revision.value++ } + } + } + + CompositionLocalProvider(LocalTimelineRevision provides revision.value) { + Row(modifier = modifier) { + Box(mode = UiBoxMode.STACK, modifier = Modifier.size(0.px, 100.percent).grow(1f)) { + HollowTimelineEditor( + controller = controller, + refresh = refresh, + onKeyInput = { key, modifiers -> + TimelineKeys.handle(controller, key, modifiers).also { handled -> if (handled) refresh() } + }, + keyboardActive = true, + features = features, + ) + } + if (selectionPanel) { + Column( + tags = listOf("insp-panel"), + modifier = Modifier.size(EmbeddedSelectionWidth.px, 100.percent).style(InspectorStylesheet) + .scrollable(horizontal = false), + ) { + revision.value + TimelineSelectionFields(controller, refresh) + } + } + } + } +} + +private const val EmbeddedSelectionWidth = 220f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt index 01fc22fbf..99379c5c4 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt @@ -1,14 +1,19 @@ package ru.hollowhorizon.hollowengine.client.ui.inspector import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.snapshotFlow import ru.hollowhorizon.hollowengine.client.ui.Column import ru.hollowhorizon.hollowengine.client.ui.HollowUiContent import ru.hollowhorizon.hollowengine.client.ui.Image import ru.hollowhorizon.hollowengine.client.ui.Modifier import ru.hollowhorizon.hollowengine.client.ui.Row import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollHandle +import ru.hollowhorizon.hollowengine.client.ui.scroll.rememberScrollState import ru.hollowhorizon.hollowengine.client.ui.scrollable import ru.hollowhorizon.hollowengine.client.ui.style @@ -57,6 +62,9 @@ val LocalInspectorHost: ProvidableCompositionLocal = composition /** * The panel itself: heading, then the target's own fields under a scrollbar. [leading] is for chrome * an editor wants beside the title, such as a back arrow or a layer switcher. + * + * With [keepScroll] the scroll position outlives the panel: hiding the window or switching its tab + * away and back returns to the same place, while showing a different target starts at the top. */ @Composable fun InspectorPanel( @@ -65,14 +73,18 @@ fun InspectorPanel( empty: String = "", leading: HollowUiContent? = null, trailing: HollowUiContent? = null, + keepScroll: Boolean = false, ) { val styled = target?.styles.orEmpty() .fold(modifier.style(InspectorStylesheet)) { chain, sheet -> chain.style(sheet) } + val scroll = rememberScrollState() + if (keepScroll) KeepScroll(target?.id, scroll) + Column( - id = "inspector-${target?.id ?: "empty"}", + id = "inspector-panel", tags = listOf("insp-panel"), - modifier = styled.scrollable(horizontal = false), + modifier = styled.scrollable(horizontal = false, state = scroll), ) { if (leading != null || trailing != null || target != null) { Row(tags = listOf("insp-head")) { @@ -92,3 +104,26 @@ fun InspectorPanel( Column(tags = listOf("insp-body")) { target.content() } } } + +@Composable +private fun KeepScroll(targetId: String?, scroll: UiScrollHandle) { + val saved = remember { InspectorScrollMemory.offset } + + LaunchedEffect(targetId) { + if (InspectorScrollMemory.target == targetId) { + scroll.scrollTo(y = saved) + } else { + InspectorScrollMemory.target = targetId + InspectorScrollMemory.offset = 0f + scroll.scrollTo(x = 0f, y = 0f) + } + } + LaunchedEffect(scroll) { + snapshotFlow { scroll.offsetY }.collect { InspectorScrollMemory.offset = it } + } +} + +private object InspectorScrollMemory { + var target: String? = null + var offset: Float = 0f +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiTextOverflowResolver.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiTextOverflowResolver.kt index e6dc2266e..fefeb5b8b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiTextOverflowResolver.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiTextOverflowResolver.kt @@ -40,7 +40,10 @@ internal object UiTextOverflowResolver { private var ellipsisStyle = UiInlineStyle.Empty private var ellipsisHeight = command.fontSize + private var originalEnd = Float.NaN + fun append(fragment: UiTextFragment): Boolean { + keepGapBefore(fragment) return when (fragment) { is UiTextRun -> appendText(fragment) is UiTextSpaceRun -> appendFixed(fragment, fragment.width) { it.copy(x = cursorX) }.also { @@ -52,6 +55,17 @@ internal object UiTextOverflowResolver { } } + private fun keepGapBefore(fragment: UiTextFragment) { + if (!originalEnd.isNaN()) { + val gap = fragment.x - originalEnd + if (gap > 0.01f) { + cursorX += gap + if (text.isNotEmpty() && text.last() != ' ') text.append(' ') + } + } + originalEnd = fragment.x + fragment.width + } + fun appendEllipsis() { val width = ellipsisWidth(ellipsisStyle) if (width > availableWidth + 0.01f) return diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiModel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiModel.kt index d6e18a7a2..ddba180b6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiModel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiModel.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.* import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.isActive import net.minecraft.client.Minecraft import net.minecraft.client.renderer.LightTexture import net.minecraft.client.renderer.texture.OverlayTexture @@ -53,7 +54,8 @@ class ModelViewerState(model: String) { var yaw by mutableStateOf(0f) var pitch by mutableStateOf(0f) - var zoom by mutableStateOf(1f) + private val zoomSpring = SpringZoom(1f, min = 0.1f, max = 10f, perNotch = ModelZoomPerNotch) + val zoom: Float get() = zoomSpring.value var offsetX by mutableStateOf(0f) var offsetY by mutableStateOf(0f) @@ -78,6 +80,11 @@ class ModelViewerState(model: String) { val modelFlow: StateFlow get() = attachment.flow + /** One wheel notch; the scale springs to where it sends it. */ + fun zoomBy(scrollY: Float) = zoomSpring.scroll(scrollY) + + internal fun advanceZoom(frameNanos: Long) = zoomSpring.advance(frameNanos) + /** The model's runtime node hierarchy (roots), for inspection UIs. */ val nodes: List get() { @@ -324,6 +331,9 @@ fun Model( modifier: Modifier? = null, onDrag: ((UiEvent) -> Boolean)? = null, ) { + LaunchedEffect(state) { + while (isActive) withFrameNanos(state::advanceZoom) + } Box( id = id, tags = tags, @@ -340,8 +350,7 @@ fun Model( } event.consume() }.onScroll { event -> - val factor = if (event.scrollY > 0f) 0.9f else 1.1f - state.zoom = (state.zoom * factor).coerceIn(0.1f, 10f) + state.zoomBy(event.scrollY) event.consume() }.drawBehind(key = state) { if (state.showGrid) drawGrid(state) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt index c5298f1e9..dd0ae0518 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt @@ -52,6 +52,7 @@ fun UiTreeView( filterPlaceholder: String = "Filter", onFilterOpened: ((String) -> Unit)? = null, scrollState: UiScrollHandle = rememberScrollState(), + onBackgroundClick: (() -> Unit)? = null, ) { Column( tags = listOf("tree-view") + tags, @@ -75,7 +76,12 @@ fun UiTreeView( } Column( tags = listOf("tree-view-scroll"), - modifier = Modifier.size(100.percent, 0.px).grow(1f).scrollable(state = scrollState), + modifier = Modifier.size(100.percent, 0.px).grow(1f).scrollable(state = scrollState).then( + if (onBackgroundClick == null) Modifier else Modifier.input(clickable = true).onClick { event -> + onBackgroundClick() + event.consume() + }, + ), ) { items.forEach { item -> key(item.id) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt index 31f750892..e3dbca517 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.client.utils import com.mojang.blaze3d.vertex.PoseStack import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen +import net.minecraft.client.renderer.ShaderInstance import net.minecraft.client.renderer.texture.AbstractTexture import net.minecraft.core.RegistryAccess import net.minecraft.resources.ResourceLocation @@ -30,6 +31,9 @@ val instancingBackend get() = if (IrisHelper.shouldOverrideShaders()) IrisHelper val instancingEntityInfo get() = if (IrisHelper.shouldOverrideShaders()) IrisHelper.capturedEntityInfo() else InstancingEntityInfo() val areShadersEnabled get() = IrisHelper.areShadersEnabled() +fun shaderPackParticleShader(translucent: Boolean): ShaderInstance? = + if (IrisHelper.shouldOverrideShaders()) IrisHelper.particleShader(translucent) else null + data class InstancingEntityInfo( val entity: Int = -1, val blockEntity: Int = 0, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt new file mode 100644 index 000000000..cc0e23b96 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt @@ -0,0 +1,47 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import net.minecraft.resources.ResourceLocation +import net.minecraft.server.packs.resources.ResourceManager +import net.minecraft.server.packs.resources.ResourceManagerReloadListener +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.common.utils.rl +import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect +import ru.hollowhorizon.hollowengine.common.vfx.VfxFormat + +/** + * The `.vfx` files of every loaded pack, by resource id. + */ +object VfxAssets : ResourceManagerReloadListener { + private val effects = HashMap() + + val ids: Set get() = effects.keys + + operator fun get(id: ResourceLocation): VfxEffect? = effects[id] + + operator fun get(id: String): VfxEffect? = ResourceLocation.tryParse(normalize(id))?.let(effects::get) + + override fun onResourceManagerReload(resourceManager: ResourceManager) { + effects.clear() + resourceManager.listResources(VfxFormat.RESOURCE_FOLDER) { it.path.endsWith(VfxFormat.EXTENSION) } + .forEach { (location, resource) -> + try { + effects[location] = resource.open().use { stream -> + VfxFormat.read(stream.readBytes().toString(Charsets.UTF_8)) + } + } catch (e: Exception) { + HollowEngine.LOGGER.warn("Could not read effect {}: {}", location, e.message) + } + } + VfxScenes.onAssetsReloaded() + } + + /** Accepts both `pack:vfx/fire.vfx` and the bare `pack:fire` an author is likely to type. */ + private fun normalize(id: String): String { + val trimmed = id.trim() + val resource = trimmed.rl + val path = resource.path + val withFolder = if (path.startsWith("${VfxFormat.RESOURCE_FOLDER}/")) path else "${VfxFormat.RESOURCE_FOLDER}/$path" + val withExtension = if (withFolder.endsWith(VfxFormat.EXTENSION)) withFolder else "$withFolder${VfxFormat.EXTENSION}" + return "${resource.namespace}:$withExtension" + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt new file mode 100644 index 000000000..b7e8618ee --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt @@ -0,0 +1,124 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import net.minecraft.client.Minecraft +import net.minecraft.world.level.Level +import net.minecraft.world.phys.Vec3 +import org.joml.Matrix4f +import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.handlers.TickHandler +import ru.hollowhorizon.hollowengine.client.models.internal.rendering.RenderPipeline +import ru.hollowhorizon.hollowengine.client.models.internal.v2.Attachment +import ru.hollowhorizon.hollowengine.client.models.internal.v2.RigAttachmentFactories +import ru.hollowhorizon.hollowengine.client.models.internal.v2.RuntimeNode +import ru.hollowhorizon.hollowengine.client.utils.math.asMatrix4f +import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxBoneAttachmentSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxTransform + +/** + * An effect attached to bone. + */ +class VfxBoneAttachment( + private val spec: VfxBoneAttachmentSpec, + private val node: RuntimeNode, +) : Attachment(node) { + private var instance: VfxInstance? = null + private var lastGameTime = Float.NaN + private var lastFrame = Long.MIN_VALUE + + /** Bone space to camera-relative space, captured while the model was drawn. */ + private val placement = Matrix4f() + + override fun collectCommands(pipeline: RenderPipeline) { + if (!spec.autoPlay || spec.effect.isBlank()) return + + pipeline.addBatchedRenderable { + if (!node.isVisible) return@addBatchedRenderable + + val frame = TickHandler.renderFrame + if (frame == lastFrame) return@addBatchedRenderable + lastFrame = frame + + placement.set(stack.last().pose()).mul(globalMatrix.asMatrix4f()) + VfxBoneBindings.submit(this@VfxBoneAttachment) + } + } + + /** Advances the effect and says where it is; called once a frame by the world renderer. */ + fun update(cameraPosition: Vec3): VfxBoneBinding? { + val level = Minecraft.getInstance().level ?: return null + val playing = instance ?: create(level) ?: return null + + val now = TickHandler.gameTime + val dt = when { + lastGameTime.isNaN() -> 0f + else -> ((now - lastGameTime) / TICKS_PER_SECOND).coerceIn(0f, MAX_STEP_SECONDS) + } + lastGameTime = now + + val local = Matrix4f(placement) + applyOffset(local) + + val translation = local.getTranslation(Vector3f()) + playing.moveTo( + Vec3( + cameraPosition.x + translation.x, + cameraPosition.y + translation.y, + cameraPosition.z + translation.z, + ) + ) + + playing.partialTick = TickHandler.partialTick + playing.gameTime = now + playing.budget = VfxBudget.share(1) + playing.update(dt) + + return VfxBoneBinding(playing, local) + } + + /** The offset the author gave the attachment, on top of the bone. */ + private fun applyOffset(matrix: Matrix4f) { + val transform = VfxTransform(spec.offset, spec.rotation, Vec3f(spec.scale, spec.scale, spec.scale)) + val frame = VfxFrame().setCombined(VfxFrame().setIdentity(), transform) + matrix.mul(frame.toMatrix(MutableMat4f()).asMatrix4f()) + } + + private fun create(level: Level): VfxInstance? { + val effect = VfxAssets[spec.effect] ?: return null + return VfxInstance(effect, spec.effect, VfxWorldEnvironment(level)).also { instance = it } + } + + private companion object { + const val TICKS_PER_SECOND = 20f + const val MAX_STEP_SECONDS = 0.25f + } +} + +/** One bone effect, already advanced, with the matrix that places it in front of the camera. */ +class VfxBoneBinding(val instance: VfxInstance, val placement: Matrix4f) + +/** + * The bone effects drawn this frame. + */ +object VfxBoneBindings { + private val submitted = ArrayList() + private val bindings = ArrayList() + + fun submit(attachment: VfxBoneAttachment) { + submitted += attachment + } + + fun drain(cameraPosition: Vec3): List { + bindings.clear() + submitted.forEach { attachment -> attachment.update(cameraPosition)?.let(bindings::add) } + submitted.clear() + return bindings + } + + fun register() { + RigAttachmentFactories.register("hollowengine:rig/vfx") { spec, context -> + VfxBoneAttachment(spec as VfxBoneAttachmentSpec, context.node) + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt new file mode 100644 index 000000000..1ca71bec0 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt @@ -0,0 +1,541 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.client.utils.math.rotateBy +import ru.hollowhorizon.hollowengine.common.utils.MutableColor +import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.math.QuatF +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables +import ru.hollowhorizon.hollowengine.common.vfx.VfxDirectionMode +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind +import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value +import kotlin.math.PI +import kotlin.math.ceil +import kotlin.math.cos +import kotlin.math.sin +import kotlin.math.sqrt +import kotlin.math.tan +import kotlin.random.Random + +/** + * One emitter of a playing effect. + */ +class VfxEmitter( + val spec: VfxEmitterSpec, + val instance: VfxInstance, + val node: VfxNodeRuntime, + private val expressions: VfxExpressions, + private val seed: Int, +) { + val particles = VfxParticles(spec.emission.maxParticles.coerceIn(1, MAX_PARTICLES_PER_EMITTER)) + + val frame: VfxFrame get() = node.frame + + val simToRender: MutableMat4f = MutableMat4f().setIdentity() + + val context = VfxEvalContext() + + private var random = Random(seed) + + private val rate = scalar(VfxAnimatables.RATE, spec.emission.rate, 0f) + private val radius = scalar(VfxAnimatables.SHAPE_RADIUS, spec.shape.radius, 0f) + private val angle = scalar(VfxAnimatables.SHAPE_ANGLE, spec.shape.angle, 0f) + private val thickness = scalar(VfxAnimatables.SHAPE_THICKNESS, spec.shape.thickness, 1f) + private val extents = vector(VfxAnimatables.SHAPE_EXTENTS, spec.shape.extents, 0f) + + private val lifetime = scalar(VfxAnimatables.LIFETIME, spec.spawn.lifetime, 1f) + private val speed = scalar(VfxAnimatables.SPEED, spec.spawn.speed, 0f) + private val offset = vector(VfxAnimatables.OFFSET, spec.spawn.offset, 0f) + private val inheritVelocity = scalar(VfxAnimatables.INHERIT_VELOCITY, spec.spawn.inheritVelocity, 0f) + + private val appearance = spec.appearance + private val size = vector(VfxAnimatables.SIZE, appearance.size, 1f, VfxRangeMode.PER_PARTICLE) + private val spin = vector(VfxAnimatables.SPIN, appearance.rotation, 0f, VfxRangeMode.PER_PARTICLE) + private val color = VfxSamplers.color( + appearance.color, + expressions, + salt = VfxAnimatables.COLOR.hashCode(), + drive = node.drive(VfxAnimatables.COLOR), + ) + + private val liveSize = isLive(VfxAnimatables.SIZE, appearance.size) + private val liveSpin = isLive(VfxAnimatables.SPIN, appearance.rotation) + private val liveColor = !VfxSamplers.isFixedPerParticle(appearance.color) || + node.drive(VfxAnimatables.COLOR) != null + + private val gravity = scalar(VfxAnimatables.GRAVITY, spec.motion.gravity, 0f, VfxRangeMode.PER_PARTICLE) + private val drag = scalar(VfxAnimatables.DRAG, spec.motion.drag, 0f, VfxRangeMode.PER_PARTICLE) + + private val modules: List = spec.modules + .filter { it.enabled } + .mapNotNull { module -> + VfxModuleRuntimes.create(module, VfxModuleContext(spec, expressions) { field -> + node.drive(VfxAnimatables.moduleProperty(module.id, field)) + }) + } + + /** The flipbook grid the renderer cuts the material region into; one cell without a flipbook. */ + val uvColumns: Int + val uvRows: Int + + init { + val flipbook = spec.modules.filterIsInstance().firstOrNull { it.enabled } + uvColumns = flipbook?.columns?.coerceAtLeast(1) ?: 1 + uvRows = flipbook?.rows?.coerceAtLeast(1) ?: 1 + } + + /** An emitter whose node is off neither emits nor draws, but keeps the particles it has. */ + val enabled: Boolean get() = node.enabled + + var age: Float = 0f + private set + + /** Seconds until the next loop starts, while the emitter is sleeping between loops. */ + private var sleepLeft: Float = 0f + private var spawnDebt: Float = 0f + private var born: Int = 0 + private var stopping: Boolean = false + + /** Whether this emitter will ever produce anything again. */ + val isFinished: Boolean + get() = (stopping || isExpired()) && particles.count == 0 + + private val spawnOrigin = MutableVec3f() + private var spawnRotation: QuatF = QuatF.IDENTITY + private val spawnScale = MutableVec3f(Vec3f.ONES) + + private val scratchPosition = MutableVec3f() + private val scratchDirection = MutableVec3f() + private val scratchVector = MutableVec3f() + private val scratchColor = MutableColor(1f, 1f, 1f, 1f) + + /** Extra velocity the modules asked for, for this particle and this step only. */ + var stepVelocityX: Float = 0f + var stepVelocityY: Float = 0f + var stepVelocityZ: Float = 0f + + /** Where the particle was before it moved, so a collision can put it back. */ + var previousX: Float = 0f + var previousY: Float = 0f + var previousZ: Float = 0f + + init { + reset() + } + + /** Stops emitting; whatever is alive lives out its lifetime. */ + fun stop() { + stopping = true + } + + /** Stops emitting and drops everything alive at once. */ + fun clear() { + particles.clear() + stopping = true + } + + /** + * Puts the emitter back where it was when the effect was created. + */ + fun reset() { + particles.clear() + random = Random(seed) + context.rng = random + context.variables.clear() + age = 0f + sleepLeft = 0f + born = 0 + stopping = false + spawnDebt = spec.emission.burst.toFloat() + rollEmitterRandoms() + } + + private fun rollEmitterRandoms() { + repeat(4) { context.variables["emitter_random_${it + 1}"] = random.nextFloat() } + } + + /** + * Recomputes how the emitter maps to what is drawn, after the node has placed its frame. + */ + fun refreshSpace() { + when (spec.space) { + VfxSimulationSpace.LOCAL -> { + frame.toFollowedMatrix(simToRender, spec.inheritRotation, spec.inheritScale) + spawnOrigin.set(Vec3f.ZERO) + spawnRotation = if (spec.inheritRotation) QuatF.IDENTITY else frame.rotation + spawnScale.set(if (spec.inheritScale) Vec3f.ONES else frame.scale) + } + + VfxSimulationSpace.WORLD -> { + val offset = instance.originMinusAnchor + simToRender.setIdentity().translate(-offset.x, -offset.y, -offset.z) + spawnOrigin.set(frame.position).add(offset) + spawnRotation = frame.rotation + spawnScale.set(frame.scale) + } + } + } + + /** + * Advances the emitter by [dt] seconds, split into steps no longer than the emitter asked for. + */ + fun update(dt: Float) { + if (dt <= 0f) return + + val maxStep = spec.maxStep.coerceAtLeast(MIN_STEP) + val steps = ceil(dt / maxStep).toInt().coerceIn(1, MAX_SUBSTEPS) + val step = dt / steps + repeat(steps) { advance(step) } + } + + private fun advance(dt: Float) { + age += dt + + if (sleepLeft > 0f) { + sleepLeft -= dt + if (sleepLeft <= 0f) startLoop() + } else if (isExpired()) { + val emission = spec.emission + if (emission.loop && !stopping) { + sleepLeft = emission.loopDelay + if (sleepLeft <= 0f) startLoop() + } + } + + if (enabled && !stopping && !isExpired() && sleepLeft <= 0f) emit(dt) + + fillEmitterContext() + modules.forEach { it.beginStep(this, dt) } + simulate(dt) + } + + private fun startLoop() { + age = 0f + born = 0 + spawnDebt += spec.emission.burst.toFloat() + rollEmitterRandoms() + } + + private fun isExpired(): Boolean { + val duration = spec.emission.duration + return duration > 0f && age >= duration + } + + private fun emit(dt: Float) { + fillEmitterContext() + val perSecond = rate.eval(context) + if (perSecond > 0f) spawnDebt += perSecond * dt + + while (spawnDebt >= 1f) { + spawnDebt -= 1f + if (!spawn()) { + spawnDebt = 0f + return + } + } + } + + /** Puts one particle into the world. Returns false when the emitter is full. */ + private fun spawn(): Boolean { + if (!instance.requestParticle()) return false + + val slot = particles.allocate() + if (slot < 0) return false + + fillEmitterContext() + context.particleRandom = random.nextFloat() + context.particleIndex = born.toFloat() + context.age = 0f + context.progress = 0f + context.speed = 0f + + val life = lifetime.eval(context).coerceAtLeast(MIN_LIFETIME) + context.lifetime = life + + pickShapePoint(scratchPosition, scratchDirection) + offset.eval(context, scratchVector) + scratchPosition.add(scratchVector) + + val launch = speed.eval(context) + scratchDirection.set( + scratchDirection.x * launch, + scratchDirection.y * launch, + scratchDirection.z * launch, + ) + + applySpawnSpace(scratchPosition, point = true) + applySpawnSpace(scratchDirection, point = false) + + particles.positionX[slot] = scratchPosition.x + particles.positionY[slot] = scratchPosition.y + particles.positionZ[slot] = scratchPosition.z + + val inherit = inheritVelocity.eval(context) + particles.velocityX[slot] = scratchDirection.x + instance.velocityX * inherit + particles.velocityY[slot] = scratchDirection.y + instance.velocityY * inherit + particles.velocityZ[slot] = scratchDirection.z + instance.velocityZ * inherit + + particles.age[slot] = 0f + particles.lifetime[slot] = life + particles.random[slot] = context.particleRandom + particles.index[slot] = context.particleIndex + particles.frame[slot] = 0f + + readSize(slot) + readSpin(slot) + readColor(slot) + + particles.light[slot] = instance.lightAt(this, slot) + + born++ + modules.forEach { it.onSpawn(this, slot) } + return true + } + + private fun simulate(dt: Float) { + var slot = 0 + while (slot < particles.count) { + particles.age[slot] += dt + if (particles.age[slot] >= particles.lifetime[slot]) { + particles.kill(slot) + continue + } + + fillParticleContext(slot) + + stepVelocityX = 0f + stepVelocityY = 0f + stepVelocityZ = 0f + modules.forEach { it.onStep(this, slot, dt) } + + val fall = gravity.eval(context) + if (fall != 0f) particles.velocityY[slot] -= fall * dt + + val friction = drag.eval(context) + if (friction > 0f) { + val keep = (1f - friction * dt).coerceIn(0f, 1f) + particles.velocityX[slot] *= keep + particles.velocityY[slot] *= keep + particles.velocityZ[slot] *= keep + } + + previousX = particles.positionX[slot] + previousY = particles.positionY[slot] + previousZ = particles.positionZ[slot] + + particles.positionX[slot] += (particles.velocityX[slot] + stepVelocityX) * dt + particles.positionY[slot] += (particles.velocityY[slot] + stepVelocityY) * dt + particles.positionZ[slot] += (particles.velocityZ[slot] + stepVelocityZ) * dt + + modules.forEach { it.onMoved(this, slot, dt) } + + if (slot < particles.count && particles.age[slot] >= particles.lifetime[slot]) { + particles.kill(slot) + continue + } + + if (liveSize) readSize(slot) + if (liveSpin) readSpin(slot) + if (liveColor) readColor(slot) + + if (instance.readsLight) particles.light[slot] = instance.lightAt(this, slot) + slot++ + } + } + + private fun readSize(slot: Int) { + if (appearance.uniformSize) size.evalUniform(context, scratchVector) else size.eval(context, scratchVector) + particles.sizeX[slot] = scratchVector.x + particles.sizeY[slot] = scratchVector.y + particles.sizeZ[slot] = scratchVector.z + } + + private fun readSpin(slot: Int) { + spin.eval(context, scratchVector) + particles.rotationX[slot] = scratchVector.x + particles.rotationY[slot] = scratchVector.y + particles.rotationZ[slot] = scratchVector.z + } + + private fun readColor(slot: Int) { + color.eval(context, scratchColor) + particles.colorR[slot] = scratchColor.r + particles.colorG[slot] = scratchColor.g + particles.colorB[slot] = scratchColor.b + particles.colorA[slot] = scratchColor.a + } + + /** Fills context with what does not depend on a particular particle. */ + fun fillEmitterContext() { + context.emitterAge = age + context.emitterCount = particles.count.toFloat() + context.effectTime = instance.time + context.partialTick = instance.partialTick + context.gameTime = instance.gameTime + context.data = instance.data + } + + /** Fills context for one particle, which is what every sampler reads. */ + fun fillParticleContext(slot: Int) { + fillEmitterContext() + val life = particles.lifetime[slot] + context.age = particles.age[slot] + context.lifetime = life + context.progress = if (life > 0f) (particles.age[slot] / life).coerceIn(0f, 1f) else 1f + context.positionX = particles.positionX[slot] + context.positionY = particles.positionY[slot] + context.positionZ = particles.positionZ[slot] + val vx = particles.velocityX[slot] + val vy = particles.velocityY[slot] + val vz = particles.velocityZ[slot] + context.velocityX = vx + context.velocityY = vy + context.velocityZ = vz + context.speed = sqrt(vx * vx + vy * vy + vz * vz) + context.particleRandom = particles.random[slot] + context.particleIndex = particles.index[slot] + } + + /** A particle position in effect space, which is what the world is read in. */ + fun toEffectSpace(slot: Int, into: MutableVec3f): MutableVec3f { + into.set(particles.positionX[slot], particles.positionY[slot], particles.positionZ[slot]) + return simToRender.transform(into, 1f) + } + + /** Turns a direction of effect space into the space this emitter simulates in. */ + fun toSimDirection(direction: Vec3f, into: MutableVec3f): MutableVec3f = when (spec.space) { + VfxSimulationSpace.WORLD -> into.set(direction) + VfxSimulationSpace.LOCAL -> { + val turned = direction.rotateBy(frame.rotation.inverted()) + into.set(turned.x, turned.y, turned.z) + } + } + + /** A point of the emitter frame, in the space particles live in; how a module places a force. */ + fun nodeToSimPoint(point: Vec3f, into: MutableVec3f): MutableVec3f { + into.set(point) + applySpawnSpace(into, point = true) + return into + } + + fun nodeToSimDirection(direction: Vec3f, into: MutableVec3f): MutableVec3f { + into.set(direction) + applySpawnSpace(into, point = false) + return into + } + + /** Moves a birth position or direction out of node space into the space particles live in. */ + private fun applySpawnSpace(vector: MutableVec3f, point: Boolean) { + vector.set(vector.x * spawnScale.x, vector.y * spawnScale.y, vector.z * spawnScale.z) + if (spawnRotation !== QuatF.IDENTITY) { + val rotated = (vector as Vec3f).rotateBy(spawnRotation) + vector.set(rotated.x, rotated.y, rotated.z) + } + if (point) vector.add(spawnOrigin) + } + + /** + * Picks a spawn point on the shape and the way the particle leaves it. + */ + private fun pickShapePoint(position: MutableVec3f, direction: MutableVec3f) { + val shape = spec.shape + position.set(Vec3f.ZERO) + direction.set(shape.direction) + + when (shape.kind) { + VfxShapeKind.POINT -> Unit + + VfxShapeKind.SPHERE -> { + randomDirection(direction) + val reach = radius.eval(context) * shellDepth(thickness.eval(context)) + position.set(direction.x * reach, direction.y * reach, direction.z * reach) + } + + VfxShapeKind.BOX -> { + extents.eval(context, scratchVector) + position.set( + (random.nextFloat() * 2f - 1f) * scratchVector.x, + (random.nextFloat() * 2f - 1f) * scratchVector.y, + (random.nextFloat() * 2f - 1f) * scratchVector.z, + ) + } + + VfxShapeKind.CONE -> { + val around = random.nextFloat() * TAU + val spread = tan(angle.eval(context).coerceIn(0f, 89f) * DEG_TO_RAD) * random.nextFloat() + val reach = radius.eval(context) * sqrt(random.nextFloat()) * shellDepth(thickness.eval(context)) + position.set(cos(around) * reach, 0f, sin(around) * reach) + direction.set(cos(around) * spread, 1f, sin(around) * spread).norm() + } + + VfxShapeKind.DISC -> { + val around = random.nextFloat() * TAU + val reach = radius.eval(context) * sqrt(random.nextFloat()) * shellDepth(thickness.eval(context)) + position.set(cos(around) * reach, 0f, sin(around) * reach) + direction.set(position).norm() + if (direction.sqrLength() < 1.0e-6f) direction.set(shape.direction) + } + + VfxShapeKind.LINE -> { + extents.eval(context, scratchVector) + val along = random.nextFloat() + position.set(scratchVector.x * along, scratchVector.y * along, scratchVector.z * along) + } + } + + when (shape.directionMode) { + VfxDirectionMode.FIXED -> direction.set(shape.direction) + VfxDirectionMode.RANDOM -> randomDirection(direction) + VfxDirectionMode.SHAPE -> Unit + } + if (direction.sqrLength() < 1.0e-6f) direction.set(Vec3f.Y_AXIS) else direction.norm() + } + + private fun randomDirection(into: MutableVec3f) { + val z = random.nextFloat() * 2f - 1f + val around = random.nextFloat() * TAU + val planar = sqrt((1f - z * z).coerceAtLeast(0f)) + into.set(cos(around) * planar, z, sin(around) * planar) + } + + private fun shellDepth(thickness: Float): Float = + if (thickness <= 0f) 1f else 1f - random.nextFloat() * thickness.coerceAtMost(1f) + + fun noiseSeed(axis: Int): Int = seed + axis * 6151 + + private fun scalar( + property: String, + value: VfxValue, + default: Float, + range: VfxRangeMode = VfxRangeMode.FRESH, + ): VfxFloatSampler = VfxSamplers.driven( + VfxSamplers.scalar(value, expressions, default, range, property.hashCode()), + node.drive(property), + ) + + private fun vector( + property: String, + value: VfxVec3Value, + default: Float, + range: VfxRangeMode = VfxRangeMode.FRESH, + ): VfxVec3Sampler = VfxSamplers.vec3(value, expressions, default, range, property.hashCode(), node.drive(property)) + + private fun isLive(property: String, value: VfxVec3Value): Boolean = + !VfxSamplers.isFixedPerParticle(value) || node.drive(property) != null + + companion object { + private const val MIN_STEP = 1f / 240f + private const val MAX_SUBSTEPS = 8 + private const val MIN_LIFETIME = 0.01f + private const val TAU = (PI * 2.0).toFloat() + private const val DEG_TO_RAD = (PI / 180.0).toFloat() + + /** A ceiling on what one emitter may ask for, whatever the file says. */ + const val MAX_PARTICLES_PER_EMITTER = 20_000 + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEnvironment.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEnvironment.kt new file mode 100644 index 000000000..a0f8b0225 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEnvironment.kt @@ -0,0 +1,131 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import net.minecraft.client.renderer.LightTexture +import net.minecraft.core.BlockPos +import net.minecraft.world.level.Level +import net.minecraft.world.level.LightLayer +import kotlin.math.floor + +/** + * What an effect is allowed to ask about the place it is playing in. + */ +interface VfxEnvironment { + /** Whether a point is inside something a particle cannot pass through. */ + fun isSolid(x: Double, y: Double, z: Double): Boolean + + /** The packed block and skylight at a point, for materials that are lit by the world. */ + fun lightAt(x: Double, y: Double, z: Double): Int + + companion object { + /** An environment with nothing in it, for effects that neither collide nor read light. */ + val EMPTY = object : VfxEnvironment { + override fun isSolid(x: Double, y: Double, z: Double) = false + + override fun lightAt(x: Double, y: Double, z: Double) = LightTexture.FULL_BRIGHT + } + } +} + +/** + * The world an effect is playing in. + */ +class VfxWorldEnvironment(private val level: Level) : VfxEnvironment { + private val cursor = BlockPos.MutableBlockPos() + + override fun isSolid(x: Double, y: Double, z: Double): Boolean { + cursor.set(floor(x).toInt(), floor(y).toInt(), floor(z).toInt()) + if (!level.hasChunkAt(cursor)) return false + + val state = level.getBlockState(cursor) + if (state.isAir) return false + + val shape = state.getCollisionShape(level, cursor) + if (shape.isEmpty) return false + + val bounds = shape.bounds() + val localX = x - cursor.x + val localY = y - cursor.y + val localZ = z - cursor.z + return localX in bounds.minX..bounds.maxX && localY in bounds.minY..bounds.maxY && localZ in bounds.minZ..bounds.maxZ + } + + override fun lightAt(x: Double, y: Double, z: Double): Int { + cursor.set(floor(x).toInt(), floor(y).toInt(), floor(z).toInt()) + if (!level.hasChunkAt(cursor)) return LightTexture.FULL_BRIGHT + return LightTexture.pack( + level.getBrightness(LightLayer.BLOCK, cursor), + level.getBrightness(LightLayer.SKY, cursor), + ) + } +} + +/** + * The editor preview, a floor at [floorY] and nothing else. + */ +class VfxPlaneEnvironment(private val floorY: Double = 0.0) : VfxEnvironment { + override fun isSolid(x: Double, y: Double, z: Double): Boolean = y < floorY + + override fun lightAt(x: Double, y: Double, z: Double): Int = LightTexture.FULL_BRIGHT +} + +/** + * Smooth value noise, sampled in three dimensions and scrolling in a fourth. + */ +object VfxNoise { + fun sample(x: Float, y: Float, z: Float, seed: Int): Float { + val xi = floor(x.toDouble()).toInt() + val yi = floor(y.toDouble()).toInt() + val zi = floor(z.toDouble()).toInt() + val xf = smooth(x - xi) + val yf = smooth(y - yi) + val zf = smooth(z - zi) + + val c000 = hash(xi, yi, zi, seed) + val c100 = hash(xi + 1, yi, zi, seed) + val c010 = hash(xi, yi + 1, zi, seed) + val c110 = hash(xi + 1, yi + 1, zi, seed) + val c001 = hash(xi, yi, zi + 1, seed) + val c101 = hash(xi + 1, yi, zi + 1, seed) + val c011 = hash(xi, yi + 1, zi + 1, seed) + val c111 = hash(xi + 1, yi + 1, zi + 1, seed) + + val x00 = c000 + (c100 - c000) * xf + val x10 = c010 + (c110 - c010) * xf + val x01 = c001 + (c101 - c001) * xf + val x11 = c011 + (c111 - c011) * xf + val y0 = x00 + (x10 - x00) * yf + val y1 = x01 + (x11 - x01) * yf + return y0 + (y1 - y0) * zf + } + + /** [octaves] layers of finer, weaker detail on top of each other. */ + fun fractal(x: Float, y: Float, z: Float, seed: Int, octaves: Int): Float { + if (octaves <= 1) return sample(x, y, z, seed) + + var amplitude = 1f + var frequency = 1f + var total = 0f + var normalizer = 0f + repeat(octaves.coerceAtMost(4)) { octave -> + total += sample(x * frequency, y * frequency, z * frequency, seed + octave * 7919) * amplitude + normalizer += amplitude + amplitude *= 0.5f + frequency *= 2f + } + return total / normalizer + } + + private fun smooth(t: Float): Float = t * t * (3f - 2f * t) + + /** A value in -1 to 1, stable for the same cell and seed. */ + private fun hash(x: Int, y: Int, z: Int, seed: Int): Float { + var h = seed + h = h * 374761393 + x * 668265263 + h = h * 374761393 + y * 2147483647 + h = h * 374761393 + z * 1274126177 + h = h xor (h shr 13) + h *= 1274126177 + h = h xor (h shr 16) + return (h and 0xFFFF) / 32768f - 1f + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt new file mode 100644 index 000000000..dea40a9b8 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt @@ -0,0 +1,155 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.common.utils.expressions.Coercions +import ru.hollowhorizon.hollowengine.common.utils.expressions.CompiledUnit +import ru.hollowhorizon.hollowengine.common.utils.expressions.Declarations +import ru.hollowhorizon.hollowengine.common.utils.expressions.Expression +import ru.hollowhorizon.hollowengine.common.utils.expressions.References +import ru.hollowhorizon.hollowengine.common.utils.expressions.mathNamespace +import kotlin.random.Random + +/** + * What an effect expression can see. + */ +class VfxEvalContext { + /** Random source of the emitter, so a seeded effect stays reproducible. */ + var rng: Random = Random.Default + + var age: Float = 0f + var lifetime: Float = 1f + + /** Age over lifetime, 0 to 1. */ + var progress: Float = 0f + + var positionX: Float = 0f + var positionY: Float = 0f + var positionZ: Float = 0f + + var velocityX: Float = 0f + var velocityY: Float = 0f + var velocityZ: Float = 0f + var speed: Float = 0f + + /** A number fixed when the particle was born, for per-particle variation that does not flicker. */ + var particleRandom: Float = 0f + + /** The index of the particle in its emitter, which is also its birth order. */ + var particleIndex: Float = 0f + + var emitterAge: Float = 0f + var emitterCount: Float = 0f + var effectTime: Float = 0f + var partialTick: Float = 0f + var gameTime: Float = 0f + + /** The numeric leaves of the handle data store by path, refilled when the store changes. */ + var data: Map = emptyMap() + + /** Values an expression may write and read back later; they live as long as the effect. */ + val variables = HashMap() + + /** Scratch space, cleared between steps. */ + val temporaries = HashMap() +} + +val VfxDeclarations: Declarations = Declarations { + val particle = struct("particle") { + float("age") { it.age } + float("lifetime") { it.lifetime } + float("progress", alias = "t") { it.progress } + float("x") { it.positionX } + float("y") { it.positionY } + float("z") { it.positionZ } + float("velocity_x", alias = "vx") { it.velocityX } + float("velocity_y", alias = "vy") { it.velocityY } + float("velocity_z", alias = "vz") { it.velocityZ } + float("speed") { it.speed } + float("random") { it.particleRandom } + float("index") { it.particleIndex } + } + + val emitter = struct("emitter") { + float("age") { it.emitterAge } + float("count") { it.emitterCount } + float("time") { it.effectTime } + float("partial_tick") { it.partialTick } + float("game_time") { it.gameTime } + float("random") { it.rng.nextFloat() } + } + + val math = mathNamespace() + + val variables = dynamic( + name = "variables", + read = { owner, key -> (owner as VfxEvalContext).variables[key] ?: 0f }, + write = { owner, key, value -> + (owner as VfxEvalContext).variables[key] = Coercions.toFloat(value) + }, + ) + + val temporaries = dynamic( + name = "temporaries", + read = { owner, key -> (owner as VfxEvalContext).temporaries[key] ?: 0f }, + write = { owner, key, value -> + (owner as VfxEvalContext).temporaries[key] = Coercions.toFloat(value) + }, + ) + + val handleData = dynamic( + name = "data", + read = { owner, key -> (owner as VfxEvalContext).data[key] ?: 0f }, + nested = true, + ) + + property("particle", particle, alias = "p") { it } + property("emitter", emitter, alias = "e") { it } + property("math", math) { it } + property("variable", variables, alias = "v") { it } + property("temp", temporaries, alias = "t") { it } + property("data", handleData, alias = "d") { it } + receiver("math") +} + +/** + * The VFX dialect. + * + * An unknown name warns and reads as zero rather than failing the file: an effect that mentions a + * data key the server has not written yet still has to play. + */ +val VfxExpressionLanguage: Expression = Expression { + options { unresolvedReferences(References.warnWithDefault(0f)) } + declarations(VfxDeclarations) +} + +/** + * Every expression of one `.vfx` file, compiled together. + */ +class VfxExpressions private constructor(private val unit: CompiledUnit?) { + fun float(source: String, default: Float = 0f): (VfxEvalContext) -> Float { + val unit = unit ?: return { default } + val compiled = unit.float(source, default) + return compiled::eval + } + + companion object { + val EMPTY = VfxExpressions(null) + + private val cache = HashMap, VfxExpressions>() + + fun compile(sources: Collection, name: String): VfxExpressions { + val wanted = sources.filter { it.isNotBlank() }.distinct().sorted() + if (wanted.isEmpty()) return EMPTY + + cache[wanted]?.let { return it } + + val unit = VfxExpressionLanguage.compile(wanted) + unit.diagnostics.forEach { HollowEngine.LOGGER.warn("Effect {}: {}", name, it) } + + if (cache.size >= CACHE_LIMIT) cache.clear() + return VfxExpressions(unit).also { cache[wanted] = it } + } + + private const val CACHE_LIMIT = 64 + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxFrame.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxFrame.kt new file mode 100644 index 000000000..06202f341 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxFrame.kt @@ -0,0 +1,93 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.client.utils.math.rotateBy +import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f +import ru.hollowhorizon.hollowengine.common.utils.math.MutableQuatF +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.math.QuatF +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.utils.math.deg +import ru.hollowhorizon.hollowengine.common.vfx.VfxTransform + +/** + * Where a node sits, kept as position, rotation and scale rather than a matrix. + */ +class VfxFrame { + val position = MutableVec3f() + val rotation = MutableQuatF() + val scale = MutableVec3f(Vec3f.ONES) + + fun setIdentity(): VfxFrame { + position.set(Vec3f.ZERO) + rotation.setIdentity() + scale.set(Vec3f.ONES) + return this + } + + fun set(other: VfxFrame): VfxFrame { + position.set(other.position) + rotation.set(other.rotation) + scale.set(other.scale) + return this + } + + /** This frame becomes [parent] with [local] applied inside it. */ + fun setCombined(parent: VfxFrame, local: VfxTransform): VfxFrame { + val offset = MutableVec3f( + local.position.x * parent.scale.x, + local.position.y * parent.scale.y, + local.position.z * parent.scale.z, + ).rotateInPlace(parent.rotation) + + position.set(parent.position).add(offset) + parent.rotation.mul(eulerOf(local.rotation), rotation) + scale.set( + parent.scale.x * local.scale.x, + parent.scale.y * local.scale.y, + parent.scale.z * local.scale.z, + ) + return this + } + + /** A point of this frame, in whatever space the frame itself is expressed in. */ + fun transformPoint(point: Vec3f, into: MutableVec3f): MutableVec3f { + val scaled = MutableVec3f(point.x * scale.x, point.y * scale.y, point.z * scale.z) + .rotateInPlace(rotation) + return into.set(position).add(scaled) + } + + /** A direction of this frame: rotated and scaled, but not moved. */ + fun transformDirection(direction: Vec3f, into: MutableVec3f): MutableVec3f { + val scaled = MutableVec3f( + direction.x * scale.x, + direction.y * scale.y, + direction.z * scale.z, + ).rotateInPlace(rotation) + return into.set(scaled) + } + + fun toMatrix(into: MutableMat4f): MutableMat4f = + into.setIdentity().translate(position).rotate(rotation).scale(scale) + + /** The part of this frame particles follow, once the author has said what they follow. */ + fun toFollowedMatrix(into: MutableMat4f, rotation: Boolean, scale: Boolean): MutableMat4f { + into.setIdentity().translate(position) + if (rotation) into.rotate(this.rotation) + if (scale) into.scale(this.scale) + return into + } + + private fun MutableVec3f.rotateInPlace(quaternion: QuatF): MutableVec3f { + val rotated = (this as Vec3f).rotateBy(quaternion) + return set(rotated.x, rotated.y, rotated.z) + } + + companion object { + /** Euler degrees as a quaternion, applied X then Y then Z. */ + fun eulerOf(euler: Vec3f): QuatF = MutableQuatF() + .setIdentity() + .rotate(euler.x.deg, Vec3f.X_AXIS) + .rotate(euler.y.deg, Vec3f.Y_AXIS) + .rotate(euler.z.deg, Vec3f.Z_AXIS) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt new file mode 100644 index 000000000..83a2ebd64 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt @@ -0,0 +1,341 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import net.minecraft.world.phys.Vec3 +import ru.hollowhorizon.hollowengine.client.models.internal.v2.ModelAttachment +import ru.hollowhorizon.hollowengine.common.data.NbtDataStore +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.* +import kotlin.random.Random + +/** + * One node of a playing effect: where it is, whether it is on, and whatever it runs. + */ +class VfxNodeRuntime( + val spec: VfxNodeSpec, + val parent: VfxNodeRuntime?, + instance: VfxInstance, + expressions: VfxExpressions, + seed: Int, + driven: Map, +) { + val frame = VfxFrame() + + /** What the author wrote for this node; the timeline starts from it every frame. */ + var authoredEnabled: Boolean = spec.enabled + var authoredTransform: VfxTransform = spec.transform + + var enabled: Boolean = spec.enabled + var transform: VfxTransform = spec.transform + + /** + * What the timeline writes into the values of this node. Only the properties that actually have + * a track get one. + */ + private val drives: Map = driven.mapValues { (_, channels) -> VfxDrive(channels) } + + fun drive(property: String): VfxDrive? = drives[property] + + val emitter: VfxEmitter? = (spec as? VfxEmitterSpec)?.let { VfxEmitter(it, instance, this, expressions, seed) } + + /** The model a mesh emitter draws, loaded the first time it is actually needed. */ + val meshModel: ModelAttachment? by lazy { + val model = (spec as? VfxMeshEmitterSpec)?.model?.takeIf { it.isNotBlank() } ?: return@lazy null + ModelAttachment(model) + } + + val children: List = spec.children.mapIndexed { index, child -> + VfxNodeRuntime( + child, + this, + instance, + expressions, + seed + index * 977 + 13, + instance.drivenProperties(child.id), + ) + } + + /** Whether this node and every node above it is on. */ + val isActive: Boolean get() = enabled && (parent?.isActive ?: true) + + fun place(root: VfxFrame) { + frame.setCombined(parent?.frame ?: root, transform) + emitter?.refreshSpace() + children.forEach { it.place(root) } + } + + fun walk(): List = buildList { + add(this@VfxNodeRuntime) + children.forEach { addAll(it.walk()) } + } + + fun reset() { + enabled = authoredEnabled + transform = authoredTransform + children.forEach { it.reset() } + } +} + +/** + * One playing effect. + * + * Time comes from the caller rather than from a clock of its own, because the same instance plays in + * the world off the game clock and in the editor off a scrubbing timeline. + */ +class VfxInstance( + val effect: VfxEffect, + val asset: String, + val environment: VfxEnvironment = VfxEnvironment.EMPTY, + seed: Int = Random.nextInt(), +) { + private val expressions = VfxExpressions.compile(effect.expressions(), asset) + + /** Which properties of which node have a track, and how many channels each carries. */ + private val driven: Map> = + effect.timeline.tracks.groupBy { it.node }.mapValues { (nodeId, tracks) -> + val node = effect.node(nodeId) + tracks.mapNotNull { track -> + if (node == null || track.curves.none { it.keys.isNotEmpty() }) return@mapNotNull null + val animatable = VfxAnimatables.of(node, track.property) ?: return@mapNotNull null + track.property to animatable.kind.channels + }.toMap() + } + + internal fun drivenProperties(nodeId: String): Map = driven[nodeId].orEmpty() + + /** The frame the whole effect sits in; a bone or a moving entity writes into it. */ + val root = VfxFrame() + + /** Where effect space sits in the world. */ + var origin: Vec3 = Vec3.ZERO + private set + + /** Where world-space particles are measured from; fixed, so they do not follow a moving origin. */ + var anchor: Vec3 = Vec3.ZERO + private set + + /** [origin] minus [anchor], the only part of the two a float can safely hold. */ + val originMinusAnchor = MutableVec3f() + + val nodes: List = effect.nodes.mapIndexed { index, node -> + VfxNodeRuntime(node, null, this, expressions, seed + index * 7919, drivenProperties(node.id)) + } + + private val allNodes: List = nodes.flatMap { it.walk() } + + val emitters: List = allNodes.mapNotNull { it.emitter } + + private val timeline = VfxTimelinePlayer(effect.timeline, allNodes) + + /** Seconds since the effect started playing. */ + var time: Float = 0f + private set + + /** How fast the origin is moving, for particles that inherit it. */ + var velocityX: Float = 0f + private set + var velocityY: Float = 0f + private set + var velocityZ: Float = 0f + private set + + var partialTick: Float = 0f + var gameTime: Float = 0f + + /** The data store of the handle, flattened to the numbers expressions read as `d.`. */ + var data: Map = emptyMap() + private set + + /** Whether anything here is lit by the world, so light is only looked up when it is used. */ + val readsLight: Boolean = + effect.walk().filterIsInstance().any { it.material.lighting == VfxLighting.WORLD } + + var isStopping: Boolean = false + private set + + /** Whether everything has stopped and nothing is left on screen. */ + val isFinished: Boolean + get() = isStopping && emitters.all { it.particles.count == 0 } || emitters.isNotEmpty() && emitters.all { it.isFinished } + + /** How many particles this effect may still create this frame; the scene refills it. */ + var budget: Int = Int.MAX_VALUE + + val particleCount: Int get() = emitters.sumOf { it.particles.count } + + init { + moveTo(Vec3.ZERO, resetAnchor = true) + } + + fun readData(store: NbtDataStore) { + data = store.numericPaths() + } + + /** Puts effect space somewhere in the world. The anchor only moves when asked. */ + fun moveTo(position: Vec3, resetAnchor: Boolean = false) { + if (resetAnchor) anchor = position + origin = position + originMinusAnchor.set( + (origin.x - anchor.x).toFloat(), + (origin.y - anchor.y).toFloat(), + (origin.z - anchor.z).toFloat(), + ) + } + + /** Remembers how fast the origin is moving, for inherited velocity. */ + fun setVelocity(x: Float, y: Float, z: Float) { + velocityX = x + velocityY = y + velocityZ = z + } + + fun stop(immediate: Boolean) { + isStopping = true + if (immediate) emitters.forEach { it.clear() } else emitters.forEach { it.stop() } + } + + /** Advances everything by [dt] seconds and leaves the emitters ready to draw. */ + fun update(dt: Float) { + if (dt > 0f) time += dt + pose() + emitters.forEach { it.update(dt) } + } + + /** Places every node for the current time: the authored transform, then the timeline over it. */ + private fun pose() { + nodes.forEach { it.reset() } + if (!timeline.isEmpty) timeline.apply(time) + nodes.forEach { it.place(root) } + } + + fun node(id: String): VfxNodeRuntime? = allNodes.firstOrNull { it.spec.id == id } + + /** + * Takes the placement of [next] - where nodes are, whether they are on, what they are called - + * without building the effect again. Returns false when [next] differs in anything else. + */ + fun adoptPlacement(next: VfxEffect): Boolean { + if (next.withoutPlacement() != effect.withoutPlacement()) return false + allNodes.forEach { node -> + val spec = next.node(node.spec.id) ?: return@forEach + node.authoredTransform = spec.transform + node.authoredEnabled = spec.enabled + } + pose() + return true + } + + /** + * Back to the first moment. No particles, every emitter about to start its first loop, and + * nodes where timeline has them at zero. + */ + fun restart() { + time = 0f + isStopping = false + emitters.forEach { it.reset() } + pose() + } + + /** Whether one more particle fits in the global budget. */ + fun requestParticle(): Boolean { + if (budget <= 0) return false + budget-- + return true + } + + /** The packed light at a particle, or full bright when nothing here is lit by the world. */ + fun lightAt(emitter: VfxEmitter, slot: Int): Int { + if (!readsLight) return FULL_BRIGHT + val point = emitter.toEffectSpace(slot, lightCursor) + return environment.lightAt(origin.x + point.x, origin.y + point.y, origin.z + point.z) + } + + private val lightCursor = MutableVec3f() + + private companion object { + const val FULL_BRIGHT = 0xF000F0 + } +} + +/** + * Plays the timeline of an effect onto its live nodes. + * + * Curves are sampled the same way the curve editor draws them. + */ +class VfxTimelinePlayer(private val spec: VfxTimelineSpec, nodes: List) { + /** Curves paired with the channel they drive, resolved once. */ + private class PreparedTrack( + val node: VfxNodeRuntime, + val property: String, + val channels: Int, + val defaults: FloatArray, + val curves: List>, + val drive: VfxDrive?, + ) + + private val tracks: List + private val values = FloatArray(4) + + val isEmpty: Boolean get() = tracks.isEmpty() + + init { + val byId = nodes.associateBy { it.spec.id } + tracks = spec.tracks.mapNotNull { track -> prepare(track, byId) } + } + + fun apply(time: Float) { + val local = if (spec.loop && spec.duration > 0f) time.mod(spec.duration) else time + tracks.forEach { track -> apply(track, local) } + } + + private fun prepare(track: VfxTrack, byId: Map): PreparedTrack? { + val node = byId[track.node] ?: return null + val property = VfxAnimatables.of(node.spec, track.property) ?: return null + val channels = property.kind.channels + + val curves = track.curves.filter { it.visible && it.channel in 0 until channels && it.keys.isNotEmpty() } + .map { it.channel to VfxCurve(it.keys) } + if (curves.isEmpty()) return null + + val drive = node.drive(track.property) + drive?.let { target -> curves.forEach { (channel, _) -> target.active[channel] = true } } + + return PreparedTrack(node, track.property, channels, property.read(node.spec), curves, drive) + } + + private fun apply(track: PreparedTrack, time: Float) { + for (channel in 0 until track.channels) { + values[channel] = track.defaults.getOrElse(channel) { 0f } + } + + val placement = when (track.property) { + VfxAnimatables.POSITION -> track.node.transform.position + VfxAnimatables.ROTATION -> track.node.transform.rotation + VfxAnimatables.SCALE -> track.node.transform.scale + else -> null + } + placement?.let { + values[0] = it.x + values[1] = it.y + values[2] = it.z + } + track.curves.forEach { (channel, curve) -> + values[channel] = curve.valueAt(time, values[channel]) + } + + when (track.property) { + VfxAnimatables.ENABLED -> track.node.enabled = values[0] >= 0.5f + VfxAnimatables.POSITION -> track.node.transform = + track.node.transform.copy(position = Vec3f(values[0], values[1], values[2])) + + VfxAnimatables.ROTATION -> track.node.transform = + track.node.transform.copy(rotation = Vec3f(values[0], values[1], values[2])) + + VfxAnimatables.SCALE -> track.node.transform = + track.node.transform.copy(scale = Vec3f(values[0], values[1], values[2])) + + else -> track.drive?.let { drive -> + for (channel in 0 until track.channels) drive.values[channel] = values[channel] + } + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt new file mode 100644 index 000000000..b2a2f3819 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt @@ -0,0 +1,299 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionHandle +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionPoints +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.rl +import ru.hollowhorizon.hollowengine.common.vfx.* +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxCollisionAction +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxCollisionSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceKind +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxModuleSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxNoiseSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvMode +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxVelocityOverLifetimeSpec +import kotlin.math.floor +import kotlin.math.sqrt + +/** + * A behavior attached to a live emitter. + */ +interface VfxModule { + /** Once, as the particle appears. The emitter context is already filled for it. */ + fun onSpawn(emitter: VfxEmitter, slot: Int) = Unit + + /** Once per step, before any particle. */ + fun beginStep(emitter: VfxEmitter, dt: Float) = Unit + + /** Before the particle is integrated: forces and frames. */ + fun onStep(emitter: VfxEmitter, slot: Int, dt: Float) = Unit + + /** After the particle moved: collisions and anything that reacts to it. */ + fun onMoved(emitter: VfxEmitter, slot: Int, dt: Float) = Unit +} + +/** + * What a module is built from, besides its own spec. + */ +class VfxModuleContext( + val emitter: VfxEmitterSpec, + val expressions: VfxExpressions, + val drive: (field: String) -> VfxDrive?, +) { + fun scalar(field: String, value: VfxValue, default: Float = 0f): VfxFloatSampler = VfxSamplers.driven( + VfxSamplers.scalar(value, expressions, default, VfxRangeMode.PER_PARTICLE, field.hashCode()), + drive(field), + ) + + fun vector(field: String, value: VfxVec3Value, default: Float = 0f): VfxVec3Sampler = + VfxSamplers.vec3(value, expressions, default, VfxRangeMode.PER_PARTICLE, field.hashCode(), drive(field)) +} + +/** Turns one module spec into something that runs. Returning null leaves the module out. */ +fun interface VfxModuleFactory { + fun create(spec: VfxModuleSpec, context: VfxModuleContext): VfxModule? +} + +/** + * What each kind of module does at runtime, keyed by the same id the spec is registered under. + */ +object VfxModuleRuntimes { + val point = ExtensionPoints.create("hollowengine:vfx/module_runtimes".rl) + + init { + register("hollowengine:vfx/velocity_over_lifetime") { spec, context -> + VfxVelocityOverLifetimeModule(spec as VfxVelocityOverLifetimeSpec, context) + } + register("hollowengine:vfx/force") { spec, context -> + VfxForceModule(spec as VfxForceSpec, context) + } + register("hollowengine:vfx/noise") { spec, context -> + VfxNoiseModule(spec as VfxNoiseSpec, context) + } + register("hollowengine:vfx/collision") { spec, _ -> + VfxCollisionModule(spec as VfxCollisionSpec) + } + register("hollowengine:vfx/uv_animation") { spec, _ -> + val flipbook = spec as VfxUvAnimationSpec + if (flipbook.frameCount <= 1) null else VfxUvAnimationModule(flipbook) + } + } + + fun register(typeId: String, factory: VfxModuleFactory): ExtensionHandle = point.register(typeId.rl, factory) + + fun create(spec: VfxModuleSpec, context: VfxModuleContext): VfxModule? { + val type = VfxModuleTypes.of(spec) ?: return null + return point.find(type.key)?.create(spec, context) + } +} + +private class VfxVelocityOverLifetimeModule( + spec: VfxVelocityOverLifetimeSpec, + context: VfxModuleContext, +) : VfxModule { + private val velocity = context.vector("velocity", spec.velocity) + + /** Whether the authored frame and simulation frame are same one. */ + private val sameSpace = spec.space == context.emitter.space || context.emitter.space == VfxSimulationSpace.LOCAL + + private val scratch = MutableVec3f() + private val turned = MutableVec3f() + + override fun onStep(emitter: VfxEmitter, slot: Int, dt: Float) { + velocity.eval(emitter.context, scratch) + val offset = if (sameSpace) scratch else emitter.frame.transformDirection(scratch, turned) + emitter.stepVelocityX += offset.x + emitter.stepVelocityY += offset.y + emitter.stepVelocityZ += offset.z + } +} + +/** + * A force placed in emitter frame. + */ +private class VfxForceModule(private val spec: VfxForceSpec, context: VfxModuleContext) : VfxModule { + private val strength = context.scalar("strength", spec.strength) + private val radius = context.scalar("radius", spec.radius) + + private val center = MutableVec3f() + private val axis = MutableVec3f() + private var reach = 0f + private var hasAxis = false + + override fun beginStep(emitter: VfxEmitter, dt: Float) { + emitter.nodeToSimPoint(spec.center, center) + emitter.nodeToSimDirection(spec.direction, axis) + hasAxis = axis.sqrLength() > EPSILON + if (hasAxis) axis.norm() + reach = radius.eval(emitter.context) + } + + override fun onStep(emitter: VfxEmitter, slot: Int, dt: Float) { + val force = strength.eval(emitter.context) + if (force == 0f) return + + val particles = emitter.particles + val toX = particles.positionX[slot] - center.x + val toY = particles.positionY[slot] - center.y + val toZ = particles.positionZ[slot] - center.z + val distance = sqrt(toX * toX + toY * toY + toZ * toZ) + if (reach > 0f && distance > reach) return + + val fade = if (!spec.falloff || reach <= 0f) 1f else (1f - distance / reach).coerceIn(0f, 1f) + val push = force * fade * dt + + when (spec.kind) { + VfxForceKind.DIRECTIONAL -> { + if (!hasAxis) return + particles.velocityX[slot] += axis.x * push + particles.velocityY[slot] += axis.y * push + particles.velocityZ[slot] += axis.z * push + } + + VfxForceKind.POINT -> { + if (distance <= EPSILON) return + particles.velocityX[slot] += toX / distance * push + particles.velocityY[slot] += toY / distance * push + particles.velocityZ[slot] += toZ / distance * push + } + + VfxForceKind.VORTEX -> { + if (!hasAxis) return + val swirlX = axis.y * toZ - axis.z * toY + val swirlY = axis.z * toX - axis.x * toZ + val swirlZ = axis.x * toY - axis.y * toX + val length = sqrt(swirlX * swirlX + swirlY * swirlY + swirlZ * swirlZ) + if (length <= EPSILON) return + particles.velocityX[slot] += swirlX / length * push + particles.velocityY[slot] += swirlY / length * push + particles.velocityZ[slot] += swirlZ / length * push + } + + VfxForceKind.DRAG -> { + val keep = (1f - push).coerceIn(0f, 1f) + particles.velocityX[slot] *= keep + particles.velocityY[slot] *= keep + particles.velocityZ[slot] *= keep + } + } + } + + private companion object { + const val EPSILON = 1.0e-6f + } +} + +private class VfxNoiseModule(spec: VfxNoiseSpec, context: VfxModuleContext) : VfxModule { + private val strength = context.scalar("strength", spec.strength) + private val frequency = context.scalar("frequency", spec.frequency, 0.5f) + private val scrollSpeed = spec.scrollSpeed + private val octaves = spec.octaves.coerceIn(1, 4) + + override fun onStep(emitter: VfxEmitter, slot: Int, dt: Float) { + val force = strength.eval(emitter.context) + if (force == 0f) return + + val cells = frequency.eval(emitter.context) + val particles = emitter.particles + val x = particles.positionX[slot] * cells + val y = particles.positionY[slot] * cells + val z = particles.positionZ[slot] * cells + val scroll = emitter.instance.time * scrollSpeed + + val push = force * dt + particles.velocityX[slot] += VfxNoise.fractal(x + scroll, y, z, emitter.noiseSeed(0), octaves) * push + particles.velocityY[slot] += VfxNoise.fractal(x, y + scroll, z, emitter.noiseSeed(1), octaves) * push + particles.velocityZ[slot] += VfxNoise.fractal(x, y, z + scroll, emitter.noiseSeed(2), octaves) * push + } +} + +/** + * Stops particles at blocks. + */ +private class VfxCollisionModule(private val spec: VfxCollisionSpec) : VfxModule { + private val scratch = MutableVec3f() + + override fun onMoved(emitter: VfxEmitter, slot: Int, dt: Float) { + val particles = emitter.particles + + val x = particles.positionX[slot] + val y = particles.positionY[slot] + val z = particles.positionZ[slot] + if (!isSolidAt(emitter, x, y, z, scratch)) return + + if (spec.action == VfxCollisionAction.DIE) { + particles.age[slot] = particles.lifetime[slot] + return + } + + var hit = false + if (isSolidAt(emitter, x, emitter.previousY, emitter.previousZ, scratch)) { + particles.positionX[slot] = emitter.previousX + particles.velocityX[slot] = bounce(particles.velocityX[slot]) + hit = true + } + if (isSolidAt(emitter, particles.positionX[slot], y, emitter.previousZ, scratch)) { + particles.positionY[slot] = emitter.previousY + particles.velocityY[slot] = bounce(particles.velocityY[slot]) + hit = true + } + if (isSolidAt(emitter, particles.positionX[slot], particles.positionY[slot], z, scratch)) { + particles.positionZ[slot] = emitter.previousZ + particles.velocityZ[slot] = bounce(particles.velocityZ[slot]) + hit = true + } + + if (!hit) { + particles.positionX[slot] = emitter.previousX + particles.positionY[slot] = emitter.previousY + particles.positionZ[slot] = emitter.previousZ + particles.velocityX[slot] = bounce(particles.velocityX[slot]) + particles.velocityY[slot] = bounce(particles.velocityY[slot]) + particles.velocityZ[slot] = bounce(particles.velocityZ[slot]) + } + + if (spec.friction < 1f) { + particles.velocityX[slot] *= spec.friction + particles.velocityY[slot] *= spec.friction + particles.velocityZ[slot] *= spec.friction + } + if (spec.lifetimeLoss > 0f) particles.age[slot] += spec.lifetimeLoss + } + + private fun bounce(velocity: Float): Float = + if (spec.action == VfxCollisionAction.BOUNCE) -velocity * spec.bounce else 0f + + private fun isSolidAt(emitter: VfxEmitter, x: Float, y: Float, z: Float, scratch: MutableVec3f): Boolean { + scratch.set(x, y, z) + emitter.simToRender.transform(scratch, 1f) + val origin = emitter.instance.origin + val radius = spec.radius + return emitter.instance.environment.isSolid( + origin.x + scratch.x, + origin.y + scratch.y - radius, + origin.z + scratch.z, + ) + } +} + +private class VfxUvAnimationModule(private val spec: VfxUvAnimationSpec) : VfxModule { + private val frames = spec.frameCount + + override fun onSpawn(emitter: VfxEmitter, slot: Int) { + if (spec.mode != VfxUvMode.RANDOM_FRAME) return + emitter.particles.frame[slot] = + floor(emitter.particles.random[slot] * frames).coerceIn(0f, (frames - 1).toFloat()) + } + + override fun onStep(emitter: VfxEmitter, slot: Int, dt: Float) { + val particles = emitter.particles + val index = when (spec.mode) { + VfxUvMode.RANDOM_FRAME -> return + VfxUvMode.OVER_LIFETIME -> emitter.context.progress * spec.cycles * frames + VfxUvMode.FPS -> particles.age[slot] * spec.fps + } + particles.frame[slot] = floor(index).mod(frames.toFloat()) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt new file mode 100644 index 000000000..167901a5c --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt @@ -0,0 +1,100 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +/** + * The particles of one emitter, as flat arrays. + * + * Live particles are kept dense at the front: killing one moves the last into its slot, so the + * simulation is a plain index loop with no holes. + */ +class VfxParticles(val capacity: Int) { + var count: Int = 0 + private set + + val positionX = FloatArray(capacity) + val positionY = FloatArray(capacity) + val positionZ = FloatArray(capacity) + + val velocityX = FloatArray(capacity) + val velocityY = FloatArray(capacity) + val velocityZ = FloatArray(capacity) + + val age = FloatArray(capacity) + val lifetime = FloatArray(capacity) + + val sizeX = FloatArray(capacity) + val sizeY = FloatArray(capacity) + val sizeZ = FloatArray(capacity) + + /** Euler angles in degrees. */ + val rotationX = FloatArray(capacity) + val rotationY = FloatArray(capacity) + val rotationZ = FloatArray(capacity) + + val colorR = FloatArray(capacity) + val colorG = FloatArray(capacity) + val colorB = FloatArray(capacity) + val colorA = FloatArray(capacity) + + /** A number fixed at spawn, for variation that does not flicker from step to step. */ + val random = FloatArray(capacity) + + /** Spawn order within the emitter. */ + val index = FloatArray(capacity) + + /** The sprite-sheet frame, as a whole number held in a float. */ + val frame = FloatArray(capacity) + + /** Packed block light of the particle position, refreshed while it moves. */ + val light = IntArray(capacity) + + private var extra: MutableMap? = null + + /** A module private array, created on first use and cleared with the emitter. */ + fun channel(name: String): FloatArray { + val channels = extra ?: LinkedHashMap().also { extra = it } + return channels.getOrPut(name) { FloatArray(capacity) } + } + + /** Claims a slot, or returns -1 when the emitter is full. */ + fun allocate(): Int { + if (count >= capacity) return -1 + return count++ + } + + /** Kills the particle in [slot]; the last live particle takes its place. */ + fun kill(slot: Int) { + val last = count - 1 + if (slot != last) copy(last, slot) + count = last + } + + fun clear() { + count = 0 + } + + private fun copy(from: Int, to: Int) { + positionX[to] = positionX[from] + positionY[to] = positionY[from] + positionZ[to] = positionZ[from] + velocityX[to] = velocityX[from] + velocityY[to] = velocityY[from] + velocityZ[to] = velocityZ[from] + age[to] = age[from] + lifetime[to] = lifetime[from] + sizeX[to] = sizeX[from] + sizeY[to] = sizeY[from] + sizeZ[to] = sizeZ[from] + rotationX[to] = rotationX[from] + rotationY[to] = rotationY[from] + rotationZ[to] = rotationZ[from] + colorR[to] = colorR[from] + colorG[to] = colorG[from] + colorB[to] = colorB[from] + colorA[to] = colorA[from] + random[to] = random[from] + index[to] = index[from] + frame[to] = frame[from] + light[to] = light[from] + extra?.values?.forEach { it[to] = it[from] } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt new file mode 100644 index 000000000..a4364d155 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt @@ -0,0 +1,198 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.common.utils.MutableColor +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxColorValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxTimeSource +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value + +/** + * An authored number, ready to read. + * + * Built once when an effect is compiled and then called per particle per step. + */ +fun interface VfxFloatSampler { + fun eval(context: VfxEvalContext): Float +} + +/** Three samplers that fill a vector without allocating one. */ +class VfxVec3Sampler( + private val x: VfxFloatSampler, + private val y: VfxFloatSampler, + private val z: VfxFloatSampler, +) { + fun eval(context: VfxEvalContext, into: MutableVec3f): MutableVec3f { + into.x = x.eval(context) + into.y = y.eval(context) + into.z = z.eval(context) + return into + } + + /** For properties whose three axes are driven by the X value alone. */ + fun evalUniform(context: VfxEvalContext, into: MutableVec3f): MutableVec3f { + val value = x.eval(context) + into.x = value + into.y = value + into.z = value + return into + } +} + +class VfxColorSampler(private val eval: (VfxEvalContext, MutableColor) -> Unit) { + fun eval(context: VfxEvalContext, into: MutableColor): MutableColor { + eval.invoke(context, into) + return into + } +} + +/** + * What a timeline track writes for one property of one node. + */ +class VfxDrive(channels: Int) { + val active = BooleanArray(channels) + val values = FloatArray(channels) +} + +/** + * How a range is read. + * + * A value read once per particle can simply draw a fresh number. A value read every step cannot, a + * size picked anew each step flickers. + */ +enum class VfxRangeMode { + FRESH, + PER_PARTICLE, +} + +object VfxSamplers { + fun scalar( + value: VfxValue, + expressions: VfxExpressions, + default: Float = 0f, + range: VfxRangeMode = VfxRangeMode.FRESH, + salt: Int = 0, + ): VfxFloatSampler = when (value) { + is VfxValue.Const -> { + val constant = value.value + VfxFloatSampler { constant } + } + + is VfxValue.Range -> { + val from = value.from + val span = value.to - value.from + when { + span == 0f -> VfxFloatSampler { from } + range == VfxRangeMode.PER_PARTICLE -> VfxFloatSampler { from + stableRandom(it.particleRandom, salt) * span } + else -> VfxFloatSampler { from + it.rng.nextFloat() * span } + } + } + + is VfxValue.OverTime -> { + val curve = value.curve + val scale = value.scale + val axis = axis(value.source) + VfxFloatSampler { curve.valueAt(axis.eval(it), default) * scale } + } + + is VfxValue.Expr -> { + val compiled = expressions.float(value.source, default) + VfxFloatSampler { compiled(it) } + } + } + + fun vec3( + value: VfxVec3Value, + expressions: VfxExpressions, + default: Float = 0f, + range: VfxRangeMode = VfxRangeMode.FRESH, + salt: Int = 0, + drive: VfxDrive? = null, + ) = VfxVec3Sampler( + driven(scalar(value.x, expressions, default, range, salt), drive, 0), + driven(scalar(value.y, expressions, default, range, salt + 1), drive, 1), + driven(scalar(value.z, expressions, default, range, salt + 2), drive, 2), + ) + + fun color( + value: VfxColorValue, + expressions: VfxExpressions, + salt: Int = 0, + drive: VfxDrive? = null, + ): VfxColorSampler { + val authored = authoredColor(value, expressions, salt) + if (drive == null) return authored + return VfxColorSampler { context, into -> + authored.eval(context, into) + if (drive.active[0]) into.r = drive.values[0] + if (drive.active[1]) into.g = drive.values[1] + if (drive.active[2]) into.b = drive.values[2] + if (drive.active[3]) into.a = drive.values[3] + } + } + + private fun authoredColor(value: VfxColorValue, expressions: VfxExpressions, salt: Int): VfxColorSampler = + when (value) { + is VfxColorValue.Solid -> { + val color = value.color + VfxColorSampler { _, into -> into.set(color.r, color.g, color.b, color.a) } + } + + is VfxColorValue.Gradient -> { + val gradient = value.gradient + val axis = axis(value.source) + VfxColorSampler { context, into -> + val stop = gradient.colorAt(axis.eval(context)) + into.set(stop.r, stop.g, stop.b, stop.a) + } + } + + is VfxColorValue.Channels -> { + val r = scalar(value.r, expressions, 1f, VfxRangeMode.PER_PARTICLE, salt) + val g = scalar(value.g, expressions, 1f, VfxRangeMode.PER_PARTICLE, salt + 1) + val b = scalar(value.b, expressions, 1f, VfxRangeMode.PER_PARTICLE, salt + 2) + val a = scalar(value.a, expressions, 1f, VfxRangeMode.PER_PARTICLE, salt + 3) + VfxColorSampler { context, into -> + into.set(r.eval(context), g.eval(context), b.eval(context), a.eval(context)) + } + } + } + + /** [sampler], unless the timeline has a curve for this channel. */ + fun driven(sampler: VfxFloatSampler, drive: VfxDrive?, channel: Int = 0): VfxFloatSampler { + if (drive == null || channel >= drive.values.size) return sampler + return VfxFloatSampler { if (drive.active[channel]) drive.values[channel] else sampler.eval(it) } + } + + /** What the horizontal axis of a curve or gradient reads. */ + fun axis(source: VfxTimeSource): VfxFloatSampler = when (source) { + VfxTimeSource.LIFETIME -> VfxFloatSampler { it.progress } + VfxTimeSource.PARTICLE_AGE -> VfxFloatSampler { it.age } + VfxTimeSource.EMITTER_AGE -> VfxFloatSampler { it.emitterAge } + VfxTimeSource.EFFECT_TIME -> VfxFloatSampler { it.effectTime } + VfxTimeSource.SPEED -> VfxFloatSampler { it.speed } + } + + /** Whether a value reads same for a particle every step. */ + fun isFixedPerParticle(value: VfxValue): Boolean = value is VfxValue.Const || value is VfxValue.Range + + fun isFixedPerParticle(value: VfxVec3Value): Boolean = + isFixedPerParticle(value.x) && isFixedPerParticle(value.y) && isFixedPerParticle(value.z) + + fun isFixedPerParticle(value: VfxColorValue): Boolean = when (value) { + is VfxColorValue.Solid -> true + is VfxColorValue.Gradient -> false + is VfxColorValue.Channels -> + isFixedPerParticle(value.r) && isFixedPerParticle(value.g) && + isFixedPerParticle(value.b) && isFixedPerParticle(value.a) + } + + /** A number in 0..1 that depends only on the particle seed and [salt]. */ + fun stableRandom(seed: Float, salt: Int): Float { + var hash = seed.toRawBits() xor (salt * -0x61c88647) + hash = (hash xor (hash ushr 16)) * -0x7a143595 + hash = (hash xor (hash ushr 13)) * -0x3d4d51cb + hash = hash xor (hash ushr 16) + return (hash ushr 8) * (1f / (1 shl 24)) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt new file mode 100644 index 000000000..0a615402c --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt @@ -0,0 +1,170 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import net.minecraft.client.Minecraft +import net.minecraft.client.multiplayer.ClientLevel +import net.minecraft.nbt.CompoundTag +import net.minecraft.world.entity.Entity +import net.minecraft.world.phys.Vec3 +import ru.hollowhorizon.hollowengine.client.handlers.TickHandler +import ru.hollowhorizon.hollowengine.common.data.NbtDataStore +import ru.hollowhorizon.hollowengine.common.vfx.VfxPlayPacket + +/** + * A playing effect and whatever it is following. + */ +class VfxPlayback( + val handle: Int, + val instance: VfxInstance, + private val entity: Entity?, +) { + private val data = NbtDataStore() + private var lastX = 0.0 + private var lastY = 0.0 + private var lastZ = 0.0 + + var position: Vec3 = Vec3.ZERO + private set + + val isFinished: Boolean + get() = instance.isFinished || (entity != null && !entity.isAlive) + + fun moveTo(next: Vec3) { + position = next + } + + fun applyData(tag: CompoundTag) { + data.load(tag) + instance.readData(data) + } + + fun stop(immediate: Boolean) = instance.stop(immediate) + + /** Follows whatever it is bound to, then advances the simulation. */ + fun update(dt: Float, partialTick: Float, gameTime: Float) { + val next = entity?.let { Vec3(it.x, it.y + it.bbHeight * 0.5, it.z) } ?: position + if (dt > 0f) { + instance.setVelocity( + ((next.x - lastX) / dt).toFloat(), + ((next.y - lastY) / dt).toFloat(), + ((next.z - lastZ) / dt).toFloat(), + ) + } + lastX = next.x + lastY = next.y + lastZ = next.z + + position = next + instance.moveTo(next) + instance.partialTick = partialTick + instance.gameTime = gameTime + instance.update(dt) + } +} + +/** + * The effects playing in one level. + */ +class VfxScene(private val environment: VfxEnvironment) { + private val playbacks = ArrayList() + private var lastGameTime = Float.NaN + + val isEmpty: Boolean get() = playbacks.isEmpty() + + fun play(handle: Int, asset: String, position: Vec3, entity: Entity?, data: CompoundTag): VfxPlayback? { + val effect = VfxAssets[asset] ?: return null + + val instance = VfxInstance(effect, asset, environment) + instance.moveTo(position, resetAnchor = true) + + val playback = VfxPlayback(handle, instance, entity) + playback.moveTo(position) + if (!data.isEmpty()) playback.applyData(data) + + playbacks.removeAll { it.handle == handle } + playbacks += playback + return playback + } + + fun of(handle: Int): VfxPlayback? = playbacks.firstOrNull { it.handle == handle } + + fun clear() = playbacks.clear() + + /** Advances everything with the time, that game is keeping. */ + fun update() { + val now = TickHandler.gameTime + val dt = when { + lastGameTime.isNaN() -> 0f + else -> ((now - lastGameTime) / TICKS_PER_SECOND).coerceIn(0f, MAX_STEP_SECONDS) + } + lastGameTime = now + + val budget = VfxBudget.share(playbacks.size) + val partialTick = TickHandler.partialTick + playbacks.forEach { playback -> + playback.instance.budget = budget + playback.update(dt, partialTick, now) + } + playbacks.removeAll { it.isFinished } + } + + fun forEachInstance(action: (VfxInstance, Vec3) -> Unit) { + playbacks.forEach { action(it.instance, it.position) } + } + + private companion object { + const val TICKS_PER_SECOND = 20f + + /** After a freeze the clock can jump; a particle should not travel half a second in one step. */ + const val MAX_STEP_SECONDS = 0.25f + } +} + +/** + * How many particles all the effects on screen may have between them. + */ +object VfxBudget { + var limit: Int = 8000 + + fun share(consumers: Int): Int = if (consumers <= 0) limit else (limit / consumers).coerceAtLeast(16) +} + +/** + * The effects of the client, one scene per level. + */ +object VfxScenes { + private var level: ClientLevel? = null + private var scene: VfxScene? = null + + /** The scene of the level the player is in, created on first use. */ + fun current(): VfxScene? { + val current = Minecraft.getInstance().level ?: return null + if (level !== current) { + level = current + scene = VfxScene(VfxWorldEnvironment(current)) + } + return scene + } + + fun play(packet: VfxPlayPacket) { + val scene = current() ?: return + val position = packet.position ?: packet.entity?.let { Vec3(it.x, it.y, it.z) } ?: Vec3.ZERO + scene.play(packet.handle, packet.effect, position, packet.entity, packet.data) + } + + fun stop(handle: Int, immediate: Boolean) { + scene?.of(handle)?.stop(immediate) + } + + fun move(handle: Int, position: Vec3) { + scene?.of(handle)?.moveTo(position) + } + + fun applyData(handle: Int, data: CompoundTag) { + scene?.of(handle)?.applyData(data) + } + + /** A pack reload replaces every effect definition, so whatever is playing is no longer valid. */ + fun onAssetsReloaded() { + scene?.clear() + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt new file mode 100644 index 000000000..8c4f52f16 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt @@ -0,0 +1,141 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.vertex.PoseStack +import net.minecraft.client.Camera +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.LightTexture +import net.minecraft.client.renderer.texture.OverlayTexture +import net.minecraft.util.Mth +import org.joml.Matrix4f +import org.joml.Quaternionf +import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.models.internal.rendering.RenderContext +import ru.hollowhorizon.hollowengine.client.utils.math.asMatrix4f +import ru.hollowhorizon.hollowengine.client.vfx.VfxEmitter +import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance +import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxQuadEmitterSpec + +/** + * Where the particles are looked at from. + * + * Everything the quad renderer places is expressed in one space, the one [modelView] starts from: + * camera-relative world space in the world, effect space in the editor preview. The camera axes and + * position are given in that same space, which is all a billboard needs to face the viewer. + */ +class VfxView( + val modelView: Matrix4f, + val projection: Matrix4f, + val right: Vector3f, + val up: Vector3f, + val eye: Vector3f, +) { + companion object { + fun ofCamera(camera: Camera, modelView: Matrix4f, projection: Matrix4f) = VfxView( + modelView = Matrix4f(modelView), + projection = Matrix4f(projection), + right = Vector3f(camera.leftVector).negate(), + up = Vector3f(camera.upVector), + eye = Vector3f(), + ) + } +} + +/** One emitter worth of billboard particles, ready to draw. */ +class VfxQuadDraw( + val emitter: VfxEmitter, + /** Simulation space to the space of the [VfxView] it is drawn with. */ + val matrix: Matrix4f, +) + +/** + * Walks playing effects and turns them into draw work. + */ +object VfxDrawCollector { + /** + * Adds the billboard emitters of [instance] to [into]. + * + * [placement] maps effect space to the space of the view the batch is drawn with, which in the + * world is camera-relative world space. + */ + fun collectQuads(instance: VfxInstance, placement: Matrix4f, into: MutableList) { + instance.emitters.forEach { emitter -> + if (emitter.spec !is VfxQuadEmitterSpec) return@forEach + if (emitter.particles.count == 0 || !emitter.node.isActive) return@forEach + + into += VfxQuadDraw(emitter, Matrix4f(placement).mul(emitter.simToRender.asMatrix4f())) + } + } + + /** + * Draws the model particles of [instance]. + * + * Each particle is submitted as one instance of the model, so the model renderer batches them + * the same way it batches entities. Two things a quad can do that a model particle cannot yet: + * carry its own color, and use a skinned model - the instance stream has no room for either. + */ + fun renderMeshes(instance: VfxInstance, placement: Matrix4f) { + val source = Minecraft.getInstance().renderBuffers().bufferSource() + + val stack = PoseStack() + stack.mulPose(placement) + + instance.emitters.forEach { emitter -> + val spec = emitter.spec as? VfxMeshEmitterSpec ?: return@forEach + if (emitter.particles.count == 0 || !emitter.node.isActive) return@forEach + + val attachment = emitter.node.meshModel ?: return@forEach + attachment.ensureReady() + attachment.beginPose() + attachment.endPose() + + val particles = emitter.particles + val simToRender = emitter.simToRender.asMatrix4f() + + for (slot in 0 until particles.count) { + stack.pushPose() + stack.mulPose(simToRender) + stack.translate(particles.positionX[slot], particles.positionY[slot], particles.positionZ[slot]) + + if (spec.alignToVelocity) { + stack.mulPose( + facing( + particles.velocityX[slot], + particles.velocityY[slot], + particles.velocityZ[slot], + ) + ) + } + stack.mulPose( + Quaternionf().rotateZYX( + particles.rotationZ[slot] * Mth.DEG_TO_RAD, + particles.rotationY[slot] * Mth.DEG_TO_RAD, + particles.rotationX[slot] * Mth.DEG_TO_RAD, + ) + ) + stack.scale(particles.sizeX[slot], particles.sizeY[slot], particles.sizeZ[slot]) + + attachment.pipeline.render( + RenderContext( + stack = stack, + source = source, + light = if (spec.emissive) LightTexture.FULL_BRIGHT else particles.light[slot], + overlay = OverlayTexture.NO_OVERLAY, + allowInstancing = true, + ) + ) + stack.popPose() + } + } + } + + /** Turns a velocity into a rotation that points the model along it. */ + private fun facing(x: Float, y: Float, z: Float): Quaternionf { + val lengthSquared = x * x + y * y + z * z + if (lengthSquared < 1.0e-6f) return Quaternionf() + + val yaw = Mth.atan2(x.toDouble(), z.toDouble()).toFloat() + val pitch = Mth.atan2(y.toDouble(), Mth.sqrt(x * x + z * z).toDouble()).toFloat() + return Quaternionf().rotateY(yaw).rotateX(-pitch) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt new file mode 100644 index 000000000..bf3443192 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt @@ -0,0 +1,329 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import org.joml.Matrix4f +import ru.hollowhorizon.hollowengine.client.vfx.VfxEmitter +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadPacker.Companion.STRIDE +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxBlend +import ru.hollowhorizon.hollowengine.common.vfx.VfxFacing +import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxQuadEmitterSpec +import kotlin.math.cos +import kotlin.math.sin +import kotlin.math.sqrt + +/** + * How a batch is blended into the frame. + * + * [MIXED] is the one that lets different blend modes share a draw: with premultiplied alpha and a + * `ONE, ONE_MINUS_SRC_ALPHA` blend, an alpha-blended particle writes its alpha, an additive one + * writes zero alpha, and an opaque one writes one, so the three differ per particle rather than per + * draw. Only multiplying needs a blend function of its own. A shader pack does its own output, so + * with one active every mode keeps a batch of its own. + */ +internal enum class VfxBatchBlend { + MIXED, OPAQUE, BLEND, ADDITIVE, MULTIPLY, +} + +/** What decides whether two emitters can share a draw call. */ +internal data class VfxBatchKey( + val texture: String, + val blend: VfxBatchBlend, + val cull: Boolean, + val depthTest: Boolean, + val depthWrite: Boolean, +) { + companion object { + fun of(material: VfxMaterialSpec, mixed: Boolean) = VfxBatchKey( + texture = material.texture, + blend = when { + material.blend == VfxBlend.MULTIPLY -> VfxBatchBlend.MULTIPLY + mixed -> VfxBatchBlend.MIXED + material.blend == VfxBlend.OPAQUE -> VfxBatchBlend.OPAQUE + material.blend == VfxBlend.ADDITIVE -> VfxBatchBlend.ADDITIVE + else -> VfxBatchBlend.BLEND + }, + cull = material.cull, + depthTest = material.depthTest, + depthWrite = material.depthWrite, + ) + } +} + +/** One draw call, where its particles start in the packed data, how many, and how far away. */ +internal class VfxQuadBatch(val key: VfxBatchKey) { + val draws = ArrayList() + var first = 0 + var count = 0 + var depth = 0f + + /** Whether anything in the batch is alpha blended, which is what makes its order matter. */ + val sorted: Boolean + get() = key.blend == VfxBatchBlend.BLEND || key.blend == VfxBatchBlend.MIXED && draws.any { (it.emitter.spec as VfxQuadEmitterSpec).material.blend == VfxBlend.BLEND } +} + +/** + * Turns the collected emitters into instance data, grouped into batches and in draw order. + */ +internal class VfxQuadPacker { + /** Particles written in draw order, [STRIDE] floats each. */ + var packed = FloatArray(STRIDE * 256) + private set + + val batches = ArrayList() + + private val byKey = LinkedHashMap() + private var staging = FloatArray(STRIDE * 256) + private var order = IntArray(256) + private var depths = FloatArray(256) + private val axis = MutableVec3f() + private val edges = FloatArray(6) + + /** Packs [draws] as seen from [view]; returns how many particles there are in total. */ + fun pack(draws: List, view: VfxView, mixed: Boolean): Int { + byKey.clear() + draws.forEach { draw -> + val spec = draw.emitter.spec as? VfxQuadEmitterSpec ?: return@forEach + val key = VfxBatchKey.of(spec.material, mixed) + byKey.getOrPut(key) { VfxQuadBatch(key) }.draws += draw + } + + var total = 0 + byKey.values.forEach { batch -> + batch.count = batch.draws.sumOf { it.emitter.particles.count } + total += batch.count + } + batches.clear() + if (total == 0) return 0 + ensureCapacity(total) + + var cursor = 0 + byKey.values.forEach { batch -> + batch.first = cursor + fill(batch, view) + cursor += batch.count + } + + byKey.values.filterTo(batches) { !it.sorted && it.count > 0 } + byKey.values.filter { it.sorted && it.count > 0 }.sortedByDescending { it.depth }.forEach(batches::add) + return total + } + + private fun fill(batch: VfxQuadBatch, view: VfxView) { + val sorted = batch.sorted + val target = if (sorted) staging else packed + var offset = if (sorted) 0 else batch.first * STRIDE + var depthSum = 0f + + batch.draws.forEach { draw -> + val emitter = draw.emitter + for (slot in 0 until emitter.particles.count) { + write(target, offset, emitter, slot, draw.matrix, view) + if (sorted) { + val index = offset / STRIDE + val depth = distanceSquared(target, offset, view) + depths[index] = depth + order[index] = index + depthSum += depth + } + offset += STRIDE + } + } + + if (!sorted) return + batch.depth = if (batch.count > 0) depthSum / batch.count else 0f + + for (index in 1 until batch.count) { + val item = order[index] + val depth = depths[item] + var scan = index - 1 + while (scan >= 0 && depths[order[scan]] < depth) { + order[scan + 1] = order[scan] + scan-- + } + order[scan + 1] = item + } + for (position in 0 until batch.count) { + System.arraycopy(staging, order[position] * STRIDE, packed, (batch.first + position) * STRIDE, STRIDE) + } + } + + private fun distanceSquared(data: FloatArray, offset: Int, view: VfxView): Float { + val dx = data[offset] - view.eye.x + val dy = data[offset + 1] - view.eye.y + val dz = data[offset + 2] - view.eye.z + return dx * dx + dy * dy + dz * dz + } + + private fun write(out: FloatArray, at: Int, emitter: VfxEmitter, slot: Int, matrix: Matrix4f, view: VfxView) { + val spec = emitter.spec as VfxQuadEmitterSpec + val particles = emitter.particles + + val px = particles.positionX[slot] + val py = particles.positionY[slot] + val pz = particles.positionZ[slot] + val cx = matrix.m00() * px + matrix.m10() * py + matrix.m20() * pz + matrix.m30() + val cy = matrix.m01() * px + matrix.m11() * py + matrix.m21() * pz + matrix.m31() + val cz = matrix.m02() * px + matrix.m12() * py + matrix.m22() * pz + matrix.m32() + + val width = particles.sizeX[slot] + val height = particles.sizeY[slot] + when (spec.facing) { + VfxFacing.CAMERA -> cameraEdges(edges, matrix, view, particles.rotationZ[slot], width, height) + VfxFacing.CAMERA_AXIS -> axisEdges(edges, emitter, spec, matrix, view, cx, cy, cz, width, height) + VfxFacing.NONE -> rotatedEdges( + edges, matrix, + particles.rotationX[slot], particles.rotationY[slot], particles.rotationZ[slot], + width, height, + ) + } + + val region = spec.material.uv + val columns = emitter.uvColumns + val rows = emitter.uvRows + val cellWidth = region.width / columns + val cellHeight = region.height / rows + val frame = particles.frame[slot].toInt().coerceIn(0, columns * rows - 1) + val light = particles.light[slot] + + out[at] = cx + out[at + 1] = cy + out[at + 2] = cz + System.arraycopy(edges, 0, out, at + 3, 6) + out[at + 9] = particles.colorR[slot] + out[at + 10] = particles.colorG[slot] + out[at + 11] = particles.colorB[slot] + out[at + 12] = particles.colorA[slot] + out[at + 13] = region.u0 + (frame % columns) * cellWidth + out[at + 14] = region.v0 + (frame / columns) * cellHeight + out[at + 15] = cellWidth + out[at + 16] = cellHeight + out[at + 17] = (light and 0xFFFF).toFloat() + out[at + 18] = (light shr 16 and 0xFFFF).toFloat() + out[at + 19] = blendMode(spec.material.blend) + } + + private fun cameraEdges( + out: FloatArray, + matrix: Matrix4f, + view: VfxView, + rollDegrees: Float, + width: Float, + height: Float, + ) { + val scale = sqrt(matrix.m00() * matrix.m00() + matrix.m01() * matrix.m01() + matrix.m02() * matrix.m02()) + val roll = rollDegrees * DEG_TO_RAD + val c = cos(roll) + val s = sin(roll) + val w = width * scale + val h = height * scale + out[0] = (view.right.x * c + view.up.x * s) * w + out[1] = (view.right.y * c + view.up.y * s) * w + out[2] = (view.right.z * c + view.up.z * s) * w + out[3] = (view.up.x * c - view.right.x * s) * h + out[4] = (view.up.y * c - view.right.y * s) * h + out[5] = (view.up.z * c - view.right.z * s) * h + } + + private fun axisEdges( + out: FloatArray, + emitter: VfxEmitter, + spec: VfxQuadEmitterSpec, + matrix: Matrix4f, + view: VfxView, + cx: Float, + cy: Float, + cz: Float, + width: Float, + height: Float, + ) { + emitter.toSimDirection(spec.facingAxis, axis) + var ax = matrix.m00() * axis.x + matrix.m10() * axis.y + matrix.m20() * axis.z + var ay = matrix.m01() * axis.x + matrix.m11() * axis.y + matrix.m21() * axis.z + var az = matrix.m02() * axis.x + matrix.m12() * axis.y + matrix.m22() * axis.z + val axisLength = sqrt(ax * ax + ay * ay + az * az) + val scale: Float + if (axisLength < EPSILON) { + ax = view.up.x; ay = view.up.y; az = view.up.z + scale = 1f + } else { + ax /= axisLength; ay /= axisLength; az /= axisLength + scale = axisLength + } + + val tx = view.eye.x - cx + val ty = view.eye.y - cy + val tz = view.eye.z - cz + var rx = ay * tz - az * ty + var ry = az * tx - ax * tz + var rz = ax * ty - ay * tx + val rightLength = sqrt(rx * rx + ry * ry + rz * rz) + if (rightLength < EPSILON) { + rx = view.right.x; ry = view.right.y; rz = view.right.z + } else { + rx /= rightLength; ry /= rightLength; rz /= rightLength + } + out[0] = rx * width * scale + out[1] = ry * width * scale + out[2] = rz * width * scale + out[3] = ax * height * scale + out[4] = ay * height * scale + out[5] = az * height * scale + } + + private fun rotatedEdges( + out: FloatArray, + matrix: Matrix4f, + degreesX: Float, + degreesY: Float, + degreesZ: Float, + width: Float, + height: Float, + ) { + val sx = sin(degreesX * DEG_TO_RAD) + val cx = cos(degreesX * DEG_TO_RAD) + val sy = sin(degreesY * DEG_TO_RAD) + val cy = cos(degreesY * DEG_TO_RAD) + val sz = sin(degreesZ * DEG_TO_RAD) + val cz = cos(degreesZ * DEG_TO_RAD) + + val lx = cz * cy * width + val ly = sz * cy * width + val lz = -sy * width + val vx = (cz * sy * sx - sz * cx) * height + val vy = (sz * sy * sx + cz * cx) * height + val vz = cy * sx * height + + out[0] = matrix.m00() * lx + matrix.m10() * ly + matrix.m20() * lz + out[1] = matrix.m01() * lx + matrix.m11() * ly + matrix.m21() * lz + out[2] = matrix.m02() * lx + matrix.m12() * ly + matrix.m22() * lz + out[3] = matrix.m00() * vx + matrix.m10() * vy + matrix.m20() * vz + out[4] = matrix.m01() * vx + matrix.m11() * vy + matrix.m21() * vz + out[5] = matrix.m02() * vx + matrix.m12() * vy + matrix.m22() * vz + } + + private fun ensureCapacity(count: Int) { + if (packed.size >= count * STRIDE) return + val capacity = Integer.highestOneBit((count - 1).coerceAtLeast(255)) * 2 + packed = FloatArray(capacity * STRIDE) + staging = FloatArray(capacity * STRIDE) + order = IntArray(capacity) + depths = FloatArray(capacity) + } + + companion object { + /** Floats per particle: center, right edge, up edge, color, uv window, light, blend mode. */ + const val STRIDE = 20 + + private const val EPSILON = 1.0e-6f + private const val DEG_TO_RAD = (Math.PI / 180.0).toFloat() + + /** The blend mode as the particle shader reads it: 0 alpha, 1 additive, 2 opaque, 3 multiply. */ + fun blendMode(blend: VfxBlend): Float = when (blend) { + VfxBlend.BLEND -> 0f + VfxBlend.ADDITIVE -> 1f + VfxBlend.OPAQUE -> 2f + VfxBlend.MULTIPLY -> 3f + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt new file mode 100644 index 000000000..e42fa7e59 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt @@ -0,0 +1,311 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.platform.GlStateManager +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.* +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GameRenderer +import net.minecraft.client.renderer.ShaderInstance +import org.lwjgl.BufferUtils +import org.lwjgl.opengl.GL33 +import ru.hollowhorizon.hollowengine.client.models.internal.drawWithShader +import ru.hollowhorizon.hollowengine.client.models.internal.manager.HollowModelManager +import ru.hollowhorizon.hollowengine.client.models.internal.translucentShaderState +import ru.hollowhorizon.hollowengine.client.models.internal.utils.VboWrapper +import ru.hollowhorizon.hollowengine.client.utils.shaderPackParticleShader +import ru.hollowhorizon.hollowengine.client.utils.shouldOverrideShaders +import ru.hollowhorizon.hollowengine.common.registry.ModShaders +import ru.hollowhorizon.hollowengine.common.utils.rl +import java.nio.FloatBuffer +import java.util.* + +/** + * Draws billboard particles, one instanced quad per particle, one draw call per batch. + * + * Without a shader pack the engine's own program draws everything, and alpha-blended, additive and + * opaque particles share one draw through premultiplied alpha (see [VfxBatchBlend]). + * + * With a pack the pack's particle program is patched for instancing, the way model instancing does + * it: a program the pack does not know would draw into nothing, because the pack renders into its + * own buffers. + */ +object VfxQuadRenderer { + private const val STRIDE = VfxQuadPacker.STRIDE + private const val STRIDE_BYTES = STRIDE * Float.SIZE_BYTES + + private val packer = VfxQuadPacker() + + private val vaos = IdentityHashMap() + private var quadBuffer: VboWrapper? = null + private var indexBuffer: VboWrapper? = null + private var instanceBuffer: VboWrapper? = null + private var instanceCapacity = 0 + private var upload: FloatBuffer = BufferUtils.createFloatBuffer(STRIDE * 256) + + /** Frees the GL objects; the next draw builds them again. */ + fun invalidate() { + vaos.values.forEach(GL33::glDeleteVertexArrays) + vaos.clear() + quadBuffer?.delete() + indexBuffer?.delete() + instanceBuffer?.delete() + quadBuffer = null + indexBuffer = null + instanceBuffer = null + instanceCapacity = 0 + } + + /** Draws everything in [draws] as seen from [view]. */ + fun render(draws: List, view: VfxView) { + if (draws.isEmpty()) return + + val shaderPack = shouldOverrideShaders() + val total = packer.pack(draws, view, mixed = !shaderPack) + if (total == 0) return + + when { + !shaderPack -> drawOwn(total, view) + else -> drawWithPack(total) + } + } + + private fun drawOwn(total: Int, view: VfxView) { + val shader = ModShaders.VFX_PARTICLE ?: return + withInstanceState(total) { + RenderSystem.setShader { shader } + shader.setDefaultUniforms( + VertexFormat.Mode.TRIANGLES, view.modelView, view.projection, Minecraft.getInstance().window + ) + GL33.glDepthFunc(GL33.GL_LEQUAL) + + packer.batches.forEach { batch -> + shader.setSampler("Sampler0", textureOf(batch)) + shader.setSampler("Sampler2", HollowModelManager.lightTexture.id) + shader.apply() + applyState(batch.key, premultiplied = true) + drawBatch(shader, batch) + } + shader.clear() + } + } + + private fun drawWithPack(total: Int) { + val opaque = shaderPackParticleShader(translucent = false) + val translucent = shaderPackParticleShader(translucent = true) + if (opaque == null || translucent == null) { + drawExpanded() + return + } + + withInstanceState(total) { + packer.batches.forEach { batch -> + val shader = if (batch.key.blend == VfxBatchBlend.OPAQUE) opaque else translucent + drawWithShader(shader, translucentShaderState()) { + RenderSystem.activeTexture(GL33.GL_TEXTURE2) + RenderSystem.bindTexture(HollowModelManager.lightTexture.id) + RenderSystem.activeTexture(GL33.GL_TEXTURE0) + RenderSystem.bindTexture(textureOf(batch)) + applyState(batch.key, premultiplied = false) + drawBatch(shader, batch) + } + } + } + } + + private inline fun withInstanceState(total: Int, body: () -> Unit) { + val previousVao = GL33.glGetInteger(GL33.GL_VERTEX_ARRAY_BINDING) + val previousBuffer = GL33.glGetInteger(GL33.GL_ELEMENT_ARRAY_BUFFER_BINDING) + val previousTexture = GL33.glGetInteger(GL33.GL_ACTIVE_TEXTURE) + + ensureBuffers() + uploadInstances(total) + try { + body() + } finally { + restoreState() + GlStateManager._glUseProgram(0) + RenderSystem.activeTexture(previousTexture) + RenderSystem.glBindVertexArray(previousVao) + RenderSystem.glBindBuffer(GL33.GL_ELEMENT_ARRAY_BUFFER, previousBuffer) + } + } + + private fun drawBatch(shader: ShaderInstance, batch: VfxQuadBatch) { + RenderSystem.glBindVertexArray(vaoFor(shader)) + instanceBuffer?.bind() + pointInstances(shader, batch.first.toLong() * STRIDE_BYTES) + GL33.glDrawElementsInstanced(GL33.GL_TRIANGLES, 6, GL33.GL_UNSIGNED_INT, 0L, batch.count) + } + + private fun drawExpanded() { + RenderSystem.setShader(GameRenderer::getParticleShader) + RenderSystem.setShaderTexture(2, HollowModelManager.lightTexture.id) + + packer.batches.forEach { batch -> + RenderSystem.setShaderTexture(0, textureOf(batch)) + applyState(batch.key, premultiplied = false) + + val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE) + val data = packer.packed + for (index in batch.first until batch.first + batch.count) { + val at = index * STRIDE + val light = data[at + 17].toInt() or (data[at + 18].toInt() shl 16) + corner(builder, data, at, -0.5f, -0.5f, 0f, 1f, light) + corner(builder, data, at, 0.5f, -0.5f, 1f, 1f, light) + corner(builder, data, at, 0.5f, 0.5f, 1f, 0f, light) + corner(builder, data, at, -0.5f, 0.5f, 0f, 0f, light) + } + builder.build()?.let(BufferUploader::drawWithShader) + } + + restoreState() + } + + private fun corner( + builder: BufferBuilder, + data: FloatArray, + at: Int, + along: Float, + across: Float, + u: Float, + v: Float, + light: Int, + ) { + builder.addVertex( + data[at] + data[at + 3] * along + data[at + 6] * across, + data[at + 1] + data[at + 4] * along + data[at + 7] * across, + data[at + 2] + data[at + 5] * along + data[at + 8] * across, + ).setUv(data[at + 13] + u * data[at + 15], data[at + 14] + v * data[at + 16]) + .setColor(data[at + 9], data[at + 10], data[at + 11], data[at + 12]).setLight(light) + } + + private fun textureOf(batch: VfxQuadBatch): Int = + Minecraft.getInstance().textureManager.getTexture(batch.key.texture.rl).id + + private fun applyState(key: VfxBatchKey, premultiplied: Boolean) { + applyBlend(key.blend, premultiplied) + if (key.cull) RenderSystem.enableCull() else RenderSystem.disableCull() + if (key.depthTest) RenderSystem.enableDepthTest() else RenderSystem.disableDepthTest() + RenderSystem.depthMask(key.depthWrite) + } + + private fun restoreState() { + RenderSystem.depthMask(true) + RenderSystem.enableDepthTest() + RenderSystem.enableBlend() + RenderSystem.blendEquation(GL33.GL_FUNC_ADD) + RenderSystem.defaultBlendFunc() + RenderSystem.enableCull() + } + + private fun applyBlend(blend: VfxBatchBlend, premultiplied: Boolean) { + RenderSystem.blendEquation(GL33.GL_FUNC_ADD) + when (blend) { + VfxBatchBlend.OPAQUE -> RenderSystem.disableBlend() + VfxBatchBlend.MIXED -> { + RenderSystem.enableBlend() + RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA) + } + + VfxBatchBlend.BLEND -> { + RenderSystem.enableBlend() + RenderSystem.defaultBlendFunc() + } + + VfxBatchBlend.ADDITIVE -> { + RenderSystem.enableBlend() + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE) + } + + VfxBatchBlend.MULTIPLY -> { + RenderSystem.enableBlend() + if (premultiplied) { + RenderSystem.blendFunc(GlStateManager.SourceFactor.DST_COLOR, GlStateManager.DestFactor.ZERO) + } else { + RenderSystem.blendFunc( + GlStateManager.SourceFactor.DST_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA + ) + } + } + } + } + + private fun uploadInstances(total: Int) { + if (instanceCapacity < total || upload.capacity() < total * STRIDE) { + val capacity = Integer.highestOneBit((total - 1).coerceAtLeast(255)) * 2 + upload = BufferUtils.createFloatBuffer(capacity * STRIDE) + instanceCapacity = capacity + instanceBuffer?.bind() + GL33.glBufferData(GL33.GL_ARRAY_BUFFER, capacity.toLong() * STRIDE_BYTES, GL33.GL_STREAM_DRAW) + } + upload.clear() + upload.put(packer.packed, 0, total * STRIDE) + upload.flip() + instanceBuffer?.bind() + GL33.glBufferSubData(GL33.GL_ARRAY_BUFFER, 0L, upload) + } + + private fun ensureBuffers() { + if (quadBuffer != null) return + + quadBuffer = VboWrapper.createArrayBuffer().apply { + val corners = BufferUtils.createFloatBuffer(4 * 5) + corners.put(-0.5f).put(-0.5f).put(0f).put(0f).put(1f) + corners.put(0.5f).put(-0.5f).put(0f).put(1f).put(1f) + corners.put(0.5f).put(0.5f).put(0f).put(1f).put(0f) + corners.put(-0.5f).put(0.5f).put(0f).put(0f).put(0f) + corners.flip() + uploadData(corners) + } + indexBuffer = VboWrapper.createElementBuffer().apply { + val indices = BufferUtils.createIntBuffer(6) + indices.put(0).put(1).put(2).put(0).put(2).put(3) + indices.flip() + uploadData(indices) + } + instanceBuffer = VboWrapper.createArrayBuffer() + instanceCapacity = 0 + } + + private fun vaoFor(shader: ShaderInstance): Int = vaos.getOrPut(shader) { + val vao = GL33.glGenVertexArrays() + GL33.glBindVertexArray(vao) + + quadBuffer?.bind() + bindFloats(shader, "Position", 3, 5 * Float.SIZE_BYTES, 0L, divisor = 0) + bindFloats(shader, "UV0", 2, 5 * Float.SIZE_BYTES, 3L * Float.SIZE_BYTES, divisor = 0) + + instanceBuffer?.bind() + pointInstances(shader, 0L) + + indexBuffer?.bind() + vao + } + + /** Points the per-particle attributes at [base] bytes into the instance buffer. */ + private fun pointInstances(shader: ShaderInstance, base: Long) { + bindFloats(shader, "InstanceCenter", 3, STRIDE_BYTES, base) + bindFloats(shader, "InstanceRight", 3, STRIDE_BYTES, base + 3L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceUp", 3, STRIDE_BYTES, base + 6L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceColor", 4, STRIDE_BYTES, base + 9L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceUv", 4, STRIDE_BYTES, base + 13L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceLight", 2, STRIDE_BYTES, base + 17L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceBlend", 1, STRIDE_BYTES, base + 19L * Float.SIZE_BYTES) + } + + private fun bindFloats( + shader: ShaderInstance, + name: String, + size: Int, + stride: Int, + offset: Long, + divisor: Int = 1, + ) { + val location = GL33.glGetAttribLocation(shader.id, name) + if (location == -1) return + + GL33.glVertexAttribPointer(location, size, GL33.GL_FLOAT, false, stride, offset) + GL33.glEnableVertexAttribArray(location) + if (divisor != 0) GL33.glVertexAttribDivisor(location, divisor) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt new file mode 100644 index 000000000..ddd807ded --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt @@ -0,0 +1,66 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.systems.RenderSystem +import net.minecraft.client.Minecraft +import org.joml.Matrix4f +import ru.hollowhorizon.hollowengine.client.vfx.VfxBoneBindings +import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance +import ru.hollowhorizon.hollowengine.client.vfx.VfxScenes +import ru.hollowhorizon.hollowengine.common.events.ClientOnly +import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent +import ru.hollowhorizon.hollowengine.common.events.client.render.RenderLevelStageEvent +import ru.hollowhorizon.hollowengine.common.events.client.render.RenderStage + +/** + * Ticks and draws the effects of the world. + */ +@ClientOnly +object VfxWorldRenderer { + private val quads = ArrayList() + + @SubscribeEvent + fun onRenderLevel(event: RenderLevelStageEvent) { + if (event.stage != RenderStage.AFTER_PARTICLES) return + + val camera = event.camera.position + val scene = VfxScenes.current() + val bones = VfxBoneBindings.drain(camera) + if (scene == null && bones.isEmpty()) return + + scene?.update() + + val levelPose = event.poseStack.last().pose() + quads.clear() + + scene?.forEachInstance { instance, _ -> + val placement = placeInWorld(instance, levelPose, camera.x, camera.y, camera.z) + VfxDrawCollector.collectQuads(instance, placement, quads) + VfxDrawCollector.renderMeshes(instance, placement) + } + bones.forEach { binding -> + VfxDrawCollector.collectQuads(binding.instance, binding.placement, quads) + VfxDrawCollector.renderMeshes(binding.instance, binding.placement) + } + + Minecraft.getInstance().renderBuffers().bufferSource().endBatch() + if (quads.isEmpty()) return + + VfxQuadRenderer.render( + draws = quads, + view = VfxView.ofCamera(event.camera, RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix()), + ) + quads.clear() + } + + private fun placeInWorld( + instance: VfxInstance, + levelPose: Matrix4f, + cameraX: Double, + cameraY: Double, + cameraZ: Double, + ): Matrix4f = Matrix4f(levelPose).translate( + (instance.origin.x - cameraX).toFloat(), + (instance.origin.y - cameraY).toFloat(), + (instance.origin.z - cameraZ).toFloat(), + ) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt index c6bbdae65..fb99fefac 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt @@ -29,6 +29,8 @@ import ru.hollowhorizon.hollowengine.client.particles.BedrockParticles import ru.hollowhorizon.hollowengine.client.particles.ParticleEffect import ru.hollowhorizon.hollowengine.client.particles.Transform import ru.hollowhorizon.hollowengine.client.utils.mc +import ru.hollowhorizon.hollowengine.client.vfx.VfxAssets +import ru.hollowhorizon.hollowengine.common.vfx.Vfx import ru.hollowhorizon.hollowengine.common.coroutines.coroutineScope import ru.hollowhorizon.hollowengine.common.coroutines.runtimeContext import ru.hollowhorizon.hollowengine.common.dialogue.DialogueInput @@ -117,8 +119,42 @@ private fun CommandExtension.registerParticleCommands() { SUCCESS } } + + registerVfxCommands() } +private fun CommandExtension.registerVfxCommands() { + "vfx"( + arg("pos", Vec3Argument.vec3()), + arg("name", StringArgumentType.greedyString()) { knownEffects() } + ) { + executes { + Vfx.play( + source.level, + Vec3Argument.getVec3(this, "pos"), + StringArgumentType.getString(this, "name"), + ) + SUCCESS + } + } + + "vfx"( + arg("entity", EntityArgument.entity()), + arg("name", StringArgumentType.greedyString()) { knownEffects() } + ) { + executes { + Vfx.play( + EntityArgument.getEntity(this, "entity"), + StringArgumentType.getString(this, "name"), + ) + SUCCESS + } + } +} + +private fun knownEffects(): List = + if (isPhysicalClient) VfxAssets.ids.map { it.toString() } else emptyList() + private fun CommandExtension.registerModelCommands() { "model"(arg("model", StringArgumentType.string()) { getAvailableModels() }) { executes { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/models/RigAttachmentTypes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/models/RigAttachmentTypes.kt index 56fc5426b..801538364 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/models/RigAttachmentTypes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/models/RigAttachmentTypes.kt @@ -9,6 +9,7 @@ import ru.hollowhorizon.hollowengine.api.extensions.ExtensionHandle import ru.hollowhorizon.hollowengine.api.extensions.ExtensionPoints import ru.hollowhorizon.hollowengine.common.utils.nbt.TagModuleRevision import ru.hollowhorizon.hollowengine.common.utils.rl +import ru.hollowhorizon.hollowengine.common.vfx.VfxBoneAttachmentSpec import kotlin.reflect.KClass /** @@ -39,6 +40,15 @@ object RigAttachmentTypes { createDefault = { id -> ItemSlotAttachmentSpec(id = id) }, ) ) + register( + RigAttachmentType( + id = "hollowengine:rig/vfx", + specClass = VfxBoneAttachmentSpec::class, + serializer = VfxBoneAttachmentSpec.serializer(), + titleKey = "hollowengine.gui.rig_editor.kind_vfx", + createDefault = { id -> VfxBoneAttachmentSpec(id = id) }, + ) + ) } fun register(type: RigAttachmentType<*>): ExtensionHandle = point.register(type.key, type) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt index cf7ccc224..f44994caa 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.common.registry import com.mojang.blaze3d.vertex.DefaultVertexFormat import net.minecraft.client.renderer.ShaderInstance import ru.hollowhorizon.hollowengine.HollowEngine.MODID +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadRenderer import ru.hollowhorizon.hollowengine.common.events.ClientOnly import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent import ru.hollowhorizon.hollowengine.common.events.registry.RegisterShadersEvent @@ -12,6 +13,7 @@ import ru.hollowhorizon.hollowengine.common.utils.rl object ModShaders { lateinit var GLTF_ENTITY: ShaderInstance lateinit var GLTF_ENTITY_INSTANCED: ShaderInstance + var VFX_PARTICLE: ShaderInstance? = null var UI_EFFECT: ShaderInstance? = null var UI_IMAGE_SHADOW: ShaderInstance? = null var MSDF_TEXT: ShaderInstance? = null @@ -30,6 +32,13 @@ object ModShaders { ) { GLTF_ENTITY_INSTANCED = it } + event.register( + "$MODID:vfx_particle".rl, + DefaultVertexFormat.POSITION_TEX_COLOR + ) { + VFX_PARTICLE = it + VfxQuadRenderer.invalidate() + } event.register( "$MODID:ui_effect".rl, DefaultVertexFormat.POSITION_TEX_COLOR diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/story/functions/effects/VfxEffects.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/story/functions/effects/VfxEffects.kt new file mode 100644 index 000000000..e66cdb757 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/story/functions/effects/VfxEffects.kt @@ -0,0 +1,28 @@ +package ru.hollowhorizon.hollowengine.common.scripting.story.functions.effects + +import net.minecraft.core.BlockPos +import net.minecraft.world.entity.Entity +import net.minecraft.world.level.Level +import net.minecraft.world.phys.Vec3 +import ru.hollowhorizon.hollowengine.common.vfx.Vfx +import ru.hollowhorizon.hollowengine.common.vfx.VfxHandle + +/** + * Plays effect from a script. + * + * The handle that comes back is what steers the effect afterward: stopping it, moving it, or writing + * into its data store, so its expressions can read the value as `d.`. + * + * ```kotlin + * val aura = boss.playVfx("mypack:vfx/aura") + * aura[Charge] = 0.5f + * aura.stop() + * ``` + */ +fun Level.playVfx(position: Vec3, effect: String): VfxHandle = Vfx.play(this, position, effect) + +fun Level.playVfx(position: BlockPos, effect: String): VfxHandle = + Vfx.play(this, Vec3(position.x + 0.5, position.y.toDouble(), position.z + 0.5), effect) + +/** Plays [effect] on this entity; it follows it and stops when the entity is gone. */ +fun Entity.playVfx(effect: String): VfxHandle = Vfx.play(this, effect) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxBoneAttachment.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxBoneAttachment.kt new file mode 100644 index 000000000..57d1282fe --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxBoneAttachment.kt @@ -0,0 +1,34 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.attachments.editor.EditorAsset +import ru.hollowhorizon.hollowengine.common.attachments.editor.EditorHidden +import ru.hollowhorizon.hollowengine.common.attachments.editor.EditorName +import ru.hollowhorizon.hollowengine.common.models.RigAttachmentSpec +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f + +/** + * An effect attached to bone, authored in the rig editor. + */ +@Serializable +@SerialName("hollowengine:rig/vfx") +data class VfxBoneAttachmentSpec( + @EditorHidden + override val id: String = "vfx", + @EditorName("hollowengine.gui.vfx.effect") + @EditorAsset(".vfx") + val effect: String = "", + @EditorName("hollowengine.gui.vfx.spawn_offset") + val offset: Vec3f = Vec3f.ZERO, + /** Euler angles in degrees, on top of the bone rotation. */ + @EditorName("hollowengine.gui.vfx.rotation") + val rotation: Vec3f = Vec3f.ZERO, + @EditorName("hollowengine.gui.vfx.scale") + val scale: Float = 1f, + /** Whether it starts as soon as the model is drawn; otherwise a script starts it. */ + @EditorName("hollowengine.gui.vfx.auto_play") + val autoPlay: Boolean = true, +) : RigAttachmentSpec() { + override fun withId(id: String) = copy(id = id) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt new file mode 100644 index 000000000..d21443d86 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt @@ -0,0 +1,233 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.Serializable + +/** One authored effect: a tree of nodes and timeline that drives them. */ +@Serializable +data class VfxEffect( + val version: Int = CURRENT_VERSION, + val nodes: List = emptyList(), + val timeline: VfxTimelineSpec = VfxTimelineSpec(), +) { + /** Every node of tree, parents before children. */ + fun walk(): List = nodes.flatMap { it.walkSelf() } + + fun node(id: String): VfxNodeSpec? = walk().firstOrNull { it.id == id } + + /** Every expression in the file, so they compile as one unit. */ + fun expressions(): List = walk().flatMap { it.expressions() }.filter { it.isNotBlank() }.distinct() + + /** The effect with [node] put in place of the node with the same id, wherever it sits. */ + fun withNode(node: VfxNodeSpec): VfxEffect = copy(nodes = nodes.map { it.replacing(node) }) + + fun withoutNode(id: String): VfxEffect = copy(nodes = nodes.mapNotNull { it.removing(id) }) + + /** [child] added under [parentId], or at the root when it is null. */ + fun withChild(parentId: String?, child: VfxNodeSpec): VfxEffect { + if (parentId == null) return copy(nodes = nodes + child) + return copy(nodes = nodes.map { it.adding(parentId, child) }) + } + + /** The effect with every node placed at its origin, switched on and unnamed: what placement leaves. */ + fun withoutPlacement(): VfxEffect = copy(nodes = nodes.map { it.withoutPlacement() }) + + companion object { + const val CURRENT_VERSION = 1 + + val EMPTY = VfxEffect() + } +} + +private fun VfxNodeSpec.withoutPlacement(): VfxNodeSpec = withCommon( + name = "", + enabled = true, + transform = VfxTransform.IDENTITY, + children = children.map { it.withoutPlacement() }, +) + +private fun VfxNodeSpec.walkSelf(): List = buildList { + add(this@walkSelf) + children.forEach { addAll(it.walkSelf()) } +} + +private fun VfxNodeSpec.replacing(node: VfxNodeSpec): VfxNodeSpec { + if (id == node.id) return node + if (children.isEmpty()) return this + return withCommon(children = children.map { it.replacing(node) }) +} + +private fun VfxNodeSpec.removing(target: String): VfxNodeSpec? { + if (id == target) return null + if (children.isEmpty()) return this + return withCommon(children = children.mapNotNull { it.removing(target) }) +} + +private fun VfxNodeSpec.adding(parentId: String, child: VfxNodeSpec): VfxNodeSpec { + if (id == parentId) return withCommon(children = children + child) + if (children.isEmpty()) return this + return withCommon(children = children.map { it.adding(parentId, child) }) +} + +@Serializable +data class VfxTrackCurve( + val channel: Int = 0, + val visible: Boolean = true, + val keys: List = emptyList(), +) + +/** + * One animated property of one node. One curve per scalar component of it. + */ +@Serializable +data class VfxTrack( + val node: String = "", + /** An id from [VfxAnimatables]. */ + val property: String = "", + val curves: List = emptyList(), +) + +@Serializable +data class VfxTimelineSpec( + val duration: Float = 5f, + val loop: Boolean = true, + val tracks: List = emptyList(), +) { + fun track(node: String, property: String): VfxTrack? = + tracks.firstOrNull { it.node == node && it.property == property } + + val isEmpty: Boolean get() = tracks.isEmpty() +} + +/** What a timeline track can drive. */ +enum class VfxAnimatableKind(val channels: Int) { + /** On or off, held between keys instead of interpolated. */ + TOGGLE(1), FLOAT(1), VEC3(3), ROTATION(3), COLOR(4), +} + +/** + * One property a timeline may animate, and how to read its authored value as the starting point. + */ +class VfxAnimatable( + val id: String, + val titleKey: String, + val kind: VfxAnimatableKind, + val appliesTo: (VfxNodeSpec) -> Boolean, + val ownerTitleKey: String? = null, + val read: (VfxNodeSpec) -> FloatArray, +) + +/** + * The properties, that timeline can animate. + */ +object VfxAnimatables { + const val ENABLED = "enabled" + const val POSITION = "transform.position" + const val ROTATION = "transform.rotation" + const val SCALE = "transform.scale" + const val RATE = "emission.rate" + const val SHAPE_RADIUS = "shape.radius" + const val SHAPE_EXTENTS = "shape.extents" + const val SHAPE_ANGLE = "shape.angle" + const val SHAPE_THICKNESS = "shape.thickness" + const val LIFETIME = "spawn.lifetime" + const val SPEED = "spawn.speed" + const val OFFSET = "spawn.offset" + const val INHERIT_VELOCITY = "spawn.inherit_velocity" + const val SIZE = "appearance.size" + const val SPIN = "appearance.rotation" + const val COLOR = "appearance.color" + const val GRAVITY = "motion.gravity" + const val DRAG = "motion.drag" + + private const val MODULE_PREFIX = "modules." + + fun moduleProperty(moduleId: String, field: String): String = "$MODULE_PREFIX$moduleId.$field" + + private val common: List = listOf( + VfxAnimatable(ENABLED, key("property_enabled"), VfxAnimatableKind.TOGGLE, { true }) { + floatArrayOf(if (it.enabled) 1f else 0f) + }, + VfxAnimatable(POSITION, key("property_position"), VfxAnimatableKind.VEC3, { true }) { node -> + node.transform.position.let { floatArrayOf(it.x, it.y, it.z) } + }, + VfxAnimatable(ROTATION, key("property_rotation"), VfxAnimatableKind.ROTATION, { true }) { node -> + node.transform.rotation.let { floatArrayOf(it.x, it.y, it.z) } + }, + VfxAnimatable(SCALE, key("property_scale"), VfxAnimatableKind.VEC3, { true }) { node -> + node.transform.scale.let { floatArrayOf(it.x, it.y, it.z) } + }, + ) + + private val emitter: List = listOf( + scalar(RATE, "rate") { it.emission.rate }, + scalar(SHAPE_RADIUS, "radius") { it.shape.radius }, + vector(SHAPE_EXTENTS, "extents") { it.shape.extents }, + scalar(SHAPE_ANGLE, "angle") { it.shape.angle }, + scalar(SHAPE_THICKNESS, "thickness") { it.shape.thickness }, + scalar(LIFETIME, "lifetime") { it.spawn.lifetime }, + scalar(SPEED, "speed") { it.spawn.speed }, + vector(OFFSET, "spawn_offset") { it.spawn.offset }, + scalar(INHERIT_VELOCITY, "inherit_velocity") { it.spawn.inheritVelocity }, + vector(SIZE, "size") { it.appearance.size }, + VfxAnimatable(SPIN, key("spin"), VfxAnimatableKind.ROTATION, { it is VfxEmitterSpec }) { + (it as VfxEmitterSpec).appearance.rotation.constants() + }, + VfxAnimatable(COLOR, key("color"), VfxAnimatableKind.COLOR, { it is VfxEmitterSpec }) { + (it as VfxEmitterSpec).appearance.color.constants() + }, + scalar(GRAVITY, "gravity") { it.motion.gravity }, + scalar(DRAG, "drag") { it.motion.drag }, + ) + + /** Everything the timeline can drive on [node], its modules included. */ + fun forNode(node: VfxNodeSpec): List = buildList { + addAll(common) + if (node !is VfxEmitterSpec) return@buildList + addAll(emitter) + node.modules.forEach { module -> + val ownerKey = VfxModuleTypes.of(module)?.titleKey + module.animatables().forEach { field -> + add( + VfxAnimatable( + id = moduleProperty(module.id, field.field), + titleKey = field.titleKey, + kind = field.kind, + appliesTo = { it is VfxEmitterSpec && it.module(module.id) != null }, + read = { spec -> + (spec as? VfxEmitterSpec)?.module(module.id)?.let(field.read) + ?: FloatArray(field.kind.channels) + }, + ownerTitleKey = ownerKey, + ) + ) + } + } + } + + fun of(node: VfxNodeSpec, id: String): VfxAnimatable? = forNode(node).firstOrNull { it.id == id } + + private fun key(name: String) = "hollowengine.gui.vfx.$name" + + private fun scalar(id: String, title: String, get: (VfxEmitterSpec) -> VfxValue) = + VfxAnimatable(id, key(title), VfxAnimatableKind.FLOAT, { it is VfxEmitterSpec }) { + floatArrayOf(get(it as VfxEmitterSpec).constantOr(0f)) + } + + private fun vector(id: String, title: String, get: (VfxEmitterSpec) -> VfxVec3Value) = + VfxAnimatable(id, key(title), VfxAnimatableKind.VEC3, { it is VfxEmitterSpec }) { + get(it as VfxEmitterSpec).constants() + } +} + +/** The expression sources inside a value, for the one-pass compile of a file. */ +fun VfxValue.sources(): List = when (this) { + is VfxValue.Expr -> listOf(source).filter { it.isNotBlank() } + else -> emptyList() +} + +fun VfxVec3Value.sources(): List = x.sources() + y.sources() + z.sources() + +fun VfxColorValue.sources(): List = when (this) { + is VfxColorValue.Channels -> r.sources() + g.sources() + b.sources() + a.sources() + else -> emptyList() +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxFormat.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxFormat.kt new file mode 100644 index 000000000..c2b4786a2 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxFormat.kt @@ -0,0 +1,56 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.json.Json +import kotlinx.serialization.modules.SerializersModule + +/** + * Reads and writes json-like `.vfx` files. + */ +object VfxFormat { + const val EXTENSION = ".vfx" + + /** Where a resource pack keeps its effects. */ + const val RESOURCE_FOLDER = "vfx" + + @Volatile + private var cached: Json? = null + + @Volatile + private var cachedRevision = -1 + + val json: Json + get() { + val revision = VfxModuleRevision.current + cached?.takeIf { cachedRevision == revision }?.let { return it } + + return build().also { + cached = it + cachedRevision = revision + } + } + + fun read(text: String): VfxEffect { + if (text.isBlank()) return VfxEffect.EMPTY + return json.decodeFromString(VfxEffect.serializer(), text) + } + + fun write(effect: VfxEffect): String = json.encodeToString(VfxEffect.serializer(), effect) + + private fun build(): Json { + val module = SerializersModule { + VfxNodeTypes.registerInto(this) + VfxModuleTypes.registerInto(this) + } + return Json { + serializersModule = module + prettyPrint = true + prettyPrintIndent = " " + ignoreUnknownKeys = true + encodeDefaults = false + allowComments = true + allowTrailingComma = true + allowSpecialFloatingPointValues = true + classDiscriminator = "type" + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt new file mode 100644 index 000000000..4a9e03082 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt @@ -0,0 +1,67 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** How the color a particle wrote is mixed into what is already on screen. */ +@Serializable +enum class VfxBlend { + /** No blending; the alpha channel only cuts holes. */ + OPAQUE, + /** Ordinary alpha blending. The only mode that has to be sorted back to front. */ + BLEND, + /** Adds light: fire, sparks, magic. */ + ADDITIVE, + /** Multiplies what is behind: shadows, stains, darkening smoke. */ + MULTIPLY; +} + +/** Where a particle takes its light from. */ +@Serializable +enum class VfxLighting { + /** Full bright, whatever the block light is: fire, magic, anything that emits. */ + UNLIT, + + /** The block and skylight of the particle position. */ + WORLD, +} + +/** + * The part of the texture a particle shows, in 0..1 texture coordinates. + * + * The whole texture by default. A sprite that shares its file with others picks its own corner here; + * a flipbook is cut out of this region by the frame-atlas module, so the two work together. + */ +@Serializable +data class VfxUvRect( + val u0: Float = 0f, + val v0: Float = 0f, + val u1: Float = 1f, + val v1: Float = 1f, +) { + val width: Float get() = u1 - u0 + val height: Float get() = v1 - v0 + + companion object { + val FULL = VfxUvRect() + } +} + +/** + * How particles of one emitter are drawn. + */ +@Serializable +data class VfxMaterialSpec( + val texture: String = DEFAULT_TEXTURE, + val blend: VfxBlend = VfxBlend.BLEND, + val lighting: VfxLighting = VfxLighting.UNLIT, + val cull: Boolean = false, + val depthTest: Boolean = true, + val depthWrite: Boolean = false, + val uv: VfxUvRect = VfxUvRect.FULL, + @SerialName("shader") val shader: String? = null, +) { + companion object { + const val DEFAULT_TEXTURE = "hollowengine:textures/particle/circle.png" + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxPlayback.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxPlayback.kt new file mode 100644 index 000000000..b83951dc6 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxPlayback.kt @@ -0,0 +1,143 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.Serializable +import net.minecraft.nbt.CompoundTag +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.player.Player +import net.minecraft.world.level.Level +import net.minecraft.world.phys.Vec3 +import ru.hollowhorizon.hollowengine.client.vfx.VfxScenes +import ru.hollowhorizon.hollowengine.common.data.DataKey +import ru.hollowhorizon.hollowengine.common.data.NbtDataStore +import ru.hollowhorizon.hollowengine.common.network.HollowPacket +import ru.hollowhorizon.hollowengine.common.network.HollowPacketHandler +import ru.hollowhorizon.hollowengine.common.network.sendAllInDimension +import ru.hollowhorizon.hollowengine.common.network.sendTrackingEntityAndSelf +import ru.hollowhorizon.hollowengine.common.utils.nbt.ForCompoundNBT +import ru.hollowhorizon.hollowengine.common.utils.nbt.ForEntity +import ru.hollowhorizon.hollowengine.common.utils.nbt.ForVec3 +import java.util.concurrent.atomic.AtomicInteger + +/** + * A running effect, as the side that started it sees it. + * + * The store is an ordinary [NbtDataStore] with [DataKey]s. + */ +class VfxHandle internal constructor( + val id: Int, + val effect: String, + private val level: Level, + private val entity: Entity?, + private var position: Vec3?, +) { + val data = NbtDataStore() + + var isStopped: Boolean = false + private set + + init { + data.onChange = { pushData() } + } + + /** Moves a world-anchored effect. Does nothing for one that follows an entity. */ + fun moveTo(next: Vec3) { + if (entity != null || isStopped) return + position = next + broadcast(VfxMovePacket(id, next)) + } + + /** + * Stops the effect: emitters shut down and what is already alive lives out its lifetime, unless + * [immediate], which clears everything this frame. + */ + fun stop(immediate: Boolean = false) { + if (isStopped) return + isStopped = true + broadcast(VfxStopPacket(id, immediate)) + } + + /** Writes a value the effect expressions can read as `d.`. */ + operator fun set(key: DataKey, value: T) { + data[key] = value + } + + operator fun get(key: DataKey): T? = data[key] + + /** Sends the whole store again, for a client that has just started tracking this effect. */ + fun update() { + if (isStopped) return + broadcast(playPacket()) + } + + internal fun playPacket() = VfxPlayPacket(id, effect, position, entity, data.save()) + + private fun pushData() { + if (isStopped) return + broadcast(VfxDataPacket(id, data.save())) + } + + private fun broadcast(packet: HollowPacket) { + if (entity != null) packet.sendTrackingEntityAndSelf(entity) else packet.sendAllInDimension(level) + } +} + +/** + * Starts effects and hands out their handles. + */ +object Vfx { + private val nextId = AtomicInteger(1) + + /** Plays [effect] at a point in the world. */ + fun play(level: Level, position: Vec3, effect: String): VfxHandle = + start(VfxHandle(nextId.getAndIncrement(), effect, level, null, position)) + + /** Plays [effect] on an entity, following it while it lives. */ + fun play(entity: Entity, effect: String): VfxHandle = + start(VfxHandle(nextId.getAndIncrement(), effect, entity.level(), entity, null)) + + private fun start(handle: VfxHandle): VfxHandle { + handle.update() + return handle + } +} + +@Serializable +@HollowPacketHandler(HollowPacketHandler.Direction.TO_CLIENT) +class VfxPlayPacket( + val handle: Int = 0, + val effect: String = "", + val position: @Serializable(ForVec3::class) Vec3? = null, + val entity: @Serializable(ForEntity::class) Entity? = null, + val data: @Serializable(ForCompoundNBT::class) CompoundTag = CompoundTag(), +) : HollowPacket { + override fun handle(player: Player) { + VfxScenes.play(this) + } +} + +@Serializable +@HollowPacketHandler(HollowPacketHandler.Direction.TO_CLIENT) +class VfxStopPacket(val handle: Int = 0, val immediate: Boolean = false) : HollowPacket { + override fun handle(player: Player) { + VfxScenes.stop(handle, immediate) + } +} + +@Serializable +@HollowPacketHandler(HollowPacketHandler.Direction.TO_CLIENT) +class VfxMovePacket(val handle: Int = 0, val position: @Serializable(ForVec3::class) Vec3 = Vec3.ZERO) : HollowPacket { + override fun handle(player: Player) { + VfxScenes.move(handle, position) + } +} + +@Serializable +@HollowPacketHandler(HollowPacketHandler.Direction.TO_CLIENT) +class VfxDataPacket( + val handle: Int = 0, + val data: @Serializable(ForCompoundNBT::class) CompoundTag = CompoundTag(), +) : HollowPacket { + override fun handle(player: Player) { + VfxScenes.applyData(handle, data) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt new file mode 100644 index 000000000..34d449b83 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt @@ -0,0 +1,194 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.modules.PolymorphicModuleBuilder +import kotlinx.serialization.modules.SerializersModuleBuilder +import kotlinx.serialization.modules.polymorphic +import net.minecraft.resources.ResourceLocation +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionHandle +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionPoints +import ru.hollowhorizon.hollowengine.common.utils.rl +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxCollisionSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxModuleSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxNoiseSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxVelocityOverLifetimeSpec +import kotlin.reflect.KClass + +/** + * One kind of node an effect may contain: how it is stored, and what the editor calls it. + */ +class VfxNodeType( + val id: String, + val specClass: KClass, + val serializer: KSerializer, + val titleKey: String, + val icon: String? = null, + val createDefault: (() -> S)? = null, +) { + val key: ResourceLocation = id.rl +} + +object VfxNodeTypes { + val point = ExtensionPoints.create>("hollowengine:vfx/node_types".rl) + + init { + point.onChange(VfxModuleRevision::invalidate) + + register( + VfxNodeType( + id = "hollowengine:vfx/quad_emitter", + specClass = VfxQuadEmitterSpec::class, + serializer = VfxQuadEmitterSpec.serializer(), + titleKey = "hollowengine.gui.vfx.node_quad_emitter", + icon = "hollowengine:textures/gui/icons/box.svg", + createDefault = { VfxQuadEmitterSpec() }, + ) + ) + register( + VfxNodeType( + id = "hollowengine:vfx/mesh_emitter", + specClass = VfxMeshEmitterSpec::class, + serializer = VfxMeshEmitterSpec.serializer(), + titleKey = "hollowengine.gui.vfx.node_mesh_emitter", + icon = "hollowengine:textures/gui/icons/file_model.svg", + createDefault = { VfxMeshEmitterSpec() }, + ) + ) + } + + fun register(type: VfxNodeType<*>): ExtensionHandle = point.register(type.key, type) + + val all: List> get() = point.extensions + + fun of(spec: VfxNodeSpec): VfxNodeType<*>? = all.firstOrNull { it.specClass.isInstance(spec) } + + fun registerInto(builder: SerializersModuleBuilder) { + builder.polymorphic(VfxNodeSpec::class) { + all.forEach { type -> subclass(type) } + } + builder.polymorphic(VfxEmitterSpec::class) { + all.filter { VfxEmitterSpec::class.java.isAssignableFrom(it.specClass.java) } + .forEach { type -> emitterSubclass(type) } + } + } + + @Suppress("UNCHECKED_CAST") + private fun PolymorphicModuleBuilder.subclass(type: VfxNodeType<*>) = subclass( + type.specClass as KClass, + type.serializer as KSerializer, + ) + + @Suppress("UNCHECKED_CAST") + private fun PolymorphicModuleBuilder.emitterSubclass(type: VfxNodeType<*>) = subclass( + type.specClass as KClass, + type.serializer as KSerializer, + ) +} + +/** + * One kind of emitter module. How it is stored, what the editor calls it, and which nodes accept it. + */ +class VfxModuleType( + val id: String, + val specClass: KClass, + val serializer: KSerializer, + val titleKey: String, + val createDefault: (() -> S)? = null, + val appliesTo: (VfxEmitterSpec) -> Boolean = { true }, + val repeatable: Boolean = false, +) { + val key: ResourceLocation = id.rl +} + +object VfxModuleTypes { + val point = ExtensionPoints.create>("hollowengine:vfx/module_types".rl) + + init { + point.onChange(VfxModuleRevision::invalidate) + + register( + VfxModuleType( + id = "hollowengine:vfx/velocity_over_lifetime", + specClass = VfxVelocityOverLifetimeSpec::class, + serializer = VfxVelocityOverLifetimeSpec.serializer(), + titleKey = "hollowengine.gui.vfx.module_velocity_over_lifetime", + createDefault = { VfxVelocityOverLifetimeSpec() }, + ) + ) + register( + VfxModuleType( + id = "hollowengine:vfx/force", + specClass = VfxForceSpec::class, + serializer = VfxForceSpec.serializer(), + titleKey = "hollowengine.gui.vfx.module_force", + createDefault = { VfxForceSpec() }, + repeatable = true, + ) + ) + register( + VfxModuleType( + id = "hollowengine:vfx/noise", + specClass = VfxNoiseSpec::class, + serializer = VfxNoiseSpec.serializer(), + titleKey = "hollowengine.gui.vfx.module_noise", + createDefault = { VfxNoiseSpec() }, + ) + ) + register( + VfxModuleType( + id = "hollowengine:vfx/collision", + specClass = VfxCollisionSpec::class, + serializer = VfxCollisionSpec.serializer(), + titleKey = "hollowengine.gui.vfx.module_collision", + createDefault = { VfxCollisionSpec() }, + ) + ) + register( + VfxModuleType( + id = "hollowengine:vfx/uv_animation", + specClass = VfxUvAnimationSpec::class, + serializer = VfxUvAnimationSpec.serializer(), + titleKey = "hollowengine.gui.vfx.module_uv_animation", + createDefault = { VfxUvAnimationSpec() }, + appliesTo = { it is VfxQuadEmitterSpec }, + ) + ) + } + + fun register(type: VfxModuleType<*>): ExtensionHandle = point.register(type.key, type) + + val all: List> get() = point.extensions + + fun of(spec: VfxModuleSpec): VfxModuleType<*>? = all.firstOrNull { it.specClass.isInstance(spec) } + + fun forEmitter(emitter: VfxEmitterSpec): List> = all.filter { it.appliesTo(emitter) } + + fun registerInto(builder: SerializersModuleBuilder) { + builder.polymorphic(VfxModuleSpec::class) { + all.forEach { type -> subclass(type) } + } + } + + @Suppress("UNCHECKED_CAST") + private fun PolymorphicModuleBuilder.subclass(type: VfxModuleType<*>) = subclass( + type.specClass as KClass, + type.serializer as KSerializer, + ) +} + +/** + * Says when the serializers module of [VfxFormat] has to be built again, which is whenever an addon + * registers a node or module kind. + */ +object VfxModuleRevision { + @Volatile + var current: Int = 0 + private set + + @Synchronized + fun invalidate() { + current++ + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt new file mode 100644 index 000000000..474a9ceef --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt @@ -0,0 +1,334 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxModuleSpec + +/** A fresh node id; readable on purpose, because it appears in timeline tracks and in save files. */ +fun newVfxNodeId(prefix: String): String = "$prefix-${Integer.toHexString((0..0xFFFFFF).random())}" + +/** Where an emitter keeps the positions and velocities of its particles. */ +@Serializable +enum class VfxSimulationSpace { + /** The emitter space, that particles follows. */ + LOCAL, + + /** The world space. Particles stay where they were born. */ + WORLD, +} + +/** A node placement inside the effect. */ +@Serializable +data class VfxTransform( + val position: Vec3f = Vec3f.ZERO, + val rotation: Vec3f = Vec3f.ZERO, + val scale: Vec3f = Vec3f.ONES, +) { + companion object { + val IDENTITY = VfxTransform() + } +} + +/** + * One node of an effect. + * + * Node kinds live in [VfxNodeTypes], so an addon can add its own. + */ +@Serializable +abstract class VfxNodeSpec { + abstract val id: String + abstract val name: String + abstract val enabled: Boolean + abstract val transform: VfxTransform + abstract val children: List + + /** A copy with the shared fields replaced, whichever kind of node this is. */ + abstract fun withCommon( + id: String = this.id, + name: String = this.name, + enabled: Boolean = this.enabled, + transform: VfxTransform = this.transform, + children: List = this.children, + ): VfxNodeSpec + + /** Every expression this node evaluates, so a file compiles them all in one pass. */ + open fun expressions(): List = emptyList() +} + +/** How many particles appear and when the emitter stops. */ +@Serializable +data class VfxEmission( + /** Particles per second. */ + val rate: VfxValue = VfxValue.Const(20f), + /** Particles released at once when a loop starts. */ + val burst: Int = 0, + /** Seconds the emitter stays active; zero means forever. */ + val duration: Float = 2f, + val loop: Boolean = true, + /** Seconds of silence between loops. */ + val loopDelay: Float = 0f, + val maxParticles: Int = 256, +) + +/** Shapes a particle can be born on. */ +@Serializable +enum class VfxShapeKind { + POINT, SPHERE, BOX, CONE, DISC, LINE, +} + +/** Which way a newborn particle is sent. */ +@Serializable +enum class VfxDirectionMode { + /** Outwards from the shape. Away from a sphere center, along a cone, up from a disc. */ + SHAPE, + + /** A random direction, whatever the shape. */ + RANDOM, + + /** Always [VfxShape.direction]. */ + FIXED, +} + +/** + * Where particles are born. + * + * The sizes are values rather than numbers. + * TODO: Add Mesh shape. + */ +@Serializable +data class VfxShape( + val kind: VfxShapeKind = VfxShapeKind.POINT, + val radius: VfxValue = VfxValue.Const(0.5f), + /** Box half-extents, and the end point of a line. */ + val extents: VfxVec3Value = VfxVec3Value.all(0.5f), + /** Cone half-angle in degrees. */ + val angle: VfxValue = VfxValue.Const(25f), + /** 0 puts particles on the surface only, 1 fills the whole volume. */ + val thickness: VfxValue = VfxValue.ONE, + val direction: Vec3f = Vec3f.Y_AXIS, + val directionMode: VfxDirectionMode = VfxDirectionMode.SHAPE, +) { + fun expressions(): List = radius.sources() + extents.sources() + angle.sources() + thickness.sources() +} + +/** + * What a particle is given at spawn and never changes afterward. + */ +@Serializable +data class VfxSpawn( + /** Seconds the particle lives. */ + val lifetime: VfxValue = VfxValue.Const(1f), + /** Blocks per second along the shape direction. */ + val speed: VfxValue = VfxValue.Const(1f), + /** An extra offset from the point the shape picked. */ + val offset: VfxVec3Value = VfxVec3Value.ZERO, + /** How much of the emitter own velocity the particle keeps, 0 to 1. */ + val inheritVelocity: VfxValue = VfxValue.ZERO, +) { + fun expressions(): List = + lifetime.sources() + speed.sources() + offset.sources() + inheritVelocity.sources() +} + +/** + * How a particle looks, read again every step for as long as it lives. + */ +@Serializable +data class VfxAppearance( + /** Quad width and height in blocks; a mesh particle uses all three. */ + val size: VfxVec3Value = VfxVec3Value.all(0.25f), + /** Drives all three axes of [size] from the first, which is what most effects want. */ + val uniformSize: Boolean = true, + val rotation: VfxVec3Value = VfxVec3Value.ZERO, + val color: VfxColorValue = VfxColorValue.WHITE, +) { + fun expressions(): List = size.sources() + rotation.sources() + color.sources() +} + +/** + * The forces every emitter has, as opposed to the ones that come from modules. + */ +@Serializable +data class VfxMotion( + /** Blocks per second squared, pulling down. */ + val gravity: VfxValue = VfxValue.ZERO, + /** Fraction of speed lost per second, 0 to 1. */ + val drag: VfxValue = VfxValue.ZERO, +) { + fun expressions(): List = gravity.sources() + drag.sources() +} + +/** + * Attributes, that every emitter has. + */ +@Serializable +abstract class VfxEmitterSpec : VfxNodeSpec() { + abstract val emission: VfxEmission + abstract val space: VfxSimulationSpace + abstract val inheritRotation: Boolean + abstract val inheritScale: Boolean + abstract val shape: VfxShape + abstract val spawn: VfxSpawn + abstract val appearance: VfxAppearance + abstract val motion: VfxMotion + abstract val modules: List + + /** + * The longest step the simulation may take for this emitter, in seconds. + */ + abstract val maxStep: Float + + abstract fun withEmitter( + emission: VfxEmission = this.emission, + space: VfxSimulationSpace = this.space, + inheritRotation: Boolean = this.inheritRotation, + inheritScale: Boolean = this.inheritScale, + shape: VfxShape = this.shape, + spawn: VfxSpawn = this.spawn, + appearance: VfxAppearance = this.appearance, + motion: VfxMotion = this.motion, + modules: List = this.modules, + maxStep: Float = this.maxStep, + ): VfxEmitterSpec + + fun module(id: String): VfxModuleSpec? = modules.firstOrNull { it.id == id } + + override fun expressions(): List = buildList { + addAll(emission.rate.sources()) + addAll(shape.expressions()) + addAll(spawn.expressions()) + addAll(appearance.expressions()) + addAll(motion.expressions()) + modules.forEach { addAll(it.expressions()) } + } +} + +/** How a quad is turned towards the viewer. */ +@Serializable +enum class VfxFacing { + /** Keeps initial rotation, so the quad sits in the world like a decal. */ + NONE, + + /** Always flat to the camera; the authored Z rotation still spins it. */ + CAMERA, + + /** Flat to the camera but locked to [VfxQuadEmitterSpec.facingAxis]: smoke columns, beams, etc. */ + CAMERA_AXIS, +} + +/** Billboard particles. One textured quad each, drawn instanced. */ +@Serializable +@SerialName("hollowengine:vfx/quad_emitter") +data class VfxQuadEmitterSpec( + override val id: String = newVfxNodeId("quads"), + override val name: String = "Quads", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val emission: VfxEmission = VfxEmission(), + override val space: VfxSimulationSpace = VfxSimulationSpace.WORLD, + override val inheritRotation: Boolean = true, + override val inheritScale: Boolean = false, + override val shape: VfxShape = VfxShape(), + override val spawn: VfxSpawn = VfxSpawn(), + override val appearance: VfxAppearance = VfxAppearance(), + override val motion: VfxMotion = VfxMotion(), + override val modules: List = emptyList(), + override val maxStep: Float = DEFAULT_MAX_STEP, + val material: VfxMaterialSpec = VfxMaterialSpec(), + val facing: VfxFacing = VfxFacing.CAMERA, + val facingAxis: Vec3f = Vec3f.Y_AXIS, +) : VfxEmitterSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withEmitter( + emission: VfxEmission, + space: VfxSimulationSpace, + inheritRotation: Boolean, + inheritScale: Boolean, + shape: VfxShape, + spawn: VfxSpawn, + appearance: VfxAppearance, + motion: VfxMotion, + modules: List, + maxStep: Float, + ) = copy( + emission = emission, + space = space, + inheritRotation = inheritRotation, + inheritScale = inheritScale, + shape = shape, + spawn = spawn, + appearance = appearance, + motion = motion, + modules = modules, + maxStep = maxStep, + ) +} + +/** + * Model particles. One instance of a model each, drawn through the model renderer. + */ +@Serializable +@SerialName("hollowengine:vfx/mesh_emitter") +data class VfxMeshEmitterSpec( + override val id: String = newVfxNodeId("meshes"), + override val name: String = "Meshes", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val emission: VfxEmission = VfxEmission(rate = VfxValue.Const(4f), maxParticles = 48), + override val space: VfxSimulationSpace = VfxSimulationSpace.WORLD, + override val inheritRotation: Boolean = true, + override val inheritScale: Boolean = false, + override val shape: VfxShape = VfxShape(), + override val spawn: VfxSpawn = VfxSpawn(), + override val appearance: VfxAppearance = VfxAppearance(size = VfxVec3Value.all(1f)), + override val motion: VfxMotion = VfxMotion(), + override val modules: List = emptyList(), + override val maxStep: Float = DEFAULT_MAX_STEP, + val model: String = "", + /** Turns the model along the direction it travels, on top of the authored rotation. */ + val alignToVelocity: Boolean = false, + val emissive: Boolean = false, +) : VfxEmitterSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withEmitter( + emission: VfxEmission, + space: VfxSimulationSpace, + inheritRotation: Boolean, + inheritScale: Boolean, + shape: VfxShape, + spawn: VfxSpawn, + appearance: VfxAppearance, + motion: VfxMotion, + modules: List, + maxStep: Float, + ) = copy( + emission = emission, + space = space, + inheritRotation = inheritRotation, + inheritScale = inheritScale, + shape = shape, + spawn = spawn, + appearance = appearance, + motion = motion, + modules = modules, + maxStep = maxStep, + ) +} + +internal const val DEFAULT_MAX_STEP = 1f / 60f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt new file mode 100644 index 000000000..399a2b50f --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt @@ -0,0 +1,282 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.utils.Color +import kotlin.math.abs + +/** + * What a number in an effect may be driven by. + */ +@Serializable +sealed interface VfxValue { + /** One number, and the only shape that folds away entirely at load time. */ + @Serializable + @SerialName("const") + data class Const(val value: Float = 0f) : VfxValue + + /** A number picked uniformly between two bounds, once per evaluation. */ + @Serializable + @SerialName("range") + data class Range(val from: Float = 0f, val to: Float = 1f) : VfxValue + + /** A curve read at [source], scaled by [scale]. */ + @Serializable + @SerialName("curve") + data class OverTime( + val curve: VfxCurve = VfxCurve(), + val scale: Float = 1f, + val source: VfxTimeSource = VfxTimeSource.LIFETIME, + ) : VfxValue + + /** An expression in the VFX dialect, such as `p.speed * 0.5` or `d.charge`. */ + @Serializable + @SerialName("expr") + data class Expr(val source: String = "") : VfxValue + + companion object { + val ZERO = Const(0f) + val ONE = Const(1f) + + fun of(value: Float): VfxValue = when (value) { + 0f -> ZERO + 1f -> ONE + else -> Const(value) + } + } +} + +/** + * What the horizontal axis of a curve means. + */ +@Serializable +enum class VfxTimeSource { + /** Age over lifetime, 0 at birth and 1 as the particle dies. The usual choice. */ + LIFETIME, + + /** Age in seconds, for effects that should not stretch with lifetime. */ + PARTICLE_AGE, + + /** Seconds since the emitter started its current loop. */ + EMITTER_AGE, + + /** Seconds since the effect began playing. */ + EFFECT_TIME, + + /** Speed in blocks per second, for "faster means bigger" curves. */ + SPEED, +} + +/** How the segment starting at a key reaches the next one; mirrors the timeline editor modes. */ +@Serializable +enum class VfxInterpolation { + CONSTANT, LINEAR, BEZIER, +} + +/** + * One key of a [VfxCurve]. Tangents are handle offsets in curve space, time and value, exactly as + * the timeline editor stores them. + */ +@Serializable +data class VfxKey( + val time: Float = 0f, + val value: Float = 0f, + val interpolation: VfxInterpolation = VfxInterpolation.BEZIER, + @SerialName("in_time") val inTime: Float = 0f, + @SerialName("in_value") val inValue: Float = 0f, + @SerialName("out_time") val outTime: Float = 0f, + @SerialName("out_value") val outValue: Float = 0f, +) + +/** + * A sampled curve. + */ +@Serializable +data class VfxCurve(val keys: List = emptyList()) { + /** The value at [time]; flat before the first key and after the last, [fallback] when empty. */ + fun valueAt(time: Float, fallback: Float = 0f): Float { + if (keys.isEmpty()) return fallback + val first = keys.first() + if (keys.size == 1 || time <= first.time) return first.value + val last = keys.last() + if (time >= last.time) return last.value + + var index = 0 + while (index < keys.lastIndex && keys[index + 1].time <= time) index++ + val start = keys[index] + val end = keys[index + 1] + val span = end.time - start.time + if (span <= EPSILON) return end.value + + return when (start.interpolation) { + VfxInterpolation.CONSTANT -> start.value + VfxInterpolation.LINEAR -> start.value + (end.value - start.value) * ((time - start.time) / span) + VfxInterpolation.BEZIER -> bezier(start, end, span, time) + } + } + + private fun bezier(start: VfxKey, end: VfxKey, span: Float, time: Float): Float { + val outLength = start.outTime.coerceAtLeast(0f) + val inLength = (-end.inTime).coerceAtLeast(0f) + val total = outLength + inLength + val scale = if (total > span) span / total else 1f + + val p1 = start.value + start.outValue * scale + val p2 = end.value + end.inValue * scale + val x1 = start.time + outLength * scale + val x2 = end.time - inLength * scale + + return cubic(start.value, p1, p2, end.value, solve(start.time, x1, x2, end.time, time)) + } + + private fun solve(x0: Float, x1: Float, x2: Float, x3: Float, time: Float): Float { + var s = ((time - x0) / (x3 - x0)).coerceIn(0f, 1f) + repeat(NEWTON_STEPS) { + val error = cubic(x0, x1, x2, x3, s) - time + if (abs(error) <= EPSILON) return s + val slope = slope(x0, x1, x2, x3, s) + if (abs(slope) <= EPSILON) return@repeat + s = (s - error / slope).coerceIn(0f, 1f) + } + var low = 0f + var high = 1f + repeat(BISECTION_STEPS) { + s = (low + high) * 0.5f + if (cubic(x0, x1, x2, x3, s) < time) low = s else high = s + } + return s + } + + private fun cubic(a: Float, b: Float, c: Float, d: Float, s: Float): Float { + val inverse = 1f - s + return inverse * inverse * inverse * a + 3f * inverse * inverse * s * b + 3f * inverse * s * s * c + s * s * s * d + } + + private fun slope(a: Float, b: Float, c: Float, d: Float, s: Float): Float { + val inverse = 1f - s + return 3f * inverse * inverse * (b - a) + 6f * inverse * s * (c - b) + 3f * s * s * (d - c) + } + + companion object { + private const val EPSILON = 1.0e-5f + private const val NEWTON_STEPS = 8 + private const val BISECTION_STEPS = 24 + + /** A curve that holds [value] for its whole span. */ + fun flat(value: Float): VfxCurve = VfxCurve(listOf(VfxKey(0f, value), VfxKey(1f, value))) + + fun ramp(from: Float, to: Float): VfxCurve = VfxCurve(listOf(VfxKey(0f, from), VfxKey(1f, to))) + } +} + +/** A color as the file stores it. */ +@Serializable +data class VfxRgba(val r: Float = 1f, val g: Float = 1f, val b: Float = 1f, val a: Float = 1f) { + + companion object { + val WHITE = VfxRgba() + + fun of(color: Color) = VfxRgba(color.r, color.g, color.b, color.a) + } +} + +@Serializable +data class VfxGradientStop(val position: Float = 0f, val color: VfxRgba = VfxRgba.WHITE) + +/** Color over a normalized axis. Stops are kept sorted by the editor and sampled linearly. */ +@Serializable +data class VfxGradient(val stops: List = emptyList()) { + fun colorAt(position: Float, fallback: VfxRgba = VfxRgba.WHITE): VfxRgba { + if (stops.isEmpty()) return fallback + val first = stops.first() + if (stops.size == 1 || position <= first.position) return first.color + val last = stops.last() + if (position >= last.position) return last.color + + var index = 0 + while (index < stops.lastIndex && stops[index + 1].position <= position) index++ + val start = stops[index] + val end = stops[index + 1] + val span = end.position - start.position + if (span <= 1.0e-5f) return end.color + + val t = (position - start.position) / span + return VfxRgba( + start.color.r + (end.color.r - start.color.r) * t, + start.color.g + (end.color.g - start.color.g) * t, + start.color.b + (end.color.b - start.color.b) * t, + start.color.a + (end.color.a - start.color.a) * t, + ) + } + + companion object { + fun fade(color: VfxRgba = VfxRgba.WHITE) = VfxGradient( + listOf( + VfxGradientStop(0f, color), + VfxGradientStop(1f, color.copy(a = 0f)), + ) + ) + } +} + +/** Three [VfxValue]s that together make a vector: an offset, a velocity, a rotation, a size. */ +@Serializable +data class VfxVec3Value( + val x: VfxValue = VfxValue.ZERO, + val y: VfxValue = VfxValue.ZERO, + val z: VfxValue = VfxValue.ZERO, +) { + companion object { + val ZERO = VfxVec3Value() + val ONE = VfxVec3Value(VfxValue.ONE, VfxValue.ONE, VfxValue.ONE) + + fun of(x: Float, y: Float, z: Float) = VfxVec3Value(VfxValue.of(x), VfxValue.of(y), VfxValue.of(z)) + + fun all(value: Float) = of(value, value, value) + } +} + +/** How a color property is authored. */ +@Serializable +sealed interface VfxColorValue { + @Serializable + @SerialName("solid") + data class Solid(val color: VfxRgba = VfxRgba.WHITE) : VfxColorValue + + @Serializable + @SerialName("gradient") + data class Gradient( + val gradient: VfxGradient = VfxGradient.fade(), + val source: VfxTimeSource = VfxTimeSource.LIFETIME, + ) : VfxColorValue + + /** Per-channel values, for colors that follow something the other shapes cannot reach. */ + @Serializable + @SerialName("channels") + data class Channels( + val r: VfxValue = VfxValue.ONE, + val g: VfxValue = VfxValue.ONE, + val b: VfxValue = VfxValue.ONE, + val a: VfxValue = VfxValue.ONE, + ) : VfxColorValue + + companion object { + val WHITE = Solid() + } +} + +fun VfxValue.constantOr(fallback: Float): Float = when (this) { + is VfxValue.Const -> value + is VfxValue.Range -> (from + to) * 0.5f + is VfxValue.OverTime -> curve.valueAt(0f, fallback) * scale + is VfxValue.Expr -> fallback +} + +fun VfxVec3Value.constants(fallback: Float = 0f): FloatArray = + floatArrayOf(x.constantOr(fallback), y.constantOr(fallback), z.constantOr(fallback)) + +fun VfxColorValue.constants(): FloatArray = when (this) { + is VfxColorValue.Solid -> floatArrayOf(color.r, color.g, color.b, color.a) + is VfxColorValue.Gradient -> gradient.colorAt(0f).let { floatArrayOf(it.r, it.g, it.b, it.a) } + is VfxColorValue.Channels -> floatArrayOf(r.constantOr(1f), g.constantOr(1f), b.constantOr(1f), a.constantOr(1f)) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxCollisionSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxCollisionSpec.kt new file mode 100644 index 000000000..c6906bbe9 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxCollisionSpec.kt @@ -0,0 +1,31 @@ +package ru.hollowhorizon.hollowengine.common.vfx.modules + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +@SerialName("hollowengine:vfx/collision") +data class VfxCollisionSpec( + override val id: String = "collision", + override val enabled: Boolean = true, + val action: VfxCollisionAction = VfxCollisionAction.BOUNCE, + /** How much speed survives a bounce, 0 to 1. */ + val bounce: Float = 0.4f, + /** How much of the sideways speed is kept after touching a surface, 0 to 1. */ + val friction: Float = 0.8f, + /** The particle is treated as a sphere of this radius, in blocks. */ + val radius: Float = 0.05f, + /** Seconds taken off the remaining lifetime on every hit. */ + val lifetimeLoss: Float = 0f, +) : VfxModuleSpec() { + override fun withEnabled(enabled: Boolean) = copy(enabled = enabled) +} + +/** What happens when a particle meets a block. */ +@Serializable +enum class VfxCollisionAction { + DIE, BOUNCE, + + /** Keeps the movement along the surface and drops the part going into it. */ + SLIDE, +} \ No newline at end of file diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxForceSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxForceSpec.kt new file mode 100644 index 000000000..0923a0861 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxForceSpec.kt @@ -0,0 +1,54 @@ +package ru.hollowhorizon.hollowengine.common.vfx.modules + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.* + +/** + * A force acting on the particles of this emitter, placed in the emitter frame. + */ +@Serializable +@SerialName("hollowengine:vfx/force") +data class VfxForceSpec( + override val id: String = newVfxNodeId("force"), + override val enabled: Boolean = true, + val kind: VfxForceKind = VfxForceKind.DIRECTIONAL, + /** Blocks per second squared, or the fraction of speed lost per second for [VfxForceKind.DRAG]. */ + val strength: VfxValue = VfxValue.Const(1f), + val direction: Vec3f = Vec3f.Y_AXIS, + val center: Vec3f = Vec3f.ZERO, + /** Blocks; zero reaches everywhere. */ + val radius: VfxValue = VfxValue.ZERO, + /** Whether the push fades to nothing at the edge of [radius]. */ + val falloff: Boolean = true, +) : VfxModuleSpec() { + override fun withEnabled(enabled: Boolean) = copy(enabled = enabled) + + override fun expressions(): List = strength.sources() + radius.sources() + + override fun animatables() = listOf( + VfxModuleAnimatable("strength", "hollowengine.gui.vfx.strength", VfxAnimatableKind.FLOAT) { + floatArrayOf((it as VfxForceSpec).strength.constantOr(0f)) + }, + VfxModuleAnimatable("radius", "hollowengine.gui.vfx.radius", VfxAnimatableKind.FLOAT) { + floatArrayOf((it as VfxForceSpec).radius.constantOr(0f)) + }, + ) +} + +/** What a force does to the particles of its emitter. */ +@Serializable +enum class VfxForceKind { + /** Pushes along [VfxForceSpec.direction], i.e. wind. */ + DIRECTIONAL, + + /** Pushes away from [VfxForceSpec.center], or pulls in when the strength is negative. */ + POINT, + + /** Spins around [VfxForceSpec.direction] through [VfxForceSpec.center]. */ + VORTEX, + + /** Slows whatever is inside its radius. */ + DRAG, +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxModules.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxModules.kt new file mode 100644 index 000000000..59c1ee9fc --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxModules.kt @@ -0,0 +1,30 @@ +package ru.hollowhorizon.hollowengine.common.vfx.modules + +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatableKind + +/** + * One behavior attached to emitter. + */ +@Serializable +abstract class VfxModuleSpec { + abstract val id: String + abstract val enabled: Boolean + + abstract fun withEnabled(enabled: Boolean): VfxModuleSpec + + open fun expressions(): List = emptyList() + + /** + * The numbers of this module the timeline can drive, by field name. + */ + open fun animatables(): List = emptyList() +} + +/** One number of a module that a timeline track can drive. */ +class VfxModuleAnimatable( + val field: String, + val titleKey: String, + val kind: VfxAnimatableKind, + val read: (VfxModuleSpec) -> FloatArray, +) \ No newline at end of file diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxNoiseSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxNoiseSpec.kt new file mode 100644 index 000000000..8f3e10d3b --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxNoiseSpec.kt @@ -0,0 +1,39 @@ +package ru.hollowhorizon.hollowengine.common.vfx.modules + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatableKind +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import ru.hollowhorizon.hollowengine.common.vfx.constantOr +import ru.hollowhorizon.hollowengine.common.vfx.sources + +/** + * Smooth pseudo-random motion, the cheapest way to make smoke and magic look alive. + */ +@Serializable +@SerialName("hollowengine:vfx/noise") +data class VfxNoiseSpec( + override val id: String = "noise", + override val enabled: Boolean = true, + /** Blocks per second squared. */ + val strength: VfxValue = VfxValue.Const(1f), + /** Field cells per block: higher means finer, more chaotic motion. */ + val frequency: VfxValue = VfxValue.Const(0.5f), + /** How fast the field itself moves, in field units per second. */ + val scrollSpeed: Float = 0.25f, + /** Extra layers of finer detail. Each one doubles the cost. */ + val octaves: Int = 1, +) : VfxModuleSpec() { + override fun withEnabled(enabled: Boolean) = copy(enabled = enabled) + + override fun expressions(): List = strength.sources() + frequency.sources() + + override fun animatables() = listOf( + VfxModuleAnimatable("strength", "hollowengine.gui.vfx.strength", VfxAnimatableKind.FLOAT) { + floatArrayOf((it as VfxNoiseSpec).strength.constantOr(0f)) + }, + VfxModuleAnimatable("frequency", "hollowengine.gui.vfx.frequency", VfxAnimatableKind.FLOAT) { + floatArrayOf((it as VfxNoiseSpec).frequency.constantOr(0.5f)) + }, + ) +} \ No newline at end of file diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxUvAnimationSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxUvAnimationSpec.kt new file mode 100644 index 000000000..43dcbc5b6 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxUvAnimationSpec.kt @@ -0,0 +1,43 @@ +package ru.hollowhorizon.hollowengine.common.vfx.modules + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * Plays a flipbook, the material region cut into a grid of frames. + */ +@Serializable +@SerialName("hollowengine:vfx/uv_animation") +data class VfxUvAnimationSpec( + override val id: String = "uv_animation", + override val enabled: Boolean = true, + val columns: Int = 4, + val rows: Int = 4, + /** How many cells hold a frame, counted row by row; zero means every cell. */ + val frames: Int = 0, + val mode: VfxUvMode = VfxUvMode.OVER_LIFETIME, + val fps: Float = 12f, + /** How many times the sheet is walked over the lifetime; only for [VfxUvMode.OVER_LIFETIME]. */ + val cycles: Float = 1f, +) : VfxModuleSpec() { + override fun withEnabled(enabled: Boolean) = copy(enabled = enabled) + + val frameCount: Int + get() { + val cells = columns.coerceAtLeast(1) * rows.coerceAtLeast(1) + return if (frames <= 0) cells else frames.coerceAtMost(cells) + } +} + +/** How the frames of a sprite sheet are chosen. */ +@Serializable +enum class VfxUvMode { + /** Walks the sheet once across the particle lifetime. */ + OVER_LIFETIME, + + /** Walks the sheet at [VfxUvAnimationSpec.fps], looping. */ + FPS, + + /** One frame, picked when the particle is born and kept. */ + RANDOM_FRAME, +} \ No newline at end of file diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxVelocityOverLifetimeSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxVelocityOverLifetimeSpec.kt new file mode 100644 index 000000000..a6356f406 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/modules/VfxVelocityOverLifetimeSpec.kt @@ -0,0 +1,31 @@ +package ru.hollowhorizon.hollowengine.common.vfx.modules + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatableKind +import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value +import ru.hollowhorizon.hollowengine.common.vfx.constants +import ru.hollowhorizon.hollowengine.common.vfx.sources + +/** + * An extra velocity added while integrating, on top of the particle own. + */ +@Serializable +@SerialName("hollowengine:vfx/velocity_over_lifetime") +data class VfxVelocityOverLifetimeSpec( + override val id: String = "velocity_over_lifetime", + override val enabled: Boolean = true, + val velocity: VfxVec3Value = VfxVec3Value.ZERO, + val space: VfxSimulationSpace = VfxSimulationSpace.LOCAL, +) : VfxModuleSpec() { + override fun withEnabled(enabled: Boolean) = copy(enabled = enabled) + + override fun expressions(): List = velocity.sources() + + override fun animatables() = listOf( + VfxModuleAnimatable("velocity", "hollowengine.gui.vfx.velocity", VfxAnimatableKind.VEC3) { + (it as VfxVelocityOverLifetimeSpec).velocity.constants() + }, + ) +} \ No newline at end of file diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt index 9ba940a48..1be275391 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt @@ -9,15 +9,18 @@ import net.irisshaders.iris.pipeline.WorldRenderingPipeline import net.irisshaders.iris.shaderpack.loading.ProgramId import net.irisshaders.iris.shaderpack.properties.ShaderProperties import net.irisshaders.iris.uniforms.CapturedRenderingState +import net.minecraft.client.renderer.ShaderInstance import org.joml.Matrix4f import ru.hollowhorizon.hollowengine.client.models.internal.rendering.ModelInstancingBackend import ru.hollowhorizon.hollowengine.client.models.internal.rendering.PipelineRenderer import ru.hollowhorizon.hollowengine.client.utils.InstancingEntityInfo +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadRenderer import ru.hollowhorizon.hollowengine.common.utils.ModList import ru.hollowhorizon.hollowengine.fabric.internal.accessors.IrisRenderingPipelineAccessor import ru.hollowhorizon.hollowengine.fabric.internal.accessors.ProgramSourceAccessor import ru.hollowhorizon.hollowengine.fabric.internal.rendering.IrisInstancingBackend import ru.hollowhorizon.hollowengine.fabric.internal.rendering.IrisInstancingPrograms +import ru.hollowhorizon.hollowengine.fabric.internal.rendering.IrisParticlePrograms object IrisHelper { @JvmStatic @@ -68,6 +71,8 @@ object IrisHelper { fun instancingBackend(): ModelInstancingBackend = IrisInstancingBackend + fun particleShader(translucent: Boolean): ShaderInstance? = IrisParticlePrograms.shaderFor(translucent) + fun capturedEntityInfo(): InstancingEntityInfo = InstancingEntityInfo( entity = CapturedRenderingState.INSTANCE.currentRenderedEntity, blockEntity = CapturedRenderingState.INSTANCE.currentRenderedBlockEntity, @@ -77,6 +82,8 @@ object IrisHelper { @JvmStatic fun invalidateInstancingPrograms() { IrisInstancingPrograms.invalidate() + IrisParticlePrograms.invalidate() + VfxQuadRenderer.invalidate() PipelineRenderer.invalidateRuntimeInstancedBindings() } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt new file mode 100644 index 000000000..f8024fc17 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt @@ -0,0 +1,144 @@ +package ru.hollowhorizon.hollowengine.fabric.internal.rendering + +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import net.irisshaders.iris.gl.blending.AlphaTests +import net.irisshaders.iris.gl.state.FogMode +import net.irisshaders.iris.pipeline.IrisRenderingPipeline +import net.irisshaders.iris.shaderpack.loading.ProgramId +import net.irisshaders.iris.shaderpack.programs.ProgramFallbackResolver +import net.irisshaders.iris.shaderpack.programs.ProgramSource +import net.minecraft.client.renderer.ShaderInstance +import ru.hollowhorizon.hollowengine.LOGGER +import ru.hollowhorizon.hollowengine.fabric.internal.IrisHelper +import ru.hollowhorizon.hollowengine.fabric.internal.accessors.IrisRenderingPipelineAccessor +import ru.hollowhorizon.hollowengine.fabric.internal.accessors.ProgramSourceAccessor + +/** + * The shader pack's own particle programs, patched to read effect particles as instances. + */ +object IrisParticlePrograms { + private var pipeline: IrisRenderingPipeline? = null + private val programs = HashMap() + private val failures = HashSet() + private var counter = 0 + + fun shaderFor(translucent: Boolean): ShaderInstance? { + val current = IrisHelper.currentPipeline() as? IrisRenderingPipeline ?: return null + if (pipeline !== current) { + invalidate() + pipeline = current + } + + programs[translucent]?.let { return it } + if (translucent in failures) return null + + val created = create(current, translucent) + if (created == null) failures += translucent else programs[translucent] = created + return created + } + + fun invalidate() { + programs.clear() + failures.clear() + pipeline = null + } + + private fun create(pipeline: IrisRenderingPipeline, translucent: Boolean): ShaderInstance? { + val accessor = pipeline as? IrisRenderingPipelineAccessor ?: return null + val programId = if (translucent) ProgramId.ParticlesTrans else ProgramId.Particles + val source = ProgramFallbackResolver(accessor.programSet).resolve(programId).orElse(null) ?: return null + val vertex = source.vertexSource.orElse(null)?.let(IrisParticleShaderPatcher::patch) ?: return null + + return try { + accessor.`hollowengine$createShader`( + "hollowengine_vfx_particles_${if (translucent) "trans" else "solid"}_${counter++}", + recreate(source, vertex), + programId, + AlphaTests.ONE_TENTH_ALPHA, + DefaultVertexFormat.PARTICLE, + FogMode.PER_VERTEX, + false, + false, + false, + false, + false, + ) + } catch (t: Throwable) { + LOGGER.warn("HollowEngine Iris particles: failed to compile the {} program", programId, t) + null + } + } + + private fun recreate(source: ProgramSource, vertex: String): ProgramSource { + val accessor = source as ProgramSourceAccessor + return ProgramSource( + source.name + "_hollowengine_vfx", + vertex, + source.geometrySource.orElse(null), + source.tessControlSource.orElse(null), + source.tessEvalSource.orElse(null), + source.fragmentSource.orElse(null), + source.parent, + accessor.shaderPropertiesValue, + accessor.blendModeOverrideValue, + ) + } +} + +/** + * Rewrites a pack particle vertex shader to build its quad from instance data. + */ +object IrisParticleShaderPatcher { + private val versionPattern = Regex("#version\\s+(\\d+)([^\\n]*)") + private val extensionPattern = Regex("(?m)^\\s*#extension[^\\n]*$") + private val coreInputPattern = + Regex("(?m)^\\s*(in|attribute)\\s+\\w+\\s+(vaPosition|vaColor|vaUV0|vaUV1|vaUV2|vaNormal)\\s*;\\s*$") + + fun patch(source: String): String { + val match = versionPattern.find(source) ?: return source + val version = match.groupValues[1].toIntOrNull() ?: return source + val input = if (version >= 130) "in" else "attribute" + + val header = buildString { + appendLine() + appendLine("$input vec3 Position;") + appendLine("$input vec2 UV0;") + appendLine("$input vec3 InstanceCenter;") + appendLine("$input vec3 InstanceRight;") + appendLine("$input vec3 InstanceUp;") + appendLine("$input vec4 InstanceColor;") + appendLine("$input vec4 InstanceUv;") + appendLine("$input vec2 InstanceLight;") + appendLine("vec3 _he_Position() {") + appendLine(" return InstanceCenter + InstanceRight * Position.x + InstanceUp * Position.y;") + appendLine("}") + appendLine("vec2 _he_Uv() {") + appendLine(" return InstanceUv.xy + UV0 * InstanceUv.zw;") + appendLine("}") + } + + val body = coreInputPattern.replace(source, "") + val insertion = extensionPattern.findAll(body).lastOrNull()?.range?.last?.plus(1) + ?: (versionPattern.find(body)!!.range.last + 1) + var patched = body.substring(0, insertion) + header + body.substring(insertion) + + patched = patched.replace("ftransform()", "(gl_ModelViewProjectionMatrix * vec4(_he_Position(), 1.0))") + patched = replaceToken(patched, "gl_Vertex", "vec4(_he_Position(), 1.0)") + patched = replaceToken(patched, "gl_Color", "InstanceColor") + patched = replaceToken(patched, "gl_MultiTexCoord0", "vec4(_he_Uv(), 0.0, 1.0)") + patched = replaceToken(patched, "gl_MultiTexCoord1", "vec4(InstanceLight, 0.0, 1.0)") + patched = replaceToken(patched, "gl_MultiTexCoord2", "vec4(InstanceLight, 0.0, 1.0)") + patched = replaceToken(patched, "gl_Normal", "vec3(0.0, 0.0, 1.0)") + + patched = replaceToken(patched, "vaPosition", "_he_Position()") + patched = replaceToken(patched, "vaColor", "InstanceColor") + patched = replaceToken(patched, "vaUV0", "_he_Uv()") + patched = replaceToken(patched, "vaUV1", "ivec2(0, 10)") + patched = replaceToken(patched, "vaUV2", "ivec2(InstanceLight)") + patched = replaceToken(patched, "vaNormal", "vec3(0.0, 0.0, 1.0)") + return patched + } + + private fun replaceToken(source: String, token: String, replacement: String): String = + Regex("(? + +uniform sampler2D Sampler0; + +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform vec4 FogColor; +uniform float AlphaCutoff; + +in vec4 vertexColor; +in vec2 texCoord0; +in float vertexDistance; +flat in int blendMode; + +out vec4 fragColor; + +void main() { + vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator; + + if (blendMode == 2) { + if (color.a < 0.5) discard; + color.a = 1.0; + } else if (color.a < AlphaCutoff) { + discard; + } + + float strength = color.a * linear_fog_fade(vertexDistance, FogStart, FogEnd); + + if (blendMode == 3) { + fragColor = vec4(mix(vec3(1.0), color.rgb, strength), 1.0); + } else if (blendMode == 1) { + fragColor = vec4(color.rgb * strength, 0.0); + } else { + fragColor = vec4(color.rgb * strength, strength); + } +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json new file mode 100644 index 000000000..0ce58816d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json @@ -0,0 +1,34 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "hollowengine:vfx_particle", + "fragment": "hollowengine:vfx_particle", + "attributes": [ + "Position", + "UV0", + "InstanceCenter", + "InstanceRight", + "InstanceUp", + "InstanceColor", + "InstanceUv", + "InstanceLight", + "InstanceBlend" + ], + "samplers": [ + { "name": "Sampler0" }, + { "name": "Sampler2" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, + { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }, + { "name": "AlphaCutoff", "type": "float", "count": 1, "values": [ 0.01 ] } + ] +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh new file mode 100644 index 000000000..caa221220 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh @@ -0,0 +1,41 @@ +#version 150 + +in vec3 Position; +in vec2 UV0; + +in vec3 InstanceCenter; +in vec3 InstanceRight; +in vec3 InstanceUp; +in vec4 InstanceColor; +in vec4 InstanceUv; +in vec2 InstanceLight; +in float InstanceBlend; + +uniform sampler2D Sampler2; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform int FogShape; + +out vec4 vertexColor; +out vec2 texCoord0; +out float vertexDistance; +flat out int blendMode; + +float view_fog_distance(vec3 viewPos, int fogShape) { + if (fogShape == 0) { + return length(viewPos); + } + return max(length(viewPos.xz), abs(viewPos.y)); +} + +void main() { + vec3 position = InstanceCenter + InstanceRight * Position.x + InstanceUp * Position.y; + + vec4 viewPos = ModelViewMat * vec4(position, 1.0); + gl_Position = ProjMat * viewPos; + vertexDistance = view_fog_distance(viewPos.xyz, FogShape); + vertexColor = InstanceColor * texelFetch(Sampler2, ivec2(InstanceLight) / 16, 0); + texCoord0 = InstanceUv.xy + UV0 * InstanceUv.zw; + blendMode = int(InstanceBlend + 0.5); +} diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/curve.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/curve.svg new file mode 100644 index 000000000..bc734213a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/curve.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg new file mode 100644 index 000000000..b15e5404f --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyframe.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyframe.svg new file mode 100644 index 000000000..51589cca7 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyframe.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/range.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/range.svg new file mode 100644 index 000000000..f8c93a426 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/range.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss index 1530b0fce..bdd86ef17 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss @@ -45,7 +45,7 @@ .insp-body { size: 100% fit; - gap: 8px; + gap: 5px; } .insp-empty { @@ -77,7 +77,7 @@ .insp-section-body { size: 100% fit; - gap: 6px; + gap: 3px; } .insp-section.boxed { @@ -170,6 +170,60 @@ .insp-input.numeric { text-align: right; } +/* ---- inline fields ---- */ + +.insp-inline-label { + foreground: #8B93A5; + font-size: 9px; + wrap: false; + text-overflow: dots; +} + +.insp-input.insp-inline-input { + min-height: 16px; + padding: 2px 4px; +} + +.insp-icon-button.insp-inline-icon { + size: 13px 13px; +} + +/* ---- effect editor ---- */ + +.vfx-popup { + padding: 8px; + gap: 6px; + background: #24272E; + border: 1px #5F6677; + border-radius: 5px; + shadow: 1px 1px 3px 0px rgba(0, 0, 0, 0.42); +} + +.vfx-driven { + background: #1B1A17; + border: 1px #5A4322; + foreground: #9A8F7C; +} + +.vfx-curve-dialog { + padding: 10px; +} + +.vfx-gizmo-readout { + padding: 1px 4px; + background: rgba(12, 13, 15, 0.8); + border-radius: 3px; + foreground: #E8E2D0; + font-size: 9px; +} + +.vfx-detail { + size: 100% fit; + gap: 3px; + padding: 4px 0px 4px 8px; + border-left: 1px #31343D; +} + .insp-check-row { size: 100% fit; min-height: 20px; diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx new file mode 100644 index 000000000..4ebfb3658 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx @@ -0,0 +1,271 @@ +{ + "nodes": [ + { + "type": "hollowengine:vfx/quad_emitter", + "id": "flame", + "name": "Flame", + "transform": { + "position": [ + 0.0, + 0.1, + 0.0 + ] + }, + "emission": { + "rate": { + "type": "const", + "value": 45.0 + }, + "duration": 0.0, + "maxParticles": 160 + }, + "shape": { + "kind": "CONE", + "radius": { + "type": "const", + "value": 0.08 + }, + "angle": { + "type": "const", + "value": 14.0 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 0.35, + "to": 0.75 + }, + "speed": { + "type": "range", + "from": 0.8, + "to": 1.6 + } + }, + "appearance": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.13 + }, + { + "time": 0.25, + "value": 0.22 + }, + { + "time": 1.0 + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.78, + "b": 0.3 + } + }, + { + "position": 0.45, + "color": { + "g": 0.43, + "b": 0.035, + "a": 0.85 + } + }, + { + "position": 1.0, + "color": { + "r": 0.35, + "g": 0.08, + "b": 0.02, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": -1.2 + }, + "drag": { + "type": "const", + "value": 0.8 + } + }, + "modules": [ + { + "type": "hollowengine:vfx/force", + "id": "updraft", + "kind": "VORTEX", + "strength": { + "type": "const", + "value": 1.5 + }, + "radius": { + "type": "const", + "value": 1.5 + } + }, + { + "type": "hollowengine:vfx/noise", + "strength": { + "type": "const", + "value": 0.7 + }, + "frequency": { + "type": "const", + "value": 1.5 + }, + "scrollSpeed": 0.8 + } + ], + "material": { + "blend": "ADDITIVE" + } + }, + { + "type": "hollowengine:vfx/quad_emitter", + "id": "smoke", + "name": "Smoke", + "transform": { + "position": [ + 0.0, + 0.45, + 0.0 + ] + }, + "emission": { + "rate": { + "type": "const", + "value": 7.0 + }, + "duration": 0.0, + "maxParticles": 48 + }, + "shape": { + "kind": "SPHERE", + "radius": { + "type": "const", + "value": 0.06 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.2, + "to": 2.2 + }, + "speed": { + "type": "range", + "from": 0.2, + "to": 0.5 + } + }, + "appearance": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.18 + }, + { + "time": 1.0, + "value": 0.56 + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360 + p.age * 20" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.32, + "g": 0.3, + "b": 0.29, + "a": 0.55 + } + }, + { + "position": 1.0, + "color": { + "r": 0.32, + "g": 0.3, + "b": 0.29, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": -0.4 + }, + "drag": { + "type": "const", + "value": 0.4 + } + }, + "modules": [ + { + "type": "hollowengine:vfx/noise", + "strength": { + "type": "const", + "value": 0.35 + }, + "frequency": { + "type": "const", + "value": 0.6 + }, + "scrollSpeed": 0.3 + } + ], + "material": { + "lighting": "WORLD" + } + } + ], + "timeline": { + "duration": 4.0 + } +} \ No newline at end of file diff --git a/runtime/src/test/kotlin/VfxFormatTests.kt b/runtime/src/test/kotlin/VfxFormatTests.kt new file mode 100644 index 000000000..a9bece0b9 --- /dev/null +++ b/runtime/src/test/kotlin/VfxFormatTests.kt @@ -0,0 +1,156 @@ +import org.junit.jupiter.api.Test +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAppearance +import ru.hollowhorizon.hollowengine.common.vfx.VfxBlend +import ru.hollowhorizon.hollowengine.common.vfx.VfxColorValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxCurve +import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmission +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceKind +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxFormat +import ru.hollowhorizon.hollowengine.common.vfx.VfxGradient +import ru.hollowhorizon.hollowengine.common.vfx.VfxGradientStop +import ru.hollowhorizon.hollowengine.common.vfx.VfxKey +import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxNoiseSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxQuadEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxRgba +import ru.hollowhorizon.hollowengine.common.vfx.VfxShape +import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind +import ru.hollowhorizon.hollowengine.common.vfx.VfxSpawn +import ru.hollowhorizon.hollowengine.common.vfx.VfxTimelineSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxTrack +import ru.hollowhorizon.hollowengine.common.vfx.VfxTrackCurve +import ru.hollowhorizon.hollowengine.common.vfx.VfxTransform +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUvRect +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value +import kotlin.test.assertEquals +import kotlin.test.assertIs +import kotlin.test.assertTrue + +/** + * The `.vfx` format has to survive a round trip. + * + * Effects are written by an editor that rewrites the whole file, so anything the reader drops is + * work silently thrown away. That makes the round trip the one test worth keeping here: it covers + * the polymorphic node and module registries, the sealed value shapes and the timeline at once. + */ +class VfxFormatTests { + @Test + fun `an effect survives a round trip`() { + val effect = sample() + + val text = VfxFormat.write(effect) + val read = VfxFormat.read(text) + + assertEquals(effect, read) + } + + @Test + fun `a node keeps its modules and their kinds`() { + val read = VfxFormat.read(VfxFormat.write(sample())) + val emitter = assertIs(read.nodes.first()) + + assertEquals(3, emitter.modules.size) + val swirl = assertIs(emitter.modules[0]) + assertIs(emitter.modules[1]) + assertIs(emitter.modules[2]) + assertEquals(VfxForceKind.VORTEX, swirl.kind) + } + + @Test + fun `a child node survives its parent`() { + val read = VfxFormat.read(VfxFormat.write(sample())) + val child = read.nodes.first().children.single() + + assertIs(child) + assertEquals("sparks", child.id) + } + + @Test + fun `an empty file reads as an empty effect`() { + assertEquals(VfxEffect.EMPTY, VfxFormat.read("")) + } + + @Test + fun `the shipped example reads`() { + val text = javaClass.classLoader.getResource(EXAMPLE_PATH)?.readText() + ?: error("The example effect is missing from the resources: $EXAMPLE_PATH") + + val effect = VfxFormat.read(text) + + assertTrue(effect.nodes.isNotEmpty(), "The example effect has no nodes") + assertTrue(effect.expressions().isEmpty() || effect.expressions().all { it.isNotBlank() }) + assertEquals(text.trim(), VfxFormat.write(effect).trim(), "The example is not in canonical form") + } + + private fun sample() = VfxEffect( + nodes = listOf( + VfxQuadEmitterSpec( + id = "flame", + name = "Flame", + transform = VfxTransform(position = Vec3f(0f, 0.25f, 0f)), + emission = VfxEmission(rate = VfxValue.Const(40f), burst = 3, duration = 0f), + shape = VfxShape( + kind = VfxShapeKind.CONE, + radius = VfxValue.Expr("0.1 + e.age * 0.05"), + angle = VfxValue.Const(12f), + ), + spawn = VfxSpawn( + lifetime = VfxValue.Range(0.4f, 0.9f), + speed = VfxValue.Range(0.5f, 1.2f), + ), + appearance = VfxAppearance( + size = VfxVec3Value( + VfxValue.OverTime(VfxCurve(listOf(VfxKey(0f, 0.2f), VfxKey(1f, 0f)))), + VfxValue.ONE, + VfxValue.ONE, + ), + color = VfxColorValue.Gradient( + VfxGradient( + listOf( + VfxGradientStop(0f, VfxRgba(1f, 1f, 1f, 1f)), + VfxGradientStop(1f, VfxRgba(1f, 0.2f, 0f, 0f)), + ) + ) + ), + ), + material = VfxMaterialSpec(blend = VfxBlend.ADDITIVE, uv = VfxUvRect(0f, 0f, 0.5f, 0.5f)), + modules = listOf( + VfxForceSpec(id = "swirl", kind = VfxForceKind.VORTEX, strength = VfxValue.Expr("p.progress * 2")), + VfxForceSpec(id = "wind", direction = Vec3f(1f, 0f, 0f)), + VfxUvAnimationSpec(columns = 2, rows = 2), + ), + children = listOf(VfxMeshEmitterSpec(id = "sparks", name = "Sparks")), + ), + VfxQuadEmitterSpec( + id = "smoke", + name = "Smoke", + modules = listOf(VfxNoiseSpec(strength = VfxValue.Const(0.5f))), + ), + ), + timeline = VfxTimelineSpec( + duration = 3f, + tracks = listOf( + VfxTrack( + node = "smoke", + property = "enabled", + curves = listOf(VfxTrackCurve(keys = listOf(VfxKey(0f, 0f), VfxKey(1f, 1f)))), + ), + VfxTrack( + node = "flame", + property = "modules.swirl.strength", + curves = listOf(VfxTrackCurve(keys = listOf(VfxKey(0f, 0f), VfxKey(2f, 3f)))), + ), + ), + ), + ) + + private companion object { + const val EXAMPLE_PATH = "assets/hollowengine/vfx/example.vfx" + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt index 9f9967b95..479b650e4 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt @@ -76,6 +76,7 @@ class HollowIdeFileTypeRegistryTest { soundsEditor = {}, animatorEditor = {}, rigEditor = {}, + vfxEditor = {}, textEditor = {}, ) } @@ -86,6 +87,7 @@ class HollowIdeFileTypeRegistryTest { assertEquals("sounds", registry.find("assets/demo/sounds.json", "{}".toByteArray())?.id) assertEquals("animator", registry.find("assets/demo/models/player.animator", byteArrayOf())?.id) assertEquals("rig", registry.find("assets/demo/models/player.glb.rig", byteArrayOf())?.id) + assertEquals("vfx", registry.find("assets/demo/vfx/flame.vfx", byteArrayOf())?.id) assertEquals("text", registry.find("assets/demo/other.json", "{}".toByteArray())?.id) assertEquals("text", registry.find("scripts/example.kts", "println(1)".toByteArray())?.id) assertNull(registry.find("unknown.bin", ByteArray(64) { 0 })) diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/timeline/ui/HollowTimelinePointerTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/timeline/ui/HollowTimelinePointerTest.kt index 85eba10a0..7b91e0dd0 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/timeline/ui/HollowTimelinePointerTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/timeline/ui/HollowTimelinePointerTest.kt @@ -85,7 +85,7 @@ class HollowTimelinePointerTest { AnimProperty("camera.fov", "FOV", FloatPropertyType("FOV"), 70f), ) listOf(translation, fov).forEach { property -> - property.layers.first().channels.forEach { curve -> + property.curves.forEach { curve -> listOf(0.5f, 1.5f, 2.5f).forEach { time -> curve.keyframes += Keyframe(time, time) } } } @@ -121,7 +121,7 @@ class HollowTimelinePointerTest { listOf("Test"), AnimProperty("test.value", "Value", FloatPropertyType(), 0f), ) - val curve = property.layers.first().channels.first() + val curve = property.curves.first() times.forEachIndexed { index, time -> curve.keyframes += Keyframe(time, index.toFloat()) } controller.selectedKeyframes.clear() return controller to curve diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt index 47cd003c5..422c08a7e 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt @@ -98,4 +98,60 @@ class DockingStateTest { val editorSplit = assertNotNull(preservedRoot.findSplitSeparating("project", "editor")) assertEquals(0.28f, editorSplit.fraction) } + + @Test + fun `the two halves of a stripe keep a window open each`() { + val state = DockingState() + state.open(DockItem("project", "Project", pinnable = true)) + state.open(DockItem("console", "Console", pinnable = true)) + state.pin("project", DockSide.LEFT) + state.pin("console", DockSide.LEFT, DockStripeGroup.BOTTOM) + + assertEquals("project", state.expandedOn(DockSide.LEFT)?.item?.id) + assertEquals("console", state.expandedIn(DockAnchor(DockSide.LEFT, DockStripeGroup.BOTTOM))?.item?.id) + + state.togglePinned("project") + assertNull(state.expandedOn(DockSide.LEFT)) + assertNotNull(state.expandedIn(DockAnchor(DockSide.LEFT, DockStripeGroup.BOTTOM)), "the bottom half is its own") + } + + @Test + fun `a click into an open parked window gives it the keyboard`() { + val state = DockingState() + state.open(DockItem("editor", "Editor")) + state.open(DockItem("timeline", "Timeline", pinnable = true)) + state.pin("timeline", DockSide.LEFT, DockStripeGroup.BOTTOM) + state.focus("editor") + + assertTrue(state.focusContent("${PinnedContentPrefix}timeline-content")) + assertEquals("timeline", state.focusedItemId) + } + + @Test + fun `a window dragged to the other half stays open there`() { + val state = DockingState() + state.open(DockItem("project", "Project", pinnable = true)) + state.pin("project", DockSide.RIGHT) + + assertTrue(state.movePinned("project", DockAnchor(DockSide.RIGHT, DockStripeGroup.BOTTOM), 0)) + assertNull(state.expandedOn(DockSide.RIGHT)) + assertEquals("project", state.expandedIn(DockAnchor(DockSide.RIGHT, DockStripeGroup.BOTTOM))?.item?.id) + } + + @Test + fun `a dragged tool window can be parked on a stripe and a stripe button can float again`() { + val state = DockingState() + state.open(DockItem("editor", "Editor")) + state.open(DockItem("project", "Project", pinnable = true)) + assertNotNull(state.beginDraggingTab("project", 10f, 10f)) + + assertTrue(state.pinDraggedWindow(DockAnchor(DockSide.LEFT, DockStripeGroup.BOTTOM))) + assertTrue(state.floatingWindows.isEmpty()) + assertEquals(DockStripeGroup.BOTTOM, state.pinnedItem("project")?.group) + + assertNotNull(state.undockPinned("project", 0f, 0f, "dock-stripe-button-project")) + assertFalse(state.isPinned("project")) + assertTrue(state.isFloating("project")) + assertEquals("project", state.floatingWindows.single().stack.items.single().id) + } } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiTextClipTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiTextClipTest.kt index e41af3f74..bb902b54c 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiTextClipTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiTextClipTest.kt @@ -18,6 +18,7 @@ import ru.hollowhorizon.hollowengine.client.ui.layout.UiLayoutPipeline import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollState import ru.hollowhorizon.hollowengine.client.ui.style.UiModifierResolver import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow +import ru.hollowhorizon.hollowengine.client.ui.text.UiTextRun import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -66,4 +67,32 @@ class UiTextClipTest { val displayed = UiTextOverflowResolver.ellipsizeLine(command, command.layout.lines.single()) assertTrue(displayed.text.endsWith("..."), "overflow result was '${displayed.text}'") } + + @Test + fun `shortened text keeps the spaces between its words`() { + val span = SpanNode("one two three four five six") + val text = BoxNode( + measurePolicy = UiMeasurePolicies.InlineFlow, + modifiers = listOf( + Modifier.size(70.px, 12.px).fontFamily(TestFontFamily).fontSize(10f) + .textWrap(false).textOverflow(UiTextOverflow.DOTS), + ), + ).also { node -> + node.children += span + span.layoutState.attachTo(node) + } + val root = BoxNode(measurePolicy = UiMeasurePolicies.Column).also { node -> + node.children += text + text.layoutState.attachTo(node) + } + UiModifierResolver().resolve(root, animate = false) + val layout = UiLayoutPipeline().compute(root, 100f, 100f, UiScrollState()) + val command = UiCommandRenderer().collect(root, layout).filterIsInstance().single() + + val displayed = UiTextOverflowResolver.ellipsizeLine(command, command.layout.lines.single()) + assertTrue(displayed.text.startsWith("one two"), "overflow result was '${displayed.text}'") + val runs = displayed.fragments.filterIsInstance() + assertTrue(runs.zipWithNext().all { (left, right) -> right.x > left.x + left.width - 0.01f }) + assertTrue(runs[1].x > runs[0].x + runs[0].width + 0.5f, "the words were drawn back to back") + } } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneCurveTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneCurveTest.kt index d9fcb8901..efbb8a473 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneCurveTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneCurveTest.kt @@ -225,7 +225,7 @@ class CutsceneCurveTest { listOf("Test"), AnimProperty("test.value", "Value", FloatPropertyType(), 0f), ) - val curve = property.layers.first().channels.first() + val curve = property.curves.first() curve.keyframes.addAll(keys) curve.sort() return curve diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneMigrationTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneMigrationTest.kt index 7b2b9ebcc..1a20b50a1 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneMigrationTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneMigrationTest.kt @@ -23,7 +23,7 @@ class CutsceneMigrationTest { val playback = CutscenePlaybackController().apply { setupTracks(migrated) } assertEquals(120f, migrated.origin.x, 0.001f) - assertEquals(0f, playback.translation.layers.first().channels[0].keyframes.first().value, 0.001f) + assertEquals(0f, playback.translation.curves[0].keyframes.first().value, 0.001f) playback.seek(0f) assertEquals(120f, playback.currentPose.position.x, 0.001f) @@ -37,7 +37,7 @@ class CutsceneMigrationTest { val migrated = CutsceneMigrations.convert(legacyCutscene(Vec3f(1f, 2f, 3f)), version = 1) val playback = CutscenePlaybackController().apply { setupTracks(migrated) } - val channels = playback.translation.layers.first().channels + val channels = playback.translation.curves assertEquals(3, channels.size) assertTrue(channels.all { it.keyframes.size == 1 }) } @@ -48,7 +48,7 @@ class CutsceneMigrationTest { val migrated = CutsceneMigrations.convert(legacy, version = 1) val playback = CutscenePlaybackController().apply { setupTracks(migrated) } - val x = playback.translation.layers.first().channels[0] + val x = playback.translation.curves[0] assertEquals(5f, x.valueAt(1f, 0f), 0.2f) assertTrue(x.valueAt(0.4f, 0f) < 1.5f, "an ease-in should still be crawling at 20% of the way") @@ -57,14 +57,14 @@ class CutsceneMigrationTest { @Test fun `a hidden channel is still hidden after a round trip`() { val playback = CutscenePlaybackController() - val channels = playback.translation.layers.first().channels + val channels = playback.translation.curves channels[0].keyframes += Keyframe(0f, 5f) channels[1].keyframes += Keyframe(0f, 7f) channels[1].isVisible = false val saved = playback.toData("Hidden") val reloaded = CutscenePlaybackController().apply { setupTracks(saved) } - val loaded = reloaded.translation.layers.first().channels + val loaded = reloaded.translation.curves assertTrue(loaded[0].isVisible) assertTrue(!loaded[1].isVisible, "the channel comes back hidden") diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneTest.kt index 15085b571..3ab0b92d2 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/cutscene/CutsceneTest.kt @@ -3,7 +3,6 @@ package ru.hollowhorizon.hollowengine.cutscene import org.junit.jupiter.api.Test import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimProperty -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.BlendMode import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ChannelBounds import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ChannelCurve import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.FloatPropertyType @@ -76,9 +75,9 @@ class CutsceneTest { listOf("Camera"), AnimProperty("camera.translation", "Translation", TranslationPropertyType(), Vec3f.ZERO), ) - val layer = property.layers.first() - val x = layer.channels[0] - val y = layer.channels[1] + val layer = property + val x = layer.curves[0] + val y = layer.curves[1] x.keyframes += Keyframe(1f, 5f) y.keyframes += Keyframe(1f, 7f) @@ -90,63 +89,17 @@ class CutsceneTest { } @Test - fun `a hidden layer stops contributing to the value`() { - val controller = TimelineController() - val property = controller.addProperty( - listOf("Camera"), - AnimProperty("camera.fov", "FOV", FloatPropertyType("FOV"), 70f), - ) - property.layers.first().channels.first().keyframes += Keyframe(0f, 90f) - val shake = property.addLayer("Shake", BlendMode.ADD) - shake.channels.first().keyframes += Keyframe(0f, 10f) - - assertEquals(100f, property.valueAt(0f), 0.001f) - - shake.isVisible = false - assertEquals(90f, property.valueAt(0f), 0.001f) - } - - @Test - fun `layer weight scales what a layer contributes`() { - val controller = TimelineController() - val property = controller.addProperty( - listOf("Camera"), - AnimProperty("camera.fov", "FOV", FloatPropertyType("FOV"), 70f), - ) - property.layers.first().channels.first().keyframes += Keyframe(0f, 90f) - val shake = property.addLayer("Shake", BlendMode.ADD) - shake.channels.first().keyframes += Keyframe(0f, 10f) - shake.weight = 0.5f - - assertEquals(95f, property.valueAt(0f), 0.001f) - } - - @Test - fun `what layers add up to is still held to the bounds`() { - val controller = TimelineController() - val property = controller.addProperty( - listOf("Camera"), - AnimProperty("camera.fov", "FOV", FloatPropertyType("FOV", ChannelBounds(maximum = 110f)), 70f), - ) - controller.setKey(property.layers.first().channels.first(), 0f, 100f) - val shake = property.addLayer("Shake", BlendMode.ADD) - controller.setKey(shake.channels.first(), 0f, 40f) - - assertEquals(110f, property.valueAt(0f), 0.001f) - } - - @Test - fun `a locked layer refuses new keys`() { + fun `a locked property refuses new keys`() { val controller = TimelineController().apply { workAreaEnd = 10f } val property = controller.addProperty( listOf("Camera"), AnimProperty("camera.fov", "FOV", FloatPropertyType("FOV"), 70f), ) - val layer = property.layers.first() + val layer = property layer.isLocked = true assertTrue(controller.addKeyframes(layer, 1f).isEmpty()) - assertTrue(layer.channels.first().keyframes.isEmpty()) + assertTrue(layer.curves.first().keyframes.isEmpty()) } @Test @@ -167,14 +120,14 @@ class CutsceneTest { listOf("Camera"), AnimProperty("camera.translation", "Translation", TranslationPropertyType(), Vec3f.ZERO), ) - val layer = property.layers.first() - layer.channels.forEach { it.keyframes += Keyframe(1f, 0f) } - controller.select(listOf(layer.channels[0].keyframes.first()), additive = false) + val layer = property + layer.curves.forEach { it.keyframes += Keyframe(1f, 0f) } + controller.select(listOf(layer.curves[0].keyframes.first()), additive = false) controller.deleteSelectedKeyframes() - assertTrue(layer.channels[0].keyframes.isEmpty()) - assertFalse(layer.channels[1].keyframes.isEmpty()) + assertTrue(layer.curves[0].keyframes.isEmpty()) + assertFalse(layer.curves[1].keyframes.isEmpty()) } @Test @@ -189,7 +142,7 @@ class CutsceneTest { CameraRig.DEFAULT_FOV, ), ) - val key = controller.setKey(property.layers.first().channels.first(), 0f, -40f) + val key = controller.setKey(property.curves.first(), 0f, -40f) assertEquals(1f, key.value, 0.001f, "an FOV below one is not a shot") assertEquals(1f, property.valueAt(0f), 0.001f) @@ -203,17 +156,17 @@ class CutsceneTest { listOf("Camera"), AnimProperty("camera.translation", "Translation", TranslationPropertyType(), Vec3f.ZERO), ) - val layer = property.layers.first() - layer.channels[0].keyframes += Keyframe(1f, 3f) - layer.channels[1].keyframes += Keyframe(2f, 7f) - controller.select(layer.channels.flatMap { it.keyframes }, additive = false) + val layer = property + layer.curves[0].keyframes += Keyframe(1f, 3f) + layer.curves[1].keyframes += Keyframe(2f, 7f) + controller.select(layer.curves.flatMap { it.keyframes }, additive = false) controller.copySelectedKeyframes() controller.pasteKeyframes(5f) - assertEquals(listOf(1f, 5f), layer.channels[0].keyframes.map { it.time }) - assertEquals(listOf(2f, 6f), layer.channels[1].keyframes.map { it.time }, "spacing survives the paste") - assertEquals(7f, layer.channels[1].keyframes.last().value, 0.001f) + assertEquals(listOf(1f, 5f), layer.curves[0].keyframes.map { it.time }) + assertEquals(listOf(2f, 6f), layer.curves[1].keyframes.map { it.time }, "spacing survives the paste") + assertEquals(7f, layer.curves[1].keyframes.last().value, 0.001f) assertEquals(2, controller.selectedKeyframes.size, "the copies are what stays selected") } @@ -261,13 +214,13 @@ class CutsceneTest { listOf("Camera"), AnimProperty("camera.translation", "Translation", TranslationPropertyType(), Vec3f.ZERO), ) - val layer = property.layers.first() - val x = layer.channels[0] + val layer = property + val x = layer.curves[0] x.keyframes += Keyframe(0f, 5f) controller.focusCurves(listOf(x), additive = false) assertTrue(controller.isFocused(x)) - assertFalse(controller.isFocused(layer.channels[1])) + assertFalse(controller.isFocused(layer.curves[1])) assertEquals(5f, property.valueAt(0f).x, 0.001f, "focus is about the graph, not the result") controller.focusCurves(listOf(x), additive = false) @@ -281,7 +234,7 @@ class CutsceneTest { listOf("Camera"), AnimProperty("camera.translation", "Translation", TranslationPropertyType(), Vec3f.ZERO), ) - val stack = property.layers.first().channels.map { curve -> + val stack = property.curves.map { curve -> Keyframe(1f, 0f).also { curve.keyframes += it } } val pressed = stack.first() @@ -306,7 +259,7 @@ class CutsceneTest { listOf("Camera"), AnimProperty("camera.translation", "Translation", TranslationPropertyType(), Vec3f.ZERO), ) - val stack = property.layers.first().channels.map { curve -> + val stack = property.curves.map { curve -> Keyframe(1f, 0f).also { curve.keyframes += it } } controller.select(stack, additive = false) @@ -316,53 +269,10 @@ class CutsceneTest { assertEquals(3, controller.selectedKeyframes.size) } - @Test - fun `undo brings a deleted layer back with its keys`() { - val controller = TimelineController().apply { workAreaEnd = 10f } - val property = controller.addProperty( - listOf("Camera"), - AnimProperty("camera.fov", "FOV", FloatPropertyType("FOV"), 70f), - ) - val base = property.layers.first() - controller.setKey(base.channels.first(), 0f, 90f) - val shake = property.addLayer("Shake", BlendMode.ADD) - controller.setKey(shake.channels.first(), 0f, 10f) - - controller.edit("Delete layer") { property.layers.remove(shake) } - assertEquals(1, property.layers.size) - - controller.undo() - - assertEquals(2, property.layers.size) - assertTrue(property.layers[1] === shake, "the layer comes back as itself, not as a copy") - assertEquals(10f, shake.channels.first().keyframes.first().value, 0.001f) - assertEquals(100f, property.valueAt(0f), 0.001f) - } - - @Test - fun `deleting a middle layer leaves the others with their own keys`() { - val controller = TimelineController().apply { workAreaEnd = 10f } - val property = controller.addProperty( - listOf("Camera"), - AnimProperty("camera.fov", "FOV", FloatPropertyType("FOV"), 0f), - ) - val first = property.layers.first() - controller.setKey(first.channels.first(), 0f, 1f) - val middle = property.addLayer("Middle", BlendMode.ADD) - controller.setKey(middle.channels.first(), 0f, 2f) - val last = property.addLayer("Last", BlendMode.ADD) - controller.setKey(last.channels.first(), 0f, 4f) - - controller.edit("Delete layer") { property.layers.remove(middle) } - - assertEquals(listOf(1f, 4f), property.layers.map { it.channels.first().keyframes.first().value }) - assertEquals(5f, property.valueAt(0f), 0.001f, "the survivors keep their own keys") - } - @Test fun `weather keys are discrete even if serialized interpolation says bezier`() { val playback = CutscenePlaybackController() - val curve = playback.weather.layers.first().channels.first() + val curve = playback.weather.curves.first() val clear = playback.timeline.setKey(curve, 0f, CutsceneWeather.CLEAR.value) playback.timeline.setKey(curve, 10f, CutsceneWeather.THUNDER.value) clear.interpolation = KeyInterpolation.BEZIER @@ -374,8 +284,8 @@ class CutsceneTest { @Test fun `environment tracks survive a cutscene round trip`() { val playback = CutscenePlaybackController() - val timeCurve = playback.timeOfDay.layers.first().channels.first() - val weatherCurve = playback.weather.layers.first().channels.first() + val timeCurve = playback.timeOfDay.curves.first() + val weatherCurve = playback.weather.curves.first() playback.timeline.setKey(timeCurve, 0f, 6_000f).interpolation = KeyInterpolation.LINEAR playback.timeline.setKey(timeCurve, 10f, 18_000f) playback.timeline.setKey(weatherCurve, 0f, CutsceneWeather.CLEAR.value) @@ -421,6 +331,6 @@ class CutsceneTest { listOf("Test"), AnimProperty("test.value", "Value", FloatPropertyType(), 0f), ) - return property.layers.first().channels.first() + return property.curves.first() } } From def24a9d5c4f02c99c7bc013035138bb3a77c04b Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Thu, 24 Sep 2026 18:16:29 +0300 Subject: [PATCH 02/25] Refine IDE docking and console panels This change adds split side-panel docking, draggable stripe/window reordering, preview overlays, and a refreshed IDE status bar. It also moves the bottom tool window to a Problems-focused console page, adds hover-aware scrollbar styling, supports dashed borders, and updates editor/tree/scroll visuals with the new font and line-height behavior. The patch includes related test coverage for docking, tree guide layout, border dash rendering, and scrollbar hover/resize behavior. --- .../client/ui/HollowUiInputController.kt | 19 + .../hollowengine/client/ui/UiValues.kt | 8 + .../client/ui/docking/DockGeometry.kt | 33 +- .../client/ui/docking/DockModel.kt | 27 +- .../client/ui/docking/DockSideStripe.kt | 253 ++++++++--- .../client/ui/docking/DockingCompose.kt | 68 +-- .../ui/docking/DockingOverlayCompose.kt | 129 ++++-- .../client/ui/docking/DockingPinned.kt | 41 +- .../client/ui/docking/DockingState.kt | 54 ++- .../ui/ide/HollowIdeDiagnosticsPanel.kt | 121 ------ .../client/ui/ide/HollowIdeLayoutStore.kt | 3 + .../client/ui/ide/HollowIdeModel.kt | 10 +- .../client/ui/ide/HollowIdeOverlay.kt | 103 +++-- .../client/ui/ide/HollowIdeProblemsPanel.kt | 181 ++++++++ .../client/ui/ide/HollowIdeStatusBar.kt | 148 +++++++ .../client/ui/ide/HollowIdeToolWindows.kt | 1 + .../client/ui/ide/panels/ConsolePanel.kt | 137 ++++-- .../client/ui/ide/panels/ConsoleState.kt | 6 + .../ide/timeline/ui/HollowTimelineChrome.kt | 8 +- .../client/ui/inspector/Inspector.kt | 8 +- .../client/ui/layout/UiInlineFlow.kt | 18 +- .../client/ui/render/UiAnalyticRectBatch.kt | 27 +- .../client/ui/scroll/UiLayoutScroll.kt | 22 +- .../client/ui/scroll/UiScrollbar.kt | 45 +- .../client/ui/scroll/UiScrollbarInput.kt | 2 + .../client/ui/style/HssVisualProperties.kt | 15 + .../client/ui/style/HssWidgetProperties.kt | 25 ++ .../client/ui/style/UiStyleProps.kt | 14 +- .../client/ui/style/UiStyleValues.kt | 17 +- .../client/ui/widgets/UiCodeEditor.kt | 8 +- .../client/ui/widgets/UiEditableTextField.kt | 5 +- .../widgets/UiEditableTextFieldCodeInsight.kt | 11 +- .../UiEditableTextFieldCompletionPopup.kt | 65 +-- .../widgets/UiEditableTextFieldDiagnostics.kt | 53 ++- .../client/ui/widgets/UiTreeView.kt | 65 ++- .../lang/en_us/hollowengine/gui/console.json | 4 +- .../lang/en_us/hollowengine/gui/docking.json | 8 +- .../en_us/hollowengine/gui/ide/editor.json | 5 +- .../en_us/hollowengine/gui/ide/problems.json | 7 + .../en_us/hollowengine/gui/ide/status.json | 5 + .../lang/ru_ru/hollowengine/gui/console.json | 4 +- .../lang/ru_ru/hollowengine/gui/docking.json | 8 +- .../ru_ru/hollowengine/gui/ide/editor.json | 5 +- .../ru_ru/hollowengine/gui/ide/problems.json | 7 + .../ru_ru/hollowengine/gui/ide/status.json | 5 + .../hollowengine/fonts/jetbrains_mono_nl.ttf | Bin 0 -> 208576 bytes .../hollowengine/shaders/ui/rect_sdf.fsh | 30 ++ .../hollowengine/ui/styles/asset-manager.hss | 12 +- .../assets/hollowengine/ui/styles/docking.hss | 178 ++++++-- .../assets/hollowengine/ui/styles/ide.hss | 396 ++++++++++++------ .../hollowengine/ui/styles/image-editor.hss | 26 +- .../hollowengine/ui/styles/inspector.hss | 39 +- .../hollowengine/ui/styles/notifications.hss | 61 ++- .../hollowengine/ui/styles/sounds-editor.hss | 26 +- .../assets/hollowengine/ui/styles/widgets.hss | 236 +++++++---- .../client/ui/docking/DockingStateTest.kt | 49 +++ .../client/ui/input/ScrollbarPointerTest.kt | 33 ++ .../client/ui/layout/InlineFlowTest.kt | 17 +- .../client/ui/layout/NestedInlineFlowTest.kt | 5 +- .../client/ui/render/BorderDashPatternTest.kt | 18 + .../ui/widgets/CodeInsightPopupLayoutTest.kt | 9 +- 61 files changed, 2172 insertions(+), 771 deletions(-) delete mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeDiagnosticsPanel.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProblemsPanel.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeStatusBar.kt create mode 100644 runtime/src/main/lang/en_us/hollowengine/gui/ide/problems.json create mode 100644 runtime/src/main/lang/en_us/hollowengine/gui/ide/status.json create mode 100644 runtime/src/main/lang/ru_ru/hollowengine/gui/ide/problems.json create mode 100644 runtime/src/main/lang/ru_ru/hollowengine/gui/ide/status.json create mode 100644 runtime/src/main/resources/assets/hollowengine/fonts/jetbrains_mono_nl.ttf create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/BorderDashPatternTest.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt index 381718875..c79c3507e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt @@ -37,6 +37,21 @@ class HollowUiInputController { private var scrollbarDrag: UiScrollbarDragState? = null + /** The scrollbar under the pointer or in the hand, drawn in its hover style; see [ScrollbarNode.engaged]. */ + private var engagedScrollbar: ScrollbarNode? = null + + private fun updateEngagedScrollbar() { + val next = scrollbarDrag?.scrollbar ?: when (val node = hoveredNode) { + is ScrollbarThumbNode -> node.layoutState.parentNode as? ScrollbarNode + is ScrollbarNode -> node + else -> null + } + if (next === engagedScrollbar) return + engagedScrollbar?.engaged = false + next?.engaged = true + engagedScrollbar = next + } + fun reset() { clearInteraction() } @@ -46,6 +61,7 @@ class HollowUiInputController { activeNode = null draggingNode = null scrollbarDrag = null + updateEngagedScrollbar() if (clearFocus) { focusByScope.clear() activeScope = null @@ -132,6 +148,7 @@ class HollowUiInputController { val hit = frame.hitTest(mouseX, mouseY) val previousNode = hoveredNode hoveredNode = hit?.node + updateEngagedScrollbar() x = mouseX y = mouseY @@ -246,6 +263,7 @@ class HollowUiInputController { else -> null } ?: return UiInputResult(false) scrollbarDrag = drag + updateEngagedScrollbar() return UiInputResult(true, drag.node, drag.node.id, changed = true) } @@ -345,6 +363,7 @@ class HollowUiInputController { draggingNode = null dragMoved = false scrollbarDrag = null + updateEngagedScrollbar() return UiInputResult(received, releaseNode, releaseNode?.id) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt index 200a00874..b789e1d73 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiValues.kt @@ -415,6 +415,7 @@ data class UiBorder( val width: UiInsets = UiInsets.Zero, val paint: UiPaint = UiPaint.None, val radius: Float = 0f, + val dash: UiBorderDash? = null, ) { constructor(width: UiInsets, color: UiColor, radius: Float = 0f) : this(width, UiPaint.Color(color), radius) @@ -422,6 +423,13 @@ data class UiBorder( val color: UiColor? get() = (paint as? UiPaint.Color)?.color } +/** + * Dashes along a border, measured along its center line. + */ +data class UiBorderDash(val length: Float, val gap: Float) { + val isSolid: Boolean get() = length <= 0f || gap <= 0f +} + data class UiTransform( val translate: UiVec3 = UiVec3(), val rotate: UiVec3 = UiVec3(), diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockGeometry.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockGeometry.kt index b9e665301..15c0f0eb1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockGeometry.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockGeometry.kt @@ -74,26 +74,15 @@ object DockLayoutCalculator { } } -object DockDropResolver { - private const val EdgeRatio = 0.12f - - fun resolve(layouts: List, x: Float, y: Float): DockTarget? { - val stack = layouts.asReversed().firstOrNull { it.stack && it.rect.contains(x, y) } - if (stack != null) return DockTarget(stack.nodeId, placementFor(stack.rect, x, y)) - - val node = layouts.asReversed().firstOrNull { it.rect.contains(x, y) } ?: return null - return DockTarget(node.nodeId, placementFor(node.rect, x, y)) - } - - private fun placementFor(rect: DockRect, x: Float, y: Float): DockPlacement { - val localX = ((x - rect.x) / rect.width.coerceAtLeast(1f)).coerceIn(0f, 1f) - val localY = ((y - rect.y) / rect.height.coerceAtLeast(1f)).coerceIn(0f, 1f) - return when { - localX < EdgeRatio -> DockPlacement.LEFT - localX > 1f - EdgeRatio -> DockPlacement.RIGHT - localY < EdgeRatio -> DockPlacement.TOP - localY > 1f - EdgeRatio -> DockPlacement.BOTTOM - else -> DockPlacement.CENTER - } - } +fun dockPreviewRect(target: DockTarget, layouts: List, bounds: DockRect): DockRect? { + val base = if (target.anchorId == null) bounds else layouts.firstOrNull { it.nodeId == target.anchorId }?.rect + return base?.part(target.placement) } + +private fun DockRect.part(placement: DockPlacement): DockRect = when (placement) { + DockPlacement.CENTER -> this + DockPlacement.LEFT -> copy(width = width * 0.5f) + DockPlacement.RIGHT -> copy(x = x + width * 0.5f, width = width * 0.5f) + DockPlacement.TOP -> copy(height = height * 0.5f) + DockPlacement.BOTTOM -> copy(y = y + height * 0.5f, height = height * 0.5f) +} \ No newline at end of file diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt index 28a6dfdab..6860f20fb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt @@ -1,6 +1,7 @@ package ru.hollowhorizon.hollowengine.client.ui.docking import androidx.compose.runtime.compositionLocalOf +import ru.hollowhorizon.hollowengine.client.ui.Modifier data class DockItem( val id: String, @@ -26,13 +27,15 @@ enum class DockSide { } /** - * Which half of a stripe a tool window sits in. + * Which part of a stripe a tool window sits in. * - * The top half opens beside the editor, above the bottom area. The bottom half opens into the area - * under the editor and the side panels, the full width between the stripes. + * [TOP] opens beside the editor, above the bottom area. [SPLIT] opens in the same side panel, under + * the [TOP] window, so the two show at once with a splitter between them. [BOTTOM] opens into the + * area under the editor and the side panels, the full width between the stripes. */ enum class DockStripeGroup { TOP, + SPLIT, BOTTOM, } @@ -102,6 +105,13 @@ data class DockTabDragState( val layouts: List = emptyList(), ) +/** A stripe button in the hand: the pointer's place along its stripe, and how far down the button it took hold. */ +data class DockStripeDrag( + val itemId: String, + val along: Float, + val grab: Float, +) + data class DockTabGrabState( val stackId: String, val itemId: String, @@ -334,8 +344,15 @@ internal class DockIdGenerator { fun nextWindowId(): String = "dock-window-${nextWindow++}" } -/** The title a parked window is expected to show itself, when it asked for [DockItem.titleInToolbar]. */ -class DockPanelTitle(val title: String, val icon: String?) +/** + * The title a parked window is expected to show itself, when it asked for [DockItem.titleInToolbar]. + */ +class DockPanelTitle( + val title: String, + val icon: String?, + val headerId: String, + val dragHandle: Modifier, +) /** Set for the content of a parked window that draws its own title; null everywhere else. */ val LocalDockPanelTitle = compositionLocalOf { null } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt index b104d10e7..c5f4eaf6c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockSideStripe.kt @@ -27,6 +27,7 @@ import ru.hollowhorizon.hollowengine.client.ui.cursor import ru.hollowhorizon.hollowengine.client.ui.grow import ru.hollowhorizon.hollowengine.client.ui.input import ru.hollowhorizon.hollowengine.client.ui.isRightClick +import ru.hollowhorizon.hollowengine.client.ui.layer import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.onDrag import ru.hollowhorizon.hollowengine.client.ui.onPlaced @@ -36,6 +37,8 @@ import ru.hollowhorizon.hollowengine.client.ui.percent import ru.hollowhorizon.hollowengine.client.ui.px import ru.hollowhorizon.hollowengine.client.ui.size import ru.hollowhorizon.hollowengine.client.ui.textWrap +import ru.hollowhorizon.hollowengine.client.ui.transition +import ru.hollowhorizon.hollowengine.client.ui.translate import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover @@ -50,8 +53,12 @@ private const val StripeButtonSize = 22f /** A button and the gap after it, as `.dock-stripe` lays them out. */ private const val StripeButtonPitch = 24f +/** The line between the top and the split buttons: 1px, its margins in `.dock-stripe-divider`, one gap. */ +private const val StripeDividerWidth = 12f +private const val StripeDividerPitch = 9f + /** How long a panel takes to push the editor aside, and to give the room back. */ -private const val PanelSlideMillis = 160L +private const val PanelSlideMillis = 120L /** Width of the handles that drag a panel's inner edge. */ internal const val PanelSplitterWidth = 3f @@ -62,9 +69,16 @@ private const val DragThreshold = 4f /** How far past its stripe a button has to be dragged to come off it as a floating window. */ private const val UndockDistance = 28f +/** Where on a window just pulled off a stripe the pointer holds it: its header, near the left. */ +private const val HeaderGrabX = 48f +private const val HeaderGrabY = 12f + +/** How far a panel's header has to be dragged before the panel comes off: further than a click wobbles. */ +private const val HeaderUndockDistance = 8f + internal fun DockingState.edgeWidth(side: DockSide): Float { val stripe = if (stripesVisible && pinnedOn(side).isNotEmpty()) StripeButtonSize else 0f - val panel = expandedOn(side)?.let { it.width + PanelSplitterWidth } ?: 0f + val panel = sideWidth(side)?.let { it + PanelSplitterWidth } ?: 0f return stripe + panel } @@ -72,7 +86,7 @@ internal fun stripeId(side: DockSide): String = "dock-stripe-${side.tag}" internal fun stripeButtonId(itemId: String): String = "dock-stripe-button-$itemId" -/** The buttons of the top half, a gap, then buttons of the bottom half. */ +/** The top buttons, a divider and the split ones under it, a gap, then the bottom buttons. */ @Composable internal fun DockStripe(side: DockSide, state: DockingState) { val open = state.stripesVisible && state.pinnedOn(side).isNotEmpty() @@ -86,6 +100,16 @@ internal fun DockStripe(side: DockSide, state: DockingState) { state.pinnedIn(DockAnchor(side, DockStripeGroup.TOP)).forEach { pinned -> key(pinned.item.id) { DockStripeButton(pinned, state) { height } } } + val split = state.pinnedIn(DockAnchor(side, DockStripeGroup.SPLIT)) + if (split.isNotEmpty()) { + Box( + tags = listOf(DockTags.StripeDivider), + modifier = Modifier.size(StripeDividerWidth.px, 1.px), + ) + split.forEach { pinned -> + key(pinned.item.id) { DockStripeButton(pinned, state) { height } } + } + } Box(modifier = Modifier.size(1.px, 0.px).grow(1f)) state.pinnedIn(DockAnchor(side, DockStripeGroup.BOTTOM)).forEach { pinned -> key(pinned.item.id) { DockStripeButton(pinned, state) { height } } @@ -93,9 +117,51 @@ internal fun DockStripe(side: DockSide, state: DockingState) { } } +internal fun pinnedHeaderId(itemId: String): String = "dock-pinned-header-$itemId" + /** - * A stripe button. A click opens or closes its window. Dragged along the stripe it moves, into the - * other half as well. + * Lets a parked window's header pull it off into a floating window, the way its stripe button can. + */ +internal fun Modifier.pinnedHeaderDrag(itemId: String, state: DockingState): Modifier = + input(hoverable = true, clickable = true, draggable = true) + .onDrag { event -> + if (hypot(event.dragTotalX, event.dragTotalY) < HeaderUndockDistance) return@onDrag + event.consume() + val spaceX = event.localXInAncestor(DockTags.Space) ?: event.rootLocalX + val spaceY = event.localYInAncestor(DockTags.Space) ?: event.rootLocalY + state.undockPinned(itemId, spaceX - event.localX, spaceY - event.localY, pinnedHeaderId(itemId)) + } + +/** Where the slot of [itemId] in [anchor] starts, down its stripe, as `.dock-stripe` lays it out. */ +private fun DockingState.stripeSlotTop(anchor: DockAnchor, itemId: String, height: Float): Float { + val group = pinnedIn(anchor) + val index = group.indexOfFirst { it.item.id == itemId }.coerceAtLeast(0) + return when (anchor.group) { + DockStripeGroup.TOP -> index * StripeButtonPitch + DockStripeGroup.SPLIT -> + pinnedIn(DockAnchor(anchor.side, DockStripeGroup.TOP)).size * StripeButtonPitch + StripeDividerPitch + + index * StripeButtonPitch + DockStripeGroup.BOTTOM -> height - StripeButtonSize - (group.size - 1 - index) * StripeButtonPitch + } +} + +private fun DockingState.stripeSlotAt(side: DockSide, itemId: String, along: Float, height: Float): Pair { + fun othersIn(group: DockStripeGroup) = pinnedIn(DockAnchor(side, group)).count { it.item.id != itemId } + if (along >= height / 2f) { + val others = othersIn(DockStripeGroup.BOTTOM) + return DockAnchor(side, DockStripeGroup.BOTTOM) to others - ((height - along) / StripeButtonPitch).toInt() + } + val topCount = othersIn(DockStripeGroup.TOP) + if (along < topCount * StripeButtonPitch + StripeButtonSize) { + return DockAnchor(side, DockStripeGroup.TOP) to (along / StripeButtonPitch).toInt().coerceIn(0, topCount) + } + val splitStart = topCount * StripeButtonPitch + StripeDividerPitch + val index = ((along - splitStart) / StripeButtonPitch).toInt().coerceIn(0, othersIn(DockStripeGroup.SPLIT)) + return DockAnchor(side, DockStripeGroup.SPLIT) to index +} + +/** + * A stripe button. A click opens or closes its window. */ @Composable private fun DockStripeButton(pinned: DockPinnedItem, state: DockingState, stripeHeight: () -> Float) { @@ -103,20 +169,33 @@ private fun DockStripeButton(pinned: DockPinnedItem, state: DockingState, stripe val expanded = state.expandedIn(pinned.anchor)?.item?.id == item.id var anchor by remember { mutableStateOf(UiRect.Zero) } var menu by remember { mutableStateOf(false) } - val dragging = remember { booleanArrayOf(false) } + val drag = state.stripeDrag?.takeIf { it.itemId == item.id } + val swap = if (drag == null) state.stripeSwapOffsets[item.id] else null + if (swap != null) { + LaunchedEffect(item.id, swap.revision) { + withFrameNanos { } + state.clearStripeSwap(item.id, swap.revision) + } + } + val offset = drag?.let { it.along - it.grab - state.stripeSlotTop(pinned.anchor, item.id, stripeHeight()) } + ?: swap?.offset Box( id = stripeButtonId(item.id), tags = buildList { add(DockTags.StripeButton) if (expanded) add(DockTags.Selected) + if (drag != null) add(DockTags.Dragging) }, modifier = Modifier.size(StripeButtonSize.px, StripeButtonSize.px) + .let { if (offset != null) it.translate(y = offset).transition() else it } + .layer(if (drag != null) 10 else 0) .input(hoverable = true, clickable = true, draggable = true) .cursor(UiCursorShape.HAND).tooltipOnHover(item.title.lang, alignment = pinned.side.asideAlignment) .onPlaced { anchor = it } .onPress { event -> - dragging[0] = false + // A drag whose release never arrived (the window lost focus mid-gesture) ends here. + state.stripeDrag = null if (event.isRightClick()) { menu = true event.consume() @@ -124,34 +203,44 @@ private fun DockStripeButton(pinned: DockPinnedItem, state: DockingState, stripe } .onDrag { event -> if (event.isRightClick()) return@onDrag - if (!dragging[0] && hypot(event.dragTotalX, event.dragTotalY) < DragThreshold) return@onDrag - dragging[0] = true + val held = state.stripeDrag?.itemId == item.id + if (!held && hypot(event.dragTotalX, event.dragTotalY) < DragThreshold) return@onDrag event.consume() if (abs(event.dragTotalX) > StripeButtonSize + UndockDistance) { + state.stripeDrag = null val spaceX = event.localXInAncestor(DockTags.Space) ?: event.rootLocalX val spaceY = event.localYInAncestor(DockTags.Space) ?: event.rootLocalY - state.undockPinned(item.id, spaceX - event.localX, spaceY - event.localY, stripeButtonId(item.id)) + state.undockPinned(item.id, spaceX - HeaderGrabX, spaceY - HeaderGrabY, stripeButtonId(item.id)) return@onDrag } val height = stripeHeight() val along = event.localYInAncestor(stripeId(pinned.side)) ?: return@onDrag if (height <= 0f) return@onDrag - val group = if (along < height / 2f) DockStripeGroup.TOP else DockStripeGroup.BOTTOM - val target = DockAnchor(pinned.side, group) + val grab = state.stripeDrag?.takeIf { held }?.grab + ?: (along - state.stripeSlotTop(pinned.anchor, item.id, height)) + state.stripeDrag = DockStripeDrag(item.id, along, grab) + + val middle = along - grab + StripeButtonSize / 2f + val (target, index) = state.stripeSlotAt(pinned.side, item.id, middle, height) val others = state.pinnedIn(target).count { it.item.id != item.id } - val index = if (group == DockStripeGroup.TOP) { - (along / StripeButtonPitch).toInt() - } else { - others - ((height - along) / StripeButtonPitch).toInt() + val before = state.pinnedIn(target).map { it.item.id } + if (!state.movePinned(item.id, target, index.coerceIn(0, others))) return@onDrag + if (target == pinned.anchor) { + val after = state.pinnedIn(target).map { it.item.id } + state.recordStripeSwaps( + after.withIndex() + .filter { (newIndex, id) -> id != item.id && before.indexOf(id) != newIndex } + .associate { (newIndex, id) -> id to (before.indexOf(id) - newIndex) * StripeButtonPitch }, + ) } - state.movePinned(item.id, target, index.coerceIn(0, others)) } .onRelease { event -> event.consume() - if (!dragging[0] && !event.isRightClick()) state.togglePinned(item.id) - dragging[0] = false + val dragged = state.stripeDrag?.itemId == item.id + state.stripeDrag = null + if (!dragged && !event.isRightClick()) state.togglePinned(item.id) }, ) { item.icon?.let { icon -> @@ -172,9 +261,14 @@ private fun DockStripeButton(pinned: DockPinnedItem, state: DockingState, stripe private fun stripeMenuItems(pinned: DockPinnedItem, state: DockingState): List { val itemId = pinned.item.id - val otherGroup = if (pinned.group == DockStripeGroup.TOP) DockStripeGroup.BOTTOM else DockStripeGroup.TOP return buildList { - add(UiDropdownItem(label = DockLang.moveTo(otherGroup)) { state.pin(itemId, pinned.side, otherGroup) }) + DockStripeGroup.entries.filter { it != pinned.group }.forEach { group -> + add(UiDropdownItem(label = DockLang.moveTo(group)) { state.pin(itemId, pinned.side, group) }) + } + val panels = state.sidePanels(pinned.side) + if (panels.size == 2 && panels.any { it.item.id == itemId }) { + add(UiDropdownItem(label = DockLang.SwapPanels) { state.swapSidePanels(pinned.side) }) + } add(UiDropdownItem(label = DockLang.pinTo(pinned.side.opposite)) { state.pin(itemId, pinned.side.opposite, pinned.group) }) add(UiDropdownItem(label = DockLang.Undock) { state.unpin(itemId) }) if (pinned.item.closable) { @@ -185,8 +279,9 @@ private fun stripeMenuItems(pinned: DockPinnedItem, state: DockingState): List + key(panel.item.id) { + if (index > 0) DockSideDivider(side, state) + val grow = when { + panels.size == 1 -> 1f + index == 0 -> fraction + else -> 1f - fraction + } + Column( + id = "dock-pinned-slot-${panel.item.id}", + modifier = Modifier.size(100.percent, 0.px).grow(grow).clip(), + ) { + DockPinnedBody(panel, state, tabBarActions, content) + } + } + } } - if (side == DockSide.LEFT) DockPanelSplitter(panel, side, state, open, sliding) + if (side == DockSide.LEFT) DockPanelSplitter(side, state, open, sliding) +} + +/** The handle between a side panel's top window and the split one under it. */ +@Composable +private fun DockSideDivider(side: DockSide, state: DockingState) { + val fractionAtPress = remember { floatArrayOf(state.sideSplitFraction(side)) } + Box( + id = "dock-side-divider-${side.tag}", + tags = listOf(DockTags.Splitter), + modifier = Modifier.size(100.percent, PanelSplitterWidth.px) + .input(hoverable = true, draggable = true).cursor(UiCursorShape.RESIZE_VERTICAL) + .onPress { fractionAtPress[0] = state.sideSplitFraction(side) } + .onDrag { event -> + val height = event.parentHeight - PanelSplitterWidth + if (height > 0f) state.setSideSplitFraction(side, fractionAtPress[0] + event.dragTotalY / height) + event.consume() + }, + ) } /** @@ -306,29 +435,39 @@ private fun DockPinnedBody( content: DockItemContent, ) { val item = panel.item - if (!item.titleInToolbar) DockPanelHeader(panel, tabBarActions) - Box( - id = "$PinnedContentPrefix${item.id}-content", - tags = listOf(DockTags.Content), - modifier = Modifier.size(100.percent, 0.px).grow(1f).clip().input(hoverable = true, clickable = true) - .onPress { state.expand(item.id) }, - ) { - key(item.id) { - val title = if (item.titleInToolbar) DockPanelTitle(item.title.lang, item.icon) else null - CompositionLocalProvider(LocalDockPanelTitle provides title) { - DockContentBody { content(item) } + Column(tags = listOf(DockTags.PinnedIsland)) { + if (!item.titleInToolbar) DockPanelHeader(panel, state, tabBarActions) + Box( + id = "$PinnedContentPrefix${item.id}-content", + tags = listOf(DockTags.Content), + modifier = Modifier.size(100.percent, 0.px).grow(1f).clip().input(hoverable = true, clickable = true) + .onPress { state.expand(item.id) }, + ) { + key(item.id) { + val title = if (item.titleInToolbar) { + DockPanelTitle( + title = item.title.lang, + icon = item.icon, + headerId = pinnedHeaderId(item.id), + dragHandle = Modifier.pinnedHeaderDrag(item.id, state), + ) + } else null + CompositionLocalProvider(LocalDockPanelTitle provides title) { + DockContentBody { content(item) } + } } } } } @Composable -private fun DockPanelHeader(panel: DockPinnedItem, tabBarActions: DockTabBarActions) { +private fun DockPanelHeader(panel: DockPinnedItem, state: DockingState, tabBarActions: DockTabBarActions) { val item = panel.item Row( - id = "dock-pinned-header-${item.id}", + id = pinnedHeaderId(item.id), tags = listOf(DockTags.PinnedHeader), - modifier = Modifier.size(100.percent, 24.px).alignItems(vertical = UiAlign.CENTER), + modifier = Modifier.size(100.percent, 24.px).alignItems(vertical = UiAlign.CENTER) + .pinnedHeaderDrag(item.id, state), ) { item.icon?.let { icon -> Image(icon, tags = listOf(DockTags.PinnedHeaderIcon)) } Box(modifier = Modifier.size(0.px, 100.percent).grow(1f).clip()) { @@ -344,13 +483,12 @@ private fun DockPanelHeader(panel: DockPinnedItem, tabBarActions: DockTabBarActi @Composable private fun DockPanelSplitter( - panel: DockPinnedItem, side: DockSide, state: DockingState, open: Boolean, sliding: Boolean, ) { - val start = remember(panel.item.id) { floatArrayOf(panel.width) } + val start = remember(side) { floatArrayOf(state.sideWidth(side) ?: 0f) } Box( id = "dock-pinned-splitter-${side.tag}", tags = buildList { @@ -359,9 +497,9 @@ private fun DockPanelSplitter( }, modifier = Modifier.size(if (open) PanelSplitterWidth.px else 0.px, 100.percent) .input(hoverable = true, draggable = true).cursor(UiCursorShape.RESIZE_HORIZONTAL) - .onPress { start[0] = panel.width }.onDrag { event -> + .onPress { start[0] = state.sideWidth(side) ?: 0f }.onDrag { event -> val delta = if (side == DockSide.LEFT) event.dragTotalX else -event.dragTotalX - state.setPinnedWidth(panel.item.id, start[0] + delta) + state.setSideWidth(side, start[0] + delta) event.consume() }, ) @@ -394,6 +532,8 @@ internal object DockLang { val PinRight: String get() = "$Root.pin_right".lang val PinLeftBottom: String get() = "$Root.pin_left_bottom".lang val PinRightBottom: String get() = "$Root.pin_right_bottom".lang + val PinLeftSplit: String get() = "$Root.pin_left_split".lang + val PinRightSplit: String get() = "$Root.pin_right_split".lang val Undock: String get() = "$Root.undock".lang val Close: String get() = "$Root.close".lang val HideStripes: String get() = "$Root.hide_stripes".lang @@ -402,6 +542,11 @@ internal object DockLang { fun pinTo(side: DockSide): String = if (side == DockSide.LEFT) PinLeft else PinRight - fun moveTo(group: DockStripeGroup): String = - if (group == DockStripeGroup.TOP) "$Root.move_to_top".lang else "$Root.move_to_bottom".lang + val SwapPanels: String get() = "$Root.swap_panels".lang + + fun moveTo(group: DockStripeGroup): String = when (group) { + DockStripeGroup.TOP -> "$Root.move_to_top".lang + DockStripeGroup.SPLIT -> "$Root.move_to_split".lang + DockStripeGroup.BOTTOM -> "$Root.move_to_bottom".lang + } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt index 7fd1a5150..8f7e3bf58 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt @@ -11,9 +11,16 @@ import ru.hollowhorizon.hollowengine.client.utils.lang private const val DockTabMinWidth = 72f private const val DockTabMaxWidth = 180f -private const val DockTabHeight = 18f + +private const val DockTabBarHeight = 24f +private const val DockTabTopGap = 3f +private const val DockTabHeight = DockTabBarHeight - DockTabTopGap +private const val DockTabOverhang = 6f +private const val DockTabIndicatorHeight = 2f private const val DockTabMargin = 2f private const val DockTabCloseWidth = 22f +private const val DockTabCloseSize = 16f +private const val DockCloseIcon = "hollowengine:textures/gui/icons/cross.svg" /** A dragged tab lifts slightly off the bar, and forward, so it draws over its neighbours. */ private const val DockTabDragLift = -2f @@ -38,7 +45,8 @@ fun DockSpace( Box( id = id, tags = listOf(DockTags.Space), - modifier = modifier.style("hollowengine:ui/styles/docking.hss").clip(), + modifier = modifier.style("hollowengine:ui/styles/docking.hss").clip() + .onPlaced { state.updateSpaceSize(it.width, it.height) }, ) { Row(id = "$id-body", modifier = Modifier.size(100.percent, 100.percent)) { DockStripe(DockSide.LEFT, state) @@ -238,9 +246,9 @@ private fun DockSingleTabBadge( id = "${stack.id}-tab-badge", tags = listOf(DockTags.TabBar, DockTags.CompactTabBar), modifier = Modifier.position(DockTabMargin.px, DockTabMargin.px) - .size(UiLength.Auto, 24.px) - .alignItems(vertical = UiAlign.CENTER) - .layer(20), + .size(UiLength.Auto, DockTabHeight.px) + .alignItems(vertical = UiAlign.START) + .layer(20).clip(), ) { DockTab(stack.id, 0, item, true, state, tabContent, allowUndock = true) { 0f } tabBarActions(item) @@ -331,7 +339,7 @@ private fun DockTabBar( } Row( id = "${stack.id}-tab-row", - modifier = Modifier.size(100.percent, 24.px).alignItems(vertical = UiAlign.CENTER), + modifier = Modifier.size(100.percent, DockTabBarHeight.px).alignItems(vertical = UiAlign.CENTER), ) { Layout( content = { @@ -352,7 +360,7 @@ private fun DockTabBar( }, id = "${stack.id}-tabs", tags = listOf(DockTags.TabBar), - modifier = Modifier.size(0.px, 24.px).grow(1f).clip() + modifier = Modifier.size(0.px, DockTabBarHeight.px).grow(1f).clip() .scrollable( vertical = false, horizontal = true, @@ -400,15 +408,16 @@ private fun DockTab( var menuAt by remember { mutableStateOf(null) } - Row( + Column( id = tabNodeId(item.id), tags = buildList { add(DockTags.Tab) if (selected) add(DockTags.Selected) if (item.dirty) add(DockTags.Dirty) }, - modifier = Modifier.size(width = UiLength.Auto, height = DockTabHeight.px).minSize(width = DockTabMinWidth.px) - .maxSize(width = DockTabMaxWidth.px).alignItems(vertical = UiAlign.CENTER).layer(layerIndex).clip() + modifier = Modifier.size(width = UiLength.Auto, height = (DockTabHeight + DockTabOverhang).px) + .minSize(width = DockTabMinWidth.px).maxSize(width = DockTabMaxWidth.px) + .alignItems(horizontal = UiAlign.STRETCH).layer(layerIndex).clip() .tabTransform(dragOffset, DockTabOffset.DRAG).tabTransform(swap?.offset, DockTabOffset.SWAP) .cursor(if (dragOffset != null) UiCursorShape.MOVE else UiCursorShape.HAND) .input(hoverable = true, clickable = true, draggable = true) @@ -417,9 +426,14 @@ private fun DockTab( else state.onTabContextMenu?.invoke(item, event) } ) { - TabContentWrapper(item, tabContent) - - CloseButton(item, state) + Row( + modifier = Modifier.size(UiLength.Auto, (DockTabHeight - DockTabIndicatorHeight).px) + .alignItems(vertical = UiAlign.CENTER), + ) { + TabContentWrapper(item, tabContent) + CloseButton(item, state) + } + Box(tags = listOf(DockTags.TabIndicator), modifier = Modifier.size(UiLength.Auto, DockTabIndicatorHeight.px)) } menuAt?.let { anchor -> @@ -436,6 +450,8 @@ private fun DockTab( private fun tabMenuItems(item: DockItem, state: DockingState): List = buildList { add(UiDropdownItem(label = DockLang.PinLeft) { state.pin(item.id, DockSide.LEFT) }) add(UiDropdownItem(label = DockLang.PinRight) { state.pin(item.id, DockSide.RIGHT) }) + add(UiDropdownItem(label = DockLang.PinLeftSplit) { state.pin(item.id, DockSide.LEFT, DockStripeGroup.SPLIT) }) + add(UiDropdownItem(label = DockLang.PinRightSplit) { state.pin(item.id, DockSide.RIGHT, DockStripeGroup.SPLIT) }) add(UiDropdownItem(label = DockLang.PinLeftBottom) { state.pin(item.id, DockSide.LEFT, DockStripeGroup.BOTTOM) }) add(UiDropdownItem(label = DockLang.PinRightBottom) { state.pin(item.id, DockSide.RIGHT, DockStripeGroup.BOTTOM) }) if (item.closable) { @@ -550,7 +566,7 @@ private fun dockTabBarMeasurePolicy( val placeable = measurable.measure( UiConstraints( maxWidth = constraints.maxWidth, - maxHeight = DockTabHeight, + maxHeight = DockTabHeight + DockTabOverhang, ) ) val itemId = itemIds.getOrNull(index) ?: measurable.node.id.orEmpty() @@ -566,10 +582,10 @@ private fun dockTabBarMeasurePolicy( } state.updateTabLayouts(stackId, layouts) val width = constraints.maxWidth.takeIf { it.isFinite() } ?: x - layout(width, DockTabHeight + DockTabMargin * 2f) { + layout(width, DockTabBarHeight) { var childX = 0f placeables.forEach { placeable -> - placeable.place(childX + DockTabMargin, DockTabMargin) + placeable.place(childX + DockTabMargin, DockTabTopGap) childX += placeable.width + DockTabMargin * 2f } } @@ -591,12 +607,13 @@ private fun CloseButton(item: DockItem, state: DockingState) { Box( id = "dock-close-${item.id}", tags = listOf(DockTags.CloseButton), - modifier = Modifier.size(DockTabCloseWidth.px, 100.percent).input(hoverable = true, clickable = true) + mode = UiBoxMode.STACK, + modifier = Modifier.size(DockTabCloseSize.px, DockTabCloseSize.px).input(hoverable = true, clickable = true) .cursor(UiCursorShape.HAND).onClick { event -> state.close(item.id) event.consume() }) { - Text("x", modifier = Modifier.align(UiAlign.CENTER, UiAlign.CENTER)) + Image(DockCloseIcon, tags = listOf(DockTags.CloseIcon), modifier = Modifier.align(UiAlign.CENTER, UiAlign.CENTER)) } } @@ -649,9 +666,12 @@ object DockTags { const val TabIcon = "dock-tab-icon" const val TabLabel = "dock-tab-label" const val Selected = "selected" + const val Dragging = "dragging" const val Stripe = "dock-stripe" const val StripeButton = "dock-stripe-button" const val StripeIcon = "dock-stripe-icon" + const val StripeDivider = "dock-stripe-divider" + const val DropPreview = "dock-drop-preview" const val PinnedPanel = "dock-pinned-panel" const val Sliding = "sliding" const val PinnedHeader = "dock-pinned-header" @@ -664,13 +684,11 @@ object DockTags { const val ContentBody = "dock-content-body" const val ResizeHandle = "dock-resize-handle" const val CloseButton = "dock-close-button" + const val CloseIcon = "dock-close-icon" + const val TabIndicator = "dock-tab-indicator" + const val PinnedIsland = "dock-pinned-island" const val DropOverlay = "dock-drop-overlay" const val DropZone = "dock-drop-zone" -} - -object DockColors { - val DropZone = UiColor(0.18f, 0.42f, 0.75f, 0.1f) - val DropZoneActive = UiColor(0.25f, 0.58f, 0.95f, 0.42f) - val DropZoneBorder = UiColor(0.44f, 0.68f, 0.95f, 0.28f) - val DropZoneBorderActive = UiColor(0.7f, 0.86f, 1f, 0.95f) + const val DropZoneGlyph = "dock-drop-zone-glyph" + const val Active = "active" } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt index bc56f0444..11e77cd6d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingOverlayCompose.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover @Composable @@ -15,11 +16,8 @@ internal fun FloatingResizeHandle(window: FloatingDockWindow, state: DockingStat Box( id = "${window.id}-resize-${edge.name.lowercase()}", tags = listOf(DockTags.ResizeHandle), - modifier = Modifier.resizeHandleModifier(edge) - .input(hoverable = true, draggable = true) - .cursor(edge.cursorShape) - .onPress { dragStart[0] = window } - .onDrag { event -> + modifier = Modifier.resizeHandleModifier(edge).input(hoverable = true, draggable = true) + .cursor(edge.cursorShape).onPress { dragStart[0] = window }.onDrag { event -> state.resizeFloatingFrom( window.id, edge, @@ -28,34 +26,64 @@ internal fun FloatingResizeHandle(window: FloatingDockWindow, state: DockingStat event.dragTotalY, ) event.consume() - } - ) + }) } } @Composable -internal fun DockDropOverlay(state: DockingState, leftInset: Float = 0f, rightInset: Float = 0f, bottomInset: Float = 0f) { +internal fun DockDropOverlay( + state: DockingState, + leftInset: Float = 0f, + rightInset: Float = 0f, + bottomInset: Float = 0f, +) { + var bounds by remember { mutableStateOf(UiRect.Zero) } Box( id = "dock-drop-overlay", tags = listOf(DockTags.DropOverlay), - modifier = Modifier.size(100.percent, 100.percent) - .padding(leftInset.px, 0.px, rightInset.px, bottomInset.px) - .layer(10_000) - ) { + modifier = Modifier.size(100.percent, 100.percent).padding(leftInset.px, 0.px, rightInset.px, bottomInset.px) + .layer(10_000).onPlaced { bounds = it }) { val root = state.root + val layouts = DockLayoutCalculator.layout(root, DockBounds) + DockDropPreview( + state, + layouts, + width = bounds.width - leftInset - rightInset, + height = bounds.height - bottomInset, + ) if (root == null) { - DockPlusDropZones(state, DockTarget.Root, DockRect(0f, 0f, 100f, 100f), 1) + DockPlusDropZones(state, DockTarget.Root, DockBounds, 1) return@Box } - DockLayoutCalculator.layout(root, DockRect(0f, 0f, 100f, 100f)) - .filter { it.stack } - .forEach { layout -> - DockPlusDropZones(state, DockTarget(anchorId = layout.nodeId), layout.rect, 1) - } + layouts.filter { it.stack }.forEach { layout -> + DockPlusDropZones(state, DockTarget(anchorId = layout.nodeId), layout.rect, 1) + } DockRootDropZones(state) } } +/** + * Outlines where the dragged window would land. + */ +@Composable +private fun DockDropPreview(state: DockingState, layouts: List, width: Float, height: Float) { + val target = state.previewTarget?.let { dockPreviewRect(it, layouts, DockBounds) } + val last = remember { arrayOfNulls(1) } + if (target != null) last[0] = target + val rect = target ?: last[0] ?: return + if (width <= 0f || height <= 0f) return + val scaleX = width / DockBounds.width + val scaleY = height / DockBounds.height + Box( + id = "dock-drop-preview", + tags = listOfNotNull(DockTags.DropPreview, "visible".takeIf { target != null }), + modifier = Modifier.position(0.px, 0.px).size( + (rect.width * scaleX - DropPreviewInset * 2f).coerceAtLeast(0f).px, + (rect.height * scaleY - DropPreviewInset * 2f).coerceAtLeast(0f).px + ).translate(rect.x * scaleX + DropPreviewInset, rect.y * scaleY + DropPreviewInset).inputTransparent(), + ) +} + @Composable private fun DockRootDropZones(state: DockingState) { DockDropZone(state, DockTarget(placement = DockPlacement.LEFT), width = 25.px, height = 125.px, layer = 2) @@ -131,20 +159,14 @@ private fun DockDropZone( val active = state.previewTarget == target Box( id = "dock-drop-${target.anchorId ?: "root"}-${target.placement.name.lowercase()}", - tags = listOf(DockTags.DropZone), - modifier = Modifier.size(width, height) - .layer(layer) - .background(if (active) DockColors.DropZoneActive else DockColors.DropZone) - .border(1.px, if (active) DockColors.DropZoneBorderActive else DockColors.DropZoneBorder) - .input(hoverable = true, clickable = true) - .cursor(UiCursorShape.HAND) - .onHover { + mode = UiBoxMode.STACK, + tags = listOfNotNull(DockTags.DropZone, DockTags.Active.takeIf { active }), + modifier = Modifier.size(width, height).layer(layer).input(hoverable = true, clickable = true) + .cursor(UiCursorShape.HAND).onHover { state.previewDock(target) - } - .onExit { + }.onExit { if (state.previewTarget == target) state.previewDock(null) - } - .onRelease { event -> + }.onRelease { event -> state.dockDraggedWindow(target) event.consume() }.then( @@ -162,6 +184,24 @@ private fun DockDropZone( } } else Modifier.position(x, y) ) + ) { + DropZoneGlyph(target.placement) + } +} + +/** A small picture inside a zone of the part of the pane the window would take. */ +@Composable +private fun DropZoneGlyph(placement: DockPlacement) { + val (width, height) = when (placement) { + DockPlacement.LEFT, DockPlacement.RIGHT -> 50.percent to 100.percent + DockPlacement.TOP, DockPlacement.BOTTOM -> 100.percent to 50.percent + DockPlacement.CENTER -> 100.percent to 100.percent + } + val horizontal = if (placement == DockPlacement.RIGHT) UiAlign.END else UiAlign.START + val vertical = if (placement == DockPlacement.BOTTOM) UiAlign.END else UiAlign.START + Box( + tags = listOf(DockTags.DropZoneGlyph), + modifier = Modifier.size(width, height).align(horizontal, vertical).inputTransparent(), ) } @@ -184,10 +224,7 @@ private fun Modifier.resizeHandleModifier(edge: DockResizeEdge): Modifier { } private val DockResizeEdge.isCorner: Boolean - get() = this == DockResizeEdge.TOP_LEFT || - this == DockResizeEdge.TOP_RIGHT || - this == DockResizeEdge.BOTTOM_LEFT || - this == DockResizeEdge.BOTTOM_RIGHT + get() = this == DockResizeEdge.TOP_LEFT || this == DockResizeEdge.TOP_RIGHT || this == DockResizeEdge.BOTTOM_LEFT || this == DockResizeEdge.BOTTOM_RIGHT private val DockResizeEdge.cursorShape: UiCursorShape get() = when (this) { @@ -219,19 +256,17 @@ internal fun DockStripeDropZones(state: DockingState) { DockAnchor.all.forEach { anchor -> val active = hovered == anchor val horizontal = if (anchor.side == DockSide.LEFT) UiAlign.START else UiAlign.END - val vertical = if (anchor.group == DockStripeGroup.TOP) UiAlign.START else UiAlign.END + val vertical = when (anchor.group) { + DockStripeGroup.TOP -> UiAlign.START + DockStripeGroup.SPLIT -> UiAlign.CENTER + DockStripeGroup.BOTTOM -> UiAlign.END + } Box( id = "dock-stripe-drop-${anchor.side.tag}-${anchor.group.name.lowercase()}", - tags = listOf(DockTags.DropZone), - modifier = Modifier.size(StripeDropWidth.px, 48.percent) - .align(horizontal, vertical) - .background(if (active) DockColors.DropZoneActive else DockColors.DropZone) - .border(1.px, if (active) DockColors.DropZoneBorderActive else DockColors.DropZoneBorder) - .input(hoverable = true, clickable = true) - .tooltipOnHover(DockLang.ParkHere) - .onHover { hovered = anchor } - .onExit { if (hovered == anchor) hovered = null } - .onRelease { event -> + tags = listOfNotNull(DockTags.DropZone, DockTags.Active.takeIf { active }), + modifier = Modifier.size(StripeDropWidth.px, StripeDropHeight.percent).align(horizontal, vertical) + .input(hoverable = true, clickable = true).tooltipOnHover(DockLang.ParkHere) + .onHover { hovered = anchor }.onExit { if (hovered == anchor) hovered = null }.onRelease { event -> state.pinDraggedWindow(anchor) event.consume() }, @@ -242,6 +277,10 @@ internal fun DockStripeDropZones(state: DockingState) { private const val StripeDropWidth = 28f +private const val StripeDropHeight = 32f +private val DockBounds = DockRect(0f, 0f, 100f, 100f) +private const val DropPreviewInset = 3f + internal fun DockingState.bottomAreaHeight(): Float { val open = DockSide.entries.any { side -> expandedIn(DockAnchor(side, DockStripeGroup.BOTTOM)) != null } return if (open) bottomHeight + PanelSplitterWidth else 0f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt index 054dd75bb..2673a1f3f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingPinned.kt @@ -6,6 +6,9 @@ private const val MinBottomHeight = 60f private const val MaxBottomHeight = 900f private const val MinBottomFraction = 0.15f private const val MaxBottomFraction = 0.85f +private const val DefaultSideSplitFraction = 0.5f +private const val MinSideSplitFraction = 0.12f +private const val MaxSideSplitFraction = 0.88f /** The stripe buttons on [side], in the order they are drawn. */ fun DockingState.pinnedOn(side: DockSide): List = @@ -19,9 +22,42 @@ fun DockingState.expandedIn(anchor: DockAnchor): DockPinnedItem? { return pinnedItems.firstOrNull { it.item.id == itemId && it.anchor == anchor } } -/** The side panel of [side]: the window open in the top half of its stripe. */ +/** The window open in the top part of [side]'s stripe. */ fun DockingState.expandedOn(side: DockSide): DockPinnedItem? = expandedIn(DockAnchor(side)) +/** What the side panel of [side] shows, top to bottom: its top window, then the split one under it. */ +fun DockingState.sidePanels(side: DockSide): List = listOfNotNull( + expandedIn(DockAnchor(side, DockStripeGroup.TOP)), + expandedIn(DockAnchor(side, DockStripeGroup.SPLIT)), +) + +/** The side panel's width; the windows in it share one, the top one's when both are open. */ +fun DockingState.sideWidth(side: DockSide): Float? = sidePanels(side).firstOrNull()?.width + +fun DockingState.sideSplitFraction(side: DockSide): Float = sideSplitFractions[side] ?: DefaultSideSplitFraction + +fun DockingState.setSideSplitFraction(side: DockSide, fraction: Float) { + sideSplitFractions[side] = fraction.coerceIn(MinSideSplitFraction, MaxSideSplitFraction) +} + +/** Sets the width of every window the side panel shows, so they stay one column. */ +fun DockingState.setSideWidth(side: DockSide, width: Float) { + sidePanels(side).forEach { setPinnedWidth(it.item.id, width) } +} + +/** Swaps the side panel's two windows, keeping both open. */ +fun DockingState.swapSidePanels(side: DockSide): Boolean { + val top = expandedIn(DockAnchor(side, DockStripeGroup.TOP)) ?: return false + val split = expandedIn(DockAnchor(side, DockStripeGroup.SPLIT)) ?: return false + val topIndex = pinnedItems.indexOf(top) + val splitIndex = pinnedItems.indexOf(split) + pinnedItems[topIndex] = split.copy(group = DockStripeGroup.TOP, width = top.width) + pinnedItems[splitIndex] = top.copy(group = DockStripeGroup.SPLIT) + expandedByAnchor[DockAnchor(side, DockStripeGroup.TOP)] = split.item.id + expandedByAnchor[DockAnchor(side, DockStripeGroup.SPLIT)] = top.item.id + return true +} + fun DockingState.pinnedItem(itemId: String): DockPinnedItem? = pinnedItems.firstOrNull { it.item.id == itemId } fun DockingState.isPinned(itemId: String): Boolean = pinnedItem(itemId) != null @@ -190,6 +226,7 @@ fun DockingState.applyPinned( visible: Boolean = true, bottomHeight: Float = DefaultBottomHeight, bottomFraction: Float = 0.5f, + sideSplit: Map = emptyMap(), ) { pinnedItems.clear() pinnedItems += items.filterNot { contains(it.item.id) } @@ -200,6 +237,8 @@ fun DockingState.applyPinned( stripesVisible = visible setBottomHeight(bottomHeight) setBottomFraction(bottomFraction) + sideSplitFractions.clear() + sideSplit.forEach { (side, fraction) -> setSideSplitFraction(side, fraction) } } /** Which item each half has open, for storing the layout. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt index 1bffb3a8f..0894f666f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingState.kt @@ -45,6 +45,27 @@ class DockingState { var bottomFraction: Float by mutableStateOf(0.5f) internal set + /** How much of a side panel its top window takes when a split window is open under it. */ + internal val sideSplitFractions = mutableStateMapOf() + + /** The stripe button being dragged, if any. */ + var stripeDrag: DockStripeDrag? by mutableStateOf(null) + internal set + + /** Stripe buttons a reorder displaced, by how far they still sit from their new place; see [DockTabSwap]. */ + internal val stripeSwapOffsets = mutableStateMapOf() + private var stripeSwapRevision = 0L + + internal fun recordStripeSwaps(offsets: Map) { + if (offsets.isEmpty()) return + val revision = ++stripeSwapRevision + offsets.forEach { (itemId, offset) -> stripeSwapOffsets[itemId] = DockTabSwap(offset, revision) } + } + + internal fun clearStripeSwap(itemId: String, revision: Long) { + if (stripeSwapOffsets[itemId]?.revision == revision) stripeSwapOffsets.remove(itemId) + } + private var tabGrab: DockTabGrabState? by mutableStateOf(null) private val tabSwapOffsets = mutableStateMapOf() private var tabSwapRevision = 0L @@ -253,12 +274,39 @@ class DockingState { finishTabDrag() if (windowId != null) { val index = floatingWindows.indexOfFirst { it.id == windowId } - if (index >= 0 && floatingWindows[index].dragKey != null) { - floatingWindows[index] = floatingWindows[index].copy(dragKey = null) - } + if (index >= 0) floatingWindows[index] = floatingWindows[index].copy(dragKey = null).keptInSpace() } } + /** The dock space's size from its last layout; floating windows are kept inside it. */ + private var spaceWidth = 0f + private var spaceHeight = 0f + + /** + * Records the dock space's size and pulls back any window the change left outside it; a window + * in the hand is left alone and settled when it is dropped. + */ + internal fun updateSpaceSize(width: Float, height: Float) { + if (width == spaceWidth && height == spaceHeight) return + spaceWidth = width + spaceHeight = height + for (index in floatingWindows.indices) { + val window = floatingWindows[index] + if (window.id == draggedWindowId) continue + val kept = window.keptInSpace() + if (kept != window) floatingWindows[index] = kept + } + } + + /** Moved, never resized, to lie inside the space; a window wider than it keeps its left edge in. */ + internal fun FloatingDockWindow.keptInSpace(): FloatingDockWindow { + if (spaceWidth <= 0f || spaceHeight <= 0f) return this + return copy( + x = x.coerceIn(0f, (spaceWidth - width).coerceAtLeast(0f)), + y = y.coerceIn(0f, (spaceHeight - height).coerceAtLeast(0f)), + ) + } + fun dockDraggedWindow(target: DockTarget): Boolean { val windowId = draggedWindowId ?: return false val docked = dockWindow(windowId, target) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeDiagnosticsPanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeDiagnosticsPanel.kt deleted file mode 100644 index f07710a1b..000000000 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeDiagnosticsPanel.kt +++ /dev/null @@ -1,121 +0,0 @@ -package ru.hollowhorizon.hollowengine.client.ui.ide - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import net.minecraft.client.Minecraft -import ru.hollowhorizon.hollowengine.client.ui.* -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnostic -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnosticSeverity -import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover -import ru.hollowhorizon.hollowengine.generated.Assets - -@Composable -internal fun HollowIdeDiagnosticsBadge( - fileId: String, - diagnostics: List, - onToggle: (String) -> Unit, -) { - if (diagnostics.isEmpty()) return - val errors = diagnostics.count { it.severity == UiTextDiagnosticSeverity.ERROR } - val warnings = diagnostics.count { it.severity == UiTextDiagnosticSeverity.WARNING } - Row( - tags = listOf("ide-diagnostics-badge", if (errors > 0) "has-errors" else "has-warnings"), - modifier = Modifier.align(UiAlign.END, UiAlign.START) - .input(clickable = true, hoverable = true) - .onClick { event -> - onToggle(fileId) - event.consume() - } - ) { - if (errors > 0) { - Image(Assets.Hollowengine.Textures.Gui.Icons.ERROR.toString(), modifier = Modifier.size(10.px, 10.px)) - Text(errors.toString(), tags = listOf("ide-diagnostics-text")) - } - if (warnings > 0) { - Image(Assets.Hollowengine.Textures.Gui.Icons.WARN.toString(), modifier = Modifier.size(10.px, 10.px)) - Text(warnings.toString(), tags = listOf("ide-diagnostics-text")) - } - } -} - -@Composable -internal fun HollowIdeDiagnosticsPanel( - fileId: String, - diagnostics: List, - height: Float, - onResize: (String, Float) -> Unit, -) { - val dragStartHeight = remember(fileId) { floatArrayOf(height) } - Column(tags = listOf("ide-diagnostics-wrap"), modifier = Modifier.size(100.percent, height.px)) { - Box( - tags = listOf("ide-diagnostics-resizer"), - modifier = Modifier.input(clickable = true, hoverable = true) - .cursor(UiCursorShape.RESIZE_VERTICAL) - .onPress { dragStartHeight[0] = height } - .onDrag { event -> - onResize(fileId, dragStartHeight[0] - event.dragTotalY) - event.consume() - } - ) - Row( - tags = listOf("ide-diagnostics-header"), - modifier = Modifier.alignItems(vertical = UiAlign.CENTER), - ) { - Text(diagnosticsSummary(diagnostics), tags = listOf("ide-diagnostics-title")) - Box(modifier = Modifier.size(0.px, 100.percent).grow(1f)) - CopyButton("Copy all") { diagnostics.joinToString("\n", transform = UiTextDiagnostic::clipboardLine) } - } - Column( - tags = listOf("ide-diagnostics-panel"), - modifier = Modifier.scrollable(), - ) { - diagnostics.forEach { diagnostic -> - Row( - tags = listOf("ide-diagnostic-row", diagnostic.severity.name.lowercase()), - modifier = Modifier.alignItems(vertical = UiAlign.CENTER), - ) { - Text(diagnostic.severity.name, tags = listOf("ide-diagnostic-severity")) - Text(diagnostic.locationLabel(), tags = listOf("ide-diagnostic-location")) - Text(diagnostic.message, tags = listOf("ide-diagnostic-message")) - CopyButton("Copy this message") { diagnostic.clipboardLine() } - } - } - } - } -} - -@Composable -private fun CopyButton(tooltip: String, text: () -> String) { - Box( - tags = listOf("ide-diagnostic-copy"), - modifier = Modifier.input(clickable = true, hoverable = true) - .cursor(UiCursorShape.HAND) - .onClick { event -> - Minecraft.getInstance().keyboardHandler.clipboard = text() - event.consume() - } - .tooltipOnHover(tooltip), - ) { - Image( - Assets.Hollowengine.Textures.Gui.Icons.COPY.toString(), - tags = listOf("ide-diagnostic-copy-icon"), - modifier = Modifier.align(UiAlign.CENTER, UiAlign.CENTER), - ) - } -} - -private fun diagnosticsSummary(diagnostics: List): String { - val errors = diagnostics.count { it.severity == UiTextDiagnosticSeverity.ERROR } - val warnings = diagnostics.count { it.severity == UiTextDiagnosticSeverity.WARNING } - return buildList { - if (errors > 0) add("$errors error${if (errors == 1) "" else "s"}") - if (warnings > 0) add("$warnings warning${if (warnings == 1) "" else "s"}") - if (isEmpty()) add("${diagnostics.size} message${if (diagnostics.size == 1) "" else "s"}") - }.joinToString(", ") -} - -private fun UiTextDiagnostic.locationLabel(): String { - return if (line > 0 && column > 0) "$line:$column" else "-" -} - -private fun UiTextDiagnostic.clipboardLine(): String = "${locationLabel()} ${severity.name}: $message" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt index 8dfc4fbe2..771b4ff16 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeLayoutStore.kt @@ -63,6 +63,7 @@ internal data class StoredDockLayout( val stripesVisible: Boolean = true, val bottomHeight: Float = DefaultBottomHeight, val bottomFraction: Float = 0.5f, + val sideSplit: Map = emptyMap(), ) /** @@ -119,6 +120,7 @@ internal fun DockingState.capture(): StoredDockLayout { stripesVisible = stripesVisible, bottomHeight = bottomHeight, bottomFraction = bottomFraction, + sideSplit = sideSplitFractions.toMap(), ) } @@ -150,6 +152,7 @@ internal fun DockingState.restore(layout: StoredDockLayout, resolve: (String) -> visible = layout.stripesVisible, bottomHeight = layout.bottomHeight, bottomFraction = layout.bottomFraction, + sideSplit = layout.sideSplit, ) return true } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeModel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeModel.kt index 2d98b34de..a3d1070e4 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeModel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeModel.kt @@ -8,6 +8,7 @@ import net.minecraft.client.Minecraft import ru.hollowhorizon.hollowengine.HollowEngine import ru.hollowhorizon.hollowengine.client.ui.docking.DockItem import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeReveal import ru.hollowhorizon.hollowengine.client.utils.IconHelper import ru.hollowhorizon.hollowengine.common.files.DirectoryManager import ru.hollowhorizon.hollowengine.common.files.DirectoryManager.fromReadablePath @@ -29,6 +30,10 @@ internal class HollowIdeModel( val selectedTreePaths = mutableStateListOf() var selectedTreePath by mutableStateOf("") private set + + /** A path the tree should scroll to, set by [revealPath] and dropped once the tree has done it. */ + var treeReveal by mutableStateOf(null) + private var revealRevision = 0 private val ioScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) private val pasteMutex = Mutex() private val pendingSaves = mutableMapOf() @@ -36,7 +41,7 @@ internal class HollowIdeModel( fun visibleTreeItems(filter: String, rootLabel: String): List> { return tree.visible(filter).map { node -> UiTreeItem( - id = node.path.ifEmpty { "root" }.replace('/', '-'), + id = treeItemId(node.path), label = if (node.path.isEmpty()) rootLabel else node.name, depth = node.depth, payload = node, @@ -78,8 +83,11 @@ internal class HollowIdeModel( fun revealPath(path: String) { tree.expandTo(path) selectPath(path) + treeReveal = UiTreeReveal(treeItemId(path), ++revealRevision) } + private fun treeItemId(path: String): String = path.ifEmpty { "root" }.replace('/', '-') + fun open(node: HollowIdeFileNode, additive: Boolean = false): HollowIdeOpenResult { select(node, additive) if (node.isDirectory) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt index 5c5862d71..284ee9788 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt @@ -141,8 +141,8 @@ object HollowIdeOverlay { ) private val packaging = HollowIdeProjectPackaging(model) { statusText = it } private val console = HollowIdeConsole() - private val diagnosticsPanels = mutableStateMapOf() - private val diagnosticsPanelHeights = mutableStateMapOf() + + private var activeEditorPath by mutableStateOf(null) private var editorAnalysisRevision by mutableStateOf(0) private val editorSessions = mutableMapOf() private val editorStates = mutableMapOf() @@ -592,8 +592,7 @@ object HollowIdeOverlay { dock.close(id) editorSessions.remove(path)?.close() editorStates.remove(path) - diagnosticsPanels.remove(id) - diagnosticsPanelHeights.remove(id) + if (activeEditorPath == path) activeEditorPath = null findStates.remove(path) if (colorPicker?.path == path) colorPicker = null if (fileContextMenu?.path == path) fileContextMenu = null @@ -687,6 +686,7 @@ object HollowIdeOverlay { @Composable private fun Content() { RememberLayout() + TrackActiveEditor() Box( id = "ide-root", modifier = Modifier.style("hollowengine:ui/styles/widgets.hss").style("hollowengine:ui/styles/ide.hss") @@ -726,13 +726,11 @@ object HollowIdeOverlay { id = "ide-dock", modifier = Modifier.size(100.percent, 0.px).grow(1f), tabBarActions = { item -> - when (item.id) { - ProjectTreeId -> HollowIdeProjectActions(packaging) - ConsoleId -> HollowIdeConsoleToolbar(console) - } + if (item.id == ProjectTreeId) HollowIdeProjectActions(packaging) }, content = { item -> DockContent(item) }, ) + StatusBar() } HollowIdeFileContextMenu( menu = fileContextMenu, @@ -763,6 +761,69 @@ object HollowIdeOverlay { } } + @Composable + private fun TrackActiveEditor() { + val focused = focusedFile()?.takeIf { it.textOrNull != null }?.path + LaunchedEffect(focused) { + if (focused != null) activeEditorPath = focused + } + } + + private fun activeEditorFile(): HollowIdeOpenFile? { + val file = activeEditorPath?.let { model.files[it] } ?: return null + return file.takeIf { it.textOrNull != null && dock.contains(it.id) } + } + + /** Brings up the Problems page on [file], wherever the bottom tool window is parked. */ + private fun showProblems(file: HollowIdeOpenFile) { + activeEditorPath = file.path + console.tab = ConsoleTab.PROBLEMS + dock.openToolWindow(HollowIdeToolWindows.Console, model) + } + + private fun currentProblems(): HollowIdeProblems { + val file = activeEditorFile() + val diagnostics = file?.let { editorSessions[it.path]?.diagnostics(it.text) }.orEmpty() + return HollowIdeProblems(file, diagnostics) { diagnostic -> + if (file != null) { + openFileDockItem(file) + focusEditorAt(file, diagnostic.start) + } + } + } + + private val statusNavigation = HollowIdeStatusNavigation( + revealInProject = { path -> + if (path.isNotEmpty()) model.revealPath(path) + dock.openToolWindow(HollowIdeToolWindows.Project, model) + }, + showWindow = { window -> dock.openToolWindow(window, model) }, + showInspectedSource = { + val window = if (IdeScenes.current != null) HollowIdeToolWindows.Scene else HollowIdeToolWindows.Inspector + dock.openToolWindow(window, model) + }, + ) + + @Composable + private fun StatusBar() { + val navigation = statusNavigation + val project = HollowIdeCrumb(packaging.properties.displayName, ProjectIcon) { navigation.revealInProject("") } + val focused = dock.focusedItemId + val selection = InspectorSelection.current + val treePath = model.selectedTreePath + val file = focusedFile() ?: activeEditorFile() + val status = when { + focused == ProjectTreeId && treePath.isNotEmpty() -> + HollowIdeStatus(pathCrumbs(project, treePath, null, navigation.revealInProject)) + + focused == InspectorId && selection != null -> inspectorStatus(project, selection, navigation) + file != null -> fileStatus(project, file, editorStates[file.path], navigation) + selection != null -> inspectorStatus(project, selection, navigation) + else -> HollowIdeStatus(listOf(project)) + } + HollowIdeStatusBar(status, statusText) + } + @Composable private fun GearButton() { var popup by remember { mutableStateOf(false) } @@ -841,7 +902,6 @@ object HollowIdeOverlay { HollowIdeGizmoSwitcher() } Box(modifier = Modifier.size(0.px, 100.percent).grow(1f)) - Text(statusText, tags = listOf("ide-status")) ToolbarIconButton( id = "ide-toolbar-search", icon = SearchIcon, @@ -921,7 +981,7 @@ object HollowIdeOverlay { onFocusFilter = ::requestSurfaceFocus, ) - ConsoleId -> HollowIdeConsolePanel(console) + ConsoleId -> HollowIdeConsolePanel(console, currentProblems()) TimelineId -> TimelineDock(keyboardActive = dock.focusedItemId == TimelineId) SceneId -> SceneDock() @@ -967,6 +1027,8 @@ object HollowIdeOverlay { onToggle = project::toggle, onSelect = project::select, fillRowWidth = false, + reveal = model.treeReveal, + onRevealed = { model.treeReveal = null }, filterState = projectFilter, filterPlaceholder = "hollowengine.message.filter".lang, onFilterOpened = ::requestSurfaceFocus, @@ -1036,9 +1098,6 @@ object HollowIdeOverlay { val editorState = editorState(file) val analysisRevision = editorAnalysisRevision.toLong() + editorSession.revision val diagnostics = editorSession.diagnostics(file.text) - LaunchedEffect(file.id, diagnostics.isEmpty()) { - if (diagnostics.isEmpty()) diagnosticsPanels.remove(file.id) - } val inlayHints = editorSession.inlayHints(file.text) val fontSize = HollowIdeFontSize.size val editorId = "editor-${file.id}" @@ -1101,18 +1160,7 @@ object HollowIdeOverlay { HollowIdeFontSize.zoom(event.rawScrollY) event.consume() }) - HollowIdeDiagnosticsBadge(file.id, diagnostics) { id -> - diagnosticsPanels[id] = diagnosticsPanels[id] != true - } - } - if (diagnostics.isNotEmpty() && diagnosticsPanels[file.id] == true) { - val height = diagnosticsPanelHeights[file.id] ?: DefaultDiagnosticsPanelHeight - HollowIdeDiagnosticsPanel(file.id, diagnostics, height) { id, requestedHeight -> - diagnosticsPanelHeights[id] = requestedHeight.coerceIn( - MinDiagnosticsPanelHeight, - MaxDiagnosticsPanelHeight, - ) - } + HollowIdeDiagnosticsBadge(file.id, diagnostics) { showProblems(file) } } } } @@ -1121,7 +1169,6 @@ object HollowIdeOverlay { private fun EmptyEditor() { Column(tags = listOf("ide-empty-editor")) { Text(EditorLang.EMPTY.lang, tags = listOf("ide-empty-title")) - Text(statusText, tags = listOf("ide-status")) } } @@ -1652,7 +1699,3 @@ private data class EditorColorPicker( val x: Float, val y: Float, ) - -private const val DefaultDiagnosticsPanelHeight = 160f -private const val MinDiagnosticsPanelHeight = 90f -private const val MaxDiagnosticsPanelHeight = 360f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProblemsPanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProblemsPanel.kt new file mode 100644 index 000000000..b596bd12c --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProblemsPanel.kt @@ -0,0 +1,181 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.key +import net.minecraft.client.Minecraft +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnostic +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnosticSeverity +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover +import ru.hollowhorizon.hollowengine.client.utils.IconHelper +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.generated.Assets + +/** + * What the Problems page reports on: the file edited last, its diagnostics, and where a click on + * one of them leads. + */ +internal class HollowIdeProblems( + val file: HollowIdeOpenFile?, + val diagnostics: List, + val onOpen: (UiTextDiagnostic) -> Unit, +) { + val errors: Int = diagnostics.count { it.severity == UiTextDiagnosticSeverity.ERROR } + val warnings: Int = diagnostics.count { it.severity == UiTextDiagnosticSeverity.WARNING } + + /** Colours a count by the worst thing in it. */ + val severityTag: String + get() = when { + errors > 0 -> "has-errors" + warnings > 0 -> "has-warnings" + else -> "has-infos" + } +} + +/** The editor's corner summary; a click brings up the Problems page. */ +@Composable +internal fun HollowIdeDiagnosticsBadge( + fileId: String, + diagnostics: List, + onOpen: () -> Unit, +) { + if (diagnostics.isEmpty()) return + val errors = diagnostics.count { it.severity == UiTextDiagnosticSeverity.ERROR } + val warnings = diagnostics.count { it.severity == UiTextDiagnosticSeverity.WARNING } + Row( + id = "diagnostics-badge-$fileId", + tags = listOf("ide-diagnostics-badge", if (errors > 0) "has-errors" else "has-warnings"), + modifier = Modifier.align(UiAlign.END, UiAlign.START) + .input(clickable = true, hoverable = true) + .cursor(UiCursorShape.HAND) + .tooltipOnHover(ProblemsLang.SHOW.lang) + .onClick { event -> + onOpen() + event.consume() + } + ) { + SeverityCounts(errors, warnings) + } +} + +@Composable +internal fun HollowIdeProblemsList(problems: HollowIdeProblems) { + val file = problems.file + if (file == null) { + ProblemsEmpty(ProblemsLang.NO_FILE.lang) + return + } + val diagnostics = problems.diagnostics + Row(tags = listOf("problems-file")) { + Image(IconHelper.forPath(file.path, false).toString(), tags = listOf("problems-file-icon")) + Text(file.title, tags = listOf("problems-file-name")) + SeverityCounts(problems.errors, problems.warnings) + Box(modifier = Modifier.size(0.px, 1.px).grow(1f)) + if (diagnostics.isNotEmpty()) { + CopyButton("problems-copy-all", ProblemsLang.COPY_ALL.lang) { + diagnostics.joinToString("\n", transform = UiTextDiagnostic::clipboardLine) + } + } + } + if (diagnostics.isEmpty()) { + ProblemsEmpty(ProblemsLang.NONE.lang) + return + } + Column( + tags = listOf("problems-list"), + modifier = Modifier.size(100.percent, 0.px).grow(1f).scrollable(), + ) { + diagnostics.forEachIndexed { index, diagnostic -> + key(index) { ProblemRow(index, diagnostic, problems.onOpen) } + } + } +} + +@Composable +private fun ProblemRow(index: Int, diagnostic: UiTextDiagnostic, onOpen: (UiTextDiagnostic) -> Unit) { + Row( + id = "problem-$index", + tags = listOf("problem-row", diagnostic.severity.name.lowercase()), + modifier = Modifier.input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) + .onClick { event -> + onOpen(diagnostic) + event.consume() + }, + ) { + Image(diagnostic.severity.icon, tags = listOf("problem-icon")) + Text( + diagnostic.message.lineSequence().first(), + tags = listOf("problem-message"), + modifier = Modifier.textWrap(false).textOverflow(UiTextOverflow.DOTS), + ) + Text(diagnostic.locationLabel(), tags = listOf("problem-location")) + CopyButton("problem-copy-$index", ProblemsLang.COPY.lang) { diagnostic.clipboardLine() } + } +} + +@Composable +private fun SeverityCounts(errors: Int, warnings: Int) { + if (errors > 0) { + Image(UiTextDiagnosticSeverity.ERROR.icon, tags = listOf("problem-count-icon")) + Text(errors.toString(), tags = listOf("problem-count", "has-errors")) + } + if (warnings > 0) { + Image(UiTextDiagnosticSeverity.WARNING.icon, tags = listOf("problem-count-icon")) + Text(warnings.toString(), tags = listOf("problem-count", "has-warnings")) + } +} + +@Composable +private fun ProblemsEmpty(message: String) { + Box(tags = listOf("problems-empty"), modifier = Modifier.size(100.percent, 0.px).grow(1f)) { + Text(message) + } +} + +@Composable +private fun CopyButton(id: String, tooltip: String, text: () -> String) { + Box( + id = id, + mode = UiBoxMode.STACK, + tags = listOf("problem-copy"), + modifier = Modifier.input(clickable = true, hoverable = true) + .cursor(UiCursorShape.HAND) + .onClick { event -> + Minecraft.getInstance().keyboardHandler.clipboard = text() + event.consume() + } + .tooltipOnHover(tooltip), + ) { + Image( + Assets.Hollowengine.Textures.Gui.Icons.COPY.toString(), + tags = listOf("problem-copy-icon"), + modifier = Modifier.align(UiAlign.CENTER, UiAlign.CENTER), + ) + } +} + +private val UiTextDiagnosticSeverity.icon: String + get() = when (this) { + UiTextDiagnosticSeverity.ERROR -> Assets.Hollowengine.Textures.Gui.Icons.ERROR.toString() + UiTextDiagnosticSeverity.WARNING -> Assets.Hollowengine.Textures.Gui.Icons.WARN.toString() + UiTextDiagnosticSeverity.INFO -> InfoIcon + } + +private fun UiTextDiagnostic.locationLabel(): String { + return if (line > 0 && column > 0) "$line:$column" else "-" +} + +private fun UiTextDiagnostic.clipboardLine(): String = "${locationLabel()} ${severity.name}: $message" + +private const val InfoIcon = "hollowengine:textures/gui/icons/info.svg" + +internal object ProblemsLang { + private const val ROOT = "hollowengine.gui.ide.problems." + + const val SHOW = ROOT + "show" + const val NO_FILE = ROOT + "no_file" + const val NONE = ROOT + "none" + const val COPY = ROOT + "copy" + const val COPY_ALL = ROOT + "copy_all" +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeStatusBar.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeStatusBar.kt new file mode 100644 index 000000000..bbd87a483 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeStatusBar.kt @@ -0,0 +1,148 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide + +import androidx.compose.runtime.Composable +import ru.hollowhorizon.hollowengine.HollowEngineBuild +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorTarget +import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow +import ru.hollowhorizon.hollowengine.client.ui.widgets.TextFieldState +import ru.hollowhorizon.hollowengine.client.utils.IconHelper +import ru.hollowhorizon.hollowengine.client.utils.lang + +/** One step of the status bar's path; [onClick] shows it where it lives, a panel or the project tree. */ +internal class HollowIdeCrumb(val label: String, val icon: String? = null, val onClick: (() -> Unit)? = null) + +/** Where the status bar's crumbs lead. */ +internal class HollowIdeStatusNavigation( + /** Selects [path] in the project tree, opening its folders and the tree itself; "" is the root. */ + val revealInProject: (path: String) -> Unit, + val showWindow: (HollowIdeToolWindow) -> Unit, + /** Where the thing the inspector shows came from, if anything is open to show it. */ + val showInspectedSource: () -> Unit, +) + +/** Where the user is, as the status bar tells it: a path on the left, facts about it on the right. */ +internal class HollowIdeStatus( + val crumbs: List, + val details: List = emptyList(), +) + +@Composable +internal fun HollowIdeStatusBar(status: HollowIdeStatus, message: String) { + Row(id = "ide-status-bar", modifier = Modifier.size(100.percent, StatusBarHeight.px)) { + Row(tags = listOf("ide-breadcrumbs"), modifier = Modifier.size(0.px, 100.percent).grow(1f).clip()) { + status.crumbs.forEachIndexed { index, crumb -> + if (index > 0) Box(tags = listOf("ide-breadcrumb-separator")) + Crumb(index, crumb, last = index == status.crumbs.lastIndex) + } + } + if (message.isNotEmpty()) { + Text( + message, + tags = listOf("ide-status-message"), + modifier = Modifier.textWrap(false).textOverflow(UiTextOverflow.DOTS), + ) + } + status.details.forEach { detail -> Text(detail, tags = listOf("ide-status-detail")) } + Text("HollowEngine ${HollowEngineBuild.VERSION}", tags = listOf("ide-status-detail", "version")) + } +} + +@Composable +private fun Crumb(index: Int, crumb: HollowIdeCrumb, last: Boolean) { + val onClick = crumb.onClick + Row( + id = "ide-breadcrumb-$index", + tags = listOfNotNull("ide-breadcrumb", "last".takeIf { last }, "link".takeIf { onClick != null }), + modifier = if (onClick == null) Modifier else Modifier.input(hoverable = true, clickable = true) + .cursor(UiCursorShape.HAND) + .onClick { event -> + onClick() + event.consume() + }, + ) { + crumb.icon?.let { icon -> Image(icon, tags = listOf("ide-breadcrumb-icon")) } + Text(crumb.label, tags = listOf("ide-breadcrumb-label"), modifier = Modifier.textWrap(false)) + } +} + +/** A file open in an editor: its place in the project, then the caret. */ +internal fun fileStatus( + project: HollowIdeCrumb, + file: HollowIdeOpenFile, + editor: TextFieldState?, + navigation: HollowIdeStatusNavigation, +): HollowIdeStatus { + val icon = IconHelper.forPath(file.path, false).toString() + val crumbs = if (file.virtual) { + val resources = HollowIdeCrumb(StatusLang.RESOURCES.lang, AssetManagerIcon) { + navigation.showWindow(HollowIdeToolWindows.AssetManager) + } + pathCrumbs(resources, file.path.removePrefix(ResourcePrefix), icon, reveal = null) + } else { + pathCrumbs(project, file.path, icon, navigation.revealInProject) + } + val details = buildList { + if (editor != null && file.textOrNull != null) add(caretLabel(editor.text, editor.caret)) + if (file.readOnly) add(StatusLang.READ_ONLY.lang) + } + return HollowIdeStatus(crumbs, details) +} + +/** Whatever the inspector is showing. */ +internal fun inspectorStatus( + project: HollowIdeCrumb, + target: InspectorTarget, + navigation: HollowIdeStatusNavigation, +): HollowIdeStatus { + val crumbs = listOfNotNull( + project, + HollowIdeCrumb(HollowIdeToolWindows.Inspector.title, OptionsIcon) { + navigation.showWindow(HollowIdeToolWindows.Inspector) + }, + HollowIdeCrumb(target.title, target.icon, navigation.showInspectedSource), + target.subtitle?.let { HollowIdeCrumb(it, onClick = navigation.showInspectedSource) }, + ) + return HollowIdeStatus(crumbs) +} + +/** + * [root], then each segment of [path]; only the last one, the target itself, gets [icon]. With + * [reveal], a click on a segment shows the folder or file it names. + */ +internal fun pathCrumbs( + root: HollowIdeCrumb, + path: String, + icon: String?, + reveal: ((String) -> Unit)?, +): List { + val segments = path.split('/').filter { it.isNotEmpty() } + return listOf(root) + segments.mapIndexed { index, segment -> + val prefix = segments.subList(0, index + 1).joinToString("/") + HollowIdeCrumb(segment, icon.takeIf { index == segments.lastIndex }, reveal?.let { { it(prefix) } }) + } +} + +/** The caret as a one-based line and column. */ +internal fun caretLabel(text: String, caret: Int): String { + val at = caret.coerceIn(0, text.length) + var line = 1 + var lineStart = 0 + for (index in 0 until at) { + if (text[index] != '\n') continue + line++ + lineStart = index + 1 + } + return StatusLang.CARET.lang(line, at - lineStart + 1) +} + +private const val StatusBarHeight = 20f +private const val ResourcePrefix = "resource://" + +internal object StatusLang { + private const val ROOT = "hollowengine.gui.ide.status." + + const val RESOURCES = ROOT + "resources" + const val READ_ONLY = ROOT + "read_only" + const val CARET = ROOT + "caret" +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt index b0c71fe29..4264fe3c8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt @@ -71,6 +71,7 @@ internal object HollowIdeToolWindows { anchors = listOf(ToolWindowAnchor.EDITORS, ToolWindowAnchor.PROJECT), minWidth = 180f, minHeight = 90f, + titleInToolbar = true, ) val Timeline = HollowIdeToolWindow( id = TimelineId, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt index 8c7dc8ccb..03dcdf148 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt @@ -5,10 +5,15 @@ import net.minecraft.client.Minecraft import org.apache.logging.log4j.spi.StandardLevel import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.docking.DockTags +import ru.hollowhorizon.hollowengine.client.ui.docking.LocalDockPanelTitle import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeConsoleFontSize +import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeProblems +import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeProblemsList import ru.hollowhorizon.hollowengine.client.ui.scroll.rememberScrollState import ru.hollowhorizon.hollowengine.client.ui.widgets.EditableTextField import ru.hollowhorizon.hollowengine.client.ui.widgets.TextFieldState +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiCodeFontFamily import ru.hollowhorizon.hollowengine.client.ui.widgets.UiCheckboxVariant import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdown import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem @@ -30,9 +35,65 @@ import java.time.format.DateTimeFormatter private const val LANG = "hollowengine.gui.console" -/** Level, filter and auto-scroll, shown in the dock's tab bar next to the console's tab. */ +/** + * The bottom tool window: the log with its command line, and the problems of the file being edited. + */ +@Composable +internal fun HollowIdeConsolePanel(console: HollowIdeConsole, problems: HollowIdeProblems) { + Column( + tags = listOf("ide-panel", "console-panel"), + modifier = Modifier.size(100.percent, 100.percent), + ) { + ConsoleHeader(console, problems) + when (console.tab) { + ConsoleTab.LOGS -> { + ConsoleLog(console) + ConsoleInput(console) + } + + ConsoleTab.PROBLEMS -> HollowIdeProblemsList(problems) + } + } +} + +@Composable +private fun ConsoleHeader(console: HollowIdeConsole, problems: HollowIdeProblems) { + val parked = LocalDockPanelTitle.current + Row(id = parked?.headerId, tags = listOf("tool-window-header"), modifier = parked?.dragHandle ?: Modifier) { + parked?.let { panel -> + panel.icon?.let { icon -> Image(icon, tags = listOf(DockTags.PinnedHeaderIcon)) } + Text(panel.title, tags = listOf(DockTags.PinnedHeaderLabel, "tool-window-title")) + } + ConsoleTab.entries.forEach { tab -> + ConsoleTabButton(console, tab, if (tab == ConsoleTab.PROBLEMS) problems else null) + } + Box(modifier = Modifier.size(0.px, 1.px).grow(1f)) + if (console.tab == ConsoleTab.LOGS) ConsoleToolbar(console) + } +} + +@Composable +private fun ConsoleTabButton(console: HollowIdeConsole, tab: ConsoleTab, problems: HollowIdeProblems?) { + Row( + id = "console-tab-${tab.name.lowercase()}", + tags = listOfNotNull("tool-window-tab", "selected".takeIf { console.tab == tab }), + modifier = Modifier.input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) + .onClick { event -> + console.tab = tab + event.consume() + }, + ) { + Text(tab.langKey.lang, tags = listOf("tool-window-tab-label")) + val count = problems?.diagnostics?.size ?: 0 + if (problems != null && count > 0) { + Text(count.toString(), tags = listOf("tool-window-tab-count", problems.severityTag)) + } + } +} + +/** Level, filter and auto-scroll of the log. */ @Composable -internal fun HollowIdeConsoleToolbar(console: HollowIdeConsole) { +private fun ConsoleToolbar(console: HollowIdeConsole) { var levelMenuExpanded by remember { mutableStateOf(false) } Row(tags = listOf("console-toolbar")) { UiDropdown( @@ -51,6 +112,7 @@ internal fun HollowIdeConsoleToolbar(console: HollowIdeConsole) { value = console.filterText, placeholder = "$LANG.filter_hint".lang, onChange = { console.filterText = it }, + textShadow = null, id = "console-filter", tags = listOf("console-filter"), modifier = Modifier.size(FilterWidth.px, 18.px), @@ -67,7 +129,7 @@ internal fun HollowIdeConsoleToolbar(console: HollowIdeConsole) { } @Composable -internal fun HollowIdeConsolePanel(console: HollowIdeConsole) { +private fun ConsoleLog(console: HollowIdeConsole) { var snapshot by remember { mutableStateOf(HollowLogStore.snapshot()) } val fontSize = HollowIdeConsoleFontSize.size @@ -86,7 +148,9 @@ internal fun HollowIdeConsolePanel(console: HollowIdeConsole) { val document = remember { ConsoleLogDocument() } val logState = remember { - TextFieldState(multiline = true, readOnly = true, autoPairs = false, indentSize = null, wrap = false) + TextFieldState( + multiline = true, readOnly = true, autoPairs = false, indentSize = null, wrap = false, textShadow = null, + ) } val revision = remember(visibleEntries) { document.sync(visibleEntries, ConsoleLogDocument.Key(minimumLevel, console.filterText)) @@ -109,33 +173,27 @@ internal fun HollowIdeConsolePanel(console: HollowIdeConsole) { } } - Column( - tags = listOf("ide-panel", "console-panel"), - modifier = Modifier.size(100.percent, 100.percent), - ) { - if (document.text.isEmpty()) { - Box(tags = listOf("console-empty"), modifier = Modifier.size(100.percent, 0.px).grow(1f)) { - Text("$LANG.empty".lang) - } - } else { - EditableTextField( - state = logState, - id = "console-log", - tags = listOf("console-log"), - scrollState = logScroll, - syntaxHighlighter = highlighter, - modifier = Modifier.size(100.percent, 0.px).grow(1f).onScroll { event -> - if (event.isCtrlDown()) { - HollowIdeConsoleFontSize.zoom(event.rawScrollY) - event.consume() - } else if (event.rawScrollY > 0f) { - console.autoScroll = false - } - }, - ) + if (document.text.isEmpty()) { + Box(tags = listOf("console-empty"), modifier = Modifier.size(100.percent, 0.px).grow(1f)) { + Text("$LANG.empty".lang) } - ConsoleInput(console) + return } + EditableTextField( + state = logState, + id = "console-log", + tags = listOf("console-log"), + scrollState = logScroll, + syntaxHighlighter = highlighter, + modifier = Modifier.size(100.percent, 0.px).grow(1f).onScroll { event -> + if (event.isCtrlDown()) { + HollowIdeConsoleFontSize.zoom(event.rawScrollY) + event.consume() + } else if (event.rawScrollY > 0f) { + console.autoScroll = false + } + }, + ) } @Composable @@ -180,6 +238,7 @@ private fun ConsoleInput(console: HollowIdeConsole) { autoPairs = kotlinMode, wrap = false, fontFamily = LogFontFamily, + textShadow = null, placeholder = when { kotlinMode -> "$LANG.kotlin_hint".lang connected -> "$LANG.command_hint".lang @@ -299,12 +358,12 @@ private class ConsoleLogDocument { private fun append(entry: HollowLogEntry) { if (builder.isNotEmpty()) builder.append('\n') val levelColors = ConsoleLevelColors.getValue(entry.level) - span(LogTimeFormatter.format(Instant.ofEpochMilli(entry.timeMillis)), MetaStyle) + span(LogTimeFormatter.format(Instant.ofEpochMilli(entry.timeMillis)), TimeStyle) builder.append(' ') span(entry.level.name.padEnd(LevelLabelWidth), levelColors.level) builder.append(' ') entry.loggerName?.let { logger -> - span(logger.substringAfterLast('.'), MetaStyle) + span(logger.substringAfterLast('.'), LoggerStyle) builder.append(' ') } span(entry.message.replace("\r\n", "\n").trimEnd(), levelColors.message) @@ -358,22 +417,24 @@ private val ConsoleLevels = listOf( ) private val MessageColor = UiColor.fromArgb(0xFFD7DEEA.toInt()) -private val MetaStyle = UiInlineStyle().withColor(UiColor.fromArgb(0xFF687588.toInt())) -private val ErrorColors = LevelColors(UiColor.fromArgb(0xFFFF8787.toInt()), UiColor.fromArgb(0xFFFF8787.toInt())) +private val QuietMessageColor = UiColor.fromArgb(0xFFA9B3C4.toInt()) +private val TimeStyle = UiInlineStyle().withColor(UiColor.fromArgb(0xFF4F5968.toInt())) +private val LoggerStyle = UiInlineStyle().withColor(UiColor.fromArgb(0xFF7A8698.toInt())) +private val ErrorColors = LevelColors(UiColor.fromArgb(0xFFF07878.toInt()), UiColor.fromArgb(0xFFF29A9A.toInt())) private val ConsoleLevelColors = mapOf( StandardLevel.OFF to LevelColors(MessageColor, MessageColor), StandardLevel.FATAL to ErrorColors, StandardLevel.ERROR to ErrorColors, - StandardLevel.WARN to LevelColors(UiColor.fromArgb(0xFFFFC266.toInt()), UiColor.fromArgb(0xFFFFC266.toInt())), - StandardLevel.INFO to LevelColors(UiColor.fromArgb(0xFF82D99B.toInt()), MessageColor), - StandardLevel.DEBUG to LevelColors(UiColor.fromArgb(0xFF78A8FF.toInt()), MessageColor), - StandardLevel.TRACE to LevelColors(UiColor.fromArgb(0xFF7F8A9D.toInt()), UiColor.fromArgb(0xFF7F8A9D.toInt())), + StandardLevel.WARN to LevelColors(UiColor.fromArgb(0xFFE6B35A.toInt()), UiColor.fromArgb(0xFFE8CA92.toInt())), + StandardLevel.INFO to LevelColors(UiColor.fromArgb(0xFF7CC49A.toInt()), MessageColor), + StandardLevel.DEBUG to LevelColors(UiColor.fromArgb(0xFF6E8FBF.toInt()), QuietMessageColor), + StandardLevel.TRACE to LevelColors(UiColor.fromArgb(0xFF5F6A7B.toInt()), UiColor.fromArgb(0xFF7A8698.toInt())), StandardLevel.ALL to LevelColors(MessageColor, MessageColor), ) private val LogTimeFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss") .withZone(ZoneId.systemDefault()) -private const val LogFontFamily = "hollowengine:fonts/monocraft" +private const val LogFontFamily = UiCodeFontFamily private const val LevelLabelWidth = 5 private const val FilterWidth = 140f private const val AutoScrollLayoutFrames = 2 diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt index 621fbeb46..ee5ba9947 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt @@ -17,10 +17,16 @@ internal enum class ConsoleInputMode(val langKey: String) { COMMAND("hollowengine.gui.console.mode.command"), KOTLIN("hollowengine.gui.console.mode.kotlin"), } +/** The pages of the bottom tool window. */ +internal enum class ConsoleTab(val langKey: String) { + LOGS("hollowengine.gui.console.tab.logs"), PROBLEMS("hollowengine.gui.console.tab.problems"), +} + /** * The console's state, kept by the IDE rather than by the panel's composition. */ internal class HollowIdeConsole { + var tab by mutableStateOf(ConsoleTab.LOGS) var minimumLevel by mutableStateOf(StandardLevel.DEBUG) var filterText by mutableStateOf("") var autoScroll by mutableStateOf(true) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt index 870949862..f5c3eb3b1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt @@ -52,12 +52,14 @@ internal fun TimelineToolbar( ) { var menuOpen by remember { mutableStateOf(false) } + val parked = LocalDockPanelTitle.current Row( - id = "cutscene-timeline-toolbar", + id = parked?.headerId ?: "cutscene-timeline-toolbar", modifier = Modifier.size(100.percent, 28.px).alignItems(vertical = UiAlign.CENTER) - .background(TimelineColors.Panel).border(1.px, TimelineColors.Border).padding(6.px, 0.px).gap(4.px), + .background(TimelineColors.Panel).border(1.px, TimelineColors.Border).padding(6.px, 0.px).gap(4.px) + .then(parked?.dragHandle ?: Modifier), ) { - LocalDockPanelTitle.current?.let { panel -> + parked?.let { panel -> panel.icon?.let { icon -> Image(icon, tags = listOf(DockTags.PinnedHeaderIcon)) } Text(panel.title, tags = listOf(DockTags.PinnedHeaderLabel), modifier = Modifier.textWrap(false)) TimelineSeparator() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt index 99379c5c4..4dafa75cb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/Inspector.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.remember import androidx.compose.runtime.snapshotFlow +import ru.hollowhorizon.hollowengine.client.ui.Box import ru.hollowhorizon.hollowengine.client.ui.Column import ru.hollowhorizon.hollowengine.client.ui.HollowUiContent import ru.hollowhorizon.hollowengine.client.ui.Image @@ -97,7 +98,12 @@ fun InspectorPanel( } if (target == null) { - if (empty.isNotEmpty()) Text(empty, tags = listOf("insp-empty")) + if (empty.isNotEmpty()) { + Column(tags = listOf("insp-empty-state")) { + Box(tags = listOf("insp-empty-icon")) + Text(empty, tags = listOf("insp-empty")) + } + } return@Column } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt index 4e0ffdc1b..149796ecf 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt @@ -116,6 +116,8 @@ private class WordPiece( val sourceStart: Int = 0, /** Resolved font family the word was measured with (needed to re-measure when splitting). */ val fontFamily: String? = null, + /** The size it was measured at; [height] is the font's line, which is taller. */ + val fontSize: Float = height, ) : Piece() private class SpacePiece( @@ -297,6 +299,7 @@ private fun tokenizeSpanWords(span: SpanNode, style: UiComputedStyle, group: Gro val effects = style.textEffects val inlineStyle = UiInlineStyle(effects = effects) val spaceWidth = style.spaceWidth ?: UiTextLayouter.measureStyledTextWidth(" ", fontSize, fontFamily, inlineStyle) + val height = UiTextFonts.resolve(fontFamily).lineHeight(fontSize) val preserve = style.whitespace == UiWhitespace.PRESERVE val text = span.text var wordStart = -1 @@ -304,7 +307,10 @@ private fun tokenizeSpanWords(span: SpanNode, style: UiComputedStyle, group: Gro if (wordStart < 0) return val wordText = text.substring(wordStart, end) val width = UiTextLayouter.measureStyledTextWidth(wordText, fontSize, fontFamily, inlineStyle) - out += WordPiece(wordText, inlineStyle, width, fontSize, group, sourceStart = wordStart, fontFamily = fontFamily) + out += WordPiece( + wordText, inlineStyle, width, height, group, + sourceStart = wordStart, fontFamily = fontFamily, fontSize = fontSize, + ) wordStart = -1 } for (index in text.indices) { @@ -318,9 +324,9 @@ private fun tokenizeSpanWords(span: SpanNode, style: UiComputedStyle, group: Gro ch.isInlineWhitespace() -> { flush(index) if (preserve) { - out += SpacePiece(spaceWidth, fontSize, group, preserve = true, sourceStart = index) + out += SpacePiece(spaceWidth, height, group, preserve = true, sourceStart = index) } else if (out.lastOrNull() !is SpacePiece) { - out += SpacePiece(spaceWidth, fontSize, group, sourceStart = index) + out += SpacePiece(spaceWidth, height, group, sourceStart = index) } } @@ -447,14 +453,16 @@ private fun breakIntoLines(pieces: List, wrapWidth: Float, wrap: Boolean) /** Splits a word wider than [width] into glyph-boundary chunks, keeping source offsets intact. */ private fun splitOversizedWordPiece(word: WordPiece, width: Float): List { - fun measure(text: String) = UiTextLayouter.measureStyledTextWidth(text, word.height, word.fontFamily, word.style) + fun measure(text: String) = UiTextLayouter.measureStyledTextWidth(text, word.fontSize, word.fontFamily, word.style) val chunks = mutableListOf() val buffer = StringBuilder() var chunkStart = word.sourceStart fun flush() { if (buffer.isEmpty()) return val text = buffer.toString() - chunks += WordPiece(text, word.style, measure(text), word.height, word.group, chunkStart, word.fontFamily) + chunks += WordPiece( + text, word.style, measure(text), word.height, word.group, chunkStart, word.fontFamily, word.fontSize, + ) chunkStart += text.length buffer.setLength(0) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt index 892352792..20e0c48db 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt @@ -6,8 +6,10 @@ import ru.hollowhorizon.hollowengine.client.ui.style.UiFilterChain import ru.hollowhorizon.hollowengine.client.ui.style.UiShadow import ru.hollowhorizon.hollowengine.client.ui.text.UiGlyphAtlasPage import java.nio.FloatBuffer +import kotlin.math.PI import kotlin.math.abs import kotlin.math.min +import kotlin.math.roundToInt internal class UiAnalyticRectBatch { private val instances = UiFloatArrayBuilder() @@ -89,8 +91,10 @@ internal class UiAnalyticRectBatch { paintEncoder.append(borderPaint, command.opacity, command.filter, width, height) } val radius = command.border.radius.coerceIn(0f, min(width, height) * 0.5f) + val dash = command.border.dash?.takeIf { !it.isSolid && borderWidth > 0f } + ?.let { borderDashPattern(width, height, radius, borderWidth, it) } records.add(width, height, radius, borderWidth) - records.add(paintIndex.toFloat(), borderPaintIndex.toFloat(), 0f, 0f) + records.add(paintIndex.toFloat(), borderPaintIndex.toFloat(), dash?.period ?: 0f, -(dash?.length ?: 0f)) records.add(borderColor.red, borderColor.green, borderColor.blue, borderColor.alpha) records.add(clip.minX, clip.minY, clip.maxX, clip.maxY) appendInstance(transform, 0f, 0f, width, height) @@ -233,6 +237,27 @@ internal class UiAnalyticRectBatch { } } +/** A dash pattern fitted to one border: [period] divides its centre line into whole repeats. */ +internal class UiBorderDashPattern(val period: Float, val length: Float) + +internal fun borderDashPattern( + width: Float, + height: Float, + radius: Float, + borderWidth: Float, + dash: UiBorderDash, +): UiBorderDashPattern { + val inset = borderWidth * 0.5f + val halfWidth = width * 0.5f - inset + val halfHeight = height * 0.5f - inset + val centreRadius = (radius - inset).coerceIn(0f, min(halfWidth, halfHeight)) + val perimeter = 4f * (halfWidth - centreRadius) + 4f * (halfHeight - centreRadius) + 2f * PI.toFloat() * centreRadius + val repeat = dash.length + dash.gap + val count = (perimeter / repeat).roundToInt().coerceAtLeast(1) + val period = perimeter / count + return UiBorderDashPattern(period, period * dash.length / repeat) +} + /** * An axis-aligned clip rectangle in the batch's effective (pre-projection) screen space, encoded * per primitive so the fragment shader can discard out-of-bounds pixels, replacing the GL scissor diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiLayoutScroll.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiLayoutScroll.kt index a90d9f033..9b2ea9eb5 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiLayoutScroll.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiLayoutScroll.kt @@ -37,6 +37,9 @@ internal fun applyScrollRanges( internal class ScrollbarCache { private val byContainer = WeakHashMap>() + fun hoverProgress(container: UiNode, orientation: ScrollbarOrientation, nowNanos: Long): Float = + byContainer[container]?.get(orientation)?.hoverProgress(nowNanos) ?: 0f + fun scrollbar(container: UiNode, orientation: ScrollbarOrientation): ScrollbarNode { val map = byContainer.getOrPut(container) { mutableMapOf() } return map.getOrPut(orientation) { @@ -52,23 +55,27 @@ internal fun placeScrollbarNodes( ): Map> { var scrollbars: HashMap>? = null var additions: ArrayList? = null + var easing: ArrayList? = null + val now = System.nanoTime() for ((container, containerLayout) in layouts) { val spec = container.scrollSpec() ?: continue val style = container.resolvedSnapshot - val geometry = scrollbarGeometry(spec, style, containerLayout) + val geometry = scrollbarGeometry(spec, style, containerLayout) { cache.hoverProgress(container, it, now) } if (geometry.isEmpty()) continue val bars = ArrayList(geometry.size) val pending = additions ?: ArrayList().also { additions = it } for (geom in geometry) { val bar = cache.scrollbar(container, geom.orientation) - bar.applyPartStyles(style.scrollbar) + bar.applyPartStyles(style.scrollbar, bar.hoverProgress(now)) pending += scrollbarPartLayout(bar, geom.track, containerLayout) pending += scrollbarPartLayout(bar.thumb, geom.thumb, containerLayout) bars += bar + if (bar.isEasing(now)) (easing ?: ArrayList().also { easing = it }) += bar } (scrollbars ?: HashMap>().also { scrollbars = it })[container] = bars } additions?.forEach { layouts[it.node] = it } + easing?.forEach { it.layoutState.invalidateLayout() } return scrollbars ?: emptyMap() } @@ -96,11 +103,12 @@ private fun scrollbarGeometry( spec: UiScrollSpec, style: UiComputedStyle, layoutNode: UiLayoutNode, + hover: (ScrollbarOrientation) -> Float, ): List { val rect = layoutNode.rect val scrollArea = layoutNode.scrollArea - val vertical = style.scrollbar.resolved(scrollArea.width) - val horizontal = style.scrollbar.resolved(scrollArea.height) + val vertical = style.scrollbar.resolved(scrollArea.width, hover(ScrollbarOrientation.VERTICAL)) + val horizontal = style.scrollbar.resolved(scrollArea.height, hover(ScrollbarOrientation.HORIZONTAL)) val hasVertical = spec.verticalScrollbar && vertical.isVisible && layoutNode.scrollRange.y > ScrollOverflowEpsilon && scrollArea.height > vertical.thickness val hasHorizontal = spec.horizontalScrollbar && horizontal.isVisible && @@ -112,7 +120,8 @@ private fun scrollbarGeometry( val trackLength = scrollArea.height - vertical.margin * 2f - if (hasHorizontal) horizontal.gutter else 0f if (trackLength > 0f) { val track = UiRect( - x = rect.width - vertical.thickness - vertical.margin, + x = if (vertical.atStart) scrollArea.x - rect.x + vertical.margin + else rect.width - vertical.thickness - vertical.margin, y = scrollArea.y - rect.y + vertical.margin, width = vertical.thickness, height = trackLength, @@ -131,7 +140,8 @@ private fun scrollbarGeometry( if (trackLength > 0f) { val track = UiRect( x = scrollArea.x - rect.x + horizontal.margin, - y = rect.height - horizontal.thickness - horizontal.margin, + y = if (horizontal.atStart) scrollArea.y - rect.y + horizontal.margin + else rect.height - horizontal.thickness - horizontal.margin, width = trackLength, height = horizontal.thickness, ) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbar.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbar.kt index 78dcc1ddf..2099d50d1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbar.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbar.kt @@ -19,6 +19,33 @@ class ScrollbarNode( ) : BaseUiNode(UiScrollbarType, id = null, tags = listOf(orientation.tagName)) { val thumb: ScrollbarThumbNode = ScrollbarThumbNode(orientation) + /** + * Under the pointer or being dragged, set by the input controller. + */ + internal var engaged: Boolean = false + set(value) { + if (field == value) return + val now = System.nanoTime() + progressAtChange = hoverProgress(now) + changedAtNanos = now + field = value + layoutState.invalidateLayout() + } + + private var progressAtChange = 0f + private var changedAtNanos = 0L + + /** How far into its hover look the scrollbar is at [nowNanos], eased, 0 at rest and 1 engaged. */ + internal fun hoverProgress(nowNanos: Long): Float { + val target = if (engaged) 1f else 0f + val t = ((nowNanos - changedAtNanos) / HoverTransitionNanos).coerceIn(0f, 1f) + val eased = 1f - (1f - t) * (1f - t) + return progressAtChange + (target - progressAtChange) * eased + } + + /** Whether [hoverProgress] is still on its way, so the next frame has to lay the bar out again. */ + internal fun isEasing(nowNanos: Long): Boolean = nowNanos - changedAtNanos < HoverTransitionNanos + private var appliedTrack: UiScrollbarPartStyle? = null private var appliedThumb: UiScrollbarPartStyle? = null @@ -30,19 +57,29 @@ class ScrollbarNode( } /** Re-resolves the two part styles, skipping the work while the container's styling is unchanged. */ - internal fun applyPartStyles(style: UiScrollbarStyle) { + internal fun applyPartStyles(style: UiScrollbarStyle, hover: Float) { if (appliedTrack != style.track) { appliedTrack = style.track resolvedSnapshot = ScrollbarDefaultStyles.resolvePart(style.track, ScrollbarDefaultStyles.TrackPaint, false) } - if (appliedThumb != style.thumb) { - appliedThumb = style.thumb + val hoverPaint = style.thumbHover.paint + val thumbPart = when { + hover <= 0f || hoverPaint == null -> style.thumb + hover >= 1f -> style.thumb.merge(style.thumbHover) + else -> style.thumb.copy( + paint = interpolatePaint(style.thumb.paint ?: ScrollbarDefaultStyles.ThumbPaint, hoverPaint, hover), + ) + } + if (appliedThumb != thumbPart) { + appliedThumb = thumbPart thumb.resolvedSnapshot = - ScrollbarDefaultStyles.resolvePart(style.thumb, ScrollbarDefaultStyles.ThumbPaint, true) + ScrollbarDefaultStyles.resolvePart(thumbPart, ScrollbarDefaultStyles.ThumbPaint, true) } } } +private const val HoverTransitionNanos = 90_000_000f + class ScrollbarThumbNode( val orientation: ScrollbarOrientation, ) : BaseUiNode(UiScrollbarThumbType, id = null, tags = listOf(orientation.tagName)) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt index 26eea964e..0cd40a871 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt @@ -12,6 +12,7 @@ import ru.hollowhorizon.hollowengine.client.ui.scrollHandle */ internal data class UiScrollbarDragState( val node: UiNode, + val scrollbar: ScrollbarNode, val handle: UiScrollHandle, val orientation: ScrollbarOrientation, val track: UiRect, @@ -86,6 +87,7 @@ private inline fun scrollbarDragState( val local = inverse.transform(mouseX, mouseY, 0f) return UiScrollbarDragState( node = container, + scrollbar = scrollbar, handle = handle, orientation = scrollbar.orientation, track = trackRel, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt index e676d13a3..ea05b904a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt @@ -1,6 +1,7 @@ package ru.hollowhorizon.hollowengine.client.ui.style import ru.hollowhorizon.hollowengine.client.ui.UiBorder +import ru.hollowhorizon.hollowengine.client.ui.UiBorderDash import ru.hollowhorizon.hollowengine.client.ui.UiInsets import ru.hollowhorizon.hollowengine.client.ui.UiLength import ru.hollowhorizon.hollowengine.client.ui.UiTransform @@ -82,6 +83,20 @@ internal fun visualHssProperties(): List = hssProperties { borderEdge("border-bottom", "bottom") { insets, width -> insets.copy(bottom = width) } borderEdge("border-left", "left") { insets, width -> insets.copy(left = width) } + property( + "border-dash", + summary = "Dashes the border: dash length, then the gap after it. A zero length draws it solid.", + syntax = syntax( + slot("dash", HssValueKind.PIXELS), + slot("gap", HssValueKind.PIXELS, optional = true), + ), + examples = listOf("4px 3px", "6px", "0px"), + ) { + val parts = value.trim().split(Regex("\\s+")) + val length = parseScalar(parts[0]) + set(UiProps.BorderDash, UiBorderDash(length, parts.getOrNull(1)?.let(::parseScalar) ?: length)) + } + property( "border-radius", summary = "Corner radius of the background, border and clip.", diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt index 63f2bf471..582e61d5f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt @@ -41,6 +41,31 @@ internal fun widgetHssProperties(): List = hssProperties { syntax = syntax(slot("overlay", HssValueKind.BOOLEAN)), ) { style { it.scrollbar = it.scrollbarStyle().copy(overlay = parseBoolean(value)) } } + property( + "scrollbar-hover-thickness", + summary = "Thickness an overlay scrollbar grows to under the pointer or while dragged.", + syntax = syntax(sizeSlot("thickness", auto = false)), + examples = listOf("6px", "8px"), + ) { style { it.scrollbar = it.scrollbarStyle().copy(hoverThickness = parseLength(value)) } } + + property( + "scrollbar-thumb-hover", + summary = "Fill of the scrollbar thumb under the pointer or while dragged.", + syntax = syntax(slot("paint", HssValueKind.PAINT)), + ) { + style { patch -> + val current = patch.scrollbarStyle() + patch.scrollbar = current.copy(thumbHover = current.thumbHover.copy(paint = parsePaint(value))) + } + } + + property( + "scrollbar-side", + summary = "Edge an overlay scrollbar sits on: `end` (right, bottom) or `start` (left, top).", + syntax = syntax(keywordSlot("side", "start", "end")), + examples = listOf("start", "end"), + ) { style { it.scrollbar = it.scrollbarStyle().copy(atStart = value.trim() == "start") } } + property( "scrollbar-track", summary = "Fill of the scrollbar track.", diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleProps.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleProps.kt index 2e587b910..786bdcdde 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleProps.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleProps.kt @@ -120,6 +120,7 @@ object UiProps { interpolate = ::interpolatePaint, ) val BorderRadius = prop("border-radius", 0f) + val BorderDash = prop("border-dash", null) // Visuals val Background = prop( @@ -265,13 +266,15 @@ var UiStylePatch.border: UiBorder? val width = this[UiProps.BorderWidth] val paint = this[UiProps.BorderPaint] val radius = this[UiProps.BorderRadius] - if (width == null && paint == null && radius == null) return null - return UiBorder(width ?: UiInsets.Zero, paint ?: UiPaint.None, radius ?: 0f) + val dash = this[UiProps.BorderDash] + if (width == null && paint == null && radius == null && dash == null) return null + return UiBorder(width ?: UiInsets.Zero, paint ?: UiPaint.None, radius ?: 0f, dash) } set(value) { this[UiProps.BorderWidth] = value?.width this[UiProps.BorderPaint] = value?.paint this[UiProps.BorderRadius] = value?.radius + this[UiProps.BorderDash] = value?.dash } var UiStylePatch.background by UiProps.Background var UiStylePatch.foreground by UiProps.Foreground @@ -397,7 +400,12 @@ val UiComputedStyle.grow by UiProps.Grow val UiComputedStyle.position by UiProps.Position val UiComputedStyle.border: UiBorder - get() = UiBorder(this[UiProps.BorderWidth], this[UiProps.BorderPaint], this[UiProps.BorderRadius]) + get() = UiBorder( + this[UiProps.BorderWidth], + this[UiProps.BorderPaint], + this[UiProps.BorderRadius], + this[UiProps.BorderDash], + ) val UiComputedStyle.background by UiProps.Background val UiComputedStyle.foreground by UiProps.Foreground val UiComputedStyle.image by UiProps.Image diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleValues.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleValues.kt index b8eda7b24..9eceac20f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleValues.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStyleValues.kt @@ -190,23 +190,32 @@ data class UiScrollbarStyle( val margin: UiLength? = null, val minThumbSize: UiLength? = null, val overlay: Boolean? = null, + val atStart: Boolean? = null, val track: UiScrollbarPartStyle = UiScrollbarPartStyle(), val thumb: UiScrollbarPartStyle = UiScrollbarPartStyle(), + val thumbHover: UiScrollbarPartStyle = UiScrollbarPartStyle(), + val hoverThickness: UiLength? = null, ) { fun merge(other: UiScrollbarStyle): UiScrollbarStyle = UiScrollbarStyle( thickness = other.thickness ?: thickness, margin = other.margin ?: margin, minThumbSize = other.minThumbSize ?: minThumbSize, overlay = other.overlay ?: overlay, + atStart = other.atStart ?: atStart, track = track.merge(other.track), thumb = thumb.merge(other.thumb), + thumbHover = thumbHover.merge(other.thumbHover), + hoverThickness = other.hoverThickness ?: hoverThickness, ) - fun resolved(reference: Float): ResolvedUiScrollbarStyle { - val resolvedThickness = (thickness ?: DefaultThickness).resolve(reference).coerceAtLeast(0f) - if (resolvedThickness <= 0f) return HiddenScrollbar + fun resolved(reference: Float, hover: Float = 0f): ResolvedUiScrollbarStyle { + val base = (thickness ?: DefaultThickness).resolve(reference).coerceAtLeast(0f) + if (base <= 0f) return HiddenScrollbar + val full = hoverThickness?.takeIf { hover > 0f && overlay == true }?.resolve(reference)?.coerceAtLeast(base) + val resolvedThickness = full?.let { base + (it - base) * hover.coerceIn(0f, 1f) } ?: base return ResolvedUiScrollbarStyle( overlay = overlay == true, + atStart = overlay == true && atStart == true, thickness = resolvedThickness, margin = (margin ?: DefaultMargin).resolve(reference).coerceAtLeast(0f), minThumbSize = (minThumbSize ?: DefaultMinThumbSize).resolve(reference).coerceAtLeast(1f), @@ -222,6 +231,7 @@ data class UiScrollbarStyle( private val HiddenScrollbar = ResolvedUiScrollbarStyle( overlay = false, + atStart = false, thickness = 0f, margin = 0f, minThumbSize = 1f, @@ -249,6 +259,7 @@ data class UiScrollbarPartStyle( data class ResolvedUiScrollbarStyle( val overlay: Boolean, + val atStart: Boolean, val thickness: Float, val margin: Float, val minThumbSize: Float, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiCodeEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiCodeEditor.kt index 031cf23a5..66aa0f18b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiCodeEditor.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiCodeEditor.kt @@ -23,8 +23,8 @@ fun UiCodeEditor( completionRevision: Long = inlayRevision, readOnly: Boolean = false, fontSize: Float = DefaultUiFontSize, - fontFamily: String? = CodeEditorFontFamily, - textShadow: Shadow? = CodeEditorTextShadow, + fontFamily: String? = UiCodeFontFamily, + textShadow: Shadow? = null, state: TextFieldState? = null, id: String? = null, tags: Iterable = emptyList(), @@ -70,9 +70,9 @@ fun UiCodeEditor( ) } -private const val CodeEditorFontFamily = "hollowengine:fonts/monocraft" +/** The font of code and logs; the rest of the interface keeps the game's own. */ +const val UiCodeFontFamily = "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf" -private val CodeEditorTextShadow = Shadow(offsetX = 0f, offsetY = 1f, blur = 2f, color = UiColor(1f, 1f, 1f, 0.4f)) private val CodeEditorCaretColor = UiColor(0.941f, 0.965f, 1f, 1f) private val CodeEditorSelectionColor = UiColor(0.373f, 0.549f, 0.804f, 0.46f) private val CodeEditorLineNumberColor = UiColor(0.333f, 0.376f, 0.439f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt index bdfe8d4c3..657908a61 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt @@ -50,6 +50,8 @@ internal class EditableFieldLayout( internal val lineInputs: Array = arrayOfNulls(lines.size), /** Multi-line editors keep one line of overscroll past the last row; single-line fields don't. */ private val verticalOverscroll: Boolean = true, + /** Height of one unwrapped line in the field's font; the caret spans it. */ + val lineHeight: Float = fontSize, ) { private val trailingMargin = if (verticalOverscroll) fontSize else 0f val height: Float get() = (offsets.lastOrNull() ?: 0f) + trailingMargin @@ -362,6 +364,7 @@ internal fun computeEditableFieldLayout( lines, offsets, layouts, fontSize, fontFamily, contentWidth, naturalWidth, hintsById, inlayRevision, inlayHints.mapTo(HashSet(inlayHints.size)) { it.offset }, layoutWidth, lineInputs, verticalOverscroll = multiline, + lineHeight = uniformHeight, ) } @@ -970,7 +973,7 @@ private fun EditableFieldRow( val caret = layout.caretAt(range.position, range.inlayAffinity) key("caret", caretIndex) { Box( - modifier = Modifier.position(caret.x.px, caret.y.px).size(TextFieldCaretWidth.px, fontSize.px) + modifier = Modifier.position(caret.x.px, caret.y.px).size(TextFieldCaretWidth.px, layout.lineHeight.px) .background(state.caretColor).layer(1).animation( UiCaretBlinkKeyframes, UiCaretBlinkPeriodMillis, iterationCount = Float.POSITIVE_INFINITY ), diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt index 7a749464e..32f51c860 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt @@ -241,10 +241,7 @@ private fun CodeInsightText( CodeInsightSpans(text, segments) } else { CodeInsightSpans(text, segments.subList(0, firstActive)) - Text( - tags = listOf("ide-active-parameter"), - modifier = Modifier.background(CodeInsightActiveParameter), - ) { + Text(tags = listOf("ide-active-parameter")) { CodeInsightSpans(text, segments.subList(firstActive, lastActive + 1)) } CodeInsightSpans(text, segments.subList(lastActive + 1, segments.size)) @@ -312,9 +309,6 @@ private fun codeInsightPopupModifier(layout: EditableFieldLayout, viewport: UiRe val maxWidth = (viewport.width - CodeInsightViewportMargin * 2f).coerceAtLeast(1f) return Modifier.size(UiLength.Fit, UiLength.Fit) .maxSize(width = maxWidth.px) - .padding(8.px) - .background(CodeInsightBackground) - .border(1.px, CodeInsightBorder, 4f) .clip() .scrollable(vertical = true, horizontal = false, hasHorizontalScrollbar = false) .fontSize(layout.fontSize) @@ -325,7 +319,4 @@ private const val EditorHoverDelayMillis = 1_000L private const val CodeInsightPopupGap = 5f private const val CodeInsightViewportMargin = 8f private const val CodeInsightMaxVisibleSignatures = 6 -private val CodeInsightBackground = parseColor("#24272E") -private val CodeInsightBorder = parseColor("#3B404A") -private val CodeInsightActiveParameter = parseColor("#334A63") private val CodeInsightDocumentation = parseColor("#A9B7C6") diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt index 85f04afae..0dbdf62c8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt @@ -11,6 +11,7 @@ import ru.hollowhorizon.hollowengine.client.ui.style.UiGradientStop import ru.hollowhorizon.hollowengine.client.ui.style.UiTransition import ru.hollowhorizon.hollowengine.client.ui.style.parseColor import ru.hollowhorizon.hollowengine.client.ui.text.UiTextLayouter +import ru.hollowhorizon.hollowengine.client.utils.lang import ru.hollowhorizon.hollowengine.generated.Assets import ru.hollowhorizon.hollowengine.common.scripting.ide.TokenType import kotlin.math.floor @@ -24,6 +25,7 @@ internal data class EditableFieldCompletionGeometry( val listHeight: Float, val rowHeight: Float, val visibleRows: Int, + val footerHeight: Float, ) internal fun editableFieldCompletionGeometry( @@ -85,11 +87,12 @@ internal fun editableFieldCompletionGeometry( width += UiTextLayouter.measureTextWidth(item.detail, fontSize, fontFamily) + CompletionPopupTextGap } if (item.tail.isNotBlank()) { - width += UiTextLayouter.measureTextWidth(item.tail, fontSize, fontFamily) + CompletionPopupTextGap + width += UiTextLayouter.measureTextWidth(item.tail, fontSize * CompletionTailScale, fontFamily) + + CompletionPopupTextGap } width } ?: 0f - val availableWidth = (viewportWidth - CompletionPopupViewportMargin * 2f).coerceAtLeast(1f) + val availableWidth = (viewportWidth - CompletionPopupViewportMargin * 2f).coerceIn(1f, CompletionPopupMaxWidth) val minWidth = minOf(CompletionPopupMinWidth, availableWidth) val width = (labelWidth + CompletionPopupRowChrome).coerceIn(minWidth, availableWidth) val x = caretX.coerceIn( @@ -101,7 +104,28 @@ internal fun editableFieldCompletionGeometry( useBelow -> belowY else -> caretY - height - CompletionPopupAnchorGap } - return EditableFieldCompletionGeometry(x, y, width, height, listHeight, rowHeight, visibleRows) + return EditableFieldCompletionGeometry(x, y, width, height, listHeight, rowHeight, visibleRows, footerHeight) +} + +/** The keys that drive the list, one row under it, centred in the height the geometry gave it. */ +@Composable +private fun CompletionPopupHint(height: Float) { + Row(tags = listOf("ide-completion-hint"), modifier = Modifier.size(100.percent, height.px)) { + Image(Assets.Hollowengine.Textures.Gui.Icons.COMPLETIONS.toString(), tags = listOf("ide-completion-hint-icon")) + Text(CompletionHintLang.NAVIGATE.lang, modifier = Modifier.textWrap(false)) + Text("Enter", tags = listOf("ide-completion-hint-key"), modifier = Modifier.textWrap(false)) + Text(CompletionHintLang.OR.lang, modifier = Modifier.textWrap(false)) + Text("Tab", tags = listOf("ide-completion-hint-key"), modifier = Modifier.textWrap(false)) + Text(CompletionHintLang.INSERT.lang, modifier = Modifier.textWrap(false)) + } +} + +private object CompletionHintLang { + private const val ROOT = "hollowengine.gui.ide.editor.completion." + + const val NAVIGATE = ROOT + "navigate" + const val OR = ROOT + "or" + const val INSERT = ROOT + "insert" } private fun popupMinimumHeight(rowHeight: Float, footerHeight: Float): Float = @@ -192,23 +216,8 @@ internal fun EditableFieldCompletionPopup( Box(modifier = Modifier.size(100.percent, (remaining * geometry.rowHeight).px)) } } - Box( - modifier = Modifier.size(UiLength.Fill, 1.px) - .background(parseColor("#31343D")), - ) - Row(tags = listOf("ide-completion-hint")) { - Text(modifier = Modifier.textWrap(false)) { - Image( - Assets.Hollowengine.Textures.Gui.Icons.COMPLETIONS.toString(), - modifier = Modifier.size(16.px, 16.px), - ) - Span("to navigate. ", modifier = Modifier.foreground(parseColor("#5F6677"))) - Span(" Enter ", modifier = Modifier.foreground(parseColor("#C4CBDA"))) - Span("or", modifier = Modifier.foreground(parseColor("#5F6677"))) - Span(" Tab ", modifier = Modifier.foreground(parseColor("#C4CBDA"))) - Span("to insert.", modifier = Modifier.foreground(parseColor("#5F6677"))) - } - } + Box(tags = listOf("ide-completion-divider"), modifier = Modifier.size(UiLength.Fill, 1.px)) + CompletionPopupHint(geometry.footerHeight) } } @@ -359,7 +368,8 @@ private fun CompletionTail(tail: String, horizontalAlign: UiAlign, onWidthChange Text( tail, tags = listOf("ide-completion-tail"), - modifier = Modifier.align(horizontalAlign, UiAlign.CENTER).onPlaced { onWidthChanged(it.width) }, + modifier = Modifier.align(horizontalAlign, UiAlign.CENTER).fontScale(CompletionTailScale) + .onPlaced { onWidthChanged(it.width) }, ) } @@ -420,10 +430,11 @@ private val CompletionMatchColor = parseColor("#6CB6FF") private const val CompletionFadeWidth = 16f private const val CompletionFadeDurationMillis = 300L private const val CompletionFadeOvershoot = 2f -private val CompletionPopupBg = parseColor("#24272E") -private val CompletionSelectedBg = UiColor(67f / 255f, 106f / 255f, 154f / 255f, 0.62f).over(CompletionPopupBg) -private val CompletionSelectedHoverBg = UiColor(84f / 255f, 124f / 255f, 176f / 255f, 0.72f).over(CompletionPopupBg) -private val CompletionHoverBg = UiColor(67f / 255f, 92f / 255f, 132f / 255f, 0.34f).over(CompletionPopupBg) +/** The row colours of .ide-completion-row, flattened onto .ide-completion-popup, for the overflow fades. */ +private val CompletionPopupBg = parseColor("#26282E") +private val CompletionSelectedBg = UiColor(110f / 255f, 155f / 255f, 220f / 255f, 0.24f).over(CompletionPopupBg) +private val CompletionSelectedHoverBg = UiColor(110f / 255f, 155f / 255f, 220f / 255f, 0.30f).over(CompletionPopupBg) +private val CompletionHoverBg = UiColor(1f, 1f, 1f, 0.05f).over(CompletionPopupBg) private fun completionFadeStops(color: UiColor) = listOf( UiGradientStop(0f, color.copy(alpha = 0f)), @@ -504,3 +515,7 @@ private const val CompletionPopupWindowSize = 48 private const val CompletionPopupOverscanRows = 12 private const val CompletionPopupTextGap = 8f private const val CompletionPopupRowChrome = 52f +private const val CompletionPopupMaxWidth = 560f + +/** The package tail reads a step smaller than the label; measured and drawn at the same scale. */ +private const val CompletionTailScale = 0.85f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt index 319189f26..0aa2f62a2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt @@ -14,21 +14,36 @@ import ru.hollowhorizon.hollowengine.client.ui.text.UiTextLayouter import ru.hollowhorizon.hollowengine.client.ui.text.caretPosition import kotlin.math.ceil import kotlin.math.min +import kotlin.math.roundToInt -internal data class ZigZagUnderlineShape(val step: Float) : Shape { +/** A smooth wave, one crest or trough per [halfWave], through the middle of its box. */ +internal data class WavyUnderlineShape(val halfWave: Float) : Shape { override fun createPath(size: UiShapeSize): UiPath = path { - moveTo(0f, size.height / 2f) + val middle = size.height / 2f + moveTo(0f, middle) var x = 0f - var high = true + var crest = true while (x < size.width) { - x = min(x + step, size.width) - lineTo(x, if (high) 0f else size.height) - high = !high + val next = min(x + halfWave, size.width) + quadraticBezierTo((x + next) / 2f, if (crest) 0f else size.height, next, middle) + crest = !crest + x = next } } } -internal val EditableFieldZigZagShape = ZigZagUnderlineShape(EditableFieldDiagnosticStep) +/** + * The squiggle's proportions for [fontSize], so it scales with the text. Half-waves are rounded to + * half a pixel: the stroke mesh is cached per shape, and every zoom step must not mint a new one. + */ +internal class DiagnosticUnderline(fontSize: Float) { + val halfWave: Float = (fontSize * 0.28f * 2f).roundToInt().coerceAtLeast(4) / 2f + val amplitude: Float = (fontSize * 0.1f).coerceIn(1f, 3f) + val thickness: Float = (fontSize / 12f).coerceIn(0.9f, 2f) + val shape = WavyUnderlineShape(halfWave) + + val lift: Float = fontSize * 0.12f +} internal fun UiTextDiagnosticSeverity.diagnosticUnderlineColor(): UiColor = when (this) { UiTextDiagnosticSeverity.ERROR -> UiColor(1f, 0.33f, 0.33f, 0.9f) @@ -71,6 +86,7 @@ internal fun EditableFieldRowDiagnostics( fontFamily: String?, contentWidth: Float, ) { + val underline = DiagnosticUnderline(fontSize) rowDiagnostics.forEachIndexed { diagnosticIndex, diagnostic -> val localStart = diagnostic.start.coerceIn(0, line.text.length) val localEnd = diagnostic.end.coerceIn(localStart, line.text.length) @@ -87,18 +103,19 @@ internal fun EditableFieldRowDiagnostics( } val color = diagnostic.severity.diagnosticUnderlineColor() rects.forEachIndexed { rectIndex, rect -> - val width = (ceil(rect.width / EditableFieldDiagnosticStep) * EditableFieldDiagnosticStep) - .coerceAtLeast(EditableFieldDiagnosticStep * 2f) + val width = (ceil(rect.width / underline.halfWave) * underline.halfWave) + .coerceAtLeast(underline.halfWave * 2f) + val middle = top + rect.y + rect.height - underline.lift key("diag", diagnosticIndex, rectIndex) { Box( modifier = Modifier - .position(rect.x.px, (top + rect.y + rect.height - EditableFieldDiagnosticAmplitude).px) - .size(width.px, (EditableFieldDiagnosticAmplitude * 2f).px) + .position(rect.x.px, (middle - underline.amplitude).px) + .size(width.px, (underline.amplitude * 2f).px) .shape( - EditableFieldZigZagShape, + underline.shape, fill = UiPaint.None, stroke = UiPaint.Color(color), - strokeWidth = EditableFieldDiagnosticThickness.px, + strokeWidth = underline.thickness.px, ), ) } @@ -112,6 +129,7 @@ internal data class EditableFieldDiagnosticTooltip( val x: Float, val y: Float, val width: Float, + val fontSize: Float, ) internal fun editableFieldDiagnosticTooltipAt( @@ -142,7 +160,7 @@ internal fun editableFieldDiagnosticTooltipAt( availableWidth = maxWidth - DiagnosticTooltipHorizontalPadding, knownWidth = null, wrap = true, - fontSize = DiagnosticTooltipFontSize, + fontSize = layout.fontSize, fontFamily = layout.fontFamily, ) val width = (measured.width + DiagnosticTooltipHorizontalPadding).coerceIn(140f, maxWidth) @@ -156,6 +174,7 @@ internal fun editableFieldDiagnosticTooltipAt( x = x, y = y, width = width, + fontSize = layout.fontSize, ) } @@ -183,15 +202,11 @@ internal fun EditableFieldDiagnosticTooltipOverlay(tooltip: EditableFieldDiagnos modifier = Modifier.size(UiLength.Fill, UiLength.Auto) .whitespace(UiWhitespace.COLLAPSE) .textWrap(true) - .fontSize(DiagnosticTooltipFontSize), + .fontSize(tooltip.fontSize), ) } } -internal const val EditableFieldDiagnosticStep = 3f -internal const val EditableFieldDiagnosticAmplitude = 2f -internal const val EditableFieldDiagnosticThickness = 1.25f -private const val DiagnosticTooltipFontSize = 11f private const val DiagnosticTooltipHorizontalPadding = 18f private const val DiagnosticTooltipVerticalPadding = 10f private const val DiagnosticTooltipMinHeight = 24f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt index dd0ae0518..12b23c434 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt @@ -36,6 +36,26 @@ data class UiTreeItem( val selected: Boolean = false, ) +/** Asks the tree to scroll [itemId] into view; a new [revision] asks again for the same item. */ +data class UiTreeReveal(val itemId: String, val revision: Int) + +/** + * For each row, whether the guide of each of its levels runs on below it: level `L` does while a + * later row sits at depth `L + 1` before anything shallower closes that subtree. + */ +internal fun treeGuideContinuations(items: List>): List { + val maxDepth = items.maxOfOrNull { it.depth } ?: 0 + val later = BooleanArray(maxDepth + 2) + val result = arrayOfNulls(items.size) + for (index in items.indices.reversed()) { + val depth = items[index].depth + result[index] = BooleanArray(depth) { level -> later[level + 1] } + later[depth] = true + for (deeper in depth + 1 until later.size) later[deeper] = false + } + return result.map { it ?: BooleanArray(0) } +} + @Composable fun UiTreeView( items: List>, @@ -53,7 +73,17 @@ fun UiTreeView( onFilterOpened: ((String) -> Unit)? = null, scrollState: UiScrollHandle = rememberScrollState(), onBackgroundClick: (() -> Unit)? = null, + reveal: UiTreeReveal? = null, + onRevealed: (() -> Unit)? = null, ) { + val latestItems by rememberUpdatedState(items) + if (reveal != null) { + LaunchedEffect(reveal) { + scrollToRow(scrollState, reveal.itemId) { latestItems } + onRevealed?.invoke() + } + } + val continuations = remember(items) { treeGuideContinuations(items) } Column( tags = listOf("tree-view") + tags, modifier = modifier.focus().onKeyInput(FilterShortcutPriority) { input -> @@ -83,10 +113,10 @@ fun UiTreeView( }, ), ) { - items.forEach { item -> + items.forEachIndexed { index, item -> key(item.id) { UiTreeRow( - item, onToggle, onSelect, onIconClick, fillRowWidth, onDrop, canDrop, + item, continuations[index], onToggle, onSelect, onIconClick, fillRowWidth, onDrop, canDrop, draggable = dragItem != null, ) { dragItem?.invoke(item) @@ -97,6 +127,20 @@ fun UiTreeView( } } +private suspend fun scrollToRow(scroll: UiScrollHandle, itemId: String, items: () -> List>) { + repeat(RevealLayoutFrames) { + withFrameNanos { } + val viewport = scroll.viewport.height + val index = items().indexOfFirst { it.id == itemId } + if (index < 0 || viewport <= 0f) return@repeat + val top = index * TreeRowHeight + val offset = scroll.offsetY + if (top >= offset && top + TreeRowHeight <= offset + viewport) return + scroll.animateScrollBy(deltaY = top - (viewport - TreeRowHeight) / 2f - offset) + return + } +} + @Composable private fun UiTreeFilter( state: UiTreeFilterState, @@ -131,6 +175,7 @@ private fun UiTreeFilter( @Composable private fun UiTreeRow( item: UiTreeItem, + continues: BooleanArray, onToggle: (UiTreeItem) -> Unit, onSelect: (UiTreeItem, UiEvent) -> Unit, onIconClick: ((UiTreeItem) -> Unit)?, @@ -158,7 +203,7 @@ private fun UiTreeRow( if (dragAndDrop?.hoveredTargetId == id) { if (dragAndDrop.canDrop) "drop-target" else "drop-rejected" } else null), - modifier = Modifier.size(if (fillRowWidth) 100.percent else UiLength.Auto, 24.px) + modifier = Modifier.size(if (fillRowWidth) 100.percent else UiLength.Auto, TreeRowHeight.px) .alignItems(vertical = UiAlign.CENTER) .input(hoverable = true, clickable = true) .cursor(UiCursorShape.HAND) @@ -166,8 +211,16 @@ private fun UiTreeRow( .dragSource(dragSource, drag) .then(dropModifier) ) { - repeat(item.depth) { - Box(tags = listOf("tree-indent")) + repeat(item.depth) { level -> + val parentLevel = level == item.depth - 1 + val opensSubtree = item.hasChildren && item.expanded + val guide = when { + parentLevel && opensSubtree -> if (continues[level]) "branch" else "last" + parentLevel -> if (continues[level]) "line" else "end" + continues[level] -> "line" + else -> null + } + Box(tags = listOfNotNull("tree-indent", guide)) } Box( tags = if (!item.hasChildren) listOf("tree-expander-empty") else listOf("tree-expander"), @@ -199,3 +252,5 @@ private fun UiTreeRow( } private const val FilterShortcutPriority = 100 +private const val TreeRowHeight = 20f +private const val RevealLayoutFrames = 4 diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/console.json b/runtime/src/main/lang/en_us/hollowengine/gui/console.json index 92587749e..f05db6436 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/console.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/console.json @@ -11,5 +11,7 @@ "auto_scroll": "Auto-scroll", "empty": "No log messages match the current filter", "mode.command": "Command", - "mode.kotlin": "Kotlin" + "mode.kotlin": "Kotlin", + "tab.logs": "Logs", + "tab.problems": "Problems" } diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/docking.json b/runtime/src/main/lang/en_us/hollowengine/gui/docking.json index 829affb06..fe9299e87 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/docking.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/docking.json @@ -1,10 +1,14 @@ { "pin_left": "Pin Left", "pin_right": "Pin Right", + "pin_left_split": "Pin Left, Under the Panel", + "pin_right_split": "Pin Right, Under the Panel", "pin_left_bottom": "Pin Bottom Left", "pin_right_bottom": "Pin Bottom Right", - "move_to_top": "Move to the Top Half", - "move_to_bottom": "Move to the Bottom Half", + "move_to_top": "Move to the Side Panel", + "move_to_split": "Move Under the Side Panel", + "move_to_bottom": "Move to the Bottom Area", + "swap_panels": "Swap with the Other Panel", "park_here": "Pin Here", "undock": "Unpin", "close": "Close", diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/ide/editor.json b/runtime/src/main/lang/en_us/hollowengine/gui/ide/editor.json index 22353beda..60777137b 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/ide/editor.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/ide/editor.json @@ -13,5 +13,8 @@ "status.definition_not_found": "Definition not found", "status.resource_not_found": "Cannot find '%s'", "status.unsupported_action": "This action is not supported", - "status.unsupported_definition": "Cannot open the definition in %s" + "status.unsupported_definition": "Cannot open the definition in %s", + "completion.navigate": "to navigate,", + "completion.or": "or", + "completion.insert": "to insert" } diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/ide/problems.json b/runtime/src/main/lang/en_us/hollowengine/gui/ide/problems.json new file mode 100644 index 000000000..ebe71d18f --- /dev/null +++ b/runtime/src/main/lang/en_us/hollowengine/gui/ide/problems.json @@ -0,0 +1,7 @@ +{ + "show": "Show in Problems", + "no_file": "Open a file to see its problems", + "none": "No problems found", + "copy": "Copy this message", + "copy_all": "Copy all" +} diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/ide/status.json b/runtime/src/main/lang/en_us/hollowengine/gui/ide/status.json new file mode 100644 index 000000000..72cb0b83e --- /dev/null +++ b/runtime/src/main/lang/en_us/hollowengine/gui/ide/status.json @@ -0,0 +1,5 @@ +{ + "resources": "Game resources", + "read_only": "Read-only", + "caret": "Line %s, column %s" +} diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/console.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/console.json index a2de23141..d655c36ce 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/console.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/console.json @@ -11,5 +11,7 @@ "auto_scroll": "Автопрокрутка", "empty": "Нет сообщений, соответствующих текущему фильтру", "mode.command": "Команда", - "mode.kotlin": "Kotlin" + "mode.kotlin": "Kotlin", + "tab.logs": "Логи", + "tab.problems": "Проблемы" } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/docking.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/docking.json index 13485373b..72f047dcf 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/docking.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/docking.json @@ -1,10 +1,14 @@ { "pin_left": "Закрепить слева", "pin_right": "Закрепить справа", + "pin_left_split": "Закрепить слева, под панелью", + "pin_right_split": "Закрепить справа, под панелью", "pin_left_bottom": "Закрепить снизу слева", "pin_right_bottom": "Закрепить снизу справа", - "move_to_top": "Перенести в верхнюю половину", - "move_to_bottom": "Перенести в нижнюю половину", + "move_to_top": "Перенести в боковую панель", + "move_to_split": "Перенести под боковую панель", + "move_to_bottom": "Перенести в нижнюю область", + "swap_panels": "Поменять местами с соседней панелью", "park_here": "Закрепить здесь", "undock": "Открепить", "close": "Закрыть", diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/editor.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/editor.json index 100f12828..989938038 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/editor.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/editor.json @@ -13,5 +13,8 @@ "status.definition_not_found": "Определение не найдено", "status.resource_not_found": "Не удалось найти «%s»", "status.unsupported_action": "Это действие не поддерживается", - "status.unsupported_definition": "Не удалось открыть определение в %s" + "status.unsupported_definition": "Не удалось открыть определение в %s", + "completion.navigate": "— выбор,", + "completion.or": "или", + "completion.insert": "— вставка" } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/problems.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/problems.json new file mode 100644 index 000000000..cc15d3408 --- /dev/null +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/problems.json @@ -0,0 +1,7 @@ +{ + "show": "Показать в «Проблемах»", + "no_file": "Откройте файл, чтобы увидеть его проблемы", + "none": "Проблем не найдено", + "copy": "Скопировать сообщение", + "copy_all": "Скопировать все" +} diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/status.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/status.json new file mode 100644 index 000000000..ad8b6f1c7 --- /dev/null +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/status.json @@ -0,0 +1,5 @@ +{ + "resources": "Ресурсы игры", + "read_only": "Только чтение", + "caret": "Строка %s, столбец %s" +} diff --git a/runtime/src/main/resources/assets/hollowengine/fonts/jetbrains_mono_nl.ttf b/runtime/src/main/resources/assets/hollowengine/fonts/jetbrains_mono_nl.ttf new file mode 100644 index 0000000000000000000000000000000000000000..70d2ec9e28d6e06e923629b78b8a12c12e841589 GIT binary patch literal 208576 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

M*a5~oB;oGMxw@F(#} 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 c.x && q.y < -c.y) return top + r * (atan(q.y + c.y, q.x - c.x) + QUARTER); + if (q.x > c.x && q.y > c.y) return top + arc + side + r * atan(q.y - c.y, q.x - c.x); + if (q.x < -c.x && q.y > c.y) return 2.0 * top + 2.0 * arc + side + r * (atan(q.y - c.y, q.x + c.x) - QUARTER); + if (q.x < -c.x && q.y < -c.y) return 2.0 * top + 3.0 * arc + 2.0 * side + r * (atan(q.y + c.y, q.x + c.x) + 2.0 * QUARTER); + if (halfSize.y - abs(q.y) < halfSize.x - abs(q.x)) { + return q.y < 0.0 ? q.x + c.x : top + 2.0 * arc + side + (c.x - q.x); + } + return q.x > 0.0 ? top + arc + (q.y + c.y) : 2.0 * top + 3.0 * arc + side + (c.y - q.y); +} + +float dashCoverage(float position, float period, float dashLength) { + float phase = mod(position, period); + float edge = min(phase, dashLength - phase); + float aa = clamp(fwidth(position), 0.0001, 2.0); + return clamp(edge / aa + 0.5, 0.0, 1.0); +} + float sdfCoverage(float distance) { float width = max(fwidth(distance), 0.0001); return clamp(0.5 - distance / width, 0.0, 1.0); @@ -204,6 +230,10 @@ void main() { float innerDistance = roundedRectDistance(localPosition - borderWidth, innerSize, innerRadius); float innerCoverage = sdfCoverage(innerDistance); borderCoverage = clamp(outerCoverage - innerCoverage, 0.0, 1.0); + if (effect.z > 0.0) { + float position = outlinePosition(localPosition, size, radius, borderWidth * 0.5); + borderCoverage *= dashCoverage(position, effect.z, -effect.w); + } } vec4 fillColor = samplePaint(paintIndex); diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss index 6a8a432f0..5664b1daf 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss @@ -112,10 +112,14 @@ .asset-grid-scroll { width: 100%; padding: 6px; - scrollbar: 5px; - scrollbar-track: rgba(255, 255, 255, 0.03); - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .asset-grid { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss index 0a009c0be..ae7f0d0c0 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss @@ -1,28 +1,37 @@ -.dock-stack, -.dock-window { - background: #1E1F22; -} +.dock-stack, +.dock-window, +.dock-content, .dock-splitter { - background: #1E1F22; + background: #141518; } .dock-tab { - background: #1E1F22; - border-radius: 4px; + background: #00000000; + foreground: #8f9bad; + border-radius: 5px; align: start center; transition: background 120ms ease-out, foreground 120ms ease-out, - translate 140ms ease-out; - animations: dock-tab-in 150ms ease-out; + translate 110ms cubic-bezier(0.2, 0.8, 0.2, 1); + animations: dock-tab-in 120ms cubic-bezier(0.2, 0.8, 0.2, 1); } @keyframes dock-tab-in { - from { opacity: 0; scale: 0.94; } + from { opacity: 0; scale: 0.92; } to { opacity: 1; scale: 1; } } +.dock-tab-indicator { + background: #00000000; + transition: background 120ms ease-out; +} + +.dock-tab.selected .dock-tab-indicator { + background: #6E9BDC; +} + .dock-tab-icon { size: 12px 12px; margin-right: 5px; @@ -30,11 +39,14 @@ .dock-tab-bar { scrollbar-overlay: true; - scrollbar-thickness: 3px; + scrollbar-side: start; + scrollbar-thickness: 2px; scrollbar-margin: 0px; scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.48); - scrollbar-thumb-radius: 2px; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 3px; + scrollbar-thumb-radius: 1px; } .dock-tab-bar.compact { @@ -42,60 +54,76 @@ } .dock-tab:hover { - background: #31343D; + background: #1C1E22; + foreground: #d7deea; } .dock-tab.selected { - background: #24272E; + background: #1C1E22; + foreground: #f0f3f8; } .dock-tab:dragging { transition: none; } -.dock-content { - background: #1E1F22; -} - .dock-close-button { - margin: 3px; - padding: 0px; + margin: 0px 4px 0px 2px; border-radius: 3px; - foreground: #8d96a8; - transition: - foreground 100ms ease-out, - background 100ms ease-out; + background: #00000000; + transition: background 100ms ease-out; } .dock-close-button:hover { background: rgba(255, 255, 255, 0.10); - foreground: #ffffff; +} + +.dock-close-icon { + size: 8px 8px; + tint: #687588; + transition: tint 100ms ease-out; +} + +.dock-tab:hover .dock-close-icon, +.dock-tab.selected .dock-close-icon { + tint: #aeb8ca; +} + +.dock-close-button:hover .dock-close-icon { + tint: #ffffff; } .dock-stripe { - background: #191A1D; + background: #141518; padding: 0px 0px; gap: 2px; - transition: size 160ms ease-out; + transition: size 120ms ease-out; } .dock-stripe-button { border-radius: 4px; scale: 0.75; - opacity: 0.66; + opacity: 0.6; transition: background 120ms ease-out, - opacity 120ms ease-out; + opacity 120ms ease-out, + translate 110ms cubic-bezier(0.2, 0.8, 0.2, 1); } .dock-stripe-button:hover { - background: #31343D; + background: #2B2E35; scale: 0.95; opacity: 1; } +.dock-stripe-button.dragging { + background: #2E3544; + scale: 1; + opacity: 1; +} + .dock-stripe-button.selected { - background: #3A3F4B; + background: #2E3544; opacity: 1; } @@ -104,28 +132,98 @@ } .dock-pinned-panel { - background: #1E1F22; + background: #141518; +} + +.dock-pinned-island { + size: fill fill; + margin: 2px; + background: #1C1E22; + border-radius: 6px; + clip: true; +} + +.dock-pinned-island .dock-content { + background: none; } .dock-pinned-panel.sliding, .dock-splitter.sliding { - transition: size 160ms ease-out; + transition: size 120ms ease-out; } .dock-pinned-header { - background: #1E1F22; - padding: 0px 4px 0px 6px; - gap: 5px; - border-bottom: 1px #2B2D31; + padding: 0px 4px 0px 8px; + gap: 6px; } .dock-pinned-header-icon { size: 12px 12px; + tint: #aeb8ca; } .dock-pinned-header-label { - font-size: 10px; - foreground: #c8cfdb; + foreground: #dfe4ec; +} + +.dock-stripe-divider { + margin: 3px 0px; + background: #2B2E35; +} + + +.dock-drop-zone { + padding: 3px; + background: rgba(110, 155, 220, 0.10); + border: 1px rgba(110, 155, 220, 0.32); + border-radius: 4px; + transition: + background 100ms ease-out, + border 100ms ease-out, + scale 100ms cubic-bezier(0.2, 0.8, 0.2, 1); + animations: dock-drop-zone-in 110ms cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.dock-drop-zone.active { + background: rgba(110, 155, 220, 0.34); + border: 1px rgba(190, 215, 250, 0.95); + scale: 1.08; +} + +@keyframes dock-drop-zone-in { + from { opacity: 0; scale: 0.85; } + to { opacity: 1; scale: 1; } +} + +.dock-drop-zone-glyph { + background: rgba(190, 215, 250, 0.35); + border-radius: 2px; + transition: background 100ms ease-out; +} + +.dock-drop-zone.active .dock-drop-zone-glyph { + background: rgba(230, 240, 255, 0.85); +} + +.dock-drop-preview { + background: rgba(110, 155, 220, 0.14); + border: 1px rgba(110, 155, 220, 0.8); + border-radius: 6px; + opacity: 0; + transition: + translate 110ms cubic-bezier(0.2, 0.8, 0.2, 1), + size 110ms cubic-bezier(0.2, 0.8, 0.2, 1), + opacity 120ms ease-out; + animations: dock-drop-preview-in 120ms ease-out; +} + +.dock-drop-preview.visible { + opacity: 1; +} + +@keyframes dock-drop-preview-in { + from { opacity: 0; } + to { opacity: 1; } } .dock-content-body { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss index 1111ca8e6..68c507e9d 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss @@ -9,7 +9,7 @@ #ide-toolbar { size: 100% fit; gap: 2px; - background: #24272E; + background: #141518; } #ide-logo { @@ -29,12 +29,12 @@ .ide-toolbar-divider { size: 1px 14px; margin: 0px 6px; - background: #3a3f4b; + background: #2B2E35; } .ide-toolbar-group { gap: 1px; - background: #1E2127; + background: #1C1E22; border-radius: 4px; } @@ -48,11 +48,11 @@ } .ide-toolbar-button:hover { - background: #414653; + background: #2B2E35; } .ide-toolbar-button.active { - background: rgba(67, 106, 154, 0.62); + background: #2E3544; } .ide-toolbar-button-icon { @@ -70,13 +70,19 @@ size: fill fill; margin: 2px; padding: 4px; - border-radius: 4px; + border-radius: 6px; gap: 6px; - background: #24272E; + background: #1C1E22; +} + +.ide-editor-shell { + padding: 2px; + background: #212328; } .ide-empty-editor { align-items: center center; + background: #212328; } .game-viewport-hint { @@ -89,7 +95,7 @@ padding: 0px 4px; gap: 4px; align-items: start center; - background: #31343D; + background: #212328; border-radius: 4px; } @@ -107,22 +113,68 @@ } .ide-empty-title { - foreground: #cbd3df; + foreground: #8f9bad; height: 18px; } -.ide-status { - height: 16px; - margin-right: 6px; +#ide-status-bar { + padding: 0px 8px; + gap: 12px; + align-items: start center; + background: #141518; +} + +.ide-breadcrumbs { + gap: 2px; + align-items: start center; +} + +.ide-breadcrumb { + size: fit 16px; + padding: 0px 4px; + gap: 4px; + align-items: start center; + border-radius: 3px; + background: #00000000; + foreground: #8f9bad; + transition: + background 100ms ease-out, + foreground 100ms ease-out; +} + +.ide-breadcrumb.last { + foreground: #d7deea; +} + +.ide-breadcrumb.link:hover { + background: #2B2E35; + foreground: #f0f3f8; +} + +.ide-breadcrumb-icon { + size: 11px 11px; +} + +.ide-breadcrumb-separator { + size: 8px 8px; + shape: path("M 3 1 L 6 4 L 3 7", 8 8); + fill: none; + stroke: #4f5968; + stroke-width: 1px; +} + +.ide-status-message { max-width: 360px; + foreground: #aeb8ca; +} + +.ide-status-detail { wrap: false; - text-overflow: dots; - font-size: 10px; foreground: #8f9bad; } -.ide-empty-editor .ide-status { - font-size: 11px; +.ide-status-detail.version { + foreground: #4f5968; } .ide-shortcuts-dialog { @@ -132,9 +184,14 @@ .ide-shortcuts-content { gap: 3px; padding: 0px 8px 0px 0px; - scrollbar: 6px; - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .ide-shortcuts-title { @@ -209,8 +266,66 @@ foreground: #d7deea; } -.console-panel { - gap: 4px; +.tool-window-header { + size: 100% 24px; + padding: 0px 4px 0px 8px; + gap: 2px; + align-items: start center; +} + +.tool-window-title { + margin: 0px 8px 0px 4px; +} + +.tool-window-tab { + size: fit 18px; + padding: 0px 8px; + gap: 5px; + align-items: center center; + border-radius: 4px; + background: #00000000; + foreground: #8f9bad; + transition: + background 110ms ease-out, + foreground 110ms ease-out; +} + +.tool-window-tab:hover { + background: rgba(255, 255, 255, 0.06); + foreground: #e4e9f1; +} + +.tool-window-tab.selected { + background: rgba(110, 155, 220, 0.20); + foreground: #f0f3f8; +} + +.tool-window-tab.selected:hover { + background: rgba(110, 155, 220, 0.26); +} + +.tool-window-tab-count { + min-width: 12px; + padding: 2px 4px 0px 4px; + text-align: center; + border-radius: 6px; + background: #2B2E35; + foreground: #aeb8ca; +} + +.tool-window-tab-count.has-errors { + background: rgba(255, 135, 135, 0.16); + foreground: #ff8787; +} + +.tool-window-tab-count.has-warnings { + background: rgba(255, 194, 102, 0.14); + foreground: #ffc266; +} + +.ide-panel.console-panel { + padding: 0px; + gap: 0px; } .console-toolbar { @@ -224,73 +339,74 @@ min-width: 64px; height: 18px; padding: 0px 6px; - background: #24272E; - border: 1px #383D48; - border-radius: 3px; } .console-mode-dropdown { min-width: 84px; height: 20px; padding: 0px 6px; - background: #24272E; - border: 1px #383D48; - border-radius: 3px; + background: #212328; + border: 1px #2B2E35; + border-radius: 4px; } .console-command-row { width: 100%; height: fit; min-height: 26px; - padding: 2px 4px; + padding: 3px 6px 5px 6px; gap: 4px; } .console-filter, .console-command { padding: 2px 5px; - background: #24272E; - border: 1px #383D48; - border-radius: 3px; + background: #212328; + border: 1px #2B2E35; + border-radius: 4px; caret-color: #f0f6ff; selection-color: rgba(95, 140, 205, 0.46); } -/* The whole log is one read-only field; its colours come from the console's own highlighter. */ +/* + * The whole log is one read-only field; its colours come from the console's own highlighter. It sits + * a shade lighter than the header and the command line around it, like the editor does. + */ .console-log { width: 100%; - padding: 2px 6px; - background: #1E2127; - border-radius: 4px; + padding: 2px 8px; + background: #212328; foreground: #d7deea; caret-color: #f0f6ff; selection-color: rgba(95, 140, 205, 0.46); - scrollbar: 6px; - scrollbar-track: rgba(255, 255, 255, 0.03); - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } -.console-empty { +.console-empty, .problems-empty { align-items: center center; - background: #1E2127; - border-radius: 4px; - foreground: #7f8a9d; + background: #212328; + foreground: #687588; } .console-button { size: 22px 22px; - border-radius: 3px; - background: #24272E; - border: 1px #383D48; + border-radius: 4px; + background: #00000000; transition: background 110ms ease-out; } .console-button:hover { - background: #5f6b80; + background: #2B2E35; } .console-button.disabled, .console-button.disabled:hover { - background: #2a2d34; + background: #00000000; } .console-button-icon { @@ -360,7 +476,7 @@ } .project-action:hover { - background: #414653; + background: #2B2E35; } .project-action-icon { @@ -389,9 +505,14 @@ .project-dialog-scroll { gap: 7px; padding: 0px 8px 0px 0px; - scrollbar: 6px; - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .project-dialog-label { @@ -421,9 +542,14 @@ gap: 2px; background: #1E2127; border-radius: 3px; - scrollbar: 6px; - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .project-dialog-checkbox-row { @@ -568,7 +694,7 @@ padding: 0px 3px; gap: 3px; align-items: center center; - background: #1E1F22; + background: #1A1C20; margin-left: 2px; margin-right: 4px; border-radius: 3px; @@ -593,7 +719,7 @@ } .code-editor-inlay.inlay-action:hover { - background: #2B2D31; + background: #2B2E35; } .code-editor-inlay.inlay-action:hover .code-editor-inlay-icon { @@ -625,8 +751,7 @@ height: fit; gap: 3px; padding: 3px; - background: #2A2E36; - border: 1px #3a3f4b; + background: #1C1E22; border-radius: 4px; } @@ -645,8 +770,8 @@ .ide-find-input { height: 20px; padding: 2px 5px; - background: #1E2127; - border: 1px #4b5362; + background: #212328; + border: 1px #2B2E35; border-radius: 3px; caret-color: #f0f6ff; selection-color: rgba(95, 140, 205, 0.46); @@ -781,10 +906,14 @@ width: 100%; max-height: 320px; gap: 1px; - scrollbar: 6px; - scrollbar-track: rgba(255, 255, 255, 0.03); - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .ide-search-result { @@ -828,122 +957,117 @@ .ide-diagnostics-badge { height: fit; - padding: 4px; + margin: 4px 10px 0px 0px; + padding: 3px 5px; align-items: center center; gap: 4px; - background: #31343DBB; - border: 1px rgba(255, 255, 255, 0.16); + background: rgba(28, 30, 34, 0.88); + border: 1px #2B2E35; border-radius: 4px; - shadow: 1px 2px 1px 0px rgba(0, 0, 0, 0.72); translate: 0 0 20px; foreground: #d7deea; - transition: background 120ms ease-out, translate 120ms ease-out, shadow 120ms ease-out; + transition: background 120ms ease-out; } .ide-diagnostics-badge:hover { - background: #31343D; - translate: -1px -1px 20px; - shadow: 2px 3px 1px 0px rgba(0, 0, 0, 0.72); + background: #2B2E35; } -.ide-diagnostics-badge.has-errors { - foreground: #ff8787; -} - -.ide-diagnostics-badge.has-warnings { - foreground: #ffc266; +.problems-file { + size: 100% 22px; + padding: 0px 6px 0px 10px; + gap: 5px; + align-items: start center; } -.ide-diagnostics-text { - translate: 0 1px 0; +.problems-file-icon { + size: 12px 12px; } -.ide-diagnostics-wrap { - width: 100%; - background: #24272E; - border-top: 1px #323846; +.problems-file-name { + margin-right: 4px; + wrap: false; + foreground: #d7deea; } -.ide-diagnostics-resizer { - size: 100% 5px; - background: #5F6677BB; - transition: background 120ms ease-out; +.problem-count-icon { + size: 9px 9px; } -.ide-diagnostics-resizer:hover { - background: #5F6677; +.problem-count { + margin-right: 3px; + foreground: #8f9bad; } -.ide-diagnostics-header { - width: 100%; - padding: 3px 6px; - gap: 6px; - background: #2A2E36; - border-bottom: 1px #323846; +.problem-count.has-errors { + foreground: #ff8787; } -.ide-diagnostics-title { - foreground: #8f9bad; - wrap: false; +.problem-count.has-warnings { + foreground: #ffc266; } -.ide-diagnostics-panel { - width: 100%; - padding: 4px; - gap: 2px; +.problems-list { + padding: 2px 4px 4px 4px; + background: #212328; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } -.ide-diagnostic-copy { - size: 16px 16px; +.problem-row { + size: 100% 20px; + padding: 0px 4px 0px 22px; + gap: 6px; + align-items: start center; border-radius: 3px; background: #00000000; transition: background 100ms ease-out; } -.ide-diagnostic-copy:hover { - background: #454B58; +.problem-row:hover { + background: #2B2E35; } -.ide-diagnostic-copy-icon { - size: 11px 11px; - tint: #aeb8ca; +.problem-icon { + size: 10px 10px; } -.ide-diagnostic-row { - width: 100%; - height: fit; - padding: 4px 6px; - gap: 8px; - background: #31343D; - border-radius: 3px; -} - -.ide-diagnostic-severity { - width: 68px; - foreground: #8f9bad; +.problem-message { + width: 0px; + grow: 1; + foreground: #d7deea; } -.ide-diagnostic-location { - width: 54px; - foreground: #8f9bad; +.problem-location { + wrap: false; + foreground: #687588; } -.ide-diagnostic-row.error .ide-diagnostic-severity { - foreground: #ff8787; +.problem-copy { + size: 16px 16px; + border-radius: 3px; + background: #00000000; + transition: background 100ms ease-out; } -.ide-diagnostic-row.warning .ide-diagnostic-severity { - foreground: #ffc266; +.problem-copy:hover { + background: rgba(255, 255, 255, 0.08); } -.ide-diagnostic-row.info .ide-diagnostic-severity { - foreground: #78a8ff; +.problem-copy-icon { + size: 10px 10px; + tint: #687588; } -.ide-diagnostic-message { - width: 0px; - grow: 1; - foreground: #d7deea; +.problem-row:hover .problem-copy-icon, +.problem-copy:hover .problem-copy-icon { + tint: #d7deea; } .file-context-menu { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss index 3cd2e0303..325d48310 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss @@ -35,11 +35,14 @@ .image-editor-canvas-scroll { background: #17191E; - scrollbar: 7px; - scrollbar-margin: 0px; - scrollbar-track: rgba(255, 255, 255, 0.03); - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .image-editor-sidebar { @@ -47,11 +50,14 @@ padding: 8px 10px 8px 12px; background: #2B2E36; border-radius: 4px; - scrollbar: 6px; - scrollbar-margin: 0px; - scrollbar-track: rgba(255, 255, 255, 0.02); - scrollbar-thumb: rgba(155, 169, 194, 0.38); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .image-editor-sidebar-title { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss index bdd86ef17..67d2b1117 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss @@ -10,9 +10,16 @@ size: 100% 100%; gap: 8px; padding: 10px; - background: #1E1F22; - border: 1px #31343D; - border-radius: 4px; + background: #1C1E22; + border-radius: 6px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .insp-head { @@ -48,11 +55,31 @@ gap: 5px; } +.insp-empty-state { + size: 100% fit; + margin-top: 24px; + padding: 22px 12px 18px 12px; + gap: 10px; + align-items: center start; + border: 1px #353943; + border-dash: 5px 4px; + border-radius: 8px; +} + +/* A shape rather than an image: one opaque stroke, so where lines cross nothing doubles up. */ +.insp-empty-icon { + size: 26px 28px; + shape: path("M 5.3 12.34 C 5.48 12.44 5.69 12.5 5.9 12.5 C 6.11 12.5 6.32 12.44 6.5 12.34 L 10.7 9.94 C 10.88 9.83 11.03 9.68 11.14 9.5 C 11.24 9.32 11.3 9.11 11.3 8.9 L 11.3 4.1 C 11.3 3.89 11.24 3.68 11.14 3.5 C 11.03 3.32 10.88 3.17 10.7 3.06 L 6.5 0.66 C 6.32 0.56 6.11 0.5 5.9 0.5 C 5.69 0.5 5.48 0.56 5.3 0.66 L 1.1 3.06 C 0.92 3.17 0.77 3.32 0.66 3.5 C 0.56 3.68 0.5 3.89 0.5 4.1 L 0.5 8.9 C 0.5 9.11 0.56 9.32 0.66 9.5 C 0.77 9.68 0.92 9.83 1.1 9.94 Z M 5.9 12.5 L 5.9 6.5 M 0.67 3.5 L 5.9 6.5 L 11.13 3.5 M 3.2 1.86 L 8.6 4.95", 12 13); + fill: none; + stroke: #C9D0DC; + stroke-width: 1.2px; +} + .insp-empty { size: 100% fit; - padding: 12px 6px; - foreground: #5F6677; - font-size: 9px; + text-align: center; + foreground: #7A8698; + font-size: 8px; } /* ---- sections ---- */ diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss index d1b386003..b4d0bca80 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss @@ -1,24 +1,24 @@ /* * The notification stack in the bottom-right corner. Each card is bordered with its own kind's - * gradient, matching the icon it carries. + * gradient, matching the icon it carries; the rest follows the IDE's popups, compact and quiet. */ .notif-stack { size: fit fit; - gap: 8px; - margin: 12px; + gap: 6px; + margin: 10px; align: end end; } .notif { - size: 320px fit; - gap: 6px; - padding: 10px 12px; - background: rgba(24, 26, 31, 0.94); - border-radius: 10px; - border: 1px #31343D; + size: 280px fit; + gap: 5px; + padding: 7px 8px 7px 10px; + background: rgba(33, 35, 40, 0.96); + border-radius: 8px; + border: 1px #2E3138; backdrop-filter: blur(8px); - shadow: 0px 4px 14px rgba(0, 0, 0, 0.45); + shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); } .notif.success { border: 1px linear-gradient(135deg, #9BF763, #3D5A24); } @@ -29,62 +29,57 @@ .notif-head { size: 100% fit; - gap: 10px; + gap: 8px; align-items: start center; } .notif-icon { - size: 26px 26px; + size: 16px 16px; } .notif-title { size: fit fit; foreground: #E4E9F4; - font-size: 11px; text-overflow: dots; } .notif-action { size: fit fit; - min-width: 62px; - min-height: 26px; - padding: 4px 10px; - background: #2A2D35; - border-radius: 7px; - border: 1px #3B3F49; + min-height: 18px; + padding: 2px 8px; + background: #2B2E35; + border-radius: 4px; hoverable: true; clickable: true; - transition: background 140ms ease-out; + transition: background 120ms ease-out; } -.notif-action:hover { background: #3B3F49; } +.notif-action:hover { background: #363A43; } .notif-action-label { align: center center; size: fit fit; - foreground: #C4CBDA; - font-size: 10px; + foreground: #D7DEEA; wrap: false; } .notif-close { - size: 24px 24px; - padding: 6px; - background: #2A2D35; - border-radius: 7px; - border: 1px #3B3F49; - tint: #8B93A5; - transition: tint 140ms ease-out, background 140ms ease-out; + size: 16px 16px; + padding: 4px; + background: #00000000; + border-radius: 4px; + tint: #7A8698; + transition: tint 120ms ease-out, background 120ms ease-out; } .notif-close:hover { - background: #3B3F49; + background: #2B2E35; tint: #E4E9F4; } .notif-track { - size: 100% 4px; - background: #2A2D35; + size: 100% 3px; + background: #2B2E35; border-radius: 2px; clip: true; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss index 955658bd3..fee95e057 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss @@ -48,11 +48,14 @@ .sounds-editor-list-scroll { gap: 2px; - scrollbar: 6px; - scrollbar-margin: 0px; - scrollbar-track: rgba(255, 255, 255, 0.02); - scrollbar-thumb: rgba(155, 169, 194, 0.38); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .sounds-editor-detail { @@ -60,11 +63,14 @@ padding: 8px 10px; background: #2B2E36; border-radius: 4px; - scrollbar: 6px; - scrollbar-margin: 0px; - scrollbar-track: rgba(255, 255, 255, 0.02); - scrollbar-thumb: rgba(155, 169, 194, 0.38); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .sounds-editor-event { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss index d569fc423..d631ebcd3 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss @@ -32,10 +32,10 @@ } .dropdown-item-check { - size: 14px 14px; - checkbox-active: #5f8ccd; + size: 10px 10px; + checkbox-active: #6E9BDC; checkbox-mark: #ffffff; - border: 1px #647084; + border: 1px #4A505C; } /* Fills the free space of a button wider than its text, so the arrow sits flush against the right edge. */ @@ -54,23 +54,23 @@ } .dropdown-popup { - min-width: 156px; + min-width: 140px; padding: 3px; - gap: 2px; + gap: 1px; align-items: stretch; - background: #24272E; - border: 1px #5F6677; - border-radius: 5px; - shadow: 1px 1px 3px 0px rgba(0, 0, 0, 0.42); + background: #26282E; + border: 1px #3A3E48; + border-radius: 6px; + shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); } .dropdown-item { width: 100%; - gap: 4px; - padding-vertical: 3px; + gap: 6px; + padding-vertical: 2px; padding-horizontal: 8px; border-radius: 4px; - background: #31343D00; + background: #00000000; transition: background 80ms ease-out; } @@ -89,26 +89,27 @@ .dropdown-separator { size: fill 1px; - margin: 2px 4px; - background: #3a3f4b; + margin: 2px 6px; + background: #353841; } .dropdown-item:hover { - background: #31343D; + background: rgba(110, 155, 220, 0.18); } .dropdown-item.open { - background: #31343D; + background: rgba(110, 155, 220, 0.18); } .timeline-scroll { + scrollbar: 4px; + scrollbar-margin: 2px; scrollbar-overlay: true; - scrollbar-thickness: 5px; - scrollbar-margin: 3px; - scrollbar-track: #00000000; - scrollbar-thumb: #A8B0BF66; - scrollbar-track-radius: 2.5; - scrollbar-thumb-radius: 2.5; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .dropdown-item.disabled { @@ -120,10 +121,14 @@ } .tree-view-scroll { - scrollbar: 6px; - scrollbar-track: rgba(255, 255, 255, 0.03); - scrollbar-thumb: rgba(155, 169, 194, 0.38); - scrollbar-thumb-radius: 3px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .tree-filter-row { @@ -133,7 +138,7 @@ padding: 1px 4px; gap: 3px; align-items: start center; - background: #31343D; + background: #212328; border-radius: 4px; } @@ -157,10 +162,16 @@ padding-right: 6px; background: #00000000; foreground: #aeb8ca; - border-radius: 4px; + border-radius: 3px; transition: background 200ms ease-out, foreground 200ms ease-out; + animations: tree-row-in 110ms cubic-bezier(0.2, 0.8, 0.2, 1); +} + +@keyframes tree-row-in { + from { opacity: 0; translate: 0 -4 0; } + to { opacity: 1; translate: 0 0 0; } } .tree-item:hover { @@ -183,7 +194,26 @@ } .tree-indent { - size: 14px 100%; + size: 16px 100%; + fill: none; + stroke: #34363C; + stroke-width: 1px; +} + +.tree-indent.line { + shape: path("M 7.5 0 L 7.5 20", 16 20); +} + +.tree-indent.end { + shape: path("M 7.5 0 L 7.5 10", 16 20); +} + +.tree-indent.branch { + shape: path("M 7.5 0 L 7.5 20 M 7.5 6 Q 7.5 10 11.5 10 L 15 10", 16 20); +} + +.tree-indent.last { + shape: path("M 7.5 0 L 7.5 6 Q 7.5 10 11.5 10 L 15 10", 16 20); } .tree-expander { @@ -227,19 +257,20 @@ padding: 8px; caret-color: #f0f6ff; selection-color: rgba(95, 140, 205, 0.46); - text-shadow: 0, 1, 2, rgba(255, 255, 255, 0.4); line-numbers: true; - line-number-color: #556070; - font-family: hollowengine:fonts/monocraft; - font-size: 10px; - scrollbar: 7px; - scrollbar-track: rgba(255, 255, 255, 0.03); - scrollbar-thumb: rgba(155, 169, 194, 0.42); - scrollbar-thumb-radius: 3px; + line-number-color: #4f5968; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .editable-text-field-gutter { - background: #24272E; + background: #212328; } .editable-text-field-inlay { @@ -247,16 +278,14 @@ padding: 0px 1px; gap: 3px; align-items: start center; - background: #1E1F22; + background: #1A1C20; } .editable-text-field-inlay-text { - /* A share of the field's font, so hints follow whatever size the text is drawn at. */ font-size: 70%; - text-effects: glow(12px, #FFFFFF); foreground: #687588; text-wrap: false; - padding: 2px; + padding: 0px 2px; } .editable-text-field-inlay-icon { @@ -278,43 +307,42 @@ .ui-tooltip { max-width: 260px; - padding: 3px 6px; - background: #1E2127; - border: 1px #5F6677; - border-radius: 3px; - shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.6); + padding: 3px 7px; + background: #26282E; + border: 1px #3A3E48; + border-radius: 5px; + shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.45); } .ui-tooltip-label { - font-size: 10px; foreground: #d7deea; } .ide-quick-fix-popup { padding: 3px; gap: 1px; - background: #24272E; - border: 1px #5F6677; - border-radius: 4px; - shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.76); + background: #26282E; + border: 1px #3A3E48; + border-radius: 6px; + shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); } .ide-quick-fix-row { width: 100%; height: fit; min-height: 18px; - padding: 2px 7px; - border-radius: 3px; + padding: 2px 8px; + border-radius: 4px; foreground: #d7deea; text-wrap: false; } .ide-quick-fix-row.selected { - background: rgba(67, 106, 154, 0.62); + background: rgba(110, 155, 220, 0.24); } .ide-quick-fix-row:hover { - background: rgba(84, 124, 176, 0.72); + background: rgba(110, 155, 220, 0.18); } .ide-quick-fix-label { @@ -327,29 +355,51 @@ } .ide-completion-popup { - background: #24272E; - border: 1px #5F6677; - border-radius: 4px; - shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.76); + background: #26282E; + border: 1px #3A3E48; + border-radius: 6px; + shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); clip: true; } +.ide-completion-divider { + background: #2B2E35; +} + .ide-completion-list { size: 100% 100%; text-wrap: false; - scrollbar: 5px; + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; scrollbar-track: none; - scrollbar-thumb: #5F6677; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; } .ide-completion-hint { + width: 100%; + padding: 0px 8px; + gap: 5px; align-items: start center; - padding: 2px; + font-size: 85%; + foreground: #687588; +} + +.ide-completion-hint-icon { + size: 10px 10px; + tint: #687588; +} + +.ide-completion-hint-key { + foreground: #aeb8ca; } .ide-completion-row { width: 100%; - padding: 0px 7px; + padding: 0px 8px; gap: 6px; align-items: start center; text-wrap: false; @@ -357,24 +407,24 @@ } .ide-completion-row:hover { - background: rgba(67, 92, 132, 0.34); + background: rgba(255, 255, 255, 0.05); } .ide-completion-row.selected { - background: rgba(67, 106, 154, 0.62); + background: rgba(110, 155, 220, 0.24); } .ide-completion-row.selected:hover { - background: rgba(84, 124, 176, 0.72); + background: rgba(110, 155, 220, 0.30); } .ide-completion-icon { - size: 14px 14px; - tint: rgba(160, 188, 230, 0.96); + size: 12px 12px; + tint: rgba(160, 188, 230, 0.9); } .ide-completion-item { - size: 16px 16px; + size: 14px 14px; } .ide-completion-main { @@ -389,7 +439,7 @@ } .ide-completion-label { - foreground: #eef4ff; + foreground: #d7deea; text-wrap: false; } @@ -399,25 +449,53 @@ } .ide-completion-tail { - foreground: rgba(140, 153, 174, 0.72); - font-size: 10px; + foreground: #5F6A7B; text-wrap: false; align: end center; } +.ide-code-insight-popup { + padding: 6px 8px; + background: #26282E; + border: 1px #3A3E48; + border-radius: 6px; + shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); +} + +.ide-active-parameter { + background: rgba(110, 155, 220, 0.24); + border-radius: 2px; +} + +.ide-hover-documentation { + foreground: #A9B3C4; +} + .ide-diagnostic-tooltip { padding: 5px 8px; align-items: start center; - background: #31343D; - border: 1px #5F6677; - border-radius: 4px; - shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.56); + background: #26282E; + border: 1px #3A3E48; + border-radius: 6px; + shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); clip: false; } +.ide-diagnostic-tooltip.error { + border: 1px rgba(224, 108, 108, 0.55); +} + +.ide-diagnostic-tooltip.warning { + border: 1px rgba(230, 179, 90, 0.5); +} + +.ide-diagnostic-tooltip.info { + border: 1px rgba(110, 155, 220, 0.5); +} + +/* Its size is the editor's, set in code. */ .ide-diagnostic-tooltip-message { - foreground: #edf3ff; - font-size: 11px; + foreground: #d7deea; text-wrap: true; } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt index 422c08a7e..49d66412d 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/docking/DockingStateTest.kt @@ -40,6 +40,55 @@ class DockingStateTest { assertTrue(state.pinnedItems.isEmpty()) } + @Test + fun `a floating window dropped past the edge, or cut off by a resize, comes back inside`() { + val state = DockingState() + state.updateSpaceSize(800f, 600f) + state.openFloating(DockItem("test", "Test"), x = 20f, y = 30f, width = 240f, height = 180f) + val id = state.floatingWindows.single().id + + state.startDraggingWindow(id) + state.moveFloating(id, 900f, -200f) + state.updateSpaceSize(700f, 500f) + assertEquals(920f, state.floatingWindows.single().x, "a window in the hand is left where the pointer has it") + + state.finishDraggingWindow() + val dropped = state.floatingWindows.single() + assertEquals(460f, dropped.x, "dropped, it lies against the right edge") + assertEquals(0f, dropped.y) + + state.moveFloating(id, 0f, 400f) + state.updateSpaceSize(400f, 300f) + val shrunk = state.floatingWindows.single() + assertEquals(160f, shrunk.x) + assertEquals(120f, shrunk.y, "a smaller space pulls it up as well as left") + } + + @Test + fun `a split window shares the side panel with the top one and swaps with it`() { + val state = DockingState() + state.open(DockItem("project", "Project", pinnable = true)) + state.open(DockItem("scene", "Scene", pinnable = true)) + state.open(DockItem("assets", "Assets", pinnable = true)) + state.pin("project", DockSide.LEFT) + state.pin("assets", DockSide.LEFT) + state.pin("scene", DockSide.LEFT, DockStripeGroup.SPLIT) + state.togglePinned("project") + + assertEquals(listOf("project", "scene"), state.sidePanels(DockSide.LEFT).map { it.item.id }) + + assertTrue(state.swapSidePanels(DockSide.LEFT)) + assertEquals(listOf("scene", "project"), state.sidePanels(DockSide.LEFT).map { it.item.id }, "both stay open") + assertEquals( + listOf("scene", "assets", "project"), + state.pinnedOn(DockSide.LEFT).map { it.item.id }, + "the swapped buttons change groups, the rest of the stripe keeps its order", + ) + + state.togglePinned("assets") + assertEquals(listOf("assets", "project"), state.sidePanels(DockSide.LEFT).map { it.item.id }, "top replaces top only") + } + @Test fun `a stripe button opens its panel and closes it again`() { val state = DockingState() diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/input/ScrollbarPointerTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/input/ScrollbarPointerTest.kt index f08c60f2a..740fbd1ff 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/input/ScrollbarPointerTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/input/ScrollbarPointerTest.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.client.ui.input import org.junit.jupiter.api.Test import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollHandle +import ru.hollowhorizon.hollowengine.client.ui.style.compileHss import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -48,6 +49,38 @@ class ScrollbarPointerTest { } } + @Test + fun `hovering an overlay bar grows it without a click to relayout`() { + HollowUiSurface().use { surface -> + surface.setContent { + Box( + id = "viewport", + mode = UiBoxMode.STACK, + tags = listOf("bar"), + modifier = Modifier.size(100.px, 100.px) + .style(compileHss(".bar { scrollbar: 4px; scrollbar-overlay: true; scrollbar-hover-thickness: 8px; }")) + .then(scrollModifier(horizontal = false)), + ) { + Box(modifier = Modifier.size(60.px, 400.px)) + } + } + surface.frame(200f, 200f, -1f, -1f, 0L) + val rest = surface.frame(200f, 200f, -1f, -1f, 16_000_000L) + val viewport = rest.nodes.single { it.id == "viewport" } + val bar = rest.layout.scrollbars.getValue(viewport).single() + val track = rest.layout.nodes.getValue(bar).rect + assertEquals(4f, track.width, 0.01f) + + val x = track.x + track.width / 2f + val y = track.y + track.height / 2f + surface.frame(200f, 200f, x, y, 32_000_000L) + Thread.sleep(200L) + val hovered = surface.frame(200f, 200f, x, y, 48_000_000L) + + assertEquals(8f, hovered.layout.nodes.getValue(bar).rect.width, 0.01f, "the pointer alone must grow the bar") + } + } + @Test fun `dragging the thumb to the bottom scrolls to the end`() { surfaceWithScrollbar { surface, scroll, frame, viewport -> diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt index 9b8a0fc0f..689fed4cc 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt @@ -6,10 +6,15 @@ import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollState import ru.hollowhorizon.hollowengine.client.ui.style.UiModifierResolver import ru.hollowhorizon.hollowengine.client.ui.style.compileHss import ru.hollowhorizon.hollowengine.client.ui.text.Bold +import ru.hollowhorizon.hollowengine.client.ui.text.UiTextFonts import kotlin.test.assertEquals import kotlin.test.assertTrue class InlineFlowTest { + /** A line is as tall as the test font's line, a little taller than its 10px em. */ + private fun lineOf(fontSize: Float) = UiTextFonts.resolve(TestFontFamily).lineHeight(fontSize) + private val Line = lineOf(10f) + private fun span(text: String, vararg mods: Modifier) = SpanNode(text, modifiers = mods.toList()) @@ -38,7 +43,7 @@ class InlineFlowTest { val s = span("aaaa bbbb cccc") val (layout, container) = flow(60f, s) val containerLayout = layout.nodes.getValue(container) - assertEquals(20f, containerLayout.rect.height, 0.6f, "two 10px lines") + assertEquals(Line * 2f, containerLayout.rect.height, 0.6f, "two 10px lines") val spanLayout = layout.nodes.getValue(s) assertEquals(2, spanLayout.textLayout!!.lines.size, "span split across two lines") @@ -48,7 +53,7 @@ class InlineFlowTest { fun `single line when everything fits`() { val s = span("aa bb") val (layout, container) = flow(200f, s) - assertEquals(10f, layout.nodes.getValue(container).rect.height, 0.6f) + assertEquals(Line, layout.nodes.getValue(container).rect.height, 0.6f) assertEquals(1, layout.nodes.getValue(s).textLayout!!.lines.size) } @@ -59,7 +64,7 @@ class InlineFlowTest { val textLayout = layout.nodes.getValue(s).textLayout!! assertEquals(2, textLayout.lines.size) - assertEquals(20f, layout.nodes.getValue(container).rect.height, 0.6f) + assertEquals(Line * 2f, layout.nodes.getValue(container).rect.height, 0.6f) assertEquals(0, textLayout.lines[0].sourceStart) assertEquals(3, textLayout.lines[0].sourceLength) assertEquals(3, textLayout.lines[1].sourceStart) @@ -201,7 +206,7 @@ class InlineFlowTest { val word = span("aaaaaaaaaa") val comma = span(",") val (layout, container) = flow(67f, word, comma) - assertEquals(10f, layout.nodes.getValue(container).rect.height, 0.6f, "single line — comma glued to the word") + assertEquals(Line, layout.nodes.getValue(container).rect.height, 0.6f, "single line — comma glued to the word") } @Test @@ -211,7 +216,7 @@ class InlineFlowTest { val (layout, container) = flow(42f, revealed, pending) val revealedLayout = layout.nodes.getValue(revealed) - assertEquals(20f, layout.nodes.getValue(container).rect.height, 0.6f, "the whole word moves to the next line") + assertEquals(Line * 2f, layout.nodes.getValue(container).rect.height, 0.6f, "the whole word moves to the next line") assertEquals( revealedLayout.rect.y + revealedLayout.textLayout!!.lines.last().y, layout.nodes.getValue(pending).rect.y, @@ -225,7 +230,7 @@ class InlineFlowTest { val small = span("aa") val big = span("aa", Modifier.fontSize(20f)) val (layout, container) = flow(500f, small, big) - assertEquals(20f, layout.nodes.getValue(container).rect.height, 0.6f, "line height = tallest span") + assertEquals(lineOf(20f), layout.nodes.getValue(container).rect.height, 0.6f, "line height = tallest span") val bigRect = layout.nodes.getValue(big).rect assertEquals(26.667f, bigRect.width, 1.0f) } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/NestedInlineFlowTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/NestedInlineFlowTest.kt index a630e4f28..82faf00c8 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/NestedInlineFlowTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/NestedInlineFlowTest.kt @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollState import ru.hollowhorizon.hollowengine.client.ui.style.UiModifierResolver +import ru.hollowhorizon.hollowengine.client.ui.text.UiTextFonts import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -37,10 +38,10 @@ class NestedInlineFlowTest { children.add(group) children.add(span("dd")) } - assertEquals(10f, layout.nodes.getValue(container).rect.height, 0.6f) + assertEquals(UiTextFonts.resolve(TestFontFamily).lineHeight(10f), layout.nodes.getValue(container).rect.height, 0.6f) val groupRect = layout.nodes.getValue(group).rect assertEquals(33.333f, groupRect.width, 1.5f) - assertEquals(10f, groupRect.height, 0.6f) + assertEquals(UiTextFonts.resolve(TestFontFamily).lineHeight(10f), groupRect.height, 0.6f) } @Test diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/BorderDashPatternTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/BorderDashPatternTest.kt new file mode 100644 index 000000000..152657485 --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/BorderDashPatternTest.kt @@ -0,0 +1,18 @@ +package ru.hollowhorizon.hollowengine.client.ui.render + +import org.junit.jupiter.api.Test +import ru.hollowhorizon.hollowengine.client.ui.UiBorderDash +import kotlin.math.PI +import kotlin.test.assertEquals + +class BorderDashPatternTest { + @Test + fun `the pattern closes round the ring on a whole number of repeats`() { + val pattern = borderDashPattern(width = 101f, height = 47f, radius = 8f, borderWidth = 1f, dash = UiBorderDash(5f, 4f)) + val perimeter = 2f * (100f - 15f) + 2f * (46f - 15f) + 2f * PI.toFloat() * 7.5f + val repeats = perimeter / pattern.period + + assertEquals(Math.round(repeats).toFloat(), repeats, 0.001f) + assertEquals(5f / 9f, pattern.length / pattern.period, 0.0001f, "stretching keeps the dash to gap ratio") + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/CodeInsightPopupLayoutTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/CodeInsightPopupLayoutTest.kt index 16f9e0c2d..7a3368f47 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/CodeInsightPopupLayoutTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/CodeInsightPopupLayoutTest.kt @@ -9,6 +9,7 @@ import ru.hollowhorizon.hollowengine.client.ui.Modifier import ru.hollowhorizon.hollowengine.client.ui.px import ru.hollowhorizon.hollowengine.client.ui.size import ru.hollowhorizon.hollowengine.client.ui.style.scrollable +import ru.hollowhorizon.hollowengine.client.ui.text.UiTextFonts import ru.hollowhorizon.hollowengine.client.ui.text.UiTextLayouter import ru.hollowhorizon.hollowengine.common.scripting.ide.TokenType import kotlin.test.Test @@ -50,7 +51,7 @@ class CodeInsightPopupLayoutTest { fun `signature popup grows for wrapped lines without scrolling inside a short editor`() { val state = TextFieldState("call(", multiline = true).apply { focus() } val label = "(screen: ResourceLocation, kind: UiSurfaceKind, charDelay: Int, " + - "choiceRevealDelay: Long)" + "choiceRevealDelay: Long, skipDelay: Int, portrait: ResourceLocation, voice: SoundEvent)" val provider = UiSignatureHelpProvider { UiTextSignatureHelp( anchor = state.text.length, @@ -75,7 +76,11 @@ class CodeInsightPopupLayoutTest { val popup = assertNotNull(current.nodeByIdentifier("editable-text-field-signature-help")) val popupLayout = current.layout[popup] - assertTrue(popupLayout.rect.height > state.fontSize + 16f, "wrapped lines must grow the popup") + val line = UiTextFonts.resolve(state.fontFamily).lineHeight(state.fontSize) + assertTrue( + popupLayout.rect.height > line * 1.5f, + "wrapped lines must grow the popup: ${popupLayout.rect} for a $line line", + ) assertEquals(0f, popupLayout.scrollRange.y, 0.01f, "two wrapped lines must not create a scrollbar") assertTrue(popupLayout.rect.width < 604f, "fit width must hug the longest wrapped line") } From b3688401c7e76bcc8f9c89b3c862716241b9b064 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Thu, 24 Sep 2026 18:16:40 +0300 Subject: [PATCH 03/25] Update ide.hss --- runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss | 1 + 1 file changed, 1 insertion(+) diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss index 68c507e9d..124df26b0 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss @@ -8,6 +8,7 @@ #ide-toolbar { size: 100% fit; + padding: 1px 4px 1px 2px; gap: 2px; background: #141518; } From a9ec3bb284aac1ae57e1dbc1088576a72b831efc Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 10:39:48 +0300 Subject: [PATCH 04/25] Add VFX system: runtime, renderers, editor UI Introduce a full VFX subsystem: new runtime model (VfxInstance, VfxNodeRuntime, node behaviors), render pipeline (quad/mesh/ribbon renderers, post-processing, scene copies), preview/editor integration, shader declarations and core shader assets, model-surface sampling, and UI inspectors/editors for VFX. Replace string-based animatable IDs with typed VfxProperty and update timeline/driven systems accordingly. Add resource reload hooks, Iris integration points, many example .vfx files and localization updates, and update tests to validate format/compilation. This change improves flexibility, shader support, and batching for particle/model/ribbon effects. --- .../iris/IrisRenderingPipelineMixin.java | 6 + .../bootstrap/runtime/RuntimeBridge.java | 6 + .../bootstrap/RuntimeBridgeEntrypoint.kt | 5 + .../hollowengine/client/render/DebugLines.kt | 5 + .../client/render/RenderManager.kt | 6 +- .../client/ui/ide/files/vfx/VfxColorField.kt | 4 +- .../client/ui/ide/files/vfx/VfxCurveDialog.kt | 14 +- .../client/ui/ide/files/vfx/VfxDriven.kt | 14 +- .../client/ui/ide/files/vfx/VfxEditorPanel.kt | 10 +- .../ui/ide/files/vfx/VfxEmitterInspector.kt | 167 ++++ .../client/ui/ide/files/vfx/VfxFields.kt | 29 +- .../client/ui/ide/files/vfx/VfxInspector.kt | 336 +------- .../ui/ide/files/vfx/VfxModuleInspector.kt | 10 +- .../ui/ide/files/vfx/VfxPreviewGizmo.kt | 46 +- .../ui/ide/files/vfx/VfxPreviewRenderer.kt | 183 +++++ .../ui/ide/files/vfx/VfxPreviewState.kt | 118 +-- .../ui/ide/files/vfx/VfxShaderInspector.kt | 111 +++ .../ui/ide/files/vfx/VfxSurfaceInspector.kt | 301 +++++++ .../ui/ide/files/vfx/VfxTimelineBridge.kt | 15 +- .../client/utils/ForgeKotlinClient.kt | 4 - .../hollowengine/client/vfx/VfxAssets.kt | 3 + .../client/vfx/VfxBoneAttachmentRuntime.kt | 1 + .../hollowengine/client/vfx/VfxEmitter.kt | 86 +- .../hollowengine/client/vfx/VfxExpressions.kt | 32 + .../hollowengine/client/vfx/VfxInstance.kt | 165 ++-- .../client/vfx/VfxModelSurfaces.kt | 139 ++++ .../hollowengine/client/vfx/VfxNodeRuntime.kt | 169 ++++ .../hollowengine/client/vfx/VfxParticles.kt | 21 +- .../hollowengine/client/vfx/VfxSamplers.kt | 18 +- .../hollowengine/client/vfx/VfxScenes.kt | 20 +- .../client/vfx/render/VfxDrawList.kt | 127 +++ .../client/vfx/render/VfxDraws.kt | 151 ++-- .../client/vfx/render/VfxMeshRenderer.kt | 274 +++++++ .../client/vfx/render/VfxPrimitiveMeshes.kt | 147 ++++ .../client/vfx/render/VfxQuadPacker.kt | 229 +++--- .../client/vfx/render/VfxQuadRenderer.kt | 170 +--- .../client/vfx/render/VfxRenderSupport.kt | 179 ++++ .../client/vfx/render/VfxRibbonRenderer.kt | 130 +++ .../client/vfx/render/VfxRibbons.kt | 421 ++++++++++ .../client/vfx/render/VfxScreenNodes.kt | 110 +++ .../vfx/render/VfxShaderDeclarations.kt | 102 +++ .../client/vfx/render/VfxSurfaceNodes.kt | 127 +++ .../client/vfx/render/VfxUniforms.kt | 129 +++ .../client/vfx/render/VfxWorldRenderer.kt | 83 +- .../common/registry/ModShaders.kt | 13 + .../hollowengine/common/vfx/VfxEffect.kt | 142 +--- .../hollowengine/common/vfx/VfxEmitterSpec.kt | 202 +++++ .../common/vfx/VfxMaterialSpec.kt | 80 +- .../hollowengine/common/vfx/VfxNodes.kt | 74 ++ .../hollowengine/common/vfx/VfxProperty.kt | 117 +++ .../hollowengine/common/vfx/VfxRegistries.kt | 60 +- .../common/vfx/VfxRendererSpecs.kt | 305 +++++++ .../hollowengine/common/vfx/VfxScreenSpecs.kt | 75 ++ .../hollowengine/common/vfx/VfxSpecs.kt | 334 -------- .../hollowengine/common/vfx/VfxValue.kt | 14 +- .../fabric/internal/IrisHelper.kt | 7 - .../rendering/IrisParticlePrograms.kt | 144 ---- .../main/lang/en_us/hollowengine/gui/vfx.json | 78 +- .../main/lang/ru_ru/hollowengine/gui/vfx.json | 72 +- .../shaders/core/vfx/force_field.fsh | 35 + .../shaders/core/vfx/force_field.json | 29 + .../shaders/core/vfx/force_field.vsh | 31 + .../core/vfx/post/chromatic_aberration.fsh | 18 + .../core/vfx/post/chromatic_aberration.json | 12 + .../shaders/core/vfx/post/grayscale.fsh | 14 + .../shaders/core/vfx/post/grayscale.json | 11 + .../shaders/core/vfx/post/impact.fsh | 18 + .../shaders/core/vfx/post/impact.json | 13 + .../shaders/core/vfx/post/screen.vsh | 11 + .../hollowengine/shaders/core/vfx_mesh.fsh | 31 + .../hollowengine/shaders/core/vfx_mesh.json | 35 + .../hollowengine/shaders/core/vfx_mesh.vsh | 46 ++ .../shaders/core/vfx_particle.fsh | 1 - .../shaders/core/vfx_particle.json | 1 - .../hollowengine/shaders/core/vfx_ribbon.fsh | 31 + .../hollowengine/shaders/core/vfx_ribbon.json | 28 + .../hollowengine/shaders/core/vfx_ribbon.vsh | 31 + .../hollowengine/textures/particle/white.png | Bin 0 -> 123 bytes .../assets/hollowengine/vfx/example.vfx | 32 +- .../assets/hollowengine/vfx/explosion.vfx | 743 +++++++++++++++++ .../assets/hollowengine/vfx/lightning.vfx | 517 ++++++++++++ .../assets/hollowengine/vfx/magic_shield.vfx | 767 ++++++++++++++++++ .../assets/hollowengine/vfx/soul.vfx | 209 +++++ runtime/src/test/kotlin/VfxFormatTests.kt | 173 ++-- 84 files changed, 7238 insertions(+), 1739 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModelSurfaces.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxPrimitiveMeshes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxProperty.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt delete mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt delete mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/force_field.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/force_field.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/force_field.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/post/chromatic_aberration.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/post/chromatic_aberration.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/post/grayscale.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/post/grayscale.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/post/impact.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/post/impact.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/post/screen.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/particle/white.png create mode 100644 runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx create mode 100644 runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx create mode 100644 runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx create mode 100644 runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx diff --git a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/iris/IrisRenderingPipelineMixin.java b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/iris/IrisRenderingPipelineMixin.java index 9cfd77764..590b069dc 100644 --- a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/iris/IrisRenderingPipelineMixin.java +++ b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/iris/IrisRenderingPipelineMixin.java @@ -14,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.hollowhorizon.hollowengine.bootstrap.impl.BootstrapRuntimeManager; import ru.hollowhorizon.hollowengine.fabric.internal.accessors.IrisRenderingPipelineAccessor; import java.io.IOException; @@ -28,6 +29,11 @@ public abstract class IrisRenderingPipelineMixin implements IrisRenderingPipelin hollowengine$programSet = set; } + @Inject(method = "finalizeLevelRendering", at = @At("RETURN")) + private void hollowengine$afterFinalPass(CallbackInfo ci) { + BootstrapRuntimeManager.bridge().onIrisLevelFinished(); + } + @Override public ProgramSet getProgramSet() { return hollowengine$programSet; diff --git a/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java b/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java index f4e0a6ec3..fdba4c537 100644 --- a/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java +++ b/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java @@ -247,6 +247,12 @@ public interface RuntimeBridge extends AutoCloseable { void onIrisShadowRenderEnd(); + /** + * The shader pack has written its final image into the main target. What should look the same + * with and without a pack is drawn from here, over the finished frame and its depth. + */ + void onIrisLevelFinished(); + /** * Fired around a HUD layer. The layer is identified by its resource-location string * (e.g. {@code "minecraft:crosshair"}) rather than a fixed enum, so NeoForge can pass every diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt index e00a8fd77..c9cc2e0a2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt @@ -81,6 +81,7 @@ import ru.hollowhorizon.hollowengine.client.ui.script.UiScriptHudHost import ru.hollowhorizon.hollowengine.common.ui.HudPlacement import ru.hollowhorizon.hollowengine.client.editor.WorldInspector import ru.hollowhorizon.hollowengine.client.ui.notification.NotificationOverlay +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxWorldRenderer import ru.hollowhorizon.hollowengine.common.ui.hud.HudLayerRegistry import ru.hollowhorizon.hollowengine.common.ui.hud.VanillaHudLayers import ru.hollowhorizon.hollowengine.client.utils.HollowCoreLoader @@ -794,6 +795,10 @@ class RuntimeBridgeEntrypoint : RuntimeBridge { IrisHelper.invalidateInstancingPrograms() } + override fun onIrisLevelFinished() { + VfxWorldRenderer.onShaderPackFrameFinished() + } + override fun onIrisShadowRenderStart() { InstanceBatchManager.clear() } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/DebugLines.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/DebugLines.kt index 2edd3d78f..2e440b793 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/DebugLines.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/DebugLines.kt @@ -26,6 +26,11 @@ object DebugLines { val OVERLAY: RenderType = overlayLines("hollowengine:debug_overlay_lines", RenderStateShard.ITEM_ENTITY_TARGET) val PANEL: RenderType = overlayLines("hollowengine:debug_panel_lines", RenderStateShard.MAIN_TARGET) + val BOUND: RenderType = overlayLines( + "hollowengine:debug_bound_lines", + RenderStateShard.OutputStateShard("hollowengine:bound_target", {}, {}), + ) + private fun overlayLines(name: String, target: RenderStateShard.OutputStateShard) = RenderType.create( name, DefaultVertexFormat.POSITION_COLOR_NORMAL, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/RenderManager.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/RenderManager.kt index 05ed6c16d..b67b19d20 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/RenderManager.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/render/RenderManager.kt @@ -197,10 +197,10 @@ object RenderManager { packedLight: Int, ): Int { val (min, max) = attachment.calculateBounds() ?: return packedLight - val centre = MutableVec3f() - worldTransform.matrixF.transform((min + max) * 0.5f, 1f, centre) + val center = MutableVec3f() + worldTransform.matrixF.transform((min + max) * 0.5f, 1f, center) - val position = BlockPos.containing(centre.x.toDouble(), centre.y.toDouble(), centre.z.toDouble()) + val position = BlockPos.containing(center.x.toDouble(), center.y.toDouble(), center.z.toDouble()) if (position == entity.blockPosition()) return packedLight if (!level.getBlockState(position).isAir) { val above = position.above() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt index a05ba727a..37dbba5ef 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt @@ -18,7 +18,7 @@ import ru.hollowhorizon.hollowengine.common.vfx.* fun VfxColorRow( label: String, value: VfxColorValue, - property: String? = null, + property: VfxProperty? = null, hint: String? = null, onChange: (VfxColorValue) -> Unit, ) { @@ -109,7 +109,7 @@ private fun GradientEditor(value: VfxColorValue.Gradient, onChange: (VfxColorVal Column(modifier = Modifier.size(220.px, UiLength.Fit).gap(4.px)) { ColorPalette(value, modifier = Modifier.size(100.percent, 14.px)) {} Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { - VfxSourcePicker(value.source) { onChange(value.copy(source = it)) } + VfxSourcePicker(value.input) { onChange(value.copy(input = it)) } InspectorButton(vfxText("stop_add")) { val last = value.gradient.stops.lastOrNull() val position = ((last?.position ?: 0f) + 0.25f).coerceAtMost(1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt index f6e3f6a7a..6dce69104 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt @@ -9,7 +9,7 @@ import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.EmbeddedTimelineE import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.TimelineFeatures import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton import ru.hollowhorizon.hollowengine.common.vfx.VfxCurve -import ru.hollowhorizon.hollowengine.common.vfx.VfxTimeSource +import ru.hollowhorizon.hollowengine.common.vfx.VfxCurveInput import ru.hollowhorizon.hollowengine.common.vfx.VfxValue /** @@ -49,9 +49,9 @@ internal fun VfxCurveDialog(value: VfxValue.OverTime, onChange: (VfxValue) -> Un Row(modifier = Modifier.size(56.px)) { VfxNumberCellInline(current.scale) { publish(current.copy(scale = it)) } } - VfxSourcePicker(current.source) { source -> - controller.workAreaEnd = domainOf(source, current.curve) - publish(current.copy(source = source)) + VfxSourcePicker(current.input) { input -> + controller.workAreaEnd = domainOf(input, current.curve) + publish(current.copy(input = input)) } InspectorIcon(CloseIcon, vfxText("close")) { onClose() } } @@ -71,7 +71,7 @@ private fun curveController(value: VfxValue.OverTime): TimelineController { val property = AnimProperty(CurvePropertyId, name, FloatPropertyType(name), value.curve.valueAt(0f, 1f)) controller.addProperty(listOf(name), property) controller.replaceKeys(value.curve) - controller.workAreaEnd = domainOf(value.source, value.curve) + controller.workAreaEnd = domainOf(value.input, value.curve) controller.headerWidth = HeaderWidth controller.pixelsPerSecond = (GraphWidth / controller.workAreaEnd).coerceIn(10f, 500f) controller.enterCurveView() @@ -79,8 +79,8 @@ private fun curveController(value: VfxValue.OverTime): TimelineController { return controller } -private fun domainOf(source: VfxTimeSource, curve: VfxCurve): Float = - if (source == VfxTimeSource.LIFETIME) 1f else (curve.keys.maxOfOrNull { it.time } ?: 1f).coerceAtLeast(1f) +private fun domainOf(input: VfxCurveInput, curve: VfxCurve): Float = + if (input == VfxCurveInput.LIFETIME) 1f else (curve.keys.maxOfOrNull { it.time } ?: 1f).coerceAtLeast(1f) private fun TimelineController.curve() = allProperties().single().curves.single() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt index 8b39665c6..22c776d16 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxDriven.kt @@ -3,7 +3,7 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f -import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty /** * What the timeline holds for the properties of [nodeId], as the preview plays it. @@ -12,7 +12,7 @@ internal fun vfxDrivenLookup( document: HollowIdeVfxDocument, preview: VfxPreviewState, nodeId: String, -): (String) -> VfxDrivenValue? = lookup@{ property -> +): (VfxProperty) -> VfxDrivenValue? = lookup@{ property -> val track = document.effect.timeline.track(nodeId, property) ?: return@lookup null val channels = track.curves.filter { it.visible && it.keys.isNotEmpty() }.map { it.channel }.toSet() if (channels.isEmpty()) return@lookup null @@ -23,13 +23,13 @@ internal fun vfxDrivenLookup( } /** The values the running node has for [property] this frame. */ -private fun currentValues(node: VfxNodeRuntime?, property: String): FloatArray { +private fun currentValues(node: VfxNodeRuntime?, property: VfxProperty): FloatArray { if (node == null) return FloatArray(4) return when (property) { - VfxAnimatables.POSITION -> node.transform.position.asArray() - VfxAnimatables.ROTATION -> node.transform.rotation.asArray() - VfxAnimatables.SCALE -> node.transform.scale.asArray() - VfxAnimatables.ENABLED -> floatArrayOf(if (node.enabled) 1f else 0f) + VfxProperty.POSITION -> node.transform.position.asArray() + VfxProperty.ROTATION -> node.transform.rotation.asArray() + VfxProperty.SCALE -> node.transform.scale.asArray() + VfxProperty.ENABLED -> floatArrayOf(if (node.enabled) 1f else 0f) else -> node.drive(property)?.values?.copyOf() ?: FloatArray(4) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt index b718d5b3b..c4ce4e7ae 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt @@ -1,6 +1,7 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx import androidx.compose.runtime.* +import com.mojang.blaze3d.systems.RenderSystem import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import org.lwjgl.glfw.GLFW @@ -26,6 +27,7 @@ import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem import ru.hollowhorizon.hollowengine.client.utils.lang import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeTypes +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import kotlin.time.Duration.Companion.milliseconds private const val AutoSaveDelayMillis = 900L @@ -58,13 +60,17 @@ internal fun VfxEditorPanel(file: HollowIdeOpenFile) { if (document.isModified) file.save() } + DisposableEffect(document) { + onDispose { RenderSystem.recordRenderCall(state.preview::close) } + } + LaunchedEffect(document) { while (isActive) { withFrameNanos { frameNanos -> state.preview.advanceCamera(frameNanos) val rebuilt = state.preview.sync(document.effect, file.path) val sought = state.preview.applyPendingSeek() - val delta = state.preview.deltaSinceLastFrame() + val delta = state.preview.deltaSinceLastFrame(frameNanos) if (session.timeline.isPlaying && delta > 0f) state.preview.advanceBy(delta) if (rebuilt || session.timeline.isPlaying && !sought) { session.timeline.followPlayhead(state.preview.time) @@ -178,7 +184,7 @@ internal class VfxEditorState(document: HollowIdeVfxDocument) { session.timeline.clearSelection() } - fun focusProperty(nodeId: String, property: String) = session.focus(nodeId, property) + fun focusProperty(nodeId: String, property: VfxProperty) = session.focus(nodeId, property) } /** The node tree, as shared scene window shows it. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt new file mode 100644 index 000000000..0b5c888b6 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt @@ -0,0 +1,167 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.Composable +import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.inspector.Pills +import ru.hollowhorizon.hollowengine.client.ui.inspector.ToggleRow +import ru.hollowhorizon.hollowengine.common.vfx.VfxDirectionMode +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxShape +import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind +import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace + +/** How many particles, where they are born, what they start with and how they move. */ +@Composable +internal fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { + val emission = emitter.emission + Folding(state, "emission", vfxText("section_emission")) { + VfxValueRow(vfxText("rate"), emission.rate, VfxProperty.RATE, vfxText("rate_hint")) { + document.replace(emitter.copy(emission = emission.copy(rate = it))) + } + VfxIntRow(vfxText("burst"), emission.burst, vfxText("burst_hint"), min = 0, max = 4096) { + document.replace(emitter.copy(emission = emission.copy(burst = it))) + } + VfxNumberRow(vfxText("duration"), emission.duration, vfxText("duration_hint"), min = 0f) { + document.replace(emitter.copy(emission = emission.copy(duration = it))) + } + ToggleRow(vfxText("loop"), emission.loop) { + document.replace(emitter.copy(emission = emission.copy(loop = it))) + } + if (emission.loop) { + VfxNumberRow(vfxText("loop_delay"), emission.loopDelay, vfxText("loop_delay_hint"), min = 0f) { + document.replace(emitter.copy(emission = emission.copy(loopDelay = it))) + } + } + VfxIntRow(vfxText("max_particles"), emission.maxParticles, vfxText("max_particles_hint"), min = 1, max = 20_000) { + document.replace(emitter.copy(emission = emission.copy(maxParticles = it))) + } + } + + ShapeFields(document, state, emitter) + + val spawn = emitter.spawn + Folding(state, "spawn", vfxText("section_spawn")) { + VfxValueRow(vfxText("lifetime"), spawn.lifetime, VfxProperty.LIFETIME, vfxText("lifetime_hint")) { + document.replace(emitter.copy(spawn = spawn.copy(lifetime = it))) + } + VfxValueRow(vfxText("speed"), spawn.speed, VfxProperty.SPEED, vfxText("speed_hint")) { + document.replace(emitter.copy(spawn = spawn.copy(speed = it))) + } + VfxVec3Row(vfxText("spawn_offset"), spawn.offset, VfxProperty.OFFSET, vfxText("spawn_offset_hint")) { + document.replace(emitter.copy(spawn = spawn.copy(offset = it))) + } + VfxValueRow( + vfxText("inherit_velocity"), + spawn.inheritVelocity, + VfxProperty.INHERIT_VELOCITY, + vfxText("inherit_velocity_hint"), + ) { + document.replace(emitter.copy(spawn = spawn.copy(inheritVelocity = it))) + } + } + + val appearance = emitter.appearance + Folding(state, "appearance", vfxText("section_particle")) { + ToggleRow(vfxText("uniform_size"), appearance.uniformSize) { + document.replace(emitter.copy(appearance = appearance.copy(uniformSize = it))) + } + VfxVec3Row( + vfxText("size"), + appearance.size, + VfxProperty.SIZE, + vfxText("size_hint"), + uniform = appearance.uniformSize, + ) { + document.replace(emitter.copy(appearance = appearance.copy(size = it))) + } + VfxVec3Row(vfxText("spin"), appearance.rotation, VfxProperty.SPIN, vfxText("spin_hint")) { + document.replace(emitter.copy(appearance = appearance.copy(rotation = it))) + } + VfxColorRow(vfxText("color"), appearance.color, VfxProperty.COLOR, vfxText("color_hint")) { + document.replace(emitter.copy(appearance = appearance.copy(color = it))) + } + } + + val motion = emitter.motion + Folding(state, "motion", vfxText("section_motion")) { + VfxValueRow(vfxText("gravity"), motion.gravity, VfxProperty.GRAVITY, vfxText("gravity_hint")) { + document.replace(emitter.copy(motion = motion.copy(gravity = it))) + } + VfxValueRow(vfxText("drag"), motion.drag, VfxProperty.DRAG, vfxText("drag_hint")) { + document.replace(emitter.copy(motion = motion.copy(drag = it))) + } + } + + VfxModuleSections(document, state, emitter) + + Folding(state, "space", vfxText("section_space"), openByDefault = false) { + Pills(VfxSimulationSpace.entries, emitter.space, { vfxText("space_${it.name.lowercase()}") }) { + document.replace(emitter.copy(space = it)) + } + if (emitter.space == VfxSimulationSpace.LOCAL) { + ToggleRow(vfxText("inherit_rotation"), emitter.inheritRotation) { + document.replace(emitter.copy(inheritRotation = it)) + } + ToggleRow(vfxText("inherit_scale"), emitter.inheritScale) { + document.replace(emitter.copy(inheritScale = it)) + } + } + VfxNumberRow(vfxText("max_step"), emitter.maxStep, vfxText("max_step_hint"), min = 1f / 240f, max = 0.25f) { + document.replace(emitter.copy(maxStep = it)) + } + } +} + +/** The shape shows only what chosen kind reads. */ +@Composable +private fun ShapeFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { + val shape = emitter.shape + fun update(next: VfxShape) = document.replace(emitter.copy(shape = next)) + + Folding(state, "shape", vfxText("section_shape")) { + Pills(VfxShapeKind.entries, shape.kind, { vfxText("shape_${it.name.lowercase()}") }) { + update(shape.copy(kind = it)) + } + + val round = shape.kind == VfxShapeKind.SPHERE || shape.kind == VfxShapeKind.CONE || shape.kind == VfxShapeKind.DISC + if (round) { + VfxValueRow(vfxText("radius"), shape.radius, VfxProperty.SHAPE_RADIUS) { update(shape.copy(radius = it)) } + VfxValueRow(vfxText("thickness"), shape.thickness, VfxProperty.SHAPE_THICKNESS, vfxText("thickness_hint")) { + update(shape.copy(thickness = it)) + } + } + if (shape.kind == VfxShapeKind.CONE) { + VfxValueRow(vfxText("angle"), shape.angle, VfxProperty.SHAPE_ANGLE, vfxText("angle_hint")) { + update(shape.copy(angle = it)) + } + } + if (shape.kind == VfxShapeKind.BOX) { + VfxVec3Row(vfxText("extents"), shape.extents, VfxProperty.SHAPE_EXTENTS, vfxText("extents_hint")) { + update(shape.copy(extents = it)) + } + } + if (shape.kind == VfxShapeKind.LINE) { + VfxVec3Row(vfxText("line_end"), shape.extents, VfxProperty.SHAPE_EXTENTS, vfxText("line_end_hint")) { + update(shape.copy(extents = it)) + } + } + if (shape.kind == VfxShapeKind.MODEL) { + VfxAssetRow(vfxText("model"), shape.model, VfxModelExtensions, vfxText("shape_model_hint")) { + update(shape.copy(model = it)) + } + } + + Text(vfxText("direction_mode"), tags = listOf("insp-inline-label")) + Pills(VfxDirectionMode.entries, shape.directionMode, { vfxText("aim_${it.name.lowercase()}") }) { + update(shape.copy(directionMode = it)) + } + val flat = shape.kind == VfxShapeKind.POINT || shape.kind == VfxShapeKind.BOX || shape.kind == VfxShapeKind.LINE + val readsDirection = shape.directionMode == VfxDirectionMode.FIXED || + shape.directionMode == VfxDirectionMode.SHAPE && flat + if (readsDirection) { + VfxFloat3Row(vfxText("direction"), shape.direction) { update(shape.copy(direction = it)) } + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt index ac956727e..791394a14 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt @@ -14,7 +14,8 @@ import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.client.utils.lang import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f import ru.hollowhorizon.hollowengine.common.vfx.VfxCurve -import ru.hollowhorizon.hollowengine.common.vfx.VfxTimeSource +import ru.hollowhorizon.hollowengine.common.vfx.VfxCurveInput +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.VfxValue import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value import kotlin.math.abs @@ -23,12 +24,12 @@ import kotlin.math.abs * What the inspector calls when a field of an animatable property takes the focus, with the id of * that property. */ -val LocalVfxFieldFocus = staticCompositionLocalOf<(String) -> Unit> { {} } +val LocalVfxFieldFocus = staticCompositionLocalOf<(VfxProperty) -> Unit> { {} } /** * What the timeline currently writes into a property, or null when it has no keys for it. */ -val LocalVfxDriven = staticCompositionLocalOf<(String) -> VfxDrivenValue?> { { null } } +val LocalVfxDriven = staticCompositionLocalOf<(VfxProperty) -> VfxDrivenValue?> { { null } } /** The value a timeline track holds right now, and which of its channels track has keys on. */ class VfxDrivenValue(val values: FloatArray, private val channels: Set) { @@ -110,7 +111,7 @@ private fun HintIcon(text: String) { fun VfxValueRow( label: String, value: VfxValue, - property: String? = null, + property: VfxProperty? = null, hint: String? = null, channel: Int = 0, onChange: (VfxValue) -> Unit, @@ -136,7 +137,7 @@ fun VfxValueRow( fun VfxVec3Row( label: String, value: VfxVec3Value, - property: String? = null, + property: VfxProperty? = null, hint: String? = null, uniform: Boolean = false, onChange: (VfxVec3Value) -> Unit, @@ -201,7 +202,7 @@ fun VfxVec3Row( fun VfxFloat3Row( label: String, value: Vec3f, - property: String? = null, + property: VfxProperty? = null, hint: String? = null, onChange: (Vec3f) -> Unit, ) { @@ -251,7 +252,7 @@ fun VfxIntRow( private fun AxisNumber( axis: String, value: Float, - property: String?, + property: VfxProperty?, driven: VfxDrivenValue?, channel: Int, onChange: (Float) -> Unit, @@ -284,13 +285,13 @@ private fun DrivenCell(value: Float) { } @Composable -private fun DrivenMark(property: String?) { +private fun DrivenMark(property: VfxProperty?) { val focus = LocalVfxFieldFocus.current InspectorIcon(KeyframeIcon, vfxText("driven_show")) { if (property != null) focus(property) } } @Composable -private fun NumberCell(value: Float, property: String?, whole: Boolean, onChange: (Float) -> Unit) { +private fun NumberCell(value: Float, property: VfxProperty?, whole: Boolean, onChange: (Float) -> Unit) { val focus = LocalVfxFieldFocus.current var draft by remember { mutableStateOf(formatNumber(value)) } var lastExternal by remember { mutableStateOf(value) } @@ -320,7 +321,7 @@ internal fun VfxNumberCellInline(value: Float, onChange: (Float) -> Unit) = NumberCell(value, null, whole = false, onChange = onChange) @Composable -private fun TextCell(text: String, property: String?, onChange: (String) -> Unit) { +private fun TextCell(text: String, property: VfxProperty?, onChange: (String) -> Unit) { val focus = LocalVfxFieldFocus.current var draft by remember { mutableStateOf(text) } var lastExternal by remember { mutableStateOf(text) } @@ -345,7 +346,7 @@ private fun TextCell(text: String, property: String?, onChange: (String) -> Unit } @Composable -private fun ValueCells(value: VfxValue, property: String?, onChange: (VfxValue) -> Unit) { +private fun ValueCells(value: VfxValue, property: VfxProperty?, onChange: (VfxValue) -> Unit) { when (value) { is VfxValue.Const -> NumberCell(value.value, property, whole = false) { onChange(VfxValue.Const(it)) } @@ -361,7 +362,7 @@ private fun ValueCells(value: VfxValue, property: String?, onChange: (VfxValue) } @Composable -private fun CurveCell(value: VfxValue.OverTime, property: String?, onChange: (VfxValue) -> Unit) { +private fun CurveCell(value: VfxValue.OverTime, property: VfxProperty?, onChange: (VfxValue) -> Unit) { val focus = LocalVfxFieldFocus.current var editing by remember { mutableStateOf(false) } @@ -402,7 +403,7 @@ private fun KindPicker(value: VfxValue, onChange: (VfxValue) -> Unit) { } @Composable -internal fun VfxSourcePicker(source: VfxTimeSource, onChange: (VfxTimeSource) -> Unit) { +internal fun VfxSourcePicker(source: VfxCurveInput, onChange: (VfxCurveInput) -> Unit) { var open by remember { mutableStateOf(false) } var anchor by remember { mutableStateOf(UiRect.Zero) } @@ -414,7 +415,7 @@ internal fun VfxSourcePicker(source: VfxTimeSource, onChange: (VfxTimeSource) -> ContextMenu( id = "vfx-source", anchorBounds = anchor, - items = VfxTimeSource.entries.map { entry -> + items = VfxCurveInput.entries.map { entry -> UiDropdownItem(vfxText("source_${entry.name.lowercase()}"), checked = entry == source) { onChange(entry) } }, onExpandedChange = { if (!it) open = false }, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt index c2e9888ac..5b65445fe 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt @@ -2,12 +2,8 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider -import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument import ru.hollowhorizon.hollowengine.client.ui.inspector.* -import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect -import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint -import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.client.utils.lang import ru.hollowhorizon.hollowengine.common.vfx.* @@ -35,29 +31,43 @@ internal fun vfxNodeInspector( } } -private fun HollowIdeVfxDocument.replace(node: VfxNodeSpec) = edit(mergeKey = "node:${node.id}") { it.withNode(node) } +internal fun HollowIdeVfxDocument.replace(node: VfxNodeSpec) = edit(mergeKey = "node:${node.id}") { it.withNode(node) } @Composable private fun NodeFields(document: HollowIdeVfxDocument, state: VfxEditorState, node: VfxNodeSpec) { Folding(state, "node", vfxText("section_node")) { NameRow(vfxText("name"), node.name) { document.replace(node.withCommon(name = it)) } ToggleRow(vfxText("enabled"), node.enabled) { document.replace(node.withCommon(enabled = it)) } + if (node is VfxParticleRendererSpec) { + val parent = document.effect.parentOf(node.id) + Hint(vfxText(if (parent is VfxEmitterSpec) "renders_particles" else "renders_once")) + } } Folding(state, "transform", vfxText("section_transform"), openByDefault = false) { val transform = node.transform - VfxFloat3Row(vfxText("position"), transform.position, VfxAnimatables.POSITION) { + VfxFloat3Row(vfxText("position"), transform.position, VfxProperty.POSITION) { document.replace(node.withCommon(transform = transform.copy(position = it))) } - VfxFloat3Row(vfxText("rotation"), transform.rotation, VfxAnimatables.ROTATION) { + VfxFloat3Row(vfxText("rotation"), transform.rotation, VfxProperty.ROTATION) { document.replace(node.withCommon(transform = transform.copy(rotation = it))) } - VfxFloat3Row(vfxText("scale"), transform.scale, VfxAnimatables.SCALE) { + VfxFloat3Row(vfxText("scale"), transform.scale, VfxProperty.SCALE) { document.replace(node.withCommon(transform = transform.copy(scale = it))) } } - if (node is VfxEmitterSpec) EmitterFields(document, state, node) + when (node) { + is VfxEmitterSpec -> EmitterFields(document, state, node) + is VfxPlaneSpec -> PlaneFields(document, state, node) + is VfxMeshSpec -> MeshFields(document, state, node) + is VfxModelSpec -> ModelFields(document, state, node) + is VfxTrailSpec -> TrailFields(document, state, node) + is VfxBeamSpec -> BeamFields(document, state, node) + is VfxPostEffectSpec -> PostEffectFields(document, state, node) + is VfxCameraShakeSpec -> CameraShakeFields(document, state, node) + else -> Unit + } } /** A section that remembers whether it is open per effect editor. */ @@ -75,306 +85,6 @@ internal fun Folding( } } -@Composable -private fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { - val emission = emitter.emission - Folding(state, "emission", vfxText("section_emission")) { - VfxValueRow(vfxText("rate"), emission.rate, VfxAnimatables.RATE, vfxText("rate_hint")) { - document.replace(emitter.withEmitter(emission = emission.copy(rate = it))) - } - VfxIntRow(vfxText("burst"), emission.burst, vfxText("burst_hint"), min = 0, max = 4096) { - document.replace(emitter.withEmitter(emission = emission.copy(burst = it))) - } - VfxNumberRow(vfxText("duration"), emission.duration, vfxText("duration_hint"), min = 0f) { - document.replace(emitter.withEmitter(emission = emission.copy(duration = it))) - } - ToggleRow(vfxText("loop"), emission.loop) { - document.replace(emitter.withEmitter(emission = emission.copy(loop = it))) - } - if (emission.loop) { - VfxNumberRow(vfxText("loop_delay"), emission.loopDelay, vfxText("loop_delay_hint"), min = 0f) { - document.replace(emitter.withEmitter(emission = emission.copy(loopDelay = it))) - } - } - VfxIntRow( - vfxText("max_particles"), - emission.maxParticles, - vfxText("max_particles_hint"), - min = 1, - max = 20_000 - ) { - document.replace(emitter.withEmitter(emission = emission.copy(maxParticles = it))) - } - } - - ShapeFields(document, state, emitter) - - val spawn = emitter.spawn - Folding(state, "spawn", vfxText("section_spawn")) { - VfxValueRow(vfxText("lifetime"), spawn.lifetime, VfxAnimatables.LIFETIME, vfxText("lifetime_hint")) { - document.replace(emitter.withEmitter(spawn = spawn.copy(lifetime = it))) - } - VfxValueRow(vfxText("speed"), spawn.speed, VfxAnimatables.SPEED, vfxText("speed_hint")) { - document.replace(emitter.withEmitter(spawn = spawn.copy(speed = it))) - } - VfxVec3Row(vfxText("spawn_offset"), spawn.offset, VfxAnimatables.OFFSET, vfxText("spawn_offset_hint")) { - document.replace(emitter.withEmitter(spawn = spawn.copy(offset = it))) - } - VfxValueRow( - vfxText("inherit_velocity"), - spawn.inheritVelocity, - VfxAnimatables.INHERIT_VELOCITY, - vfxText("inherit_velocity_hint"), - ) { - document.replace(emitter.withEmitter(spawn = spawn.copy(inheritVelocity = it))) - } - } - - val appearance = emitter.appearance - Folding(state, "appearance", vfxText("section_appearance")) { - ToggleRow(vfxText("uniform_size"), appearance.uniformSize) { - document.replace(emitter.withEmitter(appearance = appearance.copy(uniformSize = it))) - } - VfxVec3Row( - vfxText("size"), - appearance.size, - VfxAnimatables.SIZE, - vfxText("size_hint"), - uniform = appearance.uniformSize, - ) { - document.replace(emitter.withEmitter(appearance = appearance.copy(size = it))) - } - VfxVec3Row(vfxText("spin"), appearance.rotation, VfxAnimatables.SPIN, vfxText("spin_hint")) { - document.replace(emitter.withEmitter(appearance = appearance.copy(rotation = it))) - } - VfxColorRow(vfxText("color"), appearance.color, VfxAnimatables.COLOR, vfxText("color_hint")) { - document.replace(emitter.withEmitter(appearance = appearance.copy(color = it))) - } - } - - val motion = emitter.motion - Folding(state, "motion", vfxText("section_motion")) { - VfxValueRow(vfxText("gravity"), motion.gravity, VfxAnimatables.GRAVITY, vfxText("gravity_hint")) { - document.replace(emitter.withEmitter(motion = motion.copy(gravity = it))) - } - VfxValueRow(vfxText("drag"), motion.drag, VfxAnimatables.DRAG, vfxText("drag_hint")) { - document.replace(emitter.withEmitter(motion = motion.copy(drag = it))) - } - } - - when (emitter) { - is VfxQuadEmitterSpec -> QuadFields(document, state, emitter) - is VfxMeshEmitterSpec -> MeshFields(document, state, emitter) - else -> Unit - } - - VfxModuleSections(document, state, emitter) - - Folding(state, "space", vfxText("section_space"), openByDefault = false) { - Pills(VfxSimulationSpace.entries, emitter.space, { vfxText("space_${it.name.lowercase()}") }) { - document.replace(emitter.withEmitter(space = it)) - } - if (emitter.space == VfxSimulationSpace.LOCAL) { - ToggleRow(vfxText("inherit_rotation"), emitter.inheritRotation) { - document.replace(emitter.withEmitter(inheritRotation = it)) - } - ToggleRow(vfxText("inherit_scale"), emitter.inheritScale) { - document.replace(emitter.withEmitter(inheritScale = it)) - } - } - VfxNumberRow(vfxText("max_step"), emitter.maxStep, vfxText("max_step_hint"), min = 1f / 240f, max = 0.25f) { - document.replace(emitter.withEmitter(maxStep = it)) - } - } -} - -/** The shape shows only what chosen kind reads. */ -@Composable -private fun ShapeFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { - val shape = emitter.shape - fun update(next: VfxShape) = document.replace(emitter.withEmitter(shape = next)) - - Folding(state, "shape", vfxText("section_shape")) { - Pills(VfxShapeKind.entries, shape.kind, { vfxText("shape_${it.name.lowercase()}") }) { - update(shape.copy(kind = it)) - } - - val round = - shape.kind == VfxShapeKind.SPHERE || shape.kind == VfxShapeKind.CONE || shape.kind == VfxShapeKind.DISC - if (round) { - VfxValueRow( - vfxText("radius"), - shape.radius, - VfxAnimatables.SHAPE_RADIUS - ) { update(shape.copy(radius = it)) } - VfxValueRow( - vfxText("thickness"), - shape.thickness, - VfxAnimatables.SHAPE_THICKNESS, - vfxText("thickness_hint") - ) { - update(shape.copy(thickness = it)) - } - } - if (shape.kind == VfxShapeKind.CONE) { - VfxValueRow(vfxText("angle"), shape.angle, VfxAnimatables.SHAPE_ANGLE, vfxText("angle_hint")) { - update(shape.copy(angle = it)) - } - } - if (shape.kind == VfxShapeKind.BOX) { - VfxVec3Row(vfxText("extents"), shape.extents, VfxAnimatables.SHAPE_EXTENTS, vfxText("extents_hint")) { - update(shape.copy(extents = it)) - } - } - if (shape.kind == VfxShapeKind.LINE) { - VfxVec3Row(vfxText("line_end"), shape.extents, VfxAnimatables.SHAPE_EXTENTS, vfxText("line_end_hint")) { - update(shape.copy(extents = it)) - } - } - - Text(vfxText("direction_mode"), tags = listOf("insp-inline-label")) - Pills(VfxDirectionMode.entries, shape.directionMode, { vfxText("aim_${it.name.lowercase()}") }) { - update(shape.copy(directionMode = it)) - } - val readsDirection = - shape.directionMode == VfxDirectionMode.FIXED || shape.directionMode == VfxDirectionMode.SHAPE && (shape.kind == VfxShapeKind.POINT || shape.kind == VfxShapeKind.BOX || shape.kind == VfxShapeKind.LINE) - if (readsDirection) { - VfxFloat3Row(vfxText("direction"), shape.direction) { update(shape.copy(direction = it)) } - } - } -} - -@Composable -private fun QuadFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxQuadEmitterSpec) { - val material = emitter.material - fun update(next: VfxMaterialSpec) = document.replace(emitter.copy(material = next)) - - Folding(state, "material", vfxText("section_material")) { - TextRow(vfxText("texture"), material.texture) { update(material.copy(texture = it)) } - Text(vfxText("blend"), tags = listOf("insp-inline-label")) - BlendPicker(material.blend) { update(material.copy(blend = it)) } - ToggleRow(vfxText("lit_by_world"), material.lighting == VfxLighting.WORLD) { lit -> - update(material.copy(lighting = if (lit) VfxLighting.WORLD else VfxLighting.UNLIT)) - } - UvRows(material.uv) { update(material.copy(uv = it)) } - } - - Folding(state, "depth", vfxText("section_depth"), openByDefault = false) { - ToggleRow(vfxText("depth_test"), material.depthTest) { update(material.copy(depthTest = it)) } - ToggleRow(vfxText("depth_write"), material.depthWrite) { update(material.copy(depthWrite = it)) } - ToggleRow(vfxText("cull"), material.cull) { update(material.copy(cull = it)) } - } - - Folding(state, "facing", vfxText("section_facing")) { - Pills(VfxFacing.entries, emitter.facing, { vfxText("facing_${it.name.lowercase()}") }) { - document.replace(emitter.copy(facing = it)) - } - if (emitter.facing == VfxFacing.CAMERA_AXIS) { - VfxFloat3Row(vfxText("facing_axis"), emitter.facingAxis) { document.replace(emitter.copy(facingAxis = it)) } - } - } -} - -@Composable -private fun UvRows(uv: VfxUvRect, onChange: (VfxUvRect) -> Unit) { - Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { - VfxFieldLabel(vfxText("uv_from"), vfxText("uv_hint")) - UvNumber("U", uv.u0) { onChange(uv.copy(u0 = it)) } - UvNumber("V", uv.v0) { onChange(uv.copy(v0 = it)) } - } - Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { - VfxFieldLabel(vfxText("uv_to")) - UvNumber("U", uv.u1) { onChange(uv.copy(u1 = it)) } - UvNumber("V", uv.v1) { onChange(uv.copy(v1 = it)) } - } -} - -@Composable -private fun UvNumber(axis: String, value: Float, onChange: (Float) -> Unit) { - Row(modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(vertical = UiAlign.CENTER)) { - Text(axis, modifier = Modifier.fontSize(8f).foreground(UiColor(0.55f, 0.58f, 0.65f, 1f))) - VfxNumberCellInline(value) { onChange(it.coerceIn(0f, 1f)) } - } -} - -@Composable -private fun BlendPicker(current: VfxBlend, onChange: (VfxBlend) -> Unit) { - Row(modifier = Modifier.size(100.percent).gap(4.px)) { - VfxBlend.entries.forEach { blend -> - val selected = blend == current - Column( - modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(horizontal = UiAlign.CENTER) - .input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) - .tooltipOnHover(vfxText("blend_${blend.name.lowercase()}_hint")).onClick { event -> - onChange(blend) - event.consume() - }, - ) { - Box( - modifier = Modifier.size(100.percent, 26.px).drawBehind(key = blend to selected) { - drawBlendPreview(blend, size.width, size.height, selected) - }, - ) - Text( - vfxText("blend_${blend.name.lowercase()}"), - modifier = Modifier.fontSize(8f).foreground(if (selected) SelectedText else MutedText), - ) - } - } - } -} - -private fun UiCanvasDrawScope.drawBlendPreview( - blend: VfxBlend, - width: Float, - height: Float, - selected: Boolean, -) { - val half = width / 2f - drawRect(UiRect(0f, 0f, half, height), UiPaint.Color(DarkGround)) - drawRect(UiRect(half, 0f, width - half, height), UiPaint.Color(LightGround)) - - val inset = height * 0.22f - val left = UiRect(width * 0.2f, inset, half - width * 0.2f, height - inset * 2f) - val right = UiRect(half, inset, half - width * 0.2f, height - inset * 2f) - drawRect(left, UiPaint.Color(blended(blend, DarkGround))) - drawRect(right, UiPaint.Color(blended(blend, LightGround))) - - val border = if (selected) SelectedBorder else IdleBorder - drawRect(UiRect(0f, 0f, width, 1f), UiPaint.Color(border)) - drawRect(UiRect(0f, height - 1f, width, 1f), UiPaint.Color(border)) - drawRect(UiRect(0f, 0f, 1f, height), UiPaint.Color(border)) - drawRect(UiRect(width - 1f, 0f, 1f, height), UiPaint.Color(border)) -} - -/** What the sample particle leaves on [ground], worked out the way the blend state would. */ -private fun blended(blend: VfxBlend, ground: UiColor): UiColor { - val alpha = SampleParticle.alpha - fun channel(source: Float, destination: Float): Float = when (blend) { - VfxBlend.OPAQUE -> source - VfxBlend.BLEND -> source * alpha + destination * (1f - alpha) - VfxBlend.ADDITIVE -> (destination + source * alpha).coerceAtMost(1f) - VfxBlend.MULTIPLY -> source * destination + destination * (1f - alpha) - } - return UiColor( - channel(SampleParticle.red, ground.red), - channel(SampleParticle.green, ground.green), - channel(SampleParticle.blue, ground.blue), - 1f, - ) -} - -@Composable -private fun MeshFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxMeshEmitterSpec) { - Folding(state, "model", vfxText("section_model")) { - TextRow(vfxText("model"), emitter.model) { document.replace(emitter.copy(model = it)) } - ToggleRow(vfxText("align_to_velocity"), emitter.alignToVelocity) { - document.replace(emitter.copy(alignToVelocity = it)) - } - ToggleRow(vfxText("emissive"), emitter.emissive) { document.replace(emitter.copy(emissive = it)) } - } -} - /** What the inspector shows when nothing in the tree is selected. */ internal fun vfxEffectInspector(document: HollowIdeVfxDocument, state: VfxEditorState): InspectorTarget = InspectorTarget(id = "vfx-effect", title = vfxText("effect")) { @@ -397,11 +107,3 @@ internal fun vfxEffectInspector(document: HollowIdeVfxDocument, state: VfxEditor Readonly(vfxText("expressions"), effect.expressions().size.toString()) } } - -private val SampleParticle = UiColor(1f, 0.55f, 0.15f, 0.75f) -private val DarkGround = UiColor(0.12f, 0.13f, 0.15f, 1f) -private val LightGround = UiColor(0.78f, 0.8f, 0.84f, 1f) -private val SelectedBorder = UiColor(0.84f, 0.5f, 0.11f, 1f) -private val IdleBorder = UiColor(0.19f, 0.2f, 0.24f, 1f) -private val SelectedText = UiColor(0.93f, 0.94f, 0.96f, 1f) -private val MutedText = UiColor(0.55f, 0.58f, 0.65f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt index e6a61e6f0..cbc16e65f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt @@ -24,7 +24,7 @@ import ru.hollowhorizon.hollowengine.client.ui.size import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem import ru.hollowhorizon.hollowengine.client.utils.lang -import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxCollisionAction import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxCollisionSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec @@ -95,7 +95,7 @@ private fun ModuleFields( module: VfxModuleSpec, ) { fun replace(next: VfxModuleSpec) = document.replaceModule(emitter, index, next) - fun property(field: String) = VfxAnimatables.moduleProperty(module.id, field) + fun property(field: String) = VfxProperty.module(module.id, field) when (module) { is VfxVelocityOverLifetimeSpec -> { @@ -190,14 +190,14 @@ private fun HollowIdeVfxDocument.replaceModule(emitter: VfxEmitterSpec, index: I val modules = emitter.modules.toMutableList() if (index !in modules.indices) return modules[index] = module - edit(mergeKey = "node:${emitter.id}") { it.withNode(emitter.withEmitter(modules = modules)) } + edit(mergeKey = "node:${emitter.id}") { it.withNode(emitter.copy(modules = modules)) } } private fun HollowIdeVfxDocument.removeModule(emitter: VfxEmitterSpec, index: Int) { val modules = emitter.modules.filterIndexed { at, _ -> at != index } - edit(mergeKey = "node:${emitter.id}") { it.withNode(emitter.withEmitter(modules = modules)) } + edit(mergeKey = "node:${emitter.id}") { it.withNode(emitter.copy(modules = modules)) } } private fun HollowIdeVfxDocument.addModule(emitter: VfxEmitterSpec, module: VfxModuleSpec) { - edit { it.withNode(emitter.withEmitter(modules = emitter.modules + module)) } + edit { it.withNode(emitter.copy(modules = emitter.modules + module)) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt index 0b380175f..a86f96b58 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt @@ -47,7 +47,7 @@ object VfxGizmos { node: VfxNodeSpec, runtime: VfxNodeRuntime?, showShape: Boolean, - driven: (String) -> VfxDrivenValue?, + driven: (VfxProperty) -> VfxDrivenValue?, ): VfxGizmo { val width = preview.viewportWidth val height = preview.viewportHeight @@ -78,7 +78,7 @@ object VfxGizmos { private val preview: VfxPreviewState, private val matrix: Matrix4f, private val frame: VfxFrame, - private val driven: (String) -> VfxDrivenValue?, + private val driven: (VfxProperty) -> VfxDrivenValue?, ) { val lines = ArrayList() val handles = ArrayList() @@ -147,18 +147,18 @@ object VfxGizmos { handles += VfxGizmoHandle(id, from.x, from.y, to.x - from.x, to.y - from.y, color, readout, apply) } - private fun current(property: String, channel: Int, value: VfxValue, fallback: Float): Float { + private fun current(property: VfxProperty, channel: Int, value: VfxValue, fallback: Float): Float { val keyed = driven(property)?.takeIf { it.drives(channel) } return keyed?.value(channel) ?: value.constantOr(fallback) } - private fun editable(property: String, channel: Int, value: VfxValue): Boolean = + private fun editable(property: VfxProperty, channel: Int, value: VfxValue): Boolean = value is VfxValue.Const && driven(property)?.drives(channel) != true fun shape(shape: VfxShape) { - val radius = current(VfxAnimatables.SHAPE_RADIUS, 0, shape.radius, 0.5f) - val thickness = current(VfxAnimatables.SHAPE_THICKNESS, 0, shape.thickness, 1f) - val radiusEditable = editable(VfxAnimatables.SHAPE_RADIUS, 0, shape.radius) + val radius = current(VfxProperty.SHAPE_RADIUS, 0, shape.radius, 0.5f) + val thickness = current(VfxProperty.SHAPE_THICKNESS, 0, shape.thickness, 1f) + val radiusEditable = editable(VfxProperty.SHAPE_RADIUS, 0, shape.radius) fun radiusHandle() { if (!radiusEditable) return @@ -171,7 +171,7 @@ object VfxGizmos { } when (shape.kind) { - VfxShapeKind.POINT -> { + VfxShapeKind.POINT, VfxShapeKind.MODEL -> { val size = 0.08f segment(world(-size, 0f, 0f), world(size, 0f, 0f), ShapeColor) segment(world(0f, -size, 0f), world(0f, size, 0f), ShapeColor) @@ -199,7 +199,7 @@ object VfxGizmos { } private fun cone(shape: VfxShape, radius: Float) { - val angle = current(VfxAnimatables.SHAPE_ANGLE, 0, shape.angle, 25f).coerceIn(0f, 89f) + val angle = current(VfxProperty.SHAPE_ANGLE, 0, shape.angle, 25f).coerceIn(0f, 89f) val top = radius + tan(Math.toRadians(angle.toDouble())).toFloat() * CONE_PREVIEW_HEIGHT circle(radius, PLANE_XZ, 0f, ShapeColor) circle(top, PLANE_XZ, CONE_PREVIEW_HEIGHT, ShapeFaint) @@ -211,7 +211,7 @@ object VfxGizmos { ShapeFaint, ) } - if (editable(VfxAnimatables.SHAPE_RADIUS, 0, shape.radius)) { + if (editable(VfxProperty.SHAPE_RADIUS, 0, shape.radius)) { handle( "radius", Vector3f(radius, 0f, 0f), Vector3f(1f, 0f, 0f), HandleColor, readout = { (radius + it).coerceAtLeast(0f) }, @@ -219,7 +219,7 @@ object VfxGizmos { node.withShape { it.copy(radius = VfxValue.Const((radius + delta).coerceAtLeast(0f))) } } } - if (editable(VfxAnimatables.SHAPE_ANGLE, 0, shape.angle)) { + if (editable(VfxProperty.SHAPE_ANGLE, 0, shape.angle)) { fun degreesFor(delta: Float): Float { val spread = ((top + delta - radius) / CONE_PREVIEW_HEIGHT).coerceAtLeast(0f) return Math.toDegrees(atan(spread).toDouble()).toFloat().coerceIn(0f, 89f) @@ -233,9 +233,9 @@ object VfxGizmos { private fun box(shape: VfxShape) { val extents = shape.extents - val x = current(VfxAnimatables.SHAPE_EXTENTS, 0, extents.x, 0.5f) - val y = current(VfxAnimatables.SHAPE_EXTENTS, 1, extents.y, 0.5f) - val z = current(VfxAnimatables.SHAPE_EXTENTS, 2, extents.z, 0.5f) + val x = current(VfxProperty.SHAPE_EXTENTS, 0, extents.x, 0.5f) + val y = current(VfxProperty.SHAPE_EXTENTS, 1, extents.y, 0.5f) + val z = current(VfxProperty.SHAPE_EXTENTS, 2, extents.z, 0.5f) val corners = listOf( world(-x, -y, -z), world(x, -y, -z), world(x, -y, z), world(-x, -y, z), world(-x, y, -z), world(x, y, -z), world(x, y, z), world(-x, y, z), @@ -244,7 +244,7 @@ object VfxGizmos { polyline(corners.subList(4, 8), ShapeColor, closed = true) for (index in 0 until 4) segment(corners[index], corners[index + 4], ShapeColor) - if (editable(VfxAnimatables.SHAPE_EXTENTS, 0, extents.x)) { + if (editable(VfxProperty.SHAPE_EXTENTS, 0, extents.x)) { handle( "extent-x", Vector3f(x, 0f, 0f), @@ -254,7 +254,7 @@ object VfxGizmos { node.withShape { it.copy(extents = it.extents.copy(x = VfxValue.Const((x + delta).coerceAtLeast(0f)))) } } } - if (editable(VfxAnimatables.SHAPE_EXTENTS, 1, extents.y)) { + if (editable(VfxProperty.SHAPE_EXTENTS, 1, extents.y)) { handle( "extent-y", Vector3f(0f, y, 0f), @@ -264,7 +264,7 @@ object VfxGizmos { node.withShape { it.copy(extents = it.extents.copy(y = VfxValue.Const((y + delta).coerceAtLeast(0f)))) } } } - if (editable(VfxAnimatables.SHAPE_EXTENTS, 2, extents.z)) { + if (editable(VfxProperty.SHAPE_EXTENTS, 2, extents.z)) { handle( "extent-z", Vector3f(0f, 0f, z), @@ -279,15 +279,15 @@ object VfxGizmos { private fun line(shape: VfxShape) { val extents = shape.extents val end = Vector3f( - current(VfxAnimatables.SHAPE_EXTENTS, 0, extents.x, 0.5f), - current(VfxAnimatables.SHAPE_EXTENTS, 1, extents.y, 0.5f), - current(VfxAnimatables.SHAPE_EXTENTS, 2, extents.z, 0.5f), + current(VfxProperty.SHAPE_EXTENTS, 0, extents.x, 0.5f), + current(VfxProperty.SHAPE_EXTENTS, 1, extents.y, 0.5f), + current(VfxProperty.SHAPE_EXTENTS, 2, extents.z, 0.5f), ) segment(world(0f, 0f, 0f), world(end.x, end.y, end.z), ShapeColor) val length = end.length() val editable = (0..2).all { channel -> - editable(VfxAnimatables.SHAPE_EXTENTS, channel, listOf(extents.x, extents.y, extents.z)[channel]) + editable(VfxProperty.SHAPE_EXTENTS, channel, listOf(extents.x, extents.y, extents.z)[channel]) } if (!editable || length <= 1.0e-4f) return @@ -309,7 +309,7 @@ object VfxGizmos { fun moveArrows(parent: VfxFrame?, node: VfxNodeSpec) { val origin = Vector3f(frame.position.x, frame.position.y, frame.position.z) val length = Vector3f(origin).sub(basis.eye).length() * ARROW_SHARE - val keyed = driven(VfxAnimatables.POSITION) + val keyed = driven(VfxProperty.POSITION) listOf(Vec3f.X_AXIS, Vec3f.Y_AXIS, Vec3f.Z_AXIS).forEachIndexed { index, axis -> val color = listOf(AxisX, AxisY, AxisZ)[index] @@ -349,7 +349,7 @@ object VfxGizmos { private fun VfxNodeSpec.withShape(change: (VfxShape) -> VfxShape): VfxNodeSpec { val emitter = this as? VfxEmitterSpec ?: return this - return emitter.withEmitter(shape = change(emitter.shape)) + return emitter.copy(shape = change(emitter.shape)) } private const val CIRCLE_SEGMENTS = 40 diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt new file mode 100644 index 000000000..6ee7800ef --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt @@ -0,0 +1,183 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import com.mojang.blaze3d.pipeline.TextureTarget +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.BufferUploader +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.Tesselator +import com.mojang.blaze3d.vertex.VertexFormat +import com.mojang.blaze3d.vertex.VertexSorting +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GameRenderer +import org.joml.Matrix4f +import org.joml.Vector3f +import org.joml.Vector4f +import org.lwjgl.opengl.GL33 +import ru.hollowhorizon.hollowengine.client.render.DebugLines +import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorColors +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.render.disableScissor +import ru.hollowhorizon.hollowengine.client.ui.render.uiBlendWritesAlpha +import ru.hollowhorizon.hollowengine.client.ui.render.uiWriteAlpha +import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxDrawList +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxFrameRenderer +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxPostProcessor +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxView +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import kotlin.math.abs +import kotlin.math.roundToInt + +/** + * Draws the preview into a target of its own, as large as the panel is in real pixels, and puts + * that on the panel. + * + * A target of its own is what lets the preview show what the world shows: full-screen passes run + * over the preview alone, and a material that reads the scene depth reads the preview's. + */ +internal class VfxPreviewRenderer { + private var target: TextureTarget? = null + private val frame = VfxDrawList() + + /** The camera shake of the last frame, in degrees; the next frame's camera takes it. */ + val shake = FloatArray(3) + + fun render(preview: VfxPreviewState, instance: VfxInstance, rect: UiRect, stack: PoseStack) { + val size = pixelSize(rect, stack) ?: return + var texture = 0 + + withOwnTarget { + val offscreen = targetOf(size.first, size.second) + texture = offscreen.colorTextureId + offscreen.setClearColor(Background.red, Background.green, Background.blue, 1f) + offscreen.clear(Minecraft.ON_OSX) + offscreen.bindWrite(true) + + val view = preview.viewMatrix(shake) + val projection = preview.perspective(size.first.toFloat(), size.second.toFloat()) + RenderSystem.setProjectionMatrix(projection, VertexSorting.DISTANCE_TO_ORIGIN) + RenderSystem.getModelViewStack().set(view) + RenderSystem.applyModelViewMatrix() + + val buffers = Minecraft.getInstance().renderBuffers().bufferSource() + if (preview.showFloor) { + drawFloor(DebugLines.batch(buffers, PoseStack(), DebugLines.BOUND)) + buffers.endBatch(DebugLines.BOUND) + } + + val eye = preview.cameraBasis().eye + instance.camera.set(eye.x, eye.y, eye.z) + frame.clear() + instance.collect(frame, Matrix4f()) + frame.shake.copyInto(shake) + + VfxFrameRenderer.render( + frame, + VfxView( + modelView = view, + projection = projection, + right = Vector3f(view.m00(), view.m10(), view.m20()), + up = Vector3f(view.m01(), view.m11(), view.m21()), + eye = eye, + ), + offscreen, + ) + VfxPostProcessor.apply(frame.posts, offscreen) + } + + blit(texture, rect, stack) + } + + /** + * Runs [draw] with the state the panel was drawing in set aside and put back afterwards. + */ + private inline fun withOwnTarget(draw: () -> Unit) { + val read = GL33.glGetInteger(GL33.GL_READ_FRAMEBUFFER_BINDING) + val write = GL33.glGetInteger(GL33.GL_DRAW_FRAMEBUFFER_BINDING) + val viewport = IntArray(4).also { GL33.glGetIntegerv(GL33.GL_VIEWPORT, it) } + val scissorBox = IntArray(4).also { GL33.glGetIntegerv(GL33.GL_SCISSOR_BOX, it) } + val scissor = GL33.glIsEnabled(GL33.GL_SCISSOR_TEST) + val clearColor = FloatArray(4).also { GL33.glGetFloatv(GL33.GL_COLOR_CLEAR_VALUE, it) } + val alpha = uiBlendWritesAlpha + val projection = Matrix4f(RenderSystem.getProjectionMatrix()) + val sorting = RenderSystem.getVertexSorting() + val modelView = RenderSystem.getModelViewStack() + modelView.pushMatrix() + try { + disableScissor() + RenderSystem.colorMask(true, true, true, true) + draw() + } finally { + RenderSystem.setProjectionMatrix(projection, sorting) + modelView.popMatrix() + RenderSystem.applyModelViewMatrix() + GL33.glBindFramebuffer(GL33.GL_READ_FRAMEBUFFER, read) + GL33.glBindFramebuffer(GL33.GL_DRAW_FRAMEBUFFER, write) + RenderSystem.viewport(viewport[0], viewport[1], viewport[2], viewport[3]) + GL33.glScissor(scissorBox[0], scissorBox[1], scissorBox[2], scissorBox[3]) + if (scissor) GL33.glEnable(GL33.GL_SCISSOR_TEST) + GL33.glClearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]) + uiWriteAlpha(alpha) + } + } + + fun close() { + target?.destroyBuffers() + target = null + } + + /** How many pixels of the target being drawn into the panel covers, whatever scale the UI uses. */ + private fun pixelSize(rect: UiRect, stack: PoseStack): Pair? { + val toClip = Matrix4f(RenderSystem.getProjectionMatrix()).mul(RenderSystem.getModelViewMatrix()) + .mul(stack.last().pose()) + val from = toClip.transform(Vector4f(0f, 0f, 0f, 1f)) + val to = toClip.transform(Vector4f(rect.width, rect.height, 0f, 1f)) + val viewport = IntArray(4).also { GL33.glGetIntegerv(GL33.GL_VIEWPORT, it) } + val width = (abs(to.x / to.w - from.x / from.w) * 0.5f * viewport[2]).roundToInt() + val height = (abs(to.y / to.w - from.y / from.w) * 0.5f * viewport[3]).roundToInt() + if (width < 2 || height < 2) return null + return width.coerceAtMost(MAX_SIZE) to height.coerceAtMost(MAX_SIZE) + } + + private fun targetOf(width: Int, height: Int): TextureTarget { + val current = target + if (current != null && current.width == width && current.height == height) return current + current?.destroyBuffers() + return TextureTarget(width, height, true, Minecraft.ON_OSX).also { target = it } + } + + /** The target over the panel, upside down, since a target starts at the bottom. */ + private fun blit(texture: Int, rect: UiRect, stack: PoseStack) { + RenderSystem.setShader(GameRenderer::getPositionTexShader) + RenderSystem.setShaderTexture(0, texture) + RenderSystem.disableBlend() + RenderSystem.disableCull() + val pose = stack.last().pose() + val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) + builder.addVertex(pose, 0f, 0f, 0f).setUv(0f, 1f) + builder.addVertex(pose, 0f, rect.height, 0f).setUv(0f, 0f) + builder.addVertex(pose, rect.width, rect.height, 0f).setUv(1f, 0f) + builder.addVertex(pose, rect.width, 0f, 0f).setUv(1f, 1f) + BufferUploader.drawWithShader(builder.buildOrThrow()) + RenderSystem.enableCull() + } + + private fun drawFloor(lines: DebugLines.Batch) { + val half = FLOOR_HALF_SIZE + for (step in -half..half) { + val offset = step.toFloat() + val color = if (step == 0) AXIS_COLOR else GRID_COLOR + lines.line(Vec3f(-half.toFloat(), 0f, offset), Vec3f(half.toFloat(), 0f, offset), color) + lines.line(Vec3f(offset, 0f, -half.toFloat()), Vec3f(offset, 0f, half.toFloat()), color) + } + } + + private companion object { + val Background = AnimatorColors.Canvas + const val MAX_SIZE = 8192 + const val FLOOR_HALF_SIZE = 6 + const val GRID_COLOR = 0x40AFC4E0 + const val AXIS_COLOR = 0x80DCBF73.toInt() + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt index 5c5439b54..d11b4b8cf 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt @@ -4,25 +4,16 @@ import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack -import com.mojang.blaze3d.vertex.VertexSorting -import net.minecraft.client.Minecraft import org.joml.Matrix4f import org.joml.Vector3f import org.joml.Vector4f import ru.hollowhorizon.hollowengine.client.handlers.TickHandler -import ru.hollowhorizon.hollowengine.client.render.DebugLines import ru.hollowhorizon.hollowengine.client.ui.SpringZoom import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.vfx.VfxBudget import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance import ru.hollowhorizon.hollowengine.client.vfx.VfxPlaneEnvironment -import ru.hollowhorizon.hollowengine.client.vfx.render.VfxDrawCollector -import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadDraw -import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadRenderer -import ru.hollowhorizon.hollowengine.client.vfx.render.VfxView -import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect import kotlin.math.ceil import kotlin.math.cos @@ -65,8 +56,7 @@ class VfxPreviewState { private set private var builtFor: VfxEffect? = null - private var lastGameTime = Float.NaN - private val draws = ArrayList() + private var lastFrameNanos = 0L /** * Brings the playing instance in line with [effect]. Returns whether it had to be rebuilt. @@ -85,7 +75,7 @@ class VfxPreviewState { instance = VfxInstance(effect, asset, VfxPlaneEnvironment(0.0), seed = PREVIEW_SEED).also { it.update(0f) } revision++ time = 0f - lastGameTime = Float.NaN + lastFrameNanos = 0L if (at in 0f..CATCH_UP_LIMIT) seek(at) else refreshCount() return true } @@ -93,19 +83,18 @@ class VfxPreviewState { fun restart() { instance?.restart() time = 0f - lastGameTime = Float.NaN + lastFrameNanos = 0L refreshCount() } - /** Seconds the effect has been running for, measured against the game clock. */ - fun deltaSinceLastFrame(): Float { - val now = TickHandler.gameTime - val dt = when { - lastGameTime.isNaN() -> 0f - else -> ((now - lastGameTime) / TICKS_PER_SECOND).coerceIn(0f, MAX_STEP) - } - lastGameTime = now - return dt + /** + * Seconds since the previous frame of the editor. + */ + fun deltaSinceLastFrame(frameNanos: Long): Float { + val previous = lastFrameNanos + lastFrameNanos = frameNanos + if (previous == 0L) return 0f + return ((frameNanos - previous) / NANOS_PER_SECOND).toFloat().coerceIn(0f, MAX_STEP) } /** @@ -146,8 +135,10 @@ class VfxPreviewState { fun advanceBy(dt: Float) { val playing = instance ?: return + val eye = cameraBasis().eye + playing.camera.set(eye.x, eye.y, eye.z) playing.partialTick = TickHandler.partialTick - playing.gameTime = TickHandler.gameTime + playing.gameTime = TickHandler.clientFrame + TickHandler.partialTick playing.budget = VfxBudget.share(1) playing.update(dt) time = playing.time @@ -203,13 +194,20 @@ class VfxPreviewState { return Basis(eye, right, up, forward) } - fun viewMatrix(): Matrix4f { + /** The camera, turned by [shake] degrees of pitch, yaw and roll when there is a shake to show. */ + fun viewMatrix(shake: FloatArray? = null): Matrix4f { val basis = cameraBasis() - return Matrix4f().setLookAt( + val look = Matrix4f().setLookAt( basis.eye.x, basis.eye.y, basis.eye.z, targetX, targetY, targetZ, 0f, 1f, 0f, ) + if (shake == null) return look + return Matrix4f() + .rotateZ(Math.toRadians(shake[2].toDouble()).toFloat()) + .rotateX(Math.toRadians(shake[0].toDouble()).toFloat()) + .rotateY(Math.toRadians(shake[1].toDouble()).toFloat()) + .mul(look) } fun perspective(width: Float, height: Float): Matrix4f = @@ -240,73 +238,20 @@ class VfxPreviewState { return Vector3f(clip.x / clip.w, clip.y / clip.w, clip.w) } + private val renderer = VfxPreviewRenderer() + /** Draws the floor and the effect into [rect]; called from a `drawGl` block. */ fun render(rect: UiRect, stack: PoseStack) { val playing = instance ?: return if (rect.width <= 1f || rect.height <= 1f) return - - val view = viewMatrix() - val projection = - Matrix4f(RenderSystem.getProjectionMatrix()).mul(RenderSystem.getModelViewMatrix()).mul(stack.last().pose()) - .mul(pixels(rect)).mul(perspective(rect.width, rect.height)) - - val savedProjection = Matrix4f(RenderSystem.getProjectionMatrix()) - val savedSorting = RenderSystem.getVertexSorting() - val modelView = RenderSystem.getModelViewStack() - modelView.pushMatrix() - modelView.identity() - RenderSystem.applyModelViewMatrix() - RenderSystem.setProjectionMatrix(projection, VertexSorting.DISTANCE_TO_ORIGIN) - - try { - val viewStack = PoseStack() - viewStack.mulPose(view) - - val buffers = Minecraft.getInstance().renderBuffers().bufferSource() - if (showFloor) { - val lines = DebugLines.batch(buffers, viewStack, DebugLines.PANEL) - drawFloor(lines) - buffers.endBatch(DebugLines.PANEL) - } - - VfxDrawCollector.renderMeshes(playing, view) - buffers.endBatch() - - draws.clear() - VfxDrawCollector.collectQuads(playing, Matrix4f(), draws) - if (draws.isNotEmpty()) { - val basis = cameraBasis() - VfxQuadRenderer.render( - draws, - VfxView( - modelView = view, - projection = projection, - right = basis.right, - up = basis.up, - eye = basis.eye, - ), - ) - draws.clear() - } - } finally { - RenderSystem.setProjectionMatrix(savedProjection, savedSorting) - modelView.popMatrix() - RenderSystem.applyModelViewMatrix() - } + renderer.render(this, playing, rect, stack) } - private fun drawFloor(lines: DebugLines.Batch) { - val half = FLOOR_HALF_SIZE - for (step in -half..half) { - val offset = step.toFloat() - val color = if (step == 0) AXIS_COLOR else GRID_COLOR - lines.line(Vec3f(-half.toFloat(), 0f, offset), Vec3f(half.toFloat(), 0f, offset), color) - lines.line(Vec3f(offset, 0f, -half.toFloat()), Vec3f(offset, 0f, half.toFloat()), color) - } - } + /** Frees the target the preview draws into. */ + fun close() = renderer.close() private companion object { - const val TICKS_PER_SECOND = 20f + const val NANOS_PER_SECOND = 1_000_000_000.0 const val MAX_STEP = 0.25f const val PREVIEW_SEED = 0x5EED @@ -323,15 +268,10 @@ class VfxPreviewState { const val MAX_DISTANCE = 60f const val ZOOM_PER_NOTCH = 1.1f - const val FLOOR_HALF_SIZE = 6 - const val CATCH_UP_STEP = 1f / 30f const val CATCH_UP_EPSILON = 1.0e-4f const val MAX_CATCH_UP_STEPS = 90 const val CATCH_UP_LIMIT = 4f - - const val GRID_COLOR = 0x40AFC4E0 - const val AXIS_COLOR = 0x80DCBF73.toInt() } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt new file mode 100644 index 000000000..48c12cba3 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt @@ -0,0 +1,111 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.Composable +import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.inspector.Hint +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton +import ru.hollowhorizon.hollowengine.client.ui.inspector.TextRow +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxShaderDeclarations +import ru.hollowhorizon.hollowengine.common.vfx.VfxCameraShakeSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPostEffectSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxSamplerSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformValue + +@Composable +internal fun PostEffectFields(document: HollowIdeVfxDocument, state: VfxEditorState, post: VfxPostEffectSpec) { + Folding(state, "post", vfxText("section_post")) { + TextRow(vfxText("shader"), post.shader, id = "vfx-post-shader") { typed -> + val shader = typed.trim() + document.replace(post.copy(shader = shader, uniforms = alignUniforms(shader, post.uniforms))) + } + Hint(vfxText("shader_post_hint")) + VfxShaderFields( + post.shader, + post.uniforms, + post.samplers, + onUniforms = { document.replace(post.copy(uniforms = it)) }, + onSamplers = { document.replace(post.copy(samplers = it)) }, + ) + } +} + +@Composable +internal fun CameraShakeFields(document: HollowIdeVfxDocument, state: VfxEditorState, shake: VfxCameraShakeSpec) { + Folding(state, "shake", vfxText("section_shake")) { + VfxValueRow(vfxText("shake_strength"), shake.strength, VfxProperty.SHAKE_STRENGTH, vfxText("shake_strength_hint")) { + document.replace(shake.copy(strength = it)) + } + VfxValueRow(vfxText("shake_frequency"), shake.frequency, VfxProperty.SHAKE_FREQUENCY, vfxText("shake_frequency_hint")) { + document.replace(shake.copy(frequency = it)) + } + VfxFloat3Row(vfxText("shake_amplitude"), shake.amplitude, hint = vfxText("shake_amplitude_hint")) { + document.replace(shake.copy(amplitude = it)) + } + } +} + +/** [authored] brought in line with what [shader] declares, or left as it is when it cannot be read. */ +internal fun alignUniforms(shader: String?, authored: List): List = + shader?.let(VfxShaderDeclarations::of)?.align(authored) ?: authored + +@Composable +internal fun VfxShaderFields( + shader: String?, + uniforms: List, + samplers: List, + onUniforms: (List) -> Unit, + onSamplers: (List) -> Unit, +) { + if (shader.isNullOrBlank()) return + val declaration = VfxShaderDeclarations.of(shader) + if (declaration == null) { + Hint(vfxText("shader_missing")) + return + } + + if (declaration.uniforms.isNotEmpty()) Text(vfxText("section_uniforms"), tags = listOf("insp-inline-label")) + declaration.uniforms.forEach { uniform -> + val value = uniforms.firstOrNull { it.name == uniform.name && uniform.accepts(it.value) }?.value + ?: uniform.defaultValue() + val property = VfxProperty.uniform(uniform.name) + fun set(next: VfxUniformValue) = onUniforms(uniforms.upsert(VfxUniformSpec(uniform.name, next)) { it.name }) + + when (value) { + is VfxUniformValue.Scalar -> VfxValueRow(uniform.name, value.value, property) { + set(VfxUniformValue.Scalar(it)) + } + + is VfxUniformValue.Vector -> VfxVec3Row(uniform.name, value.value, property) { + set(VfxUniformValue.Vector(it)) + } + + is VfxUniformValue.Color -> VfxColorRow(uniform.name, value.value, property) { + set(VfxUniformValue.Color(it)) + } + } + } + + val stale = uniforms.filter { declaration.uniform(it.name) == null } + if (stale.isNotEmpty()) { + Hint(vfxText("uniforms_stale") + " " + stale.joinToString { it.name }) + InspectorButton(vfxText("uniforms_drop")) { onUniforms(uniforms - stale.toSet()) } + } + + if (declaration.samplers.isNotEmpty()) Text(vfxText("section_samplers"), tags = listOf("insp-inline-label")) + declaration.samplers.forEach { name -> + val texture = samplers.firstOrNull { it.name == name }?.texture.orEmpty() + VfxAssetRow(name, texture, listOf(".png"), id = "vfx-sampler-$name") { typed -> + val kept = samplers.filterNot { it.name == name } + onSamplers(if (typed.isBlank()) kept else samplers.upsert(VfxSamplerSpec(name, typed)) { it.name }) + } + } +} + +/** [item] in place of the element with the same key, or added at the end when there is none. */ +private fun List.upsert(item: T, key: (T) -> String): List { + val index = indexOfFirst { key(it) == key(item) } + return if (index < 0) this + item else toMutableList().also { it[index] = item } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt new file mode 100644 index 000000000..2e9c58d08 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt @@ -0,0 +1,301 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.inspector.AssetPickerButton +import ru.hollowhorizon.hollowengine.client.ui.inspector.Hint +import ru.hollowhorizon.hollowengine.client.ui.inspector.LocalInspectorHost +import ru.hollowhorizon.hollowengine.client.ui.inspector.Pills +import ru.hollowhorizon.hollowengine.client.ui.inspector.TextRow +import ru.hollowhorizon.hollowengine.client.ui.inspector.ToggleRow +import ru.hollowhorizon.hollowengine.client.ui.inspector.assetCompletions +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover +import ru.hollowhorizon.hollowengine.common.vfx.* + +internal val VfxModelExtensions = listOf(".glb", ".gltf", ".fbx", ".obj") +private val TextureExtensions = listOf(".png") + +/** A resource path with the completions and the picker the inspector offers for assets. */ +@Composable +internal fun VfxAssetRow( + label: String, + value: String, + extensions: List, + hint: String? = null, + id: String = "vfx-asset-$label", + onChange: (String) -> Unit, +) { + val host = LocalInspectorHost.current + val candidates = remember(extensions, host) { host?.assets(extensions).orEmpty() } + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(label, hint) + Box(modifier = Modifier.size(0.px, UiLength.Fit).grow(1f)) { + TextRow( + label = "", + value = value, + id = id, + completions = if (candidates.isEmpty()) null else assetCompletions(candidates), + trailing = { AssetPickerButton(extensions, value, label, onChange) }, + onChange = onChange, + ) + } + } +} + +@Composable +internal fun PlaneFields(document: HollowIdeVfxDocument, state: VfxEditorState, plane: VfxPlaneSpec) { + Folding(state, "facing", vfxText("section_facing")) { + Pills(VfxFacing.entries, plane.facing, { vfxText("facing_${it.name.lowercase()}") }) { + document.replace(plane.copy(facing = it)) + } + if (plane.facing == VfxFacing.CAMERA_AXIS) { + VfxFloat3Row(vfxText("facing_axis"), plane.facingAxis, hint = vfxText("facing_axis_hint")) { + document.replace(plane.copy(facingAxis = it)) + } + } + } + SurfaceFields(document, state, plane) +} + +@Composable +internal fun MeshFields(document: HollowIdeVfxDocument, state: VfxEditorState, mesh: VfxMeshSpec) { + Folding(state, "mesh", vfxText("section_mesh")) { + ToggleRow(vfxText("align_to_velocity"), mesh.alignToVelocity) { + document.replace( + when (mesh) { + is VfxCubeSpec -> mesh.copy(alignToVelocity = it) + is VfxSphereSpec -> mesh.copy(alignToVelocity = it) + is VfxCylinderSpec -> mesh.copy(alignToVelocity = it) + else -> mesh + } + ) + } + when (mesh) { + is VfxSphereSpec -> VfxIntRow(vfxText("segments"), mesh.segments, min = 4, max = 128) { + document.replace(mesh.copy(segments = it)) + } + + is VfxCylinderSpec -> { + VfxIntRow(vfxText("segments"), mesh.segments, min = 3, max = 128) { + document.replace(mesh.copy(segments = it)) + } + ToggleRow(vfxText("caps"), mesh.caps) { document.replace(mesh.copy(caps = it)) } + } + + else -> Unit + } + } + SurfaceFields(document, state, mesh) +} + +@Composable +internal fun ModelFields(document: HollowIdeVfxDocument, state: VfxEditorState, model: VfxModelSpec) { + Folding(state, "model", vfxText("section_model")) { + VfxAssetRow(vfxText("model"), model.model, VfxModelExtensions) { document.replace(model.copy(model = it)) } + ToggleRow(vfxText("align_to_velocity"), model.alignToVelocity) { + document.replace(model.copy(alignToVelocity = it)) + } + ToggleRow(vfxText("emissive"), model.emissive) { document.replace(model.copy(emissive = it)) } + } +} + +@Composable +internal fun TrailFields(document: HollowIdeVfxDocument, state: VfxEditorState, trail: VfxTrailSpec) { + Folding(state, "trail", vfxText("section_trail")) { + VfxValueRow(vfxText("width"), trail.width, VfxProperty.WIDTH, vfxText("ribbon_width_hint")) { + document.replace(trail.copy(width = it)) + } + VfxNumberRow(vfxText("trail_lifetime"), trail.lifetime, vfxText("trail_lifetime_hint"), min = 0.01f) { + document.replace(trail.copy(lifetime = it)) + } + VfxNumberRow(vfxText("trail_min_distance"), trail.minDistance, vfxText("trail_min_distance_hint"), min = 0f) { + document.replace(trail.copy(minDistance = it)) + } + VfxIntRow(vfxText("trail_max_points"), trail.maxPoints, min = 2, max = 256) { + document.replace(trail.copy(maxPoints = it)) + } + RibbonUvRows(trail.uvMode, trail.tileLength, { document.replace(trail.copy(uvMode = it)) }) { + document.replace(trail.copy(tileLength = it)) + } + } + SurfaceFields(document, state, trail) +} + +@Composable +internal fun BeamFields(document: HollowIdeVfxDocument, state: VfxEditorState, beam: VfxBeamSpec) { + Folding(state, "beam", vfxText("section_beam")) { + TextRow(vfxText("beam_target"), beam.target, id = "vfx-beam-target") { document.replace(beam.copy(target = it.trim())) } + if (beam.target.isBlank()) { + VfxFloat3Row(vfxText("beam_end"), beam.end, VfxProperty.BEAM_END, vfxText("beam_end_hint")) { + document.replace(beam.copy(end = it)) + } + } + VfxValueRow(vfxText("width"), beam.width, VfxProperty.WIDTH, vfxText("ribbon_width_hint")) { + document.replace(beam.copy(width = it)) + } + VfxIntRow(vfxText("segments"), beam.segments, min = 1, max = 256) { document.replace(beam.copy(segments = it)) } + VfxValueRow(vfxText("beam_noise"), beam.noise, VfxProperty.BEAM_NOISE, vfxText("beam_noise_hint")) { + document.replace(beam.copy(noise = it)) + } + VfxNumberRow(vfxText("frequency"), beam.noiseFrequency, vfxText("beam_frequency_hint"), min = 0f) { + document.replace(beam.copy(noiseFrequency = it)) + } + VfxNumberRow(vfxText("beam_noise_speed"), beam.noiseSpeed, min = 0f) { document.replace(beam.copy(noiseSpeed = it)) } + VfxNumberRow(vfxText("uv_scroll"), beam.uvScroll, vfxText("uv_scroll_hint")) { document.replace(beam.copy(uvScroll = it)) } + RibbonUvRows(beam.uvMode, beam.tileLength, { document.replace(beam.copy(uvMode = it)) }) { + document.replace(beam.copy(tileLength = it)) + } + } + SurfaceFields(document, state, beam) +} + +@Composable +private fun RibbonUvRows(mode: VfxRibbonUv, tileLength: Float, onMode: (VfxRibbonUv) -> Unit, onTile: (Float) -> Unit) { + Pills(VfxRibbonUv.entries, mode, { vfxText("ribbon_uv_${it.name.lowercase()}") }, onMode) + if (mode == VfxRibbonUv.TILE) { + VfxNumberRow(vfxText("tile_length"), tileLength, vfxText("tile_length_hint"), min = 0.01f, onChange = onTile) + } +} + +/** The tint and the material, which every surface has. */ +@Composable +private fun SurfaceFields(document: HollowIdeVfxDocument, state: VfxEditorState, surface: VfxSurfaceSpec) { + val material = surface.material + fun update(next: VfxMaterialSpec) = document.replace(surface.withSurface(material = next)) + + Folding(state, "material", vfxText("section_material")) { + VfxColorRow(vfxText("tint"), surface.tint, VfxProperty.TINT, vfxText("tint_hint")) { + document.replace(surface.withSurface(tint = it)) + } + VfxAssetRow(vfxText("texture"), material.texture, TextureExtensions) { update(material.copy(texture = it)) } + Text(vfxText("blend"), tags = listOf("insp-inline-label")) + BlendPicker(material.blend) { update(material.copy(blend = it)) } + ToggleRow(vfxText("lit_by_world"), material.lighting == VfxLighting.WORLD) { lit -> + update(material.copy(lighting = if (lit) VfxLighting.WORLD else VfxLighting.UNLIT)) + } + UvRows(material.uv) { update(material.copy(uv = it)) } + } + + Folding(state, "depth", vfxText("section_depth"), openByDefault = false) { + ToggleRow(vfxText("depth_test"), material.depthTest) { update(material.copy(depthTest = it)) } + ToggleRow(vfxText("depth_write"), material.depthWrite) { update(material.copy(depthWrite = it)) } + ToggleRow(vfxText("cull"), material.cull) { update(material.copy(cull = it)) } + } + + Folding(state, "shader", vfxText("section_shader"), openByDefault = material.shader != null) { + TextRow(vfxText("shader"), material.shader.orEmpty(), id = "vfx-material-shader") { typed -> + val shader = typed.trim().ifBlank { null } + update(material.copy(shader = shader, uniforms = alignUniforms(shader, material.uniforms))) + } + val attributes = when (surface) { + is VfxMeshSpec -> "shader_mesh_hint" + is VfxPlaneSpec -> "shader_plane_hint" + else -> "shader_ribbon_hint" + } + Hint(vfxText(attributes)) + VfxShaderFields( + material.shader, + material.uniforms, + material.samplers, + onUniforms = { update(material.copy(uniforms = it)) }, + onSamplers = { update(material.copy(samplers = it)) }, + ) + } +} + +@Composable +private fun UvRows(uv: VfxUvRect, onChange: (VfxUvRect) -> Unit) { + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(vfxText("uv_from"), vfxText("uv_hint")) + UvNumber("U", uv.u0) { onChange(uv.copy(u0 = it)) } + UvNumber("V", uv.v0) { onChange(uv.copy(v0 = it)) } + } + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(vfxText("uv_to")) + UvNumber("U", uv.u1) { onChange(uv.copy(u1 = it)) } + UvNumber("V", uv.v1) { onChange(uv.copy(v1 = it)) } + } +} + +@Composable +private fun UvNumber(axis: String, value: Float, onChange: (Float) -> Unit) { + Row(modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(vertical = UiAlign.CENTER)) { + Text(axis, modifier = Modifier.fontSize(8f).foreground(MutedText)) + VfxNumberCellInline(value) { onChange(it.coerceIn(0f, 1f)) } + } +} + +@Composable +private fun BlendPicker(current: VfxBlend, onChange: (VfxBlend) -> Unit) { + Row(modifier = Modifier.size(100.percent).gap(4.px)) { + VfxBlend.entries.forEach { blend -> + val selected = blend == current + Column( + id = "vfx-blend-${blend.name.lowercase()}", + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(horizontal = UiAlign.CENTER) + .input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) + .tooltipOnHover(vfxText("blend_${blend.name.lowercase()}_hint")).onClick { event -> + onChange(blend) + event.consume() + }, + ) { + Box( + modifier = Modifier.size(100.percent, 26.px).drawBehind(key = blend to selected) { + drawBlendPreview(blend, size.width, size.height, selected) + }, + ) + Text( + vfxText("blend_${blend.name.lowercase()}"), + modifier = Modifier.fontSize(8f).foreground(if (selected) SelectedText else MutedText), + ) + } + } + } +} + +private fun UiCanvasDrawScope.drawBlendPreview(blend: VfxBlend, width: Float, height: Float, selected: Boolean) { + val half = width / 2f + drawRect(UiRect(0f, 0f, half, height), UiPaint.Color(DarkGround)) + drawRect(UiRect(half, 0f, width - half, height), UiPaint.Color(LightGround)) + + val inset = height * 0.22f + val left = UiRect(width * 0.2f, inset, half - width * 0.2f, height - inset * 2f) + val right = UiRect(half, inset, half - width * 0.2f, height - inset * 2f) + drawRect(left, UiPaint.Color(blended(blend, DarkGround))) + drawRect(right, UiPaint.Color(blended(blend, LightGround))) + + val border = if (selected) SelectedBorder else IdleBorder + drawRect(UiRect(0f, 0f, width, 1f), UiPaint.Color(border)) + drawRect(UiRect(0f, height - 1f, width, 1f), UiPaint.Color(border)) + drawRect(UiRect(0f, 0f, 1f, height), UiPaint.Color(border)) + drawRect(UiRect(width - 1f, 0f, 1f, height), UiPaint.Color(border)) +} + +/** What the sample particle leaves on [ground], worked out the way the blend state would. */ +private fun blended(blend: VfxBlend, ground: UiColor): UiColor { + val alpha = SampleParticle.alpha + fun channel(source: Float, destination: Float): Float = when (blend) { + VfxBlend.OPAQUE -> source + VfxBlend.BLEND -> source * alpha + destination * (1f - alpha) + VfxBlend.ADDITIVE -> (destination + source * alpha).coerceAtMost(1f) + VfxBlend.MULTIPLY -> source * destination + destination * (1f - alpha) + } + return UiColor( + channel(SampleParticle.red, ground.red), + channel(SampleParticle.green, ground.green), + channel(SampleParticle.blue, ground.blue), + 1f, + ) +} + +private val SampleParticle = UiColor(1f, 0.55f, 0.15f, 0.75f) +private val DarkGround = UiColor(0.12f, 0.13f, 0.15f, 1f) +private val LightGround = UiColor(0.78f, 0.8f, 0.84f, 1f) +private val SelectedBorder = UiColor(0.84f, 0.5f, 0.11f, 1f) +private val IdleBorder = UiColor(0.19f, 0.2f, 0.24f, 1f) +private val SelectedText = UiColor(0.93f, 0.94f, 0.96f, 1f) +private val MutedText = UiColor(0.55f, 0.58f, 0.65f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt index 7a7cccfb1..53281822c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTimelineBridge.kt @@ -62,7 +62,7 @@ class VfxTimelineSession( val label = if ((names[node.name] ?: 0) > 1) "${node.name} (${node.id})" else node.name VfxAnimatables.forNode(node).forEach { animatable -> val property = timeline.addProperty(listOf(label), buildProperty(node, animatable)) - fill(property, effect.timeline.track(node.id, animatable.id)) + fill(property, effect.timeline.track(node.id, animatable.property)) } } @@ -73,7 +73,7 @@ class VfxTimelineSession( } /** Lists the property of [nodeId] the author is editing, so its keys are one glance away. */ - fun focus(nodeId: String, property: String) { + fun focus(nodeId: String, property: VfxProperty) { val id = propertyId(nodeId, property) touched += nodeId pinned += id @@ -147,14 +147,14 @@ class VfxTimelineSession( /** What the timeline rows depend on, which nodes there are, what they are called, what they offer. */ private fun signatureOf(): List = document.effect.walk().map { node -> - Triple(node.id, node.name, VfxAnimatables.forNode(node).map { it.id }) + Triple(node.id, node.name, VfxAnimatables.forNode(node).map { it.property }) } private fun buildProperty(node: VfxNodeSpec, animatable: VfxAnimatable): AnimProperty<*> { - val id = propertyId(node.id, animatable.id) + val id = propertyId(node.id, animatable.property) val title = animatable.titleKey.lang val name = animatable.ownerTitleKey?.let { "${it.lang} · $title" } ?: title - val defaults = animatable.read(node) + val defaults = animatable.read() return when (animatable.kind) { VfxAnimatableKind.TOGGLE -> AnimProperty(id, name, TogglePropertyType, defaults.getOrElse(0) { 1f }) @@ -185,12 +185,13 @@ class VfxTimelineSession( } } - private fun propertyId(node: String, property: String) = "$node|$property" + private fun propertyId(node: String, property: VfxProperty) = "$node|$property" /** The node a timeline row belongs to, as packed into its id. */ private fun nodeOf(property: AnimProperty<*>): String? = property.id.split('|', limit = 2).getOrNull(0) - private fun animatableOf(property: AnimProperty<*>): String? = property.id.split('|', limit = 2).getOrNull(1) + private fun animatableOf(property: AnimProperty<*>): VfxProperty? = + property.id.split('|', limit = 2).getOrNull(1)?.let(::VfxProperty) } /** On or off, held between keys; the editor draws it as a step curve and never interpolates it. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt index e3dbca517..31f750892 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/ForgeKotlinClient.kt @@ -3,7 +3,6 @@ package ru.hollowhorizon.hollowengine.client.utils import com.mojang.blaze3d.vertex.PoseStack import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen -import net.minecraft.client.renderer.ShaderInstance import net.minecraft.client.renderer.texture.AbstractTexture import net.minecraft.core.RegistryAccess import net.minecraft.resources.ResourceLocation @@ -31,9 +30,6 @@ val instancingBackend get() = if (IrisHelper.shouldOverrideShaders()) IrisHelper val instancingEntityInfo get() = if (IrisHelper.shouldOverrideShaders()) IrisHelper.capturedEntityInfo() else InstancingEntityInfo() val areShadersEnabled get() = IrisHelper.areShadersEnabled() -fun shaderPackParticleShader(translucent: Boolean): ShaderInstance? = - if (IrisHelper.shouldOverrideShaders()) IrisHelper.particleShader(translucent) else null - data class InstancingEntityInfo( val entity: Int = -1, val blockEntity: Int = 0, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt index cc0e23b96..ead051c0c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxAssets.kt @@ -4,6 +4,7 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.server.packs.resources.ResourceManager import net.minecraft.server.packs.resources.ResourceManagerReloadListener import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxShaders import ru.hollowhorizon.hollowengine.common.utils.rl import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect import ru.hollowhorizon.hollowengine.common.vfx.VfxFormat @@ -33,6 +34,8 @@ object VfxAssets : ResourceManagerReloadListener { } } VfxScenes.onAssetsReloaded() + VfxShaders.clear() + VfxModelSurfaces.clear() } /** Accepts both `pack:vfx/fire.vfx` and the bare `pack:fire` an author is likely to type. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt index b7e8618ee..75afe618f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxBoneAttachmentRuntime.kt @@ -69,6 +69,7 @@ class VfxBoneAttachment( ) ) + playing.setCamera(cameraPosition) playing.partialTick = TickHandler.partialTick playing.gameTime = now playing.budget = VfxBudget.share(1) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt index 1ca71bec0..b1e30262a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt @@ -6,14 +6,14 @@ import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f import ru.hollowhorizon.hollowengine.common.utils.math.QuatF import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f -import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables import ru.hollowhorizon.hollowengine.common.vfx.VfxDirectionMode import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace -import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxValue import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec import kotlin.math.PI import kotlin.math.ceil import kotlin.math.cos @@ -23,15 +23,16 @@ import kotlin.math.tan import kotlin.random.Random /** - * One emitter of a playing effect. + * One emitter of a playing effect. It only simulates; the renderers under its node draw. */ class VfxEmitter( val spec: VfxEmitterSpec, - val instance: VfxInstance, val node: VfxNodeRuntime, - private val expressions: VfxExpressions, - private val seed: Int, -) { +) : VfxNodeBehavior { + val instance: VfxInstance get() = node.instance + private val expressions: VfxExpressions = node.expressions + private val seed: Int = node.seed + val particles = VfxParticles(spec.emission.maxParticles.coerceIn(1, MAX_PARTICLES_PER_EMITTER)) val frame: VfxFrame get() = node.frame @@ -42,40 +43,44 @@ class VfxEmitter( private var random = Random(seed) - private val rate = scalar(VfxAnimatables.RATE, spec.emission.rate, 0f) - private val radius = scalar(VfxAnimatables.SHAPE_RADIUS, spec.shape.radius, 0f) - private val angle = scalar(VfxAnimatables.SHAPE_ANGLE, spec.shape.angle, 0f) - private val thickness = scalar(VfxAnimatables.SHAPE_THICKNESS, spec.shape.thickness, 1f) - private val extents = vector(VfxAnimatables.SHAPE_EXTENTS, spec.shape.extents, 0f) + private val rate = scalar(VfxProperty.RATE, spec.emission.rate, 0f) + private val radius = scalar(VfxProperty.SHAPE_RADIUS, spec.shape.radius, 0f) + private val angle = scalar(VfxProperty.SHAPE_ANGLE, spec.shape.angle, 0f) + private val thickness = scalar(VfxProperty.SHAPE_THICKNESS, spec.shape.thickness, 1f) + private val extents = vector(VfxProperty.SHAPE_EXTENTS, spec.shape.extents, 0f) - private val lifetime = scalar(VfxAnimatables.LIFETIME, spec.spawn.lifetime, 1f) - private val speed = scalar(VfxAnimatables.SPEED, spec.spawn.speed, 0f) - private val offset = vector(VfxAnimatables.OFFSET, spec.spawn.offset, 0f) - private val inheritVelocity = scalar(VfxAnimatables.INHERIT_VELOCITY, spec.spawn.inheritVelocity, 0f) + /** The surface a model shape spawns on; until it has loaded, particles start at the origin. */ + private val modelSurface = spec.shape.model.takeIf { spec.shape.kind == VfxShapeKind.MODEL && it.isNotBlank() } + ?.let(VfxModelSurfaces::request) + + private val lifetime = scalar(VfxProperty.LIFETIME, spec.spawn.lifetime, 1f) + private val speed = scalar(VfxProperty.SPEED, spec.spawn.speed, 0f) + private val offset = vector(VfxProperty.OFFSET, spec.spawn.offset, 0f) + private val inheritVelocity = scalar(VfxProperty.INHERIT_VELOCITY, spec.spawn.inheritVelocity, 0f) private val appearance = spec.appearance - private val size = vector(VfxAnimatables.SIZE, appearance.size, 1f, VfxRangeMode.PER_PARTICLE) - private val spin = vector(VfxAnimatables.SPIN, appearance.rotation, 0f, VfxRangeMode.PER_PARTICLE) + private val size = vector(VfxProperty.SIZE, appearance.size, 1f, VfxRangeMode.PER_PARTICLE) + private val spin = vector(VfxProperty.SPIN, appearance.rotation, 0f, VfxRangeMode.PER_PARTICLE) private val color = VfxSamplers.color( appearance.color, expressions, - salt = VfxAnimatables.COLOR.hashCode(), - drive = node.drive(VfxAnimatables.COLOR), + salt = VfxProperty.COLOR.hashCode(), + drive = node.drive(VfxProperty.COLOR), ) - private val liveSize = isLive(VfxAnimatables.SIZE, appearance.size) - private val liveSpin = isLive(VfxAnimatables.SPIN, appearance.rotation) + private val liveSize = isLive(VfxProperty.SIZE, appearance.size) + private val liveSpin = isLive(VfxProperty.SPIN, appearance.rotation) private val liveColor = !VfxSamplers.isFixedPerParticle(appearance.color) || - node.drive(VfxAnimatables.COLOR) != null + node.drive(VfxProperty.COLOR) != null - private val gravity = scalar(VfxAnimatables.GRAVITY, spec.motion.gravity, 0f, VfxRangeMode.PER_PARTICLE) - private val drag = scalar(VfxAnimatables.DRAG, spec.motion.drag, 0f, VfxRangeMode.PER_PARTICLE) + private val gravity = scalar(VfxProperty.GRAVITY, spec.motion.gravity, 0f, VfxRangeMode.PER_PARTICLE) + private val drag = scalar(VfxProperty.DRAG, spec.motion.drag, 0f, VfxRangeMode.PER_PARTICLE) private val modules: List = spec.modules .filter { it.enabled } .mapNotNull { module -> VfxModuleRuntimes.create(module, VfxModuleContext(spec, expressions) { field -> - node.drive(VfxAnimatables.moduleProperty(module.id, field)) + node.drive(VfxProperty.module(module.id, field)) }) } @@ -105,6 +110,8 @@ class VfxEmitter( val isFinished: Boolean get() = (stopping || isExpired()) && particles.count == 0 + override val isIdle: Boolean get() = particles.count == 0 + private val spawnOrigin = MutableVec3f() private var spawnRotation: QuatF = QuatF.IDENTITY private val spawnScale = MutableVec3f(Vec3f.ONES) @@ -125,24 +132,19 @@ class VfxEmitter( var previousZ: Float = 0f init { - reset() + restart() } - /** Stops emitting; whatever is alive lives out its lifetime. */ - fun stop() { - stopping = true - } - - /** Stops emitting and drops everything alive at once. */ - fun clear() { - particles.clear() + /** Stops emitting; whatever is alive lives out its lifetime, unless [immediate] drops it at once. */ + override fun stop(immediate: Boolean) { + if (immediate) particles.clear() stopping = true } /** * Puts the emitter back where it was when the effect was created. */ - fun reset() { + override fun restart() { particles.clear() random = Random(seed) context.rng = random @@ -162,7 +164,7 @@ class VfxEmitter( /** * Recomputes how the emitter maps to what is drawn, after the node has placed its frame. */ - fun refreshSpace() { + override fun place() { when (spec.space) { VfxSimulationSpace.LOCAL -> { frame.toFollowedMatrix(simToRender, spec.inheritRotation, spec.inheritScale) @@ -184,7 +186,7 @@ class VfxEmitter( /** * Advances the emitter by [dt] seconds, split into steps no longer than the emitter asked for. */ - fun update(dt: Float) { + override fun update(dt: Float) { if (dt <= 0f) return val maxStep = spec.maxStep.coerceAtLeast(MIN_STEP) @@ -486,6 +488,8 @@ class VfxEmitter( val along = random.nextFloat() position.set(scratchVector.x * along, scratchVector.y * along, scratchVector.z * along) } + + VfxShapeKind.MODEL -> modelSurface?.surface?.sample(random, position, direction) } when (shape.directionMode) { @@ -509,7 +513,7 @@ class VfxEmitter( fun noiseSeed(axis: Int): Int = seed + axis * 6151 private fun scalar( - property: String, + property: VfxProperty, value: VfxValue, default: Float, range: VfxRangeMode = VfxRangeMode.FRESH, @@ -519,13 +523,13 @@ class VfxEmitter( ) private fun vector( - property: String, + property: VfxProperty, value: VfxVec3Value, default: Float, range: VfxRangeMode = VfxRangeMode.FRESH, ): VfxVec3Sampler = VfxSamplers.vec3(value, expressions, default, range, property.hashCode(), node.drive(property)) - private fun isLive(property: String, value: VfxVec3Value): Boolean = + private fun isLive(property: VfxProperty, value: VfxVec3Value): Boolean = !VfxSamplers.isFixedPerParticle(value) || node.drive(property) != null companion object { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt index dea40a9b8..12589ae41 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt @@ -43,6 +43,9 @@ class VfxEvalContext { var partialTick: Float = 0f var gameTime: Float = 0f + /** Blocks from the camera to the node reading the value. */ + var cameraDistance: Float = 0f + /** The numeric leaves of the handle data store by path, refilled when the store changes. */ var data: Map = emptyMap() @@ -51,6 +54,30 @@ class VfxEvalContext { /** Scratch space, cleared between steps. */ val temporaries = HashMap() + + /** Takes every input of [other]; the variables stay this context's own. */ + fun copyInputs(other: VfxEvalContext) { + rng = other.rng + age = other.age + lifetime = other.lifetime + progress = other.progress + positionX = other.positionX + positionY = other.positionY + positionZ = other.positionZ + velocityX = other.velocityX + velocityY = other.velocityY + velocityZ = other.velocityZ + speed = other.speed + particleRandom = other.particleRandom + particleIndex = other.particleIndex + emitterAge = other.emitterAge + emitterCount = other.emitterCount + effectTime = other.effectTime + partialTick = other.partialTick + gameTime = other.gameTime + cameraDistance = other.cameraDistance + data = other.data + } } val VfxDeclarations: Declarations = Declarations { @@ -78,6 +105,10 @@ val VfxDeclarations: Declarations = Declarations { float("random") { it.rng.nextFloat() } } + val node = struct("node") { + float("camera_distance") { it.cameraDistance } + } + val math = mathNamespace() val variables = dynamic( @@ -104,6 +135,7 @@ val VfxDeclarations: Declarations = Declarations { property("particle", particle, alias = "p") { it } property("emitter", emitter, alias = "e") { it } + property("node", node, alias = "n") { it } property("math", math) { it } property("variable", variables, alias = "v") { it } property("temp", temporaries, alias = "t") { it } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt index 83a2ebd64..cc39c20d8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxInstance.kt @@ -1,81 +1,14 @@ package ru.hollowhorizon.hollowengine.client.vfx import net.minecraft.world.phys.Vec3 -import ru.hollowhorizon.hollowengine.client.models.internal.v2.ModelAttachment +import org.joml.Matrix4f +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxDrawList import ru.hollowhorizon.hollowengine.common.data.NbtDataStore import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f import ru.hollowhorizon.hollowengine.common.vfx.* import kotlin.random.Random -/** - * One node of a playing effect: where it is, whether it is on, and whatever it runs. - */ -class VfxNodeRuntime( - val spec: VfxNodeSpec, - val parent: VfxNodeRuntime?, - instance: VfxInstance, - expressions: VfxExpressions, - seed: Int, - driven: Map, -) { - val frame = VfxFrame() - - /** What the author wrote for this node; the timeline starts from it every frame. */ - var authoredEnabled: Boolean = spec.enabled - var authoredTransform: VfxTransform = spec.transform - - var enabled: Boolean = spec.enabled - var transform: VfxTransform = spec.transform - - /** - * What the timeline writes into the values of this node. Only the properties that actually have - * a track get one. - */ - private val drives: Map = driven.mapValues { (_, channels) -> VfxDrive(channels) } - - fun drive(property: String): VfxDrive? = drives[property] - - val emitter: VfxEmitter? = (spec as? VfxEmitterSpec)?.let { VfxEmitter(it, instance, this, expressions, seed) } - - /** The model a mesh emitter draws, loaded the first time it is actually needed. */ - val meshModel: ModelAttachment? by lazy { - val model = (spec as? VfxMeshEmitterSpec)?.model?.takeIf { it.isNotBlank() } ?: return@lazy null - ModelAttachment(model) - } - - val children: List = spec.children.mapIndexed { index, child -> - VfxNodeRuntime( - child, - this, - instance, - expressions, - seed + index * 977 + 13, - instance.drivenProperties(child.id), - ) - } - - /** Whether this node and every node above it is on. */ - val isActive: Boolean get() = enabled && (parent?.isActive ?: true) - - fun place(root: VfxFrame) { - frame.setCombined(parent?.frame ?: root, transform) - emitter?.refreshSpace() - children.forEach { it.place(root) } - } - - fun walk(): List = buildList { - add(this@VfxNodeRuntime) - children.forEach { addAll(it.walk()) } - } - - fun reset() { - enabled = authoredEnabled - transform = authoredTransform - children.forEach { it.reset() } - } -} - /** * One playing effect. * @@ -91,17 +24,17 @@ class VfxInstance( private val expressions = VfxExpressions.compile(effect.expressions(), asset) /** Which properties of which node have a track, and how many channels each carries. */ - private val driven: Map> = + private val driven: Map> = effect.timeline.tracks.groupBy { it.node }.mapValues { (nodeId, tracks) -> - val node = effect.node(nodeId) - tracks.mapNotNull { track -> - if (node == null || track.curves.none { it.keys.isNotEmpty() }) return@mapNotNull null - val animatable = VfxAnimatables.of(node, track.property) ?: return@mapNotNull null - track.property to animatable.kind.channels - }.toMap() - } + val node = effect.node(nodeId) + tracks.mapNotNull { track -> + if (node == null || track.curves.none { it.keys.isNotEmpty() }) return@mapNotNull null + val animatable = VfxAnimatables.of(node, track.property) ?: return@mapNotNull null + track.property to animatable.kind.channels + }.toMap() + } - internal fun drivenProperties(nodeId: String): Map = driven[nodeId].orEmpty() + internal fun drivenProperties(nodeId: String): Map = driven[nodeId].orEmpty() /** The frame the whole effect sits in; a bone or a moving entity writes into it. */ val root = VfxFrame() @@ -117,13 +50,19 @@ class VfxInstance( /** [origin] minus [anchor], the only part of the two a float can safely hold. */ val originMinusAnchor = MutableVec3f() + /** Where the camera is, in effect space; whoever plays the effect keeps it current. */ + val camera = MutableVec3f() + val nodes: List = effect.nodes.mapIndexed { index, node -> VfxNodeRuntime(node, null, this, expressions, seed + index * 7919, drivenProperties(node.id)) } - private val allNodes: List = nodes.flatMap { it.walk() } + /** Every node, parents before children, which is also the order they update and draw in. */ + val allNodes: List = nodes.flatMap { it.walk() } + + private val behaviors: List = allNodes.mapNotNull { it.behavior } - val emitters: List = allNodes.mapNotNull { it.emitter } + val emitters: List = behaviors.filterIsInstance() private val timeline = VfxTimelinePlayer(effect.timeline, allNodes) @@ -131,6 +70,9 @@ class VfxInstance( var time: Float = 0f private set + /** Where the timeline is, looped when the timeline loops. */ + val timelineTime: Float get() = timeline.localTime(time) + /** How fast the origin is moving, for particles that inherit it. */ var velocityX: Float = 0f private set @@ -148,14 +90,22 @@ class VfxInstance( /** Whether anything here is lit by the world, so light is only looked up when it is used. */ val readsLight: Boolean = - effect.walk().filterIsInstance().any { it.material.lighting == VfxLighting.WORLD } + effect.walk().filterIsInstance().any { it.material.lighting == VfxLighting.WORLD } || + effect.walk().any { it is VfxModelSpec && !it.emissive } var isStopping: Boolean = false private set - /** Whether everything has stopped and nothing is left on screen. */ + /** + * Whether everything has stopped and nothing is left on screen. Without emitters, an effect + * ends with a timeline that does not loop. + */ val isFinished: Boolean - get() = isStopping && emitters.all { it.particles.count == 0 } || emitters.isNotEmpty() && emitters.all { it.isFinished } + get() = when { + isStopping -> behaviors.all { it.isIdle } + emitters.isNotEmpty() -> emitters.all { it.isFinished } + else -> !effect.timeline.loop && time >= effect.timeline.duration + } /** How many particles this effect may still create this frame; the scene refills it. */ var budget: Int = Int.MAX_VALUE @@ -181,6 +131,11 @@ class VfxInstance( ) } + /** Remembers where the camera is in the world, for distances and camera-facing ribbons. */ + fun setCamera(world: Vec3) { + camera.set((world.x - origin.x).toFloat(), (world.y - origin.y).toFloat(), (world.z - origin.z).toFloat()) + } + /** Remembers how fast the origin is moving, for inherited velocity. */ fun setVelocity(x: Float, y: Float, z: Float) { velocityX = x @@ -190,14 +145,14 @@ class VfxInstance( fun stop(immediate: Boolean) { isStopping = true - if (immediate) emitters.forEach { it.clear() } else emitters.forEach { it.stop() } + behaviors.forEach { it.stop(immediate) } } - /** Advances everything by [dt] seconds and leaves the emitters ready to draw. */ + /** Advances everything by [dt] seconds and leaves the nodes ready to draw. */ fun update(dt: Float) { if (dt > 0f) time += dt pose() - emitters.forEach { it.update(dt) } + behaviors.forEach { it.update(dt) } } /** Places every node for the current time: the authored transform, then the timeline over it. */ @@ -205,6 +160,12 @@ class VfxInstance( nodes.forEach { it.reset() } if (!timeline.isEmpty) timeline.apply(time) nodes.forEach { it.place(root) } + allNodes.forEach { it.fillContext() } + } + + /** Adds what every active node draws; [placement] maps effect space to the space of the view. */ + fun collect(into: VfxDrawList, placement: Matrix4f) { + allNodes.forEach { node -> node.behavior?.collect(into, placement) } } fun node(id: String): VfxNodeRuntime? = allNodes.firstOrNull { it.spec.id == id } @@ -231,7 +192,7 @@ class VfxInstance( fun restart() { time = 0f isStopping = false - emitters.forEach { it.reset() } + behaviors.forEach { it.restart() } pose() } @@ -249,9 +210,15 @@ class VfxInstance( return environment.lightAt(origin.x + point.x, origin.y + point.y, origin.z + point.z) } + /** The packed light at a point of effect space. */ + fun lightAt(point: Vec3f): Int { + if (!readsLight) return FULL_BRIGHT + return environment.lightAt(origin.x + point.x, origin.y + point.y, origin.z + point.z) + } + private val lightCursor = MutableVec3f() - private companion object { + companion object { const val FULL_BRIGHT = 0xF000F0 } } @@ -265,7 +232,7 @@ class VfxTimelinePlayer(private val spec: VfxTimelineSpec, nodes: List>, @@ -282,8 +249,10 @@ class VfxTimelinePlayer(private val spec: VfxTimelineSpec, nodes: List prepare(track, byId) } } + fun localTime(time: Float): Float = if (spec.loop && spec.duration > 0f) time.mod(spec.duration) else time + fun apply(time: Float) { - val local = if (spec.loop && spec.duration > 0f) time.mod(spec.duration) else time + val local = localTime(time) tracks.forEach { track -> apply(track, local) } } @@ -299,7 +268,7 @@ class VfxTimelinePlayer(private val spec: VfxTimelineSpec, nodes: List curves.forEach { (channel, _) -> target.active[channel] = true } } - return PreparedTrack(node, track.property, channels, property.read(node.spec), curves, drive) + return PreparedTrack(node, track.property, channels, property.read(), curves, drive) } private fun apply(track: PreparedTrack, time: Float) { @@ -308,9 +277,9 @@ class VfxTimelinePlayer(private val spec: VfxTimelineSpec, nodes: List track.node.transform.position - VfxAnimatables.ROTATION -> track.node.transform.rotation - VfxAnimatables.SCALE -> track.node.transform.scale + VfxProperty.POSITION -> track.node.transform.position + VfxProperty.ROTATION -> track.node.transform.rotation + VfxProperty.SCALE -> track.node.transform.scale else -> null } placement?.let { @@ -323,14 +292,14 @@ class VfxTimelinePlayer(private val spec: VfxTimelineSpec, nodes: List track.node.enabled = values[0] >= 0.5f - VfxAnimatables.POSITION -> track.node.transform = + VfxProperty.ENABLED -> track.node.enabled = values[0] >= 0.5f + VfxProperty.POSITION -> track.node.transform = track.node.transform.copy(position = Vec3f(values[0], values[1], values[2])) - VfxAnimatables.ROTATION -> track.node.transform = + VfxProperty.ROTATION -> track.node.transform = track.node.transform.copy(rotation = Vec3f(values[0], values[1], values[2])) - VfxAnimatables.SCALE -> track.node.transform = + VfxProperty.SCALE -> track.node.transform = track.node.transform.copy(scale = Vec3f(values[0], values[1], values[2])) else -> track.drive?.let { drive -> diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModelSurfaces.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModelSurfaces.kt new file mode 100644 index 000000000..777ec1f39 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModelSurfaces.kt @@ -0,0 +1,139 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import net.minecraft.resources.ResourceLocation +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.client.models.internal.Model +import ru.hollowhorizon.hollowengine.client.models.internal.NodeDefinition +import ru.hollowhorizon.hollowengine.client.models.internal.manager.HollowModelManager +import ru.hollowhorizon.hollowengine.common.coroutines.scopeAsync +import ru.hollowhorizon.hollowengine.common.utils.math.Mat4f +import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import kotlin.math.sqrt +import kotlin.random.Random + +/** + * The triangles of a model in its bind pose, ready to pick points on by area. + */ +class VfxModelSurface( + private val corners: FloatArray, + private val areas: FloatArray, +) { + val isEmpty: Boolean get() = areas.isEmpty() + + /** A point spread evenly over the surface, and the outward normal of the triangle it is on. */ + fun sample(random: Random, position: MutableVec3f, normal: MutableVec3f) { + if (isEmpty) return + + val wanted = random.nextFloat() * areas.last() + var low = 0 + var high = areas.lastIndex + while (low < high) { + val middle = (low + high) ushr 1 + if (areas[middle] < wanted) low = middle + 1 else high = middle + } + + var u = random.nextFloat() + var v = random.nextFloat() + if (u + v > 1f) { + u = 1f - u + v = 1f - v + } + val at = low * 9 + val ax = corners[at] + val ay = corners[at + 1] + val az = corners[at + 2] + val abx = corners[at + 3] - ax + val aby = corners[at + 4] - ay + val abz = corners[at + 5] - az + val acx = corners[at + 6] - ax + val acy = corners[at + 7] - ay + val acz = corners[at + 8] - az + + position.set(ax + abx * u + acx * v, ay + aby * u + acy * v, az + abz * u + acz * v) + normal.set(aby * acz - abz * acy, abz * acx - abx * acz, abx * acy - aby * acx) + if (normal.sqrLength() > 1.0e-12f) normal.norm() + } + + companion object { + /** Every triangle of every mesh of [model], each moved by the bind pose of its node. */ + fun of(model: Model): VfxModelSurface { + val corners = ArrayList() + val scene = model.scenes.getOrNull(model.scene) ?: model.scenes.firstOrNull() + scene?.nodes?.forEach { root -> collect(root, Mat4f.IDENTITY, corners) } + + val packed = corners.toFloatArray() + val areas = FloatArray(packed.size / 9) + var total = 0f + for (triangle in areas.indices) { + total += area(packed, triangle * 9) + areas[triangle] = total + } + return VfxModelSurface(packed, areas) + } + + private fun collect(node: NodeDefinition, parent: Mat4f, into: MutableList) { + val matrix = parent.mul(node.localMatrix, MutableMat4f()) + node.mesh?.primitives?.forEach { primitive -> + val positions = primitive.positions ?: return@forEach + val indices = primitive.indices ?: IntArray(positions.size) { it } + val point = MutableVec3f() + for (index in 0 until indices.size - indices.size % 3) { + val vertex = positions.getOrNull(indices[index]) ?: continue + matrix.transform(vertex, 1f, point) + into += point.x + into += point.y + into += point.z + } + } + node.children.forEach { collect(it, matrix, into) } + } + + private fun area(corners: FloatArray, at: Int): Float { + val abx = corners[at + 3] - corners[at] + val aby = corners[at + 4] - corners[at + 1] + val abz = corners[at + 5] - corners[at + 2] + val acx = corners[at + 6] - corners[at] + val acy = corners[at + 7] - corners[at + 1] + val acz = corners[at + 8] - corners[at + 2] + val cx = aby * acz - abz * acy + val cy = abz * acx - abx * acz + val cz = abx * acy - aby * acx + return sqrt(cx * cx + cy * cy + cz * cz) * 0.5f + } + } +} + +/** + * The model surfaces spawn shapes use, loaded once per model in the background. + */ +object VfxModelSurfaces { + /** A surface on its way; [surface] is null until it has loaded, and stays null if it failed. */ + class Request { + @Volatile + var surface: VfxModelSurface? = null + internal set + } + + private val requests = HashMap() + + @Synchronized + fun request(model: String): Request = requests.getOrPut(model) { + Request().also { request -> load(model, request) } + } + + /** Models change with resource packs; the next request loads them again. */ + @Synchronized + fun clear() = requests.clear() + + private fun load(model: String, request: Request) { + val location = ResourceLocation.tryParse(model) ?: return + scopeAsync { + try { + request.surface = VfxModelSurface.of(HollowModelManager.loadModel(location)) + } catch (e: Exception) { + HollowEngine.LOGGER.warn("Could not read the spawn shape model {}: {}", model, e.message) + } + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt new file mode 100644 index 000000000..c5922db2a --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt @@ -0,0 +1,169 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import org.joml.Matrix4f +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionHandle +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionPoints +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxBeamRenderer +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxCameraShake +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxDrawList +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxMeshNode +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxModelNode +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxPlaneNode +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxPostEffectNode +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxTrailRenderer +import ru.hollowhorizon.hollowengine.common.utils.rl +import ru.hollowhorizon.hollowengine.common.vfx.* +import kotlin.math.sqrt + +/** + * One node of a playing effect: where it is, whether it is on, and whatever its kind does. + */ +class VfxNodeRuntime( + val spec: VfxNodeSpec, + val parent: VfxNodeRuntime?, + val instance: VfxInstance, + val expressions: VfxExpressions, + val seed: Int, + driven: Map, +) { + val frame = VfxFrame() + + /** What the author wrote for this node; the timeline starts from it every frame. */ + var authoredEnabled: Boolean = spec.enabled + var authoredTransform: VfxTransform = spec.transform + + var enabled: Boolean = spec.enabled + var transform: VfxTransform = spec.transform + + /** + * What the timeline writes into the values of this node. Only the properties that actually have + * a track get one. + */ + private val drives: Map = driven.mapValues { (_, channels) -> VfxDrive(channels) } + + fun drive(property: VfxProperty): VfxDrive? = drives[property] + + /** + * What a value read once for the whole node sees: the effect clock as its lifetime, the handle + * data and the distance to the camera. Particle inputs read as zero. + */ + val context = VfxEvalContext() + + /** The emitter this node draws the particles of, when it is a renderer directly under one. */ + val particleSource: VfxEmitter? = if (spec is VfxParticleRendererSpec) parent?.emitter else null + + val behavior: VfxNodeBehavior? = VfxNodeRuntimes.create(this) + + val emitter: VfxEmitter? get() = behavior as? VfxEmitter + + val children: List = spec.children.mapIndexed { index, child -> + VfxNodeRuntime( + child, + this, + instance, + expressions, + seed + index * 977 + 13, + instance.drivenProperties(child.id), + ) + } + + /** Whether this node and every node above it is on. */ + val isActive: Boolean get() = enabled && (parent?.isActive ?: true) + + fun place(root: VfxFrame) { + frame.setCombined(parent?.frame ?: root, transform) + behavior?.place() + children.forEach { it.place(root) } + } + + fun walk(): List = buildList { + add(this@VfxNodeRuntime) + children.forEach { addAll(it.walk()) } + } + + fun reset() { + enabled = authoredEnabled + transform = authoredTransform + children.forEach { it.reset() } + } + + /** Refreshes [context] for this frame. */ + fun fillContext() { + val camera = instance.camera + val dx = frame.position.x - camera.x + val dy = frame.position.y - camera.y + val dz = frame.position.z - camera.z + val duration = instance.effect.timeline.duration.coerceAtLeast(MIN_DURATION) + val local = instance.timelineTime + + context.age = local + context.lifetime = duration + context.progress = (local / duration).coerceIn(0f, 1f) + context.emitterAge = instance.time + context.effectTime = instance.time + context.partialTick = instance.partialTick + context.gameTime = instance.gameTime + context.data = instance.data + context.cameraDistance = sqrt(dx * dx + dy * dy + dz * dz) + } + + private companion object { + const val MIN_DURATION = 0.01f + } +} + +/** + * What a node of some kind does while its effect plays. + * + * Nodes are updated parents first, so a renderer under an emitter sees the particles of this step. + */ +interface VfxNodeBehavior { + /** The node frame has been placed for this frame. */ + fun place() = Unit + + fun update(dt: Float) = Unit + + /** Back to the first moment of the effect. */ + fun restart() = Unit + + /** The effect is stopping; [immediate] clears what is left at once. */ + fun stop(immediate: Boolean) = Unit + + /** Whether nothing of this node is left on screen. */ + val isIdle: Boolean get() = true + + /** Adds what the node draws; [placement] maps effect space to the space of the view. */ + fun collect(into: VfxDrawList, placement: Matrix4f) = Unit +} + +/** Makes the behavior of one node. Returning null leaves the node as a plain frame. */ +fun interface VfxNodeFactory { + fun create(node: VfxNodeRuntime): VfxNodeBehavior? +} + +/** + * What each kind of node does at runtime, keyed by the same id the spec is registered under. + */ +object VfxNodeRuntimes { + val point = ExtensionPoints.create("hollowengine:vfx/node_runtimes".rl) + + init { + register("hollowengine:vfx/emitter") { VfxEmitter(it.spec as VfxEmitterSpec, it) } + register("hollowengine:vfx/plane") { VfxPlaneNode(it.spec as VfxPlaneSpec, it) } + register("hollowengine:vfx/cube") { VfxMeshNode(it.spec as VfxMeshSpec, it) } + register("hollowengine:vfx/sphere") { VfxMeshNode(it.spec as VfxMeshSpec, it) } + register("hollowengine:vfx/cylinder") { VfxMeshNode(it.spec as VfxMeshSpec, it) } + register("hollowengine:vfx/model") { VfxModelNode(it.spec as VfxModelSpec, it) } + register("hollowengine:vfx/trail") { VfxTrailRenderer(it.spec as VfxTrailSpec, it) } + register("hollowengine:vfx/beam") { VfxBeamRenderer(it.spec as VfxBeamSpec, it) } + register("hollowengine:vfx/post_effect") { VfxPostEffectNode(it.spec as VfxPostEffectSpec, it) } + register("hollowengine:vfx/camera_shake") { VfxCameraShake(it.spec as VfxCameraShakeSpec, it) } + } + + fun register(typeId: String, factory: VfxNodeFactory): ExtensionHandle = point.register(typeId.rl, factory) + + fun create(node: VfxNodeRuntime): VfxNodeBehavior? { + val type = VfxNodeTypes.of(node.spec) ?: return null + return point.find(type.key)?.create(node) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt index 167901a5c..f7edf2257 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt @@ -47,12 +47,19 @@ class VfxParticles(val capacity: Int) { /** Packed block light of the particle position, refreshed while it moves. */ val light = IntArray(capacity) - private var extra: MutableMap? = null - - /** A module private array, created on first use and cleared with the emitter. */ - fun channel(name: String): FloatArray { - val channels = extra ?: LinkedHashMap().also { extra = it } - return channels.getOrPut(name) { FloatArray(capacity) } + private var extra: MutableMap? = null + + private class Channel(val stride: Int, val data: FloatArray) + + /** + * A private array of a module or a renderer, created on first use, [stride] floats per particle + * that move with it when it changes slots. + */ + fun channel(name: String, stride: Int = 1): FloatArray { + val channels = extra ?: LinkedHashMap().also { extra = it } + val channel = channels.getOrPut(name) { Channel(stride, FloatArray(capacity * stride)) } + check(channel.stride == stride) { "Channel $name is already ${channel.stride} floats wide" } + return channel.data } /** Claims a slot, or returns -1 when the emitter is full. */ @@ -95,6 +102,6 @@ class VfxParticles(val capacity: Int) { index[to] = index[from] frame[to] = frame[from] light[to] = light[from] - extra?.values?.forEach { it[to] = it[from] } + extra?.values?.forEach { System.arraycopy(it.data, from * it.stride, it.data, to * it.stride, it.stride) } } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt index a4364d155..df01c2ff4 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt @@ -3,7 +3,7 @@ package ru.hollowhorizon.hollowengine.client.vfx import ru.hollowhorizon.hollowengine.common.utils.MutableColor import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f import ru.hollowhorizon.hollowengine.common.vfx.VfxColorValue -import ru.hollowhorizon.hollowengine.common.vfx.VfxTimeSource +import ru.hollowhorizon.hollowengine.common.vfx.VfxCurveInput import ru.hollowhorizon.hollowengine.common.vfx.VfxValue import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value @@ -91,7 +91,7 @@ object VfxSamplers { is VfxValue.OverTime -> { val curve = value.curve val scale = value.scale - val axis = axis(value.source) + val axis = axis(value.input) VfxFloatSampler { curve.valueAt(axis.eval(it), default) * scale } } @@ -140,7 +140,7 @@ object VfxSamplers { is VfxColorValue.Gradient -> { val gradient = value.gradient - val axis = axis(value.source) + val axis = axis(value.input) VfxColorSampler { context, into -> val stop = gradient.colorAt(axis.eval(context)) into.set(stop.r, stop.g, stop.b, stop.a) @@ -165,12 +165,12 @@ object VfxSamplers { } /** What the horizontal axis of a curve or gradient reads. */ - fun axis(source: VfxTimeSource): VfxFloatSampler = when (source) { - VfxTimeSource.LIFETIME -> VfxFloatSampler { it.progress } - VfxTimeSource.PARTICLE_AGE -> VfxFloatSampler { it.age } - VfxTimeSource.EMITTER_AGE -> VfxFloatSampler { it.emitterAge } - VfxTimeSource.EFFECT_TIME -> VfxFloatSampler { it.effectTime } - VfxTimeSource.SPEED -> VfxFloatSampler { it.speed } + fun axis(input: VfxCurveInput): VfxFloatSampler = when (input) { + VfxCurveInput.LIFETIME -> VfxFloatSampler { it.progress } + VfxCurveInput.PARTICLE_AGE -> VfxFloatSampler { it.age } + VfxCurveInput.EMITTER_AGE -> VfxFloatSampler { it.emitterAge } + VfxCurveInput.EFFECT_TIME -> VfxFloatSampler { it.effectTime } + VfxCurveInput.SPEED -> VfxFloatSampler { it.speed } } /** Whether a value reads same for a particle every step. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt index 0a615402c..39ea33986 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxScenes.kt @@ -18,9 +18,10 @@ class VfxPlayback( private val entity: Entity?, ) { private val data = NbtDataStore() - private var lastX = 0.0 - private var lastY = 0.0 - private var lastZ = 0.0 + /** Where it was last frame; NaN until the first one, which has no motion to speak of. */ + private var lastX = Double.NaN + private var lastY = Double.NaN + private var lastZ = Double.NaN var position: Vec3 = Vec3.ZERO private set @@ -40,9 +41,9 @@ class VfxPlayback( fun stop(immediate: Boolean) = instance.stop(immediate) /** Follows whatever it is bound to, then advances the simulation. */ - fun update(dt: Float, partialTick: Float, gameTime: Float) { - val next = entity?.let { Vec3(it.x, it.y + it.bbHeight * 0.5, it.z) } ?: position - if (dt > 0f) { + fun update(dt: Float, partialTick: Float, gameTime: Float, camera: Vec3) { + val next = entity?.getPosition(partialTick)?.add(0.0, entity.bbHeight * 0.5, 0.0) ?: position + if (dt > 0f && !lastX.isNaN()) { instance.setVelocity( ((next.x - lastX) / dt).toFloat(), ((next.y - lastY) / dt).toFloat(), @@ -55,6 +56,7 @@ class VfxPlayback( position = next instance.moveTo(next) + instance.setCamera(camera) instance.partialTick = partialTick instance.gameTime = gameTime instance.update(dt) @@ -89,8 +91,8 @@ class VfxScene(private val environment: VfxEnvironment) { fun clear() = playbacks.clear() - /** Advances everything with the time, that game is keeping. */ - fun update() { + /** Advances everything with the time the game is keeping, seen from [camera]. */ + fun update(camera: Vec3) { val now = TickHandler.gameTime val dt = when { lastGameTime.isNaN() -> 0f @@ -102,7 +104,7 @@ class VfxScene(private val environment: VfxEnvironment) { val partialTick = TickHandler.partialTick playbacks.forEach { playback -> playback.instance.budget = budget - playback.update(dt, partialTick, now) + playback.update(dt, partialTick, now, camera) } playbacks.removeAll { it.isFinished } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt new file mode 100644 index 000000000..8377dad7e --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt @@ -0,0 +1,127 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import org.joml.Matrix4f +import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.models.internal.v2.ModelAttachment +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticles +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxModelSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPlaneSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPrimitive + +/** + * Where the particles are looked at from. + * + * Everything a draw places is expressed in one space, the one [modelView] starts from: + * camera-relative world space in the world, effect space in the editor preview. The camera axes and + * position are given in that same space, which is all a billboard or a ribbon needs to face the + * viewer. + */ +class VfxView( + val modelView: Matrix4f, + val projection: Matrix4f, + val right: Vector3f, + val up: Vector3f, + val eye: Vector3f, +) { + companion object +} + +/** + * The particles a renderer draws, and how they sit relative to it. + * + * Under an emitter, [offset], [spin] and [sizeScale] are the renderer node transform, applied to + * each particle. A renderer on its own draws one particle of its own at the origin of [matrix], + * which already carries its node frame. + */ +class VfxParticleBatch( + val particles: VfxParticles, + /** Simulation space to the space of the view the batch is drawn with. */ + val matrix: Matrix4f, + val uvColumns: Int = 1, + val uvRows: Int = 1, + val offset: Vec3f = Vec3f.ZERO, + val spin: Vec3f = Vec3f.ZERO, + val sizeScale: Vec3f = Vec3f.ONES, + /** Multiplied into every particle color. */ + val tint: FloatArray = floatArrayOf(1f, 1f, 1f, 1f), +) + +/** One plane renderer's worth of quads. */ +class VfxQuadDraw( + val plane: VfxPlaneSpec, + val batch: VfxParticleBatch, + val uniforms: VfxUniformValues?, +) + +/** One mesh renderer's worth of instances of a built-in mesh. */ +class VfxMeshDraw( + val spec: VfxMeshSpec, + val primitive: VfxPrimitive, + val batch: VfxParticleBatch, + val uniforms: VfxUniformValues?, +) + +/** One model renderer's worth of model instances. */ +class VfxModelDraw( + val spec: VfxModelSpec, + val model: ModelAttachment, + val batch: VfxParticleBatch, +) + +/** + * Ribbons of one trail or beam node: strips of points, already in the space of the view. + * + * Each point is [STRIDE] floats: position, half width, color, the texture coordinate along the + * ribbon, and the packed light. + */ +class VfxRibbonDraw( + val material: VfxMaterialSpec, + val uniforms: VfxUniformValues?, + val points: FloatArray, + /** Start point and point count of every strip, in pairs. */ + val strips: IntArray, + val stripCount: Int, + /** Whether the texture coordinate along the ribbon runs past 1, so the texture has to repeat. */ + val repeat: Boolean, +) { + companion object { + const val STRIDE = 10 + } +} + +/** A full-screen pass, with the uniforms it is drawn with this frame. */ +class VfxPostDraw(val shader: String, val uniforms: VfxUniformValues) + +/** + * Everything the playing effects draw this frame, sorted by how it is drawn. + */ +class VfxDrawList { + val quads = ArrayList() + val meshes = ArrayList() + val models = ArrayList() + val ribbons = ArrayList() + val posts = ArrayList() + + /** Camera shake in degrees: pitch, yaw and roll, summed over every shaking node. */ + val shake = FloatArray(3) + + val isEmpty: Boolean + get() = quads.isEmpty() && meshes.isEmpty() && models.isEmpty() && ribbons.isEmpty() && posts.isEmpty() + + /** Whether any surface is drawn by a shader of the author, which may read the scene textures. */ + val usesCustomShaders: Boolean + get() = quads.any { it.plane.material.shader != null } || meshes.any { it.spec.material.shader != null } || + ribbons.any { it.material.shader != null } + + fun clear() { + quads.clear() + meshes.clear() + models.clear() + ribbons.clear() + posts.clear() + shake.fill(0f) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt index 8c4f52f16..17e5b6054 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt @@ -1,7 +1,7 @@ package ru.hollowhorizon.hollowengine.client.vfx.render +import com.mojang.blaze3d.pipeline.RenderTarget import com.mojang.blaze3d.vertex.PoseStack -import net.minecraft.client.Camera import net.minecraft.client.Minecraft import net.minecraft.client.renderer.LightTexture import net.minecraft.client.renderer.texture.OverlayTexture @@ -9,117 +9,77 @@ import net.minecraft.util.Mth import org.joml.Matrix4f import org.joml.Quaternionf import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.models.internal.rendering.InstanceBatchManager import ru.hollowhorizon.hollowengine.client.models.internal.rendering.RenderContext -import ru.hollowhorizon.hollowengine.client.utils.math.asMatrix4f -import ru.hollowhorizon.hollowengine.client.vfx.VfxEmitter -import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance -import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshEmitterSpec -import ru.hollowhorizon.hollowengine.common.vfx.VfxQuadEmitterSpec /** - * Where the particles are looked at from. - * - * Everything the quad renderer places is expressed in one space, the one [modelView] starts from: - * camera-relative world space in the world, effect space in the editor preview. The camera axes and - * position are given in that same space, which is all a billboard needs to face the viewer. + * Draws one frame worth of effects, everything but the full-screen passes, which come once the + * level is done. */ -class VfxView( - val modelView: Matrix4f, - val projection: Matrix4f, - val right: Vector3f, - val up: Vector3f, - val eye: Vector3f, -) { - companion object { - fun ofCamera(camera: Camera, modelView: Matrix4f, projection: Matrix4f) = VfxView( - modelView = Matrix4f(modelView), - projection = Matrix4f(projection), - right = Vector3f(camera.leftVector).negate(), - up = Vector3f(camera.upVector), - eye = Vector3f(), - ) - } -} - -/** One emitter worth of billboard particles, ready to draw. */ -class VfxQuadDraw( - val emitter: VfxEmitter, - /** Simulation space to the space of the [VfxView] it is drawn with. */ - val matrix: Matrix4f, -) - -/** - * Walks playing effects and turns them into draw work. - */ -object VfxDrawCollector { +object VfxFrameRenderer { /** - * Adds the billboard emitters of [instance] to [into]. - * - * [placement] maps effect space to the space of the view the batch is drawn with, which in the - * world is camera-relative world space. + * Draws [list] as seen from [view] into [target], which is bound. Models go through the model + * renderer and the buffers of the game, so they take their matrices from the render system, + * which has to hold the same view. */ - fun collectQuads(instance: VfxInstance, placement: Matrix4f, into: MutableList) { - instance.emitters.forEach { emitter -> - if (emitter.spec !is VfxQuadEmitterSpec) return@forEach - if (emitter.particles.count == 0 || !emitter.node.isActive) return@forEach + fun render(list: VfxDrawList, view: VfxView, target: RenderTarget) { + renderModels(list.models) + renderSurfaces(list, view, target) + } - into += VfxQuadDraw(emitter, Matrix4f(placement).mul(emitter.simToRender.asMatrix4f())) - } + /** Everything drawn with the effect shaders: meshes, ribbons and planes. */ + fun renderSurfaces(list: VfxDrawList, view: VfxView, target: RenderTarget) { + if (list.usesCustomShaders) VfxSceneTextures.capture(target) + + VfxMeshRenderer.render(list.meshes, view) + VfxRibbonRenderer.render(list.ribbons, view) + VfxQuadRenderer.render(list.quads, view) } - /** - * Draws the model particles of [instance]. - * - * Each particle is submitted as one instance of the model, so the model renderer batches them - * the same way it batches entities. Two things a quad can do that a model particle cannot yet: - * carry its own color, and use a skinned model - the instance stream has no room for either. - */ - fun renderMeshes(instance: VfxInstance, placement: Matrix4f) { + fun renderModels(draws: List) { + if (draws.isEmpty()) return val source = Minecraft.getInstance().renderBuffers().bufferSource() - val stack = PoseStack() - stack.mulPose(placement) - instance.emitters.forEach { emitter -> - val spec = emitter.spec as? VfxMeshEmitterSpec ?: return@forEach - if (emitter.particles.count == 0 || !emitter.node.isActive) return@forEach - - val attachment = emitter.node.meshModel ?: return@forEach + draws.forEach { draw -> + val attachment = draw.model attachment.ensureReady() attachment.beginPose() attachment.endPose() - val particles = emitter.particles - val simToRender = emitter.simToRender.asMatrix4f() - + val batch = draw.batch + val particles = batch.particles for (slot in 0 until particles.count) { stack.pushPose() - stack.mulPose(simToRender) - stack.translate(particles.positionX[slot], particles.positionY[slot], particles.positionZ[slot]) - - if (spec.alignToVelocity) { + stack.mulPose(batch.matrix) + stack.translate( + particles.positionX[slot] + batch.offset.x, + particles.positionY[slot] + batch.offset.y, + particles.positionZ[slot] + batch.offset.z, + ) + if (draw.spec.alignToVelocity) { stack.mulPose( - facing( - particles.velocityX[slot], - particles.velocityY[slot], - particles.velocityZ[slot], - ) + VfxBillboards.facing(particles.velocityX[slot], particles.velocityY[slot], particles.velocityZ[slot]) ) } stack.mulPose( Quaternionf().rotateZYX( - particles.rotationZ[slot] * Mth.DEG_TO_RAD, - particles.rotationY[slot] * Mth.DEG_TO_RAD, - particles.rotationX[slot] * Mth.DEG_TO_RAD, + (particles.rotationZ[slot] + batch.spin.z) * Mth.DEG_TO_RAD, + (particles.rotationY[slot] + batch.spin.y) * Mth.DEG_TO_RAD, + (particles.rotationX[slot] + batch.spin.x) * Mth.DEG_TO_RAD, ) ) - stack.scale(particles.sizeX[slot], particles.sizeY[slot], particles.sizeZ[slot]) + stack.scale( + particles.sizeX[slot] * batch.sizeScale.x, + particles.sizeY[slot] * batch.sizeScale.y, + particles.sizeZ[slot] * batch.sizeScale.z, + ) attachment.pipeline.render( RenderContext( stack = stack, source = source, - light = if (spec.emissive) LightTexture.FULL_BRIGHT else particles.light[slot], + light = if (draw.spec.emissive) LightTexture.FULL_BRIGHT else particles.light[slot], overlay = OverlayTexture.NO_OVERLAY, allowInstancing = true, ) @@ -127,15 +87,24 @@ object VfxDrawCollector { stack.popPose() } } - } - /** Turns a velocity into a rotation that points the model along it. */ - private fun facing(x: Float, y: Float, z: Float): Quaternionf { - val lengthSquared = x * x + y * y + z * z - if (lengthSquared < 1.0e-6f) return Quaternionf() - - val yaw = Mth.atan2(x.toDouble(), z.toDouble()).toFloat() - val pitch = Mth.atan2(y.toDouble(), Mth.sqrt(x * x + z * z).toDouble()).toFloat() - return Quaternionf().rotateY(yaw).rotateX(-pitch) + source.endBatch() + InstanceBatchManager.flush() + InstanceBatchManager.clear() } } + +/** + * The view of the game camera, whose space is camera-relative world space. + */ +fun VfxView.Companion.ofCamera(modelView: Matrix4f, projection: Matrix4f): VfxView { + val screenToWorld = Matrix4f(projection).mul(modelView).invert() + val center = screenToWorld.transformProject(Vector3f(0f, 0f, 0.5f)) + return VfxView( + modelView = Matrix4f(modelView), + projection = Matrix4f(projection), + right = screenToWorld.transformProject(Vector3f(1f, 0f, 0.5f)).sub(center).normalize(), + up = screenToWorld.transformProject(Vector3f(0f, 1f, 0.5f)).sub(center).normalize(), + eye = Vector3f(), + ) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt new file mode 100644 index 000000000..5eb5afe66 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt @@ -0,0 +1,274 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.platform.GlStateManager +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.ShaderInstance +import net.minecraft.util.Mth +import org.joml.Matrix4f +import org.joml.Quaternionf +import org.lwjgl.BufferUtils +import org.lwjgl.opengl.GL33 +import ru.hollowhorizon.hollowengine.client.models.internal.utils.VboWrapper +import ru.hollowhorizon.hollowengine.common.registry.ModShaders +import ru.hollowhorizon.hollowengine.common.vfx.VfxLighting +import ru.hollowhorizon.hollowengine.common.vfx.VfxPrimitive +import java.nio.FloatBuffer + +/** + * Draws the built-in meshes, one instance per particle, one draw call per mesh and material. + * + * An instance carries its whole transform, so a mesh needs nothing per draw but its material. + */ +object VfxMeshRenderer { + /** Floats per instance: three axes and an origin, color, texture window, light. */ + private const val STRIDE = 22 + private const val STRIDE_BYTES = STRIDE * Float.SIZE_BYTES + private const val VERTEX_BYTES = VfxPrimitiveGeometry.FLOATS * Float.SIZE_BYTES + + private class GpuMesh(val vertices: VboWrapper, val indices: VboWrapper, val indexCount: Int) + + private class Batch(val primitive: VfxPrimitive, val key: VfxBatchKey, val shaded: Boolean) { + val draws = ArrayList() + var first = 0 + var count = 0 + var depth = 0f + val sorted: Boolean get() = key.blend == VfxBatchBlend.BLEND + } + + private val meshes = HashMap() + private val vaos = HashMap, Int>() + private var instanceBuffer: VboWrapper? = null + private var instanceCapacity = 0 + private var packed = FloatArray(STRIDE * 64) + private var upload: FloatBuffer = BufferUtils.createFloatBuffer(STRIDE * 64) + + private val batches = LinkedHashMap, Batch>() + private val matrix = Matrix4f() + private val rotation = Quaternionf() + + /** Frees the GL objects; the next draw builds them again. */ + fun invalidate() { + vaos.values.forEach(GL33::glDeleteVertexArrays) + vaos.clear() + meshes.values.forEach { + it.vertices.delete() + it.indices.delete() + } + meshes.clear() + instanceBuffer?.delete() + instanceBuffer = null + instanceCapacity = 0 + } + + fun render(draws: List, view: VfxView) { + if (draws.isEmpty()) return + val total = pack(draws, view) + if (total == 0) return + + val order = batches.values.filter { !it.sorted } + + batches.values.filter { it.sorted }.sortedByDescending { it.depth } + drawInstanced(order, view, total) + } + + private fun pack(draws: List, view: VfxView): Int { + batches.clear() + draws.forEach { draw -> + val key = VfxBatchKey.of(draw.spec.material, mixed = false, owner = draw) + batches.getOrPut(draw.primitive to key) { + Batch(draw.primitive, key, draw.spec.material.lighting == VfxLighting.WORLD) + }.draws += draw + } + + var total = 0 + batches.values.forEach { batch -> + batch.count = batch.draws.sumOf { it.batch.particles.count } + total += batch.count + } + if (packed.size < total * STRIDE) packed = FloatArray(Integer.highestOneBit(total.coerceAtLeast(1)) * 2 * STRIDE) + + var cursor = 0 + batches.values.forEach { batch -> + batch.first = cursor + var depthSum = 0f + batch.draws.forEach { draw -> + for (slot in 0 until draw.batch.particles.count) { + write(cursor * STRIDE, draw, slot) + depthSum += distanceSquared(cursor * STRIDE, view) + cursor++ + } + } + batch.depth = if (batch.count > 0) depthSum / batch.count else 0f + if (batch.sorted) sortBackToFront(batch, view) + } + return total + } + + private fun write(at: Int, draw: VfxMeshDraw, slot: Int) { + val batch = draw.batch + val particles = batch.particles + val material = draw.spec.material + + matrix.set(batch.matrix).translate( + particles.positionX[slot] + batch.offset.x, + particles.positionY[slot] + batch.offset.y, + particles.positionZ[slot] + batch.offset.z, + ) + if (draw.spec.alignToVelocity) { + matrix.rotate( + VfxBillboards.facing(particles.velocityX[slot], particles.velocityY[slot], particles.velocityZ[slot]) + ) + } + matrix.rotate( + rotation.identity().rotateZYX( + (particles.rotationZ[slot] + batch.spin.z) * Mth.DEG_TO_RAD, + (particles.rotationY[slot] + batch.spin.y) * Mth.DEG_TO_RAD, + (particles.rotationX[slot] + batch.spin.x) * Mth.DEG_TO_RAD, + ) + ) + matrix.scale( + particles.sizeX[slot] * batch.sizeScale.x, + particles.sizeY[slot] * batch.sizeScale.y, + particles.sizeZ[slot] * batch.sizeScale.z, + ) + + val region = material.uv + val cellWidth = region.width / batch.uvColumns + val cellHeight = region.height / batch.uvRows + val frame = particles.frame[slot].toInt().coerceIn(0, batch.uvColumns * batch.uvRows - 1) + val light = particles.light[slot] + val tint = batch.tint + + packed[at] = matrix.m00(); packed[at + 1] = matrix.m01(); packed[at + 2] = matrix.m02() + packed[at + 3] = matrix.m10(); packed[at + 4] = matrix.m11(); packed[at + 5] = matrix.m12() + packed[at + 6] = matrix.m20(); packed[at + 7] = matrix.m21(); packed[at + 8] = matrix.m22() + packed[at + 9] = matrix.m30(); packed[at + 10] = matrix.m31(); packed[at + 11] = matrix.m32() + packed[at + 12] = particles.colorR[slot] * tint[0] + packed[at + 13] = particles.colorG[slot] * tint[1] + packed[at + 14] = particles.colorB[slot] * tint[2] + packed[at + 15] = particles.colorA[slot] * tint[3] + packed[at + 16] = region.u0 + (frame % batch.uvColumns) * cellWidth + packed[at + 17] = region.v0 + (frame / batch.uvColumns) * cellHeight + packed[at + 18] = cellWidth + packed[at + 19] = cellHeight + packed[at + 20] = (light and 0xFFFF).toFloat() + packed[at + 21] = (light shr 16 and 0xFFFF).toFloat() + } + + private fun distanceSquared(at: Int, view: VfxView): Float { + val dx = packed[at + 9] - view.eye.x + val dy = packed[at + 10] - view.eye.y + val dz = packed[at + 11] - view.eye.z + return dx * dx + dy * dy + dz * dz + } + + /** Few meshes are alpha blended at once, so a plain sort of the instances is enough. */ + private fun sortBackToFront(batch: Batch, view: VfxView) { + val start = batch.first + val items = (0 until batch.count).map { index -> + val at = (start + index) * STRIDE + distanceSquared(at, view) to packed.copyOfRange(at, at + STRIDE) + }.sortedByDescending { it.first } + items.forEachIndexed { index, (_, data) -> System.arraycopy(data, 0, packed, (start + index) * STRIDE, STRIDE) } + } + + private fun drawInstanced(order: List, view: VfxView, total: Int) { + val engine = ModShaders.VFX_MESH ?: return + val previousVao = GL33.glGetInteger(GL33.GL_VERTEX_ARRAY_BINDING) + val previousBuffer = GL33.glGetInteger(GL33.GL_ELEMENT_ARRAY_BUFFER_BINDING) + uploadInstances(total) + try { + GL33.glDepthFunc(GL33.GL_LEQUAL) + order.forEach { batch -> + val shader = batch.key.shader?.let { VfxShaders.get(it, DefaultVertexFormat.POSITION_TEX) } ?: engine + val mesh = gpuMesh(batch.primitive) + shader.setDefaultUniforms( + VertexFormat.Mode.TRIANGLES, view.modelView, view.projection, Minecraft.getInstance().window + ) + VfxMaterialStates.bindCommonSamplers(shader, VfxMaterialStates.texture(batch.key.texture)) + shader.safeGetUniform("Shaded").set(if (batch.shaded) 1f else 0f) + shader.safeGetUniform("BlendMode").set(VfxQuadPacker.blendMode(batch.draws.first().spec.material.blend)) + if (shader !== engine) batch.draws.first().uniforms?.apply(shader) + shader.apply() + VfxMaterialStates.apply(batch.key, premultiplied = false) + + RenderSystem.glBindVertexArray(vaoFor(shader, batch.primitive, mesh)) + instanceBuffer?.bind() + pointInstances(shader, batch.first.toLong() * STRIDE_BYTES) + GL33.glDrawElementsInstanced(GL33.GL_TRIANGLES, mesh.indexCount, GL33.GL_UNSIGNED_INT, 0L, batch.count) + shader.clear() + } + } finally { + VfxMaterialStates.restore() + GlStateManager._glUseProgram(0) + RenderSystem.glBindVertexArray(previousVao) + RenderSystem.glBindBuffer(GL33.GL_ELEMENT_ARRAY_BUFFER, previousBuffer) + } + } + + private fun uploadInstances(total: Int) { + val buffer = instanceBuffer ?: VboWrapper.createArrayBuffer().also { instanceBuffer = it } + if (instanceCapacity < total || upload.capacity() < total * STRIDE) { + val capacity = Integer.highestOneBit((total - 1).coerceAtLeast(63)) * 2 + upload = BufferUtils.createFloatBuffer(capacity * STRIDE) + instanceCapacity = capacity + buffer.bind() + GL33.glBufferData(GL33.GL_ARRAY_BUFFER, capacity.toLong() * STRIDE_BYTES, GL33.GL_STREAM_DRAW) + } + upload.clear() + upload.put(packed, 0, total * STRIDE) + upload.flip() + buffer.bind() + GL33.glBufferSubData(GL33.GL_ARRAY_BUFFER, 0L, upload) + } + + private fun gpuMesh(primitive: VfxPrimitive): GpuMesh = meshes.getOrPut(primitive) { + RenderSystem.glBindVertexArray(0) + val geometry = VfxPrimitiveMeshes.of(primitive) + val vertices = VboWrapper.createArrayBuffer().apply { + val data = BufferUtils.createFloatBuffer(geometry.vertices.size) + data.put(geometry.vertices).flip() + uploadData(data) + } + val indices = VboWrapper.createElementBuffer().apply { + val data = BufferUtils.createIntBuffer(geometry.indices.size) + data.put(geometry.indices).flip() + uploadData(data) + } + GpuMesh(vertices, indices, geometry.indices.size) + } + + private fun vaoFor(shader: ShaderInstance, primitive: VfxPrimitive, mesh: GpuMesh): Int = + vaos.getOrPut(shader to primitive) { + val vao = GL33.glGenVertexArrays() + GL33.glBindVertexArray(vao) + mesh.vertices.bind() + bindFloats(shader, "Position", 3, VERTEX_BYTES, 0L, divisor = 0) + bindFloats(shader, "Normal", 3, VERTEX_BYTES, 3L * Float.SIZE_BYTES, divisor = 0) + bindFloats(shader, "UV0", 2, VERTEX_BYTES, 6L * Float.SIZE_BYTES, divisor = 0) + instanceBuffer?.bind() + pointInstances(shader, 0L) + mesh.indices.bind() + vao + } + + private fun pointInstances(shader: ShaderInstance, base: Long) { + bindFloats(shader, "InstanceX", 3, STRIDE_BYTES, base) + bindFloats(shader, "InstanceY", 3, STRIDE_BYTES, base + 3L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceZ", 3, STRIDE_BYTES, base + 6L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceOrigin", 3, STRIDE_BYTES, base + 9L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceColor", 4, STRIDE_BYTES, base + 12L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceUv", 4, STRIDE_BYTES, base + 16L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceLight", 2, STRIDE_BYTES, base + 20L * Float.SIZE_BYTES) + } + + private fun bindFloats(shader: ShaderInstance, name: String, size: Int, stride: Int, offset: Long, divisor: Int = 1) { + val location = GL33.glGetAttribLocation(shader.id, name) + if (location == -1) return + GL33.glVertexAttribPointer(location, size, GL33.GL_FLOAT, false, stride, offset) + GL33.glEnableVertexAttribArray(location) + GL33.glVertexAttribDivisor(location, divisor) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxPrimitiveMeshes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxPrimitiveMeshes.kt new file mode 100644 index 000000000..9715fb8e9 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxPrimitiveMeshes.kt @@ -0,0 +1,147 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import ru.hollowhorizon.hollowengine.common.vfx.VfxPrimitive +import ru.hollowhorizon.hollowengine.common.vfx.VfxPrimitiveKind +import kotlin.math.PI +import kotlin.math.cos +import kotlin.math.sin + +/** + * A built-in mesh on the CPU, one block across: [FLOATS] floats per vertex (position, normal, + * texture coordinate) and counter-clockwise triangles seen from outside. + */ +class VfxPrimitiveGeometry(val vertices: FloatArray, val indices: IntArray) { + companion object { + const val FLOATS = 8 + } +} + +/** The geometry of every built-in mesh an effect has asked for, built once. */ +object VfxPrimitiveMeshes { + private val built = HashMap() + + @Synchronized + fun of(primitive: VfxPrimitive): VfxPrimitiveGeometry = built.getOrPut(primitive) { + when (primitive.kind) { + VfxPrimitiveKind.CUBE -> cube() + VfxPrimitiveKind.SPHERE -> sphere(primitive.segments) + VfxPrimitiveKind.CYLINDER -> cylinder(primitive.segments, primitive.caps) + } + } + + private class Builder { + val vertices = ArrayList() + val indices = ArrayList() + var count = 0 + + fun vertex(x: Float, y: Float, z: Float, nx: Float, ny: Float, nz: Float, u: Float, v: Float): Int { + vertices += x; vertices += y; vertices += z + vertices += nx; vertices += ny; vertices += nz + vertices += u; vertices += v + return count++ + } + + fun triangle(a: Int, b: Int, c: Int) { + indices += a; indices += b; indices += c + } + + fun build() = VfxPrimitiveGeometry(vertices.toFloatArray(), indices.toIntArray()) + } + + /** Six faces, each with the whole texture; the two edge axes of a face cross into its normal. */ + private fun cube(): VfxPrimitiveGeometry { + val builder = Builder() + val faces = listOf( + floatArrayOf(1f, 0f, 0f, 0f, 0f, -1f, 0f, 1f, 0f), + floatArrayOf(-1f, 0f, 0f, 0f, 0f, 1f, 0f, 1f, 0f), + floatArrayOf(0f, 1f, 0f, 1f, 0f, 0f, 0f, 0f, -1f), + floatArrayOf(0f, -1f, 0f, 1f, 0f, 0f, 0f, 0f, 1f), + floatArrayOf(0f, 0f, 1f, 1f, 0f, 0f, 0f, 1f, 0f), + floatArrayOf(0f, 0f, -1f, -1f, 0f, 0f, 0f, 1f, 0f), + ) + faces.forEach { face -> + val first = builder.count + for ((a, b) in listOf(-1f to -1f, 1f to -1f, 1f to 1f, -1f to 1f)) { + builder.vertex( + (face[0] + face[3] * a + face[6] * b) * 0.5f, + (face[1] + face[4] * a + face[7] * b) * 0.5f, + (face[2] + face[5] * a + face[8] * b) * 0.5f, + face[0], face[1], face[2], + (a + 1f) * 0.5f, 1f - (b + 1f) * 0.5f, + ) + } + builder.triangle(first, first + 1, first + 2) + builder.triangle(first, first + 2, first + 3) + } + return builder.build() + } + + private fun sphere(segments: Int): VfxPrimitiveGeometry { + val builder = Builder() + val rings = (segments / 2).coerceAtLeast(2) + for (ring in 0..rings) { + val phi = PI.toFloat() * ring / rings + for (slice in 0..segments) { + val theta = TAU * slice / segments + val nx = sin(phi) * cos(theta) + val ny = cos(phi) + val nz = sin(phi) * sin(theta) + val u = slice.toFloat() / segments + builder.vertex(nx * 0.5f, ny * 0.5f, nz * 0.5f, nx, ny, nz, u, ring.toFloat() / rings) + } + } + val row = segments + 1 + for (ring in 0 until rings) { + for (slice in 0 until segments) { + val a = ring * row + slice + val b = a + row + builder.triangle(a, a + 1, b) + builder.triangle(a + 1, b + 1, b) + } + } + return builder.build() + } + + private fun cylinder(segments: Int, caps: Boolean): VfxPrimitiveGeometry { + val builder = Builder() + for (slice in 0..segments) { + val theta = TAU * slice / segments + val nx = cos(theta) + val nz = sin(theta) + val u = slice.toFloat() / segments + builder.vertex(nx * 0.5f, 0.5f, nz * 0.5f, nx, 0f, nz, u, 0f) + builder.vertex(nx * 0.5f, -0.5f, nz * 0.5f, nx, 0f, nz, u, 1f) + } + for (slice in 0 until segments) { + val top = slice * 2 + val bottom = top + 1 + builder.triangle(top, top + 2, bottom) + builder.triangle(top + 2, bottom + 2, bottom) + } + if (caps) { + cap(builder, segments, 0.5f) + cap(builder, segments, -0.5f) + } + return builder.build() + } + + private fun cap(builder: Builder, segments: Int, y: Float) { + val up = if (y > 0f) 1f else -1f + val center = builder.vertex(0f, y, 0f, 0f, up, 0f, 0.5f, 0.5f) + val first = builder.count + for (slice in 0..segments) { + val theta = TAU * slice / segments + builder.vertex( + cos(theta) * 0.5f, y, sin(theta) * 0.5f, + 0f, up, 0f, + 0.5f + cos(theta) * 0.5f, 0.5f + sin(theta) * 0.5f, + ) + } + for (slice in 0 until segments) { + val current = first + slice + if (up > 0f) builder.triangle(center, current + 1, current) else builder.triangle(center, current, current + 1) + } + } + + private val TAU = (PI * 2.0).toFloat() +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt index bf3443192..77deafa70 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt @@ -1,13 +1,12 @@ package ru.hollowhorizon.hollowengine.client.vfx.render +import net.minecraft.util.Mth import org.joml.Matrix4f -import ru.hollowhorizon.hollowengine.client.vfx.VfxEmitter +import org.joml.Quaternionf import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadPacker.Companion.STRIDE -import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f import ru.hollowhorizon.hollowengine.common.vfx.VfxBlend import ru.hollowhorizon.hollowengine.common.vfx.VfxFacing import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec -import ru.hollowhorizon.hollowengine.common.vfx.VfxQuadEmitterSpec import kotlin.math.cos import kotlin.math.sin import kotlin.math.sqrt @@ -18,35 +17,50 @@ import kotlin.math.sqrt * [MIXED] is the one that lets different blend modes share a draw: with premultiplied alpha and a * `ONE, ONE_MINUS_SRC_ALPHA` blend, an alpha-blended particle writes its alpha, an additive one * writes zero alpha, and an opaque one writes one, so the three differ per particle rather than per - * draw. Only multiplying needs a blend function of its own. A shader pack does its own output, so - * with one active every mode keeps a batch of its own. + * draw. Only multiplying needs a blend function of its own. A shader of the author does not know + * about the trick, so its batches keep a blend function per mode. */ internal enum class VfxBatchBlend { - MIXED, OPAQUE, BLEND, ADDITIVE, MULTIPLY, + MIXED, OPAQUE, BLEND, ADDITIVE, MULTIPLY; + + companion object { + fun of(blend: VfxBlend, mixed: Boolean) = when { + blend == VfxBlend.MULTIPLY -> MULTIPLY + mixed -> MIXED + blend == VfxBlend.OPAQUE -> OPAQUE + blend == VfxBlend.ADDITIVE -> ADDITIVE + else -> BLEND + } + } } -/** What decides whether two emitters can share a draw call. */ +/** + * What decides whether two draws can share a draw call. + * + * A draw with a shader of its own also carries uniforms of its own, so [owner] keeps it apart. + */ internal data class VfxBatchKey( val texture: String, val blend: VfxBatchBlend, val cull: Boolean, val depthTest: Boolean, val depthWrite: Boolean, + val shader: String? = null, + val owner: Any? = null, ) { companion object { - fun of(material: VfxMaterialSpec, mixed: Boolean) = VfxBatchKey( - texture = material.texture, - blend = when { - material.blend == VfxBlend.MULTIPLY -> VfxBatchBlend.MULTIPLY - mixed -> VfxBatchBlend.MIXED - material.blend == VfxBlend.OPAQUE -> VfxBatchBlend.OPAQUE - material.blend == VfxBlend.ADDITIVE -> VfxBatchBlend.ADDITIVE - else -> VfxBatchBlend.BLEND - }, - cull = material.cull, - depthTest = material.depthTest, - depthWrite = material.depthWrite, - ) + fun of(material: VfxMaterialSpec, mixed: Boolean, owner: Any?): VfxBatchKey { + val custom = material.shader != null + return VfxBatchKey( + texture = material.texture, + blend = VfxBatchBlend.of(material.blend, mixed && !custom), + cull = material.cull, + depthTest = material.depthTest, + depthWrite = material.depthWrite, + shader = material.shader, + owner = if (custom) owner else null, + ) + } } } @@ -59,11 +73,15 @@ internal class VfxQuadBatch(val key: VfxBatchKey) { /** Whether anything in the batch is alpha blended, which is what makes its order matter. */ val sorted: Boolean - get() = key.blend == VfxBatchBlend.BLEND || key.blend == VfxBatchBlend.MIXED && draws.any { (it.emitter.spec as VfxQuadEmitterSpec).material.blend == VfxBlend.BLEND } + get() = key.blend == VfxBatchBlend.BLEND || + key.blend == VfxBatchBlend.MIXED && draws.any { it.plane.material.blend == VfxBlend.BLEND } + + /** The uniforms of the one draw a batch with a shader of its own holds. */ + val uniforms: VfxUniformValues? get() = draws.firstOrNull()?.uniforms } /** - * Turns the collected emitters into instance data, grouped into batches and in draw order. + * Turns the collected planes into instance data, grouped into batches and in draw order. */ internal class VfxQuadPacker { /** Particles written in draw order, [STRIDE] floats each. */ @@ -76,21 +94,19 @@ internal class VfxQuadPacker { private var staging = FloatArray(STRIDE * 256) private var order = IntArray(256) private var depths = FloatArray(256) - private val axis = MutableVec3f() private val edges = FloatArray(6) /** Packs [draws] as seen from [view]; returns how many particles there are in total. */ - fun pack(draws: List, view: VfxView, mixed: Boolean): Int { + fun pack(draws: List, view: VfxView): Int { byKey.clear() draws.forEach { draw -> - val spec = draw.emitter.spec as? VfxQuadEmitterSpec ?: return@forEach - val key = VfxBatchKey.of(spec.material, mixed) + val key = VfxBatchKey.of(draw.plane.material, mixed = true, owner = draw) byKey.getOrPut(key) { VfxQuadBatch(key) }.draws += draw } var total = 0 byKey.values.forEach { batch -> - batch.count = batch.draws.sumOf { it.emitter.particles.count } + batch.count = batch.draws.sumOf { it.batch.particles.count } total += batch.count } batches.clear() @@ -116,9 +132,8 @@ internal class VfxQuadPacker { var depthSum = 0f batch.draws.forEach { draw -> - val emitter = draw.emitter - for (slot in 0 until emitter.particles.count) { - write(target, offset, emitter, slot, draw.matrix, view) + for (slot in 0 until draw.batch.particles.count) { + write(target, offset, draw, slot, view) if (sorted) { val index = offset / STRIDE val depth = distanceSquared(target, offset, view) @@ -155,55 +170,108 @@ internal class VfxQuadPacker { return dx * dx + dy * dy + dz * dz } - private fun write(out: FloatArray, at: Int, emitter: VfxEmitter, slot: Int, matrix: Matrix4f, view: VfxView) { - val spec = emitter.spec as VfxQuadEmitterSpec - val particles = emitter.particles + private fun write(out: FloatArray, at: Int, draw: VfxQuadDraw, slot: Int, view: VfxView) { + val plane = draw.plane + val batch = draw.batch + val particles = batch.particles + val matrix = batch.matrix - val px = particles.positionX[slot] - val py = particles.positionY[slot] - val pz = particles.positionZ[slot] + val px = particles.positionX[slot] + batch.offset.x + val py = particles.positionY[slot] + batch.offset.y + val pz = particles.positionZ[slot] + batch.offset.z val cx = matrix.m00() * px + matrix.m10() * py + matrix.m20() * pz + matrix.m30() val cy = matrix.m01() * px + matrix.m11() * py + matrix.m21() * pz + matrix.m31() val cz = matrix.m02() * px + matrix.m12() * py + matrix.m22() * pz + matrix.m32() - val width = particles.sizeX[slot] - val height = particles.sizeY[slot] - when (spec.facing) { - VfxFacing.CAMERA -> cameraEdges(edges, matrix, view, particles.rotationZ[slot], width, height) - VfxFacing.CAMERA_AXIS -> axisEdges(edges, emitter, spec, matrix, view, cx, cy, cz, width, height) - VfxFacing.NONE -> rotatedEdges( + val width = particles.sizeX[slot] * batch.sizeScale.x + val height = particles.sizeY[slot] * batch.sizeScale.y + val roll = particles.rotationZ[slot] + batch.spin.z + when (plane.facing) { + VfxFacing.CAMERA -> VfxBillboards.cameraEdges(edges, matrix, view, roll, width, height) + VfxFacing.CAMERA_AXIS -> VfxBillboards.axisEdges( + edges, matrix, view, cx, cy, cz, + plane.facingAxis.x, plane.facingAxis.y, plane.facingAxis.z, + width, height, + ) + + VfxFacing.VELOCITY -> VfxBillboards.axisEdges( + edges, matrix, view, cx, cy, cz, + particles.velocityX[slot], particles.velocityY[slot], particles.velocityZ[slot], + width, height, + ) + + VfxFacing.NONE -> VfxBillboards.rotatedEdges( edges, matrix, - particles.rotationX[slot], particles.rotationY[slot], particles.rotationZ[slot], + particles.rotationX[slot] + batch.spin.x, particles.rotationY[slot] + batch.spin.y, roll, width, height, ) } - val region = spec.material.uv - val columns = emitter.uvColumns - val rows = emitter.uvRows + val region = plane.material.uv + val columns = batch.uvColumns + val rows = batch.uvRows val cellWidth = region.width / columns val cellHeight = region.height / rows val frame = particles.frame[slot].toInt().coerceIn(0, columns * rows - 1) val light = particles.light[slot] + val tint = batch.tint out[at] = cx out[at + 1] = cy out[at + 2] = cz System.arraycopy(edges, 0, out, at + 3, 6) - out[at + 9] = particles.colorR[slot] - out[at + 10] = particles.colorG[slot] - out[at + 11] = particles.colorB[slot] - out[at + 12] = particles.colorA[slot] + out[at + 9] = particles.colorR[slot] * tint[0] + out[at + 10] = particles.colorG[slot] * tint[1] + out[at + 11] = particles.colorB[slot] * tint[2] + out[at + 12] = particles.colorA[slot] * tint[3] out[at + 13] = region.u0 + (frame % columns) * cellWidth out[at + 14] = region.v0 + (frame / columns) * cellHeight out[at + 15] = cellWidth out[at + 16] = cellHeight out[at + 17] = (light and 0xFFFF).toFloat() out[at + 18] = (light shr 16 and 0xFFFF).toFloat() - out[at + 19] = blendMode(spec.material.blend) + out[at + 19] = blendMode(plane.material.blend) + } + + private fun ensureCapacity(count: Int) { + if (packed.size >= count * STRIDE) return + val capacity = Integer.highestOneBit((count - 1).coerceAtLeast(255)) * 2 + packed = FloatArray(capacity * STRIDE) + staging = FloatArray(capacity * STRIDE) + order = IntArray(capacity) + depths = FloatArray(capacity) + } + + companion object { + /** Floats per particle: center, right edge, up edge, color, uv window, light, blend mode. */ + const val STRIDE = 20 + + /** The blend mode as the particle shader reads it: 0 alpha, 1 additive, 2 opaque, 3 multiply. */ + fun blendMode(blend: VfxBlend): Float = when (blend) { + VfxBlend.BLEND -> 0f + VfxBlend.ADDITIVE -> 1f + VfxBlend.OPAQUE -> 2f + VfxBlend.MULTIPLY -> 3f + } + } +} + +/** + * The two edge vectors of a quad in the space of the view, however it faces the camera. + */ +internal object VfxBillboards { + private const val EPSILON = 1.0e-6f + private const val DEG_TO_RAD = (Math.PI / 180.0).toFloat() + + /** Turns a velocity into a rotation that points a mesh or a model along it. */ + fun facing(x: Float, y: Float, z: Float): Quaternionf { + if (x * x + y * y + z * z < EPSILON) return Quaternionf() + val yaw = Mth.atan2(x.toDouble(), z.toDouble()).toFloat() + val pitch = Mth.atan2(y.toDouble(), Mth.sqrt(x * x + z * z).toDouble()).toFloat() + return Quaternionf().rotateY(yaw).rotateX(-pitch) } - private fun cameraEdges( + fun cameraEdges( out: FloatArray, matrix: Matrix4f, view: VfxView, @@ -225,31 +293,35 @@ internal class VfxQuadPacker { out[5] = (view.up.z * c - view.right.z * s) * h } - private fun axisEdges( + /** + * A quad along an axis given in the space of the particles, turned around it to face the + * camera. With no axis to speak of, it simply faces the camera. + */ + fun axisEdges( out: FloatArray, - emitter: VfxEmitter, - spec: VfxQuadEmitterSpec, matrix: Matrix4f, view: VfxView, cx: Float, cy: Float, cz: Float, + axisX: Float, + axisY: Float, + axisZ: Float, width: Float, height: Float, ) { - emitter.toSimDirection(spec.facingAxis, axis) - var ax = matrix.m00() * axis.x + matrix.m10() * axis.y + matrix.m20() * axis.z - var ay = matrix.m01() * axis.x + matrix.m11() * axis.y + matrix.m21() * axis.z - var az = matrix.m02() * axis.x + matrix.m12() * axis.y + matrix.m22() * axis.z + var ax = matrix.m00() * axisX + matrix.m10() * axisY + matrix.m20() * axisZ + var ay = matrix.m01() * axisX + matrix.m11() * axisY + matrix.m21() * axisZ + var az = matrix.m02() * axisX + matrix.m12() * axisY + matrix.m22() * axisZ val axisLength = sqrt(ax * ax + ay * ay + az * az) - val scale: Float if (axisLength < EPSILON) { - ax = view.up.x; ay = view.up.y; az = view.up.z - scale = 1f - } else { - ax /= axisLength; ay /= axisLength; az /= axisLength - scale = axisLength + cameraEdges(out, matrix, view, 0f, width, height) + return } + ax /= axisLength + ay /= axisLength + az /= axisLength + val scale = sqrt(matrix.m00() * matrix.m00() + matrix.m01() * matrix.m01() + matrix.m02() * matrix.m02()) val tx = view.eye.x - cx val ty = view.eye.y - cy @@ -271,7 +343,7 @@ internal class VfxQuadPacker { out[5] = az * height * scale } - private fun rotatedEdges( + fun rotatedEdges( out: FloatArray, matrix: Matrix4f, degreesX: Float, @@ -301,29 +373,4 @@ internal class VfxQuadPacker { out[4] = matrix.m01() * vx + matrix.m11() * vy + matrix.m21() * vz out[5] = matrix.m02() * vx + matrix.m12() * vy + matrix.m22() * vz } - - private fun ensureCapacity(count: Int) { - if (packed.size >= count * STRIDE) return - val capacity = Integer.highestOneBit((count - 1).coerceAtLeast(255)) * 2 - packed = FloatArray(capacity * STRIDE) - staging = FloatArray(capacity * STRIDE) - order = IntArray(capacity) - depths = FloatArray(capacity) - } - - companion object { - /** Floats per particle: center, right edge, up edge, color, uv window, light, blend mode. */ - const val STRIDE = 20 - - private const val EPSILON = 1.0e-6f - private const val DEG_TO_RAD = (Math.PI / 180.0).toFloat() - - /** The blend mode as the particle shader reads it: 0 alpha, 1 additive, 2 opaque, 3 multiply. */ - fun blendMode(blend: VfxBlend): Float = when (blend) { - VfxBlend.BLEND -> 0f - VfxBlend.ADDITIVE -> 1f - VfxBlend.OPAQUE -> 2f - VfxBlend.MULTIPLY -> 3f - } - } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt index e42fa7e59..7c2c147ac 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt @@ -4,30 +4,21 @@ import com.mojang.blaze3d.platform.GlStateManager import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.* import net.minecraft.client.Minecraft -import net.minecraft.client.renderer.GameRenderer import net.minecraft.client.renderer.ShaderInstance import org.lwjgl.BufferUtils import org.lwjgl.opengl.GL33 -import ru.hollowhorizon.hollowengine.client.models.internal.drawWithShader -import ru.hollowhorizon.hollowengine.client.models.internal.manager.HollowModelManager -import ru.hollowhorizon.hollowengine.client.models.internal.translucentShaderState import ru.hollowhorizon.hollowengine.client.models.internal.utils.VboWrapper -import ru.hollowhorizon.hollowengine.client.utils.shaderPackParticleShader -import ru.hollowhorizon.hollowengine.client.utils.shouldOverrideShaders import ru.hollowhorizon.hollowengine.common.registry.ModShaders -import ru.hollowhorizon.hollowengine.common.utils.rl import java.nio.FloatBuffer import java.util.* /** * Draws billboard particles, one instanced quad per particle, one draw call per batch. * - * Without a shader pack the engine's own program draws everything, and alpha-blended, additive and - * opaque particles share one draw through premultiplied alpha (see [VfxBatchBlend]). - * - * With a pack the pack's particle program is patched for instancing, the way model instancing does - * it: a program the pack does not know would draw into nothing, because the pack renders into its - * own buffers. + * The engine program draws everything but the materials with a shader of their own, and + * alpha-blended, additive and opaque particles share one draw through premultiplied alpha (see + * [VfxBatchBlend]). With a shader pack the planes are drawn over the pack's finished image, so the + * pack never replaces the program. */ object VfxQuadRenderer { private const val STRIDE = VfxQuadPacker.STRIDE @@ -59,55 +50,32 @@ object VfxQuadRenderer { fun render(draws: List, view: VfxView) { if (draws.isEmpty()) return - val shaderPack = shouldOverrideShaders() - val total = packer.pack(draws, view, mixed = !shaderPack) + val total = packer.pack(draws, view) if (total == 0) return - - when { - !shaderPack -> drawOwn(total, view) - else -> drawWithPack(total) - } + draw(total, view) } - private fun drawOwn(total: Int, view: VfxView) { - val shader = ModShaders.VFX_PARTICLE ?: return + /** + * The engine program draws every batch but the ones whose material names a shader of its own; + * those get theirs, falling back to the engine program when it failed to load. + */ + private fun draw(total: Int, view: VfxView) { + val engine = ModShaders.VFX_PARTICLE ?: return withInstanceState(total) { - RenderSystem.setShader { shader } - shader.setDefaultUniforms( - VertexFormat.Mode.TRIANGLES, view.modelView, view.projection, Minecraft.getInstance().window - ) GL33.glDepthFunc(GL33.GL_LEQUAL) packer.batches.forEach { batch -> - shader.setSampler("Sampler0", textureOf(batch)) - shader.setSampler("Sampler2", HollowModelManager.lightTexture.id) + val shader = batch.key.shader?.let { VfxShaders.get(it, DefaultVertexFormat.POSITION_TEX) } ?: engine + RenderSystem.setShader { shader } + shader.setDefaultUniforms( + VertexFormat.Mode.TRIANGLES, view.modelView, view.projection, Minecraft.getInstance().window + ) + VfxMaterialStates.bindCommonSamplers(shader, VfxMaterialStates.texture(batch.key.texture)) + if (shader !== engine) batch.uniforms?.apply(shader) shader.apply() - applyState(batch.key, premultiplied = true) + VfxMaterialStates.apply(batch.key, premultiplied = shader === engine) drawBatch(shader, batch) - } - shader.clear() - } - } - - private fun drawWithPack(total: Int) { - val opaque = shaderPackParticleShader(translucent = false) - val translucent = shaderPackParticleShader(translucent = true) - if (opaque == null || translucent == null) { - drawExpanded() - return - } - - withInstanceState(total) { - packer.batches.forEach { batch -> - val shader = if (batch.key.blend == VfxBatchBlend.OPAQUE) opaque else translucent - drawWithShader(shader, translucentShaderState()) { - RenderSystem.activeTexture(GL33.GL_TEXTURE2) - RenderSystem.bindTexture(HollowModelManager.lightTexture.id) - RenderSystem.activeTexture(GL33.GL_TEXTURE0) - RenderSystem.bindTexture(textureOf(batch)) - applyState(batch.key, premultiplied = false) - drawBatch(shader, batch) - } + shader.clear() } } } @@ -122,7 +90,7 @@ object VfxQuadRenderer { try { body() } finally { - restoreState() + VfxMaterialStates.restore() GlStateManager._glUseProgram(0) RenderSystem.activeTexture(previousTexture) RenderSystem.glBindVertexArray(previousVao) @@ -137,99 +105,6 @@ object VfxQuadRenderer { GL33.glDrawElementsInstanced(GL33.GL_TRIANGLES, 6, GL33.GL_UNSIGNED_INT, 0L, batch.count) } - private fun drawExpanded() { - RenderSystem.setShader(GameRenderer::getParticleShader) - RenderSystem.setShaderTexture(2, HollowModelManager.lightTexture.id) - - packer.batches.forEach { batch -> - RenderSystem.setShaderTexture(0, textureOf(batch)) - applyState(batch.key, premultiplied = false) - - val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE) - val data = packer.packed - for (index in batch.first until batch.first + batch.count) { - val at = index * STRIDE - val light = data[at + 17].toInt() or (data[at + 18].toInt() shl 16) - corner(builder, data, at, -0.5f, -0.5f, 0f, 1f, light) - corner(builder, data, at, 0.5f, -0.5f, 1f, 1f, light) - corner(builder, data, at, 0.5f, 0.5f, 1f, 0f, light) - corner(builder, data, at, -0.5f, 0.5f, 0f, 0f, light) - } - builder.build()?.let(BufferUploader::drawWithShader) - } - - restoreState() - } - - private fun corner( - builder: BufferBuilder, - data: FloatArray, - at: Int, - along: Float, - across: Float, - u: Float, - v: Float, - light: Int, - ) { - builder.addVertex( - data[at] + data[at + 3] * along + data[at + 6] * across, - data[at + 1] + data[at + 4] * along + data[at + 7] * across, - data[at + 2] + data[at + 5] * along + data[at + 8] * across, - ).setUv(data[at + 13] + u * data[at + 15], data[at + 14] + v * data[at + 16]) - .setColor(data[at + 9], data[at + 10], data[at + 11], data[at + 12]).setLight(light) - } - - private fun textureOf(batch: VfxQuadBatch): Int = - Minecraft.getInstance().textureManager.getTexture(batch.key.texture.rl).id - - private fun applyState(key: VfxBatchKey, premultiplied: Boolean) { - applyBlend(key.blend, premultiplied) - if (key.cull) RenderSystem.enableCull() else RenderSystem.disableCull() - if (key.depthTest) RenderSystem.enableDepthTest() else RenderSystem.disableDepthTest() - RenderSystem.depthMask(key.depthWrite) - } - - private fun restoreState() { - RenderSystem.depthMask(true) - RenderSystem.enableDepthTest() - RenderSystem.enableBlend() - RenderSystem.blendEquation(GL33.GL_FUNC_ADD) - RenderSystem.defaultBlendFunc() - RenderSystem.enableCull() - } - - private fun applyBlend(blend: VfxBatchBlend, premultiplied: Boolean) { - RenderSystem.blendEquation(GL33.GL_FUNC_ADD) - when (blend) { - VfxBatchBlend.OPAQUE -> RenderSystem.disableBlend() - VfxBatchBlend.MIXED -> { - RenderSystem.enableBlend() - RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA) - } - - VfxBatchBlend.BLEND -> { - RenderSystem.enableBlend() - RenderSystem.defaultBlendFunc() - } - - VfxBatchBlend.ADDITIVE -> { - RenderSystem.enableBlend() - RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE) - } - - VfxBatchBlend.MULTIPLY -> { - RenderSystem.enableBlend() - if (premultiplied) { - RenderSystem.blendFunc(GlStateManager.SourceFactor.DST_COLOR, GlStateManager.DestFactor.ZERO) - } else { - RenderSystem.blendFunc( - GlStateManager.SourceFactor.DST_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA - ) - } - } - } - } - private fun uploadInstances(total: Int) { if (instanceCapacity < total || upload.capacity() < total * STRIDE) { val capacity = Integer.highestOneBit((total - 1).coerceAtLeast(255)) * 2 @@ -247,6 +122,7 @@ object VfxQuadRenderer { private fun ensureBuffers() { if (quadBuffer != null) return + RenderSystem.glBindVertexArray(0) quadBuffer = VboWrapper.createArrayBuffer().apply { val corners = BufferUtils.createFloatBuffer(4 * 5) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt new file mode 100644 index 000000000..5abdefb31 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt @@ -0,0 +1,179 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.pipeline.RenderTarget +import com.mojang.blaze3d.pipeline.TextureTarget +import com.mojang.blaze3d.platform.GlStateManager +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.MeshData +import com.mojang.blaze3d.vertex.VertexBuffer +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.ShaderInstance +import net.minecraft.resources.ResourceLocation +import net.minecraft.server.packs.resources.ResourceProvider +import org.lwjgl.opengl.GL33 +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.client.models.internal.manager.HollowModelManager +import ru.hollowhorizon.hollowengine.common.utils.rl + +/** + * The blend, depth and culling state a batch of surfaces is drawn with. + */ +internal object VfxMaterialStates { + fun apply(key: VfxBatchKey, premultiplied: Boolean) { + applyBlend(key.blend, premultiplied) + if (key.cull) RenderSystem.enableCull() else RenderSystem.disableCull() + if (key.depthTest) RenderSystem.enableDepthTest() else RenderSystem.disableDepthTest() + RenderSystem.depthMask(key.depthWrite) + } + + fun restore() { + RenderSystem.depthMask(true) + RenderSystem.enableDepthTest() + RenderSystem.enableBlend() + RenderSystem.blendEquation(GL33.GL_FUNC_ADD) + RenderSystem.defaultBlendFunc() + RenderSystem.enableCull() + } + + fun texture(location: String): Int = Minecraft.getInstance().textureManager.getTexture(location.rl).id + + /** Binds what every shader of a surface may sample besides its texture: light and the scene. */ + fun bindCommonSamplers(shader: ShaderInstance, texture: Int) { + shader.setSampler("Sampler0", texture) + shader.setSampler("Sampler2", HollowModelManager.lightTexture.id) + VfxSceneTextures.bind(shader) + } + + private fun applyBlend(blend: VfxBatchBlend, premultiplied: Boolean) { + RenderSystem.blendEquation(GL33.GL_FUNC_ADD) + when (blend) { + VfxBatchBlend.OPAQUE -> RenderSystem.disableBlend() + VfxBatchBlend.MIXED -> { + RenderSystem.enableBlend() + RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA) + } + + VfxBatchBlend.BLEND -> { + RenderSystem.enableBlend() + RenderSystem.defaultBlendFunc() + } + + VfxBatchBlend.ADDITIVE -> { + RenderSystem.enableBlend() + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE) + } + + VfxBatchBlend.MULTIPLY -> { + RenderSystem.enableBlend() + if (premultiplied) { + RenderSystem.blendFunc(GlStateManager.SourceFactor.DST_COLOR, GlStateManager.DestFactor.ZERO) + } else { + RenderSystem.blendFunc( + GlStateManager.SourceFactor.DST_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA + ) + } + } + } + } +} + +/** + * The core shaders effects name in their materials and post effects, loaded on first use. + */ +object VfxShaders { + private val loaded = HashMap, ShaderInstance?>() + + fun get(location: String, format: VertexFormat): ShaderInstance? = loaded.getOrPut(location to format) { + load(location, format) + } + + /** Resource packs changed: every shader is read again the next time it is drawn. */ + fun clear() { + loaded.values.filterNotNull().forEach(ShaderInstance::close) + loaded.clear() + VfxShaderDeclarations.clear() + VfxQuadRenderer.invalidate() + VfxMeshRenderer.invalidate() + } + + private fun load(location: String, format: VertexFormat): ShaderInstance? { + val id = ResourceLocation.tryParse(location) ?: return null + val alias = "$ALIAS_FOLDER/${id.namespace}/${id.path}" + val resources = Minecraft.getInstance().resourceManager + val provider = ResourceProvider { wanted -> + val path = wanted.path + val prefix = "shaders/core/$ALIAS_FOLDER/" + if (wanted.namespace == ResourceLocation.DEFAULT_NAMESPACE && path.startsWith(prefix)) { + val rest = path.removePrefix(prefix) + val namespace = rest.substringBefore('/') + val file = "shaders/core/${rest.substringAfter('/')}" + resources.getResource(ResourceLocation.fromNamespaceAndPath(namespace, file)) + } else { + resources.getResource(wanted) + } + } + return try { + ShaderInstance(provider, alias, format) + } catch (e: Exception) { + HollowEngine.LOGGER.warn("Could not load the effect shader {}: {}", location, e.message) + null + } + } + + private const val ALIAS_FOLDER = "hollowengine_vfx" +} + +/** + * Copies of the color and depth of the frame being drawn into, for shaders that read the scene: + * `SceneColor` for distortion and post effects, `SceneDepth` for soft intersections. + */ +object VfxSceneTextures { + private var copy: TextureTarget? = null + + /** Copies what [source] holds right now; everything drawn afterwards is not in the copy. */ + fun capture(source: RenderTarget) { + val width = source.width + val height = source.height + val target = copy?.takeIf { it.width == width && it.height == height } + ?: TextureTarget(width, height, true, Minecraft.ON_OSX).also { + copy?.destroyBuffers() + copy = it + } + + val scissor = GL33.glIsEnabled(GL33.GL_SCISSOR_TEST) + if (scissor) GL33.glDisable(GL33.GL_SCISSOR_TEST) + GlStateManager._glBindFramebuffer(GL33.GL_READ_FRAMEBUFFER, source.frameBufferId) + GlStateManager._glBindFramebuffer(GL33.GL_DRAW_FRAMEBUFFER, target.frameBufferId) + GL33.glBlitFramebuffer( + 0, 0, width, height, 0, 0, width, height, + GL33.GL_COLOR_BUFFER_BIT or GL33.GL_DEPTH_BUFFER_BIT, GL33.GL_NEAREST, + ) + if (scissor) GL33.glEnable(GL33.GL_SCISSOR_TEST) + source.bindWrite(false) + } + + /** Binds the copies, and sets `ScreenSize` to their size: the preview draws into less than the window. */ + fun bind(shader: ShaderInstance) { + val target = copy ?: return + shader.setSampler("SceneColor", target.colorTextureId) + shader.setSampler("SceneDepth", target.depthTextureId) + shader.safeGetUniform("ScreenSize").set(target.width.toFloat(), target.height.toFloat()) + } +} + +/** + * Draws a finished buffer with [shader] and the matrices of [view], rather than whatever the render + * system holds, which in the editor preview is the matrices of the panel. + */ +internal fun VfxView.drawImmediate(mesh: MeshData, shader: ShaderInstance, prepare: (ShaderInstance) -> Unit) { + val buffer = mesh.drawState().format().immediateDrawVertexBuffer + buffer.bind() + buffer.upload(mesh) + shader.setDefaultUniforms(mesh.drawState().mode(), modelView, projection, Minecraft.getInstance().window) + prepare(shader) + shader.apply() + buffer.draw() + shader.clear() + VertexBuffer.unbind() +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt new file mode 100644 index 000000000..3373846b7 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt @@ -0,0 +1,130 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.BufferBuilder +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.Tesselator +import com.mojang.blaze3d.vertex.VertexFormat +import org.lwjgl.opengl.GL33 +import ru.hollowhorizon.hollowengine.common.registry.ModShaders +import ru.hollowhorizon.hollowengine.common.vfx.VfxBlend +import kotlin.math.sqrt + +/** + * Draws trails and beams: strips of points turned into quads that face the camera. + * + * Ribbons are built on the CPU every frame in the vanilla particle format, drawn by the engine + * ribbon program or by the shader the material names. + */ +object VfxRibbonRenderer { + private val side = FloatArray(3) + + fun render(draws: List, view: VfxView) { + if (draws.isEmpty()) return + val engine = ModShaders.VFX_RIBBON ?: return + + val ordered = draws.filter { it.material.blend != VfxBlend.BLEND } + + draws.filter { it.material.blend == VfxBlend.BLEND }.sortedByDescending { depth(it, view) } + + ordered.forEach { draw -> + val material = draw.material + val shader = material.shader?.let { VfxShaders.get(it, DefaultVertexFormat.PARTICLE) } ?: engine + val texture = VfxMaterialStates.texture(material.texture) + + val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE) + for (strip in 0 until draw.stripCount) { + quads(builder, draw, draw.strips[strip * 2], draw.strips[strip * 2 + 1], view) + } + val mesh = builder.build() ?: return@forEach + + if (draw.repeat) { + RenderSystem.bindTexture(texture) + RenderSystem.texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_S, GL33.GL_REPEAT) + RenderSystem.texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_T, GL33.GL_REPEAT) + } + VfxMaterialStates.apply(VfxBatchKey.of(material, mixed = false, owner = draw), premultiplied = false) + view.drawImmediate(mesh, shader) { bound -> + VfxMaterialStates.bindCommonSamplers(bound, texture) + bound.safeGetUniform("BlendMode").set(VfxQuadPacker.blendMode(material.blend)) + if (bound !== engine) draw.uniforms?.apply(bound) + } + } + VfxMaterialStates.restore() + } + + private fun quads(builder: BufferBuilder, draw: VfxRibbonDraw, first: Int, count: Int, view: VfxView) { + val points = draw.points + val region = draw.material.uv + val stride = VfxRibbonDraw.STRIDE + for (index in first until first + count - 1) { + val at = index * stride + val next = at + stride + sideOf(points, index, first, count, view) + val ax = side[0] + val ay = side[1] + val az = side[2] + sideOf(points, index + 1, first, count, view) + + val v0 = if (draw.repeat) points[at + 8] else region.v0 + points[at + 8] * region.height + val v1 = if (draw.repeat) points[next + 8] else region.v0 + points[next + 8] * region.height + vertex(builder, points, at, -ax, -ay, -az, region.u0, v0) + vertex(builder, points, at, ax, ay, az, region.u1, v0) + vertex(builder, points, next, side[0], side[1], side[2], region.u1, v1) + vertex(builder, points, next, -side[0], -side[1], -side[2], region.u0, v1) + } + } + + /** The half-width vector at a point: across the ribbon and across the line to the eye. */ + private fun sideOf(points: FloatArray, index: Int, first: Int, count: Int, view: VfxView) { + val stride = VfxRibbonDraw.STRIDE + val before = (index - 1).coerceAtLeast(first) * stride + val after = (index + 1).coerceAtMost(first + count - 1) * stride + val tx = points[after] - points[before] + val ty = points[after + 1] - points[before + 1] + val tz = points[after + 2] - points[before + 2] + + val at = index * stride + val ex = view.eye.x - points[at] + val ey = view.eye.y - points[at + 1] + val ez = view.eye.z - points[at + 2] + + var sx = ty * ez - tz * ey + var sy = tz * ex - tx * ez + var sz = tx * ey - ty * ex + val length = sqrt(sx * sx + sy * sy + sz * sz) + val half = points[at + 3] + if (length < 1.0e-6f) { + sx = view.right.x; sy = view.right.y; sz = view.right.z + } else { + sx /= length; sy /= length; sz /= length + } + side[0] = sx * half + side[1] = sy * half + side[2] = sz * half + } + + private fun vertex( + builder: BufferBuilder, + points: FloatArray, + at: Int, + dx: Float, + dy: Float, + dz: Float, + u: Float, + v: Float, + ) { + builder.addVertex(points[at] + dx, points[at + 1] + dy, points[at + 2] + dz) + .setUv(u, v) + .setColor(points[at + 4], points[at + 5], points[at + 6], points[at + 7]) + .setLight(points[at + 9].toRawBits()) + } + + private fun depth(draw: VfxRibbonDraw, view: VfxView): Float { + val points = draw.points + if (points.isEmpty()) return 0f + val dx = points[0] - view.eye.x + val dy = points[1] - view.eye.y + val dz = points[2] - view.eye.z + return dx * dx + dy * dy + dz * dz + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt new file mode 100644 index 000000000..6b1f95e44 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt @@ -0,0 +1,421 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import org.joml.Matrix4f +import ru.hollowhorizon.hollowengine.client.utils.math.asMatrix4f +import ru.hollowhorizon.hollowengine.client.vfx.VfxColorSampler +import ru.hollowhorizon.hollowengine.client.vfx.VfxEvalContext +import ru.hollowhorizon.hollowengine.client.vfx.VfxFloatSampler +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeBehavior +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime +import ru.hollowhorizon.hollowengine.client.vfx.VfxNoise +import ru.hollowhorizon.hollowengine.client.vfx.VfxRangeMode +import ru.hollowhorizon.hollowengine.client.vfx.VfxSamplers +import ru.hollowhorizon.hollowengine.client.vfx.VfxVec3Sampler +import ru.hollowhorizon.hollowengine.common.utils.MutableColor +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxBeamSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxRibbonUv +import ru.hollowhorizon.hollowengine.common.vfx.VfxSurfaceSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxTrailSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value +import kotlin.math.PI +import kotlin.math.abs +import kotlin.math.sin +import kotlin.math.sqrt + +/** + * Collects the strips of one ribbon node for one frame, in the space of the view. + */ +internal class VfxRibbonBuilder { + private var points = FloatArray(VfxRibbonDraw.STRIDE * 64) + private var count = 0 + private var strips = IntArray(16) + private var stripCount = 0 + private var stripStart = 0 + + fun begin() { + count = 0 + stripCount = 0 + } + + fun startStrip() { + stripStart = count + } + + fun point(x: Float, y: Float, z: Float, halfWidth: Float, color: MutableColor, along: Float, light: Int) { + val stride = VfxRibbonDraw.STRIDE + if (points.size < (count + 1) * stride) points = points.copyOf(points.size * 2) + val at = count * stride + points[at] = x + points[at + 1] = y + points[at + 2] = z + points[at + 3] = halfWidth + points[at + 4] = color.r + points[at + 5] = color.g + points[at + 6] = color.b + points[at + 7] = color.a + points[at + 8] = along + points[at + 9] = Float.fromBits(light) + count++ + } + + /** Closes the strip; one with less than two points is dropped. [scale] multiplies what [point] got as `along`. */ + fun endStrip(scale: Float = 1f, shift: Float = 0f) { + val length = count - stripStart + if (length < 2) { + count = stripStart + return + } + for (index in stripStart until count) { + val at = index * VfxRibbonDraw.STRIDE + 8 + points[at] = points[at] * scale + shift + } + if (strips.size < (stripCount + 1) * 2) strips = strips.copyOf(strips.size * 2) + strips[stripCount * 2] = stripStart + strips[stripCount * 2 + 1] = length + stripCount++ + } + + fun build(material: VfxMaterialSpec, uniforms: VfxUniformValues?, repeat: Boolean): VfxRibbonDraw? { + if (stripCount == 0) return null + return VfxRibbonDraw( + material = material, + uniforms = uniforms, + points = points.copyOf(count * VfxRibbonDraw.STRIDE), + strips = strips.copyOf(stripCount * 2), + stripCount = stripCount, + repeat = repeat, + ) + } +} + +/** What a trail and a beam share: width and tint read along their length, and the material. */ +abstract class VfxRibbonNode(spec: VfxSurfaceSpec, protected val node: VfxNodeRuntime) : VfxNodeBehavior { + private val uniforms = spec.material.shader?.let { shader -> + VfxUniformBinding(shader, spec.material.uniforms, spec.material.samplers, node) + } + + protected val tint: VfxColorSampler = VfxSamplers.color( + spec.tint, + node.expressions, + salt = VfxProperty.TINT.hashCode(), + drive = node.drive(VfxProperty.TINT), + ) + + /** The inputs of the point being read; `p.progress` is how far along the ribbon it is. */ + protected val pointContext = VfxEvalContext() + protected val color = MutableColor(1f, 1f, 1f, 1f) + internal val builder = VfxRibbonBuilder() + + protected fun scalar(property: VfxProperty, value: VfxValue, default: Float): VfxFloatSampler = + VfxSamplers.driven( + VfxSamplers.scalar(value, node.expressions, default, VfxRangeMode.PER_PARTICLE, property.hashCode()), + node.drive(property), + ) + + protected fun uniforms(): VfxUniformValues? = uniforms?.evaluate(node.context) + + /** How much [matrix] scales lengths, for widths given in the space of the ribbon. */ + protected fun scaleOf(matrix: Matrix4f): Float = + sqrt(matrix.m00() * matrix.m00() + matrix.m01() * matrix.m01() + matrix.m02() * matrix.m02()) +} + +/** + * The trail of the node itself, or of every particle of the emitter it sits under. + */ +class VfxTrailRenderer(private val spec: VfxTrailSpec, node: VfxNodeRuntime) : VfxRibbonNode(spec, node) { + private val source = node.particleSource + private val maxPoints = spec.maxPoints.coerceIn(2, MAX_POINTS) + private val lifetime = spec.lifetime.coerceAtLeast(MIN_LIFETIME) + private val minDistanceSquared = spec.minDistance * spec.minDistance + private val width = scalar(VfxProperty.WIDTH, spec.width, 0.2f) + + private val own = FloatArray(maxPoints * 4) + private var ownCount = 0 + + private val points: FloatArray? = source?.particles?.channel("trail:${spec.id}:points", maxPoints * 4) + + /** Per particle: how many points, and the index and random of the particle they were taken for. */ + private val meta: FloatArray? = source?.particles?.channel("trail:${spec.id}:meta", 3) + + private val head = MutableVec3f() + private val scratch = Matrix4f() + + override val isIdle: Boolean get() = source != null || ownCount == 0 + + override fun restart() { + ownCount = 0 + } + + override fun stop(immediate: Boolean) { + if (immediate) ownCount = 0 + } + + override fun update(dt: Float) { + val emitter = source + if (emitter == null) { + ownCount = age(own, 0, ownCount, dt) + if (node.isActive) { + val offset = node.instance.originMinusAnchor + val position = node.frame.position + ownCount = record(own, 0, ownCount, position.x + offset.x, position.y + offset.y, position.z + offset.z) + } + return + } + + val particles = emitter.particles + val points = points ?: return + val meta = meta ?: return + for (slot in 0 until particles.count) { + val at = slot * 3 + if (meta[at + 1] != particles.index[slot] || meta[at + 2] != particles.random[slot]) { + meta[at] = 0f + meta[at + 1] = particles.index[slot] + meta[at + 2] = particles.random[slot] + } + val base = slot * maxPoints * 4 + var count = age(points, base, meta[at].toInt(), dt) + val x = particles.positionX[slot] + val y = particles.positionY[slot] + val z = particles.positionZ[slot] + count = record(points, base, count, x, y, z) + meta[at] = count.toFloat() + } + } + + /** Ages every point and drops the ones past their lifetime; returns how many are left. */ + private fun age(data: FloatArray, base: Int, count: Int, dt: Float): Int { + for (index in 0 until count) data[base + index * 4 + 3] += dt + var left = count + while (left > 0 && data[base + (left - 1) * 4 + 3] > lifetime) left-- + return left + } + + /** Takes the head as a new point once it has moved far enough from the newest one. */ + private fun record(data: FloatArray, base: Int, count: Int, x: Float, y: Float, z: Float): Int { + if (count > 0) { + val dx = x - data[base] + val dy = y - data[base + 1] + val dz = z - data[base + 2] + if (dx * dx + dy * dy + dz * dz < minDistanceSquared) return count + } + val kept = count.coerceAtMost(maxPoints - 1) + System.arraycopy(data, base, data, base + 4, kept * 4) + data[base] = x + data[base + 1] = y + data[base + 2] = z + data[base + 3] = 0f + return kept + 1 + } + + override fun collect(into: VfxDrawList, placement: Matrix4f) { + if (!node.isActive) return + builder.begin() + + val emitter = source + if (emitter == null) { + val offset = node.instance.originMinusAnchor + val matrix = scratch.set(placement).translate(-offset.x, -offset.y, -offset.z) + val position = node.frame.position + head.set(position.x + offset.x, position.y + offset.y, position.z + offset.z) + pointContext.copyInputs(node.context) + strip(matrix, own, 0, ownCount, 1f, 1f, 1f, 1f, node.instance.lightAt(position)) + } else { + val particles = emitter.particles + val points = points ?: return + val meta = meta ?: return + val matrix = scratch.set(placement).mul(emitter.simToRender.asMatrix4f()) + for (slot in 0 until particles.count) { + head.set(particles.positionX[slot], particles.positionY[slot], particles.positionZ[slot]) + emitter.fillParticleContext(slot) + pointContext.copyInputs(emitter.context) + strip( + matrix, points, slot * maxPoints * 4, meta[slot * 3].toInt(), + particles.colorR[slot], particles.colorG[slot], particles.colorB[slot], particles.colorA[slot], + particles.light[slot], + ) + } + } + + builder.build(spec.material, uniforms(), repeat = spec.uvMode == VfxRibbonUv.TILE)?.let(into.ribbons::add) + } + + private fun strip( + matrix: Matrix4f, + data: FloatArray, + base: Int, + count: Int, + red: Float, + green: Float, + blue: Float, + alpha: Float, + light: Int, + ) { + val scale = scaleOf(matrix) + builder.startStrip() + addPoint(matrix, head.x, head.y, head.z, 0f, 0f, scale, red, green, blue, alpha, light) + + var along = 0f + var previousX = head.x + var previousY = head.y + var previousZ = head.z + for (index in 0 until count) { + val at = base + index * 4 + val dx = data[at] - previousX + val dy = data[at + 1] - previousY + val dz = data[at + 2] - previousZ + val step = sqrt(dx * dx + dy * dy + dz * dz) + if (step < 1.0e-5f) continue + along += step + addPoint( + matrix, data[at], data[at + 1], data[at + 2], data[at + 3], along, scale, + red, green, blue, alpha, light, + ) + previousX = data[at] + previousY = data[at + 1] + previousZ = data[at + 2] + } + + when (spec.uvMode) { + VfxRibbonUv.STRETCH -> builder.endStrip(if (along > 0f) 1f / along else 0f) + VfxRibbonUv.TILE -> builder.endStrip(1f / spec.tileLength.coerceAtLeast(MIN_TILE)) + } + } + + private fun addPoint( + matrix: Matrix4f, + x: Float, + y: Float, + z: Float, + age: Float, + along: Float, + scale: Float, + red: Float, + green: Float, + blue: Float, + alpha: Float, + light: Int, + ) { + pointContext.progress = (age / lifetime).coerceIn(0f, 1f) + val halfWidth = width.eval(pointContext) * scale * 0.5f + tint.eval(pointContext, color) + color.set(color.r * red, color.g * green, color.b * blue, color.a * alpha) + builder.point( + matrix.m00() * x + matrix.m10() * y + matrix.m20() * z + matrix.m30(), + matrix.m01() * x + matrix.m11() * y + matrix.m21() * z + matrix.m31(), + matrix.m02() * x + matrix.m12() * y + matrix.m22() * z + matrix.m32(), + halfWidth, color, along, light, + ) + } + + private companion object { + const val MAX_POINTS = 256 + const val MIN_LIFETIME = 0.01f + const val MIN_TILE = 0.01f + } +} + +/** + * A ribbon from the node to its target, bent sideways by noise that leaves both ends in place. + */ +class VfxBeamRenderer(private val spec: VfxBeamSpec, node: VfxNodeRuntime) : VfxRibbonNode(spec, node) { + private val width = scalar(VfxProperty.WIDTH, spec.width, 0.15f) + private val noise = scalar(VfxProperty.BEAM_NOISE, spec.noise, 0f) + private val end: VfxVec3Sampler = VfxSamplers.vec3( + VfxVec3Value.of(spec.end.x, spec.end.y, spec.end.z), + node.expressions, + drive = node.drive(VfxProperty.BEAM_END), + ) + + private val target: VfxNodeRuntime? by lazy { spec.target.takeIf { it.isNotBlank() }?.let(node.instance::node) } + + private val start = MutableVec3f() + private val finish = MutableVec3f() + private val scratch = MutableVec3f() + private val side = MutableVec3f() + private val lift = MutableVec3f() + + override fun collect(into: VfxDrawList, placement: Matrix4f) { + if (!node.isActive) return + + start.set(node.frame.position) + val targetNode = target + if (targetNode != null) { + finish.set(targetNode.frame.position) + } else { + end.eval(node.context, scratch) + node.frame.transformPoint(Vec3f(scratch.x, scratch.y, scratch.z), finish) + } + + val dx = finish.x - start.x + val dy = finish.y - start.y + val dz = finish.z - start.z + val length = sqrt(dx * dx + dy * dy + dz * dz) + if (length < 1.0e-4f) return + perpendiculars(dx / length, dy / length, dz / length) + + pointContext.copyInputs(node.context) + val amplitude = noise.eval(node.context) + val segments = spec.segments.coerceIn(1, MAX_SEGMENTS) + val time = node.instance.time + val light = node.instance.lightAt(node.frame.position) + val scale = scaleOf(placement) + + builder.begin() + builder.startStrip() + for (index in 0..segments) { + val t = index.toFloat() / segments + var x = start.x + dx * t + var y = start.y + dy * t + var z = start.z + dz * t + if (amplitude != 0f) { + val envelope = sin(PI.toFloat() * t) * amplitude + val phase = t * length * spec.noiseFrequency + val wave = time * spec.noiseSpeed + val sideways = VfxNoise.sample(phase, wave, 0f, node.seed) * envelope + val upward = VfxNoise.sample(phase, wave, 0f, node.seed + 1) * envelope + x += side.x * sideways + lift.x * upward + y += side.y * sideways + lift.y * upward + z += side.z * sideways + lift.z * upward + } + + pointContext.progress = t + tint.eval(pointContext, color) + builder.point( + placement.m00() * x + placement.m10() * y + placement.m20() * z + placement.m30(), + placement.m01() * x + placement.m11() * y + placement.m21() * z + placement.m31(), + placement.m02() * x + placement.m12() * y + placement.m22() * z + placement.m32(), + width.eval(pointContext) * scale * 0.5f, + color, + t, + light, + ) + } + + val tiles = when (spec.uvMode) { + VfxRibbonUv.STRETCH -> 1f + VfxRibbonUv.TILE -> length / spec.tileLength.coerceAtLeast(0.01f) + } + builder.endStrip(tiles, -time * spec.uvScroll) + + val repeat = spec.uvMode == VfxRibbonUv.TILE || spec.uvScroll != 0f + builder.build(spec.material, uniforms(), repeat)?.let(into.ribbons::add) + } + + /** Two directions across the beam, for the noise to push along: off world up, or off X when the beam is upright. */ + private fun perpendiculars(x: Float, y: Float, z: Float) { + val upright = abs(y) > 0.95f + val upX = if (upright) 1f else 0f + val upY = if (upright) 0f else 1f + side.set(-z * upY, z * upX, x * upY - y * upX).norm() + lift.set(y * side.z - z * side.y, z * side.x - x * side.z, x * side.y - y * side.x) + } + + private companion object { + const val MAX_SEGMENTS = 256 + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt new file mode 100644 index 000000000..14220e6ed --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt @@ -0,0 +1,110 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.pipeline.RenderTarget +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.Tesselator +import com.mojang.blaze3d.vertex.VertexFormat +import org.joml.Matrix4f +import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeBehavior +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime +import ru.hollowhorizon.hollowengine.client.vfx.VfxNoise +import ru.hollowhorizon.hollowengine.client.vfx.VfxRangeMode +import ru.hollowhorizon.hollowengine.client.vfx.VfxSamplers +import ru.hollowhorizon.hollowengine.common.vfx.VfxCameraShakeSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPostEffectSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty + +/** Hands the frame its full-screen pass while the node is on. */ +class VfxPostEffectNode(private val spec: VfxPostEffectSpec, private val node: VfxNodeRuntime) : VfxNodeBehavior { + private val uniforms = VfxUniformBinding(spec.shader, spec.uniforms, spec.samplers, node) + + override fun collect(into: VfxDrawList, placement: Matrix4f) { + if (!node.isActive || spec.shader.isBlank()) return + into.posts += VfxPostDraw(spec.shader, uniforms.evaluate(node.context)) + } +} + +/** + * Adds its swing to the camera shake of the frame. The swing follows smooth noise, one channel per + * axis, so it never repeats and never jumps. + */ +class VfxCameraShake(private val spec: VfxCameraShakeSpec, private val node: VfxNodeRuntime) : VfxNodeBehavior { + private val strength = VfxSamplers.driven( + VfxSamplers.scalar(spec.strength, node.expressions, 1f, VfxRangeMode.PER_PARTICLE), + node.drive(VfxProperty.SHAKE_STRENGTH), + ) + private val frequency = VfxSamplers.driven( + VfxSamplers.scalar(spec.frequency, node.expressions, 14f, VfxRangeMode.PER_PARTICLE), + node.drive(VfxProperty.SHAKE_FREQUENCY), + ) + + /** How far through the noise the shake has run; frequency changes speed it up, never jump it. */ + private var phase = 0f + + override fun update(dt: Float) { + if (dt > 0f) phase += frequency.eval(node.context).coerceAtLeast(0f) * dt + } + + override fun restart() { + phase = 0f + } + + override fun collect(into: VfxDrawList, placement: Matrix4f) { + if (!node.isActive) return + val scale = strength.eval(node.context).coerceAtLeast(0f) + if (scale == 0f) return + val amplitude = spec.amplitude + into.shake[0] += VfxNoise.sample(phase, 0f, 0f, node.seed) * amplitude.x * scale + into.shake[1] += VfxNoise.sample(phase, AXIS_OFFSET, 0f, node.seed) * amplitude.y * scale + into.shake[2] += VfxNoise.sample(phase, AXIS_OFFSET * 2f, 0f, node.seed) * amplitude.z * scale + } + + private companion object { + /** Far enough apart in the noise that the axes do not move together. */ + const val AXIS_OFFSET = 37.3f + } +} + +/** + * Draws the full-screen passes of the frame, each over the result of the one before it. + */ +object VfxPostProcessor { + fun apply(posts: List, target: RenderTarget) { + if (posts.isEmpty()) return + + RenderSystem.disableDepthTest() + RenderSystem.depthMask(false) + RenderSystem.disableBlend() + RenderSystem.disableCull() + try { + posts.forEach { post -> + val shader = VfxShaders.get(post.shader, DefaultVertexFormat.POSITION_TEX) ?: return@forEach + VfxSceneTextures.capture(target) + + val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) + builder.addVertex(-1f, -1f, 0f).setUv(0f, 0f) + builder.addVertex(1f, -1f, 0f).setUv(1f, 0f) + builder.addVertex(1f, 1f, 0f).setUv(1f, 1f) + builder.addVertex(-1f, 1f, 0f).setUv(0f, 1f) + val mesh = builder.build() ?: return@forEach + + SCREEN.drawImmediate(mesh, shader) { bound -> + VfxSceneTextures.bind(bound) + bound.safeGetUniform("ScreenSize").set(target.width.toFloat(), target.height.toFloat()) + post.uniforms.apply(bound) + } + } + } finally { + RenderSystem.enableDepthTest() + RenderSystem.depthMask(true) + RenderSystem.enableBlend() + RenderSystem.defaultBlendFunc() + RenderSystem.enableCull() + } + } + + /** Identity matrices: the quad is already in clip space. */ + private val SCREEN = VfxView(Matrix4f(), Matrix4f(), Vector3f(1f, 0f, 0f), Vector3f(0f, 1f, 0f), Vector3f()) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt new file mode 100644 index 000000000..4670366f1 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt @@ -0,0 +1,102 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.google.gson.JsonObject +import com.google.gson.JsonParser +import net.minecraft.client.Minecraft +import net.minecraft.resources.ResourceLocation +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.common.vfx.VfxColorValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxRgba +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value + +/** A uniform as a shader json declares it. */ +class VfxShaderUniform(val name: String, val type: String, val count: Int, val defaults: FloatArray) { + val isInt: Boolean get() = type.startsWith("int") + + /** The authored value the json default stands for: a number, a vector up to three, a color of four. */ + fun defaultValue(): VfxUniformValue = when { + count >= 4 -> VfxUniformValue.Color(VfxColorValue.Solid(VfxRgba(at(0), at(1), at(2), at(3)))) + count >= 2 -> VfxUniformValue.Vector(VfxVec3Value.of(at(0), at(1), at(2))) + else -> VfxUniformValue.Scalar(VfxValue.of(at(0))) + } + + /** Whether [value] has the shape this uniform takes. */ + fun accepts(value: VfxUniformValue): Boolean = value.kind == defaultValue().kind + + private fun at(index: Int) = defaults.getOrElse(index) { 0f } +} + +/** + * What a core shader json declares, minus what the engine fills in itself: the uniforms and the + * samplers an effect author gives values to. + */ +class VfxShaderDeclaration(val uniforms: List, val samplers: List) { + fun uniform(name: String): VfxShaderUniform? = uniforms.firstOrNull { it.name == name } + + /** + * The uniforms of [authored] brought in line with this shader: one per declared uniform, the + * authored value where it has the right shape and the json default everywhere else. + */ + fun align(authored: List): List = uniforms.map { uniform -> + val kept = authored.firstOrNull { it.name == uniform.name && uniform.accepts(it.value) } + kept ?: VfxUniformSpec(uniform.name, uniform.defaultValue()) + } + + companion object { + /** Set by the render system or by the effect renderers for every draw. */ + private val ENGINE_UNIFORMS = setOf( + "ModelViewMat", "ProjMat", "IViewRotMat", "TextureMat", "ColorModulator", "Light0_Direction", + "Light1_Direction", "FogStart", "FogEnd", "FogColor", "FogShape", "LineWidth", "GameTime", + "ScreenSize", "GlintAlpha", "ChunkOffset", "Shaded", "BlendMode", + ) + + /** The material texture, the light map and the scene copies. */ + private val ENGINE_SAMPLERS = setOf("Sampler0", "Sampler1", "Sampler2", "SceneColor", "SceneDepth") + + fun parse(json: JsonObject): VfxShaderDeclaration { + val uniforms = json.getAsJsonArray("uniforms")?.mapNotNull { element -> + val uniform = element.asJsonObject + val name = uniform.get("name")?.asString ?: return@mapNotNull null + val type = uniform.get("type")?.asString ?: "float" + if (name in ENGINE_UNIFORMS || type.startsWith("matrix")) return@mapNotNull null + val values = uniform.getAsJsonArray("values")?.map { it.asFloat }?.toFloatArray() ?: FloatArray(0) + VfxShaderUniform(name, type, uniform.get("count")?.asInt ?: values.size.coerceAtLeast(1), values) + }.orEmpty() + val samplers = json.getAsJsonArray("samplers")?.mapNotNull { element -> + element.asJsonObject.get("name")?.asString?.takeIf { it !in ENGINE_SAMPLERS } + }.orEmpty() + return VfxShaderDeclaration(uniforms, samplers) + } + } +} + +/** + * The declarations of the shaders effects name, read from their json once. The editor lays out its + * fields from them, and a draw resets what it does not set to the json defaults, so one node never + * inherits the uniforms another node left in the same shader. + */ +object VfxShaderDeclarations { + private val read = HashMap() + + /** The declaration of `namespace:path`, or null when there is no such shader json. */ + @Synchronized + fun of(location: String): VfxShaderDeclaration? = read.getOrPut(location) { load(location) } + + @Synchronized + fun clear() = read.clear() + + private fun load(location: String): VfxShaderDeclaration? { + val id = ResourceLocation.tryParse(location) ?: return null + val file = ResourceLocation.fromNamespaceAndPath(id.namespace, "shaders/core/${id.path}.json") + val resource = Minecraft.getInstance().resourceManager.getResource(file).orElse(null) ?: return null + return try { + resource.openAsReader().use { VfxShaderDeclaration.parse(JsonParser.parseReader(it).asJsonObject) } + } catch (e: Exception) { + HollowEngine.LOGGER.warn("Could not read the effect shader {}: {}", location, e.message) + null + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt new file mode 100644 index 000000000..54e570c28 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt @@ -0,0 +1,127 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import org.joml.Matrix4f +import ru.hollowhorizon.hollowengine.client.models.internal.v2.ModelAttachment +import ru.hollowhorizon.hollowengine.client.utils.math.asMatrix4f +import ru.hollowhorizon.hollowengine.client.vfx.VfxColorSampler +import ru.hollowhorizon.hollowengine.client.vfx.VfxEmitter +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeBehavior +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticles +import ru.hollowhorizon.hollowengine.client.vfx.VfxSamplers +import ru.hollowhorizon.hollowengine.common.utils.MutableColor +import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f +import ru.hollowhorizon.hollowengine.common.vfx.VfxColorValue +import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxModelSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPlaneSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxSurfaceSpec + +/** + * What every renderer node shares: the particles it draws, and its tint. + * + * Under an emitter those are the emitter's particles. Anywhere else the node draws one particle of + * its own, a unit one at its origin, so the same draw path covers both. + */ +abstract class VfxRendererNode(protected val node: VfxNodeRuntime, tint: VfxColorValue) : VfxNodeBehavior { + /** The emitter whose particles this node draws, or null when it draws itself. */ + protected val source: VfxEmitter? = node.particleSource + + private val own: VfxParticles? = if (source == null) VfxParticles(1).also(::placeOwnParticle) else null + + private val tintSampler: VfxColorSampler = VfxSamplers.color( + tint, + node.expressions, + salt = VfxProperty.TINT.hashCode(), + drive = node.drive(VfxProperty.TINT), + ) + private val tintScratch = MutableColor(1f, 1f, 1f, 1f) + private val frameMatrix = MutableMat4f() + + /** What this node draws this frame, or null when it draws nothing. */ + protected fun batch(placement: Matrix4f): VfxParticleBatch? { + if (!node.isActive) return null + + tintSampler.eval(node.context, tintScratch) + val tint = floatArrayOf(tintScratch.r, tintScratch.g, tintScratch.b, tintScratch.a) + + val emitter = source + if (emitter != null) { + if (emitter.particles.count == 0) return null + val local = node.transform + return VfxParticleBatch( + particles = emitter.particles, + matrix = Matrix4f(placement).mul(emitter.simToRender.asMatrix4f()), + uvColumns = emitter.uvColumns, + uvRows = emitter.uvRows, + offset = local.position, + spin = local.rotation, + sizeScale = local.scale, + tint = tint, + ) + } + + val particles = own ?: return null + particles.light[0] = node.instance.lightAt(node.frame.position) + return VfxParticleBatch( + particles = particles, + matrix = Matrix4f(placement).mul(node.frame.toMatrix(frameMatrix).asMatrix4f()), + tint = tint, + ) + } + + private fun placeOwnParticle(particles: VfxParticles) { + particles.allocate() + particles.sizeX[0] = 1f + particles.sizeY[0] = 1f + particles.sizeZ[0] = 1f + particles.colorR[0] = 1f + particles.colorG[0] = 1f + particles.colorB[0] = 1f + particles.colorA[0] = 1f + particles.lifetime[0] = 1f + } +} + +/** A renderer node drawn with a material, and the uniforms that material's shader takes. */ +abstract class VfxSurfaceNode(spec: VfxSurfaceSpec, node: VfxNodeRuntime) : VfxRendererNode(node, spec.tint) { + private val uniforms = spec.material.shader?.let { shader -> + VfxUniformBinding(shader, spec.material.uniforms, spec.material.samplers, node) + } + + protected fun uniforms(): VfxUniformValues? = uniforms?.evaluate(node.context) +} + +class VfxPlaneNode(private val spec: VfxPlaneSpec, node: VfxNodeRuntime) : VfxSurfaceNode(spec, node) { + override fun collect(into: VfxDrawList, placement: Matrix4f) { + val batch = batch(placement) ?: return + into.quads += VfxQuadDraw(spec, batch, uniforms()) + } +} + +class VfxMeshNode(private val spec: VfxMeshSpec, node: VfxNodeRuntime) : VfxSurfaceNode(spec, node) { + private val primitive = spec.primitive + + override fun collect(into: VfxDrawList, placement: Matrix4f) { + val batch = batch(placement) ?: return + into.meshes += VfxMeshDraw(spec, primitive, batch, uniforms()) + } +} + +/** + * A model drawn through the model renderer. Each particle is submitted as one instance of the model, + * so the model renderer batches them the way it batches entities. + */ +class VfxModelNode(private val spec: VfxModelSpec, node: VfxNodeRuntime) : VfxRendererNode(node, VfxColorValue.WHITE) { + /** Loaded the first time it is actually drawn. */ + private val model: ModelAttachment? by lazy { + spec.model.takeIf { it.isNotBlank() }?.let { ModelAttachment(it) } + } + + override fun collect(into: VfxDrawList, placement: Matrix4f) { + val batch = batch(placement) ?: return + val attachment = model ?: return + into.models += VfxModelDraw(spec, attachment, batch) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt new file mode 100644 index 000000000..a71675df3 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt @@ -0,0 +1,129 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.ShaderInstance +import ru.hollowhorizon.hollowengine.client.vfx.VfxColorSampler +import ru.hollowhorizon.hollowengine.client.vfx.VfxEvalContext +import ru.hollowhorizon.hollowengine.client.vfx.VfxFloatSampler +import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime +import ru.hollowhorizon.hollowengine.client.vfx.VfxRangeMode +import ru.hollowhorizon.hollowengine.client.vfx.VfxSamplers +import ru.hollowhorizon.hollowengine.client.vfx.VfxVec3Sampler +import ru.hollowhorizon.hollowengine.common.utils.MutableColor +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.rl +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxSamplerSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformValue + +/** + * The uniforms and textures one draw hands its shader, evaluated for this frame. + */ +class VfxUniformValues( + private val shader: String, + private val names: Array, + private val values: FloatArray, + private val samplers: List, +) { + /** + * Sets every uniform the shader declares for the author: to what this draw evaluated, or to the + * json default, since the shader still holds whatever the previous draw with it left there. + */ + fun apply(program: ShaderInstance) { + val declaration = VfxShaderDeclarations.of(shader) + declaration?.uniforms?.forEach { uniform -> + val index = names.indexOf(uniform.name) + if (index >= 0) { + set(program, uniform.name, uniform.isInt, index * 4, values) + } else { + set(program, uniform.name, uniform.isInt, 0, uniform.defaults.copyOf(4)) + } + } + names.forEachIndexed { index, name -> + if (declaration?.uniform(name) == null) set(program, name, false, index * 4, values) + } + + val textures = Minecraft.getInstance().textureManager + samplers.forEach { sampler -> + if (sampler.name.isBlank() || sampler.texture.isBlank()) return@forEach + program.setSampler(sampler.name, textures.getTexture(sampler.texture.rl).id) + } + } + + private fun set(program: ShaderInstance, name: String, whole: Boolean, at: Int, from: FloatArray) { + val uniform = program.safeGetUniform(name) + if (whole) { + uniform.setSafe(from[at].toInt(), from[at + 1].toInt(), from[at + 2].toInt(), from[at + 3].toInt()) + } else { + uniform.setSafe(from[at], from[at + 1], from[at + 2], from[at + 3]) + } + } +} + +/** + * Reads what the author wrote into the uniforms of [shader], with the timeline over it, once per + * frame for the node that owns them. + */ +class VfxUniformBinding( + private val shader: String, + uniforms: List, + private val samplers: List, + node: VfxNodeRuntime, +) { + private val names: Array = uniforms.map { it.name }.filter { it.isNotBlank() }.toTypedArray() + + /** Writes one uniform, four floats at [at], for the frame [context] describes. */ + private fun interface Reader { + fun read(context: VfxEvalContext, into: FloatArray, at: Int) + } + + private val readers: List = uniforms.filter { it.name.isNotBlank() }.map { uniform -> reader(uniform, node) } + + fun evaluate(context: VfxEvalContext): VfxUniformValues { + val values = FloatArray(names.size * 4) + readers.forEachIndexed { index, reader -> reader.read(context, values, index * 4) } + return VfxUniformValues(shader, names, values, samplers) + } + + private fun reader(uniform: VfxUniformSpec, node: VfxNodeRuntime): Reader { + val property = VfxProperty.uniform(uniform.name) + val drive = node.drive(property) + val salt = property.hashCode() + val expressions = node.expressions + return when (val value = uniform.value) { + is VfxUniformValue.Scalar -> scalarReader( + VfxSamplers.driven(VfxSamplers.scalar(value.value, expressions, 0f, VfxRangeMode.PER_PARTICLE, salt), drive) + ) + + is VfxUniformValue.Vector -> vectorReader( + VfxSamplers.vec3(value.value, expressions, 0f, VfxRangeMode.PER_PARTICLE, salt, drive) + ) + + is VfxUniformValue.Color -> colorReader(VfxSamplers.color(value.value, expressions, salt, drive)) + } + } + + private fun scalarReader(sampler: VfxFloatSampler) = Reader { context, into, at -> into[at] = sampler.eval(context) } + + private fun vectorReader(sampler: VfxVec3Sampler): Reader { + val scratch = MutableVec3f() + return Reader { context, into, at -> + sampler.eval(context, scratch) + into[at] = scratch.x + into[at + 1] = scratch.y + into[at + 2] = scratch.z + } + } + + private fun colorReader(sampler: VfxColorSampler): Reader { + val scratch = MutableColor(1f, 1f, 1f, 1f) + return Reader { context, into, at -> + sampler.eval(context, scratch) + into[at] = scratch.r + into[at + 1] = scratch.g + into[at + 2] = scratch.b + into[at + 3] = scratch.a + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt index ddd807ded..02ed022eb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxWorldRenderer.kt @@ -3,6 +3,9 @@ package ru.hollowhorizon.hollowengine.client.vfx.render import com.mojang.blaze3d.systems.RenderSystem import net.minecraft.client.Minecraft import org.joml.Matrix4f +import org.lwjgl.opengl.GL33 +import ru.hollowhorizon.hollowengine.client.render.CameraSetupEvent +import ru.hollowhorizon.hollowengine.client.utils.shouldOverrideShaders import ru.hollowhorizon.hollowengine.client.vfx.VfxBoneBindings import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance import ru.hollowhorizon.hollowengine.client.vfx.VfxScenes @@ -16,40 +19,78 @@ import ru.hollowhorizon.hollowengine.common.events.client.render.RenderStage */ @ClientOnly object VfxWorldRenderer { - private val quads = ArrayList() + private val frame = VfxDrawList() + private val shake = FloatArray(3) + + /** The view of the frame, while its surfaces wait for the shader pack to finish. */ + private var deferred: VfxView? = null @SubscribeEvent fun onRenderLevel(event: RenderLevelStageEvent) { - if (event.stage != RenderStage.AFTER_PARTICLES) return + if (event.stage == RenderStage.AFTER_WEATHER) drawEffects(event) + } + + /** Before the overlays of the level, so that a gizmo or a selection outline stays readable. */ + @SubscribeEvent(10) + fun onLevelDone(event: RenderLevelStageEvent) { + if (event.stage != RenderStage.AFTER_LEVEL || deferred != null || frame.posts.isEmpty()) return + VfxPostProcessor.apply(frame.posts, Minecraft.getInstance().mainRenderTarget) + frame.posts.clear() + } + /** The shader pack has written its final image; the surfaces that waited for it go on top. */ + fun onShaderPackFrameFinished() { + val view = deferred ?: return + deferred = null + + val main = Minecraft.getInstance().mainRenderTarget + main.bindWrite(true) + VfxFrameRenderer.renderSurfaces(frame, view, main) + VfxPostProcessor.apply(frame.posts, main) + frame.posts.clear() + } + + @SubscribeEvent + fun onCameraSetup(event: CameraSetupEvent) { + event.pitch += shake[0] + event.yaw += shake[1] + event.roll += shake[2] + } + + private fun drawEffects(event: RenderLevelStageEvent) { val camera = event.camera.position val scene = VfxScenes.current() val bones = VfxBoneBindings.drain(camera) - if (scene == null && bones.isEmpty()) return + frame.clear() + deferred = null + if (scene == null && bones.isEmpty()) { + shake.fill(0f) + return + } - scene?.update() + scene?.update(camera) val levelPose = event.poseStack.last().pose() - quads.clear() - scene?.forEachInstance { instance, _ -> - val placement = placeInWorld(instance, levelPose, camera.x, camera.y, camera.z) - VfxDrawCollector.collectQuads(instance, placement, quads) - VfxDrawCollector.renderMeshes(instance, placement) + instance.collect(frame, placeInWorld(instance, levelPose, camera.x, camera.y, camera.z)) } - bones.forEach { binding -> - VfxDrawCollector.collectQuads(binding.instance, binding.placement, quads) - VfxDrawCollector.renderMeshes(binding.instance, binding.placement) - } - - Minecraft.getInstance().renderBuffers().bufferSource().endBatch() - if (quads.isEmpty()) return + bones.forEach { binding -> binding.instance.collect(frame, binding.placement) } + frame.shake.copyInto(shake) + if (frame.isEmpty) return - VfxQuadRenderer.render( - draws = quads, - view = VfxView.ofCamera(event.camera, RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix()), - ) - quads.clear() + val view = VfxView.ofCamera(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix()) + val main = Minecraft.getInstance().mainRenderTarget + val depthWrite = GL33.glGetBoolean(GL33.GL_DEPTH_WRITEMASK) + try { + if (shouldOverrideShaders()) { + VfxFrameRenderer.renderModels(frame.models) + deferred = view + } else { + VfxFrameRenderer.render(frame, view, main) + } + } finally { + RenderSystem.depthMask(depthWrite) + } } private fun placeInWorld( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt index f44994caa..fbe9151e5 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/registry/ModShaders.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.common.registry import com.mojang.blaze3d.vertex.DefaultVertexFormat import net.minecraft.client.renderer.ShaderInstance import ru.hollowhorizon.hollowengine.HollowEngine.MODID +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxMeshRenderer import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadRenderer import ru.hollowhorizon.hollowengine.common.events.ClientOnly import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent @@ -14,6 +15,8 @@ object ModShaders { lateinit var GLTF_ENTITY: ShaderInstance lateinit var GLTF_ENTITY_INSTANCED: ShaderInstance var VFX_PARTICLE: ShaderInstance? = null + var VFX_MESH: ShaderInstance? = null + var VFX_RIBBON: ShaderInstance? = null var UI_EFFECT: ShaderInstance? = null var UI_IMAGE_SHADOW: ShaderInstance? = null var MSDF_TEXT: ShaderInstance? = null @@ -39,6 +42,16 @@ object ModShaders { VFX_PARTICLE = it VfxQuadRenderer.invalidate() } + event.register( + "$MODID:vfx_mesh".rl, + DefaultVertexFormat.POSITION_TEX + ) { + VFX_MESH = it + VfxMeshRenderer.invalidate() + } + event.register("$MODID:vfx_ribbon".rl, DefaultVertexFormat.PARTICLE) { + VFX_RIBBON = it + } event.register( "$MODID:ui_effect".rl, DefaultVertexFormat.POSITION_TEX_COLOR diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt index d21443d86..eb498af93 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt @@ -14,6 +14,9 @@ data class VfxEffect( fun node(id: String): VfxNodeSpec? = walk().firstOrNull { it.id == id } + /** The node [id] sits under, or null for a root node or an unknown id. */ + fun parentOf(id: String): VfxNodeSpec? = walk().firstOrNull { parent -> parent.children.any { it.id == id } } + /** Every expression in the file, so they compile as one unit. */ fun expressions(): List = walk().flatMap { it.expressions() }.filter { it.isNotBlank() }.distinct() @@ -81,8 +84,7 @@ data class VfxTrackCurve( @Serializable data class VfxTrack( val node: String = "", - /** An id from [VfxAnimatables]. */ - val property: String = "", + val property: VfxProperty = VfxProperty.ENABLED, val curves: List = emptyList(), ) @@ -92,142 +94,8 @@ data class VfxTimelineSpec( val loop: Boolean = true, val tracks: List = emptyList(), ) { - fun track(node: String, property: String): VfxTrack? = + fun track(node: String, property: VfxProperty): VfxTrack? = tracks.firstOrNull { it.node == node && it.property == property } val isEmpty: Boolean get() = tracks.isEmpty() } - -/** What a timeline track can drive. */ -enum class VfxAnimatableKind(val channels: Int) { - /** On or off, held between keys instead of interpolated. */ - TOGGLE(1), FLOAT(1), VEC3(3), ROTATION(3), COLOR(4), -} - -/** - * One property a timeline may animate, and how to read its authored value as the starting point. - */ -class VfxAnimatable( - val id: String, - val titleKey: String, - val kind: VfxAnimatableKind, - val appliesTo: (VfxNodeSpec) -> Boolean, - val ownerTitleKey: String? = null, - val read: (VfxNodeSpec) -> FloatArray, -) - -/** - * The properties, that timeline can animate. - */ -object VfxAnimatables { - const val ENABLED = "enabled" - const val POSITION = "transform.position" - const val ROTATION = "transform.rotation" - const val SCALE = "transform.scale" - const val RATE = "emission.rate" - const val SHAPE_RADIUS = "shape.radius" - const val SHAPE_EXTENTS = "shape.extents" - const val SHAPE_ANGLE = "shape.angle" - const val SHAPE_THICKNESS = "shape.thickness" - const val LIFETIME = "spawn.lifetime" - const val SPEED = "spawn.speed" - const val OFFSET = "spawn.offset" - const val INHERIT_VELOCITY = "spawn.inherit_velocity" - const val SIZE = "appearance.size" - const val SPIN = "appearance.rotation" - const val COLOR = "appearance.color" - const val GRAVITY = "motion.gravity" - const val DRAG = "motion.drag" - - private const val MODULE_PREFIX = "modules." - - fun moduleProperty(moduleId: String, field: String): String = "$MODULE_PREFIX$moduleId.$field" - - private val common: List = listOf( - VfxAnimatable(ENABLED, key("property_enabled"), VfxAnimatableKind.TOGGLE, { true }) { - floatArrayOf(if (it.enabled) 1f else 0f) - }, - VfxAnimatable(POSITION, key("property_position"), VfxAnimatableKind.VEC3, { true }) { node -> - node.transform.position.let { floatArrayOf(it.x, it.y, it.z) } - }, - VfxAnimatable(ROTATION, key("property_rotation"), VfxAnimatableKind.ROTATION, { true }) { node -> - node.transform.rotation.let { floatArrayOf(it.x, it.y, it.z) } - }, - VfxAnimatable(SCALE, key("property_scale"), VfxAnimatableKind.VEC3, { true }) { node -> - node.transform.scale.let { floatArrayOf(it.x, it.y, it.z) } - }, - ) - - private val emitter: List = listOf( - scalar(RATE, "rate") { it.emission.rate }, - scalar(SHAPE_RADIUS, "radius") { it.shape.radius }, - vector(SHAPE_EXTENTS, "extents") { it.shape.extents }, - scalar(SHAPE_ANGLE, "angle") { it.shape.angle }, - scalar(SHAPE_THICKNESS, "thickness") { it.shape.thickness }, - scalar(LIFETIME, "lifetime") { it.spawn.lifetime }, - scalar(SPEED, "speed") { it.spawn.speed }, - vector(OFFSET, "spawn_offset") { it.spawn.offset }, - scalar(INHERIT_VELOCITY, "inherit_velocity") { it.spawn.inheritVelocity }, - vector(SIZE, "size") { it.appearance.size }, - VfxAnimatable(SPIN, key("spin"), VfxAnimatableKind.ROTATION, { it is VfxEmitterSpec }) { - (it as VfxEmitterSpec).appearance.rotation.constants() - }, - VfxAnimatable(COLOR, key("color"), VfxAnimatableKind.COLOR, { it is VfxEmitterSpec }) { - (it as VfxEmitterSpec).appearance.color.constants() - }, - scalar(GRAVITY, "gravity") { it.motion.gravity }, - scalar(DRAG, "drag") { it.motion.drag }, - ) - - /** Everything the timeline can drive on [node], its modules included. */ - fun forNode(node: VfxNodeSpec): List = buildList { - addAll(common) - if (node !is VfxEmitterSpec) return@buildList - addAll(emitter) - node.modules.forEach { module -> - val ownerKey = VfxModuleTypes.of(module)?.titleKey - module.animatables().forEach { field -> - add( - VfxAnimatable( - id = moduleProperty(module.id, field.field), - titleKey = field.titleKey, - kind = field.kind, - appliesTo = { it is VfxEmitterSpec && it.module(module.id) != null }, - read = { spec -> - (spec as? VfxEmitterSpec)?.module(module.id)?.let(field.read) - ?: FloatArray(field.kind.channels) - }, - ownerTitleKey = ownerKey, - ) - ) - } - } - } - - fun of(node: VfxNodeSpec, id: String): VfxAnimatable? = forNode(node).firstOrNull { it.id == id } - - private fun key(name: String) = "hollowengine.gui.vfx.$name" - - private fun scalar(id: String, title: String, get: (VfxEmitterSpec) -> VfxValue) = - VfxAnimatable(id, key(title), VfxAnimatableKind.FLOAT, { it is VfxEmitterSpec }) { - floatArrayOf(get(it as VfxEmitterSpec).constantOr(0f)) - } - - private fun vector(id: String, title: String, get: (VfxEmitterSpec) -> VfxVec3Value) = - VfxAnimatable(id, key(title), VfxAnimatableKind.VEC3, { it is VfxEmitterSpec }) { - get(it as VfxEmitterSpec).constants() - } -} - -/** The expression sources inside a value, for the one-pass compile of a file. */ -fun VfxValue.sources(): List = when (this) { - is VfxValue.Expr -> listOf(source).filter { it.isNotBlank() } - else -> emptyList() -} - -fun VfxVec3Value.sources(): List = x.sources() + y.sources() + z.sources() - -fun VfxColorValue.sources(): List = when (this) { - is VfxColorValue.Channels -> r.sources() + g.sources() + b.sources() + a.sources() - else -> emptyList() -} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt new file mode 100644 index 000000000..d8eceaf2a --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt @@ -0,0 +1,202 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.color +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.rotation +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.scalar +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.vector +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxModuleSpec + +/** Where an emitter keeps the positions and velocities of its particles. */ +@Serializable +enum class VfxSimulationSpace { + /** The emitter space, that particles follows. */ + LOCAL, + + /** The world space. Particles stay where they were born. */ + WORLD, +} + +/** How many particles appear and when the emitter stops. */ +@Serializable +data class VfxEmission( + /** Particles per second. */ + val rate: VfxValue = VfxValue.Const(20f), + /** Particles released at once when a loop starts. */ + val burst: Int = 0, + /** Seconds the emitter stays active; zero means forever. */ + val duration: Float = 2f, + val loop: Boolean = true, + /** Seconds of silence between loops. */ + val loopDelay: Float = 0f, + val maxParticles: Int = 256, +) + +/** Shapes a particle can be born on. */ +@Serializable +enum class VfxShapeKind { + POINT, SPHERE, BOX, CONE, DISC, LINE, + + /** The surface of a model in its bind pose. */ + MODEL, +} + +/** Which way a newborn particle is sent. */ +@Serializable +enum class VfxDirectionMode { + /** Outwards from the shape. Away from a sphere center, along a cone, up from a disc, off a model surface. */ + SHAPE, + + /** A random direction, whatever the shape. */ + RANDOM, + + /** Always [VfxShape.direction]. */ + FIXED, +} + +/** + * Where particles are born. + */ +@Serializable +data class VfxShape( + val kind: VfxShapeKind = VfxShapeKind.POINT, + val radius: VfxValue = VfxValue.Const(0.5f), + /** Box half-extents, and the end point of a line. */ + val extents: VfxVec3Value = VfxVec3Value.all(0.5f), + /** Cone half-angle in degrees. */ + val angle: VfxValue = VfxValue.Const(25f), + /** 0 puts particles on the surface only, 1 fills the whole volume. */ + val thickness: VfxValue = VfxValue.ONE, + val direction: Vec3f = Vec3f.Y_AXIS, + val directionMode: VfxDirectionMode = VfxDirectionMode.SHAPE, + /** The model whose surface a [VfxShapeKind.MODEL] shape covers. */ + val model: String = "", +) { + fun expressions(): List = radius.sources() + extents.sources() + angle.sources() + thickness.sources() +} + +/** + * What a particle is given at spawn and never changes afterward. + */ +@Serializable +data class VfxSpawn( + /** Seconds the particle lives. */ + val lifetime: VfxValue = VfxValue.Const(1f), + /** Blocks per second along the shape direction. */ + val speed: VfxValue = VfxValue.Const(1f), + /** An extra offset from the point the shape picked. */ + val offset: VfxVec3Value = VfxVec3Value.ZERO, + /** How much of the emitter own velocity the particle keeps, 0 to 1. */ + val inheritVelocity: VfxValue = VfxValue.ZERO, +) { + fun expressions(): List = + lifetime.sources() + speed.sources() + offset.sources() + inheritVelocity.sources() +} + +/** + * The size, turn and color of a particle, read again every step for as long as it lives. What it + * looks like with them is up to the renderers under the emitter. + */ +@Serializable +data class VfxAppearance( + /** Width, height and depth in blocks; a plane uses the first two. */ + val size: VfxVec3Value = VfxVec3Value.all(0.25f), + /** Drives all three axes of [size] from the first, which is what most effects want. */ + val uniformSize: Boolean = true, + val rotation: VfxVec3Value = VfxVec3Value.ZERO, + val color: VfxColorValue = VfxColorValue.WHITE, +) { + fun expressions(): List = size.sources() + rotation.sources() + color.sources() +} + +/** + * The forces every emitter has, as opposed to the ones that come from modules. + */ +@Serializable +data class VfxMotion( + /** Blocks per second squared, pulling down. */ + val gravity: VfxValue = VfxValue.ZERO, + /** Fraction of speed lost per second, 0 to 1. */ + val drag: VfxValue = VfxValue.ZERO, +) { + fun expressions(): List = gravity.sources() + drag.sources() +} + +/** + * Makes particles and moves them. It draws nothing itself: the renderers directly under it do, one + * each per particle. + */ +@Serializable +@SerialName("hollowengine:vfx/emitter") +data class VfxEmitterSpec( + override val id: String = newVfxNodeId("emitter"), + override val name: String = "Emitter", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + val emission: VfxEmission = VfxEmission(), + val space: VfxSimulationSpace = VfxSimulationSpace.WORLD, + val inheritRotation: Boolean = true, + val inheritScale: Boolean = false, + val shape: VfxShape = VfxShape(), + val spawn: VfxSpawn = VfxSpawn(), + val appearance: VfxAppearance = VfxAppearance(), + val motion: VfxMotion = VfxMotion(), + val modules: List = emptyList(), + /** The longest step the simulation may take for this emitter, in seconds. */ + val maxStep: Float = DEFAULT_MAX_STEP, +) : VfxNodeSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + fun module(id: String): VfxModuleSpec? = modules.firstOrNull { it.id == id } + + override fun expressions(): List = buildList { + addAll(emission.rate.sources()) + addAll(shape.expressions()) + addAll(spawn.expressions()) + addAll(appearance.expressions()) + addAll(motion.expressions()) + modules.forEach { addAll(it.expressions()) } + } + + override fun animatables(): List = buildList { + add(scalar(VfxProperty.RATE, "rate", emission.rate)) + add(scalar(VfxProperty.SHAPE_RADIUS, "radius", shape.radius)) + add(vector(VfxProperty.SHAPE_EXTENTS, "extents", shape.extents)) + add(scalar(VfxProperty.SHAPE_ANGLE, "angle", shape.angle)) + add(scalar(VfxProperty.SHAPE_THICKNESS, "thickness", shape.thickness)) + add(scalar(VfxProperty.LIFETIME, "lifetime", spawn.lifetime)) + add(scalar(VfxProperty.SPEED, "speed", spawn.speed)) + add(vector(VfxProperty.OFFSET, "spawn_offset", spawn.offset)) + add(scalar(VfxProperty.INHERIT_VELOCITY, "inherit_velocity", spawn.inheritVelocity)) + add(vector(VfxProperty.SIZE, "size", appearance.size)) + add(rotation(VfxProperty.SPIN, "spin", appearance.rotation)) + add(color(VfxProperty.COLOR, "color", appearance.color)) + add(scalar(VfxProperty.GRAVITY, "gravity", motion.gravity)) + add(scalar(VfxProperty.DRAG, "drag", motion.drag)) + + modules.forEach { module -> + val owner = VfxModuleTypes.of(module)?.titleKey + module.animatables().forEach { field -> + add( + VfxAnimatable( + property = VfxProperty.module(module.id, field.field), + titleKey = field.titleKey, + kind = field.kind, + ownerTitleKey = owner, + ) { field.read(module) } + ) + } + } + } +} + +internal const val DEFAULT_MAX_STEP = 1f / 60f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt index 4a9e03082..14146e104 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt @@ -3,31 +3,34 @@ package ru.hollowhorizon.hollowengine.common.vfx import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -/** How the color a particle wrote is mixed into what is already on screen. */ +/** How the color a surface wrote is mixed into what is already on screen. */ @Serializable enum class VfxBlend { /** No blending; the alpha channel only cuts holes. */ OPAQUE, + /** Ordinary alpha blending. The only mode that has to be sorted back to front. */ BLEND, + /** Adds light: fire, sparks, magic. */ ADDITIVE, + /** Multiplies what is behind: shadows, stains, darkening smoke. */ MULTIPLY; } -/** Where a particle takes its light from. */ +/** Where a surface takes its light from. */ @Serializable enum class VfxLighting { /** Full bright, whatever the block light is: fire, magic, anything that emits. */ UNLIT, - /** The block and skylight of the particle position. */ + /** The block and skylight of the point it is drawn at. */ WORLD, } /** - * The part of the texture a particle shows, in 0..1 texture coordinates. + * The part of the texture a surface shows, in 0..1 texture coordinates. * * The whole texture by default. A sprite that shares its file with others picks its own corner here; * a flipbook is cut out of this region by the frame-atlas module, so the two work together. @@ -48,7 +51,7 @@ data class VfxUvRect( } /** - * How particles of one emitter are drawn. + * How a surface is drawn: a plane, a mesh, a trail or a beam. */ @Serializable data class VfxMaterialSpec( @@ -59,9 +62,74 @@ data class VfxMaterialSpec( val depthTest: Boolean = true, val depthWrite: Boolean = false, val uv: VfxUvRect = VfxUvRect.FULL, - @SerialName("shader") val shader: String? = null, + /** `namespace:path` of `assets/namespace/shaders/core/path.json`; null for the engine's own. */ + val shader: String? = null, + val uniforms: List = emptyList(), + val samplers: List = emptyList(), ) { + fun expressions(): List = uniforms.flatMap { it.value.sources() } + companion object { const val DEFAULT_TEXTURE = "hollowengine:textures/particle/circle.png" } } + +/** + * A uniform a shader declares, and what the effect writes into it every frame. + */ +@Serializable +data class VfxUniformSpec( + val name: String = "", + val value: VfxUniformValue = VfxUniformValue.Scalar(), +) + +/** What a uniform holds. A vector also fills a `vec2`, a color a `vec4`. */ +@Serializable +sealed interface VfxUniformValue { + val kind: VfxAnimatableKind + + fun sources(): List + + fun constants(): FloatArray + + @Serializable + @SerialName("float") + data class Scalar(val value: VfxValue = VfxValue.ZERO) : VfxUniformValue { + override val kind get() = VfxAnimatableKind.FLOAT + override fun sources() = value.sources() + override fun constants() = floatArrayOf(value.constantOr(0f)) + } + + @Serializable + @SerialName("vector") + data class Vector(val value: VfxVec3Value = VfxVec3Value.ZERO) : VfxUniformValue { + override val kind get() = VfxAnimatableKind.VEC3 + override fun sources() = value.sources() + override fun constants() = value.constants() + } + + @Serializable + @SerialName("color") + data class Color(val value: VfxColorValue = VfxColorValue.WHITE) : VfxUniformValue { + override val kind get() = VfxAnimatableKind.COLOR + override fun sources() = value.sources() + override fun constants() = value.constants() + } +} + +/** A texture bound to a sampler the shader declares. */ +@Serializable +data class VfxSamplerSpec( + val name: String = "", + val texture: String = "", +) + +/** The timeline tracks the uniforms offer, one per uniform, under `uniforms.`. */ +fun List.animatables(): List = filter { it.name.isNotBlank() }.map { uniform -> + VfxAnimatable( + property = VfxProperty.uniform(uniform.name), + titleKey = uniform.name, + kind = uniform.value.kind, + ownerTitleKey = VfxAnimatables.key("section_uniforms"), + ) { uniform.value.constants() } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt new file mode 100644 index 000000000..91cda239e --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt @@ -0,0 +1,74 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f + +/** A fresh node id; readable on purpose, because it appears in timeline tracks and in save files. */ +fun newVfxNodeId(prefix: String): String = "$prefix-${Integer.toHexString((0..0xFFFFFF).random())}" + +/** A node placement inside the effect. */ +@Serializable +data class VfxTransform( + val position: Vec3f = Vec3f.ZERO, + val rotation: Vec3f = Vec3f.ZERO, + val scale: Vec3f = Vec3f.ONES, +) { + companion object { + val IDENTITY = VfxTransform() + } +} + +/** + * One node of an effect. + * + * Node kinds live in [VfxNodeTypes], so an addon can add its own. + */ +@Serializable +abstract class VfxNodeSpec { + abstract val id: String + abstract val name: String + abstract val enabled: Boolean + abstract val transform: VfxTransform + abstract val children: List + + /** A copy with the shared fields replaced, whichever kind of node this is. */ + abstract fun withCommon( + id: String = this.id, + name: String = this.name, + enabled: Boolean = this.enabled, + transform: VfxTransform = this.transform, + children: List = this.children, + ): VfxNodeSpec + + /** Every expression this node evaluates, so a file compiles them all in one pass. */ + open fun expressions(): List = emptyList() + + /** What of this node, besides its placement, the timeline can drive. */ + open fun animatables(): List = emptyList() +} + +/** + * A node that draws on every particle of the emitter it sits directly under, and once in its own + * place anywhere else. + */ +interface VfxParticleRendererSpec + +/** Nothing but a place in the tree: moves, turns, scales and switches off everything under it. */ +@Serializable +@SerialName("hollowengine:vfx/group") +data class VfxGroupSpec( + override val id: String = newVfxNodeId("group"), + override val name: String = "Group", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), +) : VfxNodeSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxProperty.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxProperty.kt new file mode 100644 index 000000000..ae34160a1 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxProperty.kt @@ -0,0 +1,117 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.Serializable + +/** + * The id of one property of a node that a timeline track can drive, such as `transform.position`, + * `modules..` or `uniforms.`. + */ +@Serializable +@JvmInline +value class VfxProperty(val id: String) { + override fun toString(): String = id + + companion object { + val ENABLED = VfxProperty("enabled") + val POSITION = VfxProperty("transform.position") + val ROTATION = VfxProperty("transform.rotation") + val SCALE = VfxProperty("transform.scale") + + val RATE = VfxProperty("emission.rate") + val SHAPE_RADIUS = VfxProperty("shape.radius") + val SHAPE_EXTENTS = VfxProperty("shape.extents") + val SHAPE_ANGLE = VfxProperty("shape.angle") + val SHAPE_THICKNESS = VfxProperty("shape.thickness") + val LIFETIME = VfxProperty("spawn.lifetime") + val SPEED = VfxProperty("spawn.speed") + val OFFSET = VfxProperty("spawn.offset") + val INHERIT_VELOCITY = VfxProperty("spawn.inherit_velocity") + val SIZE = VfxProperty("appearance.size") + val SPIN = VfxProperty("appearance.rotation") + val COLOR = VfxProperty("appearance.color") + val GRAVITY = VfxProperty("motion.gravity") + val DRAG = VfxProperty("motion.drag") + + val TINT = VfxProperty("tint") + val WIDTH = VfxProperty("width") + val BEAM_END = VfxProperty("beam.end") + val BEAM_NOISE = VfxProperty("beam.noise") + val SHAKE_STRENGTH = VfxProperty("shake.strength") + val SHAKE_FREQUENCY = VfxProperty("shake.frequency") + + fun module(moduleId: String, field: String) = VfxProperty("modules.$moduleId.$field") + + fun uniform(name: String) = VfxProperty("uniforms.$name") + } +} + +/** What a timeline track can drive. */ +enum class VfxAnimatableKind(val channels: Int) { + /** On or off, held between keys instead of interpolated. */ + TOGGLE(1), FLOAT(1), VEC3(3), ROTATION(3), COLOR(4), +} + +/** + * One property a timeline may animate, and its authored value, which a track starts from. + */ +class VfxAnimatable( + val property: VfxProperty, + val titleKey: String, + val kind: VfxAnimatableKind, + val ownerTitleKey: String? = null, + val read: () -> FloatArray, +) + +/** + * The properties a timeline can animate. + * + * Placement is common to every node; the rest each node kind declares in [VfxNodeSpec.animatables]. + */ +object VfxAnimatables { + fun forNode(node: VfxNodeSpec): List = common(node) + node.animatables() + + fun of(node: VfxNodeSpec, property: VfxProperty): VfxAnimatable? = + forNode(node).firstOrNull { it.property == property } + + fun scalar(property: VfxProperty, title: String, value: VfxValue, owner: String? = null) = + VfxAnimatable(property, key(title), VfxAnimatableKind.FLOAT, owner) { floatArrayOf(value.constantOr(0f)) } + + fun vector(property: VfxProperty, title: String, value: VfxVec3Value, owner: String? = null) = + VfxAnimatable(property, key(title), VfxAnimatableKind.VEC3, owner) { value.constants() } + + fun rotation(property: VfxProperty, title: String, value: VfxVec3Value) = + VfxAnimatable(property, key(title), VfxAnimatableKind.ROTATION) { value.constants() } + + fun color(property: VfxProperty, title: String, value: VfxColorValue, owner: String? = null) = + VfxAnimatable(property, key(title), VfxAnimatableKind.COLOR, owner) { value.constants() } + + fun key(name: String) = "hollowengine.gui.vfx.$name" + + private fun common(node: VfxNodeSpec): List = listOf( + VfxAnimatable(VfxProperty.ENABLED, key("property_enabled"), VfxAnimatableKind.TOGGLE) { + floatArrayOf(if (node.enabled) 1f else 0f) + }, + VfxAnimatable(VfxProperty.POSITION, key("property_position"), VfxAnimatableKind.VEC3) { + node.transform.position.let { floatArrayOf(it.x, it.y, it.z) } + }, + VfxAnimatable(VfxProperty.ROTATION, key("property_rotation"), VfxAnimatableKind.ROTATION) { + node.transform.rotation.let { floatArrayOf(it.x, it.y, it.z) } + }, + VfxAnimatable(VfxProperty.SCALE, key("property_scale"), VfxAnimatableKind.VEC3) { + node.transform.scale.let { floatArrayOf(it.x, it.y, it.z) } + }, + ) +} + +/** The expression sources inside a value, for the one-pass compile of a file. */ +fun VfxValue.sources(): List = when (this) { + is VfxValue.Expr -> listOf(source).filter { it.isNotBlank() } + else -> emptyList() +} + +fun VfxVec3Value.sources(): List = x.sources() + y.sources() + z.sources() + +fun VfxColorValue.sources(): List = when (this) { + is VfxColorValue.Channels -> r.sources() + g.sources() + b.sources() + a.sources() + else -> emptyList() +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt index 34d449b83..c7921435b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt @@ -36,28 +36,37 @@ object VfxNodeTypes { init { point.onChange(VfxModuleRevision::invalidate) - register( - VfxNodeType( - id = "hollowengine:vfx/quad_emitter", - specClass = VfxQuadEmitterSpec::class, - serializer = VfxQuadEmitterSpec.serializer(), - titleKey = "hollowengine.gui.vfx.node_quad_emitter", - icon = "hollowengine:textures/gui/icons/box.svg", - createDefault = { VfxQuadEmitterSpec() }, - ) - ) - register( - VfxNodeType( - id = "hollowengine:vfx/mesh_emitter", - specClass = VfxMeshEmitterSpec::class, - serializer = VfxMeshEmitterSpec.serializer(), - titleKey = "hollowengine.gui.vfx.node_mesh_emitter", - icon = "hollowengine:textures/gui/icons/file_model.svg", - createDefault = { VfxMeshEmitterSpec() }, - ) - ) + builtIn("group", VfxGroupSpec.serializer(), "folder.svg") { VfxGroupSpec() } + builtIn("emitter", VfxEmitterSpec.serializer(), "light_point.svg") { + VfxEmitterSpec(children = listOf(VfxPlaneSpec())) + } + builtIn("plane", VfxPlaneSpec.serializer(), "file_image.svg") { VfxPlaneSpec() } + builtIn("cube", VfxCubeSpec.serializer(), "box.svg") { VfxCubeSpec() } + builtIn("sphere", VfxSphereSpec.serializer(), "global.svg") { VfxSphereSpec() } + builtIn("cylinder", VfxCylinderSpec.serializer(), "loops.svg") { VfxCylinderSpec() } + builtIn("model", VfxModelSpec.serializer(), "file_model.svg") { VfxModelSpec() } + builtIn("trail", VfxTrailSpec.serializer(), "curve.svg") { VfxTrailSpec() } + builtIn("beam", VfxBeamSpec.serializer(), "link.svg") { VfxBeamSpec() } + builtIn("post_effect", VfxPostEffectSpec.serializer(), "film.svg") { VfxPostEffectSpec() } + builtIn("camera_shake", VfxCameraShakeSpec.serializer(), "pulse.svg") { VfxCameraShakeSpec() } } + private inline fun builtIn( + name: String, + serializer: KSerializer, + icon: String, + noinline createDefault: () -> S, + ) = register( + VfxNodeType( + id = "hollowengine:vfx/$name", + specClass = S::class, + serializer = serializer, + titleKey = "hollowengine.gui.vfx.node_$name", + icon = "hollowengine:textures/gui/icons/$icon", + createDefault = createDefault, + ) + ) + fun register(type: VfxNodeType<*>): ExtensionHandle = point.register(type.key, type) val all: List> get() = point.extensions @@ -68,10 +77,6 @@ object VfxNodeTypes { builder.polymorphic(VfxNodeSpec::class) { all.forEach { type -> subclass(type) } } - builder.polymorphic(VfxEmitterSpec::class) { - all.filter { VfxEmitterSpec::class.java.isAssignableFrom(it.specClass.java) } - .forEach { type -> emitterSubclass(type) } - } } @Suppress("UNCHECKED_CAST") @@ -79,12 +84,6 @@ object VfxNodeTypes { type.specClass as KClass, type.serializer as KSerializer, ) - - @Suppress("UNCHECKED_CAST") - private fun PolymorphicModuleBuilder.emitterSubclass(type: VfxNodeType<*>) = subclass( - type.specClass as KClass, - type.serializer as KSerializer, - ) } /** @@ -152,7 +151,6 @@ object VfxModuleTypes { serializer = VfxUvAnimationSpec.serializer(), titleKey = "hollowengine.gui.vfx.module_uv_animation", createDefault = { VfxUvAnimationSpec() }, - appliesTo = { it is VfxQuadEmitterSpec }, ) ) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt new file mode 100644 index 000000000..e6f89ce21 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt @@ -0,0 +1,305 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.color +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.scalar + +/** + * A node drawn with a material. + */ +@Serializable +abstract class VfxSurfaceSpec : VfxNodeSpec() { + abstract val material: VfxMaterialSpec + + /** + * Multiplied into the color the surface already has, a particle's own included. A trail and a + * beam read it along their length, so a gradient on the lifetime fades them from head to tail. + */ + abstract val tint: VfxColorValue + + abstract fun withSurface( + material: VfxMaterialSpec = this.material, + tint: VfxColorValue = this.tint, + ): VfxSurfaceSpec + + override fun expressions(): List = tint.sources() + material.expressions() + + override fun animatables(): List = + listOf(color(VfxProperty.TINT, "tint", tint)) + material.uniforms.animatables() +} + +/** How a plane is turned towards the viewer. */ +@Serializable +enum class VfxFacing { + /** Keeps its rotation, so the plane sits in the world like a decal. */ + NONE, + + /** Always flat to the camera; the authored Z rotation still spins it. */ + CAMERA, + + /** Flat to the camera but locked to [VfxPlaneSpec.facingAxis]: smoke columns, beams, etc. */ + CAMERA_AXIS, + + /** Flat to the camera and stretched along the way the particle travels: sparks, rain. */ + VELOCITY, +} + +/** One textured quad, a unit square before its size or scale. */ +@Serializable +@SerialName("hollowengine:vfx/plane") +data class VfxPlaneSpec( + override val id: String = newVfxNodeId("plane"), + override val name: String = "Plane", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val material: VfxMaterialSpec = VfxMaterialSpec(), + override val tint: VfxColorValue = VfxColorValue.WHITE, + val facing: VfxFacing = VfxFacing.CAMERA, + val facingAxis: Vec3f = Vec3f.Y_AXIS, +) : VfxSurfaceSpec(), VfxParticleRendererSpec { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) +} + +/** Which built-in mesh a mesh node draws. */ +@Serializable +enum class VfxPrimitiveKind { CUBE, SPHERE, CYLINDER } + +/** A built-in mesh with its detail; equal primitives share one vertex buffer. */ +data class VfxPrimitive(val kind: VfxPrimitiveKind, val segments: Int = 0, val caps: Boolean = true) + +/** + * A built-in mesh, one block across before its size or scale, with normals and texture coordinates. + */ +@Serializable +abstract class VfxMeshSpec : VfxSurfaceSpec(), VfxParticleRendererSpec { + /** Turns the mesh along the way the particle travels, on top of its own rotation. */ + abstract val alignToVelocity: Boolean + + abstract val primitive: VfxPrimitive +} + +@Serializable +@SerialName("hollowengine:vfx/cube") +data class VfxCubeSpec( + override val id: String = newVfxNodeId("cube"), + override val name: String = "Cube", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val material: VfxMaterialSpec = VfxMaterialSpec(texture = WHITE_TEXTURE), + override val tint: VfxColorValue = VfxColorValue.WHITE, + override val alignToVelocity: Boolean = false, +) : VfxMeshSpec() { + override val primitive get() = VfxPrimitive(VfxPrimitiveKind.CUBE) + + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) +} + +@Serializable +@SerialName("hollowengine:vfx/sphere") +data class VfxSphereSpec( + override val id: String = newVfxNodeId("sphere"), + override val name: String = "Sphere", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val material: VfxMaterialSpec = VfxMaterialSpec(texture = WHITE_TEXTURE), + override val tint: VfxColorValue = VfxColorValue.WHITE, + override val alignToVelocity: Boolean = false, + /** Slices around the vertical axis; half as many rings go from pole to pole. */ + val segments: Int = 24, +) : VfxMeshSpec() { + override val primitive get() = VfxPrimitive(VfxPrimitiveKind.SPHERE, segments.coerceIn(4, MAX_SEGMENTS)) + + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) +} + +@Serializable +@SerialName("hollowengine:vfx/cylinder") +data class VfxCylinderSpec( + override val id: String = newVfxNodeId("cylinder"), + override val name: String = "Cylinder", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val material: VfxMaterialSpec = VfxMaterialSpec(texture = WHITE_TEXTURE), + override val tint: VfxColorValue = VfxColorValue.WHITE, + override val alignToVelocity: Boolean = false, + val segments: Int = 24, + /** Whether the ends are closed; an open tube is what shockwaves and portals are made of. */ + val caps: Boolean = true, +) : VfxMeshSpec() { + override val primitive get() = VfxPrimitive(VfxPrimitiveKind.CYLINDER, segments.coerceIn(3, MAX_SEGMENTS), caps) + + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) +} + +/** + * A model in its bind pose, drawn through the model renderer with its own materials. + */ +@Serializable +@SerialName("hollowengine:vfx/model") +data class VfxModelSpec( + override val id: String = newVfxNodeId("model"), + override val name: String = "Model", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + val model: String = "", + /** Turns the model along the way the particle travels, on top of its own rotation. */ + val alignToVelocity: Boolean = false, + val emissive: Boolean = false, +) : VfxNodeSpec(), VfxParticleRendererSpec { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) +} + +/** How a ribbon lays its texture along its length. */ +@Serializable +enum class VfxRibbonUv { + /** Once over the whole length, whatever it is. */ + STRETCH, + + /** Once every [VfxTrailSpec.tileLength] blocks. */ + TILE, +} + +/** + * A ribbon through the places its head has been: the node itself, or every particle when it sits + * under an emitter. + */ +@Serializable +@SerialName("hollowengine:vfx/trail") +data class VfxTrailSpec( + override val id: String = newVfxNodeId("trail"), + override val name: String = "Trail", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val material: VfxMaterialSpec = VfxMaterialSpec(texture = WHITE_TEXTURE, blend = VfxBlend.ADDITIVE), + override val tint: VfxColorValue = VfxColorValue.Gradient(VfxGradient.fade()), + /** + * Blocks across, read from head (`p.progress` 0) to tail (1). Under an emitter the other + * particle inputs are the particle's own, and its color multiplies the tint. + */ + val width: VfxValue = VfxValue.OverTime(VfxCurve.ramp(0.2f, 0f)), + /** Seconds a point of the trail stays. */ + val lifetime: Float = 0.5f, + /** How far the head moves before the trail takes a new point. */ + val minDistance: Float = 0.05f, + val maxPoints: Int = 32, + val uvMode: VfxRibbonUv = VfxRibbonUv.STRETCH, + val tileLength: Float = 1f, +) : VfxSurfaceSpec(), VfxParticleRendererSpec { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) + + override fun expressions() = super.expressions() + width.sources() + + override fun animatables() = super.animatables() + scalar(VfxProperty.WIDTH, "width", width) +} + +/** + * A ribbon from the node to another node, or to a point of its own, bent by noise: lasers, + * lightning, tethers. + */ +@Serializable +@SerialName("hollowengine:vfx/beam") +data class VfxBeamSpec( + override val id: String = newVfxNodeId("beam"), + override val name: String = "Beam", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + override val material: VfxMaterialSpec = VfxMaterialSpec(texture = WHITE_TEXTURE, blend = VfxBlend.ADDITIVE), + override val tint: VfxColorValue = VfxColorValue.WHITE, + /** The node the beam ends at; empty ends it at [end]. */ + val target: String = "", + /** The end point in the space of this node, when there is no [target]. */ + val end: Vec3f = Vec3f(0f, 2f, 0f), + /** Blocks across, read from start (`p.progress` 0) to end (1). */ + val width: VfxValue = VfxValue.Const(0.15f), + val segments: Int = 24, + /** How far, in blocks, noise pushes the middle of the beam aside; the ends stay put. */ + val noise: VfxValue = VfxValue.ZERO, + /** Noise waves per block of beam. */ + val noiseFrequency: Float = 1.5f, + /** How fast the noise changes, in cycles per second. */ + val noiseSpeed: Float = 4f, + /** Texture lengths per second the texture slides from start to end. */ + val uvScroll: Float = 0f, + val uvMode: VfxRibbonUv = VfxRibbonUv.STRETCH, + val tileLength: Float = 1f, +) : VfxSurfaceSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) + + override fun expressions() = super.expressions() + width.sources() + noise.sources() + + override fun animatables() = super.animatables() + listOf( + scalar(VfxProperty.WIDTH, "width", width), + scalar(VfxProperty.BEAM_NOISE, "beam_noise", noise), + VfxAnimatable(VfxProperty.BEAM_END, VfxAnimatables.key("beam_end"), VfxAnimatableKind.VEC3) { + floatArrayOf(end.x, end.y, end.z) + }, + ) +} + +/** A plain white texture, for surfaces whose look comes from the tint or a shader. */ +const val WHITE_TEXTURE = "hollowengine:textures/particle/white.png" + +private const val MAX_SEGMENTS = 128 diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt new file mode 100644 index 000000000..4c8642a25 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt @@ -0,0 +1,75 @@ +package ru.hollowhorizon.hollowengine.common.vfx + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.scalar + +/** + * A full-screen pass over the frame while the node is on: a core shader drawn over the whole screen, + * reading the frame so far as `SceneColor` and its depth as `SceneDepth`. + * + * How strong it is, and whether it fades with distance, is up to the uniforms the author declares: + * an expression such as `1 - n.camera_distance / 32` makes it weaker the farther away the node is. + */ +@Serializable +@SerialName("hollowengine:vfx/post_effect") +data class VfxPostEffectSpec( + override val id: String = newVfxNodeId("post"), + override val name: String = "Post Effect", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + /** `namespace:path` of `assets/namespace/shaders/core/path.json`. */ + val shader: String = "hollowengine:vfx/post/grayscale", + val uniforms: List = listOf(VfxUniformSpec("Strength", VfxUniformValue.Scalar(VfxValue.ONE))), + val samplers: List = emptyList(), +) : VfxNodeSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun expressions(): List = uniforms.flatMap { it.value.sources() } + + override fun animatables(): List = uniforms.animatables() +} + +/** + * Shakes the camera of whoever sees the effect while the node is on. + * + * [strength] scales everything and is the place for a distance falloff, such as + * `1 - n.camera_distance / 24`. + */ +@Serializable +@SerialName("hollowengine:vfx/camera_shake") +data class VfxCameraShakeSpec( + override val id: String = newVfxNodeId("shake"), + override val name: String = "Camera Shake", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform.IDENTITY, + override val children: List = emptyList(), + val strength: VfxValue = VfxValue.ONE, + /** Shakes per second. */ + val frequency: VfxValue = VfxValue.Const(14f), + /** The widest swing in degrees: pitch, yaw and roll. */ + val amplitude: Vec3f = Vec3f(1.5f, 1.5f, 0.75f), +) : VfxNodeSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun expressions(): List = strength.sources() + frequency.sources() + + override fun animatables(): List = listOf( + scalar(VfxProperty.SHAKE_STRENGTH, "shake_strength", strength), + scalar(VfxProperty.SHAKE_FREQUENCY, "shake_frequency", frequency), + ) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt deleted file mode 100644 index 474a9ceef..000000000 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxSpecs.kt +++ /dev/null @@ -1,334 +0,0 @@ -package ru.hollowhorizon.hollowengine.common.vfx - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f -import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxModuleSpec - -/** A fresh node id; readable on purpose, because it appears in timeline tracks and in save files. */ -fun newVfxNodeId(prefix: String): String = "$prefix-${Integer.toHexString((0..0xFFFFFF).random())}" - -/** Where an emitter keeps the positions and velocities of its particles. */ -@Serializable -enum class VfxSimulationSpace { - /** The emitter space, that particles follows. */ - LOCAL, - - /** The world space. Particles stay where they were born. */ - WORLD, -} - -/** A node placement inside the effect. */ -@Serializable -data class VfxTransform( - val position: Vec3f = Vec3f.ZERO, - val rotation: Vec3f = Vec3f.ZERO, - val scale: Vec3f = Vec3f.ONES, -) { - companion object { - val IDENTITY = VfxTransform() - } -} - -/** - * One node of an effect. - * - * Node kinds live in [VfxNodeTypes], so an addon can add its own. - */ -@Serializable -abstract class VfxNodeSpec { - abstract val id: String - abstract val name: String - abstract val enabled: Boolean - abstract val transform: VfxTransform - abstract val children: List - - /** A copy with the shared fields replaced, whichever kind of node this is. */ - abstract fun withCommon( - id: String = this.id, - name: String = this.name, - enabled: Boolean = this.enabled, - transform: VfxTransform = this.transform, - children: List = this.children, - ): VfxNodeSpec - - /** Every expression this node evaluates, so a file compiles them all in one pass. */ - open fun expressions(): List = emptyList() -} - -/** How many particles appear and when the emitter stops. */ -@Serializable -data class VfxEmission( - /** Particles per second. */ - val rate: VfxValue = VfxValue.Const(20f), - /** Particles released at once when a loop starts. */ - val burst: Int = 0, - /** Seconds the emitter stays active; zero means forever. */ - val duration: Float = 2f, - val loop: Boolean = true, - /** Seconds of silence between loops. */ - val loopDelay: Float = 0f, - val maxParticles: Int = 256, -) - -/** Shapes a particle can be born on. */ -@Serializable -enum class VfxShapeKind { - POINT, SPHERE, BOX, CONE, DISC, LINE, -} - -/** Which way a newborn particle is sent. */ -@Serializable -enum class VfxDirectionMode { - /** Outwards from the shape. Away from a sphere center, along a cone, up from a disc. */ - SHAPE, - - /** A random direction, whatever the shape. */ - RANDOM, - - /** Always [VfxShape.direction]. */ - FIXED, -} - -/** - * Where particles are born. - * - * The sizes are values rather than numbers. - * TODO: Add Mesh shape. - */ -@Serializable -data class VfxShape( - val kind: VfxShapeKind = VfxShapeKind.POINT, - val radius: VfxValue = VfxValue.Const(0.5f), - /** Box half-extents, and the end point of a line. */ - val extents: VfxVec3Value = VfxVec3Value.all(0.5f), - /** Cone half-angle in degrees. */ - val angle: VfxValue = VfxValue.Const(25f), - /** 0 puts particles on the surface only, 1 fills the whole volume. */ - val thickness: VfxValue = VfxValue.ONE, - val direction: Vec3f = Vec3f.Y_AXIS, - val directionMode: VfxDirectionMode = VfxDirectionMode.SHAPE, -) { - fun expressions(): List = radius.sources() + extents.sources() + angle.sources() + thickness.sources() -} - -/** - * What a particle is given at spawn and never changes afterward. - */ -@Serializable -data class VfxSpawn( - /** Seconds the particle lives. */ - val lifetime: VfxValue = VfxValue.Const(1f), - /** Blocks per second along the shape direction. */ - val speed: VfxValue = VfxValue.Const(1f), - /** An extra offset from the point the shape picked. */ - val offset: VfxVec3Value = VfxVec3Value.ZERO, - /** How much of the emitter own velocity the particle keeps, 0 to 1. */ - val inheritVelocity: VfxValue = VfxValue.ZERO, -) { - fun expressions(): List = - lifetime.sources() + speed.sources() + offset.sources() + inheritVelocity.sources() -} - -/** - * How a particle looks, read again every step for as long as it lives. - */ -@Serializable -data class VfxAppearance( - /** Quad width and height in blocks; a mesh particle uses all three. */ - val size: VfxVec3Value = VfxVec3Value.all(0.25f), - /** Drives all three axes of [size] from the first, which is what most effects want. */ - val uniformSize: Boolean = true, - val rotation: VfxVec3Value = VfxVec3Value.ZERO, - val color: VfxColorValue = VfxColorValue.WHITE, -) { - fun expressions(): List = size.sources() + rotation.sources() + color.sources() -} - -/** - * The forces every emitter has, as opposed to the ones that come from modules. - */ -@Serializable -data class VfxMotion( - /** Blocks per second squared, pulling down. */ - val gravity: VfxValue = VfxValue.ZERO, - /** Fraction of speed lost per second, 0 to 1. */ - val drag: VfxValue = VfxValue.ZERO, -) { - fun expressions(): List = gravity.sources() + drag.sources() -} - -/** - * Attributes, that every emitter has. - */ -@Serializable -abstract class VfxEmitterSpec : VfxNodeSpec() { - abstract val emission: VfxEmission - abstract val space: VfxSimulationSpace - abstract val inheritRotation: Boolean - abstract val inheritScale: Boolean - abstract val shape: VfxShape - abstract val spawn: VfxSpawn - abstract val appearance: VfxAppearance - abstract val motion: VfxMotion - abstract val modules: List - - /** - * The longest step the simulation may take for this emitter, in seconds. - */ - abstract val maxStep: Float - - abstract fun withEmitter( - emission: VfxEmission = this.emission, - space: VfxSimulationSpace = this.space, - inheritRotation: Boolean = this.inheritRotation, - inheritScale: Boolean = this.inheritScale, - shape: VfxShape = this.shape, - spawn: VfxSpawn = this.spawn, - appearance: VfxAppearance = this.appearance, - motion: VfxMotion = this.motion, - modules: List = this.modules, - maxStep: Float = this.maxStep, - ): VfxEmitterSpec - - fun module(id: String): VfxModuleSpec? = modules.firstOrNull { it.id == id } - - override fun expressions(): List = buildList { - addAll(emission.rate.sources()) - addAll(shape.expressions()) - addAll(spawn.expressions()) - addAll(appearance.expressions()) - addAll(motion.expressions()) - modules.forEach { addAll(it.expressions()) } - } -} - -/** How a quad is turned towards the viewer. */ -@Serializable -enum class VfxFacing { - /** Keeps initial rotation, so the quad sits in the world like a decal. */ - NONE, - - /** Always flat to the camera; the authored Z rotation still spins it. */ - CAMERA, - - /** Flat to the camera but locked to [VfxQuadEmitterSpec.facingAxis]: smoke columns, beams, etc. */ - CAMERA_AXIS, -} - -/** Billboard particles. One textured quad each, drawn instanced. */ -@Serializable -@SerialName("hollowengine:vfx/quad_emitter") -data class VfxQuadEmitterSpec( - override val id: String = newVfxNodeId("quads"), - override val name: String = "Quads", - override val enabled: Boolean = true, - override val transform: VfxTransform = VfxTransform.IDENTITY, - override val children: List = emptyList(), - override val emission: VfxEmission = VfxEmission(), - override val space: VfxSimulationSpace = VfxSimulationSpace.WORLD, - override val inheritRotation: Boolean = true, - override val inheritScale: Boolean = false, - override val shape: VfxShape = VfxShape(), - override val spawn: VfxSpawn = VfxSpawn(), - override val appearance: VfxAppearance = VfxAppearance(), - override val motion: VfxMotion = VfxMotion(), - override val modules: List = emptyList(), - override val maxStep: Float = DEFAULT_MAX_STEP, - val material: VfxMaterialSpec = VfxMaterialSpec(), - val facing: VfxFacing = VfxFacing.CAMERA, - val facingAxis: Vec3f = Vec3f.Y_AXIS, -) : VfxEmitterSpec() { - override fun withCommon( - id: String, - name: String, - enabled: Boolean, - transform: VfxTransform, - children: List, - ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) - - override fun withEmitter( - emission: VfxEmission, - space: VfxSimulationSpace, - inheritRotation: Boolean, - inheritScale: Boolean, - shape: VfxShape, - spawn: VfxSpawn, - appearance: VfxAppearance, - motion: VfxMotion, - modules: List, - maxStep: Float, - ) = copy( - emission = emission, - space = space, - inheritRotation = inheritRotation, - inheritScale = inheritScale, - shape = shape, - spawn = spawn, - appearance = appearance, - motion = motion, - modules = modules, - maxStep = maxStep, - ) -} - -/** - * Model particles. One instance of a model each, drawn through the model renderer. - */ -@Serializable -@SerialName("hollowengine:vfx/mesh_emitter") -data class VfxMeshEmitterSpec( - override val id: String = newVfxNodeId("meshes"), - override val name: String = "Meshes", - override val enabled: Boolean = true, - override val transform: VfxTransform = VfxTransform.IDENTITY, - override val children: List = emptyList(), - override val emission: VfxEmission = VfxEmission(rate = VfxValue.Const(4f), maxParticles = 48), - override val space: VfxSimulationSpace = VfxSimulationSpace.WORLD, - override val inheritRotation: Boolean = true, - override val inheritScale: Boolean = false, - override val shape: VfxShape = VfxShape(), - override val spawn: VfxSpawn = VfxSpawn(), - override val appearance: VfxAppearance = VfxAppearance(size = VfxVec3Value.all(1f)), - override val motion: VfxMotion = VfxMotion(), - override val modules: List = emptyList(), - override val maxStep: Float = DEFAULT_MAX_STEP, - val model: String = "", - /** Turns the model along the direction it travels, on top of the authored rotation. */ - val alignToVelocity: Boolean = false, - val emissive: Boolean = false, -) : VfxEmitterSpec() { - override fun withCommon( - id: String, - name: String, - enabled: Boolean, - transform: VfxTransform, - children: List, - ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) - - override fun withEmitter( - emission: VfxEmission, - space: VfxSimulationSpace, - inheritRotation: Boolean, - inheritScale: Boolean, - shape: VfxShape, - spawn: VfxSpawn, - appearance: VfxAppearance, - motion: VfxMotion, - modules: List, - maxStep: Float, - ) = copy( - emission = emission, - space = space, - inheritRotation = inheritRotation, - inheritScale = inheritScale, - shape = shape, - spawn = spawn, - appearance = appearance, - motion = motion, - modules = modules, - maxStep = maxStep, - ) -} - -internal const val DEFAULT_MAX_STEP = 1f / 60f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt index 399a2b50f..f13eee176 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt @@ -20,13 +20,13 @@ sealed interface VfxValue { @SerialName("range") data class Range(val from: Float = 0f, val to: Float = 1f) : VfxValue - /** A curve read at [source], scaled by [scale]. */ + /** A curve read at [input], scaled by [scale]. */ @Serializable @SerialName("curve") data class OverTime( val curve: VfxCurve = VfxCurve(), val scale: Float = 1f, - val source: VfxTimeSource = VfxTimeSource.LIFETIME, + val input: VfxCurveInput = VfxCurveInput.LIFETIME, ) : VfxValue /** An expression in the VFX dialect, such as `p.speed * 0.5` or `d.charge`. */ @@ -47,11 +47,13 @@ sealed interface VfxValue { } /** - * What the horizontal axis of a curve means. + * What the horizontal axis of a curve or a gradient reads. */ @Serializable -enum class VfxTimeSource { - /** Age over lifetime, 0 at birth and 1 as the particle dies. The usual choice. */ +enum class VfxCurveInput { + /** + * Age over lifetime, 0 at birth and 1 as the particle dies. + */ LIFETIME, /** Age in seconds, for effects that should not stretch with lifetime. */ @@ -247,7 +249,7 @@ sealed interface VfxColorValue { @SerialName("gradient") data class Gradient( val gradient: VfxGradient = VfxGradient.fade(), - val source: VfxTimeSource = VfxTimeSource.LIFETIME, + val input: VfxCurveInput = VfxCurveInput.LIFETIME, ) : VfxColorValue /** Per-channel values, for colors that follow something the other shapes cannot reach. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt index 1be275391..9ba940a48 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/IrisHelper.kt @@ -9,18 +9,15 @@ import net.irisshaders.iris.pipeline.WorldRenderingPipeline import net.irisshaders.iris.shaderpack.loading.ProgramId import net.irisshaders.iris.shaderpack.properties.ShaderProperties import net.irisshaders.iris.uniforms.CapturedRenderingState -import net.minecraft.client.renderer.ShaderInstance import org.joml.Matrix4f import ru.hollowhorizon.hollowengine.client.models.internal.rendering.ModelInstancingBackend import ru.hollowhorizon.hollowengine.client.models.internal.rendering.PipelineRenderer import ru.hollowhorizon.hollowengine.client.utils.InstancingEntityInfo -import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadRenderer import ru.hollowhorizon.hollowengine.common.utils.ModList import ru.hollowhorizon.hollowengine.fabric.internal.accessors.IrisRenderingPipelineAccessor import ru.hollowhorizon.hollowengine.fabric.internal.accessors.ProgramSourceAccessor import ru.hollowhorizon.hollowengine.fabric.internal.rendering.IrisInstancingBackend import ru.hollowhorizon.hollowengine.fabric.internal.rendering.IrisInstancingPrograms -import ru.hollowhorizon.hollowengine.fabric.internal.rendering.IrisParticlePrograms object IrisHelper { @JvmStatic @@ -71,8 +68,6 @@ object IrisHelper { fun instancingBackend(): ModelInstancingBackend = IrisInstancingBackend - fun particleShader(translucent: Boolean): ShaderInstance? = IrisParticlePrograms.shaderFor(translucent) - fun capturedEntityInfo(): InstancingEntityInfo = InstancingEntityInfo( entity = CapturedRenderingState.INSTANCE.currentRenderedEntity, blockEntity = CapturedRenderingState.INSTANCE.currentRenderedBlockEntity, @@ -82,8 +77,6 @@ object IrisHelper { @JvmStatic fun invalidateInstancingPrograms() { IrisInstancingPrograms.invalidate() - IrisParticlePrograms.invalidate() - VfxQuadRenderer.invalidate() PipelineRenderer.invalidateRuntimeInstancedBindings() } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt deleted file mode 100644 index f8024fc17..000000000 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/fabric/internal/rendering/IrisParticlePrograms.kt +++ /dev/null @@ -1,144 +0,0 @@ -package ru.hollowhorizon.hollowengine.fabric.internal.rendering - -import com.mojang.blaze3d.vertex.DefaultVertexFormat -import net.irisshaders.iris.gl.blending.AlphaTests -import net.irisshaders.iris.gl.state.FogMode -import net.irisshaders.iris.pipeline.IrisRenderingPipeline -import net.irisshaders.iris.shaderpack.loading.ProgramId -import net.irisshaders.iris.shaderpack.programs.ProgramFallbackResolver -import net.irisshaders.iris.shaderpack.programs.ProgramSource -import net.minecraft.client.renderer.ShaderInstance -import ru.hollowhorizon.hollowengine.LOGGER -import ru.hollowhorizon.hollowengine.fabric.internal.IrisHelper -import ru.hollowhorizon.hollowengine.fabric.internal.accessors.IrisRenderingPipelineAccessor -import ru.hollowhorizon.hollowengine.fabric.internal.accessors.ProgramSourceAccessor - -/** - * The shader pack's own particle programs, patched to read effect particles as instances. - */ -object IrisParticlePrograms { - private var pipeline: IrisRenderingPipeline? = null - private val programs = HashMap() - private val failures = HashSet() - private var counter = 0 - - fun shaderFor(translucent: Boolean): ShaderInstance? { - val current = IrisHelper.currentPipeline() as? IrisRenderingPipeline ?: return null - if (pipeline !== current) { - invalidate() - pipeline = current - } - - programs[translucent]?.let { return it } - if (translucent in failures) return null - - val created = create(current, translucent) - if (created == null) failures += translucent else programs[translucent] = created - return created - } - - fun invalidate() { - programs.clear() - failures.clear() - pipeline = null - } - - private fun create(pipeline: IrisRenderingPipeline, translucent: Boolean): ShaderInstance? { - val accessor = pipeline as? IrisRenderingPipelineAccessor ?: return null - val programId = if (translucent) ProgramId.ParticlesTrans else ProgramId.Particles - val source = ProgramFallbackResolver(accessor.programSet).resolve(programId).orElse(null) ?: return null - val vertex = source.vertexSource.orElse(null)?.let(IrisParticleShaderPatcher::patch) ?: return null - - return try { - accessor.`hollowengine$createShader`( - "hollowengine_vfx_particles_${if (translucent) "trans" else "solid"}_${counter++}", - recreate(source, vertex), - programId, - AlphaTests.ONE_TENTH_ALPHA, - DefaultVertexFormat.PARTICLE, - FogMode.PER_VERTEX, - false, - false, - false, - false, - false, - ) - } catch (t: Throwable) { - LOGGER.warn("HollowEngine Iris particles: failed to compile the {} program", programId, t) - null - } - } - - private fun recreate(source: ProgramSource, vertex: String): ProgramSource { - val accessor = source as ProgramSourceAccessor - return ProgramSource( - source.name + "_hollowengine_vfx", - vertex, - source.geometrySource.orElse(null), - source.tessControlSource.orElse(null), - source.tessEvalSource.orElse(null), - source.fragmentSource.orElse(null), - source.parent, - accessor.shaderPropertiesValue, - accessor.blendModeOverrideValue, - ) - } -} - -/** - * Rewrites a pack particle vertex shader to build its quad from instance data. - */ -object IrisParticleShaderPatcher { - private val versionPattern = Regex("#version\\s+(\\d+)([^\\n]*)") - private val extensionPattern = Regex("(?m)^\\s*#extension[^\\n]*$") - private val coreInputPattern = - Regex("(?m)^\\s*(in|attribute)\\s+\\w+\\s+(vaPosition|vaColor|vaUV0|vaUV1|vaUV2|vaNormal)\\s*;\\s*$") - - fun patch(source: String): String { - val match = versionPattern.find(source) ?: return source - val version = match.groupValues[1].toIntOrNull() ?: return source - val input = if (version >= 130) "in" else "attribute" - - val header = buildString { - appendLine() - appendLine("$input vec3 Position;") - appendLine("$input vec2 UV0;") - appendLine("$input vec3 InstanceCenter;") - appendLine("$input vec3 InstanceRight;") - appendLine("$input vec3 InstanceUp;") - appendLine("$input vec4 InstanceColor;") - appendLine("$input vec4 InstanceUv;") - appendLine("$input vec2 InstanceLight;") - appendLine("vec3 _he_Position() {") - appendLine(" return InstanceCenter + InstanceRight * Position.x + InstanceUp * Position.y;") - appendLine("}") - appendLine("vec2 _he_Uv() {") - appendLine(" return InstanceUv.xy + UV0 * InstanceUv.zw;") - appendLine("}") - } - - val body = coreInputPattern.replace(source, "") - val insertion = extensionPattern.findAll(body).lastOrNull()?.range?.last?.plus(1) - ?: (versionPattern.find(body)!!.range.last + 1) - var patched = body.substring(0, insertion) + header + body.substring(insertion) - - patched = patched.replace("ftransform()", "(gl_ModelViewProjectionMatrix * vec4(_he_Position(), 1.0))") - patched = replaceToken(patched, "gl_Vertex", "vec4(_he_Position(), 1.0)") - patched = replaceToken(patched, "gl_Color", "InstanceColor") - patched = replaceToken(patched, "gl_MultiTexCoord0", "vec4(_he_Uv(), 0.0, 1.0)") - patched = replaceToken(patched, "gl_MultiTexCoord1", "vec4(InstanceLight, 0.0, 1.0)") - patched = replaceToken(patched, "gl_MultiTexCoord2", "vec4(InstanceLight, 0.0, 1.0)") - patched = replaceToken(patched, "gl_Normal", "vec3(0.0, 0.0, 1.0)") - - patched = replaceToken(patched, "vaPosition", "_he_Position()") - patched = replaceToken(patched, "vaColor", "InstanceColor") - patched = replaceToken(patched, "vaUV0", "_he_Uv()") - patched = replaceToken(patched, "vaUV1", "ivec2(0, 10)") - patched = replaceToken(patched, "vaUV2", "ivec2(InstanceLight)") - patched = replaceToken(patched, "vaNormal", "vec3(0.0, 0.0, 1.0)") - return patched - } - - private fun replaceToken(source: String, token: String, replacement: String): String = - Regex("(? + +uniform sampler2D Sampler0; + +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform float BlendMode; + +in vec4 vertexColor; +in vec2 texCoord0; +in float vertexDistance; + +out vec4 fragColor; + +void main() { + vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator; + int mode = int(BlendMode + 0.5); + + if (mode == 2) { + if (color.a < 0.5) discard; + color.a = 1.0; + } else if (color.a < 0.01) { + discard; + } + + color.a *= linear_fog_fade(vertexDistance, FogStart, FogEnd); + fragColor = color; +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json new file mode 100644 index 000000000..c7420f584 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json @@ -0,0 +1,35 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "hollowengine:vfx_mesh", + "fragment": "hollowengine:vfx_mesh", + "attributes": [ + "Position", + "UV0", + "Normal", + "InstanceX", + "InstanceY", + "InstanceZ", + "InstanceOrigin", + "InstanceColor", + "InstanceUv", + "InstanceLight" + ], + "samplers": [ + { "name": "Sampler0" }, + { "name": "Sampler2" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, + { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }, + { "name": "Shaded", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "BlendMode", "type": "float", "count": 1, "values": [ 0.0 ] } + ] +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.vsh new file mode 100644 index 000000000..270b9ecc7 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.vsh @@ -0,0 +1,46 @@ +#version 150 + +in vec3 Position; +in vec2 UV0; +in vec3 Normal; + +in vec3 InstanceX; +in vec3 InstanceY; +in vec3 InstanceZ; +in vec3 InstanceOrigin; +in vec4 InstanceColor; +in vec4 InstanceUv; +in vec2 InstanceLight; + +uniform sampler2D Sampler2; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform int FogShape; +uniform float Shaded; + +out vec4 vertexColor; +out vec2 texCoord0; +out float vertexDistance; + +float view_fog_distance(vec3 viewPos, int fogShape) { + if (fogShape == 0) { + return length(viewPos); + } + return max(length(viewPos.xz), abs(viewPos.y)); +} + +void main() { + mat3 basis = mat3(InstanceX, InstanceY, InstanceZ); + vec3 position = InstanceOrigin + basis * Position; + vec3 normal = normalize(basis * Normal); + + vec4 viewPos = ModelViewMat * vec4(position, 1.0); + gl_Position = ProjMat * viewPos; + vertexDistance = view_fog_distance(viewPos.xyz, FogShape); + + float shade = mix(1.0, 0.72 + 0.28 * (normal.y * 0.5 + 0.5), Shaded); + vec4 light = texelFetch(Sampler2, ivec2(InstanceLight) / 16, 0); + vertexColor = InstanceColor * vec4(light.rgb * shade, light.a); + texCoord0 = InstanceUv.xy + UV0 * InstanceUv.zw; +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh index 9c082d8ce..ff3348828 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh @@ -7,7 +7,6 @@ uniform sampler2D Sampler0; uniform vec4 ColorModulator; uniform float FogStart; uniform float FogEnd; -uniform vec4 FogColor; uniform float AlphaCutoff; in vec4 vertexColor; diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json index 0ce58816d..c1e947db7 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json @@ -27,7 +27,6 @@ { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, - { "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] }, { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }, { "name": "AlphaCutoff", "type": "float", "count": 1, "values": [ 0.01 ] } ] diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh new file mode 100644 index 000000000..a79e15470 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh @@ -0,0 +1,31 @@ +#version 150 + +#moj_import + +uniform sampler2D Sampler0; + +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform float BlendMode; + +in vec4 vertexColor; +in vec2 texCoord0; +in float vertexDistance; + +out vec4 fragColor; + +void main() { + vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator; + int mode = int(BlendMode + 0.5); + + if (mode == 2) { + if (color.a < 0.5) discard; + color.a = 1.0; + } else if (color.a < 0.01) { + discard; + } + + color.a *= linear_fog_fade(vertexDistance, FogStart, FogEnd); + fragColor = color; +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json new file mode 100644 index 000000000..bb00720d4 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json @@ -0,0 +1,28 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "hollowengine:vfx_ribbon", + "fragment": "hollowengine:vfx_ribbon", + "attributes": [ + "Position", + "UV0", + "Color", + "UV2" + ], + "samplers": [ + { "name": "Sampler0" }, + { "name": "Sampler2" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, + { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }, + { "name": "BlendMode", "type": "float", "count": 1, "values": [ 0.0 ] } + ] +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.vsh new file mode 100644 index 000000000..69505db74 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.vsh @@ -0,0 +1,31 @@ +#version 150 + +in vec3 Position; +in vec2 UV0; +in vec4 Color; +in ivec2 UV2; + +uniform sampler2D Sampler2; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform int FogShape; + +out vec4 vertexColor; +out vec2 texCoord0; +out float vertexDistance; + +float view_fog_distance(vec3 viewPos, int fogShape) { + if (fogShape == 0) { + return length(viewPos); + } + return max(length(viewPos.xz), abs(viewPos.y)); +} + +void main() { + vec4 viewPos = ModelViewMat * vec4(Position, 1.0); + gl_Position = ProjMat * viewPos; + vertexDistance = view_fog_distance(viewPos.xyz, FogShape); + vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0); + texCoord0 = UV0; +} diff --git a/runtime/src/main/resources/assets/hollowengine/textures/particle/white.png b/runtime/src/main/resources/assets/hollowengine/textures/particle/white.png new file mode 100644 index 0000000000000000000000000000000000000000..b54e0c463c34649c04ec9b72e691e4bb2db228a0 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1|(O0oL2{=7>k44ofy`glX(e}Nq6*hWMJ6X z&;2Kn70Bl-@Q5sCVBk9p!i>lBSEK+11w36GLnOkJfAq6?i2e94&ro4wfAHm`{ojCc N44$rjF6*2UngEp!Ag%xa literal 0 HcmV?d00001 diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx index 4ebfb3658..b249000c0 100644 --- a/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx +++ b/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx @@ -1,7 +1,7 @@ { "nodes": [ { - "type": "hollowengine:vfx/quad_emitter", + "type": "hollowengine:vfx/emitter", "id": "flame", "name": "Flame", "transform": { @@ -11,6 +11,15 @@ 0.0 ] }, + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "flame-plane", + "material": { + "blend": "ADDITIVE" + } + } + ], "emission": { "rate": { "type": "const", @@ -137,13 +146,10 @@ }, "scrollSpeed": 0.8 } - ], - "material": { - "blend": "ADDITIVE" - } + ] }, { - "type": "hollowengine:vfx/quad_emitter", + "type": "hollowengine:vfx/emitter", "id": "smoke", "name": "Smoke", "transform": { @@ -153,6 +159,15 @@ 0.0 ] }, + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "smoke-plane", + "material": { + "lighting": "WORLD" + } + } + ], "emission": { "rate": { "type": "const", @@ -259,10 +274,7 @@ }, "scrollSpeed": 0.3 } - ], - "material": { - "lighting": "WORLD" - } + ] } ], "timeline": { diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx new file mode 100644 index 000000000..f4c5285b4 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx @@ -0,0 +1,743 @@ +{ + "nodes": [ + { + "type": "hollowengine:vfx/group", + "id": "explosion", + "name": "Explosion", + "transform": { + "position": [ + 0.0, + 0.5, + 0.0 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/group", + "id": "core", + "name": "Core", + "children": [ + { + "type": "hollowengine:vfx/emitter", + "id": "fire", + "name": "Fire", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "fire-plane", + "material": { + "blend": "ADDITIVE" + } + } + ], + "emission": { + "rate": { + "type": "const" + }, + "burst": 60, + "duration": 0.1, + "loopDelay": 2.9, + "maxParticles": 128 + }, + "shape": { + "kind": "SPHERE", + "radius": { + "type": "const", + "value": 0.3 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 0.5 + }, + "speed": { + "type": "range", + "from": 1.5, + "to": 3.5 + } + }, + "appearance": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.4, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "value": 1.1, + "interpolation": "LINEAR" + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.95, + "b": 0.7 + } + }, + { + "position": 0.3, + "color": { + "g": 0.45, + "b": 0.1, + "a": 0.9 + } + }, + { + "position": 1.0, + "color": { + "r": 0.3, + "g": 0.05, + "b": 0.02, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": -0.8 + }, + "drag": { + "type": "const", + "value": 2.5 + } + } + }, + { + "type": "hollowengine:vfx/emitter", + "id": "sparks", + "name": "Sparks", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "sparks-plane", + "transform": { + "scale": [ + 1.0, + 4.0, + 1.0 + ] + }, + "material": { + "blend": "ADDITIVE" + }, + "facing": "VELOCITY" + }, + { + "type": "hollowengine:vfx/trail", + "id": "sparks-trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.7, + "b": 0.3, + "a": 0.8 + } + }, + { + "position": 1.0, + "color": { + "g": 0.3, + "b": 0.05, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.04, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.25, + "maxPoints": 12 + } + ], + "emission": { + "rate": { + "type": "const" + }, + "burst": 80, + "duration": 0.1, + "loopDelay": 2.9, + "maxParticles": 128 + }, + "shape": { + "kind": "SPHERE", + "radius": { + "type": "const", + "value": 0.1 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 0.6, + "to": 1.4 + }, + "speed": { + "type": "range", + "from": 5.0, + "to": 10.0 + } + }, + "appearance": { + "size": { + "x": { + "type": "const", + "value": 0.06 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.9, + "b": 0.5 + } + }, + { + "position": 1.0, + "color": { + "g": 0.4, + "b": 0.1, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": 9.0 + }, + "drag": { + "type": "const", + "value": 0.6 + } + }, + "modules": [ + { + "type": "hollowengine:vfx/collision", + "bounce": 0.35 + } + ] + }, + { + "type": "hollowengine:vfx/sphere", + "id": "flash", + "name": "Flash", + "transform": { + "scale": [ + 0.1, + 0.1, + 0.1 + ] + }, + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "g": 0.8, + "b": 0.4 + } + } + } + ] + }, + { + "type": "hollowengine:vfx/emitter", + "id": "smoke", + "name": "Smoke", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "smoke-plane", + "material": { + "lighting": "WORLD" + } + } + ], + "emission": { + "rate": { + "type": "const" + }, + "burst": 25, + "duration": 0.1, + "loopDelay": 2.9, + "maxParticles": 64 + }, + "shape": { + "kind": "SPHERE", + "radius": { + "type": "const", + "value": 0.6 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.5, + "to": 2.5 + }, + "speed": { + "type": "range", + "from": 0.3 + } + }, + "appearance": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.6, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "value": 1.8, + "interpolation": "LINEAR" + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.25, + "g": 0.23, + "b": 0.22, + "a": 0.0 + } + }, + { + "position": 0.1, + "color": { + "r": 0.25, + "g": 0.23, + "b": 0.22, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.3, + "g": 0.3, + "b": 0.3, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": -0.3 + }, + "drag": { + "type": "const", + "value": 1.0 + } + }, + "modules": [ + { + "type": "hollowengine:vfx/noise", + "strength": { + "type": "const", + "value": 0.6 + } + } + ] + }, + { + "type": "hollowengine:vfx/cylinder", + "id": "shockwave", + "name": "Shockwave", + "transform": { + "position": [ + 0.0, + -0.45, + 0.0 + ], + "scale": [ + 0.2, + 0.05, + 0.2 + ] + }, + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.9, + "g": 0.85, + "a": 0.8 + } + }, + "segments": 48, + "caps": false + }, + { + "type": "hollowengine:vfx/post_effect", + "id": "impact", + "name": "Impact", + "shader": "hollowengine:vfx/post/impact", + "uniforms": [ + { + "name": "Strength" + }, + { + "name": "Threshold", + "value": { + "type": "float", + "value": { + "type": "const", + "value": 0.35 + } + } + }, + { + "name": "Invert" + } + ] + }, + { + "type": "hollowengine:vfx/camera_shake", + "id": "shake", + "strength": { + "type": "expr", + "source": "max(0, 1 - p.age * 1.6) * clamp(1 - n.camera_distance / 32, 0, 1) * 1.5" + } + } + ] + } + ], + "timeline": { + "duration": 3.0, + "tracks": [ + { + "node": "flash", + "property": "transform.scale", + "curves": [ + { + "keys": [ + { + "value": 0.1, + "interpolation": "LINEAR" + }, + { + "time": 0.12, + "value": 2.2, + "interpolation": "LINEAR" + }, + { + "time": 0.4, + "value": 2.6, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 1, + "keys": [ + { + "value": 0.1, + "interpolation": "LINEAR" + }, + { + "time": 0.12, + "value": 2.2, + "interpolation": "LINEAR" + }, + { + "time": 0.4, + "value": 2.6, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 2, + "keys": [ + { + "value": 0.1, + "interpolation": "LINEAR" + }, + { + "time": 0.12, + "value": 2.2, + "interpolation": "LINEAR" + }, + { + "time": 0.4, + "value": 2.6, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "flash", + "property": "tint", + "curves": [ + { + "channel": 3, + "keys": [ + { + "value": 1.0, + "interpolation": "LINEAR" + }, + { + "time": 0.12, + "value": 0.9, + "interpolation": "LINEAR" + }, + { + "time": 0.45, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "shockwave", + "property": "transform.scale", + "curves": [ + { + "keys": [ + { + "value": 0.2, + "interpolation": "LINEAR" + }, + { + "time": 0.5, + "value": 6.0, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 1, + "keys": [ + { + "value": 0.05, + "interpolation": "LINEAR" + }, + { + "time": 0.5, + "value": 0.02, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 2, + "keys": [ + { + "value": 0.2, + "interpolation": "LINEAR" + }, + { + "time": 0.5, + "value": 6.0, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "shockwave", + "property": "tint", + "curves": [ + { + "channel": 3, + "keys": [ + { + "value": 0.8, + "interpolation": "LINEAR" + }, + { + "time": 0.5, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "impact", + "property": "uniforms.Strength", + "curves": [ + { + "keys": [ + { + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.08, + "interpolation": "CONSTANT" + } + ] + } + ] + }, + { + "node": "impact", + "property": "uniforms.Invert", + "curves": [ + { + "keys": [ + { + "interpolation": "CONSTANT" + }, + { + "time": 0.04, + "value": 1.0, + "interpolation": "CONSTANT" + } + ] + } + ] + }, + { + "node": "impact", + "curves": [ + { + "keys": [ + { + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.08, + "interpolation": "CONSTANT" + } + ] + } + ] + }, + { + "node": "flash", + "curves": [ + { + "keys": [ + { + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.45, + "interpolation": "CONSTANT" + } + ] + } + ] + }, + { + "node": "shockwave", + "curves": [ + { + "keys": [ + { + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.5, + "interpolation": "CONSTANT" + } + ] + } + ] + } + ] + } +} diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx new file mode 100644 index 000000000..261e050a3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx @@ -0,0 +1,517 @@ +{ + "nodes": [ + { + "type": "hollowengine:vfx/group", + "id": "source", + "name": "Source", + "transform": { + "position": [ + 0.0, + 3.0, + 0.0 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/emitter", + "id": "cloud", + "name": "Cloud", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "cloud-plane" + } + ], + "emission": { + "rate": { + "type": "const", + "value": 12.0 + }, + "duration": 0.0, + "maxParticles": 48 + }, + "shape": { + "kind": "SPHERE", + "radius": { + "type": "const", + "value": 0.6 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.5, + "to": 2.5 + }, + "speed": { + "type": "range", + "from": 0.05, + "to": 0.2 + } + }, + "appearance": { + "size": { + "x": { + "type": "range", + "from": 0.8, + "to": 1.4 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.15, + "g": 0.15, + "b": 0.2, + "a": 0.0 + } + }, + { + "position": 0.3, + "color": { + "r": 0.15, + "g": 0.15, + "b": 0.2, + "a": 0.6 + } + }, + { + "position": 1.0, + "color": { + "r": 0.15, + "g": 0.15, + "b": 0.2, + "a": 0.0 + } + } + ] + } + } + } + } + ] + }, + { + "type": "hollowengine:vfx/beam", + "id": "bolt", + "name": "Bolt", + "tint": { + "type": "solid", + "color": { + "r": 0.75, + "g": 0.85 + } + }, + "target": "source", + "width": { + "type": "const", + "value": 0.12 + }, + "segments": 40, + "noise": { + "type": "const", + "value": 0.5 + }, + "noiseFrequency": 2.5, + "noiseSpeed": 12.0 + }, + { + "type": "hollowengine:vfx/beam", + "id": "branch", + "name": "Branch", + "transform": { + "position": [ + 0.0, + 1.5, + 0.0 + ] + }, + "tint": { + "type": "solid", + "color": { + "r": 0.75, + "g": 0.85 + } + }, + "end": [ + 0.9, + -1.2, + 0.4 + ], + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.06, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "value": 0.01, + "interpolation": "LINEAR" + } + ] + } + }, + "segments": 20, + "noise": { + "type": "const", + "value": 0.3 + }, + "noiseFrequency": 3.0, + "noiseSpeed": 12.0 + }, + { + "type": "hollowengine:vfx/emitter", + "id": "sparks", + "name": "Sparks", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "sparks-plane", + "transform": { + "scale": [ + 1.0, + 3.0, + 1.0 + ] + }, + "material": { + "blend": "ADDITIVE" + }, + "facing": "VELOCITY" + }, + { + "type": "hollowengine:vfx/trail", + "id": "sparks-trail", + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.03, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.2, + "maxPoints": 10 + } + ], + "emission": { + "rate": { + "type": "const" + }, + "burst": 40, + "duration": 0.1, + "loopDelay": 1.9, + "maxParticles": 64 + }, + "shape": { + "kind": "SPHERE", + "radius": { + "type": "const", + "value": 0.05 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 0.4, + "to": 0.9 + }, + "speed": { + "type": "range", + "from": 2.0, + "to": 5.0 + } + }, + "appearance": { + "size": { + "x": { + "type": "const", + "value": 0.05 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.75, + "g": 0.85 + } + }, + { + "position": 1.0, + "color": { + "r": 0.75, + "g": 0.85, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": 8.0 + } + }, + "modules": [ + { + "type": "hollowengine:vfx/collision", + "bounce": 0.3 + } + ] + }, + { + "type": "hollowengine:vfx/sphere", + "id": "glow", + "name": "Ground Glow", + "transform": { + "scale": [ + 0.1, + 0.1, + 0.1 + ] + }, + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.75, + "g": 0.85 + } + } + }, + { + "type": "hollowengine:vfx/post_effect", + "id": "aberration", + "name": "Aberration", + "shader": "hollowengine:vfx/post/chromatic_aberration", + "uniforms": [ + { + "name": "Strength" + } + ] + }, + { + "type": "hollowengine:vfx/camera_shake", + "id": "shake", + "strength": { + "type": "expr", + "source": "max(0, 1 - p.age * 3) * clamp(1 - n.camera_distance / 24, 0, 1) * 2" + }, + "frequency": { + "type": "const", + "value": 20.0 + }, + "amplitude": [ + 1.2, + 1.2, + 1.5 + ] + } + ], + "timeline": { + "duration": 2.0, + "tracks": [ + { + "node": "bolt", + "curves": [ + { + "keys": [ + { + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.12, + "interpolation": "CONSTANT" + }, + { + "time": 0.2, + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.3, + "interpolation": "CONSTANT" + } + ] + } + ] + }, + { + "node": "branch", + "curves": [ + { + "keys": [ + { + "interpolation": "CONSTANT" + }, + { + "time": 0.2, + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.3, + "interpolation": "CONSTANT" + } + ] + } + ] + }, + { + "node": "glow", + "property": "transform.scale", + "curves": [ + { + "keys": [ + { + "value": 0.1, + "interpolation": "LINEAR" + }, + { + "time": 0.05, + "value": 1.2, + "interpolation": "LINEAR" + }, + { + "time": 0.35, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 1, + "keys": [ + { + "value": 0.1, + "interpolation": "LINEAR" + }, + { + "time": 0.05, + "value": 1.2, + "interpolation": "LINEAR" + }, + { + "time": 0.35, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 2, + "keys": [ + { + "value": 0.1, + "interpolation": "LINEAR" + }, + { + "time": 0.05, + "value": 1.2, + "interpolation": "LINEAR" + }, + { + "time": 0.35, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "aberration", + "property": "uniforms.Strength", + "curves": [ + { + "keys": [ + { + "value": 3.0, + "interpolation": "LINEAR" + }, + { + "time": 0.3, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "aberration", + "curves": [ + { + "keys": [ + { + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.3, + "interpolation": "CONSTANT" + } + ] + } + ] + }, + { + "node": "glow", + "curves": [ + { + "keys": [ + { + "value": 1.0, + "interpolation": "CONSTANT" + }, + { + "time": 0.35, + "interpolation": "CONSTANT" + } + ] + } + ] + } + ] + } +} diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx new file mode 100644 index 000000000..06299bb78 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx @@ -0,0 +1,767 @@ +{ + "nodes": [ + { + "type": "hollowengine:vfx/group", + "id": "circle", + "name": "Magic Circle", + "transform": { + "position": [ + 0.0, + 0.02, + 0.0 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "glow", + "name": "Glow", + "transform": { + "rotation": [ + 90.0, + 0.0, + 0.0 + ], + "scale": [ + 3.2, + 3.2, + 1.0 + ] + }, + "material": { + "blend": "ADDITIVE" + }, + "tint": { + "type": "channels", + "r": { + "type": "const", + "value": 0.3 + }, + "g": { + "type": "const", + "value": 0.6 + }, + "a": { + "type": "expr", + "source": "0.35 + 0.15 * math.sin(e.time * 180)" + } + }, + "facing": "NONE" + }, + { + "type": "hollowengine:vfx/group", + "id": "orbit", + "name": "Orbit", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "rune_0", + "name": "Rune 1", + "transform": { + "position": [ + 1.3, + 0.1, + 0.0 + ], + "scale": [ + 0.35, + 0.35, + 0.35 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/trail", + "id": "rune_0_trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.12, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.6 + } + ], + "material": { + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.4, + "g": 0.75 + } + } + }, + { + "type": "hollowengine:vfx/plane", + "id": "rune_1", + "name": "Rune 2", + "transform": { + "position": [ + 0.65, + 0.1, + 1.125833 + ], + "scale": [ + 0.35, + 0.35, + 0.35 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/trail", + "id": "rune_1_trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.12, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.6 + } + ], + "material": { + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.4, + "g": 0.75 + } + } + }, + { + "type": "hollowengine:vfx/plane", + "id": "rune_2", + "name": "Rune 3", + "transform": { + "position": [ + -0.65, + 0.1, + 1.125833 + ], + "scale": [ + 0.35, + 0.35, + 0.35 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/trail", + "id": "rune_2_trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.12, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.6 + } + ], + "material": { + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.4, + "g": 0.75 + } + } + }, + { + "type": "hollowengine:vfx/plane", + "id": "rune_3", + "name": "Rune 4", + "transform": { + "position": [ + -1.3, + 0.1, + 1.5920408E-16 + ], + "scale": [ + 0.35, + 0.35, + 0.35 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/trail", + "id": "rune_3_trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.12, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.6 + } + ], + "material": { + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.4, + "g": 0.75 + } + } + }, + { + "type": "hollowengine:vfx/plane", + "id": "rune_4", + "name": "Rune 5", + "transform": { + "position": [ + -0.65, + 0.1, + -1.125833 + ], + "scale": [ + 0.35, + 0.35, + 0.35 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/trail", + "id": "rune_4_trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.12, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.6 + } + ], + "material": { + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.4, + "g": 0.75 + } + } + }, + { + "type": "hollowengine:vfx/plane", + "id": "rune_5", + "name": "Rune 6", + "transform": { + "position": [ + 0.65, + 0.1, + -1.125833 + ], + "scale": [ + 0.35, + 0.35, + 0.35 + ] + }, + "children": [ + { + "type": "hollowengine:vfx/trail", + "id": "rune_5_trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.12, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.6 + } + ], + "material": { + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "r": 0.4, + "g": 0.75 + } + } + } + ] + }, + { + "type": "hollowengine:vfx/emitter", + "id": "motes", + "name": "Motes", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "motes-plane", + "material": { + "blend": "ADDITIVE" + } + } + ], + "emission": { + "rate": { + "type": "const", + "value": 25.0 + }, + "duration": 0.0, + "maxParticles": 128 + }, + "space": "LOCAL", + "shape": { + "kind": "DISC", + "radius": { + "type": "const", + "value": 1.3 + }, + "thickness": { + "type": "const" + }, + "directionMode": "FIXED" + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.5, + "to": 2.5 + }, + "speed": { + "type": "range", + "from": 0.3, + "to": 0.6 + } + }, + "appearance": { + "size": { + "x": { + "type": "const", + "value": 0.08 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + }, + { + "position": 0.2, + "color": { + "r": 0.4, + "g": 0.75 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": -0.2 + } + }, + "modules": [ + { + "type": "hollowengine:vfx/noise", + "strength": { + "type": "const", + "value": 0.3 + } + } + ] + }, + { + "type": "hollowengine:vfx/beam", + "id": "arc", + "name": "Arc", + "transform": { + "position": [ + 0.0, + 0.1, + 0.0 + ] + }, + "tint": { + "type": "channels", + "r": { + "type": "const", + "value": 0.6 + }, + "g": { + "type": "const", + "value": 0.85 + }, + "a": { + "type": "expr", + "source": "0.6 + 0.4 * math.sin(e.time * 1440)" + } + }, + "target": "rune_0", + "width": { + "type": "const", + "value": 0.06 + }, + "segments": 32, + "noise": { + "type": "const", + "value": 0.2 + }, + "noiseFrequency": 2.0, + "noiseSpeed": 8.0 + } + ] + }, + { + "type": "hollowengine:vfx/sphere", + "id": "shield", + "name": "Shield", + "transform": { + "position": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 2.4, + 2.4, + 2.4 + ] + }, + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE", + "shader": "hollowengine:vfx/force_field", + "uniforms": [ + { + "name": "FieldColor", + "value": { + "type": "color", + "value": { + "type": "solid", + "color": { + "r": 0.35, + "g": 0.7 + } + } + } + }, + { + "name": "FresnelPower", + "value": { + "type": "float", + "value": { + "type": "const", + "value": 2.5 + } + } + }, + { + "name": "IntersectionWidth", + "value": { + "type": "float", + "value": { + "type": "const", + "value": 0.4 + } + } + } + ] + }, + "segments": 48 + } + ], + "timeline": { + "duration": 4.0, + "tracks": [ + { + "node": "orbit", + "property": "transform.rotation", + "curves": [ + { + "channel": 1, + "keys": [ + { + "interpolation": "LINEAR" + }, + { + "time": 4.0, + "value": 360.0, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "shield", + "property": "transform.scale", + "curves": [ + { + "keys": [ + { + "value": 2.4 + }, + { + "time": 2.0, + "value": 2.7 + }, + { + "time": 4.0, + "value": 2.4 + } + ] + }, + { + "channel": 1, + "keys": [ + { + "value": 2.4 + }, + { + "time": 2.0, + "value": 2.7 + }, + { + "time": 4.0, + "value": 2.4 + } + ] + }, + { + "channel": 2, + "keys": [ + { + "value": 2.4 + }, + { + "time": 2.0, + "value": 2.7 + }, + { + "time": 4.0, + "value": 2.4 + } + ] + } + ] + } + ] + } +} diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx new file mode 100644 index 000000000..9c582b2f3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx @@ -0,0 +1,209 @@ +{ + "nodes": [ + { + "type": "hollowengine:vfx/group", + "id": "figure", + "name": "Figure", + "children": [ + { + "type": "hollowengine:vfx/model", + "id": "body", + "name": "Body", + "model": "hollowengine:models/entity/player_model.gltf" + }, + { + "type": "hollowengine:vfx/emitter", + "id": "soul", + "name": "Soul", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "soul-plane", + "material": { + "blend": "ADDITIVE" + } + }, + { + "type": "hollowengine:vfx/trail", + "id": "soul-trail", + "tint": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.5 + } + }, + { + "position": 1.0, + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.0 + } + } + ] + } + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.03, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "interpolation": "LINEAR" + } + ] + } + }, + "lifetime": 0.4, + "maxPoints": 16 + } + ], + "emission": { + "rate": { + "type": "const", + "value": 60.0 + }, + "duration": 0.0 + }, + "shape": { + "kind": "MODEL", + "model": "hollowengine:models/entity/player_model.gltf" + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.0, + "to": 2.0 + }, + "speed": { + "type": "range", + "from": 0.1, + "to": 0.3 + } + }, + "appearance": { + "size": { + "x": { + "type": "const", + "value": 0.07 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.0 + } + }, + { + "position": 0.2, + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.9 + } + }, + { + "position": 1.0, + "color": { + "r": 0.3, + "g": 0.5, + "a": 0.0 + } + } + ] + } + } + }, + "motion": { + "gravity": { + "type": "const", + "value": -0.6 + }, + "drag": { + "type": "const", + "value": 0.5 + } + } + } + ] + }, + { + "type": "hollowengine:vfx/post_effect", + "id": "grayscale", + "name": "Grayscale", + "uniforms": [ + { + "name": "Strength" + } + ] + } + ], + "timeline": { + "duration": 4.0, + "tracks": [ + { + "node": "figure", + "property": "transform.rotation", + "curves": [ + { + "channel": 1, + "keys": [ + { + "interpolation": "LINEAR" + }, + { + "time": 4.0, + "value": 360.0, + "interpolation": "LINEAR" + } + ] + } + ] + }, + { + "node": "grayscale", + "property": "uniforms.Strength", + "curves": [ + { + "keys": [ + {}, + { + "time": 1.0, + "value": 1.0 + }, + { + "time": 3.0, + "value": 1.0 + }, + { + "time": 4.0 + } + ] + } + ] + } + ] + } +} diff --git a/runtime/src/test/kotlin/VfxFormatTests.kt b/runtime/src/test/kotlin/VfxFormatTests.kt index a9bece0b9..5ee6c8fc6 100644 --- a/runtime/src/test/kotlin/VfxFormatTests.kt +++ b/runtime/src/test/kotlin/VfxFormatTests.kt @@ -1,33 +1,44 @@ import org.junit.jupiter.api.Test +import ru.hollowhorizon.hollowengine.client.vfx.VfxExpressionLanguage import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f import ru.hollowhorizon.hollowengine.common.vfx.VfxAppearance import ru.hollowhorizon.hollowengine.common.vfx.VfxBlend import ru.hollowhorizon.hollowengine.common.vfx.VfxColorValue import ru.hollowhorizon.hollowengine.common.vfx.VfxCurve +import ru.hollowhorizon.hollowengine.common.vfx.VfxCurveInput import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect import ru.hollowhorizon.hollowengine.common.vfx.VfxEmission -import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceKind -import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxFormat import ru.hollowhorizon.hollowengine.common.vfx.VfxGradient import ru.hollowhorizon.hollowengine.common.vfx.VfxGradientStop +import ru.hollowhorizon.hollowengine.common.vfx.VfxGroupSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxKey import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec -import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshEmitterSpec -import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxNoiseSpec -import ru.hollowhorizon.hollowengine.common.vfx.VfxQuadEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPlaneSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPostEffectSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.VfxRgba +import ru.hollowhorizon.hollowengine.common.vfx.VfxSamplerSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxShape import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind import ru.hollowhorizon.hollowengine.common.vfx.VfxSpawn +import ru.hollowhorizon.hollowengine.common.vfx.VfxSphereSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxTimelineSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxTrack import ru.hollowhorizon.hollowengine.common.vfx.VfxTrackCurve +import ru.hollowhorizon.hollowengine.common.vfx.VfxTrailSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxTransform -import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformValue import ru.hollowhorizon.hollowengine.common.vfx.VfxUvRect import ru.hollowhorizon.hollowengine.common.vfx.VfxValue import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceKind +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxForceSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxNoiseSpec +import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec +import java.io.File import kotlin.test.assertEquals import kotlin.test.assertIs import kotlin.test.assertTrue @@ -53,7 +64,7 @@ class VfxFormatTests { @Test fun `a node keeps its modules and their kinds`() { val read = VfxFormat.read(VfxFormat.write(sample())) - val emitter = assertIs(read.nodes.first()) + val emitter = assertIs(read.nodes.first().children.first()) assertEquals(3, emitter.modules.size) val swirl = assertIs(emitter.modules[0]) @@ -63,12 +74,20 @@ class VfxFormatTests { } @Test - fun `a child node survives its parent`() { + fun `renderers keep their place under the emitter`() { val read = VfxFormat.read(VfxFormat.write(sample())) - val child = read.nodes.first().children.single() + val emitter = read.nodes.first().children.first() + + assertIs(emitter.children[0]) + assertIs(emitter.children[1]) + assertEquals(emitter, read.parentOf("flame-plane")) + } + + @Test + fun `a track names its property by id`() { + val text = VfxFormat.write(sample()) - assertIs(child) - assertEquals("sparks", child.id) + assertTrue("\"property\": \"uniforms.FieldColor\"" in text, "A property id is not written as a plain string") } @Test @@ -77,80 +96,120 @@ class VfxFormatTests { } @Test - fun `the shipped example reads`() { - val text = javaClass.classLoader.getResource(EXAMPLE_PATH)?.readText() - ?: error("The example effect is missing from the resources: $EXAMPLE_PATH") + fun `the shipped effects read and compile`() { + val folder = javaClass.classLoader.getResource(EXAMPLES_PATH)?.toURI()?.let(::File) + ?: error("The example effects are missing from the resources: $EXAMPLES_PATH") + val files = folder.listFiles { file -> file.name.endsWith(VfxFormat.EXTENSION) }.orEmpty() + assertTrue(files.isNotEmpty(), "No example effects in $EXAMPLES_PATH") - val effect = VfxFormat.read(text) + files.forEach { file -> + val text = file.readText() + val effect = VfxFormat.read(text) - assertTrue(effect.nodes.isNotEmpty(), "The example effect has no nodes") - assertTrue(effect.expressions().isEmpty() || effect.expressions().all { it.isNotBlank() }) - assertEquals(text.trim(), VfxFormat.write(effect).trim(), "The example is not in canonical form") + assertTrue(effect.nodes.isNotEmpty(), "${file.name} has no nodes") + assertEquals(text.trim(), VfxFormat.write(effect).trim(), "${file.name} is not in canonical form") + + val sources = effect.expressions() + if (sources.isEmpty()) return@forEach + val diagnostics = VfxExpressionLanguage.compile(sources).diagnostics + assertTrue(diagnostics.isEmpty(), "${file.name} has expressions that do not compile: $diagnostics") + } } private fun sample() = VfxEffect( nodes = listOf( - VfxQuadEmitterSpec( - id = "flame", - name = "Flame", + VfxGroupSpec( + id = "core", + name = "Core", transform = VfxTransform(position = Vec3f(0f, 0.25f, 0f)), - emission = VfxEmission(rate = VfxValue.Const(40f), burst = 3, duration = 0f), - shape = VfxShape( - kind = VfxShapeKind.CONE, - radius = VfxValue.Expr("0.1 + e.age * 0.05"), - angle = VfxValue.Const(12f), - ), - spawn = VfxSpawn( - lifetime = VfxValue.Range(0.4f, 0.9f), - speed = VfxValue.Range(0.5f, 1.2f), - ), - appearance = VfxAppearance( - size = VfxVec3Value( - VfxValue.OverTime(VfxCurve(listOf(VfxKey(0f, 0.2f), VfxKey(1f, 0f)))), - VfxValue.ONE, - VfxValue.ONE, - ), - color = VfxColorValue.Gradient( - VfxGradient( - listOf( - VfxGradientStop(0f, VfxRgba(1f, 1f, 1f, 1f)), - VfxGradientStop(1f, VfxRgba(1f, 0.2f, 0f, 0f)), - ) - ) - ), - ), - material = VfxMaterialSpec(blend = VfxBlend.ADDITIVE, uv = VfxUvRect(0f, 0f, 0.5f, 0.5f)), - modules = listOf( - VfxForceSpec(id = "swirl", kind = VfxForceKind.VORTEX, strength = VfxValue.Expr("p.progress * 2")), - VfxForceSpec(id = "wind", direction = Vec3f(1f, 0f, 0f)), - VfxUvAnimationSpec(columns = 2, rows = 2), - ), - children = listOf(VfxMeshEmitterSpec(id = "sparks", name = "Sparks")), + children = listOf(flame(), field()), ), - VfxQuadEmitterSpec( + VfxEmitterSpec( id = "smoke", name = "Smoke", modules = listOf(VfxNoiseSpec(strength = VfxValue.Const(0.5f))), ), + VfxPostEffectSpec(id = "grey"), ), timeline = VfxTimelineSpec( duration = 3f, tracks = listOf( VfxTrack( node = "smoke", - property = "enabled", + property = VfxProperty.ENABLED, curves = listOf(VfxTrackCurve(keys = listOf(VfxKey(0f, 0f), VfxKey(1f, 1f)))), ), VfxTrack( node = "flame", - property = "modules.swirl.strength", + property = VfxProperty.module("swirl", "strength"), curves = listOf(VfxTrackCurve(keys = listOf(VfxKey(0f, 0f), VfxKey(2f, 3f)))), ), + VfxTrack( + node = "field", + property = VfxProperty.uniform("FieldColor"), + curves = listOf(VfxTrackCurve(channel = 3, keys = listOf(VfxKey(0f, 1f), VfxKey(1f, 0f)))), + ), + ), + ), + ) + + private fun flame() = VfxEmitterSpec( + id = "flame", + name = "Flame", + emission = VfxEmission(rate = VfxValue.Const(40f), burst = 3, duration = 0f), + shape = VfxShape( + kind = VfxShapeKind.CONE, + radius = VfxValue.Expr("0.1 + e.age * 0.05"), + angle = VfxValue.Const(12f), + ), + spawn = VfxSpawn( + lifetime = VfxValue.Range(0.4f, 0.9f), + speed = VfxValue.Range(0.5f, 1.2f), + ), + appearance = VfxAppearance( + size = VfxVec3Value( + VfxValue.OverTime(VfxCurve(listOf(VfxKey(0f, 0.2f), VfxKey(1f, 0f))), input = VfxCurveInput.SPEED), + VfxValue.ONE, + VfxValue.ONE, + ), + color = VfxColorValue.Gradient( + VfxGradient( + listOf( + VfxGradientStop(0f, VfxRgba(1f, 1f, 1f, 1f)), + VfxGradientStop(1f, VfxRgba(1f, 0.2f, 0f, 0f)), + ) + ) + ), + ), + modules = listOf( + VfxForceSpec(id = "swirl", kind = VfxForceKind.VORTEX, strength = VfxValue.Expr("p.progress * 2")), + VfxForceSpec(id = "wind", direction = Vec3f(1f, 0f, 0f)), + VfxUvAnimationSpec(columns = 2, rows = 2), + ), + children = listOf( + VfxPlaneSpec( + id = "flame-plane", + material = VfxMaterialSpec(blend = VfxBlend.ADDITIVE, uv = VfxUvRect(0f, 0f, 0.5f, 0.5f)), + ), + VfxTrailSpec(id = "flame-trail", maxPoints = 12), + ), + ) + + private fun field() = VfxSphereSpec( + id = "field", + segments = 32, + material = VfxMaterialSpec( + shader = "hollowengine:vfx/force_field", + uniforms = listOf( + VfxUniformSpec("FieldColor", VfxUniformValue.Color(VfxColorValue.Solid(VfxRgba(0.3f, 0.7f, 1f)))), + VfxUniformSpec("FresnelPower", VfxUniformValue.Scalar(VfxValue.Expr("2 + n.camera_distance"))), + VfxUniformSpec("Offset", VfxUniformValue.Vector(VfxVec3Value.all(0.5f))), ), + samplers = listOf(VfxSamplerSpec("Pattern", "hollowengine:textures/particle/circle.png")), ), ) private companion object { - const val EXAMPLE_PATH = "assets/hollowengine/vfx/example.vfx" + const val EXAMPLES_PATH = "assets/hollowengine/vfx" } } From df0cfb92a0fa68cf24ff7370a6d0b69a0cabb358 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 12:16:07 +0300 Subject: [PATCH 05/25] Refactor VFX editor, gizmo & particle look Large refactor and feature work across the IDE, VFX system and gizmo code. Highlights: - Make gizmo projection/manipulation instance-based (GizmoProjector, GizmoGeometry, GizmoManipulator) and add GizmoRenderer. - Add VfxTransformGizmo for preview-panel transforms and VfxMaterialPreview component. - Introduce VfxParticleLook (per-renderer particle look buffer) and adapt VfxEmitter/VfxParticles/renderers to use look channels. - Move asset picker/asset-path field and diagnostics into inspector; add AssetPickerDialog and UI host wiring. - Timeline and inspector UI polish: new icons, styles, controls (jump-to-key, frame-fit, toolbar improvements). - Add VFX scene tree, node move/duplicate logic and tests; multiple VFX format/data files updated. --- .../client/editor/GizmoGeometry.kt | 62 +-- .../client/editor/GizmoManipulator.kt | 25 +- .../client/editor/GizmoRenderer.kt | 109 ++++ .../client/editor/TransformGizmoEditor.kt | 102 +--- .../client/editor/WorldInspector.kt | 5 +- .../client/editor/WorldToScreenProjector.kt | 38 +- .../hollowengine/client/ui/UiCompose.kt | 5 +- .../client/ui/entity/EntityEditorDialogs.kt | 65 --- .../client/ui/entity/EntityEditorScreen.kt | 2 +- .../client/ui/entity/EntityEditorSidebar.kt | 2 +- .../client/ui/ide/HollowIdeOverlay.kt | 8 +- .../client/ui/ide/IdeInspectorHost.kt | 42 ++ .../client/ui/ide/IdeSceneHost.kt | 102 ++-- .../client/ui/ide/files/vfx/VfxColorField.kt | 10 +- .../client/ui/ide/files/vfx/VfxCurveDialog.kt | 2 +- .../client/ui/ide/files/vfx/VfxEditorPanel.kt | 179 +++--- .../ui/ide/files/vfx/VfxEmitterInspector.kt | 37 +- .../client/ui/ide/files/vfx/VfxFields.kt | 44 +- .../client/ui/ide/files/vfx/VfxInspector.kt | 163 +++++- .../ui/ide/files/vfx/VfxMaterialPreview.kt | 73 +++ .../ui/ide/files/vfx/VfxModuleInspector.kt | 51 +- .../ui/ide/files/vfx/VfxPreviewGizmo.kt | 46 +- .../ui/ide/files/vfx/VfxPreviewState.kt | 9 +- .../client/ui/ide/files/vfx/VfxSceneTree.kt | 174 ++++++ .../ui/ide/files/vfx/VfxShaderInspector.kt | 87 ++- .../ui/ide/files/vfx/VfxSurfaceInspector.kt | 169 +++--- .../ui/ide/files/vfx/VfxTransformGizmo.kt | 130 +++++ .../ui/ide/timeline/TimelineController.kt | 28 + .../client/ui/ide/timeline/TimelineKeys.kt | 7 +- .../client/ui/ide/timeline/ui/CutsceneLang.kt | 21 +- .../ide/timeline/ui/HollowTimelineChrome.kt | 517 ++++++++++-------- .../ide/timeline/ui/HollowTimelineCurves.kt | 1 + .../ui/ide/timeline/ui/HollowTimelineLanes.kt | 31 +- .../ui/ide/timeline/ui/HollowTimelinePanel.kt | 134 ++--- .../ui/HollowTimelinePropertyDialog.kt | 80 --- .../ide/timeline/ui/HollowTimelineSupport.kt | 40 +- .../ui/ide/timeline/ui/IdeTimelineHost.kt | 6 - .../InspectorAssetTree.kt} | 6 +- .../client/ui/inspector/InspectorAssets.kt | 183 ++++++- .../client/ui/inspector/InspectorFields.kt | 16 +- .../client/ui/inspector/InspectorLang.kt | 8 + .../client/ui/widgets/UiTreeView.kt | 9 +- .../hollowengine/client/vfx/VfxEmitter.kt | 58 +- .../client/vfx/VfxParticleLook.kt | 94 ++++ .../hollowengine/client/vfx/VfxParticles.kt | 27 +- .../client/vfx/render/VfxDrawList.kt | 6 +- .../client/vfx/render/VfxDraws.kt | 16 +- .../client/vfx/render/VfxMeshRenderer.kt | 25 +- .../client/vfx/render/VfxQuadPacker.kt | 44 +- .../client/vfx/render/VfxRibbons.kt | 10 +- .../client/vfx/render/VfxSurfaceNodes.kt | 38 +- .../hollowengine/common/vfx/VfxEffect.kt | 62 +++ .../hollowengine/common/vfx/VfxEmitterSpec.kt | 23 - .../hollowengine/common/vfx/VfxNodes.kt | 28 +- .../hollowengine/common/vfx/VfxRegistries.kt | 22 +- .../common/vfx/VfxRendererSpecs.kt | 38 +- .../en_us/hollowengine/gui/ide/cutscene.json | 22 +- .../en_us/hollowengine/gui/inspector.json | 5 + .../main/lang/en_us/hollowengine/gui/vfx.json | 16 +- .../ru_ru/hollowengine/gui/ide/cutscene.json | 22 +- .../ru_ru/hollowengine/gui/inspector.json | 5 + .../main/lang/ru_ru/hollowengine/gui/vfx.json | 38 +- .../textures/gui/icons/timeline/capture.svg | 4 + .../textures/gui/icons/timeline/close.svg | 4 + .../textures/gui/icons/timeline/copy.svg | 4 + .../textures/gui/icons/timeline/curves.svg | 4 + .../textures/gui/icons/timeline/cut.svg | 6 + .../textures/gui/icons/timeline/delete.svg | 7 + .../gui/icons/timeline/dope_sheet.svg | 8 + .../textures/gui/icons/timeline/eye.svg | 4 + .../textures/gui/icons/timeline/eye_off.svg | 5 + .../textures/gui/icons/timeline/film.svg | 7 + .../textures/gui/icons/timeline/follow.svg | 6 + .../textures/gui/icons/timeline/frame.svg | 7 + .../textures/gui/icons/timeline/key_add.svg | 5 + .../textures/gui/icons/timeline/load.svg | 4 + .../textures/gui/icons/timeline/lock.svg | 4 + .../textures/gui/icons/timeline/lock_open.svg | 4 + .../textures/gui/icons/timeline/loop.svg | 6 + .../textures/gui/icons/timeline/more.svg | 5 + .../textures/gui/icons/timeline/next_key.svg | 4 + .../textures/gui/icons/timeline/paste.svg | 4 + .../textures/gui/icons/timeline/pause.svg | 4 + .../textures/gui/icons/timeline/play.svg | 3 + .../textures/gui/icons/timeline/preset.svg | 4 + .../textures/gui/icons/timeline/prev_key.svg | 4 + .../textures/gui/icons/timeline/save.svg | 5 + .../textures/gui/icons/timeline/smooth.svg | 3 + .../textures/gui/icons/timeline/snap.svg | 5 + .../textures/gui/icons/timeline/to_end.svg | 4 + .../textures/gui/icons/timeline/to_start.svg | 4 + .../textures/gui/icons/timeline/zoom_in.svg | 6 + .../textures/gui/icons/timeline/zoom_out.svg | 5 + .../textures/gui/icons/vfx/add.svg | 4 + .../textures/gui/icons/vfx/beam.svg | 3 + .../textures/gui/icons/vfx/collision.svg | 5 + .../textures/gui/icons/vfx/color_channels.svg | 5 + .../textures/gui/icons/vfx/color_gradient.svg | 5 + .../textures/gui/icons/vfx/color_solid.svg | 4 + .../textures/gui/icons/vfx/depth.svg | 5 + .../textures/gui/icons/vfx/duplicate.svg | 4 + .../textures/gui/icons/vfx/emission.svg | 5 + .../textures/gui/icons/vfx/facing.svg | 4 + .../textures/gui/icons/vfx/flipbook.svg | 5 + .../textures/gui/icons/vfx/floor.svg | 7 + .../textures/gui/icons/vfx/force.svg | 5 + .../textures/gui/icons/vfx/handles.svg | 7 + .../textures/gui/icons/vfx/info.svg | 5 + .../textures/gui/icons/vfx/key.svg | 3 + .../textures/gui/icons/vfx/material.svg | 6 + .../textures/gui/icons/vfx/mesh.svg | 6 + .../textures/gui/icons/vfx/model.svg | 5 + .../textures/gui/icons/vfx/modules.svg | 3 + .../textures/gui/icons/vfx/more.svg | 5 + .../textures/gui/icons/vfx/motion.svg | 5 + .../textures/gui/icons/vfx/node_beam.svg | 3 + .../gui/icons/vfx/node_camera_shake.svg | 6 + .../textures/gui/icons/vfx/node_cube.svg | 6 + .../textures/gui/icons/vfx/node_cylinder.svg | 4 + .../textures/gui/icons/vfx/node_effect.svg | 4 + .../textures/gui/icons/vfx/node_emitter.svg | 11 + .../textures/gui/icons/vfx/node_group.svg | 3 + .../textures/gui/icons/vfx/node_model.svg | 6 + .../textures/gui/icons/vfx/node_plane.svg | 5 + .../gui/icons/vfx/node_post_effect.svg | 6 + .../textures/gui/icons/vfx/node_sphere.svg | 4 + .../textures/gui/icons/vfx/node_trail.svg | 6 + .../textures/gui/icons/vfx/noise.svg | 3 + .../textures/gui/icons/vfx/particle.svg | 7 + .../textures/gui/icons/vfx/post.svg | 5 + .../textures/gui/icons/vfx/remove.svg | 7 + .../textures/gui/icons/vfx/rename.svg | 4 + .../textures/gui/icons/vfx/restart.svg | 4 + .../textures/gui/icons/vfx/shader.svg | 5 + .../textures/gui/icons/vfx/shake.svg | 5 + .../textures/gui/icons/vfx/shape.svg | 4 + .../textures/gui/icons/vfx/space.svg | 7 + .../textures/gui/icons/vfx/spawn.svg | 5 + .../textures/gui/icons/vfx/stats.svg | 6 + .../textures/gui/icons/vfx/timeline.svg | 4 + .../textures/gui/icons/vfx/toggle.svg | 4 + .../textures/gui/icons/vfx/trail.svg | 6 + .../textures/gui/icons/vfx/transform.svg | 8 + .../textures/gui/icons/vfx/uniforms.svg | 11 + .../textures/gui/icons/vfx/value_const.svg | 6 + .../textures/gui/icons/vfx/value_curve.svg | 5 + .../textures/gui/icons/vfx/value_expr.svg | 6 + .../textures/gui/icons/vfx/value_range.svg | 5 + .../textures/gui/icons/vfx/velocity.svg | 6 + .../ui/styles/animator-editor.hss | 20 +- .../assets/hollowengine/ui/styles/ide.hss | 7 + .../hollowengine/ui/styles/inspector.hss | 381 ++++++++----- .../hollowengine/ui/styles/timeline.hss | 192 +++++++ .../assets/hollowengine/ui/styles/widgets.hss | 11 - .../assets/hollowengine/vfx/example.vfx | 232 ++++---- .../assets/hollowengine/vfx/explosion.vfx | 363 ++++++------ .../assets/hollowengine/vfx/lightning.vfx | 215 ++++---- .../assets/hollowengine/vfx/magic_shield.vfx | 90 +-- .../assets/hollowengine/vfx/soul.vfx | 126 +++-- runtime/src/test/kotlin/VfxEffectTreeTests.kt | 67 +++ runtime/src/test/kotlin/VfxFormatTests.kt | 30 +- 161 files changed, 3783 insertions(+), 1820 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoRenderer.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeInspectorHost.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxMaterialPreview.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSceneTree.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTransformGizmo.kt delete mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePropertyDialog.kt rename runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/{entity/EntityEditorTree.kt => inspector/InspectorAssetTree.kt} (94%) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/capture.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/close.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/copy.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/curves.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/cut.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/dope_sheet.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye_off.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/film.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/follow.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/frame.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/key_add.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/load.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock_open.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/loop.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/more.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/next_key.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/paste.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/pause.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/play.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/preset.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/prev_key.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/save.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/smooth.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/snap.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_end.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_start.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_in.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_out.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/add.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/beam.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/collision.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_channels.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_gradient.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_solid.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/depth.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/duplicate.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/emission.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/facing.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/flipbook.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/floor.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/force.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/handles.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/info.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/key.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/material.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/mesh.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/model.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/modules.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/more.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/motion.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_beam.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_camera_shake.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cube.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cylinder.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_effect.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_emitter.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_group.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_model.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_plane.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_post_effect.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sphere.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_trail.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/noise.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/particle.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/post.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/remove.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/rename.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/restart.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shader.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shake.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shape.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/space.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/spawn.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/stats.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/timeline.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/toggle.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/trail.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/transform.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/uniforms.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_const.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_curve.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_expr.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_range.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/velocity.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss create mode 100644 runtime/src/test/kotlin/VfxEffectTreeTests.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt index ef69a1bed..d2c6f1af9 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt @@ -77,31 +77,8 @@ object GizmoColors { /** * Builds the screen-space geometry for the gizmo. */ -object GizmoGeometry { - private const val AXIS_LENGTH_PX = 38f - private const val PLANE_OFFSET = 0.36f - private const val PLANE_HALF = 0.17f - private const val RING_RADIUS_PX = 36f - private const val RING_SEGMENTS = 72 - private const val CENTER_RADIUS_PX = 7f - private const val SCALE_CUBE_PX = 4.5f - private const val CIRCLE_SEGMENTS = 48 - private const val CONE_LENGTH_PX = 10f - private const val CONE_RADIUS_PX = 3.6f - private const val CONE_SEGMENTS = 16 - - private const val COMBINED_RING_RADIUS_PX = 52f - private const val COMBINED_SCALE_LENGTH_PX = 24f - - private const val AWAY_DIMMING = 0.6f - private const val RING_BACK_EMPHASIS = 0.3f - private const val EDGE_ON_PLANE_EMPHASIS = 0.35f - - private const val AXIS_WIDTH = 1.7f - private const val RING_WIDTH = 1.7f - +class GizmoGeometry(private val projector: GizmoProjector) { fun buildHandles(translation: Vec3f, rotation: QuatF, modes: Set): List { - val projector = WorldToScreenProjector val origin = Vec3(translation.x.toDouble(), translation.y.toDouble(), translation.z.toDouble()) val perPixel = projector.worldPerPixel(origin) val originScreen = projector.project(origin) ?: return emptyList() @@ -149,7 +126,6 @@ object GizmoGeometry { } private fun axisArrow(id: GizmoHandleId, origin: Vec3, axis: Vec3f, perPixel: Float, color: UiColor): GizmoHandle? { - val projector = WorldToScreenProjector val direction = worldVec(axis) val length = (perPixel * AXIS_LENGTH_PX).toDouble() val tip = origin.add(direction.scale(length)) @@ -171,7 +147,6 @@ object GizmoGeometry { } private fun cone(tip: Vec3, axis: Vec3, perPixel: Float): List? { - val projector = WorldToScreenProjector val base = tip.subtract(axis.scale((perPixel * CONE_LENGTH_PX).toDouble())) val radius = (perPixel * CONE_RADIUS_PX).toDouble() val u = perpendicular(axis) @@ -188,7 +163,6 @@ object GizmoGeometry { } private fun planeQuad(id: GizmoHandleId, origin: Vec3, normal: Vec3f, spanA: Vec3f, spanB: Vec3f, perPixel: Float, color: UiColor): GizmoHandle? { - val projector = WorldToScreenProjector val length = perPixel * AXIS_LENGTH_PX val offset = length * PLANE_OFFSET val half = length * PLANE_HALF @@ -231,7 +205,6 @@ object GizmoGeometry { radiusPx: Float, color: UiColor, ): GizmoHandle? { - val projector = WorldToScreenProjector val radius = perPixel * radiusPx val worldPts = ArrayList(RING_SEGMENTS + 1) val pts = ArrayList(RING_SEGMENTS + 1) @@ -297,7 +270,6 @@ object GizmoGeometry { besideArrows: Boolean, color: UiColor, ): GizmoHandle? { - val projector = WorldToScreenProjector val direction = worldVec(axis) val length = perPixel * if (besideArrows) COMBINED_SCALE_LENGTH_PX else AXIS_LENGTH_PX val tipWorld = origin.add(direction.scale(length.toDouble())) @@ -327,7 +299,7 @@ object GizmoGeometry { color: UiColor, ): GizmoHandle? { val cube = projectedCube(origin, basis, half) ?: return null - val depth = WorldToScreenProjector.project(origin)?.depth ?: return null + val depth = projector.project(origin)?.depth ?: return null return GizmoHandle( id, origin, worldAxis = null, listOf(GizmoStroke(cube, closed = true)), fillPolygon = cube, color = color, width = RING_WIDTH, depth = depth, pick = PickPrimitive.Polygon(cube), @@ -335,7 +307,6 @@ object GizmoGeometry { } private fun projectedCube(center: Vec3, basis: Triple, half: Float): List? { - val projector = WorldToScreenProjector val (a, b, c) = basis val points = ArrayList(8) for (sa in SIGNS) for (sb in SIGNS) for (sc in SIGNS) { @@ -361,7 +332,7 @@ object GizmoGeometry { /** Cosine between [direction] and the direction from [origin] towards the camera. */ private fun viewFacing(origin: Vec3, direction: Vec3): Float { - val toCamera = WorldToScreenProjector.cameraPosition.subtract(origin) + val toCamera = projector.cameraPosition.subtract(origin) val length = toCamera.length() * direction.length() if (length < 1e-9) return 1f return (direction.dot(toCamera) / length).toFloat() @@ -404,7 +375,6 @@ object GizmoGeometry { * [axis], for the rotation drag readout. Basis matches [GizmoManipulator.anglePlane]. */ fun buildRotationSector(origin: Vec3, axis: Vec3, startAngle: Double, endAngle: Double, perPixel: Float): List? { - val projector = WorldToScreenProjector val radius = perPixel * RING_RADIUS_PX * 0.92f val u = perpendicular(axis) val v = axis.cross(u) @@ -434,7 +404,6 @@ object GizmoGeometry { /** The 12 edges of [bounds] projected into screen space, or empty when any corner is off-screen. */ fun buildBoundsEdges(bounds: AABB): List> { - val projector = WorldToScreenProjector val corners = arrayOf( Vec3(bounds.minX, bounds.minY, bounds.minZ), Vec3(bounds.maxX, bounds.minY, bounds.minZ), Vec3(bounds.maxX, bounds.minY, bounds.maxZ), Vec3(bounds.minX, bounds.minY, bounds.maxZ), @@ -463,7 +432,6 @@ object GizmoGeometry { /** Projects a world-space polyline; returns null if any vertex is off-screen. */ fun projectPolyline(points: List): List? { - val projector = WorldToScreenProjector val result = ArrayList(points.size) for (point in points) { val p = projector.project(point) ?: return null @@ -472,4 +440,28 @@ object GizmoGeometry { } return result } + + companion object { + /** The one the world overlay uses. */ + val World = GizmoGeometry(WorldToScreenProjector) + + private const val AXIS_LENGTH_PX = 38f + private const val PLANE_OFFSET = 0.36f + private const val PLANE_HALF = 0.17f + private const val RING_RADIUS_PX = 36f + private const val RING_SEGMENTS = 72 + private const val CENTER_RADIUS_PX = 7f + private const val SCALE_CUBE_PX = 4.5f + private const val CIRCLE_SEGMENTS = 48 + private const val CONE_LENGTH_PX = 10f + private const val CONE_RADIUS_PX = 3.6f + private const val CONE_SEGMENTS = 16 + private const val COMBINED_RING_RADIUS_PX = 52f + private const val COMBINED_SCALE_LENGTH_PX = 24f + private const val AWAY_DIMMING = 0.6f + private const val RING_BACK_EMPHASIS = 0.3f + private const val EDGE_ON_PLANE_EMPHASIS = 0.35f + private const val AXIS_WIDTH = 1.7f + private const val RING_WIDTH = 1.7f + } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoManipulator.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoManipulator.kt index 156e08ca0..413c896ef 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoManipulator.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoManipulator.kt @@ -48,11 +48,11 @@ class GizmoDrag internal constructor( /** * Screen-to-world manipulation math for the gizmo. */ -object GizmoManipulator { +class GizmoManipulator(private val projector: GizmoProjector) { fun begin(handle: GizmoHandle, values: GizmoTransformValues, pointerX: Float, pointerY: Float): GizmoDrag { val axis = handle.worldAxis?.normalize() val drag = GizmoDrag(handle.id, handle.worldOrigin, axis, values) - val ray = WorldToScreenProjector.screenRay(pointerX, pointerY) + val ray = projector.screenRay(pointerX, pointerY) when (handle.id) { GizmoHandleId.AXIS_X, GizmoHandleId.AXIS_Y, GizmoHandleId.AXIS_Z, GizmoHandleId.SCALE_X, GizmoHandleId.SCALE_Y, GizmoHandleId.SCALE_Z -> { @@ -87,7 +87,7 @@ object GizmoManipulator { } GizmoHandleId.CENTER -> { - val toCamera = WorldToScreenProjector.cameraPosition.subtract(handle.worldOrigin) + val toCamera = projector.cameraPosition.subtract(handle.worldOrigin) val length = toCamera.length() if (ray != null && length > 1e-6) { val normal = toCamera.scale(1.0 / length) @@ -101,7 +101,7 @@ object GizmoManipulator { } GizmoHandleId.SCALE_UNIFORM -> { - val originScreen = WorldToScreenProjector.project(handle.worldOrigin) + val originScreen = projector.project(handle.worldOrigin) if (originScreen != null) { drag.referenceDistance = distance(originScreen.x, originScreen.y, pointerX, pointerY) drag.valid = drag.referenceDistance > 1e-3f @@ -147,7 +147,7 @@ object GizmoManipulator { private fun updateViewPlane(drag: GizmoDrag, x: Float, y: Float, speed: Double, snap: Boolean, fine: Boolean): GizmoTransformValues? { val normal = drag.planeNormal ?: return null val reference = drag.referenceHit ?: return null - val ray = WorldToScreenProjector.screenRay(x, y) ?: return null + val ray = projector.screenRay(x, y) ?: return null val hit = rayPlane(ray, drag.origin, normal) ?: return null var dx = (hit.x - reference.x) * speed var dy = (hit.y - reference.y) * speed @@ -164,7 +164,7 @@ object GizmoManipulator { private fun updateAxis(drag: GizmoDrag, x: Float, y: Float, speed: Double, snap: Boolean, fine: Boolean): GizmoTransformValues? { val axis = drag.axis ?: return null - val ray = WorldToScreenProjector.screenRay(x, y) ?: return null + val ray = projector.screenRay(x, y) ?: return null val t = closestParamOnAxis(ray, drag.origin, axis) ?: return null var delta = (t - drag.referenceParam) * speed if (snap) delta = round(delta / translationTick(fine)) * translationTick(fine) @@ -176,7 +176,7 @@ object GizmoManipulator { private fun updatePlane(drag: GizmoDrag, x: Float, y: Float, speed: Double, snap: Boolean, fine: Boolean): GizmoTransformValues? { val axis = drag.axis ?: return null val reference = drag.referenceHit ?: return null - val ray = WorldToScreenProjector.screenRay(x, y) ?: return null + val ray = projector.screenRay(x, y) ?: return null val hit = rayPlane(ray, drag.origin, axis) ?: return null var dx = (hit.x - reference.x) * speed var dy = (hit.y - reference.y) * speed @@ -194,7 +194,7 @@ object GizmoManipulator { private fun updateRotate(drag: GizmoDrag, x: Float, y: Float, speed: Double, snap: Boolean, fine: Boolean): GizmoTransformValues? { val axis = drag.axis ?: return null - val ray = WorldToScreenProjector.screenRay(x, y) ?: return null + val ray = projector.screenRay(x, y) ?: return null val angle = anglePlane(ray, drag.origin, axis) ?: return null drag.currentAngle = drag.referenceAngle + shortestAngle(angle - drag.referenceAngle) var deltaDeg = Math.toDegrees(shortestAngle(angle - drag.referenceAngle)) * speed @@ -207,7 +207,7 @@ object GizmoManipulator { } private fun updateScale(drag: GizmoDrag, x: Float, y: Float, speed: Double, snap: Boolean, fine: Boolean): GizmoTransformValues? { - val originScreen = WorldToScreenProjector.project(drag.origin) ?: return null + val originScreen = projector.project(drag.origin) ?: return null val current = distance(originScreen.x, originScreen.y, x, y) if (drag.referenceDistance <= 1e-3f) return null var factor = (current / drag.referenceDistance).toDouble() @@ -226,7 +226,7 @@ object GizmoManipulator { private fun updateScaleAxis(drag: GizmoDrag, x: Float, y: Float, speed: Double, snap: Boolean, fine: Boolean): GizmoTransformValues? { val axis = drag.axis ?: return null if (abs(drag.referenceParam) < 1e-4) return null - val ray = WorldToScreenProjector.screenRay(x, y) ?: return null + val ray = projector.screenRay(x, y) ?: return null val t = closestParamOnAxis(ray, drag.origin, axis) ?: return null var factor = t / drag.referenceParam factor = 1.0 + (factor - 1.0) * speed @@ -294,4 +294,9 @@ object GizmoManipulator { private fun translationTick(fine: Boolean) = if (fine) 0.1 else 1.0 private fun rotationTick(fine: Boolean) = if (fine) 1.0 else 5.0 private fun scaleTick(fine: Boolean) = if (fine) 0.01 else 0.1 + + companion object { + /** The one the world overlay uses. */ + val World = GizmoManipulator(WorldToScreenProjector) + } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoRenderer.kt new file mode 100644 index 000000000..fe2b7ebec --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoRenderer.kt @@ -0,0 +1,109 @@ +package ru.hollowhorizon.hollowengine.client.editor + +import ru.hollowhorizon.hollowengine.client.ui.UiCanvasDrawScope +import ru.hollowhorizon.hollowengine.client.ui.UiColor +import ru.hollowhorizon.hollowengine.client.ui.UiDrawStyle +import ru.hollowhorizon.hollowengine.client.ui.shape.GenericShape +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint + +/** + * Draws gizmo geometry onto a canvas, the same way wherever the gizmo is shown: over the world, or + * over a preview panel. + */ +object GizmoRenderer { + /** Screen span beyond which a polyline is treated as degenerate and skipped (guards the tiler). */ + private const val MAX_DRAW_SPAN = 8000f + + private val SectorFill = UiColor(1f, 0.85f, 0.32f, 0.25f) + private val SectorStroke = UiColor(1f, 0.86f, 0.34f, 0.9f) + + /** [handles] far to near; the one being dragged, or else the one under the pointer, lit up. */ + fun drawHandles( + scope: UiCanvasDrawScope, + handles: List, + hovered: GizmoHandleId?, + dragging: GizmoHandleId?, + ) { + for (handle in handles.sortedByDescending { it.depth }) { + val highlighted = handle.id == dragging || (dragging == null && handle.id == hovered) + val base = if (highlighted) GizmoColors.highlighted(handle.color) else handle.color + val emphasis = if (highlighted) 1f else handle.emphasis + handle.fillPolygon?.let { fill -> + val alpha = (if (handle.id.isSolidHandle()) 0.72f else 0.22f) * emphasis + fillPolygon(scope, fill, base.withAlpha(alpha)) + } + for (stroke in handle.renderLines) { + val strokeEmphasis = if (highlighted) 1f else emphasis * stroke.emphasis + strokeLine( + scope, + stroke.points, + base.withAlpha(base.alpha * strokeEmphasis), + handle.width * (0.55f + 0.45f * strokeEmphasis), + stroke.closed, + ) + } + } + } + + /** The angle a rotation drag has swept so far, as a filled sector on its ring. */ + fun drawRotationSector(scope: UiCanvasDrawScope, geometry: GizmoGeometry, projector: GizmoProjector, drag: GizmoDrag) { + if (!drag.handleId.isRotation()) return + val axis = drag.axis ?: return + val perPixel = projector.worldPerPixel(drag.origin) + val sector = geometry.buildRotationSector(drag.origin, axis, drag.startAngle, drag.angle, perPixel) ?: return + fillPolygon(scope, sector, SectorFill) + strokeLine(scope, sector, SectorStroke, 1.5f, closed = true) + } + + fun strokeLine( + scope: UiCanvasDrawScope, + points: List, + color: UiColor, + width: Float, + closed: Boolean = false, + ) { + if (points.size < 2 || !withinDrawBounds(points)) return + val shape = GenericShape { + points.forEachIndexed { index, point -> + if (index == 0) moveTo(point.x, point.y) else lineTo(point.x, point.y) + } + if (closed) close() + } + scope.drawShape(shape, UiPaint.Color(color), UiDrawStyle.Stroke(width)) + } + + fun fillPolygon(scope: UiCanvasDrawScope, points: List, color: UiColor) { + if (points.size < 3 || !withinDrawBounds(points)) return + val shape = GenericShape { + points.forEachIndexed { index, point -> + if (index == 0) moveTo(point.x, point.y) else lineTo(point.x, point.y) + } + close() + } + scope.drawShape(shape, UiPaint.Color(color), UiDrawStyle.Fill) + } + + private fun withinDrawBounds(points: List): Boolean { + var minX = Float.POSITIVE_INFINITY + var minY = Float.POSITIVE_INFINITY + var maxX = Float.NEGATIVE_INFINITY + var maxY = Float.NEGATIVE_INFINITY + for (point in points) { + if (!point.x.isFinite() || !point.y.isFinite()) return false + minX = minOf(minX, point.x); minY = minOf(minY, point.y) + maxX = maxOf(maxX, point.x); maxY = maxOf(maxY, point.y) + } + return (maxX - minX) <= MAX_DRAW_SPAN && (maxY - minY) <= MAX_DRAW_SPAN + } + + private fun UiColor.withAlpha(alpha: Float) = UiColor(red, green, blue, alpha) + + private fun GizmoHandleId.isSolidHandle(): Boolean = when (this) { + GizmoHandleId.AXIS_X, GizmoHandleId.AXIS_Y, GizmoHandleId.AXIS_Z, + GizmoHandleId.SCALE_X, GizmoHandleId.SCALE_Y, GizmoHandleId.SCALE_Z, GizmoHandleId.SCALE_UNIFORM -> true + else -> false + } +} + +fun GizmoHandleId.isRotation(): Boolean = + this == GizmoHandleId.ROTATE_X || this == GizmoHandleId.ROTATE_Y || this == GizmoHandleId.ROTATE_Z diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/TransformGizmoEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/TransformGizmoEditor.kt index 958c8a01f..f70be6d69 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/TransformGizmoEditor.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/TransformGizmoEditor.kt @@ -26,8 +26,6 @@ import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeOverlay import ru.hollowhorizon.hollowengine.client.ui.ide.hollowIdeModifierMask import ru.hollowhorizon.hollowengine.client.ui.ide.hollowIdeWorldPoint import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect -import ru.hollowhorizon.hollowengine.client.ui.shape.GenericShape -import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint import ru.hollowhorizon.hollowengine.client.ui.style.UiShadow import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem @@ -182,7 +180,7 @@ object TransformGizmoEditor { val entry = draggingKey?.let(entries::get) if (drag != null && entry != null) { val (cx, cy) = WorldToScreenProjector.screenCenter() - GizmoManipulator.update(drag, cx, cy, hollowIdeModifierMask())?.let { values -> + GizmoManipulator.World.update(drag, cx, cy, hollowIdeModifierMask())?.let { values -> entry.working = values applyFromGizmo(entry, values) updateLabel(entry, drag) @@ -248,7 +246,7 @@ object TransformGizmoEditor { } if (drag != null) { val entry = draggingKey?.let(entries::get) - val values = GizmoManipulator.update(drag, x, y, hollowIdeModifierMask()) + val values = GizmoManipulator.World.update(drag, x, y, hollowIdeModifierMask()) if (values != null && entry != null) { entry.working = values applyFromGizmo(entry, values) @@ -293,7 +291,7 @@ object TransformGizmoEditor { val entry = activeKey?.let(entries::get) ?: return false when (button) { GLFW.GLFW_MOUSE_BUTTON_LEFT -> { - currentDrag = GizmoManipulator.begin(handle, entry.working ?: return false, x, y) + currentDrag = GizmoManipulator.World.begin(handle, entry.working ?: return false, x, y) draggingKey = entry.entryId draggingHandleId = handle.id contextMenuState = null @@ -351,7 +349,7 @@ object TransformGizmoEditor { private fun activeEntryHandleAt(x: Float, y: Float): GizmoHandle? { val entry = activeKey?.let(entries::get)?.takeIf { it.visible } ?: return null val working = entry.working ?: return null - val handles = GizmoGeometry.buildHandles(working.translation, working.rotation, modes) + val handles = GizmoGeometry.World.buildHandles(working.translation, working.rotation, modes) return GizmoPicker.pick(handles, x, y) } @@ -442,7 +440,7 @@ object TransformGizmoEditor { } entry.lastBounds?.let { bounds -> val width = boundsLineWidth(bounds) - for (edge in GizmoGeometry.buildBoundsEdges(bounds)) strokeLine(scope, edge, boundsColor, width) + for (edge in GizmoGeometry.World.buildBoundsEdges(bounds)) GizmoRenderer.strokeLine(scope, edge, boundsColor, width) } } @@ -450,50 +448,12 @@ object TransformGizmoEditor { val working = active.working ?: return val drag = currentDrag - if (drag != null && drag.handleId.isRotation() && draggingKey == active.entryId) { - drag.axis?.let { axis -> - val perPixel = WorldToScreenProjector.worldPerPixel(drag.origin) - GizmoGeometry.buildRotationSector(drag.origin, axis, drag.startAngle, drag.angle, perPixel) - ?.let { sector -> - fillPolygon(scope, sector, UiColor(1f, 0.85f, 0.32f, 0.25f)) - strokeLine(scope, sector, UiColor(1f, 0.86f, 0.34f, 0.9f), 1.5f, closed = true) - } - } - } - - val handles = GizmoGeometry.buildHandles(working.translation, working.rotation, modes) - .sortedByDescending { it.depth } - for (handle in handles) { - val highlighted = - handle.id == draggingHandleId || (draggingHandleId == null && handle.id == hoveredHandleId) - val base = if (highlighted) GizmoColors.highlighted(handle.color) else handle.color - val emphasis = if (highlighted) 1f else handle.emphasis - handle.fillPolygon?.let { fill -> - val alpha = (if (handle.id.isSolidHandle()) 0.72f else 0.22f) * emphasis - fillPolygon(scope, fill, base.withAlpha(alpha)) - } - for (stroke in handle.renderLines) { - val strokeEmphasis = if (highlighted) 1f else emphasis * stroke.emphasis - strokeLine( - scope, - stroke.points, - base.withAlpha(base.alpha * strokeEmphasis), - handle.width * (0.55f + 0.45f * strokeEmphasis), - stroke.closed, - ) - } + if (drag != null && draggingKey == active.entryId) { + GizmoRenderer.drawRotationSector(scope, GizmoGeometry.World, WorldToScreenProjector, drag) } - } - - private fun UiColor.withAlpha(alpha: Float) = UiColor(red, green, blue, alpha) - - private fun GizmoHandleId.isRotation(): Boolean = - this == GizmoHandleId.ROTATE_X || this == GizmoHandleId.ROTATE_Y || this == GizmoHandleId.ROTATE_Z - private fun GizmoHandleId.isSolidHandle(): Boolean = when (this) { - GizmoHandleId.AXIS_X, GizmoHandleId.AXIS_Y, GizmoHandleId.AXIS_Z, - GizmoHandleId.SCALE_X, GizmoHandleId.SCALE_Y, GizmoHandleId.SCALE_Z, GizmoHandleId.SCALE_UNIFORM -> true - else -> false + val handles = GizmoGeometry.World.buildHandles(working.translation, working.rotation, modes) + GizmoRenderer.drawHandles(scope, handles, hoveredHandleId, draggingHandleId) } /** Thinner bounding-box lines when the box is small/distant on screen. */ @@ -522,50 +482,6 @@ object TransformGizmoEditor { } - /** Screen span beyond which a polyline is treated as degenerate and skipped (guards the tiler). */ - private const val MAX_DRAW_SPAN = 8000f - - private fun withinDrawBounds(points: List): Boolean { - var minX = Float.POSITIVE_INFINITY - var minY = Float.POSITIVE_INFINITY - var maxX = Float.NEGATIVE_INFINITY - var maxY = Float.NEGATIVE_INFINITY - for (point in points) { - if (!point.x.isFinite() || !point.y.isFinite()) return false - minX = minOf(minX, point.x); minY = minOf(minY, point.y) - maxX = maxOf(maxX, point.x); maxY = maxOf(maxY, point.y) - } - return (maxX - minX) <= MAX_DRAW_SPAN && (maxY - minY) <= MAX_DRAW_SPAN - } - - private fun strokeLine( - scope: UiCanvasDrawScope, - points: List, - color: UiColor, - width: Float, - closed: Boolean = false, - ) { - if (points.size < 2 || !withinDrawBounds(points)) return - val shape = GenericShape { - points.forEachIndexed { index, point -> - if (index == 0) moveTo(point.x, point.y) else lineTo(point.x, point.y) - } - if (closed) close() - } - scope.drawShape(shape, UiPaint.Color(color), UiDrawStyle.Stroke(width)) - } - - private fun fillPolygon(scope: UiCanvasDrawScope, points: List, color: UiColor) { - if (points.size < 3 || !withinDrawBounds(points)) return - val shape = GenericShape { - points.forEachIndexed { index, point -> - if (index == 0) moveTo(point.x, point.y) else lineTo(point.x, point.y) - } - close() - } - scope.drawShape(shape, UiPaint.Color(color), UiDrawStyle.Fill) - } - private fun updateLabel(entry: GizmoEntry, drag: GizmoDrag) { val origin = entry.working?.translation ?: return val screen = WorldToScreenProjector.project( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldInspector.kt index 5832440d0..d0a686674 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldInspector.kt @@ -10,6 +10,7 @@ import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.entity.* import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeOverlay import ru.hollowhorizon.hollowengine.client.ui.ide.hollowIdeWorldPoint +import ru.hollowhorizon.hollowengine.client.ui.inspector.AssetPickerDialog import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorSelection import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorTarget import ru.hollowhorizon.hollowengine.client.ui.inspector.LocalInspectorHost @@ -144,7 +145,7 @@ object WorldInspector { LocalInspectorHost provides session, ) { EntitySidebar(session, width = null) - session.pendingPicker?.let { picker -> AssetPickerDialog(picker) } + session.pendingPicker?.let { picker -> AssetPickerDialog(picker) { session.pendingPicker = null } } if (session.slotSessionId != null) InventoryDialog(session) } } @@ -171,7 +172,7 @@ object WorldInspector { private fun outline(scope: UiCanvasDrawScope, entity: Entity, color: UiColor) { val bounds = entity.boundingBox.inflate(PickSlack) - for (edge in GizmoGeometry.buildBoundsEdges(bounds)) { + for (edge in GizmoGeometry.World.buildBoundsEdges(bounds)) { if (edge.size < 2) continue val shape = GenericShape { edge.forEachIndexed { index, point -> diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldToScreenProjector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldToScreenProjector.kt index 065cfd1dd..0dd1434d8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldToScreenProjector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/WorldToScreenProjector.kt @@ -7,6 +7,8 @@ import org.joml.Vector4f import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeScale import kotlin.math.tan +private const val NEAR_PLANE_EPSILON = 0.05f + /** * A world point projected into the HollowUi overlay's logical coordinate space. */ @@ -23,7 +25,12 @@ data class WorldRay( val direction: Vec3, ) -object WorldToScreenProjector { +/** + * Projects points of one camera into the logical pixels of the surface it is shown on, and back into + * rays. The world has one ([WorldToScreenProjector]); a preview panel that draws the same gizmo keeps + * its own, captured from its own camera and sized to the panel. + */ +open class GizmoProjector { private val combined = Matrix4f() private val inverse = Matrix4f() private var camX = 0.0 @@ -33,21 +40,29 @@ object WorldToScreenProjector { private var logicalWidth = 1f private var logicalHeight = 1f - private const val NEAR_PLANE_EPSILON = 0.05f private val scratch = Vector4f() - fun capture(view: Matrix4f, projection: Matrix4f, cameraPosition: Vec3, fovDegrees: Float) { + /** + * Takes the camera of the next frame. [view] is the rotation of the camera alone: points are made + * relative to [cameraPosition] before it applies, which keeps world coordinates precise. + */ + fun capture( + view: Matrix4f, + projection: Matrix4f, + cameraPosition: Vec3, + fovDegrees: Float, + width: Float, + height: Float, + ) { combined.set(projection).mul(view) combined.invert(inverse) camX = cameraPosition.x camY = cameraPosition.y camZ = cameraPosition.z fovYRadians = Math.toRadians(fovDegrees.toDouble()).toFloat() - val target = Minecraft.getInstance().mainRenderTarget - val scale = HollowIdeScale.factor() - logicalWidth = (target.width / scale).coerceAtLeast(1f) - logicalHeight = (target.height / scale).coerceAtLeast(1f) + logicalWidth = width.coerceAtLeast(1f) + logicalHeight = height.coerceAtLeast(1f) } val width: Float get() = logicalWidth @@ -102,3 +117,12 @@ object WorldToScreenProjector { return (worldHeightAtDepth / logicalHeight).coerceAtLeast(1.0e-5f) } } + +/** The projector of the game camera, in the logical pixels of the IDE overlay. */ +object WorldToScreenProjector : GizmoProjector() { + fun capture(view: Matrix4f, projection: Matrix4f, cameraPosition: Vec3, fovDegrees: Float) { + val target = Minecraft.getInstance().mainRenderTarget + val scale = HollowIdeScale.factor() + capture(view, projection, cameraPosition, fovDegrees, target.width / scale, target.height / scale) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt index 56f45350c..e07c0d83c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt @@ -18,6 +18,7 @@ import ru.hollowhorizon.hollowengine.client.ui.style.UiTransition import ru.hollowhorizon.hollowengine.client.ui.style.UiCaretBlinkKeyframes import ru.hollowhorizon.hollowengine.client.ui.style.UiCaretBlinkPeriodMillis import ru.hollowhorizon.hollowengine.client.ui.style.UiStylesheetReference +import ru.hollowhorizon.hollowengine.client.ui.style.fontFamily import ru.hollowhorizon.hollowengine.client.ui.text.Shadow import ru.hollowhorizon.hollowengine.client.ui.widgets.* import kotlin.coroutines.CoroutineContext @@ -549,7 +550,8 @@ fun TextField( fieldState.autoPairs = autoPairs fieldState.multiCaret = multiCaret fieldState.fontSize = fontSize - fieldState.fontFamily = fontFamily + var hssFontFamily by remember { mutableStateOf(null) } + fieldState.fontFamily = fontFamily ?: hssFontFamily fieldState.wrap = wrap ?: multiline var hssShadow by remember { mutableStateOf(HssShadowResolution.Inherit) } var hssInlayHints by remember { mutableStateOf(true) } @@ -588,6 +590,7 @@ fun TextField( HssShadowResolution.Inherit } if (next != hssShadow) hssShadow = next + if (style.fontFamily != hssFontFamily) hssFontFamily = style.fontFamily val hintsEnabled = textFieldStyle.inlayHints != false if (hintsEnabled != hssInlayHints) hssInlayHints = hintsEnabled }, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorDialogs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorDialogs.kt index f2a90ada3..f854b0273 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorDialogs.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorDialogs.kt @@ -1,11 +1,7 @@ package ru.hollowhorizon.hollowengine.client.ui.entity import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateSetOf -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import net.minecraft.nbt.CompoundTag import ru.hollowhorizon.hollowengine.client.slots.PlayerInventory import ru.hollowhorizon.hollowengine.client.slots.SlotGrid @@ -13,8 +9,6 @@ import ru.hollowhorizon.hollowengine.client.slots.Slots import ru.hollowhorizon.hollowengine.client.slots.ClientSlots import ru.hollowhorizon.hollowengine.client.ui.inspector.* import ru.hollowhorizon.hollowengine.client.ui.* -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeView -import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.common.attachments.editor.EntityEditorSlots import ru.hollowhorizon.hollowengine.common.ui.UiData import ru.hollowhorizon.hollowengine.common.ui.UiScope @@ -52,65 +46,6 @@ private fun EditorDialog(id: String, title: String, width: Float, onClose: () -> } } -@Composable -internal fun AssetPickerDialog(request: InspectorAssetRequest) { - val session = LocalEntityEditorSession.current - var filter by remember(request) { mutableStateOf("") } - val expanded = remember(request) { mutableStateSetOf() } - val close = { session?.pendingPicker = null } - - val rows = PathTree.rows( - paths = request.candidates, - expanded = expanded, - query = filter, - folderIcon = EntityEditorIcons.FOLDER, - fileIcon = ::assetIconFor, - selected = request.current, - ) - - EditorDialog("ee-asset-dialog", request.title, 420f, close) { - Row(tags = listOf("ee-search")) { - Image(EntityEditorIcons.SEARCH, tags = listOf("ee-search-icon")) - TextField( - value = filter, - id = "ee-asset-filter", - placeholder = EntityEditorLang.searchHint, - fontSize = 9f, - onChange = { filter = it }, - tags = listOf("insp-input", "flat"), - modifier = Modifier.grow(1f), - ) - } - - if (rows.isEmpty()) { - Text(EntityEditorLang.nothingFound, tags = listOf("insp-hint")) - return@EditorDialog - } - - UiTreeView( - items = rows, - onToggle = { item -> if (!expanded.add(item.id)) expanded.remove(item.id) }, - onSelect = { item, _ -> - val picked = item.payload - if (picked == null) { - if (!expanded.add(item.id)) expanded.remove(item.id) - } else { - request.onPick(picked) - close() - } - }, - modifier = Modifier.size(100.percent, 280.px), - tags = listOf("ee-asset-tree"), - ) - } -} - -private fun assetIconFor(path: String): String = when { - path.endsWith(".png") -> "hollowengine:textures/gui/icons/file_image.svg" - path.endsWith(".kts") -> EntityEditorIcons.SCRIPT - else -> "hollowengine:textures/gui/icons/file_model.svg" -} - @Composable internal fun InventoryDialog(session: EntityEditorSession) { val sessionId = session.slotSessionId ?: return diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorScreen.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorScreen.kt index 1311ac560..ffc7e2cc3 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorScreen.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorScreen.kt @@ -52,7 +52,7 @@ internal class EntityEditorScreen( EntitySidebar(session, sidebarWidth) } - session.pendingPicker?.let { picker -> AssetPickerDialog(picker) } + session.pendingPicker?.let { picker -> AssetPickerDialog(picker) { session.pendingPicker = null } } if (session.slotSessionId != null) InventoryDialog(session) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorSidebar.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorSidebar.kt index 931bfe04c..aa44155fa 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorSidebar.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorSidebar.kt @@ -86,7 +86,7 @@ private fun SidebarSearch(session: EntityEditorSession) { fontSize = 9f, onChange = { session.query = it }, tags = listOf("insp-input", "flat"), - modifier = Modifier.grow(1f), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f), ) if (session.query.isNotEmpty()) { InspectorIconButton(EntityEditorIcons.CLOSE, EntityEditorLang.search) { session.query = "" } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt index 284ee9788..453f5d8b0 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt @@ -18,8 +18,6 @@ import ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx.VfxEditorPanel import ru.hollowhorizon.hollowengine.client.ui.ide.panels.* import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CutsceneEditorSessions import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.TimelineDock -import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorLang -import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorPanel import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorSelection import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.render.MinecraftUiRenderer @@ -986,11 +984,7 @@ object HollowIdeOverlay { SceneId -> SceneDock() - InspectorId -> InspectorPanel( - target = InspectorSelection.current, - empty = InspectorLang.nothingSelected, - keepScroll = true, - ) + InspectorId -> IdeInspectorDock() GameViewportId -> GameViewportDock( active = isGameViewportActive, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeInspectorHost.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeInspectorHost.kt new file mode 100644 index 000000000..8190a5ca8 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeInspectorHost.kt @@ -0,0 +1,42 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import ru.hollowhorizon.hollowengine.client.ui.inspector.AssetPickerDialog +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorAssetRequest +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorHost +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorLang +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorPanel +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorSelection +import ru.hollowhorizon.hollowengine.client.ui.inspector.LocalInspectorHost + +/** + * What the inspector window of the IDE offers the fields it shows: the assets of the loaded packs, + * and a tree to pick one from. A target that needs more (the entity editor lists the scripts of the + * server) provides a host of its own inside its content. + */ +internal object IdeInspectorHost : InspectorHost { + var pending by mutableStateOf(null) + + override val canPickAssets: Boolean get() = true + + override fun pickAsset(request: InspectorAssetRequest) { + pending = request + } +} + +/** The inspector window: whatever was published last, with the IDE as its host. */ +@Composable +internal fun IdeInspectorDock() { + CompositionLocalProvider(LocalInspectorHost provides IdeInspectorHost) { + InspectorPanel( + target = InspectorSelection.current, + empty = InspectorLang.nothingSelected, + keepScroll = true, + ) + IdeInspectorHost.pending?.let { request -> AssetPickerDialog(request) { IdeInspectorHost.pending = null } } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt index 0037ca5c0..02bf15d13 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt @@ -3,8 +3,10 @@ package ru.hollowhorizon.hollowengine.client.ui.ide import androidx.compose.runtime.* import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.* -import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorColors -import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorStylesheet +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiKeyInput import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeView import ru.hollowhorizon.hollowengine.client.utils.lang @@ -14,15 +16,19 @@ import ru.hollowhorizon.hollowengine.client.utils.lang */ class SceneTarget( val id: String, - val title: String, val items: List>, /** `null` when the selection is dropped. */ val onSelect: (String?) -> Unit, val onToggle: (String) -> Unit, - /** What to say when the tree is empty. */ - val empty: String, - /** Buttons the owner wants above the tree, such as adding and removing. */ - val actions: HollowUiContent? = null, + /** A line under the tree, for a hierarchy that has nothing in it yet. */ + val hint: String? = null, + /** What a right click offers on the item with this id, or on the empty space under the rows (null). */ + val menu: ((String?) -> List)? = null, + /** Keys pressed while the tree has focus, after the window's own; true when one was handled. */ + val onKey: ((UiKeyInput) -> Boolean)? = null, + /** Puts the dragged item under the one it was dropped on; null when the hierarchy cannot be rearranged. */ + val onMove: ((dragged: String, target: String) -> Boolean)? = null, + val canMove: (dragged: String, target: String) -> Boolean = { _, _ -> true }, ) /** @@ -62,50 +68,82 @@ fun PublishScene(source: String, key: Any?, target: () -> SceneTarget?) { DisposableEffect(source) { onDispose { IdeScenes.release(source) } } } +/** An item of a scene tree being dragged: which hierarchy it came from, so another cannot take it. */ +private data class SceneDrag(val scene: String, val item: String) + /** - * The scene window, hierarchy of whatever is open, or nothing. + * The scene window: the hierarchy of whatever is open, looked at and worked with the way the project + * tree is. A right click opens the menu of the item under the pointer, rows drag onto each other, and + * the selection answers the usual keys. */ @Composable internal fun SceneDock() { val target = IdeScenes.current + var menu by remember { mutableStateOf(null) } - Column( - modifier = Modifier.size(100.percent, 100.percent).style(AnimatorStylesheet).background(AnimatorColors.Panel) - .padding(6.px).gap(4.px), - ) { + Column(tags = listOf("ide-panel", "scene-panel"), modifier = Modifier.size(100.percent, 100.percent)) { if (target == null) { - Text( - "hollowengine.gui.ide.windows.scene_empty".lang, - modifier = Modifier.fontSize(9f).foreground(AnimatorColors.Muted), - ) + Text("hollowengine.gui.ide.windows.scene_empty".lang, tags = listOf("scene-hint")) return@Column } - Row(modifier = Modifier.size(100.percent).gap(4.px)) { - Text( - target.title, - modifier = Modifier.fontSize(10f).foreground(AnimatorColors.Muted).grow(1f), - ) - target.actions?.invoke() - } - - if (target.items.isEmpty()) { - Text(target.empty, modifier = Modifier.fontSize(9f).foreground(AnimatorColors.Muted)) - return@Column + val openMenu = { item: String?, event: UiEvent -> + val items = target.menu?.invoke(item).orEmpty() + menu = if (items.isEmpty()) null else SceneMenu(event.x, event.y, items) } + val move = target.onMove UiTreeView( items = target.items, onToggle = { item -> target.onToggle(item.id) }, - onSelect = { item, event -> target.onSelect(item.id.takeUnless { item.selected && event.isCtrlDown() }) }, - onBackgroundClick = { target.onSelect(null) }, + onSelect = { item, event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + if (!item.selected) target.onSelect(item.id) + openMenu(item.id, event) + return@UiTreeView + } + menu = null + target.onSelect(item.id.takeUnless { item.selected && event.isCtrlDown() }) + }, + onBackgroundClick = { + menu = null + target.onSelect(null) + }, + onBackgroundContextMenu = { event -> openMenu(null, event) }, fillRowWidth = true, - modifier = Modifier.size(100.percent, 0.px).grow(1f).scrollable(horizontal = false) - .onKeyInput { input -> - if (input.key != GLFW.GLFW_KEY_ESCAPE || target.items.none { it.selected }) return@onKeyInput + dragItem = if (move == null) null else { item -> + UiDragItem(payload = SceneDrag(target.id, item.id), icon = item.icon, label = item.label) + }, + onDrop = if (move == null) null else { item, dragged -> + val drag = dragged.payload as? SceneDrag + drag != null && move(drag.item, item.id) + }, + canDrop = { item, dragged -> + val drag = dragged.payload as? SceneDrag + drag != null && drag.scene == target.id && drag.item != item.id && target.canMove(drag.item, item.id) + }, + modifier = Modifier.size(100.percent, 0.px).grow(1f).onKeyInput { input -> + if (input.key == GLFW.GLFW_KEY_ESCAPE && target.items.any { it.selected }) { target.onSelect(null) input.consume() + return@onKeyInput } + if (target.onKey?.invoke(input) == true) input.consume() + }, ) + + target.hint?.let { Text(it, tags = listOf("scene-hint")) } + + menu?.let { open -> + ContextMenu( + id = "scene-context-menu", + anchorBounds = UiRect(open.x, open.y, 0f, 0f), + alignment = UiPopupAlignment.Cursor, + items = open.items, + onExpandedChange = { if (!it) menu = null }, + ) + } } } + +private class SceneMenu(val x: Float, val y: Float, val items: List) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt index 37dbba5ef..aa4688141 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxColorField.kt @@ -247,9 +247,9 @@ private fun ColorKindPicker(current: String, onChange: (VfxColorValue) -> Unit) } private fun colorKindIcon(kind: String): String = when (kind) { - "solid" -> "hollowengine:textures/gui/icons/types.svg" - "gradient" -> "hollowengine:textures/gui/icons/curve.svg" - else -> "hollowengine:textures/gui/icons/math.svg" + "solid" -> "hollowengine:textures/gui/icons/vfx/color_solid.svg" + "gradient" -> "hollowengine:textures/gui/icons/vfx/color_gradient.svg" + else -> "hollowengine:textures/gui/icons/vfx/color_channels.svg" } private fun VfxGradient.withStop(index: Int, stop: VfxGradientStop): VfxGradient = @@ -262,8 +262,8 @@ internal fun VfxRgba.toUi(): UiColor = UiColor(r, g, b, a) internal fun UiColor.toRgba(): VfxRgba = VfxRgba(red, green, blue, alpha) private const val PaletteWidth = 26f -private const val RemoveIcon = "hollowengine:textures/gui/icons/remove.svg" -private const val KeyframeIcon = "hollowengine:textures/gui/icons/keyframe.svg" +private const val RemoveIcon = "hollowengine:textures/gui/icons/vfx/remove.svg" +private const val KeyframeIcon = "hollowengine:textures/gui/icons/vfx/key.svg" private val Accent = UiColor(0.84f, 0.5f, 0.11f, 1f) private val CheckerLight = UiColor(0.32f, 0.33f, 0.36f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt index 6dce69104..3f4dff90c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt @@ -114,4 +114,4 @@ private const val HeaderWidth = 150f private const val GraphWidth = DialogWidth - HeaderWidth - 220f - 80f -private const val CloseIcon = "hollowengine:textures/gui/icons/cross.svg" +private const val CloseIcon = "hollowengine:textures/gui/icons/timeline/close.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt index c4ce4e7ae..63230a9fe 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEditorPanel.kt @@ -5,10 +5,11 @@ import com.mojang.blaze3d.systems.RenderSystem import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.editor.GizmoEditMode +import ru.hollowhorizon.hollowengine.client.editor.GizmoHandleId import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeOpenFile import ru.hollowhorizon.hollowengine.client.ui.ide.PublishScene -import ru.hollowhorizon.hollowengine.client.ui.ide.SceneTarget import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorColors import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorIconButton @@ -20,30 +21,23 @@ import ru.hollowhorizon.hollowengine.client.ui.inspector.PublishInspector import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.shape.GenericShape import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint -import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem import ru.hollowhorizon.hollowengine.client.ui.widgets.UiKeyInput -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem import ru.hollowhorizon.hollowengine.client.utils.lang -import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeSpec -import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeTypes import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import kotlin.time.Duration.Companion.milliseconds private const val AutoSaveDelayMillis = 900L -private const val PlayIcon = "hollowengine:textures/gui/icons/play.svg" -private const val PauseIcon = "hollowengine:textures/gui/icons/pause.svg" -private const val RestartIcon = "hollowengine:textures/gui/icons/reload.svg" -private const val FloorIcon = "hollowengine:textures/gui/icons/layers.svg" -private const val ShapeIcon = "hollowengine:textures/gui/icons/box.svg" -private const val AddIcon = "hollowengine:textures/gui/icons/add.svg" -private const val RemoveIcon = "hollowengine:textures/gui/icons/remove.svg" +private const val PlayIcon = "hollowengine:textures/gui/icons/timeline/play.svg" +private const val PauseIcon = "hollowengine:textures/gui/icons/timeline/pause.svg" +private const val RestartIcon = "hollowengine:textures/gui/icons/vfx/restart.svg" +private const val FloorIcon = "hollowengine:textures/gui/icons/vfx/floor.svg" +private const val ShapeIcon = "hollowengine:textures/gui/icons/vfx/handles.svg" /** * The editor for a `.vfx` file. * - * The hierarchy goes to the [ru.hollowhorizon.hollowengine.client.ui.ide.SceneDock], curves to the timeline window and the fields to the + * The hierarchy goes to the scene window, curves to the timeline window and the fields to the * inspector. */ @Composable @@ -61,7 +55,12 @@ internal fun VfxEditorPanel(file: HollowIdeOpenFile) { } DisposableEffect(document) { - onDispose { RenderSystem.recordRenderCall(state.preview::close) } + onDispose { + RenderSystem.recordRenderCall { + state.preview.close() + state.materialPreview.close() + } + } } LaunchedEffect(document) { @@ -92,9 +91,9 @@ internal fun VfxEditorPanel(file: HollowIdeOpenFile) { PublishScene( source = "vfx-${file.path}", - key = Triple(document.revision, state.selected, state.expanded.toList()), + key = listOf(document.revision, state.selected, state.expanded.toList(), state.rootExpanded), ) { - sceneTarget(document, state) + vfxSceneTarget(document, state, file.path.substringAfterLast('/').substringBeforeLast('.')) } PublishTimeline(source = "vfx-${file.path}", key = file.path) { @@ -131,22 +130,28 @@ internal fun VfxEditorPanel(file: HollowIdeOpenFile) { private fun Toolbar(state: VfxEditorState) { val timeline = state.session.timeline val preview = state.preview - Column(modifier = Modifier.position(8.px, 8.px).gap(4.px)) { + Row(tags = listOf("viewport-toolbar"), modifier = Modifier.position(8.px, 8.px)) { AnimatorIconButton( icon = if (timeline.isPlaying) PauseIcon else PlayIcon, tooltip = vfxText(if (timeline.isPlaying) "pause" else "play"), + size = 12f, active = timeline.isPlaying, ) { timeline.isPlaying = !timeline.isPlaying } - AnimatorIconButton(RestartIcon, vfxText("restart")) { + AnimatorIconButton(RestartIcon, vfxText("restart"), size = 12f) { preview.restart() timeline.followPlayhead(0f) } - AnimatorIconButton(FloorIcon, vfxText("toggle_floor"), active = preview.showFloor) { + AnimatorIconButton(FloorIcon, vfxText("toggle_floor"), size = 12f, active = preview.showFloor) { preview.showFloor = !preview.showFloor } - AnimatorIconButton(ShapeIcon, vfxText("toggle_shape"), active = preview.showShape) { + AnimatorIconButton(ShapeIcon, vfxText("toggle_shape"), size = 12f, active = preview.showShape) { preview.showShape = !preview.showShape } + GizmoModes.forEach { (mode, icon, tooltip) -> + AnimatorIconButton(icon, tooltip.lang, size = 12f, active = mode in state.gizmoModes) { + state.gizmoModes = if (mode in state.gizmoModes) state.gizmoModes - mode else state.gizmoModes + mode + } + } } } @@ -158,24 +163,30 @@ internal class VfxEditorState(document: HollowIdeVfxDocument) { var selected by mutableStateOf(null) private set val expanded = mutableStateListOf() + var rootExpanded by mutableStateOf(true) /** Which inspector sections are open, kept here so they survive switching between nodes. */ private val sections = mutableStateMapOf() - /** Where the add-node menu opens from, once scene window has laid its button out. */ - var addAnchor by mutableStateOf(UiRect.Zero) - var addMenuOpen by mutableStateOf(false) + /** The material of the selected surface on its own, in the material section of the inspector. */ + val materialPreview = materialPreviewState() - /** The gizmo handle being dragged, with node as it was when drag started. */ + /** The shape handle being dragged, with node as it was when drag started. */ var drag: VfxGizmoHandle? = null + /** The transform gizmo of the world, drawn over the preview, and what it is set to move. */ + val transformGizmo = VfxTransformGizmo() + var gizmoModes by mutableStateOf(setOf(GizmoEditMode.TRANSLATE)) + var transformDrag: VfxTransformDrag? = null + var hoveredHandle by mutableStateOf(null) + /** What dragged handle is set to right now, drawn beside it. */ var readout by mutableStateOf(null) - fun isSectionOpen(key: String, default: Boolean): Boolean = sections[key] ?: default + fun isSectionOpen(key: String): Boolean = sections[key] ?: false - fun toggleSection(key: String, default: Boolean) { - sections[key] = !(sections[key] ?: default) + fun toggleSection(key: String) { + sections[key] = !isSectionOpen(key) } fun select(id: String?) { @@ -187,51 +198,6 @@ internal class VfxEditorState(document: HollowIdeVfxDocument) { fun focusProperty(nodeId: String, property: VfxProperty) = session.focus(nodeId, property) } -/** The node tree, as shared scene window shows it. */ -private fun sceneTarget(document: HollowIdeVfxDocument, state: VfxEditorState) = SceneTarget( - id = "vfx-nodes", - title = vfxText("nodes"), - items = buildList { appendNodes(document.effect.nodes, state.expanded, state.selected) }, - onSelect = { id -> state.select(id) }, - onToggle = { id -> if (id in state.expanded) state.expanded.remove(id) else state.expanded.add(id) }, - empty = vfxText("no_nodes"), -) { - SceneActions(document, state) -} - -@Composable -private fun SceneActions(document: HollowIdeVfxDocument, state: VfxEditorState) { - Row(modifier = Modifier.gap(2.px)) { - Box(modifier = Modifier.onPlaced { state.addAnchor = it }) { - AnimatorIconButton(AddIcon, vfxText("add_node")) { state.addMenuOpen = true } - } - if (state.selected != null) { - AnimatorIconButton(RemoveIcon, vfxText("remove_node")) { - state.selected?.let { id -> - document.edit { it.withoutNode(id) } - state.select(null) - } - } - } - } - - if (state.addMenuOpen) { - ContextMenu( - id = "vfx-add-node", - anchorBounds = state.addAnchor, - items = VfxNodeTypes.all.mapNotNull { type -> - val createDefault = type.createDefault ?: return@mapNotNull null - UiDropdownItem(type.titleKey.lang) { - val created = createDefault() - document.edit { effect -> effect.withChild(state.selected, created) } - state.select(created.id) - } - }, - onExpandedChange = { if (!it) state.addMenuOpen = false }, - ) - } -} - /** * The preview itself, and the gizmo over it. */ @@ -245,10 +211,17 @@ private fun Viewport(document: HollowIdeVfxDocument, state: VfxEditorState, sele val gizmoKey = listOf( preview.yaw, preview.pitch, preview.distance, preview.targetX, preview.targetY, preview.targetZ, preview.viewportWidth, preview.viewportHeight, preview.time, preview.showShape, preview.revision, node, + state.gizmoModes, ) val gizmo = remember(gizmoKey) { if (node == null) VfxGizmo.EMPTY else VfxGizmos.build(preview, node, runtime, preview.showShape, driven) } + val transform = state.transformGizmo + val handles = remember(gizmoKey) { + if (node == null || runtime == null || preview.viewportWidth <= 1f) return@remember emptyList() + transform.capture(preview) + transform.handles(runtime.frame, state.gizmoModes, driven) + } Box( id = "vfx-viewport", @@ -260,13 +233,27 @@ private fun Viewport(document: HollowIdeVfxDocument, state: VfxEditorState, sele .onKeyInput { input -> if (handleHistoryKeys(document, input)) input.consume() }.onPress { event -> val left = event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT val handle = if (left) gizmo.handleAt(event.localX, event.localY) else null + val moving = if (left && handle == null && node != null && runtime != null) { + transform.pick(handles, event.localX, event.localY)?.let { picked -> + transform.begin(picked, runtime.frame, runtime.parent?.frame, node.transform, event.localX, event.localY) + } + } else null state.drag = handle + state.transformDrag = moving state.readout = null - if (handle != null) document.beginGesture() else preview.beginCameraDrag() + if (handle != null || moving != null) document.beginGesture() else preview.beginCameraDrag() }.onDrag { event -> val handle = state.drag + val moving = state.transformDrag val current = selected?.let { document.effect.node(it) } when { + moving != null && current != null -> { + transform.drag(moving, event.localX, event.localY, event.modifiers)?.let { placed -> + document.edit { it.withNode(current.withCommon(transform = placed)) } + } + state.readout = transform.labelAt(moving)?.let { (x, y) -> VfxGizmoReadout(x, y, moving.label) } + } + handle != null && current != null -> { val fine = event.modifiers and GLFW.GLFW_MOD_SHIFT != 0 val snap = event.modifiers and GLFW.GLFW_MOD_CONTROL != 0 @@ -280,9 +267,13 @@ private fun Viewport(document: HollowIdeVfxDocument, state: VfxEditorState, sele } event.consume() }.onRelease { - if (state.drag != null) document.endGesture() + if (state.drag != null || state.transformDrag != null) document.endGesture() state.drag = null + state.transformDrag = null state.readout = null + }.onHover { event -> + val over = transform.pick(handles, event.localX, event.localY)?.id + if (over != state.hoveredHandle) state.hoveredHandle = over }.onScroll { event -> preview.zoom(event.scrollY) event.consume() @@ -292,7 +283,10 @@ private fun Viewport(document: HollowIdeVfxDocument, state: VfxEditorState, sele ) { Box( modifier = Modifier.size(100.percent, 100.percent).inputTransparent() - .drawBehind(key = gizmo to state.drag?.id) { drawGizmo(gizmo, state.drag?.id) }, + .drawBehind(key = listOf(gizmo, handles, state.drag?.id, state.hoveredHandle)) { + drawGizmo(gizmo, state.drag?.id) + transform.draw(this, handles, state.hoveredHandle, state.transformDrag) + }, ) state.readout?.let { readout -> Text( @@ -351,31 +345,12 @@ private fun ParticleCounter(preview: VfxPreviewState) { ) } +/** The modes of the transform gizmo, with the icons and names the IDE toolbar gives them for the world. */ +private val GizmoModes = listOf( + Triple(GizmoEditMode.TRANSLATE, "hollowengine:textures/gui/icons/gizmo_translate.svg", "hollowengine.gui.ide.gizmo.translate"), + Triple(GizmoEditMode.ROTATE, "hollowengine:textures/gui/icons/gizmo_rotate.svg", "hollowengine.gui.ide.gizmo.rotate"), + Triple(GizmoEditMode.SCALE, "hollowengine:textures/gui/icons/gizmo_scale.svg", "hollowengine.gui.ide.gizmo.scale"), +) + private val HandleOutline = UiColor(0.05f, 0.05f, 0.06f, 0.9f) private val CounterBackground = UiColor(0.06f, 0.07f, 0.08f, 0.7f) - -private fun MutableList>.appendNodes( - nodes: List, - expanded: List, - selected: String?, - depth: Int = 0, -) { - nodes.forEach { node -> - val type = VfxNodeTypes.of(node) - add( - UiTreeItem( - id = node.id, - label = if (node.enabled) node.name else "${node.name} (${vfxText("off")})", - depth = depth, - payload = node, - icon = type?.icon, - hasChildren = node.children.isNotEmpty(), - expanded = node.id in expanded, - selected = node.id == selected, - ) - ) - if (node.children.isNotEmpty() && node.id in expanded) { - appendNodes(node.children, expanded, selected, depth + 1) - } - } -} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt index 0b5c888b6..8b1e02557 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt @@ -12,11 +12,14 @@ import ru.hollowhorizon.hollowengine.common.vfx.VfxShape import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace -/** How many particles, where they are born, what they start with and how they move. */ +/** + * How many particles, where they are born, what they start with and how they move. How they look is + * up to the renderers under the emitter, each for itself. + */ @Composable internal fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { val emission = emitter.emission - Folding(state, "emission", vfxText("section_emission")) { + Folding(state, "emission", vfxText("section_emission"), VfxIcons.EMISSION) { VfxValueRow(vfxText("rate"), emission.rate, VfxProperty.RATE, vfxText("rate_hint")) { document.replace(emitter.copy(emission = emission.copy(rate = it))) } @@ -42,7 +45,7 @@ internal fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState ShapeFields(document, state, emitter) val spawn = emitter.spawn - Folding(state, "spawn", vfxText("section_spawn")) { + Folding(state, "spawn", vfxText("section_spawn"), VfxIcons.SPAWN) { VfxValueRow(vfxText("lifetime"), spawn.lifetime, VfxProperty.LIFETIME, vfxText("lifetime_hint")) { document.replace(emitter.copy(spawn = spawn.copy(lifetime = it))) } @@ -62,30 +65,8 @@ internal fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState } } - val appearance = emitter.appearance - Folding(state, "appearance", vfxText("section_particle")) { - ToggleRow(vfxText("uniform_size"), appearance.uniformSize) { - document.replace(emitter.copy(appearance = appearance.copy(uniformSize = it))) - } - VfxVec3Row( - vfxText("size"), - appearance.size, - VfxProperty.SIZE, - vfxText("size_hint"), - uniform = appearance.uniformSize, - ) { - document.replace(emitter.copy(appearance = appearance.copy(size = it))) - } - VfxVec3Row(vfxText("spin"), appearance.rotation, VfxProperty.SPIN, vfxText("spin_hint")) { - document.replace(emitter.copy(appearance = appearance.copy(rotation = it))) - } - VfxColorRow(vfxText("color"), appearance.color, VfxProperty.COLOR, vfxText("color_hint")) { - document.replace(emitter.copy(appearance = appearance.copy(color = it))) - } - } - val motion = emitter.motion - Folding(state, "motion", vfxText("section_motion")) { + Folding(state, "motion", vfxText("section_motion"), VfxIcons.MOTION) { VfxValueRow(vfxText("gravity"), motion.gravity, VfxProperty.GRAVITY, vfxText("gravity_hint")) { document.replace(emitter.copy(motion = motion.copy(gravity = it))) } @@ -96,7 +77,7 @@ internal fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState VfxModuleSections(document, state, emitter) - Folding(state, "space", vfxText("section_space"), openByDefault = false) { + Folding(state, "space", vfxText("section_space"), VfxIcons.SPACE) { Pills(VfxSimulationSpace.entries, emitter.space, { vfxText("space_${it.name.lowercase()}") }) { document.replace(emitter.copy(space = it)) } @@ -120,7 +101,7 @@ private fun ShapeFields(document: HollowIdeVfxDocument, state: VfxEditorState, e val shape = emitter.shape fun update(next: VfxShape) = document.replace(emitter.copy(shape = next)) - Folding(state, "shape", vfxText("section_shape")) { + Folding(state, "shape", vfxText("section_shape"), VfxIcons.SHAPE) { Pills(VfxShapeKind.entries, shape.kind, { vfxText("shape_${it.name.lowercase()}") }) { update(shape.copy(kind = it)) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt index 791394a14..9114e8443 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt @@ -45,10 +45,10 @@ class VfxDrivenValue(val values: FloatArray, private val channels: Set) { * expression one wide field, and a curve, the only one that cannot be typed, shows its shape. */ private enum class VfxValueKind(val key: String, val icon: String) { - CONST("kind_const", "hollowengine:textures/gui/icons/types.svg"), - RANGE("kind_range", "hollowengine:textures/gui/icons/range.svg"), - CURVE("kind_curve", "hollowengine:textures/gui/icons/curve.svg"), - EXPR("kind_expr", "hollowengine:textures/gui/icons/math.svg"); + CONST("kind_const", "hollowengine:textures/gui/icons/vfx/value_const.svg"), + RANGE("kind_range", "hollowengine:textures/gui/icons/vfx/value_range.svg"), + CURVE("kind_curve", "hollowengine:textures/gui/icons/vfx/value_curve.svg"), + EXPR("kind_expr", "hollowengine:textures/gui/icons/vfx/value_expr.svg"); } private fun VfxValue.kind(): VfxValueKind = when (this) { @@ -81,26 +81,19 @@ internal fun formatNumber(value: Float): String = if (value == value.toInt().toFloat() && abs(value) < 1.0e7f) value.toInt().toString() else "%.4f".format(value).replace(',', '.').trimEnd('0').trimEnd('.') -/** The label of a row, with the explanation that used to sit in brackets behind a hover icon. */ +/** + * The label of a row. What the field means is its tooltip rather than a line of text under it, so a + * section stays one row per value. + */ @Composable fun VfxFieldLabel(label: String, hint: String? = null, width: Float = FieldLabelWidth) { if (label.isEmpty()) return - Row(modifier = Modifier.size(width.px, UiLength.Fit).gap(2.px).alignItems(vertical = UiAlign.CENTER)) { - Text( - label, - tags = listOf("insp-inline-label"), - modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).textWrap(false).textOverflow(UiTextOverflow.DOTS), - ) - if (!hint.isNullOrBlank()) HintIcon(hint) - } -} - -@Composable -private fun HintIcon(text: String) { - Image( - InfoIcon, - tags = listOf("vfx-hint-icon"), - modifier = Modifier.size(9.px, 9.px).tint(HintTint).tooltipOnHover(text), + val hinted = !hint.isNullOrBlank() + Text( + label, + tags = if (hinted) listOf("insp-inline-label", "hinted") else listOf("insp-inline-label"), + modifier = Modifier.size(width.px, UiLength.Fit).textWrap(false).textOverflow(UiTextOverflow.DOTS) + .then(if (hinted) Modifier.tooltipOnHover(hint.orEmpty()) else Modifier), ) } @@ -471,15 +464,14 @@ internal fun InspectorIcon(icon: String, tooltip: String, onClick: () -> Unit) { internal fun vfxText(name: String): String = "hollowengine.gui.vfx.$name".lang -internal const val FieldLabelWidth = 92f +internal const val FieldLabelWidth = 84f /** Vectors carry three fields, so their short labels ("Position") get less of the line. */ -internal const val VectorLabelWidth = 54f +internal const val VectorLabelWidth = 48f -internal const val CurveCellHeight = 16f +internal const val CurveCellHeight = 15f private const val CurvePreviewSteps = 40 -private const val InfoIcon = "hollowengine:textures/gui/icons/info.svg" -private const val KeyframeIcon = "hollowengine:textures/gui/icons/keyframe.svg" +private const val KeyframeIcon = "hollowengine:textures/gui/icons/vfx/key.svg" internal val HintTint = UiColor(0.55f, 0.58f, 0.65f, 1f) internal val CurveBackground = UiColor(0.09f, 0.1f, 0.11f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt index 5b65445fe..4dbfd9d3c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt @@ -2,8 +2,26 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import ru.hollowhorizon.hollowengine.client.ui.Checkbox +import ru.hollowhorizon.hollowengine.client.ui.HollowUiContent +import ru.hollowhorizon.hollowengine.client.ui.Image +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.Row +import ru.hollowhorizon.hollowengine.client.ui.TextField +import ru.hollowhorizon.hollowengine.client.ui.UiLength +import ru.hollowhorizon.hollowengine.client.ui.grow import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument -import ru.hollowhorizon.hollowengine.client.ui.inspector.* +import ru.hollowhorizon.hollowengine.client.ui.inspector.CollapsibleSection +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorTarget +import ru.hollowhorizon.hollowengine.client.ui.inspector.Readonly +import ru.hollowhorizon.hollowengine.client.ui.inspector.ToggleRow +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.size +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.client.utils.lang import ru.hollowhorizon.hollowengine.common.vfx.* @@ -35,16 +53,9 @@ internal fun HollowIdeVfxDocument.replace(node: VfxNodeSpec) = edit(mergeKey = " @Composable private fun NodeFields(document: HollowIdeVfxDocument, state: VfxEditorState, node: VfxNodeSpec) { - Folding(state, "node", vfxText("section_node")) { - NameRow(vfxText("name"), node.name) { document.replace(node.withCommon(name = it)) } - ToggleRow(vfxText("enabled"), node.enabled) { document.replace(node.withCommon(enabled = it)) } - if (node is VfxParticleRendererSpec) { - val parent = document.effect.parentOf(node.id) - Hint(vfxText(if (parent is VfxEmitterSpec) "renders_particles" else "renders_once")) - } - } + NodeHead(document, node) - Folding(state, "transform", vfxText("section_transform"), openByDefault = false) { + Folding(state, "transform", vfxText("section_transform"), VfxIcons.TRANSFORM) { val transform = node.transform VfxFloat3Row(vfxText("position"), transform.position, VfxProperty.POSITION) { document.replace(node.withCommon(transform = transform.copy(position = it))) @@ -57,6 +68,10 @@ private fun NodeFields(document: HollowIdeVfxDocument, state: VfxEditorState, no } } + if (node is VfxParticleRendererSpec && document.effect.parentOf(node.id) is VfxEmitterSpec) { + ParticleFields(document, state, node) + } + when (node) { is VfxEmitterSpec -> EmitterFields(document, state, node) is VfxPlaneSpec -> PlaneFields(document, state, node) @@ -70,26 +85,100 @@ private fun NodeFields(document: HollowIdeVfxDocument, state: VfxEditorState, no } } -/** A section that remembers whether it is open per effect editor. */ +/** + * Whether the node is on and what it is called, on one line above the sections; a renderer also says + * whether it draws on particles or once, which depends on where it sits in the tree. + */ +@Composable +private fun NodeHead(document: HollowIdeVfxDocument, node: VfxNodeSpec) { + var draft by remember(node.id, node.name) { mutableStateOf(node.name) } + Row(tags = listOf("vfx-node-head")) { + Checkbox( + checked = node.enabled, + id = "vfx-node-enabled-${node.id}", + tags = listOf("insp-checkbox"), + modifier = Modifier.tooltipOnHover(vfxText("enabled")), + onCheckedChange = { document.replace(node.withCommon(enabled = it)) }, + ) + TextField( + value = draft, + id = "vfx-node-name-${node.id}", + fontSize = 9f, + placeholder = vfxText("name"), + tags = listOf("insp-input", "insp-inline-input"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f), + onChange = { typed -> + draft = typed + val trimmed = typed.trim() + if (trimmed.isNotEmpty() && trimmed != node.name) document.replace(node.withCommon(name = trimmed)) + }, + ) + if (node is VfxParticleRendererSpec) { + val onParticles = document.effect.parentOf(node.id) is VfxEmitterSpec + Image( + if (onParticles) VfxIcons.PARTICLE else VfxIcons.SPAWN_ONCE, + tags = listOfNotNull("vfx-placement", "active".takeIf { onParticles }), + modifier = Modifier.tooltipOnHover(vfxText(if (onParticles) "renders_particles" else "renders_once")), + ) + } + } +} + +/** + * What a renderer gives each particle of its emitter. A trail has a width of its own and does not + * turn, so it only offers the colour. + */ +@Composable +private fun ParticleFields(document: HollowIdeVfxDocument, state: VfxEditorState, node: VfxParticleRendererSpec) { + val look = node.particle + fun update(next: VfxAppearance) = document.replace(node.withParticle(next)) + + Folding(state, "particle", vfxText("section_particle"), VfxIcons.PARTICLE) { + if (node !is VfxTrailSpec) { + ToggleRow(vfxText("uniform_size"), look.uniformSize) { update(look.copy(uniformSize = it)) } + VfxVec3Row(vfxText("size"), look.size, VfxProperty.SIZE, vfxText("size_hint"), uniform = look.uniformSize) { + update(look.copy(size = it)) + } + VfxVec3Row(vfxText("spin"), look.rotation, VfxProperty.SPIN, vfxText("spin_hint")) { + update(look.copy(rotation = it)) + } + } + VfxColorRow(vfxText("color"), look.color, VfxProperty.COLOR, vfxText("color_hint")) { + update(look.copy(color = it)) + } + } +} + +/** + * A section that remembers whether it is open per effect editor. Every section starts closed, so a + * node opens as a list of what it has rather than a wall of fields. + */ @Composable internal fun Folding( state: VfxEditorState, key: String, title: String, - openByDefault: Boolean = true, + icon: String, + trailing: HollowUiContent? = null, content: @Composable () -> Unit, ) { - val open = state.isSectionOpen(key, openByDefault) - CollapsibleSection(title, open, id = "vfx-section-$key", onToggle = { state.toggleSection(key, openByDefault) }) { + CollapsibleSection( + title = title, + expanded = state.isSectionOpen(key), + id = "vfx-section-$key", + icon = icon, + trailing = trailing, + onToggle = { state.toggleSection(key) }, + ) { content() } } -/** What the inspector shows when nothing in the tree is selected. */ +/** What the inspector shows for the effect itself, the root of the tree. */ internal fun vfxEffectInspector(document: HollowIdeVfxDocument, state: VfxEditorState): InspectorTarget = - InspectorTarget(id = "vfx-effect", title = vfxText("effect")) { + InspectorTarget(id = "vfx-effect", title = vfxText("effect"), icon = VfxIcons.EFFECT) { val effect = document.effect - Folding(state, "timeline", vfxText("section_timeline")) { + Folding(state, "timeline", vfxText("section_timeline"), VfxIcons.TIMELINE) { VfxNumberRow( vfxText("timeline_duration"), effect.timeline.duration, @@ -102,8 +191,46 @@ internal fun vfxEffectInspector(document: HollowIdeVfxDocument, state: VfxEditor document.edit { it.copy(timeline = it.timeline.copy(loop = loop)) } } } - Folding(state, "stats", vfxText("section_stats")) { + Folding(state, "stats", vfxText("section_stats"), VfxIcons.STATS) { Readonly(vfxText("nodes"), effect.walk().size.toString()) Readonly(vfxText("expressions"), effect.expressions().size.toString()) } } + +/** The icons of the effect editor, one family drawn for it. */ +internal object VfxIcons { + private const val ROOT = "hollowengine:textures/gui/icons/vfx/" + + const val EFFECT = ROOT + "node_effect.svg" + const val TRANSFORM = ROOT + "transform.svg" + const val PARTICLE = ROOT + "particle.svg" + const val SPAWN_ONCE = ROOT + "key.svg" + const val EMISSION = ROOT + "emission.svg" + const val SHAPE = ROOT + "shape.svg" + const val SPAWN = ROOT + "spawn.svg" + const val MOTION = ROOT + "motion.svg" + const val SPACE = ROOT + "space.svg" + const val MODULES = ROOT + "modules.svg" + const val FORCE = ROOT + "force.svg" + const val NOISE = ROOT + "noise.svg" + const val VELOCITY = ROOT + "velocity.svg" + const val COLLISION = ROOT + "collision.svg" + const val FLIPBOOK = ROOT + "flipbook.svg" + const val FACING = ROOT + "facing.svg" + const val MESH = ROOT + "mesh.svg" + const val MODEL = ROOT + "model.svg" + const val MATERIAL = ROOT + "material.svg" + const val SHADER = ROOT + "shader.svg" + const val TRAIL = ROOT + "trail.svg" + const val BEAM = ROOT + "beam.svg" + const val POST = ROOT + "post.svg" + const val SHAKE = ROOT + "shake.svg" + const val TIMELINE = ROOT + "timeline.svg" + const val STATS = ROOT + "stats.svg" + const val ADD = ROOT + "add.svg" + const val REMOVE = ROOT + "remove.svg" + const val DUPLICATE = ROOT + "duplicate.svg" + const val RENAME = ROOT + "rename.svg" + const val TOGGLE = ROOT + "toggle.svg" + const val MORE = ROOT + "more.svg" +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxMaterialPreview.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxMaterialPreview.kt new file mode 100644 index 000000000..980402d10 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxMaterialPreview.kt @@ -0,0 +1,73 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.withFrameNanos +import kotlinx.coroutines.isActive +import ru.hollowhorizon.hollowengine.client.ui.Box +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.drawBehind +import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect +import ru.hollowhorizon.hollowengine.common.vfx.VfxFacing +import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxPlaneSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxSurfaceSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxTransform + +/** + * The material being edited on its own, turning slowly in an empty view. + */ +@Composable +internal fun VfxMaterialPreview(state: VfxEditorState, surface: VfxSurfaceSpec) { + val preview = state.materialPreview + val effect = remember(surface) { VfxEffect(nodes = listOf(previewNode(surface))) } + val current by rememberUpdatedState(effect) + + LaunchedEffect(preview) { + while (isActive) { + withFrameNanos { frameNanos -> + preview.sync(current, PreviewAsset) + val dt = preview.deltaSinceLastFrame(frameNanos) + if (dt > 0f) { + preview.advanceBy(dt) + preview.yaw = (preview.yaw + dt * TurnDegreesPerSecond) % 360f + } + } + } + } + + Box( + id = "vfx-material-preview", + tags = listOf("vfx-material-preview"), + modifier = Modifier.drawBehind(key = preview) { + drawGl { preview.render(rect, poseStack) } + }, + ) +} + +/** The node the preview draws: [surface] alone, where the camera looks, with nothing under it. */ +private fun previewNode(surface: VfxSurfaceSpec): VfxNodeSpec = when (surface) { + is VfxMeshSpec -> surface.withCommon(transform = VfxTransform.IDENTITY, children = emptyList(), enabled = true) + is VfxPlaneSpec -> surface.copy( + transform = VfxTransform.IDENTITY, + children = emptyList(), + enabled = true, + facing = VfxFacing.CAMERA, + ) + + else -> VfxPlaneSpec(material = surface.material, tint = surface.tint) +} + +/** A preview camera that frames a one block surface at the origin. */ +internal fun materialPreviewState(): VfxPreviewState = VfxPreviewState(initialDistance = 1.9f).apply { + targetY = 0f + pitch = 18f + showFloor = false +} + +private const val PreviewAsset = "hollowengine:vfx/material_preview" +private const val TurnDegreesPerSecond = 24f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt index cbc16e65f..a316126c1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxModuleInspector.kt @@ -7,19 +7,15 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import ru.hollowhorizon.hollowengine.client.ui.Box import ru.hollowhorizon.hollowengine.client.ui.Modifier -import ru.hollowhorizon.hollowengine.client.ui.Row -import ru.hollowhorizon.hollowengine.client.ui.UiAlign -import ru.hollowhorizon.hollowengine.client.ui.alignItems -import ru.hollowhorizon.hollowengine.client.ui.gap import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument import ru.hollowhorizon.hollowengine.client.ui.inspector.Hint import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorIconButton import ru.hollowhorizon.hollowengine.client.ui.inspector.Pills import ru.hollowhorizon.hollowengine.client.ui.inspector.ToggleRow import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.onPlaced import ru.hollowhorizon.hollowengine.client.ui.percent -import ru.hollowhorizon.hollowengine.client.ui.px import ru.hollowhorizon.hollowengine.client.ui.size import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem @@ -37,6 +33,7 @@ import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvMode import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxVelocityOverLifetimeSpec +import kotlin.reflect.KClass /** * The modules of an emitter, one folding section each, and a menu of what can still be added. @@ -45,14 +42,27 @@ import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxVelocityOverLifetimeS internal fun VfxModuleSections(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { emitter.modules.forEachIndexed { index, module -> val type = VfxModuleTypes.of(module) - val title = type?.titleKey?.lang ?: module.id - Folding(state, "module-${emitter.id}-${module.id}", title) { - Row(modifier = Modifier.size(100.percent).gap(4.px).alignItems(vertical = UiAlign.CENTER)) { - ToggleRow(vfxText("module_enabled"), module.enabled) { - document.replaceModule(emitter, index, module.withEnabled(it)) - } - InspectorButton(vfxText("module_remove")) { document.removeModule(emitter, index) } - } + val name = type?.titleKey?.lang ?: module.id + val title = if (module.enabled) name else "$name (${vfxText("off")})" + Folding( + state, + "module-${emitter.id}-${module.id}", + title, + moduleIcon(module), + trailing = { + InspectorIconButton( + VfxIcons.TOGGLE, + vfxText("module_enabled"), + active = module.enabled, + tags = listOf("insp-inline-icon"), + ) { document.replaceModule(emitter, index, module.withEnabled(!module.enabled)) } + InspectorIconButton( + VfxIcons.REMOVE, + vfxText("module_remove"), + tags = listOf("insp-inline-icon", "danger"), + ) { document.removeModule(emitter, index) } + }, + ) { ModuleFields(document, emitter, index, module) } } @@ -71,7 +81,7 @@ private fun AddModuleButton(document: HollowIdeVfxDocument, emitter: VfxEmitterS var anchor by remember { mutableStateOf(UiRect.Zero) } Box(modifier = Modifier.size(100.percent).onPlaced { anchor = it }) { - InspectorButton(vfxText("module_add")) { open = true } + InspectorButton(vfxText("module_add"), icon = VfxIcons.ADD) { open = true } } if (!open) return @@ -79,7 +89,7 @@ private fun AddModuleButton(document: HollowIdeVfxDocument, emitter: VfxEmitterS id = "vfx-add-module", anchorBounds = anchor, items = addable.map { type -> - UiDropdownItem(type.titleKey.lang) { + UiDropdownItem(type.titleKey.lang, icon = moduleIcon(type.specClass)) { type.createDefault?.invoke()?.let { document.addModule(emitter, it) } } }, @@ -87,6 +97,17 @@ private fun AddModuleButton(document: HollowIdeVfxDocument, emitter: VfxEmitterS ) } +private fun moduleIcon(module: VfxModuleSpec): String = moduleIcon(module::class) + +private fun moduleIcon(kind: KClass): String = when (kind) { + VfxVelocityOverLifetimeSpec::class -> VfxIcons.VELOCITY + VfxForceSpec::class -> VfxIcons.FORCE + VfxNoiseSpec::class -> VfxIcons.NOISE + VfxCollisionSpec::class -> VfxIcons.COLLISION + VfxUvAnimationSpec::class -> VfxIcons.FLIPBOOK + else -> VfxIcons.MODULES +} + @Composable private fun ModuleFields( document: HollowIdeVfxDocument, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt index a86f96b58..d196f12c7 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewGizmo.kt @@ -39,7 +39,8 @@ class VfxGizmo(val lines: List, val handles: List) } /** - * Builds the gizmo of one node as the preview camera sees it. + * Builds the handles of an emitter's shape as the preview camera sees it. Placement is the world + * transform gizmo's job ([VfxTransformGizmo]). */ object VfxGizmos { fun build( @@ -55,7 +56,6 @@ object VfxGizmos { val builder = Builder(preview, preview.panelMatrix(width, height), runtime.frame, driven) if (showShape && node is VfxEmitterSpec) builder.shape(node.shape) - builder.moveArrows(runtime.parent?.frame, node) return VfxGizmo(builder.lines, builder.handles) } @@ -305,46 +305,6 @@ object VfxGizmos { } } } - - fun moveArrows(parent: VfxFrame?, node: VfxNodeSpec) { - val origin = Vector3f(frame.position.x, frame.position.y, frame.position.z) - val length = Vector3f(origin).sub(basis.eye).length() * ARROW_SHARE - val keyed = driven(VfxProperty.POSITION) - - listOf(Vec3f.X_AXIS, Vec3f.Y_AXIS, Vec3f.Z_AXIS).forEachIndexed { index, axis -> - val color = listOf(AxisX, AxisY, AxisZ)[index] - val direction = MutableVec3f() - if (parent != null) parent.transformDirection(axis, direction) else direction.set(axis) - val scale = sqrt(direction.sqrLength()).takeIf { it > 1.0e-6f } ?: 1f - val unit = Vector3f(direction.x / scale, direction.y / scale, direction.z / scale) - val tip = Vector3f(unit).mul(length).add(origin) - segment(origin, tip, color) - if (keyed?.drives(index) == true) return@forEachIndexed - - val from = preview.project(matrix, origin) ?: return@forEachIndexed - val to = preview.project(matrix, tip) ?: return@forEachIndexed - if (!sane(to)) return@forEachIndexed - val perUnit = scale / length - val start = node.transform.position - val startValue = listOf(start.x, start.y, start.z)[index] - handles += VfxGizmoHandle( - id = "move-$index", - x = to.x, - y = to.y, - screenAxisX = (to.x - from.x) * perUnit, - screenAxisY = (to.y - from.y) * perUnit, - color = color, - readout = { startValue + it }, - ) { spec, delta -> - val moved = when (index) { - 0 -> Vec3f(start.x + delta, start.y, start.z) - 1 -> Vec3f(start.x, start.y + delta, start.z) - else -> Vec3f(start.x, start.y, start.z + delta) - } - spec.withCommon(transform = spec.transform.copy(position = moved)) - } - } - } } private fun VfxNodeSpec.withShape(change: (VfxShape) -> VfxShape): VfxNodeSpec { @@ -360,8 +320,6 @@ object VfxGizmos { private const val NEAR_CLIP = 0.06f private const val SCREEN_LIMIT = 8000f - private const val ARROW_SHARE = 0.14f - private const val FINE_FACTOR = 0.1f private const val TICK = 0.1f private const val FINE_TICK = 0.01f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt index d11b4b8cf..42b84e2a5 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt @@ -19,15 +19,18 @@ import kotlin.math.ceil import kotlin.math.cos import kotlin.math.sin +/** The vertical field of view of the preview camera, in degrees. */ +internal const val VfxPreviewFieldOfView = 50f + /** * The preview of the effect being edited: an orbit camera with perspective, a floor, and one * playing instance. */ @Stable -class VfxPreviewState { +class VfxPreviewState(initialDistance: Float = 4.5f) { var yaw by mutableStateOf(35f) var pitch by mutableStateOf(22f) - private val zoomSpring = SpringZoom(4.5f, MIN_DISTANCE, MAX_DISTANCE, perNotch = ZOOM_PER_NOTCH) + private val zoomSpring = SpringZoom(initialDistance, MIN_DISTANCE, MAX_DISTANCE, perNotch = ZOOM_PER_NOTCH) val distance: Float get() = zoomSpring.value var targetX by mutableStateOf(0f) var targetY by mutableStateOf(0.7f) @@ -256,7 +259,7 @@ class VfxPreviewState { const val PREVIEW_SEED = 0x5EED - val FIELD_OF_VIEW = Math.toRadians(50.0).toFloat() + val FIELD_OF_VIEW = Math.toRadians(VfxPreviewFieldOfView.toDouble()).toFloat() const val NEAR = 0.05f const val FAR = 200f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSceneTree.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSceneTree.kt new file mode 100644 index 000000000..e97e97ce0 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSceneTree.kt @@ -0,0 +1,174 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import net.minecraft.client.Minecraft +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeOverlay +import ru.hollowhorizon.hollowengine.client.ui.ide.SceneTarget +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiKeyInput +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxNodeTypes + +/** The id of the row that stands for the effect itself, above its nodes. */ +internal const val VfxRootId = "vfx-root" + +/** + * The node tree as the scene window shows it: the effect as the root, its nodes under it. + */ +internal fun vfxSceneTarget(document: HollowIdeVfxDocument, state: VfxEditorState, title: String) = SceneTarget( + id = "vfx-nodes", + items = buildList { + val nodes = document.effect.nodes + add( + UiTreeItem( + id = VfxRootId, + label = title, + depth = 0, + payload = null, + icon = VfxIcons.EFFECT, + hasChildren = nodes.isNotEmpty(), + expanded = state.rootExpanded, + selected = state.selected == null, + ) + ) + if (state.rootExpanded) appendNodes(nodes, state.expanded, state.selected, depth = 1) + }, + onSelect = { id -> state.select(id.takeUnless { it == VfxRootId }) }, + onToggle = { id -> + when (id) { + VfxRootId -> state.rootExpanded = !state.rootExpanded + in state.expanded -> state.expanded.remove(id) + else -> state.expanded.add(id) + } + }, + hint = vfxText("no_nodes").takeIf { document.effect.nodes.isEmpty() }, + menu = { id -> sceneMenu(document, state, id.takeUnless { it == VfxRootId }) }, + onKey = { input -> handleSceneKey(document, state, input) }, + onMove = { dragged, target -> move(document, state, dragged, target.takeUnless { it == VfxRootId }) }, + canMove = { dragged, target -> target == VfxRootId || !document.effect.isWithin(target, dragged) }, +) + +private fun MutableList>.appendNodes( + nodes: List, + expanded: List, + selected: String?, + depth: Int, +) { + nodes.forEach { node -> + add( + UiTreeItem( + id = node.id, + label = if (node.enabled) node.name else "${node.name} (${vfxText("off")})", + depth = depth, + payload = node, + icon = VfxNodeTypes.of(node)?.icon, + hasChildren = node.children.isNotEmpty(), + expanded = node.id in expanded, + selected = node.id == selected, + ) + ) + if (node.children.isNotEmpty() && node.id in expanded) { + appendNodes(node.children, expanded, selected, depth + 1) + } + } +} + +/** What a right click offers: adding under the node (or the effect), and what can be done to the node. */ +private fun sceneMenu(document: HollowIdeVfxDocument, state: VfxEditorState, id: String?): List { + val add = UiDropdownItem( + vfxText(if (id == null) "add_node" else "add_child"), + icon = VfxIcons.ADD, + children = VfxNodeTypes.all.mapNotNull { type -> + val create = type.createDefault ?: return@mapNotNull null + UiDropdownItem(type.titleKey.lang, icon = type.icon) { add(document, state, id, create()) } + }, + ) + val node = id?.let(document.effect::node) ?: return listOf(add) + + val siblings = document.effect.parentOf(node.id)?.children ?: document.effect.nodes + val index = siblings.indexOfFirst { it.id == node.id } + return listOf( + add, + UiDropdownItem(vfxText("duplicate"), icon = VfxIcons.DUPLICATE, shortcut = "Ctrl+D", separatorBefore = true) { + duplicate(document, state, node.id) + }, + UiDropdownItem(vfxText("rename"), icon = VfxIcons.RENAME, shortcut = "F2") { rename(state, node.id) }, + UiDropdownItem(vfxText(if (node.enabled) "disable" else "enable"), icon = VfxIcons.TOGGLE) { + document.replace(node.withCommon(enabled = !node.enabled)) + }, + UiDropdownItem(vfxText("move_up"), shortcut = "Alt+↑", enabled = index > 0, separatorBefore = true) { + document.edit { it.withShifted(node.id, -1) } + }, + UiDropdownItem(vfxText("move_down"), shortcut = "Alt+↓", enabled = index < siblings.lastIndex) { + document.edit { it.withShifted(node.id, 1) } + }, + UiDropdownItem(vfxText("move_out"), enabled = document.effect.parentOf(node.id) != null) { + val parent = document.effect.parentOf(node.id) ?: return@UiDropdownItem + val grand = document.effect.parentOf(parent.id) + val at = (grand?.children ?: document.effect.nodes).indexOfFirst { it.id == parent.id } + 1 + document.edit { it.withMoved(node.id, grand?.id, at) } + }, + UiDropdownItem(vfxText("remove_node"), icon = VfxIcons.REMOVE, shortcut = "Del", separatorBefore = true) { + remove(document, state, node.id) + }, + ) +} + +private fun handleSceneKey(document: HollowIdeVfxDocument, state: VfxEditorState, input: UiKeyInput): Boolean { + if (input.control && !input.repeat) { + when (input.key) { + GLFW.GLFW_KEY_Z if input.shift -> return document.redo() + GLFW.GLFW_KEY_Z -> return document.undo() + GLFW.GLFW_KEY_Y -> return document.redo() + } + } + val id = state.selected ?: return false + return when { + input.key == GLFW.GLFW_KEY_DELETE -> remove(document, state, id).let { true } + input.key == GLFW.GLFW_KEY_F2 -> rename(state, id).let { true } + input.control && input.key == GLFW.GLFW_KEY_D && !input.repeat -> duplicate(document, state, id).let { true } + input.alt && input.key == GLFW.GLFW_KEY_UP -> document.edit { it.withShifted(id, -1) }.let { true } + input.alt && input.key == GLFW.GLFW_KEY_DOWN -> document.edit { it.withShifted(id, 1) }.let { true } + else -> false + } +} + +private fun add(document: HollowIdeVfxDocument, state: VfxEditorState, parent: String?, node: VfxNodeSpec) { + document.edit { it.withChild(parent, node) } + if (parent == null) state.rootExpanded = true else if (parent !in state.expanded) state.expanded.add(parent) + state.select(node.id) +} + +private fun duplicate(document: HollowIdeVfxDocument, state: VfxEditorState, id: String) { + var created: String? = null + document.edit { effect -> + val (next, copy) = effect.withDuplicate(id) ?: return@edit effect + created = copy + next + } + created?.let(state::select) +} + +private fun remove(document: HollowIdeVfxDocument, state: VfxEditorState, id: String) { + val parent = document.effect.parentOf(id)?.id + document.edit { it.withoutNode(id) } + state.select(parent) +} + +private fun move(document: HollowIdeVfxDocument, state: VfxEditorState, dragged: String, target: String?): Boolean { + if (target != null && document.effect.isWithin(target, dragged)) return false + if (document.effect.parentOf(dragged)?.id == target && target != null) return false + document.edit { it.withMoved(dragged, target) } + if (target == null) state.rootExpanded = true else if (target !in state.expanded) state.expanded.add(target) + state.select(dragged) + return true +} + +/** Selects the node and puts the caret into its name in the inspector. */ +private fun rename(state: VfxEditorState, id: String) { + state.select(id) + Minecraft.getInstance().execute { HollowIdeOverlay.focusSurface("vfx-node-name-$id") } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt index 48c12cba3..9e983a9af 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt @@ -1,11 +1,20 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx import androidx.compose.runtime.Composable +import net.minecraft.client.Minecraft +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.Row import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.UiAlign +import ru.hollowhorizon.hollowengine.client.ui.UiLength +import ru.hollowhorizon.hollowengine.client.ui.alignItems +import ru.hollowhorizon.hollowengine.client.ui.gap +import ru.hollowhorizon.hollowengine.client.ui.grow import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument -import ru.hollowhorizon.hollowengine.client.ui.inspector.Hint -import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorButton -import ru.hollowhorizon.hollowengine.client.ui.inspector.TextRow +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorIconButton +import ru.hollowhorizon.hollowengine.client.ui.percent +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.size import ru.hollowhorizon.hollowengine.client.vfx.render.VfxShaderDeclarations import ru.hollowhorizon.hollowengine.common.vfx.VfxCameraShakeSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxPostEffectSpec @@ -16,12 +25,10 @@ import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformValue @Composable internal fun PostEffectFields(document: HollowIdeVfxDocument, state: VfxEditorState, post: VfxPostEffectSpec) { - Folding(state, "post", vfxText("section_post")) { - TextRow(vfxText("shader"), post.shader, id = "vfx-post-shader") { typed -> - val shader = typed.trim() - document.replace(post.copy(shader = shader, uniforms = alignUniforms(shader, post.uniforms))) + Folding(state, "post", vfxText("section_post"), VfxIcons.POST) { + VfxShaderRow(post.shader, vfxText("shader_post_hint"), "vfx-post-shader") { shader -> + document.replace(post.copy(shader = shader.orEmpty(), uniforms = alignUniforms(shader, post.uniforms))) } - Hint(vfxText("shader_post_hint")) VfxShaderFields( post.shader, post.uniforms, @@ -34,7 +41,7 @@ internal fun PostEffectFields(document: HollowIdeVfxDocument, state: VfxEditorSt @Composable internal fun CameraShakeFields(document: HollowIdeVfxDocument, state: VfxEditorState, shake: VfxCameraShakeSpec) { - Folding(state, "shake", vfxText("section_shake")) { + Folding(state, "shake", vfxText("section_shake"), VfxIcons.SHAKE) { VfxValueRow(vfxText("shake_strength"), shake.strength, VfxProperty.SHAKE_STRENGTH, vfxText("shake_strength_hint")) { document.replace(shake.copy(strength = it)) } @@ -47,10 +54,48 @@ internal fun CameraShakeFields(document: HollowIdeVfxDocument, state: VfxEditorS } } +/** + * The shader a surface or a screen effect is drawn with, by its `namespace:path` name. [hint] says what + * the geometry hands the shader, so it lives in the tooltip of the label. + */ +@Composable +internal fun VfxShaderRow(shader: String?, hint: String, id: String, onChange: (String?) -> Unit) { + VfxAssetRow( + label = vfxText("shader"), + value = shader.orEmpty(), + hint = hint, + id = id, + candidates = { VfxShaderAssets.list() }, + exists = VfxShaderAssets::exists, + placeholder = vfxText("shader_placeholder"), + ) { typed -> onChange(typed.trim().ifBlank { null }) } +} + +/** The core shaders the loaded packs offer an effect, named the way a material names them. */ +internal object VfxShaderAssets { + private const val Root = "shaders/core/" + + fun list(): List { + val manager = Minecraft.getInstance().resourceManager ?: return emptyList() + return runCatching { + manager.listResources(Root.trimEnd('/')) { it.path.endsWith(".json") }.keys + .filter { it.namespace != "minecraft" } + .map { "${it.namespace}:${it.path.removePrefix(Root).removeSuffix(".json")}" } + .sorted() + }.getOrDefault(emptyList()) + } + + fun exists(name: String): Boolean = VfxShaderDeclarations.of(name) != null +} + /** [authored] brought in line with what [shader] declares, or left as it is when it cannot be read. */ internal fun alignUniforms(shader: String?, authored: List): List = shader?.let(VfxShaderDeclarations::of)?.align(authored) ?: authored +/** + * One row per uniform and sampler the shader json declares; the engine's own are left out. A shader + * that cannot be read shows nothing here, its name field already says why. + */ @Composable internal fun VfxShaderFields( shader: String?, @@ -60,13 +105,8 @@ internal fun VfxShaderFields( onSamplers: (List) -> Unit, ) { if (shader.isNullOrBlank()) return - val declaration = VfxShaderDeclarations.of(shader) - if (declaration == null) { - Hint(vfxText("shader_missing")) - return - } + val declaration = VfxShaderDeclarations.of(shader) ?: return - if (declaration.uniforms.isNotEmpty()) Text(vfxText("section_uniforms"), tags = listOf("insp-inline-label")) declaration.uniforms.forEach { uniform -> val value = uniforms.firstOrNull { it.name == uniform.name && uniform.accepts(it.value) }?.value ?: uniform.defaultValue() @@ -90,14 +130,23 @@ internal fun VfxShaderFields( val stale = uniforms.filter { declaration.uniform(it.name) == null } if (stale.isNotEmpty()) { - Hint(vfxText("uniforms_stale") + " " + stale.joinToString { it.name }) - InspectorButton(vfxText("uniforms_drop")) { onUniforms(uniforms - stale.toSet()) } + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + Text( + vfxText("uniforms_stale") + " " + stale.joinToString { it.name }, + tags = listOf("insp-hint"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f), + ) + InspectorIconButton( + VfxIcons.REMOVE, + vfxText("uniforms_drop"), + tags = listOf("insp-inline-icon", "danger"), + ) { onUniforms(uniforms - stale.toSet()) } + } } - if (declaration.samplers.isNotEmpty()) Text(vfxText("section_samplers"), tags = listOf("insp-inline-label")) declaration.samplers.forEach { name -> val texture = samplers.firstOrNull { it.name == name }?.texture.orEmpty() - VfxAssetRow(name, texture, listOf(".png"), id = "vfx-sampler-$name") { typed -> + VfxAssetRow(name, texture, VfxTextureExtensions, id = "vfx-sampler-$name") { typed -> val kept = samplers.filterNot { it.name == name } onSamplers(if (typed.isBlank()) kept else samplers.upsert(VfxSamplerSpec(name, typed)) { it.name }) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt index 2e9c58d08..4b3f8b1b8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt @@ -1,25 +1,24 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument -import ru.hollowhorizon.hollowengine.client.ui.inspector.AssetPickerButton -import ru.hollowhorizon.hollowengine.client.ui.inspector.Hint -import ru.hollowhorizon.hollowengine.client.ui.inspector.LocalInspectorHost +import ru.hollowhorizon.hollowengine.client.ui.inspector.AssetPathField +import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorHost +import ru.hollowhorizon.hollowengine.client.ui.inspector.Pill +import ru.hollowhorizon.hollowengine.client.ui.inspector.PillFlow import ru.hollowhorizon.hollowengine.client.ui.inspector.Pills -import ru.hollowhorizon.hollowengine.client.ui.inspector.TextRow import ru.hollowhorizon.hollowengine.client.ui.inspector.ToggleRow -import ru.hollowhorizon.hollowengine.client.ui.inspector.assetCompletions +import ru.hollowhorizon.hollowengine.client.ui.inspector.resourceExists import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.common.vfx.* internal val VfxModelExtensions = listOf(".glb", ".gltf", ".fbx", ".obj") -private val TextureExtensions = listOf(".png") +internal val VfxTextureExtensions = listOf(".png") -/** A resource path with the completions and the picker the inspector offers for assets. */ +/** A path to a file of one of [extensions], offered from the loaded packs. */ @Composable internal fun VfxAssetRow( label: String, @@ -28,18 +27,33 @@ internal fun VfxAssetRow( hint: String? = null, id: String = "vfx-asset-$label", onChange: (String) -> Unit, +) = VfxAssetRow(label, value, hint, id, candidates = { host -> host.assets(extensions) }, onChange = onChange) + +/** + * Something named by a path: typed with completions, underlined when the packs have nothing by that + * name, and picked from a tree with the button beside it. + */ +@Composable +internal fun VfxAssetRow( + label: String, + value: String, + hint: String? = null, + id: String = "vfx-asset-$label", + candidates: (InspectorHost) -> List, + exists: (String) -> Boolean = ::resourceExists, + placeholder: String = "", + onChange: (String) -> Unit, ) { - val host = LocalInspectorHost.current - val candidates = remember(extensions, host) { host?.assets(extensions).orEmpty() } Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { VfxFieldLabel(label, hint) Box(modifier = Modifier.size(0.px, UiLength.Fit).grow(1f)) { - TextRow( - label = "", + AssetPathField( value = value, + label = label, id = id, - completions = if (candidates.isEmpty()) null else assetCompletions(candidates), - trailing = { AssetPickerButton(extensions, value, label, onChange) }, + candidates = candidates, + exists = exists, + placeholder = placeholder, onChange = onChange, ) } @@ -48,7 +62,7 @@ internal fun VfxAssetRow( @Composable internal fun PlaneFields(document: HollowIdeVfxDocument, state: VfxEditorState, plane: VfxPlaneSpec) { - Folding(state, "facing", vfxText("section_facing")) { + Folding(state, "facing", vfxText("section_facing"), VfxIcons.FACING) { Pills(VfxFacing.entries, plane.facing, { vfxText("facing_${it.name.lowercase()}") }) { document.replace(plane.copy(facing = it)) } @@ -58,12 +72,12 @@ internal fun PlaneFields(document: HollowIdeVfxDocument, state: VfxEditorState, } } } - SurfaceFields(document, state, plane) + MaterialFields(document, state, plane) } @Composable internal fun MeshFields(document: HollowIdeVfxDocument, state: VfxEditorState, mesh: VfxMeshSpec) { - Folding(state, "mesh", vfxText("section_mesh")) { + Folding(state, "mesh", vfxText("section_mesh"), VfxIcons.MESH) { ToggleRow(vfxText("align_to_velocity"), mesh.alignToVelocity) { document.replace( when (mesh) { @@ -89,13 +103,15 @@ internal fun MeshFields(document: HollowIdeVfxDocument, state: VfxEditorState, m else -> Unit } } - SurfaceFields(document, state, mesh) + MaterialFields(document, state, mesh) } @Composable internal fun ModelFields(document: HollowIdeVfxDocument, state: VfxEditorState, model: VfxModelSpec) { - Folding(state, "model", vfxText("section_model")) { - VfxAssetRow(vfxText("model"), model.model, VfxModelExtensions) { document.replace(model.copy(model = it)) } + Folding(state, "model", vfxText("section_model"), VfxIcons.MODEL) { + VfxAssetRow(vfxText("model"), model.model, VfxModelExtensions, id = "vfx-model-path") { + document.replace(model.copy(model = it)) + } ToggleRow(vfxText("align_to_velocity"), model.alignToVelocity) { document.replace(model.copy(alignToVelocity = it)) } @@ -105,7 +121,7 @@ internal fun ModelFields(document: HollowIdeVfxDocument, state: VfxEditorState, @Composable internal fun TrailFields(document: HollowIdeVfxDocument, state: VfxEditorState, trail: VfxTrailSpec) { - Folding(state, "trail", vfxText("section_trail")) { + Folding(state, "trail", vfxText("section_trail"), VfxIcons.TRAIL) { VfxValueRow(vfxText("width"), trail.width, VfxProperty.WIDTH, vfxText("ribbon_width_hint")) { document.replace(trail.copy(width = it)) } @@ -122,13 +138,22 @@ internal fun TrailFields(document: HollowIdeVfxDocument, state: VfxEditorState, document.replace(trail.copy(tileLength = it)) } } - SurfaceFields(document, state, trail) + MaterialFields(document, state, trail) } @Composable internal fun BeamFields(document: HollowIdeVfxDocument, state: VfxEditorState, beam: VfxBeamSpec) { - Folding(state, "beam", vfxText("section_beam")) { - TextRow(vfxText("beam_target"), beam.target, id = "vfx-beam-target") { document.replace(beam.copy(target = it.trim())) } + Folding(state, "beam", vfxText("section_beam"), VfxIcons.BEAM) { + val nodes = document.effect.walk().map { it.id }.filter { it != beam.id } + VfxAssetRow( + label = vfxText("beam_target"), + value = beam.target, + hint = vfxText("beam_target_hint"), + id = "vfx-beam-target", + candidates = { nodes }, + exists = { it in nodes }, + placeholder = vfxText("beam_target_none"), + ) { document.replace(beam.copy(target = it.trim())) } if (beam.target.isBlank()) { VfxFloat3Row(vfxText("beam_end"), beam.end, VfxProperty.BEAM_END, vfxText("beam_end_hint")) { document.replace(beam.copy(end = it)) @@ -150,7 +175,7 @@ internal fun BeamFields(document: HollowIdeVfxDocument, state: VfxEditorState, b document.replace(beam.copy(tileLength = it)) } } - SurfaceFields(document, state, beam) + MaterialFields(document, state, beam) } @Composable @@ -161,42 +186,51 @@ private fun RibbonUvRows(mode: VfxRibbonUv, tileLength: Float, onMode: (VfxRibbo } } -/** The tint and the material, which every surface has. */ +/** + * Everything a surface is drawn with: the look of it first, then how it blends and meets the depth + * buffer, then the shader of the author's with what that shader declares. + */ @Composable -private fun SurfaceFields(document: HollowIdeVfxDocument, state: VfxEditorState, surface: VfxSurfaceSpec) { +private fun MaterialFields(document: HollowIdeVfxDocument, state: VfxEditorState, surface: VfxSurfaceSpec) { val material = surface.material fun update(next: VfxMaterialSpec) = document.replace(surface.withSurface(material = next)) - Folding(state, "material", vfxText("section_material")) { + Folding(state, "material", vfxText("section_material"), VfxIcons.MATERIAL) { + VfxMaterialPreview(state, surface) + + VfxAssetRow(vfxText("texture"), material.texture, VfxTextureExtensions, id = "vfx-material-texture") { + update(material.copy(texture = it)) + } VfxColorRow(vfxText("tint"), surface.tint, VfxProperty.TINT, vfxText("tint_hint")) { document.replace(surface.withSurface(tint = it)) } - VfxAssetRow(vfxText("texture"), material.texture, TextureExtensions) { update(material.copy(texture = it)) } - Text(vfxText("blend"), tags = listOf("insp-inline-label")) BlendPicker(material.blend) { update(material.copy(blend = it)) } - ToggleRow(vfxText("lit_by_world"), material.lighting == VfxLighting.WORLD) { lit -> - update(material.copy(lighting = if (lit) VfxLighting.WORLD else VfxLighting.UNLIT)) - } UvRows(material.uv) { update(material.copy(uv = it)) } - } - - Folding(state, "depth", vfxText("section_depth"), openByDefault = false) { - ToggleRow(vfxText("depth_test"), material.depthTest) { update(material.copy(depthTest = it)) } - ToggleRow(vfxText("depth_write"), material.depthWrite) { update(material.copy(depthWrite = it)) } - ToggleRow(vfxText("cull"), material.cull) { update(material.copy(cull = it)) } - } - Folding(state, "shader", vfxText("section_shader"), openByDefault = material.shader != null) { - TextRow(vfxText("shader"), material.shader.orEmpty(), id = "vfx-material-shader") { typed -> - val shader = typed.trim().ifBlank { null } - update(material.copy(shader = shader, uniforms = alignUniforms(shader, material.uniforms))) + PillFlow(id = "vfx-material-switches") { + Pill(vfxText("lit_by_world"), material.lighting == VfxLighting.WORLD, id = "vfx-material-lit") { + val lit = material.lighting != VfxLighting.WORLD + update(material.copy(lighting = if (lit) VfxLighting.WORLD else VfxLighting.UNLIT)) + } + Pill(vfxText("depth_test"), material.depthTest, id = "vfx-material-depth-test") { + update(material.copy(depthTest = !material.depthTest)) + } + Pill(vfxText("depth_write"), material.depthWrite, id = "vfx-material-depth-write") { + update(material.copy(depthWrite = !material.depthWrite)) + } + Pill(vfxText("cull"), material.cull, id = "vfx-material-cull") { + update(material.copy(cull = !material.cull)) + } } + val attributes = when (surface) { is VfxMeshSpec -> "shader_mesh_hint" is VfxPlaneSpec -> "shader_plane_hint" else -> "shader_ribbon_hint" } - Hint(vfxText(attributes)) + VfxShaderRow(material.shader, vfxText(attributes), "vfx-material-shader") { shader -> + update(material.copy(shader = shader, uniforms = alignUniforms(shader, material.uniforms))) + } VfxShaderFields( material.shader, material.uniforms, @@ -210,12 +244,9 @@ private fun SurfaceFields(document: HollowIdeVfxDocument, state: VfxEditorState, @Composable private fun UvRows(uv: VfxUvRect, onChange: (VfxUvRect) -> Unit) { Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { - VfxFieldLabel(vfxText("uv_from"), vfxText("uv_hint")) + VfxFieldLabel(vfxText("uv_region"), vfxText("uv_hint")) UvNumber("U", uv.u0) { onChange(uv.copy(u0 = it)) } UvNumber("V", uv.v0) { onChange(uv.copy(v0 = it)) } - } - Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { - VfxFieldLabel(vfxText("uv_to")) UvNumber("U", uv.u1) { onChange(uv.copy(u1 = it)) } UvNumber("V", uv.v1) { onChange(uv.copy(v1 = it)) } } @@ -231,35 +262,29 @@ private fun UvNumber(axis: String, value: Float, onChange: (Float) -> Unit) { @Composable private fun BlendPicker(current: VfxBlend, onChange: (VfxBlend) -> Unit) { - Row(modifier = Modifier.size(100.percent).gap(4.px)) { + Row(modifier = Modifier.size(100.percent).gap(3.px).alignItems(vertical = UiAlign.CENTER)) { + VfxFieldLabel(vfxText("blend")) VfxBlend.entries.forEach { blend -> val selected = blend == current - Column( + Box( id = "vfx-blend-${blend.name.lowercase()}", - modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).gap(2.px).alignItems(horizontal = UiAlign.CENTER) - .input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND) - .tooltipOnHover(vfxText("blend_${blend.name.lowercase()}_hint")).onClick { event -> + modifier = Modifier.size(0.px, 16.px).grow(1f).input(hoverable = true, clickable = true) + .cursor(UiCursorShape.HAND) + .tooltipOnHover(vfxText("blend_${blend.name.lowercase()}") + ": " + vfxText("blend_${blend.name.lowercase()}_hint")) + .onClick { event -> onChange(blend) event.consume() - }, - ) { - Box( - modifier = Modifier.size(100.percent, 26.px).drawBehind(key = blend to selected) { + }.drawBehind(key = blend to selected) { drawBlendPreview(blend, size.width, size.height, selected) }, - ) - Text( - vfxText("blend_${blend.name.lowercase()}"), - modifier = Modifier.fontSize(8f).foreground(if (selected) SelectedText else MutedText), - ) - } + ) } } } private fun UiCanvasDrawScope.drawBlendPreview(blend: VfxBlend, width: Float, height: Float, selected: Boolean) { val half = width / 2f - drawRect(UiRect(0f, 0f, half, height), UiPaint.Color(DarkGround)) + drawRect(UiRect(0f, 0f, width, height), UiPaint.Color(DarkGround), radius = 3f) drawRect(UiRect(half, 0f, width - half, height), UiPaint.Color(LightGround)) val inset = height * 0.22f @@ -269,10 +294,11 @@ private fun UiCanvasDrawScope.drawBlendPreview(blend: VfxBlend, width: Float, he drawRect(right, UiPaint.Color(blended(blend, LightGround))) val border = if (selected) SelectedBorder else IdleBorder - drawRect(UiRect(0f, 0f, width, 1f), UiPaint.Color(border)) - drawRect(UiRect(0f, height - 1f, width, 1f), UiPaint.Color(border)) - drawRect(UiRect(0f, 0f, 1f, height), UiPaint.Color(border)) - drawRect(UiRect(width - 1f, 0f, 1f, height), UiPaint.Color(border)) + val thickness = if (selected) 1.5f else 1f + drawRect(UiRect(0f, 0f, width, thickness), UiPaint.Color(border)) + drawRect(UiRect(0f, height - thickness, width, thickness), UiPaint.Color(border)) + drawRect(UiRect(0f, 0f, thickness, height), UiPaint.Color(border)) + drawRect(UiRect(width - thickness, 0f, thickness, height), UiPaint.Color(border)) } /** What the sample particle leaves on [ground], worked out the way the blend state would. */ @@ -295,7 +321,6 @@ private fun blended(blend: VfxBlend, ground: UiColor): UiColor { private val SampleParticle = UiColor(1f, 0.55f, 0.15f, 0.75f) private val DarkGround = UiColor(0.12f, 0.13f, 0.15f, 1f) private val LightGround = UiColor(0.78f, 0.8f, 0.84f, 1f) -private val SelectedBorder = UiColor(0.84f, 0.5f, 0.11f, 1f) -private val IdleBorder = UiColor(0.19f, 0.2f, 0.24f, 1f) -private val SelectedText = UiColor(0.93f, 0.94f, 0.96f, 1f) +private val SelectedBorder = UiColor(0.43f, 0.61f, 0.86f, 1f) +private val IdleBorder = UiColor(0.17f, 0.18f, 0.21f, 1f) private val MutedText = UiColor(0.55f, 0.58f, 0.65f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTransformGizmo.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTransformGizmo.kt new file mode 100644 index 000000000..a287a5c15 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxTransformGizmo.kt @@ -0,0 +1,130 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx + +import net.minecraft.world.phys.Vec3 +import org.joml.Quaternionf +import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.editor.GizmoDrag +import ru.hollowhorizon.hollowengine.client.editor.GizmoEditMode +import ru.hollowhorizon.hollowengine.client.editor.GizmoGeometry +import ru.hollowhorizon.hollowengine.client.editor.GizmoHandle +import ru.hollowhorizon.hollowengine.client.editor.GizmoHandleId +import ru.hollowhorizon.hollowengine.client.editor.GizmoManipulator +import ru.hollowhorizon.hollowengine.client.editor.GizmoRenderer +import ru.hollowhorizon.hollowengine.client.editor.GizmoPicker +import ru.hollowhorizon.hollowengine.client.editor.GizmoProjector +import ru.hollowhorizon.hollowengine.client.editor.GizmoTransformValues +import ru.hollowhorizon.hollowengine.client.editor.isRotation +import ru.hollowhorizon.hollowengine.client.ui.UiCanvasDrawScope +import ru.hollowhorizon.hollowengine.client.utils.math.conjugate +import ru.hollowhorizon.hollowengine.client.utils.math.rotateBy +import ru.hollowhorizon.hollowengine.client.vfx.VfxFrame +import ru.hollowhorizon.hollowengine.common.utils.math.QuatF +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxTransform + +/** + * The transform gizmo of the world, over the effect preview: the same handles, picking and drag math, + * projected from the preview camera into the pixels of the panel. + */ +internal class VfxTransformGizmo { + private val projector = GizmoProjector() + private val geometry = GizmoGeometry(projector) + private val manipulator = GizmoManipulator(projector) + + /** Takes the preview camera; the handles built after this are in panel pixels. */ + fun capture(preview: VfxPreviewState) { + val width = preview.viewportWidth + val height = preview.viewportHeight + val eye = preview.cameraBasis().eye + projector.capture( + view = preview.viewMatrix().setTranslation(0f, 0f, 0f), + projection = preview.perspective(width, height), + cameraPosition = Vec3(eye.x.toDouble(), eye.y.toDouble(), eye.z.toDouble()), + fovDegrees = VfxPreviewFieldOfView, + width = width, + height = height, + ) + } + + /** + * The handles for [frame], the node as it is placed right now. A part of the placement that the + * timeline drives offers no handles: the timeline would put it back on the next frame. + */ + fun handles(frame: VfxFrame, modes: Set, driven: (VfxProperty) -> VfxDrivenValue?): List { + val editable = modes.filterTo(HashSet()) { mode -> driven(mode.property) == null } + if (editable.isEmpty()) return emptyList() + return geometry.buildHandles(frame.position.copy(), frame.rotation.copy(), editable) + } + + fun pick(handles: List, x: Float, y: Float): GizmoHandle? = GizmoPicker.pick(handles, x, y) + + fun begin(handle: GizmoHandle, frame: VfxFrame, parent: VfxFrame?, start: VfxTransform, x: Float, y: Float): VfxTransformDrag { + val values = GizmoTransformValues(frame.position.copy(), frame.rotation.copy(), start.scale) + val gizmo = manipulator.begin(handle, values, x, y) + return VfxTransformDrag(gizmo, start, parent?.let { VfxFrame().set(it) } ?: VfxFrame()) + } + + /** The placement [drag] has come to with the pointer at ([x], [y]), or null while nothing moved. */ + fun drag(drag: VfxTransformDrag, x: Float, y: Float, modifiers: Int): VfxTransform? { + val values = manipulator.update(drag.gizmo, x, y, modifiers) ?: return null + val start = drag.start + val parent = drag.parent + return when (drag.gizmo.handleId.mode) { + GizmoEditMode.TRANSLATE -> start.copy(position = parent.toLocalPoint(values.translation)) + GizmoEditMode.ROTATE -> start.copy(rotation = eulerDegrees(parent.rotation.conjugate() * values.rotation)) + GizmoEditMode.SCALE -> start.copy(scale = values.scale) + } + } + + fun draw(scope: UiCanvasDrawScope, handles: List, hovered: GizmoHandleId?, drag: VfxTransformDrag?) { + drag?.gizmo?.let { GizmoRenderer.drawRotationSector(scope, geometry, projector, it) } + GizmoRenderer.drawHandles(scope, handles, hovered, drag?.gizmo?.handleId) + } + + /** Where the value label of [drag] goes: next to the origin of the node, in panel pixels. */ + fun labelAt(drag: VfxTransformDrag): Pair? { + val screen = projector.project(drag.gizmo.origin) ?: return null + return if (screen.onScreen) screen.x to screen.y else null + } + + private fun VfxFrame.toLocalPoint(world: Vec3f): Vec3f { + val relative = Vec3f(world.x - position.x, world.y - position.y, world.z - position.z) + .rotateBy(rotation.conjugate()) + return Vec3f(relative.x / safe(scale.x), relative.y / safe(scale.y), relative.z / safe(scale.z)) + } + + private fun safe(value: Float): Float = if (value in -1.0e-6f..1.0e-6f) 1f else value + + /** Euler degrees in the order [VfxFrame.eulerOf] applies them: X, then Y, then Z. */ + private fun eulerDegrees(rotation: QuatF): Vec3f { + val angles = Quaternionf(rotation.x, rotation.y, rotation.z, rotation.w).getEulerAnglesXYZ(Vector3f()) + return Vec3f(Math.toDegrees(angles.x.toDouble()).toFloat(), Math.toDegrees(angles.y.toDouble()).toFloat(), + Math.toDegrees(angles.z.toDouble()).toFloat()) + } + + private fun Vec3f.copy(): Vec3f = Vec3f(x, y, z) + + private fun QuatF.copy(): QuatF = QuatF(x, y, z, w) +} + +/** A gizmo drag on a node: the drag of the gizmo, and the node's placement and parent when it began. */ +internal class VfxTransformDrag(val gizmo: GizmoDrag, val start: VfxTransform, val parent: VfxFrame) { + /** What the value label shows: a distance, an angle in degrees or a scale factor. */ + val label: Float get() = gizmo.labelValue.toFloat() +} + +private val GizmoEditMode.property: VfxProperty + get() = when (this) { + GizmoEditMode.TRANSLATE -> VfxProperty.POSITION + GizmoEditMode.ROTATE -> VfxProperty.ROTATION + GizmoEditMode.SCALE -> VfxProperty.SCALE + } + +private val GizmoHandleId.mode: GizmoEditMode + get() = when (this) { + GizmoHandleId.SCALE_X, GizmoHandleId.SCALE_Y, GizmoHandleId.SCALE_Z, GizmoHandleId.SCALE_UNIFORM -> + GizmoEditMode.SCALE + + else -> if (isRotation()) GizmoEditMode.ROTATE else GizmoEditMode.TRANSLATE + } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt index 557d2e778..663057b87 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineController.kt @@ -162,6 +162,34 @@ class TimelineController { isPlaying = !isPlaying } + /** + * Bumped to ask the window to fit the work area into the lanes; only the window knows how wide + * they are. + */ + var frameTimeRequests by mutableStateOf(0) + private set + + fun requestFrameTime() { + frameTimeRequests++ + } + + /** + * Moves the playhead to the nearest key after it ([direction] > 0) or before it, on the tracks the + * list shows. Returns false when there is none that way. + */ + fun jumpToKey(direction: Int): Boolean { + val now = currentTime + val times = allProperties().filter { it.isListed }.flatMap { it.curves }.flatMap { it.keyframes }.map { it.time } + val target = if (direction > 0) { + times.filter { it > now + KEYFRAME_TIME_EPSILON }.minOrNull() + } else { + times.filter { it < now - KEYFRAME_TIME_EPSILON }.maxOrNull() + } ?: return false + isPlaying = false + applyCurrentTime(target) + return true + } + fun isSelected(keyframe: Keyframe): Boolean = selectedKeyframes.any { it === keyframe } fun clearSelection() { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt index 07e77a1f4..d8b27a94d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineKeys.kt @@ -30,10 +30,15 @@ object TimelineKeys { } key == GLFW.GLFW_KEY_F -> { - timeline.frameCurves() + if (timeline.viewMode == TimelineViewMode.CURVES) timeline.frameCurves() + timeline.requestFrameTime() true } + key == GLFW.GLFW_KEY_UP -> timeline.jumpToKey(1) + + key == GLFW.GLFW_KEY_DOWN -> timeline.jumpToKey(-1) + key == GLFW.GLFW_KEY_S -> { timeline.smoothSelectedKeyframes() true diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt index f3d61d16e..9171608f6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/CutsceneLang.kt @@ -9,6 +9,7 @@ internal object CutsceneLang { const val VIEW_DOPE_SHEET = ROOT + "view.dope_sheet" const val VIEW_CURVES = ROOT + "view.curves" const val FRAME_CURVES = ROOT + "view.frame_curves" + const val FRAME_TIME = ROOT + "view.frame_time" const val CAPTURE_KEYFRAME = ROOT + "action.capture" const val ADD_KEYFRAME = ROOT + "action.add_keyframe" @@ -24,6 +25,14 @@ internal object CutsceneLang { const val LOAD = ROOT + "action.load" const val CANCEL = ROOT + "action.cancel" const val CLOSE = ROOT + "action.close" + const val TO_START = ROOT + "action.to_start" + const val TO_END = ROOT + "action.to_end" + const val PLAY = ROOT + "action.play" + const val PREV_KEY = ROOT + "action.prev_key" + const val NEXT_KEY = ROOT + "action.next_key" + const val ZOOM_IN = ROOT + "action.zoom_in" + const val ZOOM_OUT = ROOT + "action.zoom_out" + const val MORE = ROOT + "action.more" const val SAVE_TITLE = ROOT + "dialog.save_title" const val LOAD_TITLE = ROOT + "dialog.load_title" @@ -44,6 +53,7 @@ internal object CutsceneLang { const val PAUSED = ROOT + "preview.paused" const val CURRENT_TIME = ROOT + "preview.current_time" const val DURATION = ROOT + "preview.duration" + const val TIME_HINT = ROOT + "preview.time_hint" const val ORIGIN_X = ROOT + "origin.x" const val ORIGIN_Y = ROOT + "origin.y" @@ -71,13 +81,14 @@ internal object CutsceneLang { const val HANDLE_IN = ROOT + "handles.incoming" const val HANDLE_OUT = ROOT + "handles.outgoing" - const val PROPERTY_SETTINGS = ROOT + "property.settings" + const val TRACK_SELECT_KEYS = ROOT + "track.select_keys" + const val TRACK_SHOW = ROOT + "track.show" + const val TRACK_HIDE = ROOT + "track.hide" + const val TRACK_LOCK = ROOT + "track.lock" + const val TRACK_UNLOCK = ROOT + "track.unlock" + const val TRACK_REMOVE = ROOT + "track.remove" const val ROTATION_MODE = ROOT + "rotation.mode" const val ROTATION_EULER = ROOT + "rotation.euler" const val ROTATION_QUATERNION = ROOT + "rotation.quaternion" - const val ROTATION_MODE_HINT = ROOT + "rotation.mode_hint" - - const val LIMITS = ROOT + "limits.title" - const val LIMITS_HINT = ROOT + "limits.hint" } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt index f5c3eb3b1..ab5bb0a30 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt @@ -6,25 +6,47 @@ import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.docking.DockTags import ru.hollowhorizon.hollowengine.client.ui.docking.LocalDockPanelTitle import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.* +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollHandle import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdown +import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextInputFilter import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.client.utils.lang - -private const val PlayIcon = "hollowengine:textures/gui/icons/play.svg" -private const val PauseIcon = "hollowengine:textures/gui/icons/pause.svg" -private const val StartIcon = "hollowengine:textures/gui/icons/step_backward.svg" -private const val EndIcon = "hollowengine:textures/gui/icons/step_forward.svg" -private const val ZoomInIcon = "hollowengine:textures/gui/icons/zoom_in.svg" -private const val ZoomOutIcon = "hollowengine:textures/gui/icons/zoom_out.svg" -private const val MenuIcon = "hollowengine:textures/gui/icons/options.svg" -private const val DopeSheetIcon = "hollowengine:textures/gui/icons/layers.svg" -private const val CurvesIcon = "hollowengine:textures/gui/icons/graph.svg" -private const val FrameCurvesIcon = "hollowengine:textures/gui/icons/maximize.svg" -private const val PulseIcon = "hollowengine:textures/gui/icons/pulse.svg" -private const val SettingsIcon = "hollowengine:textures/gui/icons/general.svg" +import kotlin.math.abs + +/** The stylesheet of the timeline window's chrome; lanes and keys are drawn from [TimelineColors]. */ +internal const val TimelineStylesheet = "hollowengine:ui/styles/timeline.hss" + +/** The icons of the timeline, one family drawn for it. */ +internal object TimelineIcons { + private const val ROOT = "hollowengine:textures/gui/icons/timeline/" + + const val PLAY = ROOT + "play.svg" + const val PAUSE = ROOT + "pause.svg" + const val TO_START = ROOT + "to_start.svg" + const val TO_END = ROOT + "to_end.svg" + const val PREV_KEY = ROOT + "prev_key.svg" + const val NEXT_KEY = ROOT + "next_key.svg" + const val ZOOM_IN = ROOT + "zoom_in.svg" + const val ZOOM_OUT = ROOT + "zoom_out.svg" + const val MORE = ROOT + "more.svg" + const val DOPE_SHEET = ROOT + "dope_sheet.svg" + const val CURVES = ROOT + "curves.svg" + const val FRAME = ROOT + "frame.svg" + const val CAPTURE = ROOT + "capture.svg" + const val EYE = ROOT + "eye.svg" + const val EYE_OFF = ROOT + "eye_off.svg" + const val LOCK = ROOT + "lock.svg" + const val LOCK_OPEN = ROOT + "lock_open.svg" + const val CLOSE = ROOT + "close.svg" + const val DELETE = ROOT + "delete.svg" + const val SMOOTH = ROOT + "smooth.svg" + const val FILM = ROOT + "film.svg" + const val SAVE = ROOT + "save.svg" + const val LOAD = ROOT + "load.svg" +} /** * Which of the shared timeline controls make sense for what is being edited. @@ -51,13 +73,13 @@ internal fun TimelineToolbar( features: TimelineFeatures = TimelineFeatures.CUTSCENE, ) { var menuOpen by remember { mutableStateOf(false) } + var menuAnchor by remember { mutableStateOf(UiRect.Zero) } val parked = LocalDockPanelTitle.current Row( id = parked?.headerId ?: "cutscene-timeline-toolbar", - modifier = Modifier.size(100.percent, 28.px).alignItems(vertical = UiAlign.CENTER) - .background(TimelineColors.Panel).border(1.px, TimelineColors.Border).padding(6.px, 0.px).gap(4.px) - .then(parked?.dragHandle ?: Modifier), + tags = listOf("timeline-toolbar"), + modifier = parked?.dragHandle, ) { parked?.let { panel -> panel.icon?.let { icon -> Image(icon, tags = listOf(DockTags.PinnedHeaderIcon)) } @@ -65,169 +87,180 @@ internal fun TimelineToolbar( TimelineSeparator() } if (features.playback) { - ToolbarIcon(StartIcon, "timeline-start") { + TimelineButton(TimelineIcons.TO_START, "timeline-start", CutsceneLang.TO_START.lang) { controller.isPlaying = false controller.applyCurrentTime(0f) refresh() } - ToolbarIcon( - if (controller.isPlaying) PauseIcon else PlayIcon, + TimelineButton(TimelineIcons.PREV_KEY, "timeline-prev-key", CutsceneLang.PREV_KEY.lang) { + if (controller.jumpToKey(-1)) refresh() + } + TimelineButton( + if (controller.isPlaying) TimelineIcons.PAUSE else TimelineIcons.PLAY, "timeline-play", + CutsceneLang.PLAY.lang, active = controller.isPlaying, ) { controller.togglePlayback() refresh() } - ToolbarIcon(EndIcon, "timeline-end") { + TimelineButton(TimelineIcons.NEXT_KEY, "timeline-next-key", CutsceneLang.NEXT_KEY.lang) { + if (controller.jumpToKey(1)) refresh() + } + TimelineButton(TimelineIcons.TO_END, "timeline-end", CutsceneLang.TO_END.lang) { controller.isPlaying = false controller.applyCurrentTime(controller.workAreaEnd) refresh() } - + TimeField(controller, refresh) TimelineSeparator() } - ToolbarIcon( - DopeSheetIcon, + TimelineButton( + TimelineIcons.DOPE_SHEET, "timeline-view-dope", + CutsceneLang.VIEW_DOPE_SHEET.lang, active = controller.viewMode == TimelineViewMode.DOPE_SHEET, - tooltip = CutsceneLang.VIEW_DOPE_SHEET.lang, ) { controller.viewMode = TimelineViewMode.DOPE_SHEET refresh() } - ToolbarIcon( - CurvesIcon, + TimelineButton( + TimelineIcons.CURVES, "timeline-view-curves", + CutsceneLang.VIEW_CURVES.lang, active = controller.viewMode == TimelineViewMode.CURVES, - tooltip = CutsceneLang.VIEW_CURVES.lang, ) { controller.enterCurveView() refresh() } - TimelineSeparator() - - if (features.playback) Text( - "${formatSeconds(controller.currentTime)} / ${formatSeconds(controller.workAreaEnd)}", - modifier = Modifier.align(vertical = UiAlign.CENTER).fontSize(11f).foreground(TimelineColors.Text), - ) - // Push the trailing controls to the right edge. Box(modifier = Modifier.size(0.px, 1.px).grow(1f)) if (features.capture) { - ToolbarIcon(PulseIcon, "timeline-capture", tooltip = CutsceneLang.CAPTURE_KEYFRAME.lang) { + TimelineButton(TimelineIcons.CAPTURE, "timeline-capture", CutsceneLang.CAPTURE_KEYFRAME.lang) { onCapture() refresh() } - TimelineSeparator() } - if (controller.viewMode == TimelineViewMode.CURVES) { - ToolbarIcon(FrameCurvesIcon, "timeline-frame-curves", tooltip = CutsceneLang.FRAME_CURVES.lang) { - controller.frameCurves() - refresh() - } + val curves = controller.viewMode == TimelineViewMode.CURVES + TimelineButton( + TimelineIcons.FRAME, + "timeline-frame", + (if (curves) CutsceneLang.FRAME_CURVES else CutsceneLang.FRAME_TIME).lang, + ) { + if (curves) controller.frameCurves() + controller.requestFrameTime() + refresh() } - - ToolbarIcon(ZoomOutIcon, "timeline-zoom-out") { + TimelineButton(TimelineIcons.ZOOM_OUT, "timeline-zoom-out", CutsceneLang.ZOOM_OUT.lang) { zoomAroundCenter(controller, 1f / TimelineZoomButtonFactor) refresh() } - ToolbarIcon(ZoomInIcon, "timeline-zoom-in") { + TimelineButton(TimelineIcons.ZOOM_IN, "timeline-zoom-in", CutsceneLang.ZOOM_IN.lang) { zoomAroundCenter(controller, TimelineZoomButtonFactor) refresh() } - TimelineSeparator() - // Everything that doesn't fit on the bar lives in an overflow menu. - UiDropdown( - id = "timeline-overflow", - label = "", - icon = MenuIcon, - expanded = menuOpen, - onExpandedChange = { menuOpen = it }, - tags = listOf("timeline-overflow"), + Box(modifier = Modifier.onPlaced { menuAnchor = it }) { + TimelineButton(TimelineIcons.MORE, "timeline-overflow", CutsceneLang.MORE.lang, active = menuOpen) { + menuOpen = !menuOpen + } + } + if (menuOpen) ContextMenu( + id = "timeline-overflow-menu", + anchorBounds = menuAnchor, + alignment = OverflowMenuAlignment, + onExpandedChange = { if (!it) menuOpen = false }, items = listOfNotNull( - if (!features.capture) null else UiDropdownItem(CutsceneLang.CAPTURE_KEYFRAME.lang, icon = PulseIcon) { - onCapture(); refresh() - }, UiDropdownItem( CutsceneLang.DELETE_SELECTED.lang, - icon = "hollowengine:textures/gui/icons/remove.svg", + icon = TimelineIcons.DELETE, enabled = controller.selectedKeyframes.isNotEmpty(), + shortcut = "Del", ) { controller.deleteSelectedKeyframes(); refresh() }, UiDropdownItem( CutsceneLang.SMOOTH_SELECTED.lang, - icon = CurvesIcon, + icon = TimelineIcons.SMOOTH, enabled = controller.canEditSelectedCurves, + shortcut = "S", ) { controller.smoothSelectedKeyframes(); refresh() }, if (!features.cameraPreview) null else UiDropdownItem( if (controller.isCameraPreviewEnabled) CutsceneLang.CAMERA_PREVIEW_ON.lang else CutsceneLang.CAMERA_PREVIEW_OFF.lang, - icon = "hollowengine:textures/gui/icons/film.svg", + icon = TimelineIcons.FILM, closeOnClick = false, + separatorBefore = true, ) { controller.applyCameraPreviewEnabled(!controller.isCameraPreviewEnabled) refresh() }, if (!features.storage) null else UiDropdownItem( CutsceneLang.SAVE.lang, - icon = "hollowengine:textures/gui/icons/save.svg", + icon = TimelineIcons.SAVE, + separatorBefore = true, ) { onSave() }, if (!features.storage) null else UiDropdownItem( CutsceneLang.LOAD.lang, - icon = "hollowengine:textures/gui/icons/load.svg", + icon = TimelineIcons.LOAD, ) { onLoad() }, ), ) } } +/** Where the playhead is, as a field: typing a time jumps there. */ @Composable -private fun ToolbarIcon( +private fun TimeField(controller: TimelineController, refresh: () -> Unit) { + TextField( + value = formatSeconds(controller.currentTime), + id = "timeline-time", + fontSize = 9f, + filter = UiTextInputFilter.DECIMAL, + tags = listOf("timeline-time"), + modifier = Modifier.tooltipOnHover(CutsceneLang.TIME_HINT.lang), + onChange = { typed -> + val time = typed.toFloatOrNull() ?: return@TextField + if (abs(time - controller.currentTime) < TimeFieldEpsilon) return@TextField + controller.isPlaying = false + controller.applyCurrentTime(time) + refresh() + }, + ) + Text("/ " + formatSeconds(controller.workAreaEnd), tags = listOf("timeline-duration")) +} + +private const val TimeFieldEpsilon = 0.005f + +/** A flat button of the bar, the way the IDE toolbar draws them. */ +@Composable +private fun TimelineButton( icon: String, id: String, + tooltip: String, active: Boolean = false, - tooltip: String? = null, onClick: () -> Unit, ) { - var hovered by remember { mutableStateOf(false) } - val background = when { - active -> TimelineAccentSoft - hovered -> TimelineColors.PanelAlt - else -> UiColor.Transparent - } Box( id = id, - mode = UiBoxMode.STACK, - modifier = Modifier.size(24.px, 24.px).background(background) - .border(1.px, if (active) TimelineColors.Accent else TimelineColors.Border, 4f).cursor(UiCursorShape.HAND) - .let { if (tooltip == null) it else it.tooltipOnHover(tooltip) }.onEnter { hovered = true } - .onExit { hovered = false }.onClick { event -> - onClick() - event.consume() - }, + tags = if (active) listOf("timeline-button", "active") else listOf("timeline-button"), + modifier = Modifier.cursor(UiCursorShape.HAND).tooltipOnHover(tooltip).onClick { event -> + onClick() + event.consume() + }, ) { - key(icon) { - Image( - icon, - modifier = Modifier.size(14.px, 14.px).align(UiAlign.CENTER, UiAlign.CENTER) - .opacity(if (active || hovered) 1f else 0.8f), - ) - } + key(icon) { Image(icon, tags = listOf("timeline-button-icon")) } } } -private val TimelineAccentSoft = UiColor(1f, 0.54f, 0.18f, 0.22f) - @Composable internal fun TimelineHeaders( controller: TimelineController, @@ -236,38 +269,38 @@ internal fun TimelineHeaders( verticalOffset: Float, ownsVerticalScroll: Boolean, contentHeight: Float, - onPropertySettings: (AnimProperty<*>) -> Unit, + trackScroll: UiScrollHandle, refresh: () -> Unit, ) { val width = controller.headerWidth val labelWidth = maxOf(width, rows.maxOfOrNull { headerLabelWidth(it) } ?: width) + var menu by remember { mutableStateOf(null) } + Column( id = "timeline-headers", - modifier = Modifier.size(width.px, 100.percent).background(TimelineColors.Panel), + modifier = Modifier.size(width.px, 100.percent), ) { // Corner cell, level with the ruler so the rows below line up with the lanes. Box( mode = UiBoxMode.STACK, - modifier = Modifier.size(width.px, TimelineRulerHeight.px).background(TimelineColors.Group), + tags = listOf("timeline-corner"), + modifier = Modifier.size(width.px, TimelineRulerHeight.px), ) { Text( CutsceneLang.TRACKS.lang, - modifier = Modifier.align(vertical = UiAlign.CENTER).margin(12.px, 0.px, 0.px, 0.px).fontSize(10f) - .foreground(TimelineColors.Muted), - ) - Box( - modifier = Modifier.position(0.px, (TimelineRulerHeight - 1f).px).size(width.px, 1.px) - .background(TimelineColors.Border), + tags = listOf("timeline-corner-label"), + modifier = Modifier.align(vertical = UiAlign.CENTER), ) } val overflows = labelWidth > width + 1f Box( + tags = listOf("timeline-scroll"), modifier = Modifier.size(width.px, 0.px).grow(1f).clip().scrollable( - state = scroll, - vertical = ownsVerticalScroll, - horizontal = overflows, - hasHorizontalScrollbar = overflows, - ), + state = scroll, + vertical = ownsVerticalScroll, + horizontal = overflows, + hasHorizontalScrollbar = overflows, + ).onScroll { event -> scrollTrackList(event, trackScroll, scroll) }, ) { Box( modifier = Modifier.position((-scroll.offsetX).px, (-verticalOffset).px) @@ -275,171 +308,161 @@ internal fun TimelineHeaders( ) { rows.forEach { row -> key(row.id) { - TimelineHeaderRow(row, controller, labelWidth, onPropertySettings, refresh) + TimelineHeaderRow(row, controller, labelWidth, refresh) { event -> + menu = TrackMenu(event.x, event.y, row) + } } } } } } + + menu?.let { open -> + ContextMenu( + id = "timeline-track-menu", + anchorBounds = UiRect(open.x, open.y, 0f, 0f), + alignment = UiPopupAlignment.Cursor, + items = trackMenu(controller, open.row, refresh), + onExpandedChange = { if (!it) menu = null }, + ) + } } +/** Room at the end of a track row, so the list's scrollbar does not sit on the row's buttons. */ +private const val TrackRowEndPadding = 9f + +private class TrackMenu(val x: Float, val y: Float, val row: TimelineRow) + private fun headerLabelWidth(row: TimelineRow): Float = - 8f + row.depth * 12f + row.label.length * 5.5f + headerControlsWidth(row) + 8f + row.depth * 10f + row.label.length * 5.2f + headerControlsWidth(row) private fun headerControlsWidth(row: TimelineRow): Float = when (row.kind) { - TimelineRowKind.CHANNEL -> 26f - else -> 82f + TimelineRowKind.CHANNEL -> 20f + else -> 58f } -private const val EyeOnIcon = "hollowengine:textures/gui/icons/visible.svg" -private const val EyeOffIcon = "hollowengine:textures/gui/icons/invisible.svg" -private const val LockedIcon = "hollowengine:textures/gui/icons/locked.svg" -private const val UnlockedIcon = "hollowengine:textures/gui/icons/unlocked.svg" -private const val CollapseArrowIcon = "hollowengine:textures/gui/icons/arrow.svg" -private const val HideTrackIcon = "hollowengine:textures/gui/icons/cross.svg" - @Composable private fun TimelineHeaderRow( row: TimelineRow, controller: TimelineController, width: Float, - onPropertySettings: (AnimProperty<*>) -> Unit, refresh: () -> Unit, + onMenu: (UiEvent) -> Unit, ) { val top = row.y - TimelineRulerHeight val isCurveView = controller.viewMode == TimelineViewMode.CURVES val rowCurves = if (isCurveView) row.curves.filter { it.spec.supportsCurveEditor } else row.curves val isFocused = isCurveView && rowCurves.isNotEmpty() && rowCurves.all { controller.isFocused(it) } - val color = when { - row.kind == TimelineRowKind.GROUP -> TimelineColors.Group - isFocused -> TimelineColors.Accent.withAlpha(0.26f) - row.locked -> UiColor(0.09f, 0.09f, 0.1f, 1f) - !row.visible -> UiColor(0.09f, 0.1f, 0.11f, 1f) - row.kind == TimelineRowKind.CHANNEL -> TimelineColors.PanelAlt - else -> TimelineColors.Panel + val tags = buildList { + add("timeline-row") + add(row.kind.name.lowercase()) + if (isFocused) add("focused") + if (row.locked) add("locked") + if (!row.visible) add("muted") } Box( id = "header-${row.id}", mode = UiBoxMode.STACK, - modifier = Modifier.position(0.px, top.px).size(width.px, row.height.px).background(color).onClick { event -> - // In the graph a click picks what the graph shows; ctrl adds to it. Everywhere else - // the row list is what it always was. - if (isCurveView && rowCurves.isNotEmpty()) { - controller.focusCurves(rowCurves, additive = event.modifiers and GLFW.GLFW_MOD_CONTROL != 0) - } - when { - row.group != null -> row.group.isCollapsed = !row.group.isCollapsed - else -> if (!isCurveView) controller.clearSelection() - } + tags = tags, + modifier = Modifier.position(0.px, top.px).size(width.px, row.height.px).onClick { event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + onMenu(event) event.consume() - refresh() - }, + return@onClick + } + // In the graph a click picks what the graph shows; ctrl adds to it. Everywhere else + // the row list is what it always was. + if (isCurveView && rowCurves.isNotEmpty()) { + controller.focusCurves(rowCurves, additive = event.modifiers and GLFW.GLFW_MOD_CONTROL != 0) + } + when { + row.group != null -> row.group.isCollapsed = !row.group.isCollapsed + else -> if (!isCurveView) controller.clearSelection() + } + event.consume() + refresh() + }, ) { Row( modifier = Modifier.size(100.percent, 100.percent).alignItems(vertical = UiAlign.CENTER) - .padding(0.px, 0.px, 6.px, 0.px).gap(2.px), + .padding(0.px, 0.px, TrackRowEndPadding.px, 0.px).gap(2.px), ) { - Box(modifier = Modifier.size((8f + row.depth * 12f).px, 1.px)) + Box(modifier = Modifier.size((4f + row.depth * 10f).px, 1.px)) when { - row.group != null -> Image( - CollapseArrowIcon, - modifier = Modifier.size(10.px, 10.px).align(vertical = UiAlign.CENTER) - .rotate(z = if (row.group.isCollapsed) 0f else 90f).opacity(0.75f) - .margin(2.px, 0.px, 4.px, 0.px), - ) + row.group != null -> DisclosureArrow("${row.id}-fold", !row.group.isCollapsed) { + row.group.isCollapsed = !row.group.isCollapsed + refresh() + } row.kind == TimelineRowKind.PROPERTY && (row.property?.curves?.size ?: 0) > 1 -> - Expander(row.property?.isExpanded == true) { + DisclosureArrow("${row.id}-fold", row.property?.isExpanded == true) { row.property?.let { it.isExpanded = !it.isExpanded } refresh() } + + else -> Box(modifier = Modifier.size(10.px, 1.px)) } row.color?.let { swatch -> Box( - modifier = Modifier.size(3.px, 12.px).align(vertical = UiAlign.CENTER) + modifier = Modifier.size(3.px, 10.px).align(vertical = UiAlign.CENTER) .background(swatch.toUiColor(if (row.visible) 1f else 0.35f)).borderRadius(1.5f) - .margin(0.px, 0.px, 6.px, 0.px), + .margin(0.px, 0.px, 3.px, 0.px), ) } Text( row.label, - modifier = Modifier.grow(1f).align(vertical = UiAlign.CENTER) - .fontSize(if (row.kind == TimelineRowKind.CHANNEL) 9f else 10f) - .foreground(if (row.visible) TimelineColors.Text else TimelineColors.Muted).textWrap(false), + tags = listOf("timeline-row-label"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).align(vertical = UiAlign.CENTER) + .textOverflow(UiTextOverflow.DOTS), ) - HeaderControls(row, controller, onPropertySettings, refresh) + HeaderControls(row, controller, refresh) } - Box( - modifier = Modifier.position(0.px, (row.height - 1f).px).size(width.px, 1.px) - .background(TimelineColors.Border), - ) } } @Composable -private fun HeaderControls( - row: TimelineRow, - controller: TimelineController, - onPropertySettings: (AnimProperty<*>) -> Unit, - refresh: () -> Unit, -) { +private fun HeaderControls(row: TimelineRow, controller: TimelineController, refresh: () -> Unit) { val hideProperty = controller.onHideProperty val hideGroup = controller.onHideGroup - if (row.kind == TimelineRowKind.PROPERTY && hideProperty != null) { - row.property?.let { property -> - HeaderIconToggle(HideTrackIcon, active = false, accent = false) { - hideProperty(property) - refresh() - } - } - } - if (row.kind == TimelineRowKind.GROUP && hideGroup != null) { - row.group?.let { group -> - HeaderIconToggle(HideTrackIcon, active = false, accent = false) { - hideGroup(group) - refresh() - } + val property = row.property.takeIf { row.kind == TimelineRowKind.PROPERTY } + val group = row.group + + if (property != null && hideProperty != null || group != null && hideGroup != null) { + RowToggle("${row.id}-remove", TimelineIcons.CLOSE, CutsceneLang.TRACK_REMOVE.lang, listOf("hide-track")) { + if (property != null) hideProperty?.invoke(property) else group?.let { hideGroup?.invoke(it) } + refresh() } } when (row.kind) { TimelineRowKind.CHANNEL -> { val curve = row.curve ?: return - HeaderIconToggle(if (curve.isVisible) EyeOnIcon else EyeOffIcon, curve.isVisible, accent = false) { + VisibilityToggle("${row.id}-visible", curve.isVisible) { curve.isVisible = !curve.isVisible refresh() } } TimelineRowKind.PROPERTY -> { - val property = row.property ?: return - HeaderIconToggle(SettingsIcon, active = false, accent = false) { onPropertySettings(property) } - HeaderIconToggle( - if (property.isVisible) EyeOnIcon else EyeOffIcon, - property.isVisible, - accent = false, - ) { - property.isVisible = !property.isVisible + val owner = row.property ?: return + VisibilityToggle("${row.id}-visible", owner.isVisible) { + owner.isVisible = !owner.isVisible refresh() } - HeaderIconToggle( - if (property.isLocked) LockedIcon else UnlockedIcon, - property.isLocked, - accent = true, - ) { - property.isLocked = !property.isLocked + LockToggle("${row.id}-lock", owner.isLocked) { + owner.isLocked = !owner.isLocked refresh() } } TimelineRowKind.GROUP -> { - val group = row.group ?: return - HeaderIconToggle(if (group.isVisible) EyeOnIcon else EyeOffIcon, group.isVisible, accent = false) { - group.isVisible = !group.isVisible + val owner = row.group ?: return + VisibilityToggle("${row.id}-visible", owner.isVisible) { + owner.isVisible = !owner.isVisible refresh() } - HeaderIconToggle(if (group.isLocked) LockedIcon else UnlockedIcon, group.isLocked, accent = true) { - group.isLocked = !group.isLocked + LockToggle("${row.id}-lock", owner.isLocked) { + owner.isLocked = !owner.isLocked refresh() } } @@ -447,53 +470,102 @@ private fun HeaderControls( } @Composable -private fun Expander(expanded: Boolean, onClick: () -> Unit) { +private fun VisibilityToggle(id: String, visible: Boolean, onClick: () -> Unit) = RowToggle( + id, + if (visible) TimelineIcons.EYE else TimelineIcons.EYE_OFF, + (if (visible) CutsceneLang.TRACK_HIDE else CutsceneLang.TRACK_SHOW).lang, + if (visible) listOf("on") else emptyList(), + onClick, +) + +@Composable +private fun LockToggle(id: String, locked: Boolean, onClick: () -> Unit) = RowToggle( + id, + if (locked) TimelineIcons.LOCK else TimelineIcons.LOCK_OPEN, + (if (locked) CutsceneLang.TRACK_UNLOCK else CutsceneLang.TRACK_LOCK).lang, + if (locked) listOf("warn") else emptyList(), + onClick, +) + +@Composable +private fun RowToggle(id: String, icon: String, tooltip: String, states: List, onClick: () -> Unit) { Box( - mode = UiBoxMode.STACK, - modifier = Modifier.size(12.px, 12.px).align(vertical = UiAlign.CENTER).cursor(UiCursorShape.HAND) - .margin(0.px, 0.px, 2.px, 0.px).onClick { + id = id, + tags = listOf("timeline-row-toggle") + states, + modifier = Modifier.align(vertical = UiAlign.CENTER).cursor(UiCursorShape.HAND).tooltipOnHover(tooltip) + .onClick { onClick() it.consume() }, ) { - Image( - CollapseArrowIcon, - modifier = Modifier.size(9.px, 9.px).align(UiAlign.CENTER, UiAlign.CENTER) - .rotate(z = if (expanded) 90f else 0f).opacity(0.6f), - ) + key(icon) { Image(icon, tags = listOf("timeline-row-icon")) } } } @Composable -private fun HeaderIconToggle(icon: String, active: Boolean, accent: Boolean, onClick: () -> Unit) { - var hovered by remember { mutableStateOf(false) } - val tint = when { - active && accent -> TimelineColors.Accent - active -> TimelineColors.Text - else -> TimelineColors.Muted - } +private fun DisclosureArrow(id: String, expanded: Boolean, onClick: () -> Unit) { Box( - mode = UiBoxMode.STACK, - modifier = Modifier.size(18.px, 18.px).align(vertical = UiAlign.CENTER) - .background(if (hovered) TimelineColors.PanelAlt else UiColor.Transparent).borderRadius(3f) - .cursor(UiCursorShape.HAND).onEnter { hovered = true }.onExit { hovered = false }.onClick { + id = id, + tags = listOf("tree-expander"), + attributes = mapOf("expanded" to expanded.toString()), + modifier = Modifier.size(10.px, 10.px).margin(0.px).align(vertical = UiAlign.CENTER).cursor(UiCursorShape.HAND) + .onClick { onClick() it.consume() }, - ) { - Image( - icon, - modifier = Modifier.size(12.px, 12.px).align(UiAlign.CENTER, UiAlign.CENTER).tint(tint) - .opacity(if (active || hovered) 1f else 0.75f), - ) - } + ) } +/** + * What a right click on a track offers: its keys, whether it shows and takes edits, the basis a + * rotation is keyed in, and taking it off the list. + */ +private fun trackMenu(controller: TimelineController, row: TimelineRow, refresh: () -> Unit): List = + buildList { + val keys = row.curves.flatMap { it.keyframes } + add(UiDropdownItem(CutsceneLang.TRACK_SELECT_KEYS.lang, enabled = keys.isNotEmpty() && !row.locked) { + controller.select(keys, additive = false) + refresh() + }) + + val property = row.property.takeIf { row.kind == TimelineRowKind.PROPERTY } + val type = property?.type as? RotationPropertyType + if (property != null && type != null) { + add( + UiDropdownItem( + CutsceneLang.ROTATION_MODE.lang, + separatorBefore = true, + children = RotationMode.entries.map { mode -> + UiDropdownItem(rotationModeLabel(mode), checked = type.mode == mode) { + controller.edit("Change rotation basis") { property.setRotationMode(mode) } + refresh() + } + }, + ) + ) + } + + val hideProperty = controller.onHideProperty + val hideGroup = controller.onHideGroup + val group = row.group + if (property != null && hideProperty != null) { + add(UiDropdownItem(CutsceneLang.TRACK_REMOVE.lang, icon = TimelineIcons.CLOSE, separatorBefore = true) { + hideProperty(property) + refresh() + }) + } else if (group != null && hideGroup != null) { + add(UiDropdownItem(CutsceneLang.TRACK_REMOVE.lang, icon = TimelineIcons.CLOSE, separatorBefore = true) { + hideGroup(group) + refresh() + }) + } + } + @Composable internal fun ToolbarButton(label: String, id: String, color: UiColor = TimelineColors.PanelAlt, onClick: () -> Unit) { Box( id = id, - modifier = Modifier.size(UiLength.Auto, 22.px).background(color).border(1.px, TimelineColors.Border, 3f) + modifier = Modifier.size(UiLength.Auto, 20.px).background(color).borderRadius(3f) .padding(10.px, 0.px).cursor(UiCursorShape.HAND).onClick { event -> onClick() event.consume() @@ -501,7 +573,7 @@ internal fun ToolbarButton(label: String, id: String, color: UiColor = TimelineC ) { Text( label, - modifier = Modifier.align(UiAlign.CENTER, UiAlign.CENTER).fontSize(10f).foreground(TimelineColors.Text) + modifier = Modifier.align(UiAlign.CENTER, UiAlign.CENTER).fontSize(9f).foreground(TimelineColors.Text) .textWrap(false).textOverflow(UiTextOverflow.DOTS).textAlign(UiTextAlign.CENTER), ) } @@ -509,7 +581,7 @@ internal fun ToolbarButton(label: String, id: String, color: UiColor = TimelineC @Composable private fun TimelineSeparator() { - Box(modifier = Modifier.size(1.px, 18.px).background(TimelineColors.Border)) + Box(tags = listOf("timeline-separator")) } internal fun formatSeconds(value: Float): String = "%.2f".format(value).replace(',', '.') @@ -520,3 +592,6 @@ internal fun zoomAroundCenter(controller: TimelineController, factor: Float) { } internal const val TimelineZoomButtonFactor = 1.25f + +/** The overflow menu hangs under its button, flush with its right edge, since the button ends the bar. */ +private val OverflowMenuAlignment = UiPopupAlignment(anchorHorizontal = UiAlign.END, popupHorizontal = UiAlign.END) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt index 9ec32be64..19267ef13 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineCurves.kt @@ -124,6 +124,7 @@ internal fun TimelineCurveGraph( } } } + WorkAreaShade(controller, pxPerSec, contentWidth, height) MarqueeOverlay(marquee) CurveValueLabels(center, span, height, scrollX, commonValueFormatter(lanes)) Playhead(controller, pxPerSec, height) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineLanes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineLanes.kt index 2ad7fb839..adebcf75b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineLanes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineLanes.kt @@ -11,7 +11,7 @@ import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem import ru.hollowhorizon.hollowengine.client.utils.lang import kotlin.math.abs -private const val TimelineKeyframeSize = 13f +private const val TimelineKeyframeSize = 10f private const val LaneContentId = "timeline-lane-content" @Composable @@ -343,16 +343,24 @@ private fun KeyConnections(row: TimelineRow, pxPerSec: Float, keys: List= contentWidth) return Box( - modifier = Modifier.position(x.px, 0.px).size((contentWidth - x).px, rowsHeight.coerceAtLeast(1f).px) - .background(UiColor(0f, 0f, 0f, 0.38f)).inputTransparent(), + modifier = Modifier.position(x.px, 0.px).size((contentWidth - x).px, shadeHeight) + .background(OutsideWorkArea).inputTransparent(), ) } +private val OutsideWorkArea = UiColor(0f, 0f, 0f, 0.38f) + @Composable internal fun TimelineContextMenu( controller: TimelineController, @@ -390,7 +398,7 @@ internal fun TimelineContextMenu( add( UiDropdownItem( CutsceneLang.CURVE_PRESET.lang, - icon = GraphIcon, + icon = PresetIcon, enabled = hasCurveSelection, closeOnClick = false, ) { showPresets = true }) @@ -425,9 +433,10 @@ internal fun TimelineContextMenu( ) } -private const val PulseIcon = "hollowengine:textures/gui/icons/pulse.svg" -private const val GraphIcon = "hollowengine:textures/gui/icons/graph.svg" -private const val RemoveIcon = "hollowengine:textures/gui/icons/remove.svg" -private const val CopyIcon = "hollowengine:textures/gui/icons/copy.svg" -private const val CutIcon = "hollowengine:textures/gui/icons/cut.png" -private const val PasteIcon = "hollowengine:textures/gui/icons/paste.svg" +private const val PulseIcon = "hollowengine:textures/gui/icons/timeline/key_add.svg" +private const val GraphIcon = "hollowengine:textures/gui/icons/timeline/smooth.svg" +private const val PresetIcon = "hollowengine:textures/gui/icons/timeline/preset.svg" +private const val RemoveIcon = "hollowengine:textures/gui/icons/timeline/delete.svg" +private const val CopyIcon = "hollowengine:textures/gui/icons/timeline/copy.svg" +private const val CutIcon = "hollowengine:textures/gui/icons/timeline/cut.svg" +private const val PasteIcon = "hollowengine:textures/gui/icons/timeline/paste.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt index 9680eb09e..99fb61bd5 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePanel.kt @@ -7,7 +7,6 @@ import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.CutsceneIcon import ru.hollowhorizon.hollowengine.client.ui.inspector.InspectorTarget import ru.hollowhorizon.hollowengine.client.ui.inspector.PublishInspector -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimProperty import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineController import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineViewMode import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CutsceneEditorSession @@ -16,13 +15,13 @@ import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.scroll.UiScrollHandle import ru.hollowhorizon.hollowengine.client.ui.scroll.rememberScrollState import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint -import ru.hollowhorizon.hollowengine.client.ui.style.UiShadow import ru.hollowhorizon.hollowengine.client.utils.lang import kotlin.math.round private const val TimelineZoomWheelStep = 12f private const val TimelineScrollStep = 44f private const val TimelineValueZoomStep = 0.12f +private const val TimelineValuePanStep = 0.08f private const val TimelineMinValueSpan = 0.001f private const val TimelineMaxValueSpan = 100_000f @@ -32,7 +31,6 @@ internal val LocalTimelineRevision = staticCompositionLocalOf { 0 } fun CutsceneTimelineDock(session: CutsceneEditorSession, keyboardActive: Boolean = true) { session.uiRevision.value var dialog by remember { mutableStateOf(CutsceneDialog.NONE) } - var propertySettings by remember { mutableStateOf?>(null) } LaunchedEffect(session) { var lastNanos = -1L @@ -61,7 +59,6 @@ fun CutsceneTimelineDock(session: CutsceneEditorSession, keyboardActive: Boolean onCapture = { session.captureFrame(session.timeline.currentTime) }, onSave = { dialog = CutsceneDialog.SAVE }, onLoad = { dialog = CutsceneDialog.LOAD }, - onPropertySettings = { propertySettings = it }, ) when (dialog) { @@ -69,9 +66,6 @@ fun CutsceneTimelineDock(session: CutsceneEditorSession, keyboardActive: Boolean CutsceneDialog.LOAD -> LoadCutsceneDialog(session) { dialog = CutsceneDialog.NONE } CutsceneDialog.NONE -> {} } - propertySettings?.let { property -> - PropertySettingsDialog(session.timeline, property, session::invalidateUi) { propertySettings = null } - } } } } @@ -104,7 +98,6 @@ fun HollowTimelineEditor( onCapture: () -> Unit = {}, onSave: () -> Unit = {}, onLoad: () -> Unit = {}, - onPropertySettings: (AnimProperty<*>) -> Unit = {}, features: TimelineFeatures = TimelineFeatures.CUTSCENE, ) { val bump = refresh @@ -140,10 +133,20 @@ fun HollowTimelineEditor( } if (focusContentX != null) autoPanToContentX(scroll, laneViewport, focusContentX) + LaunchedEffect(controller.frameTimeRequests) { + if (controller.frameTimeRequests == 0 || laneViewport.width <= 0f) return@LaunchedEffect + val usable = laneViewport.width - TimelineLeftPadding - TimelineFrameMargin + controller.pixelsPerSecond = (usable / controller.workAreaEnd.coerceAtLeast(0.1f)) + .coerceIn(TimelineMinZoom, TimelineMaxZoom) + scroll.scrollTo(x = 0f) + bump() + } + Column( id = "cutscene-timeline-root", + tags = listOf("timeline-root"), modifier = Modifier.size(100.percent, 100.percent) - .background(TimelineColors.Background) + .style(TimelineStylesheet) .focusScope() .onKeyInput { input -> if (keyboardActive) { @@ -162,7 +165,7 @@ fun HollowTimelineEditor( verticalOffset = if (isCurveView) headerScroll.offsetY else scroll.offsetY, ownsVerticalScroll = isCurveView, contentHeight = scrollContentHeight, - onPropertySettings = onPropertySettings, + trackScroll = if (isCurveView) headerScroll else scroll, refresh = bump, ) HeaderSplitter(controller, bump) @@ -171,9 +174,8 @@ fun HollowTimelineEditor( // Ruler: horizontally synced to the lane scroll, pinned vertically. Box( id = "timeline-ruler-viewport", - modifier = Modifier.size(100.percent, TimelineRulerHeight.px) - .background(TimelineColors.Group) - .clip(), + tags = listOf("timeline-ruler"), + modifier = Modifier.size(100.percent, TimelineRulerHeight.px).clip(), ) { Box( modifier = Modifier.position((-scroll.offsetX).px, 0.px) @@ -232,8 +234,8 @@ private fun HeaderSplitter(controller: TimelineController, refresh: () -> Unit) val start = remember { floatArrayOf(controller.headerWidth) } Box( id = "timeline-header-splitter", - modifier = Modifier.size(4.px, 100.percent) - .background(TimelineColors.Border) + tags = listOf("timeline-splitter"), + modifier = Modifier.size(2.px, 100.percent) .cursor(UiCursorShape.RESIZE_HORIZONTAL) .input(hoverable = true, draggable = true) .onPress { start[0] = controller.headerWidth } @@ -247,9 +249,9 @@ private fun HeaderSplitter(controller: TimelineController, refresh: () -> Unit) } /** - * Wheel handling for the lane viewport. The raw scroll event carries no modifiers, so query GLFW. - * Ctrl = zoom time around the cursor; in the curve editor Shift zooms the value axis and Alt pans it. - * Otherwise the wheel pans horizontally (the natural timeline axis) and Shift pans vertically. + * Wheel handling for the lane viewport, the way lists scroll everywhere else: the wheel goes down the + * tracks (in the graph, down the values), Shift+wheel goes along the time, Ctrl+wheel zooms the time + * around the pointer and, in the graph, Alt+wheel zooms the values. */ private fun handleTimelineScroll( event: UiEvent, @@ -258,58 +260,61 @@ private fun handleTimelineScroll( viewport: UiRect, refresh: () -> Unit, ) { + event.consume() val modifiers = currentUiKeyModifiers() - // One of scrollX/scrollY is zero; the runtime already folds the wheel onto X when a modifier is held. - val wheel = event.scrollX + event.scrollY - if (wheel == 0f) { - event.consume() - return - } + val down = -event.rawScrollY + val sideways = -event.rawScrollX + if (down == 0f && sideways == 0f) return + if (modifiers and GLFW.GLFW_MOD_CONTROL != 0) { val oldZoom = controller.pixelsPerSecond - val newZoom = (oldZoom - wheel * TimelineZoomWheelStep).coerceIn(TimelineMinZoom, TimelineMaxZoom) - if (newZoom != oldZoom) { - val cursorInViewport = event.x - viewport.x - val cursorContentX = cursorInViewport + scroll.offsetX - val time = (cursorContentX - TimelineLeftPadding) / oldZoom - controller.pixelsPerSecond = newZoom - val newContentX = time * newZoom + TimelineLeftPadding - scroll.scrollTo(x = (newContentX - cursorInViewport).coerceAtLeast(0f)) - refresh() - } - event.consume() + val newZoom = (oldZoom - (down + sideways) * TimelineZoomWheelStep).coerceIn(TimelineMinZoom, TimelineMaxZoom) + if (newZoom == oldZoom) return + val cursorInViewport = event.x - viewport.x + val time = (cursorInViewport + scroll.offsetX - TimelineLeftPadding) / oldZoom + controller.pixelsPerSecond = newZoom + scroll.scrollTo(x = (time * newZoom + TimelineLeftPadding - cursorInViewport).coerceAtLeast(0f)) + refresh() + return + } + + val shift = modifiers and GLFW.GLFW_MOD_SHIFT != 0 + val alongTime = if (shift) down + sideways else sideways + if (alongTime != 0f) scroll.animateScrollBy(deltaX = alongTime * TimelineScrollStep) + if (shift || down == 0f) { + refresh() return } if (controller.viewMode == TimelineViewMode.CURVES && viewport.height > 0f) { val axis = controller.curveAxis - if (modifiers and GLFW.GLFW_MOD_SHIFT != 0) { + if (modifiers and GLFW.GLFW_MOD_ALT != 0) { val height = viewport.height val localY = event.y - viewport.y val cursorValue = curveYToValue(localY, controller.curveValueCenter, controller.curveValueSpan, height) - val span = (axis.targetSpan * (1f + wheel * TimelineValueZoomStep)) + val span = (axis.targetSpan * (1f + down * TimelineValueZoomStep)) .coerceIn(TimelineMinValueSpan, TimelineMaxValueSpan) axis.glideTo(cursorValue + (localY - height * 0.5f) / height * span, span) - refresh() - event.consume() - return - } - if (modifiers and GLFW.GLFW_MOD_ALT != 0) { - axis.glideTo(axis.targetCenter - wheel * axis.targetSpan * 0.05f, axis.targetSpan) - refresh() - event.consume() - return + } else { + axis.glideTo(axis.targetCenter - down * axis.targetSpan * TimelineValuePanStep, axis.targetSpan) } - } - - val amount = wheel * TimelineScrollStep - if (modifiers and GLFW.GLFW_MOD_SHIFT != 0) { - scroll.animateScrollBy(deltaY = amount) } else { - scroll.animateScrollBy(deltaX = amount) + scroll.animateScrollBy(deltaY = down * TimelineScrollStep) } refresh() +} + +/** The wheel over the track list: down the tracks, or with Shift along long names. */ +internal fun scrollTrackList(event: UiEvent, tracks: UiScrollHandle, names: UiScrollHandle) { event.consume() + val down = -event.rawScrollY + val sideways = -event.rawScrollX + if (currentUiKeyModifiers() and GLFW.GLFW_MOD_SHIFT != 0) { + names.animateScrollBy(deltaX = (down + sideways) * TimelineScrollStep) + return + } + if (sideways != 0f) names.animateScrollBy(deltaX = sideways * TimelineScrollStep) + if (down != 0f) tracks.animateScrollBy(deltaY = down * TimelineScrollStep) } @Composable @@ -350,24 +355,23 @@ private fun TimeRuler( while (second <= end) { val x = TimelineLeftPadding + second * pxPerSec Box( - modifier = Modifier.position(x.px, 16.px) - .size(1.px, 14.px) + modifier = Modifier.position(x.px, (TimelineRulerHeight - 6f).px) + .size(1.px, 6.px) .background(TimelineColors.Muted), ) Text( formatSeconds(second), - modifier = Modifier.position((x + 3f).px, 3.px) - .fontSize(9f) - .foreground(TimelineColors.Muted), + tags = listOf("timeline-ruler-label"), + modifier = Modifier.position((x + 3f).px, 2.px), ) if (pxPerSec > 60f) { val minorStep = majorStep / minorPerMajor for (i in 1 until minorPerMajor) { val mx = TimelineLeftPadding + (second + i * minorStep) * pxPerSec Box( - modifier = Modifier.position(mx.px, 22.px) - .size(1.px, 8.px) - .background(TimelineColors.Border), + modifier = Modifier.position(mx.px, (TimelineRulerHeight - 3f).px) + .size(1.px, 3.px) + .background(TimelineColors.Grid), ) } } @@ -382,15 +386,15 @@ private fun TimeRuler( .background(TimelineColors.Accent), ) Box( - modifier = Modifier.position((px - 6f).px, 0.px) - .size(12.px, 12.px) - .shape(PlayheadHeadShape, UiPaint.Color(TimelineColors.Accent)) - .shadow(UiShadow(offset = UiVec3(0f, 0f, 0f), blur = 1.2f, color = PlayheadGlowColor)), + modifier = Modifier.position((px - 5f).px, 0.px) + .size(10.px, 10.px) + .shape(PlayheadHeadShape, UiPaint.Color(TimelineColors.Accent)), ) } } -private val PlayheadGlowColor = UiColor(1f, 0.54f, 0.18f, 0.7f) +/** Room left after the end of the work area when it is fitted into the lanes. */ +private const val TimelineFrameMargin = 24f private fun rulerMajorStep(pxPerSec: Float): Float = when { pxPerSec < 20f -> 5f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePropertyDialog.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePropertyDialog.kt deleted file mode 100644 index 107470f9c..000000000 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelinePropertyDialog.kt +++ /dev/null @@ -1,80 +0,0 @@ -package ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui - -import androidx.compose.runtime.Composable -import ru.hollowhorizon.hollowengine.client.ui.inspector.* -import ru.hollowhorizon.hollowengine.client.ui.* -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.* -import ru.hollowhorizon.hollowengine.client.utils.lang - -@Composable -internal fun PropertySettingsDialog( - controller: TimelineController, - property: AnimProperty<*>, - refresh: () -> Unit, - onClose: () -> Unit, -) { - DialogFrame(CutsceneLang.PROPERTY_SETTINGS.lang, onClose) { - Text(property.nameState, modifier = Modifier.fontSize(11f).foreground(TimelineColors.Text)) - - RotationModeRow(property, controller, refresh) - - val bounded = property.channels.indices.filter { property.bounds(it) != ChannelBounds.Unbounded } - if (bounded.isNotEmpty()) { - Text(CutsceneLang.LIMITS.lang, modifier = Modifier.fontSize(9f).foreground(TimelineColors.Muted)) - Text( - CutsceneLang.LIMITS_HINT.lang, - modifier = Modifier.size(100.percent, UiLength.Fit).fontSize(9f).foreground(TimelineColors.Muted), - ) - bounded.forEach { index -> - Row( - modifier = Modifier.size(100.percent, UiLength.Fit).gap(6.px).alignItems(vertical = UiAlign.CENTER), - ) { - Text( - property.channels[index].name, - modifier = Modifier.fontSize(10f).foreground(TimelineColors.Muted).textWrap(false), - ) - Text( - boundsLabel(property.bounds(index)), - modifier = Modifier.grow(1f).fontSize(10f).foreground(TimelineColors.Text).textWrap(false), - ) - } - } - } - - Row(modifier = Modifier.size(100.percent, UiLength.Auto).align(horizontal = UiAlign.END)) { - ToolbarButton(CutsceneLang.CLOSE.lang, "property-close", TimelineColors.Blue) { onClose() } - } - } -} - -private fun boundsLabel(bounds: ChannelBounds): String { - val low = bounds.minimum?.let { formatBound(it) } - val high = bounds.maximum?.let { formatBound(it) } - return when { - low != null && high != null -> "$low .. $high" - low != null -> ">= $low" - high != null -> "<= $high" - else -> "" - } -} - -private fun formatBound(value: Float): String = - if (value == value.toInt().toFloat()) value.toInt().toString() else "%.2f".format(value).replace(',', '.') - -@Composable -private fun RotationModeRow(property: AnimProperty<*>, controller: TimelineController, refresh: () -> Unit) { - val type = property.type as? RotationPropertyType ?: return - Text(CutsceneLang.ROTATION_MODE.lang, modifier = Modifier.fontSize(9f).foreground(TimelineColors.Muted)) - PillFlow(id = "property-rotation-modes") { - RotationMode.entries.forEach { mode -> - Pill(rotationModeLabel(mode), type.mode == mode, id = "rotation-mode-${mode.name}") { - controller.edit("Change rotation basis") { property.setRotationMode(mode) } - refresh() - } - } - } - Text( - CutsceneLang.ROTATION_MODE_HINT.lang, - modifier = Modifier.size(100.percent, UiLength.Fit).fontSize(9f).foreground(TimelineColors.Muted), - ) -} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt index ea779616d..f24eff656 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt @@ -21,17 +21,17 @@ import kotlin.math.min import kotlin.math.pow import kotlin.math.round -internal const val TimelineRulerHeight = 24f +internal const val TimelineRulerHeight = 18f -internal const val TimelineGroupRowHeight = 18f -internal const val TimelinePropertyRowHeight = 18f -internal const val TimelineChannelRowHeight = 15f -internal const val TimelineLeftPadding = 58f -internal const val CurveValueGutter = 46f +internal const val TimelineGroupRowHeight = 17f +internal const val TimelinePropertyRowHeight = 16f +internal const val TimelineChannelRowHeight = 14f +internal const val TimelineLeftPadding = 40f +internal const val CurveValueGutter = 40f internal const val TimelineMinContentWidth = 600f internal const val TimelineMaxZoom = 500f internal const val TimelineMinZoom = 10f -internal const val TimelineMinHeaderWidth = 150f +internal const val TimelineMinHeaderWidth = 120f internal const val TimelineMaxHeaderWidth = 480f private const val TimelineAutoPanEdge = 48f internal const val TimelineScrollbarClearance = 12f @@ -254,18 +254,22 @@ internal fun Color.toUiColor(alphaMultiplier: Float = 1f): UiColor { internal fun UiColor.withAlpha(multiplier: Float) = UiColor(red, green, blue, (alpha * multiplier).coerceIn(0f, 1f)) +/** + * What the lanes, keys and curves are drawn with: the IDE palette of docking.hss, so the timeline + * reads as part of the IDE. The chrome around them takes the same colours from timeline.hss. + */ internal object TimelineColors { - val Background = UiColor(0.07f, 0.08f, 0.1f, 1f) - val Panel = UiColor(0.1f, 0.11f, 0.14f, 1f) - val PanelAlt = UiColor(0.13f, 0.14f, 0.17f, 1f) - val Row = UiColor(0.11f, 0.12f, 0.14f, 1f) - val Group = UiColor(0.14f, 0.15f, 0.18f, 1f) - val Muted = UiColor(0.58f, 0.62f, 0.7f, 1f) - val Text = UiColor(0.88f, 0.9f, 0.94f, 1f) - val Accent = UiColor(1f, 0.54f, 0.18f, 1f) - val Blue = UiColor(0.34f, 0.58f, 0.88f, 1f) - val Border = UiColor(0.24f, 0.26f, 0.3f, 1f) + val Background = UiColor(0.110f, 0.118f, 0.133f, 1f) + val Panel = UiColor(0.110f, 0.118f, 0.133f, 1f) + val PanelAlt = UiColor(0.169f, 0.180f, 0.208f, 1f) + val Row = UiColor(0.118f, 0.125f, 0.141f, 1f) + val Group = UiColor(0.129f, 0.137f, 0.157f, 1f) + val Muted = UiColor(0.561f, 0.608f, 0.678f, 1f) + val Text = UiColor(0.769f, 0.796f, 0.855f, 1f) + val Accent = UiColor(0.431f, 0.608f, 0.863f, 1f) + val Blue = UiColor(0.682f, 0.722f, 0.792f, 1f) + val Border = UiColor(0.149f, 0.157f, 0.180f, 1f) val Danger = UiColor(0.76f, 0.23f, 0.23f, 1f) - val Grid = UiColor(0.18f, 0.19f, 0.23f, 1f) + val Grid = UiColor(0.176f, 0.188f, 0.216f, 1f) val Handle = UiColor(0.72f, 0.74f, 0.8f, 1f) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt index 9b83d221b..9dd96dc24 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/IdeTimelineHost.kt @@ -18,7 +18,6 @@ import ru.hollowhorizon.hollowengine.client.ui.Row import ru.hollowhorizon.hollowengine.client.ui.UiBoxMode import ru.hollowhorizon.hollowengine.client.ui.grow import ru.hollowhorizon.hollowengine.client.ui.ide.CutsceneIcon -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.AnimProperty import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineController import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.TimelineKeys import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CutsceneEditorSessions @@ -97,7 +96,6 @@ fun TimelineDock(keyboardActive: Boolean = true) { } val controller = target.controller - var propertySettings by remember { mutableStateOf?>(null) } val revision = remember(target.id) { mutableStateOf(0) } val refresh: () -> Unit = remember(target) { @@ -148,7 +146,6 @@ fun TimelineDock(keyboardActive: Boolean = true) { onCapture = { target.onCapture?.invoke() }, onSave = { target.onSave?.invoke() }, onLoad = { target.onLoad?.invoke() }, - onPropertySettings = { propertySettings = it }, features = TimelineFeatures( capture = target.onCapture != null, storage = target.onSave != null, @@ -156,9 +153,6 @@ fun TimelineDock(keyboardActive: Boolean = true) { ), ) target.overlay?.invoke() - propertySettings?.let { property -> - PropertySettingsDialog(controller, property, refresh) { propertySettings = null } - } } } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorTree.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorAssetTree.kt similarity index 94% rename from runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorTree.kt rename to runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorAssetTree.kt index 904a98024..052b7d1e3 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/entity/EntityEditorTree.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorAssetTree.kt @@ -1,10 +1,10 @@ -package ru.hollowhorizon.hollowengine.client.ui.entity +package ru.hollowhorizon.hollowengine.client.ui.inspector -import ru.hollowhorizon.hollowengine.client.ui.inspector.* import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem -internal object PathTree { +/** Asset paths as a folder tree: namespace first, then each folder of the path. */ +internal object AssetPathTree { fun rows( paths: List, expanded: Set, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorAssets.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorAssets.kt index 0ab930101..d46d67b8e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorAssets.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorAssets.kt @@ -1,9 +1,21 @@ package ru.hollowhorizon.hollowengine.client.ui.inspector import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableStateSetOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import net.minecraft.client.Minecraft +import net.minecraft.resources.ResourceLocation +import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.widgets.UiCompletionContributor import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextCompletion +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnostic +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnosticSeverity +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextEdit +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextQuickFix +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeView import ru.hollowhorizon.hollowengine.client.utils.IconHelper @@ -12,6 +24,17 @@ private const val AssetCompletionLimit = 60 /** Opens host's asset picker for an `@EditorAsset` field; absent when the host has no picker. */ @Composable internal fun AssetPickerButton(extensions: List, current: String, label: String, onPick: (String) -> Unit) { + AssetPickerButton(label, current, { host -> host.assets(extensions) }, onPick) +} + +/** The same, for a field whose candidates are not plain files, such as shader names. */ +@Composable +fun AssetPickerButton( + label: String, + current: String, + candidates: (InspectorHost) -> List, + onPick: (String) -> Unit, +) { val host = LocalInspectorHost.current ?: return if (!host.canPickAssets) return @@ -20,11 +43,11 @@ internal fun AssetPickerButton(extensions: List, current: String, label: InspectorLang.pick, tags = listOf("insp-pick-button"), ) { - host.pickAsset(InspectorAssetRequest(label, host.assets(extensions), current, onPick)) + host.pickAsset(InspectorAssetRequest(label, candidates(host), current, onPick)) } } -internal fun assetCompletions(candidates: List): UiCompletionContributor = UiCompletionContributor { context -> +fun assetCompletions(candidates: List): UiCompletionContributor = UiCompletionContributor { context -> val prefix = context.text.take(context.caret).trim() candidates.asSequence().filter { prefix.isBlank() || it.contains(prefix, ignoreCase = true) } .take(AssetCompletionLimit).map { candidate -> @@ -37,6 +60,76 @@ internal fun assetCompletions(candidates: List): UiCompletionContributor }.toList() } +/** + * An underline under [value] when [exists] says there is nothing there, with a fix for every + * candidate that ends the same way: a texture moved to another folder or namespace is the usual case. + */ +fun assetDiagnostics(value: String, candidates: List, exists: (String) -> Boolean): List { + val path = value.trim() + if (path.isEmpty() || exists(path)) return emptyList() + + val name = path.substringAfterLast('/').substringAfterLast(':') + val fixes = candidates.asSequence() + .filter { it != path && it.substringAfterLast('/').substringAfterLast(':') == name } + .take(MaxAssetFixes) + .map { UiTextQuickFix(InspectorLang.useAsset(it), listOf(UiTextEdit(0, value.length, it))) } + .toList() + return listOf( + UiTextDiagnostic( + start = 0, + end = value.length, + message = InspectorLang.assetMissing(path), + severity = UiTextDiagnosticSeverity.ERROR, + fixes = fixes, + ) + ) +} + +private const val MaxAssetFixes = 5 + +/** Whether the resource pack stack has a file at [path], a `namespace:path` location. */ +fun resourceExists(path: String): Boolean { + val location = ResourceLocation.tryParse(path) ?: return false + val manager = Minecraft.getInstance().resourceManager ?: return true + return manager.getResource(location).isPresent +} + +/** + * A resource path typed with completions, checked against the loaded packs, and picked from a tree. + * + * [candidates] lists what can be picked; [exists] decides whether what is typed is there. Both are + * given so a field can name something other than a file, such as a shader by its short name. + */ +@Composable +fun AssetPathField( + value: String, + label: String, + id: String, + candidates: (InspectorHost) -> List, + exists: (String) -> Boolean = ::resourceExists, + placeholder: String = "", + onChange: (String) -> Unit, +) { + val host = LocalInspectorHost.current + val listed = remember(host) { host?.let(candidates).orEmpty() } + val diagnostics = remember(value, listed) { assetDiagnostics(value, listed, exists) } + + Row(tags = listOf("insp-input-row")) { + TextField( + value = value, + id = id, + fontSize = 9f, + placeholder = placeholder, + completionContributor = if (listed.isEmpty()) null else assetCompletions(listed), + diagnostics = diagnostics, + onChange = onChange, + tags = listOf("insp-input", "insp-inline-input"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f), + ) + AssetPickerButton(label, value, candidates, onChange) + } +} + /** * Where an `@EditorAsset` field's suggestions come from. */ @@ -64,3 +157,89 @@ object EditorAssetSources { }.getOrDefault(emptyList()) } } + +private val CenteredOnViewport = UiPopupAlignment( + anchorHorizontal = UiAlign.CENTER, + anchorVertical = UiAlign.CENTER, + popupHorizontal = UiAlign.CENTER, + popupVertical = UiAlign.CENTER, +) + +/** A modal window in the middle of the screen, in the inspector's look. */ +@Composable +fun InspectorDialog(id: String, title: String, width: Float, onClose: () -> Unit, content: HollowUiContent) { + val viewport = LocalUiViewport.current + Popup( + anchorBounds = viewport, + alignment = CenteredOnViewport, + id = "$id-popup", + layer = 100, + modal = true, + onDismiss = onClose, + ) { + Column( + id = id, + tags = listOf("insp-dialog"), + modifier = Modifier.style(InspectorStylesheet).size(width.px, UiLength.Fit) + .maxSize(height = (viewport.height - 80f).coerceAtLeast(160f).px), + ) { + Row(tags = listOf("insp-dialog-head")) { + Text(title, tags = listOf("insp-dialog-title"), modifier = Modifier.grow(1f)) + InspectorIconButton(InspectorIcons.CLOSE, InspectorLang.close) { onClose() } + } + content() + } + } +} + +/** The tree of everything [request] offers, filtered as the user types. */ +@Composable +fun AssetPickerDialog(request: InspectorAssetRequest, onClose: () -> Unit) { + var filter by remember(request) { mutableStateOf("") } + val expanded = remember(request) { mutableStateSetOf() } + + val rows = AssetPathTree.rows( + paths = request.candidates, + expanded = expanded, + query = filter, + folderIcon = InspectorIcons.FOLDER, + fileIcon = { IconHelper.forPath(it).toString() }, + selected = request.current, + ) + + InspectorDialog("insp-asset-dialog", request.title, 420f, onClose) { + Row(tags = listOf("insp-search")) { + Image(InspectorIcons.SEARCH, tags = listOf("insp-search-icon")) + TextField( + value = filter, + id = "insp-asset-filter", + placeholder = InspectorLang.search, + fontSize = 9f, + onChange = { filter = it }, + tags = listOf("insp-input", "flat"), + modifier = Modifier.size(0.px, UiLength.Fit).grow(1f), + ) + } + + if (rows.isEmpty()) { + Text(InspectorLang.nothingFound, tags = listOf("insp-hint")) + return@InspectorDialog + } + + UiTreeView( + items = rows, + onToggle = { item -> if (!expanded.add(item.id)) expanded.remove(item.id) }, + onSelect = { item, _ -> + val picked = item.payload + if (picked == null) { + if (!expanded.add(item.id)) expanded.remove(item.id) + } else { + request.onPick(picked) + onClose() + } + }, + modifier = Modifier.size(100.percent, 280.px), + tags = listOf("insp-asset-tree"), + ) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt index 0b748675b..01b15b2db 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt @@ -17,25 +17,35 @@ fun Section(title: String, id: String? = null, boxed: Boolean = false, content: } } -/** A section that folds away; [expanded] stays the caller's state so it survives a rebuild. */ +/** + * A section that folds away, headed by a bar with [icon] so it reads apart from the fields in it. + * [expanded] stays the caller's state so it survives a rebuild; [trailing] sits at the end of the bar, + * for the actions that belong to the whole section. + */ @Composable fun CollapsibleSection( title: String, expanded: Boolean, id: String? = null, + icon: String? = null, + trailing: HollowUiContent? = null, onToggle: () -> Unit, content: HollowUiContent, ) { - Column(id = id, tags = listOf("insp-section")) { + Column(id = id, tags = listOf("insp-section", "insp-section-fold")) { Row( + id = id?.let { "$it-head" }, tags = listOf("insp-section-head"), + attributes = mapOf("expanded" to expanded.toString()), modifier = Modifier.input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND).onClick { event -> if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onToggle() event.consume() }, ) { - DisclosureArrow(expanded) + icon?.let { Image(it, tags = listOf("insp-section-icon")) } Text(title, tags = listOf("insp-section-title")) + trailing?.invoke() + DisclosureArrow(expanded) } if (expanded) Column(tags = listOf("insp-section-body"), content = content) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorLang.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorLang.kt index d59aace2e..2459c3d89 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorLang.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorLang.kt @@ -12,6 +12,12 @@ object InspectorLang { val add: String get() = (ROOT + "add").lang val remove: String get() = (ROOT + "remove").lang val pick: String get() = (ROOT + "pick").lang + val search: String get() = (ROOT + "search").lang + val nothingFound: String get() = (ROOT + "nothing_found").lang + val close: String get() = (ROOT + "close").lang + + fun assetMissing(path: String): String = (ROOT + "asset_missing").lang.format(path) + fun useAsset(path: String): String = (ROOT + "asset_use").lang.format(path) fun unsupported(type: String): String = (ROOT + "unsupported").lang.format(type) } @@ -21,4 +27,6 @@ internal object InspectorIcons { const val REMOVE = "hollowengine:textures/gui/icons/remove.svg" const val FOLDER = "hollowengine:textures/gui/icons/folder.svg" const val HELP = "hollowengine:textures/gui/icons/docs.svg" + const val SEARCH = "hollowengine:textures/gui/icons/search.svg" + const val CLOSE = "hollowengine:textures/gui/icons/cross.svg" } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt index 12b23c434..c54f9f38f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTreeView.kt @@ -73,6 +73,7 @@ fun UiTreeView( onFilterOpened: ((String) -> Unit)? = null, scrollState: UiScrollHandle = rememberScrollState(), onBackgroundClick: (() -> Unit)? = null, + onBackgroundContextMenu: ((UiEvent) -> Unit)? = null, reveal: UiTreeReveal? = null, onRevealed: (() -> Unit)? = null, ) { @@ -107,8 +108,12 @@ fun UiTreeView( Column( tags = listOf("tree-view-scroll"), modifier = Modifier.size(100.percent, 0.px).grow(1f).scrollable(state = scrollState).then( - if (onBackgroundClick == null) Modifier else Modifier.input(clickable = true).onClick { event -> - onBackgroundClick() + if (onBackgroundClick == null && onBackgroundContextMenu == null) Modifier else Modifier.input(clickable = true).onClick { event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT && onBackgroundContextMenu != null) { + onBackgroundContextMenu(event) + } else { + onBackgroundClick?.invoke() + } event.consume() }, ), diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt index b1e30262a..0d7c510e1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt @@ -1,7 +1,6 @@ package ru.hollowhorizon.hollowengine.client.vfx import ru.hollowhorizon.hollowengine.client.utils.math.rotateBy -import ru.hollowhorizon.hollowengine.common.utils.MutableColor import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f import ru.hollowhorizon.hollowengine.common.utils.math.QuatF @@ -58,21 +57,6 @@ class VfxEmitter( private val offset = vector(VfxProperty.OFFSET, spec.spawn.offset, 0f) private val inheritVelocity = scalar(VfxProperty.INHERIT_VELOCITY, spec.spawn.inheritVelocity, 0f) - private val appearance = spec.appearance - private val size = vector(VfxProperty.SIZE, appearance.size, 1f, VfxRangeMode.PER_PARTICLE) - private val spin = vector(VfxProperty.SPIN, appearance.rotation, 0f, VfxRangeMode.PER_PARTICLE) - private val color = VfxSamplers.color( - appearance.color, - expressions, - salt = VfxProperty.COLOR.hashCode(), - drive = node.drive(VfxProperty.COLOR), - ) - - private val liveSize = isLive(VfxProperty.SIZE, appearance.size) - private val liveSpin = isLive(VfxProperty.SPIN, appearance.rotation) - private val liveColor = !VfxSamplers.isFixedPerParticle(appearance.color) || - node.drive(VfxProperty.COLOR) != null - private val gravity = scalar(VfxProperty.GRAVITY, spec.motion.gravity, 0f, VfxRangeMode.PER_PARTICLE) private val drag = scalar(VfxProperty.DRAG, spec.motion.drag, 0f, VfxRangeMode.PER_PARTICLE) @@ -84,6 +68,14 @@ class VfxEmitter( }) } + /** What the renderers under this emitter give its particles, read while it simulates. */ + private val looks = ArrayList() + + /** Called by a renderer under this emitter as it is built. */ + fun addLook(look: VfxParticleLook) { + looks += look + } + /** The flipbook grid the renderer cuts the material region into; one cell without a flipbook. */ val uvColumns: Int val uvRows: Int @@ -119,7 +111,6 @@ class VfxEmitter( private val scratchPosition = MutableVec3f() private val scratchDirection = MutableVec3f() private val scratchVector = MutableVec3f() - private val scratchColor = MutableColor(1f, 1f, 1f, 1f) /** Extra velocity the modules asked for, for this particle and this step only. */ var stepVelocityX: Float = 0f @@ -288,9 +279,7 @@ class VfxEmitter( particles.index[slot] = context.particleIndex particles.frame[slot] = 0f - readSize(slot) - readSpin(slot) - readColor(slot) + looks.forEach { it.spawn(slot, context) } particles.light[slot] = instance.lightAt(this, slot) @@ -341,37 +330,13 @@ class VfxEmitter( continue } - if (liveSize) readSize(slot) - if (liveSpin) readSpin(slot) - if (liveColor) readColor(slot) + looks.forEach { it.step(slot, context) } if (instance.readsLight) particles.light[slot] = instance.lightAt(this, slot) slot++ } } - private fun readSize(slot: Int) { - if (appearance.uniformSize) size.evalUniform(context, scratchVector) else size.eval(context, scratchVector) - particles.sizeX[slot] = scratchVector.x - particles.sizeY[slot] = scratchVector.y - particles.sizeZ[slot] = scratchVector.z - } - - private fun readSpin(slot: Int) { - spin.eval(context, scratchVector) - particles.rotationX[slot] = scratchVector.x - particles.rotationY[slot] = scratchVector.y - particles.rotationZ[slot] = scratchVector.z - } - - private fun readColor(slot: Int) { - color.eval(context, scratchColor) - particles.colorR[slot] = scratchColor.r - particles.colorG[slot] = scratchColor.g - particles.colorB[slot] = scratchColor.b - particles.colorA[slot] = scratchColor.a - } - /** Fills context with what does not depend on a particular particle. */ fun fillEmitterContext() { context.emitterAge = age @@ -529,9 +494,6 @@ class VfxEmitter( range: VfxRangeMode = VfxRangeMode.FRESH, ): VfxVec3Sampler = VfxSamplers.vec3(value, expressions, default, range, property.hashCode(), node.drive(property)) - private fun isLive(property: VfxProperty, value: VfxVec3Value): Boolean = - !VfxSamplers.isFixedPerParticle(value) || node.drive(property) != null - companion object { private const val MIN_STEP = 1f / 240f private const val MAX_SUBSTEPS = 8 diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt new file mode 100644 index 000000000..1993f028a --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt @@ -0,0 +1,94 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.common.utils.MutableColor +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAppearance +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value + +/** + * The size, turn and colour one renderer gives the particles of the emitter it sits under. + */ +class VfxParticleLook(spec: VfxAppearance, node: VfxNodeRuntime, particles: VfxParticles) { + /** [STRIDE] floats per particle: size, rotation in degrees, then colour. */ + val data: FloatArray = particles.channel("look:${node.spec.id}", STRIDE) + + private val uniformSize = spec.uniformSize + private val size = vector(node, VfxProperty.SIZE, spec.size, 1f) + private val spin = vector(node, VfxProperty.SPIN, spec.rotation, 0f) + private val color = VfxSamplers.color( + spec.color, + node.expressions, + salt = VfxProperty.COLOR.hashCode(), + drive = node.drive(VfxProperty.COLOR), + ) + + private val liveSize = isLive(node, VfxProperty.SIZE, spec.size) + private val liveSpin = isLive(node, VfxProperty.SPIN, spec.rotation) + private val liveColor = !VfxSamplers.isFixedPerParticle(spec.color) || node.drive(VfxProperty.COLOR) != null + + private val scratchVector = MutableVec3f() + private val scratchColor = MutableColor(1f, 1f, 1f, 1f) + + /** Everything, for a particle that has just been born. */ + fun spawn(slot: Int, context: VfxEvalContext) { + readSize(slot, context) + readSpin(slot, context) + readColor(slot, context) + } + + /** What can change over the life of a particle. */ + fun step(slot: Int, context: VfxEvalContext) { + if (liveSize) readSize(slot, context) + if (liveSpin) readSpin(slot, context) + if (liveColor) readColor(slot, context) + } + + private fun readSize(slot: Int, context: VfxEvalContext) { + if (uniformSize) size.evalUniform(context, scratchVector) else size.eval(context, scratchVector) + val at = slot * STRIDE + SIZE + data[at] = scratchVector.x + data[at + 1] = scratchVector.y + data[at + 2] = scratchVector.z + } + + private fun readSpin(slot: Int, context: VfxEvalContext) { + spin.eval(context, scratchVector) + val at = slot * STRIDE + ROTATION + data[at] = scratchVector.x + data[at + 1] = scratchVector.y + data[at + 2] = scratchVector.z + } + + private fun readColor(slot: Int, context: VfxEvalContext) { + color.eval(context, scratchColor) + val at = slot * STRIDE + COLOR + data[at] = scratchColor.r + data[at + 1] = scratchColor.g + data[at + 2] = scratchColor.b + data[at + 3] = scratchColor.a + } + + companion object { + const val SIZE = 0 + const val ROTATION = 3 + const val COLOR = 6 + const val STRIDE = 10 + + /** The look of the one particle a renderer draws when it is not under an emitter. */ + fun unit(): FloatArray = floatArrayOf(1f, 1f, 1f, 0f, 0f, 0f, 1f, 1f, 1f, 1f) + + private fun vector(node: VfxNodeRuntime, property: VfxProperty, value: VfxVec3Value, default: Float) = + VfxSamplers.vec3( + value, + node.expressions, + default, + VfxRangeMode.PER_PARTICLE, + property.hashCode(), + node.drive(property), + ) + + private fun isLive(node: VfxNodeRuntime, property: VfxProperty, value: VfxVec3Value): Boolean = + !VfxSamplers.isFixedPerParticle(value) || node.drive(property) != null + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt index f7edf2257..6dc0f3115 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt @@ -21,20 +21,6 @@ class VfxParticles(val capacity: Int) { val age = FloatArray(capacity) val lifetime = FloatArray(capacity) - val sizeX = FloatArray(capacity) - val sizeY = FloatArray(capacity) - val sizeZ = FloatArray(capacity) - - /** Euler angles in degrees. */ - val rotationX = FloatArray(capacity) - val rotationY = FloatArray(capacity) - val rotationZ = FloatArray(capacity) - - val colorR = FloatArray(capacity) - val colorG = FloatArray(capacity) - val colorB = FloatArray(capacity) - val colorA = FloatArray(capacity) - /** A number fixed at spawn, for variation that does not flicker from step to step. */ val random = FloatArray(capacity) @@ -52,7 +38,8 @@ class VfxParticles(val capacity: Int) { private class Channel(val stride: Int, val data: FloatArray) /** - * A private array of a module or a renderer, created on first use, [stride] floats per particle + * A private array of a module or a renderer (a renderer keeps the size and colour it gives each + * particle in one, see [VfxParticleLook]), created on first use, [stride] floats per particle * that move with it when it changes slots. */ fun channel(name: String, stride: Int = 1): FloatArray { @@ -88,16 +75,6 @@ class VfxParticles(val capacity: Int) { velocityZ[to] = velocityZ[from] age[to] = age[from] lifetime[to] = lifetime[from] - sizeX[to] = sizeX[from] - sizeY[to] = sizeY[from] - sizeZ[to] = sizeZ[from] - rotationX[to] = rotationX[from] - rotationY[to] = rotationY[from] - rotationZ[to] = rotationZ[from] - colorR[to] = colorR[from] - colorG[to] = colorG[from] - colorB[to] = colorB[from] - colorA[to] = colorA[from] random[to] = random[from] index[to] = index[from] frame[to] = frame[from] diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt index 8377dad7e..ba4f6afc3 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.client.vfx.render import org.joml.Matrix4f import org.joml.Vector3f import ru.hollowhorizon.hollowengine.client.models.internal.v2.ModelAttachment +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticleLook import ru.hollowhorizon.hollowengine.client.vfx.VfxParticles import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec @@ -38,6 +39,7 @@ class VfxView( */ class VfxParticleBatch( val particles: VfxParticles, + val look: FloatArray, /** Simulation space to the space of the view the batch is drawn with. */ val matrix: Matrix4f, val uvColumns: Int = 1, @@ -47,7 +49,9 @@ class VfxParticleBatch( val sizeScale: Vec3f = Vec3f.ONES, /** Multiplied into every particle color. */ val tint: FloatArray = floatArrayOf(1f, 1f, 1f, 1f), -) +) { + fun lookOf(slot: Int): Int = slot * VfxParticleLook.STRIDE +} /** One plane renderer's worth of quads. */ class VfxQuadDraw( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt index 17e5b6054..a41d328cb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt @@ -11,6 +11,7 @@ import org.joml.Quaternionf import org.joml.Vector3f import ru.hollowhorizon.hollowengine.client.models.internal.rendering.InstanceBatchManager import ru.hollowhorizon.hollowengine.client.models.internal.rendering.RenderContext +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticleLook /** * Draws one frame worth of effects, everything but the full-screen passes, which come once the @@ -62,17 +63,20 @@ object VfxFrameRenderer { VfxBillboards.facing(particles.velocityX[slot], particles.velocityY[slot], particles.velocityZ[slot]) ) } + val look = batch.look + val spin = batch.lookOf(slot) + VfxParticleLook.ROTATION + val size = batch.lookOf(slot) + VfxParticleLook.SIZE stack.mulPose( Quaternionf().rotateZYX( - (particles.rotationZ[slot] + batch.spin.z) * Mth.DEG_TO_RAD, - (particles.rotationY[slot] + batch.spin.y) * Mth.DEG_TO_RAD, - (particles.rotationX[slot] + batch.spin.x) * Mth.DEG_TO_RAD, + (look[spin + 2] + batch.spin.z) * Mth.DEG_TO_RAD, + (look[spin + 1] + batch.spin.y) * Mth.DEG_TO_RAD, + (look[spin] + batch.spin.x) * Mth.DEG_TO_RAD, ) ) stack.scale( - particles.sizeX[slot] * batch.sizeScale.x, - particles.sizeY[slot] * batch.sizeScale.y, - particles.sizeZ[slot] * batch.sizeScale.z, + look[size] * batch.sizeScale.x, + look[size + 1] * batch.sizeScale.y, + look[size + 2] * batch.sizeScale.z, ) attachment.pipeline.render( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt index 5eb5afe66..0caad00ae 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt @@ -12,6 +12,7 @@ import org.joml.Quaternionf import org.lwjgl.BufferUtils import org.lwjgl.opengl.GL33 import ru.hollowhorizon.hollowengine.client.models.internal.utils.VboWrapper +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticleLook import ru.hollowhorizon.hollowengine.common.registry.ModShaders import ru.hollowhorizon.hollowengine.common.vfx.VfxLighting import ru.hollowhorizon.hollowengine.common.vfx.VfxPrimitive @@ -110,6 +111,10 @@ object VfxMeshRenderer { val batch = draw.batch val particles = batch.particles val material = draw.spec.material + val look = batch.look + val size = batch.lookOf(slot) + VfxParticleLook.SIZE + val spin = batch.lookOf(slot) + VfxParticleLook.ROTATION + val color = batch.lookOf(slot) + VfxParticleLook.COLOR matrix.set(batch.matrix).translate( particles.positionX[slot] + batch.offset.x, @@ -123,15 +128,15 @@ object VfxMeshRenderer { } matrix.rotate( rotation.identity().rotateZYX( - (particles.rotationZ[slot] + batch.spin.z) * Mth.DEG_TO_RAD, - (particles.rotationY[slot] + batch.spin.y) * Mth.DEG_TO_RAD, - (particles.rotationX[slot] + batch.spin.x) * Mth.DEG_TO_RAD, + (look[spin + 2] + batch.spin.z) * Mth.DEG_TO_RAD, + (look[spin + 1] + batch.spin.y) * Mth.DEG_TO_RAD, + (look[spin] + batch.spin.x) * Mth.DEG_TO_RAD, ) ) matrix.scale( - particles.sizeX[slot] * batch.sizeScale.x, - particles.sizeY[slot] * batch.sizeScale.y, - particles.sizeZ[slot] * batch.sizeScale.z, + look[size] * batch.sizeScale.x, + look[size + 1] * batch.sizeScale.y, + look[size + 2] * batch.sizeScale.z, ) val region = material.uv @@ -145,10 +150,10 @@ object VfxMeshRenderer { packed[at + 3] = matrix.m10(); packed[at + 4] = matrix.m11(); packed[at + 5] = matrix.m12() packed[at + 6] = matrix.m20(); packed[at + 7] = matrix.m21(); packed[at + 8] = matrix.m22() packed[at + 9] = matrix.m30(); packed[at + 10] = matrix.m31(); packed[at + 11] = matrix.m32() - packed[at + 12] = particles.colorR[slot] * tint[0] - packed[at + 13] = particles.colorG[slot] * tint[1] - packed[at + 14] = particles.colorB[slot] * tint[2] - packed[at + 15] = particles.colorA[slot] * tint[3] + packed[at + 12] = look[color] * tint[0] + packed[at + 13] = look[color + 1] * tint[1] + packed[at + 14] = look[color + 2] * tint[2] + packed[at + 15] = look[color + 3] * tint[3] packed[at + 16] = region.u0 + (frame % batch.uvColumns) * cellWidth packed[at + 17] = region.v0 + (frame / batch.uvColumns) * cellHeight packed[at + 18] = cellWidth diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt index 77deafa70..fe1173671 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.client.vfx.render import net.minecraft.util.Mth import org.joml.Matrix4f import org.joml.Quaternionf +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticleLook import ru.hollowhorizon.hollowengine.client.vfx.render.VfxQuadPacker.Companion.STRIDE import ru.hollowhorizon.hollowengine.common.vfx.VfxBlend import ru.hollowhorizon.hollowengine.common.vfx.VfxFacing @@ -170,7 +171,7 @@ internal class VfxQuadPacker { return dx * dx + dy * dy + dz * dz } - private fun write(out: FloatArray, at: Int, draw: VfxQuadDraw, slot: Int, view: VfxView) { + private fun write(out: FloatArray, base: Int, draw: VfxQuadDraw, slot: Int, view: VfxView) { val plane = draw.plane val batch = draw.batch val particles = batch.particles @@ -183,9 +184,11 @@ internal class VfxQuadPacker { val cy = matrix.m01() * px + matrix.m11() * py + matrix.m21() * pz + matrix.m31() val cz = matrix.m02() * px + matrix.m12() * py + matrix.m22() * pz + matrix.m32() - val width = particles.sizeX[slot] * batch.sizeScale.x - val height = particles.sizeY[slot] * batch.sizeScale.y - val roll = particles.rotationZ[slot] + batch.spin.z + val look = batch.look + val at = batch.lookOf(slot) + val width = look[at + VfxParticleLook.SIZE] * batch.sizeScale.x + val height = look[at + VfxParticleLook.SIZE + 1] * batch.sizeScale.y + val roll = look[at + VfxParticleLook.ROTATION + 2] + batch.spin.z when (plane.facing) { VfxFacing.CAMERA -> VfxBillboards.cameraEdges(edges, matrix, view, roll, width, height) VfxFacing.CAMERA_AXIS -> VfxBillboards.axisEdges( @@ -202,7 +205,7 @@ internal class VfxQuadPacker { VfxFacing.NONE -> VfxBillboards.rotatedEdges( edges, matrix, - particles.rotationX[slot] + batch.spin.x, particles.rotationY[slot] + batch.spin.y, roll, + look[at + VfxParticleLook.ROTATION] + batch.spin.x, look[at + VfxParticleLook.ROTATION + 1] + batch.spin.y, roll, width, height, ) } @@ -216,21 +219,22 @@ internal class VfxQuadPacker { val light = particles.light[slot] val tint = batch.tint - out[at] = cx - out[at + 1] = cy - out[at + 2] = cz - System.arraycopy(edges, 0, out, at + 3, 6) - out[at + 9] = particles.colorR[slot] * tint[0] - out[at + 10] = particles.colorG[slot] * tint[1] - out[at + 11] = particles.colorB[slot] * tint[2] - out[at + 12] = particles.colorA[slot] * tint[3] - out[at + 13] = region.u0 + (frame % columns) * cellWidth - out[at + 14] = region.v0 + (frame / columns) * cellHeight - out[at + 15] = cellWidth - out[at + 16] = cellHeight - out[at + 17] = (light and 0xFFFF).toFloat() - out[at + 18] = (light shr 16 and 0xFFFF).toFloat() - out[at + 19] = blendMode(plane.material.blend) + val color = at + VfxParticleLook.COLOR + out[base] = cx + out[base + 1] = cy + out[base + 2] = cz + System.arraycopy(edges, 0, out, base + 3, 6) + out[base + 9] = look[color] * tint[0] + out[base + 10] = look[color + 1] * tint[1] + out[base + 11] = look[color + 2] * tint[2] + out[base + 12] = look[color + 3] * tint[3] + out[base + 13] = region.u0 + (frame % columns) * cellWidth + out[base + 14] = region.v0 + (frame / columns) * cellHeight + out[base + 15] = cellWidth + out[base + 16] = cellHeight + out[base + 17] = (light and 0xFFFF).toFloat() + out[base + 18] = (light shr 16 and 0xFFFF).toFloat() + out[base + 19] = blendMode(plane.material.blend) } private fun ensureCapacity(count: Int) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt index 6b1f95e44..c5ff84afa 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt @@ -8,6 +8,7 @@ import ru.hollowhorizon.hollowengine.client.vfx.VfxFloatSampler import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeBehavior import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime import ru.hollowhorizon.hollowengine.client.vfx.VfxNoise +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticleLook import ru.hollowhorizon.hollowengine.client.vfx.VfxRangeMode import ru.hollowhorizon.hollowengine.client.vfx.VfxSamplers import ru.hollowhorizon.hollowengine.client.vfx.VfxVec3Sampler @@ -139,6 +140,11 @@ class VfxTrailRenderer(private val spec: VfxTrailSpec, node: VfxNodeRuntime) : V private val points: FloatArray? = source?.particles?.channel("trail:${spec.id}:points", maxPoints * 4) + /** The colour this trail gives each particle; only the colour, a trail has a width of its own. */ + private val look: FloatArray? = source?.let { emitter -> + VfxParticleLook(spec.particle, node, emitter.particles).also(emitter::addLook).data + } + /** Per particle: how many points, and the index and random of the particle they were taken for. */ private val meta: FloatArray? = source?.particles?.channel("trail:${spec.id}:meta", 3) @@ -228,14 +234,16 @@ class VfxTrailRenderer(private val spec: VfxTrailSpec, node: VfxNodeRuntime) : V val particles = emitter.particles val points = points ?: return val meta = meta ?: return + val look = look ?: return val matrix = scratch.set(placement).mul(emitter.simToRender.asMatrix4f()) for (slot in 0 until particles.count) { head.set(particles.positionX[slot], particles.positionY[slot], particles.positionZ[slot]) emitter.fillParticleContext(slot) pointContext.copyInputs(emitter.context) + val tone = slot * VfxParticleLook.STRIDE + VfxParticleLook.COLOR strip( matrix, points, slot * maxPoints * 4, meta[slot * 3].toInt(), - particles.colorR[slot], particles.colorG[slot], particles.colorB[slot], particles.colorA[slot], + look[tone], look[tone + 1], look[tone + 2], look[tone + 3], particles.light[slot], ) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt index 54e570c28..2b31c461b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt @@ -7,10 +7,12 @@ import ru.hollowhorizon.hollowengine.client.vfx.VfxColorSampler import ru.hollowhorizon.hollowengine.client.vfx.VfxEmitter import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeBehavior import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime +import ru.hollowhorizon.hollowengine.client.vfx.VfxParticleLook import ru.hollowhorizon.hollowengine.client.vfx.VfxParticles import ru.hollowhorizon.hollowengine.client.vfx.VfxSamplers import ru.hollowhorizon.hollowengine.common.utils.MutableColor import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f +import ru.hollowhorizon.hollowengine.common.vfx.VfxAppearance import ru.hollowhorizon.hollowengine.common.vfx.VfxColorValue import ru.hollowhorizon.hollowengine.common.vfx.VfxMeshSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxModelSpec @@ -19,17 +21,26 @@ import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.VfxSurfaceSpec /** - * What every renderer node shares: the particles it draws, and its tint. + * What every renderer node shares: the particles it draws, the look it gives them, and its tint. * - * Under an emitter those are the emitter's particles. Anywhere else the node draws one particle of - * its own, a unit one at its origin, so the same draw path covers both. + * Under an emitter those are the emitter's particles, sized and coloured by a [VfxParticleLook] of + * this node. Anywhere else the node draws one particle of its own, a unit one at its origin, so the + * same draw path covers both. */ -abstract class VfxRendererNode(protected val node: VfxNodeRuntime, tint: VfxColorValue) : VfxNodeBehavior { +abstract class VfxRendererNode( + protected val node: VfxNodeRuntime, + tint: VfxColorValue, + appearance: VfxAppearance, +) : VfxNodeBehavior { /** The emitter whose particles this node draws, or null when it draws itself. */ protected val source: VfxEmitter? = node.particleSource private val own: VfxParticles? = if (source == null) VfxParticles(1).also(::placeOwnParticle) else null + private val look: FloatArray = source + ?.let { emitter -> VfxParticleLook(appearance, node, emitter.particles).also(emitter::addLook).data } + ?: VfxParticleLook.unit() + private val tintSampler: VfxColorSampler = VfxSamplers.color( tint, node.expressions, @@ -52,6 +63,7 @@ abstract class VfxRendererNode(protected val node: VfxNodeRuntime, tint: VfxColo val local = node.transform return VfxParticleBatch( particles = emitter.particles, + look = look, matrix = Matrix4f(placement).mul(emitter.simToRender.asMatrix4f()), uvColumns = emitter.uvColumns, uvRows = emitter.uvRows, @@ -66,6 +78,7 @@ abstract class VfxRendererNode(protected val node: VfxNodeRuntime, tint: VfxColo particles.light[0] = node.instance.lightAt(node.frame.position) return VfxParticleBatch( particles = particles, + look = look, matrix = Matrix4f(placement).mul(node.frame.toMatrix(frameMatrix).asMatrix4f()), tint = tint, ) @@ -73,19 +86,13 @@ abstract class VfxRendererNode(protected val node: VfxNodeRuntime, tint: VfxColo private fun placeOwnParticle(particles: VfxParticles) { particles.allocate() - particles.sizeX[0] = 1f - particles.sizeY[0] = 1f - particles.sizeZ[0] = 1f - particles.colorR[0] = 1f - particles.colorG[0] = 1f - particles.colorB[0] = 1f - particles.colorA[0] = 1f particles.lifetime[0] = 1f } } /** A renderer node drawn with a material, and the uniforms that material's shader takes. */ -abstract class VfxSurfaceNode(spec: VfxSurfaceSpec, node: VfxNodeRuntime) : VfxRendererNode(node, spec.tint) { +abstract class VfxSurfaceNode(spec: VfxSurfaceSpec, node: VfxNodeRuntime, appearance: VfxAppearance) : + VfxRendererNode(node, spec.tint, appearance) { private val uniforms = spec.material.shader?.let { shader -> VfxUniformBinding(shader, spec.material.uniforms, spec.material.samplers, node) } @@ -93,14 +100,14 @@ abstract class VfxSurfaceNode(spec: VfxSurfaceSpec, node: VfxNodeRuntime) : VfxR protected fun uniforms(): VfxUniformValues? = uniforms?.evaluate(node.context) } -class VfxPlaneNode(private val spec: VfxPlaneSpec, node: VfxNodeRuntime) : VfxSurfaceNode(spec, node) { +class VfxPlaneNode(private val spec: VfxPlaneSpec, node: VfxNodeRuntime) : VfxSurfaceNode(spec, node, spec.particle) { override fun collect(into: VfxDrawList, placement: Matrix4f) { val batch = batch(placement) ?: return into.quads += VfxQuadDraw(spec, batch, uniforms()) } } -class VfxMeshNode(private val spec: VfxMeshSpec, node: VfxNodeRuntime) : VfxSurfaceNode(spec, node) { +class VfxMeshNode(private val spec: VfxMeshSpec, node: VfxNodeRuntime) : VfxSurfaceNode(spec, node, spec.particle) { private val primitive = spec.primitive override fun collect(into: VfxDrawList, placement: Matrix4f) { @@ -113,7 +120,8 @@ class VfxMeshNode(private val spec: VfxMeshSpec, node: VfxNodeRuntime) : VfxSurf * A model drawn through the model renderer. Each particle is submitted as one instance of the model, * so the model renderer batches them the way it batches entities. */ -class VfxModelNode(private val spec: VfxModelSpec, node: VfxNodeRuntime) : VfxRendererNode(node, VfxColorValue.WHITE) { +class VfxModelNode(private val spec: VfxModelSpec, node: VfxNodeRuntime) : + VfxRendererNode(node, VfxColorValue.WHITE, spec.particle) { /** Loaded the first time it is actually drawn. */ private val model: ModelAttachment? by lazy { spec.model.takeIf { it.isNotBlank() }?.let { ModelAttachment(it) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt index eb498af93..d8205f768 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEffect.kt @@ -31,6 +31,52 @@ data class VfxEffect( return copy(nodes = nodes.map { it.adding(parentId, child) }) } + /** Whether [id] is [ancestor] itself or anywhere under it. */ + fun isWithin(id: String, ancestor: String): Boolean = + node(ancestor)?.walkSelf()?.any { it.id == id } ?: false + + /** + * The node [id] taken from where it is and put under [parentId] (the root when null) at [index], or + * at the end when [index] is out of range. A node cannot go under itself; that leaves the effect as + * it was. + */ + fun withMoved(id: String, parentId: String?, index: Int = Int.MAX_VALUE): VfxEffect { + val moved = node(id) ?: return this + if (parentId != null && isWithin(parentId, id)) return this + val without = withoutNode(id) + if (parentId == null) return without.copy(nodes = without.nodes.inserting(moved, index)) + return without.copy(nodes = without.nodes.map { it.inserting(parentId, moved, index) }) + } + + /** The node [id] moved [offset] places among the nodes that share its parent. */ + fun withShifted(id: String, offset: Int): VfxEffect { + val parent = parentOf(id) + val siblings = parent?.children ?: nodes + val from = siblings.indexOfFirst { it.id == id } + if (from < 0) return this + val to = (from + offset).coerceIn(0, siblings.lastIndex) + if (to == from) return this + return withMoved(id, parent?.id, to) + } + + /** + * A copy of the node [id] and everything under it, with fresh ids, placed right after it, and a copy + * of every timeline track that drove the copied nodes. Returns the effect and the id of the copy. + */ + fun withDuplicate(id: String): Pair? { + val original = node(id) ?: return null + val renamed = HashMap() + val clone = original.copiedWithFreshIds(renamed) + + val parent = parentOf(id) + val index = (parent?.children ?: nodes).indexOfFirst { it.id == id } + 1 + val placed = if (parent == null) copy(nodes = nodes.inserting(clone, index)) + else copy(nodes = nodes.map { it.inserting(parent.id, clone, index) }) + + val tracks = timeline.tracks.mapNotNull { track -> renamed[track.node]?.let { track.copy(node = it) } } + return placed.copy(timeline = placed.timeline.copy(tracks = placed.timeline.tracks + tracks)) to clone.id + } + /** The effect with every node placed at its origin, switched on and unnamed: what placement leaves. */ fun withoutPlacement(): VfxEffect = copy(nodes = nodes.map { it.withoutPlacement() }) @@ -65,6 +111,22 @@ private fun VfxNodeSpec.removing(target: String): VfxNodeSpec? { return withCommon(children = children.mapNotNull { it.removing(target) }) } +private fun List.inserting(node: VfxNodeSpec, index: Int): List = + toMutableList().also { it.add(index.coerceIn(0, size), node) } + +private fun VfxNodeSpec.inserting(parentId: String, child: VfxNodeSpec, index: Int): VfxNodeSpec { + if (id == parentId) return withCommon(children = children.inserting(child, index)) + if (children.isEmpty()) return this + return withCommon(children = children.map { it.inserting(parentId, child, index) }) +} + +/** This node and its children under new ids, recording in [renamed] which old id became which. */ +private fun VfxNodeSpec.copiedWithFreshIds(renamed: MutableMap): VfxNodeSpec { + val fresh = newVfxNodeId(id.substringBefore('-').ifBlank { "node" }) + renamed[id] = fresh + return withCommon(id = fresh, children = children.map { it.copiedWithFreshIds(renamed) }) +} + private fun VfxNodeSpec.adding(parentId: String, child: VfxNodeSpec): VfxNodeSpec { if (id == parentId) return withCommon(children = children + child) if (children.isEmpty()) return this diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt index d8eceaf2a..7519c60f6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt @@ -3,8 +3,6 @@ package ru.hollowhorizon.hollowengine.common.vfx import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f -import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.color -import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.rotation import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.scalar import ru.hollowhorizon.hollowengine.common.vfx.VfxAnimatables.vector import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxModuleSpec @@ -95,22 +93,6 @@ data class VfxSpawn( lifetime.sources() + speed.sources() + offset.sources() + inheritVelocity.sources() } -/** - * The size, turn and color of a particle, read again every step for as long as it lives. What it - * looks like with them is up to the renderers under the emitter. - */ -@Serializable -data class VfxAppearance( - /** Width, height and depth in blocks; a plane uses the first two. */ - val size: VfxVec3Value = VfxVec3Value.all(0.25f), - /** Drives all three axes of [size] from the first, which is what most effects want. */ - val uniformSize: Boolean = true, - val rotation: VfxVec3Value = VfxVec3Value.ZERO, - val color: VfxColorValue = VfxColorValue.WHITE, -) { - fun expressions(): List = size.sources() + rotation.sources() + color.sources() -} - /** * The forces every emitter has, as opposed to the ones that come from modules. */ @@ -142,7 +124,6 @@ data class VfxEmitterSpec( val inheritScale: Boolean = false, val shape: VfxShape = VfxShape(), val spawn: VfxSpawn = VfxSpawn(), - val appearance: VfxAppearance = VfxAppearance(), val motion: VfxMotion = VfxMotion(), val modules: List = emptyList(), /** The longest step the simulation may take for this emitter, in seconds. */ @@ -162,7 +143,6 @@ data class VfxEmitterSpec( addAll(emission.rate.sources()) addAll(shape.expressions()) addAll(spawn.expressions()) - addAll(appearance.expressions()) addAll(motion.expressions()) modules.forEach { addAll(it.expressions()) } } @@ -177,9 +157,6 @@ data class VfxEmitterSpec( add(scalar(VfxProperty.SPEED, "speed", spawn.speed)) add(vector(VfxProperty.OFFSET, "spawn_offset", spawn.offset)) add(scalar(VfxProperty.INHERIT_VELOCITY, "inherit_velocity", spawn.inheritVelocity)) - add(vector(VfxProperty.SIZE, "size", appearance.size)) - add(rotation(VfxProperty.SPIN, "spin", appearance.rotation)) - add(color(VfxProperty.COLOR, "color", appearance.color)) add(scalar(VfxProperty.GRAVITY, "gravity", motion.gravity)) add(scalar(VfxProperty.DRAG, "drag", motion.drag)) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt index 91cda239e..92d907f62 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxNodes.kt @@ -52,7 +52,33 @@ abstract class VfxNodeSpec { * A node that draws on every particle of the emitter it sits directly under, and once in its own * place anywhere else. */ -interface VfxParticleRendererSpec +interface VfxParticleRendererSpec { + /** What the node gives each particle it draws; a node drawing itself does not read it. */ + val particle: VfxAppearance + + fun withParticle(particle: VfxAppearance): VfxNodeSpec +} + +/** + * The size, turn and color a renderer gives each particle of its emitter, read again every step for + * as long as the particle lives. Every renderer on one emitter has its own, so a spark and its glow + * can differ. + */ +@Serializable +data class VfxAppearance( + val size: VfxVec3Value = VfxVec3Value.all(0.25f), + val uniformSize: Boolean = true, + val rotation: VfxVec3Value = VfxVec3Value.ZERO, + val color: VfxColorValue = VfxColorValue.WHITE, +) { + fun expressions(): List = size.sources() + rotation.sources() + color.sources() + + fun animatables(): List = listOf( + VfxAnimatables.vector(VfxProperty.SIZE, "size", size), + VfxAnimatables.rotation(VfxProperty.SPIN, "spin", rotation), + VfxAnimatables.color(VfxProperty.COLOR, "color", color), + ) +} /** Nothing but a place in the tree: moves, turns, scales and switches off everything under it. */ @Serializable diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt index c7921435b..2edb7d83a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt @@ -36,19 +36,19 @@ object VfxNodeTypes { init { point.onChange(VfxModuleRevision::invalidate) - builtIn("group", VfxGroupSpec.serializer(), "folder.svg") { VfxGroupSpec() } - builtIn("emitter", VfxEmitterSpec.serializer(), "light_point.svg") { + builtIn("group", VfxGroupSpec.serializer(), "vfx/node_group.svg") { VfxGroupSpec() } + builtIn("emitter", VfxEmitterSpec.serializer(), "vfx/node_emitter.svg") { VfxEmitterSpec(children = listOf(VfxPlaneSpec())) } - builtIn("plane", VfxPlaneSpec.serializer(), "file_image.svg") { VfxPlaneSpec() } - builtIn("cube", VfxCubeSpec.serializer(), "box.svg") { VfxCubeSpec() } - builtIn("sphere", VfxSphereSpec.serializer(), "global.svg") { VfxSphereSpec() } - builtIn("cylinder", VfxCylinderSpec.serializer(), "loops.svg") { VfxCylinderSpec() } - builtIn("model", VfxModelSpec.serializer(), "file_model.svg") { VfxModelSpec() } - builtIn("trail", VfxTrailSpec.serializer(), "curve.svg") { VfxTrailSpec() } - builtIn("beam", VfxBeamSpec.serializer(), "link.svg") { VfxBeamSpec() } - builtIn("post_effect", VfxPostEffectSpec.serializer(), "film.svg") { VfxPostEffectSpec() } - builtIn("camera_shake", VfxCameraShakeSpec.serializer(), "pulse.svg") { VfxCameraShakeSpec() } + builtIn("plane", VfxPlaneSpec.serializer(), "vfx/node_plane.svg") { VfxPlaneSpec() } + builtIn("cube", VfxCubeSpec.serializer(), "vfx/node_cube.svg") { VfxCubeSpec() } + builtIn("sphere", VfxSphereSpec.serializer(), "vfx/node_sphere.svg") { VfxSphereSpec() } + builtIn("cylinder", VfxCylinderSpec.serializer(), "vfx/node_cylinder.svg") { VfxCylinderSpec() } + builtIn("model", VfxModelSpec.serializer(), "vfx/node_model.svg") { VfxModelSpec() } + builtIn("trail", VfxTrailSpec.serializer(), "vfx/node_trail.svg") { VfxTrailSpec() } + builtIn("beam", VfxBeamSpec.serializer(), "vfx/node_beam.svg") { VfxBeamSpec() } + builtIn("post_effect", VfxPostEffectSpec.serializer(), "vfx/node_post_effect.svg") { VfxPostEffectSpec() } + builtIn("camera_shake", VfxCameraShakeSpec.serializer(), "vfx/node_camera_shake.svg") { VfxCameraShakeSpec() } } private inline fun builtIn( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt index e6f89ce21..538c79fec 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt @@ -59,6 +59,7 @@ data class VfxPlaneSpec( override val tint: VfxColorValue = VfxColorValue.WHITE, val facing: VfxFacing = VfxFacing.CAMERA, val facingAxis: Vec3f = Vec3f.Y_AXIS, + override val particle: VfxAppearance = VfxAppearance(), ) : VfxSurfaceSpec(), VfxParticleRendererSpec { override fun withCommon( id: String, @@ -68,7 +69,13 @@ data class VfxPlaneSpec( children: List, ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + override fun withParticle(particle: VfxAppearance) = copy(particle = particle) + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) + + override fun expressions() = super.expressions() + particle.expressions() + + override fun animatables() = super.animatables() + particle.animatables() } /** Which built-in mesh a mesh node draws. */ @@ -87,6 +94,10 @@ abstract class VfxMeshSpec : VfxSurfaceSpec(), VfxParticleRendererSpec { abstract val alignToVelocity: Boolean abstract val primitive: VfxPrimitive + + override fun expressions() = super.expressions() + particle.expressions() + + override fun animatables() = super.animatables() + particle.animatables() } @Serializable @@ -100,6 +111,7 @@ data class VfxCubeSpec( override val material: VfxMaterialSpec = VfxMaterialSpec(texture = WHITE_TEXTURE), override val tint: VfxColorValue = VfxColorValue.WHITE, override val alignToVelocity: Boolean = false, + override val particle: VfxAppearance = VfxAppearance(), ) : VfxMeshSpec() { override val primitive get() = VfxPrimitive(VfxPrimitiveKind.CUBE) @@ -111,6 +123,8 @@ data class VfxCubeSpec( children: List, ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + override fun withParticle(particle: VfxAppearance) = copy(particle = particle) + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) } @@ -127,6 +141,7 @@ data class VfxSphereSpec( override val alignToVelocity: Boolean = false, /** Slices around the vertical axis; half as many rings go from pole to pole. */ val segments: Int = 24, + override val particle: VfxAppearance = VfxAppearance(), ) : VfxMeshSpec() { override val primitive get() = VfxPrimitive(VfxPrimitiveKind.SPHERE, segments.coerceIn(4, MAX_SEGMENTS)) @@ -138,6 +153,8 @@ data class VfxSphereSpec( children: List, ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + override fun withParticle(particle: VfxAppearance) = copy(particle = particle) + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) } @@ -155,6 +172,7 @@ data class VfxCylinderSpec( val segments: Int = 24, /** Whether the ends are closed; an open tube is what shockwaves and portals are made of. */ val caps: Boolean = true, + override val particle: VfxAppearance = VfxAppearance(), ) : VfxMeshSpec() { override val primitive get() = VfxPrimitive(VfxPrimitiveKind.CYLINDER, segments.coerceIn(3, MAX_SEGMENTS), caps) @@ -166,6 +184,8 @@ data class VfxCylinderSpec( children: List, ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + override fun withParticle(particle: VfxAppearance) = copy(particle = particle) + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) } @@ -184,6 +204,7 @@ data class VfxModelSpec( /** Turns the model along the way the particle travels, on top of its own rotation. */ val alignToVelocity: Boolean = false, val emissive: Boolean = false, + override val particle: VfxAppearance = VfxAppearance(), ) : VfxNodeSpec(), VfxParticleRendererSpec { override fun withCommon( id: String, @@ -192,6 +213,12 @@ data class VfxModelSpec( transform: VfxTransform, children: List, ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun withParticle(particle: VfxAppearance) = copy(particle = particle) + + override fun expressions() = particle.expressions() + + override fun animatables() = particle.animatables() } /** How a ribbon lays its texture along its length. */ @@ -230,6 +257,8 @@ data class VfxTrailSpec( val maxPoints: Int = 32, val uvMode: VfxRibbonUv = VfxRibbonUv.STRETCH, val tileLength: Float = 1f, + /** Only the colour is read: a trail has a width of its own and no turn. */ + override val particle: VfxAppearance = VfxAppearance(), ) : VfxSurfaceSpec(), VfxParticleRendererSpec { override fun withCommon( id: String, @@ -239,11 +268,16 @@ data class VfxTrailSpec( children: List, ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + override fun withParticle(particle: VfxAppearance) = copy(particle = particle) + override fun withSurface(material: VfxMaterialSpec, tint: VfxColorValue) = copy(material = material, tint = tint) - override fun expressions() = super.expressions() + width.sources() + override fun expressions() = super.expressions() + width.sources() + particle.color.sources() - override fun animatables() = super.animatables() + scalar(VfxProperty.WIDTH, "width", width) + override fun animatables() = super.animatables() + listOf( + scalar(VfxProperty.WIDTH, "width", width), + color(VfxProperty.COLOR, "color", particle.color), + ) } /** diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/ide/cutscene.json b/runtime/src/main/lang/en_us/hollowengine/gui/ide/cutscene.json index 6f91e9020..9a21085f4 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/ide/cutscene.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/ide/cutscene.json @@ -58,14 +58,26 @@ "handles.auto_hint": "Derived from the neighbouring keys. Drag a handle in the curve view to take over; hold Shift to keep the opposite length, Ctrl to move one handle alone.", "handles.incoming": "in", "handles.outgoing": "out", - "property.settings": "Property", "rotation.mode": "Rotation basis", "rotation.euler": "Euler", "rotation.quaternion": "Quaternion", - "rotation.mode_hint": "Switching resamples the curves onto the new channels; handles are reset.", - "limits.title": "Limits", - "limits.hint": "Set by the property type; the editor keeps keys inside them.", "weather.clear": "Clear", "weather.rain": "Rain", - "weather.thunder": "Thunder" + "weather.thunder": "Thunder", + "track.select_keys": "Select its keys", + "track.show": "Show", + "track.hide": "Hide", + "track.lock": "Lock", + "track.unlock": "Unlock", + "track.remove": "Take off the list", + "action.to_start": "To the start (Home)", + "action.to_end": "To the end", + "action.play": "Play or pause (Space)", + "action.prev_key": "Previous key (Down)", + "action.next_key": "Next key (Up)", + "action.zoom_in": "Zoom in (Ctrl+wheel)", + "action.zoom_out": "Zoom out (Ctrl+wheel)", + "action.more": "More", + "view.frame_time": "Fit the work area (F)", + "preview.time_hint": "Where the playhead is; type a time to jump there" } diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/inspector.json b/runtime/src/main/lang/en_us/hollowengine/gui/inspector.json index ad6e5f697..2b5d2bda6 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/inspector.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/inspector.json @@ -1,13 +1,18 @@ { "add": "Add", + "asset_missing": "No such file in the loaded packs: %s", + "asset_use": "Use %s", "bone.clear": "Leave it unset", "bone.no_matches": "No bone by that name.", "bone.none": "not set", "bone.search": "Find a bone", + "close": "Close", "empty_list": "Empty", "not_set": "Not set", + "nothing_found": "Nothing found", "nothing_selected": "Select something to see its parameters", "pick": "Pick from loaded assets", "remove": "Remove", + "search": "Search", "unsupported": "%s cannot be edited here" } diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json index 99289eb52..438f2b836 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json @@ -1,7 +1,7 @@ { "effect": "Effect", "nodes": "Nodes", - "no_nodes": "This effect has no nodes yet.", + "no_nodes": "Right-click the effect to add a node.", "add_node": "Add node", "remove_node": "Remove node", "off": "off", @@ -279,5 +279,17 @@ "property_enabled": "Enabled", "property_position": "Position", "property_rotation": "Rotation", - "property_scale": "Scale" + "property_scale": "Scale", + "add_child": "Add inside", + "duplicate": "Duplicate", + "rename": "Rename", + "enable": "Switch on", + "disable": "Switch off", + "move_up": "Move up", + "move_down": "Move down", + "move_out": "Move out of the parent", + "shader_placeholder": "built-in", + "beam_target_hint": "The node the beam ends at. Leave empty to end it at the point below.", + "beam_target_none": "a point", + "uv_region": "UV region" } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/cutscene.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/cutscene.json index 9a830c90a..c94882c12 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/cutscene.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/cutscene.json @@ -58,14 +58,26 @@ "handles.auto_hint": "Считаются по соседним ключам. Потяни направляющую в режиме кривых, чтобы задать вручную; Shift - сохранить длину противоположной, Ctrl - двигать только одну.", "handles.incoming": "вх", "handles.outgoing": "исх", - "property.settings": "Свойство", "rotation.mode": "Представление поворота", "rotation.euler": "Эйлер", "rotation.quaternion": "Кватернион", - "rotation.mode_hint": "Переключение пересчитывает кривые на новые каналы, направляющие сбрасываются.", - "limits.title": "Ограничения", - "limits.hint": "Задаются типом свойства; редактор держит ключи внутри них.", "weather.clear": "Ясно", "weather.rain": "Дождь", - "weather.thunder": "Гроза" + "weather.thunder": "Гроза", + "track.select_keys": "Выделить ключи", + "track.show": "Показать", + "track.hide": "Скрыть", + "track.lock": "Заблокировать", + "track.unlock": "Разблокировать", + "track.remove": "Убрать из списка", + "action.to_start": "В начало (Home)", + "action.to_end": "В конец", + "action.play": "Пуск или пауза (Пробел)", + "action.prev_key": "Предыдущий ключ (Вниз)", + "action.next_key": "Следующий ключ (Вверх)", + "action.zoom_in": "Приблизить (Ctrl+колесо)", + "action.zoom_out": "Отдалить (Ctrl+колесо)", + "action.more": "Ещё", + "view.frame_time": "Вписать рабочую область (F)", + "preview.time_hint": "Где стоит курсор; введите время, чтобы перейти" } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/inspector.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/inspector.json index 5cf4d0795..d996bb321 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/inspector.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/inspector.json @@ -1,13 +1,18 @@ { "add": "Добавить", + "asset_missing": "В загруженных паках нет такого файла: %s", + "asset_use": "Заменить на %s", "bone.clear": "Оставить пустым", "bone.no_matches": "Кости с таким именем нет.", "bone.none": "не выбрана", "bone.search": "Найти кость", + "close": "Закрыть", "empty_list": "Пусто", "not_set": "Не задано", + "nothing_found": "Ничего не найдено", "nothing_selected": "Выберите что-нибудь, чтобы увидеть параметры", "pick": "Выбрать из загруженных", "remove": "Удалить", + "search": "Поиск", "unsupported": "%s нельзя отредактировать здесь" } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json index a2a4d8144..0fa2d3019 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json @@ -1,7 +1,7 @@ { "effect": "Эффект", "nodes": "Узлы", - "no_nodes": "В этом эффекте пока нет узлов.", + "no_nodes": "Нажмите ПКМ по эффекту, чтобы добавить узел.", "add_node": "Добавить узел", "remove_node": "Удалить узел", "off": "выкл", @@ -62,14 +62,14 @@ "burst": "Залп", "burst_hint": "Сколько партиклов выпускается разом в начале каждого цикла.", "duration": "Длительность", - "duration_hint": "Сколько секунд эмиттер испускает партиклы. 0 — бесконечно.", + "duration_hint": "Сколько секунд эмиттер испускает партиклы. Без ограничений: 0.", "loop": "Повторять", "loop_delay": "Пауза", "loop_delay_hint": "Секунд тишины между повторами.", "max_particles": "Предел", "max_particles_hint": "Больше этого числа партиклов у эмиттера одновременно не бывает.", "max_step": "Шаг симуляции", - "max_step_hint": "Самый длинный шаг симуляции в секундах. Меньше — точнее быстрые партиклы и коллизии, но дороже.", + "max_step_hint": "Самый длинный шаг симуляции в секундах. Чем меньше, тем точнее партиклы и коллизии, но дороже по производительности.", "space_local": "Локальное", "space_world": "Мировое", @@ -92,7 +92,7 @@ "angle": "Угол", "angle_hint": "Половина угла раскрытия конуса, в градусах.", "thickness": "Заполнение", - "thickness_hint": "0 — партиклы только на поверхности, 1 — по всему объёму.", + "thickness_hint": "По поверхности: 0.\nПо всему объёму: 1.", "direction": "Направление", "direction_mode": "Куда летят", "aim_shape": "Из формы", @@ -117,7 +117,7 @@ "color_hint": "Градиент читается по времени жизни, если не выбран другой источник.", "gravity": "Гравитация", - "gravity_hint": "Блоков в секунду за секунду, тянет вниз. Отрицательная — вверх.", + "gravity_hint": "Блоков в секунду за секунду, тянет вниз. Отрицательная гравитация поднимает партиклы вверх.", "drag": "Сопротивление", "drag_hint": "Какую долю скорости партикл теряет за секунду, от 0 до 1.", @@ -136,7 +136,7 @@ "depth_test": "Прячется за геометрией", "depth_write": "Пишет глубину", "uv_from": "Область текстуры", - "uv_hint": "Какая часть текстуры — это спрайт, в долях от 0 до 1. Атлас кадров режется из этой области.", + "uv_hint": "Какая часть текстуры это спрайт, в промежутке от 0 до 1. Атлас кадров режется из этой области.", "uv_to": "до", "facing_none": "Как повёрнут", @@ -151,7 +151,7 @@ "segments": "Сегменты", "caps": "Закрытые торцы", "width": "Ширина", - "ribbon_width_hint": "В блоках, читается вдоль ленты: p.progress — 0 у головы и 1 у хвоста.", + "ribbon_width_hint": "В блоках, читается вдоль ленты: p.progress, 0 у головы и 1 у хвоста.", "trail_lifetime": "Длина во времени", "trail_lifetime_hint": "Сколько секунд точка шлейфа остаётся позади.", "trail_min_distance": "Шаг", @@ -202,7 +202,7 @@ "kind_curve": "Кривая", "kind_expr": "Выражение", "expression_placeholder": "p.progress * 2", - "expression_hint": "p. — партикл, e. — эмиттер, n. — узел, d. — данные с сервера, math. — функции.", + "expression_hint": "p. - партикл, e. - эмиттер, n. - узел, d. - данные с сервера, math. - функции.", "curve_open": "Нажмите, чтобы открыть редактор кривой", "curve_title": "Кривая", "close": "Закрыть", @@ -243,13 +243,13 @@ "force_vortex": "Вихрь", "force_drag": "Торможение", "strength": "Сила", - "force_strength_hint": "Блоков в секунду за секунду; для торможения — доля скорости в секунду. Отрицательная тянет к центру.", + "force_strength_hint": "Блоков/сек. за секунду; для торможения - доля скорости в секунду. Отрицательная сила тянет к центру.", "force_center": "Центр", "force_center_hint": "Точка в координатах эмиттера.", - "force_radius_hint": "В блоках. 0 — действует везде.", + "force_radius_hint": "В блоках. 0 - действует везде.", "falloff": "Слабеет к краю", "frequency": "Детализация", - "frequency_hint": "Ячеек шума на блок: больше — мельче и хаотичнее.", + "frequency_hint": "Ячеек шума на блок: чем больше, тем мельче и хаотичнее.", "scroll_speed": "Дрейф", "scroll_speed_hint": "Как быстро движется само поле шума.", "octaves": "Слои", @@ -268,7 +268,7 @@ "uv_columns": "Столбцов", "uv_rows": "Строк", "uv_frames": "Кадров", - "uv_frames_hint": "Сколько ячеек сетки заняты кадрами, по строкам. 0 — все.", + "uv_frames_hint": "Сколько ячеек сетки заняты кадрами, по строкам. 0 - все.", "uv_over_lifetime": "За жизнь", "uv_fps": "По FPS", "uv_random_frame": "Случайный кадр", @@ -279,5 +279,17 @@ "property_enabled": "Включён", "property_position": "Позиция", "property_rotation": "Поворот", - "property_scale": "Масштаб" + "property_scale": "Масштаб", + "add_child": "Добавить внутрь", + "duplicate": "Дублировать", + "rename": "Переименовать", + "enable": "Включить", + "disable": "Выключить", + "move_up": "Выше", + "move_down": "Ниже", + "move_out": "Вынести из родителя", + "shader_placeholder": "встроенный", + "beam_target_hint": "Узел, в котором заканчивается луч. Пусто - луч заканчивается в точке ниже.", + "beam_target_none": "точка", + "uv_region": "Область UV" } diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/capture.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/capture.svg new file mode 100644 index 000000000..e2180249d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/capture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/close.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/close.svg new file mode 100644 index 000000000..6e1afe7d4 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/copy.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/copy.svg new file mode 100644 index 000000000..bf839b3bb --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/curves.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/curves.svg new file mode 100644 index 000000000..3a94b0bb0 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/curves.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/cut.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/cut.svg new file mode 100644 index 000000000..2cde61f50 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/cut.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg new file mode 100644 index 000000000..e1751264b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/dope_sheet.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/dope_sheet.svg new file mode 100644 index 000000000..6b535535b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/dope_sheet.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye.svg new file mode 100644 index 000000000..2e70c4cd9 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye_off.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye_off.svg new file mode 100644 index 000000000..42b70e704 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/eye_off.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/film.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/film.svg new file mode 100644 index 000000000..026809c24 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/film.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/follow.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/follow.svg new file mode 100644 index 000000000..1d536a39b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/follow.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/frame.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/frame.svg new file mode 100644 index 000000000..2dbc87635 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/frame.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/key_add.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/key_add.svg new file mode 100644 index 000000000..ac466af37 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/key_add.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/load.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/load.svg new file mode 100644 index 000000000..559a80df2 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/load.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock.svg new file mode 100644 index 000000000..02fbecf3a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock_open.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock_open.svg new file mode 100644 index 000000000..a11d2788e --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/lock_open.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/loop.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/loop.svg new file mode 100644 index 000000000..337a4319b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/loop.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/more.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/more.svg new file mode 100644 index 000000000..6c120ac1d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/more.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/next_key.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/next_key.svg new file mode 100644 index 000000000..b447cffd3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/next_key.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/paste.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/paste.svg new file mode 100644 index 000000000..3df726476 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/paste.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/pause.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/pause.svg new file mode 100644 index 000000000..08d825caa --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/pause.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/play.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/play.svg new file mode 100644 index 000000000..4ff0675aa --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/play.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/preset.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/preset.svg new file mode 100644 index 000000000..1fd44b3ba --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/preset.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/prev_key.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/prev_key.svg new file mode 100644 index 000000000..822ef8a1f --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/prev_key.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/save.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/save.svg new file mode 100644 index 000000000..246160f77 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/save.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/smooth.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/smooth.svg new file mode 100644 index 000000000..4281883c3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/smooth.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/snap.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/snap.svg new file mode 100644 index 000000000..f5d5ca4f0 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/snap.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_end.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_end.svg new file mode 100644 index 000000000..e708a744d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_end.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_start.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_start.svg new file mode 100644 index 000000000..95e377d7c --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/to_start.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_in.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_in.svg new file mode 100644 index 000000000..446ec4189 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_in.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_out.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_out.svg new file mode 100644 index 000000000..8b81c936d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/zoom_out.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/add.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/add.svg new file mode 100644 index 000000000..2199c68c1 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/add.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/beam.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/beam.svg new file mode 100644 index 000000000..d28be14f9 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/beam.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/collision.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/collision.svg new file mode 100644 index 000000000..c3324efbc --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/collision.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_channels.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_channels.svg new file mode 100644 index 000000000..5ae96b710 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_channels.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_gradient.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_gradient.svg new file mode 100644 index 000000000..0bbdfae9a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_gradient.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_solid.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_solid.svg new file mode 100644 index 000000000..401215ad5 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/color_solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/depth.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/depth.svg new file mode 100644 index 000000000..1b94a1592 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/depth.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/duplicate.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/duplicate.svg new file mode 100644 index 000000000..bf839b3bb --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/duplicate.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/emission.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/emission.svg new file mode 100644 index 000000000..f92db1cb6 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/emission.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/facing.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/facing.svg new file mode 100644 index 000000000..2e70c4cd9 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/facing.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/flipbook.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/flipbook.svg new file mode 100644 index 000000000..6d0fba4e2 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/flipbook.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/floor.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/floor.svg new file mode 100644 index 000000000..3aa40daeb --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/floor.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/force.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/force.svg new file mode 100644 index 000000000..3813e7659 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/force.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/handles.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/handles.svg new file mode 100644 index 000000000..7edf1b25a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/handles.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/info.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/info.svg new file mode 100644 index 000000000..7aa5741b0 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/info.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/key.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/key.svg new file mode 100644 index 000000000..9ff49e2b0 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/key.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/material.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/material.svg new file mode 100644 index 000000000..2301694b0 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/material.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/mesh.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/mesh.svg new file mode 100644 index 000000000..67e964cf2 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/mesh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/model.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/model.svg new file mode 100644 index 000000000..5d07e2c5d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/model.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/modules.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/modules.svg new file mode 100644 index 000000000..a29ddc64e --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/modules.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/more.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/more.svg new file mode 100644 index 000000000..82b3c1499 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/more.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/motion.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/motion.svg new file mode 100644 index 000000000..f87c70acd --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/motion.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_beam.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_beam.svg new file mode 100644 index 000000000..b6a928ccb --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_beam.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_camera_shake.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_camera_shake.svg new file mode 100644 index 000000000..4e96c6b22 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_camera_shake.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cube.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cube.svg new file mode 100644 index 000000000..799802b46 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cube.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cylinder.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cylinder.svg new file mode 100644 index 000000000..57c8485fc --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_cylinder.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_effect.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_effect.svg new file mode 100644 index 000000000..4be1fc6a2 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_effect.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_emitter.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_emitter.svg new file mode 100644 index 000000000..81861cf96 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_emitter.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_group.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_group.svg new file mode 100644 index 000000000..dd08e3b1c --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_group.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_model.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_model.svg new file mode 100644 index 000000000..c2a6e44dd --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_model.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_plane.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_plane.svg new file mode 100644 index 000000000..92779cc85 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_plane.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_post_effect.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_post_effect.svg new file mode 100644 index 000000000..9af3d4fb3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_post_effect.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sphere.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sphere.svg new file mode 100644 index 000000000..efa95b349 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sphere.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_trail.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_trail.svg new file mode 100644 index 000000000..daffc7b67 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_trail.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/noise.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/noise.svg new file mode 100644 index 000000000..32e9b80e3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/noise.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/particle.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/particle.svg new file mode 100644 index 000000000..0e37bbb97 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/particle.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/post.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/post.svg new file mode 100644 index 000000000..20bd042b0 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/post.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/remove.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/remove.svg new file mode 100644 index 000000000..e1751264b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/remove.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/rename.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/rename.svg new file mode 100644 index 000000000..38374041a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/rename.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/restart.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/restart.svg new file mode 100644 index 000000000..484d79769 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/restart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shader.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shader.svg new file mode 100644 index 000000000..dc73e878e --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shader.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shake.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shake.svg new file mode 100644 index 000000000..8206b2a0d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shake.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shape.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shape.svg new file mode 100644 index 000000000..c577fa9aa --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/shape.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/space.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/space.svg new file mode 100644 index 000000000..8a398cf11 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/space.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/spawn.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/spawn.svg new file mode 100644 index 000000000..d578d5b53 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/spawn.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/stats.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/stats.svg new file mode 100644 index 000000000..29343f536 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/stats.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/timeline.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/timeline.svg new file mode 100644 index 000000000..23d25354a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/timeline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/toggle.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/toggle.svg new file mode 100644 index 000000000..120b9f6a8 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/toggle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/trail.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/trail.svg new file mode 100644 index 000000000..66b9473e8 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/trail.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/transform.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/transform.svg new file mode 100644 index 000000000..b53e1c536 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/transform.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/uniforms.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/uniforms.svg new file mode 100644 index 000000000..21520986e --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/uniforms.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_const.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_const.svg new file mode 100644 index 000000000..e5eb9c0f3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_const.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_curve.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_curve.svg new file mode 100644 index 000000000..a92c6d346 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_curve.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_expr.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_expr.svg new file mode 100644 index 000000000..d920db051 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_expr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_range.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_range.svg new file mode 100644 index 000000000..a98a10b00 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/value_range.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/velocity.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/velocity.svg new file mode 100644 index 000000000..9e7701c19 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/velocity.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss index fde07acda..2962a6da8 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss @@ -26,22 +26,30 @@ padding: 3px; background: #00000000; border-radius: 3px; + tint: #aeb8ca; cursor: hand; - transition: background 250ms ease-out; + transition: background 110ms ease-out, tint 110ms ease-out; } .animator-icon-button:hover { - background: #FFFFFF14; + background: #2B2E35; + tint: #ffffff; } .animator-icon-button.active { - background: #D77F1C33; - border: 1px #D77F1C; - tint: #E9A44A; + background: #2E3544; + tint: #6E9BDC; } .animator-icon-button.active:hover { - background: #D77F1C4D; + background: #34405A; +} + +.viewport-toolbar { + padding: 2px; + gap: 1px; + background: rgba(20, 21, 24, 0.86); + border-radius: 5px; } .animator-pill { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss index 124df26b0..2a1f1d472 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss @@ -1119,3 +1119,10 @@ wrap: false; foreground: #d7deea; } + +.scene-hint { + size: 100% fit; + padding: 4px 6px; + foreground: #7A8698; + font-size: 8px; +} diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss index 67d2b1117..2e2ae901b 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss @@ -1,17 +1,20 @@ /* - * The look of every inspector in the engine: entity components, the animator, the rig, the cutscene - * timeline, the model and sound editors. Editors bring their own chrome and canvas; everything that - * shows a property lives here, so a field looks the same wherever it is opened. + * The look of every inspector in the engine: entity components, the animator, the rig, the effect + * editor, the timeline selection, the model and sound editors. Editors bring their own chrome and + * canvas; everything that shows a property lives here, so a field looks the same wherever it is opened. * - * Orange marks what the pointer acts on, blue marks structure. + * The palette is the IDE's (see docking.hss): #1C1E22 the panel, #212328 fields and headings, + * #2B2E35 hover, #6E9BDC the accent for whatever has focus or is picked. Text is set in the code font, + * which fits far more on a line than the vanilla one. */ .insp-panel { size: 100% 100%; - gap: 8px; - padding: 10px; + gap: 5px; + padding: 6px; background: #1C1E22; border-radius: 6px; + font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; scrollbar: 4px; scrollbar-margin: 2px; scrollbar-overlay: true; @@ -24,35 +27,36 @@ .insp-head { size: 100% fit; - gap: 6px; + gap: 5px; + padding: 1px 2px 3px 2px; align-items: start center; } .insp-icon { - size: 14px 14px; - tint: #8B93A5; + size: 12px 12px; + tint: #aeb8ca; } .insp-title { size: fit fit; grow: 1; foreground: #E4E9F4; - font-size: 11px; + font-size: 10px; wrap: false; text-overflow: dots; } .insp-subtitle { size: fit fit; - foreground: #8B93A5; - font-size: 9px; + foreground: #7A8698; + font-size: 8px; wrap: false; text-overflow: dots; } .insp-body { size: 100% fit; - gap: 5px; + gap: 3px; } .insp-empty-state { @@ -61,7 +65,7 @@ padding: 22px 12px 18px 12px; gap: 10px; align-items: center start; - border: 1px #353943; + border: 1px #2B2E35; border-dash: 5px 4px; border-radius: 8px; } @@ -71,7 +75,7 @@ size: 26px 28px; shape: path("M 5.3 12.34 C 5.48 12.44 5.69 12.5 5.9 12.5 C 6.11 12.5 6.32 12.44 6.5 12.34 L 10.7 9.94 C 10.88 9.83 11.03 9.68 11.14 9.5 C 11.24 9.32 11.3 9.11 11.3 8.9 L 11.3 4.1 C 11.3 3.89 11.24 3.68 11.14 3.5 C 11.03 3.32 10.88 3.17 10.7 3.06 L 6.5 0.66 C 6.32 0.56 6.11 0.5 5.9 0.5 C 5.69 0.5 5.48 0.56 5.3 0.66 L 1.1 3.06 C 0.92 3.17 0.77 3.32 0.66 3.5 C 0.56 3.68 0.5 3.89 0.5 4.1 L 0.5 8.9 C 0.5 9.11 0.56 9.32 0.66 9.5 C 0.77 9.68 0.92 9.83 1.1 9.94 Z M 5.9 12.5 L 5.9 6.5 M 0.67 3.5 L 5.9 6.5 L 11.13 3.5 M 3.2 1.86 L 8.6 4.95", 12 13); fill: none; - stroke: #C9D0DC; + stroke: #8f9bad; stroke-width: 1.2px; } @@ -86,20 +90,21 @@ .insp-section { size: 100% fit; - gap: 5px; + gap: 3px; } +/* A plain section: a title over a hairline. */ .insp-section-title { size: 100% fit; - foreground: #6E9FE0; - font-size: 10px; + foreground: #8f9bad; + font-size: 8px; wrap: false; text-overflow: dots; } .insp-section-rule { size: 100% 1px; - background: #31343D; + background: #2B2E35; } .insp-section-body { @@ -108,29 +113,72 @@ } .insp-section.boxed { - padding: 8px; - background: #24272E; + padding: 6px; + background: #212328; border-radius: 5px; - border: 1px #31343D; +} + +.insp-section-head { + size: 100% fit; + min-height: 18px; + gap: 5px; + padding: 2px 5px; + align-items: start center; + background: #212328; + border-radius: 4px; + hoverable: true; + clickable: true; + transition: background 110ms ease-out; +} + +.insp-section-head:hover { background: #2B2E35; } + +.insp-section-head[expanded="true"] { background: #25282E; } + +.insp-section-head .insp-section-title { + size: fit fit; + grow: 1; + foreground: #C4CBDA; + font-size: 9px; +} + +.insp-section-head:hover .insp-section-title { foreground: #ffffff; } + +.insp-section-icon { + size: 11px 11px; + tint: #8f9bad; + transition: tint 110ms ease-out; +} + +.insp-section-head:hover .insp-section-icon, +.insp-section-head[expanded="true"] .insp-section-icon { tint: #6E9BDC; } + +.insp-section-head .insp-arrow { + size: 8px 8px; + margin: 0px; +} + +.insp-section-fold .insp-section-body { + padding: 1px 1px 5px 4px; } /* ---- fields ---- */ .insp-field { size: 100% fit; - gap: 3px; + gap: 2px; } .insp-field-head { size: 100% fit; - gap: 6px; + gap: 5px; align-items: start center; } .insp-label { size: 100% fit; - foreground: #8B93A5; - font-size: 9px; + foreground: #8f9bad; + font-size: 8px; } .insp-help { @@ -145,13 +193,13 @@ .insp-hint { size: 100% fit; - foreground: #5F6677; + foreground: #6A7384; font-size: 8px; } .insp-readonly { size: 100% fit; - min-height: 16px; + min-height: 15px; gap: 6px; align-items: start center; } @@ -159,60 +207,79 @@ .insp-readonly-label { size: fit fit; grow: 1; - foreground: #8B93A5; - font-size: 9px; + foreground: #8f9bad; + font-size: 8px; } .insp-readonly-value { size: fit fit; foreground: #C4CBDA; - font-size: 9px; + font-size: 8px; wrap: false; text-overflow: dots; } .insp-input-row { size: 100% fit; - gap: 4px; + gap: 3px; align-items: start center; } .insp-input { size: 100% fit; - min-height: 22px; - padding: 5px 6px; - background: #16181C; - border-radius: 4px; - border: 1px #31343D; + min-height: 18px; + padding: 3px 5px; + background: #212328; + border-radius: 3px; + border: 1px #2B2E35; foreground: #C4CBDA; font-size: 9px; + caret-color: #f0f6ff; + selection-color: rgba(95, 140, 205, 0.46); + text-shadow: none; + transition: border 110ms ease-out; } -.insp-input:focus { border: 1px #D77F1C; } +.insp-input:hover { border: 1px #3A3E48; } + +.insp-input:focus { border: 1px #6E9BDC; } +/* A field inside a bar of its own, such as a search: no frame until the pointer is on it. */ .insp-input.flat { + min-height: 16px; + padding: 1px 4px; background: none; - border-width: 0px; + border: 1px #00000000; } +.insp-input.flat:hover { border: 1px #3A3E48; } + +.insp-input.flat:focus { border: 1px #6E9BDC; } + .insp-input.numeric { text-align: right; } /* ---- inline fields ---- */ .insp-inline-label { - foreground: #8B93A5; - font-size: 9px; + foreground: #8f9bad; + font-size: 8px; wrap: false; text-overflow: dots; } +.insp-inline-label.hinted { + hoverable: true; +} + +.insp-inline-label.hinted:hover { foreground: #C4CBDA; } + .insp-input.insp-inline-input { - min-height: 16px; - padding: 2px 4px; + min-height: 15px; + padding: 1px 4px; } .insp-icon-button.insp-inline-icon { - size: 13px 13px; + size: 11px 11px; } /* ---- effect editor ---- */ @@ -220,16 +287,17 @@ .vfx-popup { padding: 8px; gap: 6px; - background: #24272E; - border: 1px #5F6677; + background: #26282E; + border: 1px #3A3E48; border-radius: 5px; shadow: 1px 1px 3px 0px rgba(0, 0, 0, 0.42); } +/* A field the timeline writes: read-only, and tinted like the accent so it reads as "keyed". */ .vfx-driven { - background: #1B1A17; - border: 1px #5A4322; - foreground: #9A8F7C; + background: #1B2230; + border: 1px #34507A; + foreground: #9FB6D8; } .vfx-curve-dialog { @@ -247,14 +315,42 @@ .vfx-detail { size: 100% fit; gap: 3px; - padding: 4px 0px 4px 8px; - border-left: 1px #31343D; + padding: 3px 0px 3px 6px; + border-left: 1px #2B2E35; +} + +.vfx-node-head { + size: 100% fit; + gap: 4px; + align-items: start center; +} + +/* Whether a renderer draws on particles or once; which one depends on where it sits in the tree. */ +.vfx-placement { + size: 12px 12px; + tint: #6A7384; + hoverable: true; +} + +.vfx-placement.active { tint: #6E9BDC; } + +.vfx-material-preview { + size: 100% 96px; + border-radius: 4px; + background: #141518; + clip: true; +} + +.vfx-module-head { + size: 100% fit; + gap: 4px; + align-items: start center; } .insp-check-row { size: 100% fit; - min-height: 20px; - gap: 6px; + min-height: 16px; + gap: 5px; align-items: start center; hoverable: true; clickable: true; @@ -264,26 +360,28 @@ size: fit fit; grow: 1; foreground: #C4CBDA; - font-size: 9px; + font-size: 8px; } .insp-checkbox { - size: 13px 13px; + size: 11px 11px; + checkbox-active: #6E9BDC; + checkbox-mark: #ffffff; } .insp-slider { grow: 1; } .insp-slider-value { size: fit fit; - min-width: 44px; + min-width: 40px; foreground: #C4CBDA; - font-size: 9px; + font-size: 8px; wrap: false; } .insp-vector { size: 100% fit; - gap: 4px; + gap: 3px; } .insp-vector-cell { @@ -294,33 +392,33 @@ .insp-vector-label { size: fit fit; - foreground: #5F6677; + foreground: #6A7384; font-size: 8px; } .insp-nested { size: 100% fit; - gap: 4px; - padding: 5px; - background: rgba(42, 45, 53, 0.55); - border-radius: 5px; + gap: 3px; + padding: 4px; + background: #212328; + border-radius: 4px; } .insp-nested-head { size: 100% fit; - gap: 5px; + gap: 4px; align-items: start center; } .insp-nested-body { size: 100% fit; - gap: 6px; - padding: 0px 0px 0px 6px; + gap: 4px; + padding: 0px 0px 0px 5px; } .insp-list-item { size: 100% fit; - gap: 5px; + gap: 4px; align-items: start start; } @@ -332,117 +430,162 @@ } .insp-pill { - padding: 3px 8px; - background: #24272E; - border-radius: 9px; - border: 1px #31343D; + padding: 2px 6px; + background: #212328; + border-radius: 3px; + border: 1px #2B2E35; hoverable: true; clickable: true; - transition: background 140ms ease-out, border 140ms ease-out; + transition: background 110ms ease-out, border 110ms ease-out; } -.insp-pill:hover { background: #31343D; } +.insp-pill:hover { background: #2B2E35; } .insp-pill.active { - background: rgba(215, 127, 28, 0.22); - border: 1px #D77F1C; + background: rgba(110, 155, 220, 0.2); + border: 1px #6E9BDC; } .insp-pill-label { size: fit fit; - foreground: #C4CBDA; + foreground: #aeb8ca; font-size: 8px; wrap: false; } -.insp-pill.active .insp-pill-label { foreground: #E8912E; } +.insp-pill.active .insp-pill-label { foreground: #ffffff; } .insp-icon-button { - size: 16px 16px; - tint: #8B93A5; + size: 14px 14px; + tint: #8f9bad; hoverable: true; clickable: true; - transition: tint 140ms ease-out; + transition: tint 110ms ease-out; } -.insp-icon-button:hover { tint: #E8912E; } +.insp-icon-button:hover { tint: #ffffff; } -.insp-icon-button.active { tint: #E8912E; } +.insp-icon-button.active { tint: #6E9BDC; } + +.insp-icon-button.danger:hover { tint: #E07A7A; } .insp-pick-button { - size: 20px 20px; - padding: 2px; - background: #24272E; - border-radius: 4px; - border: 1px #31343D; + size: 18px 18px; + padding: 3px; + background: #212328; + border-radius: 3px; + border: 1px #2B2E35; } +.insp-pick-button:hover { background: #2B2E35; } + .insp-button { size: 100% fit; - min-height: 24px; - gap: 6px; - padding: 5px 10px; + min-height: 18px; + gap: 5px; + padding: 3px 8px; align-items: center center; - background: #31343D; - border-radius: 6px; - border: 1px #3B3F49; + background: #2B2E35; + border-radius: 4px; hoverable: true; clickable: true; - transition: background 140ms ease-out; + transition: background 110ms ease-out; } -.insp-button:hover { background: #3B3F49; } +.insp-button:hover { background: #353943; } -.insp-button.primary { - background: #D77F1C; - border: 1px #E8912E; -} +.insp-button.primary { background: #3E5F8F; } -.insp-button.primary:hover { background: #E8912E; } +.insp-button.primary:hover { background: #4A6FA5; } -.insp-button.danger { - background: rgba(194, 87, 87, 0.18); - border: 1px #C25757; -} +.insp-button.danger { background: rgba(194, 87, 87, 0.18); } .insp-button.danger:hover { background: rgba(194, 87, 87, 0.32); } .insp-button-icon { - size: 13px 13px; + size: 11px 11px; tint: #C4CBDA; } -.insp-button.primary .insp-button-icon { tint: #1E1F22; } +.insp-button.primary .insp-button-icon { tint: #ffffff; } .insp-button-label { size: fit fit; foreground: #C4CBDA; - font-size: 9px; + font-size: 8px; wrap: false; } -.insp-button.primary .insp-button-label { foreground: #1E1F22; } +.insp-button.primary .insp-button-label { foreground: #ffffff; } .insp-button.danger .insp-button-label { foreground: #E79797; } +/* ---- asset picker ---- */ + +.insp-dialog { + gap: 6px; + padding: 10px; + background: #26282E; + border-radius: 6px; + border: 1px #3A3E48; + shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.5); + font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; +} + +.insp-dialog-head { + size: 100% fit; + gap: 6px; + align-items: start center; +} + +.insp-dialog-title { + size: fit fit; + foreground: #E4E9F4; + font-size: 10px; + wrap: false; + text-overflow: dots; +} + +.insp-search { + size: 100% fit; + min-height: 20px; + gap: 5px; + padding: 1px 5px; + align-items: start center; + background: #212328; + border-radius: 4px; +} + +.insp-search-icon { + size: 11px 11px; + tint: #8f9bad; +} + +.insp-asset-tree { + width: 100%; + background: #212328; + border-radius: 4px; + padding: 3px; +} + /* ---- bone picker ---- */ .insp-bone { - padding: 4px 6px; + padding: 3px 5px; gap: 4px; - background: #16181C; - border-radius: 4px; - border: 1px #31343D; + background: #212328; + border-radius: 3px; + border: 1px #2B2E35; foreground: #C4CBDA; - transition: border 140ms ease-out; + transition: border 110ms ease-out; } -.insp-bone:hover { border: 1px #D77F1C; } +.insp-bone:hover { border: 1px #6E9BDC; } -.insp-bone.empty .insp-bone-label { foreground: #5F6677; } +.insp-bone.empty .insp-bone-label { foreground: #6A7384; } .insp-bone-label { - font-size: 9px; + font-size: 8px; } .insp-bone-popup { @@ -471,9 +614,3 @@ .insp-arrow[expanded="false"] { rotate: 0px 0px 0px; } .insp-arrow[expanded="true"] { rotate: 0px 0px 90px; } - -.insp-section-head { - size: 100% fit; - gap: 4px; - align-items: start center; -} diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss new file mode 100644 index 000000000..f63ad218d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss @@ -0,0 +1,192 @@ +/* + * The timeline window: its bar, the track list and the ruler. Lanes, keys and curves are drawn in + * code, from the same palette (TimelineColors), because where they sit is data. + * + * The palette is the IDE's (see docking.hss); text is set in the code font, which fits a long track + * name and a time readout into far less room than the vanilla one. + */ + +/* Rounded like every other panel; the gap at the bottom keeps the square lanes out of the corners. */ +.timeline-root { + padding: 0px 0px 5px 0px; + background: #1C1E22; + border-radius: 6px; + font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; +} + +/* ---- bar ---- */ + +.timeline-toolbar { + size: 100% 22px; + padding: 0px 4px; + gap: 1px; + align-items: start center; +} + +.timeline-button { + size: fit fit; + padding: 3px; + border-radius: 3px; + background: #00000000; + hoverable: true; + clickable: true; + transition: background 110ms ease-out; +} + +.timeline-button:hover { background: #2B2E35; } + +.timeline-button.active { background: #2E3544; } + +.timeline-button-icon { + size: 12px 12px; + tint: #aeb8ca; + transition: tint 110ms ease-out; +} + +.timeline-button:hover .timeline-button-icon { tint: #ffffff; } + +.timeline-button.active .timeline-button-icon { tint: #6E9BDC; } + +.timeline-separator { + size: 1px 12px; + margin: 0px 4px; + background: #2B2E35; +} + +.timeline-time { + size: 52px fit; + min-height: 16px; + padding: 1px 4px; + background: #212328; + border-radius: 3px; + border: 1px #212328; + foreground: #E4E9F4; + font-size: 9px; + text-align: right; + caret-color: #f0f6ff; + selection-color: rgba(95, 140, 205, 0.46); + text-shadow: none; + transition: border 110ms ease-out; +} + +.timeline-time:hover { border: 1px #3A3E48; } + +.timeline-time:focus { border: 1px #6E9BDC; } + +.timeline-duration { + margin: 0px 4px 0px 3px; + foreground: #7A8698; + font-size: 9px; + wrap: false; +} + + +/* The lanes and the track list scroll the way every IDE list does: a thin bar over the content. */ +.timeline-scroll { + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: rgba(155, 169, 194, 0.28); + scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; +} + +/* ---- track list ---- */ + +.timeline-corner { + background: #1C1E22; +} + +.timeline-corner-label { + margin: 0px 0px 0px 8px; + foreground: #7A8698; + font-size: 8px; +} + +.timeline-row { + background: #1C1E22; + hoverable: true; + clickable: true; + transition: background 110ms ease-out; +} + +.timeline-row:hover { background: #24262B; } + +.timeline-row.group { background: #212328; } + +.timeline-row.group:hover { background: #26292F; } + +.timeline-row.channel { background: #1E2024; } + +.timeline-row.focused { background: rgba(110, 155, 220, 0.16); } + +.timeline-row.locked { background: #18191C; } + +.timeline-row-label { + foreground: #C4CBDA; + font-size: 9px; + wrap: false; + text-overflow: dots; +} + +.timeline-row.group .timeline-row-label { foreground: #E4E9F4; } + +.timeline-row.channel .timeline-row-label { + foreground: #8f9bad; + font-size: 8px; +} + +.timeline-row.muted .timeline-row-label { foreground: #6A7384; } + +.timeline-row-toggle { + size: fit fit; + padding: 2px; + border-radius: 3px; + background: #00000000; + hoverable: true; + clickable: true; + transition: background 110ms ease-out; +} + +.timeline-row-toggle:hover { background: #2B2E35; } + +.timeline-row-icon { + size: 10px 10px; + tint: #6A7384; + transition: tint 110ms ease-out; +} + +.timeline-row-toggle:hover .timeline-row-icon { tint: #ffffff; } + +.timeline-row-toggle.on .timeline-row-icon { tint: #aeb8ca; } + +.timeline-row-toggle.warn .timeline-row-icon { tint: #6E9BDC; } + +/* Taking a track off the list is rare; the cross only shows on the row the pointer is on. */ +.timeline-row-toggle.hide-track { + opacity: 0; + transition: opacity 110ms ease-out, background 110ms ease-out; +} + +.timeline-row:hover .timeline-row-toggle.hide-track { opacity: 1; } + +.timeline-splitter { + background: #141518; + hoverable: true; + transition: background 110ms ease-out; +} + +.timeline-splitter:hover { background: #6E9BDC; } + +/* ---- ruler ---- */ + +.timeline-ruler { + background: #1C1E22; +} + +.timeline-ruler-label { + foreground: #7A8698; + font-size: 8px; +} diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss index d631ebcd3..1fe813e99 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss @@ -101,17 +101,6 @@ background: rgba(110, 155, 220, 0.18); } -.timeline-scroll { - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; -} - .dropdown-item.disabled { opacity: 0.42; } diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx index b249000c0..df322f99d 100644 --- a/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx +++ b/runtime/src/main/resources/assets/hollowengine/vfx/example.vfx @@ -17,6 +17,65 @@ "id": "flame-plane", "material": { "blend": "ADDITIVE" + }, + "particle": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.13 + }, + { + "time": 0.25, + "value": 0.22 + }, + { + "time": 1.0 + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.78, + "b": 0.3 + } + }, + { + "position": 0.45, + "color": { + "g": 0.43, + "b": 0.035, + "a": 0.85 + } + }, + { + "position": 1.0, + "color": { + "r": 0.35, + "g": 0.08, + "b": 0.02, + "a": 0.0 + } + } + ] + } + } } } ], @@ -51,65 +110,6 @@ "to": 1.6 } }, - "appearance": { - "size": { - "x": { - "type": "curve", - "curve": { - "keys": [ - { - "value": 0.13 - }, - { - "time": 0.25, - "value": 0.22 - }, - { - "time": 1.0 - } - ] - } - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "g": 0.78, - "b": 0.3 - } - }, - { - "position": 0.45, - "color": { - "g": 0.43, - "b": 0.035, - "a": 0.85 - } - }, - { - "position": 1.0, - "color": { - "r": 0.35, - "g": 0.08, - "b": 0.02, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", @@ -165,6 +165,62 @@ "id": "smoke-plane", "material": { "lighting": "WORLD" + }, + "particle": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.18 + }, + { + "time": 1.0, + "value": 0.56 + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360 + p.age * 20" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.32, + "g": 0.3, + "b": 0.29, + "a": 0.55 + } + }, + { + "position": 1.0, + "color": { + "r": 0.32, + "g": 0.3, + "b": 0.29, + "a": 0.0 + } + } + ] + } + } } } ], @@ -195,62 +251,6 @@ "to": 0.5 } }, - "appearance": { - "size": { - "x": { - "type": "curve", - "curve": { - "keys": [ - { - "value": 0.18 - }, - { - "time": 1.0, - "value": 0.56 - } - ] - } - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "rotation": { - "z": { - "type": "expr", - "source": "p.random * 360 + p.age * 20" - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "r": 0.32, - "g": 0.3, - "b": 0.29, - "a": 0.55 - } - }, - { - "position": 1.0, - "color": { - "r": 0.32, - "g": 0.3, - "b": 0.29, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", @@ -280,4 +280,4 @@ "timeline": { "duration": 4.0 } -} \ No newline at end of file +} diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx index f4c5285b4..56357a69f 100644 --- a/runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx +++ b/runtime/src/main/resources/assets/hollowengine/vfx/explosion.vfx @@ -27,6 +27,70 @@ "id": "fire-plane", "material": { "blend": "ADDITIVE" + }, + "particle": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.4, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "value": 1.1, + "interpolation": "LINEAR" + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.95, + "b": 0.7 + } + }, + { + "position": 0.3, + "color": { + "g": 0.45, + "b": 0.1, + "a": 0.9 + } + }, + { + "position": 1.0, + "color": { + "r": 0.3, + "g": 0.05, + "b": 0.02, + "a": 0.0 + } + } + ] + } + } } } ], @@ -57,70 +121,6 @@ "to": 3.5 } }, - "appearance": { - "size": { - "x": { - "type": "curve", - "curve": { - "keys": [ - { - "value": 0.4, - "interpolation": "LINEAR" - }, - { - "time": 1.0, - "value": 1.1, - "interpolation": "LINEAR" - } - ] - } - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "rotation": { - "z": { - "type": "expr", - "source": "p.random * 360" - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "g": 0.95, - "b": 0.7 - } - }, - { - "position": 0.3, - "color": { - "g": 0.45, - "b": 0.1, - "a": 0.9 - } - }, - { - "position": 1.0, - "color": { - "r": 0.3, - "g": 0.05, - "b": 0.02, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", @@ -150,7 +150,44 @@ "material": { "blend": "ADDITIVE" }, - "facing": "VELOCITY" + "facing": "VELOCITY", + "particle": { + "size": { + "x": { + "type": "const", + "value": 0.06 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.9, + "b": 0.5 + } + }, + { + "position": 1.0, + "color": { + "g": 0.4, + "b": 0.1, + "a": 0.0 + } + } + ] + } + } + } }, { "type": "hollowengine:vfx/trail", @@ -193,7 +230,30 @@ } }, "lifetime": 0.25, - "maxPoints": 12 + "maxPoints": 12, + "particle": { + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "g": 0.9, + "b": 0.5 + } + }, + { + "position": 1.0, + "color": { + "g": 0.4, + "b": 0.1, + "a": 0.0 + } + } + ] + } + } + } } ], "emission": { @@ -224,43 +284,6 @@ "to": 10.0 } }, - "appearance": { - "size": { - "x": { - "type": "const", - "value": 0.06 - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "g": 0.9, - "b": 0.5 - } - }, - { - "position": 1.0, - "color": { - "g": 0.4, - "b": 0.1, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", @@ -313,6 +336,73 @@ "id": "smoke-plane", "material": { "lighting": "WORLD" + }, + "particle": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.6, + "interpolation": "LINEAR" + }, + { + "time": 1.0, + "value": 1.8, + "interpolation": "LINEAR" + } + ] + } + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.25, + "g": 0.23, + "b": 0.22, + "a": 0.0 + } + }, + { + "position": 0.1, + "color": { + "r": 0.25, + "g": 0.23, + "b": 0.22, + "a": 0.7 + } + }, + { + "position": 1.0, + "color": { + "r": 0.3, + "g": 0.3, + "b": 0.3, + "a": 0.0 + } + } + ] + } + } } } ], @@ -343,73 +433,6 @@ "from": 0.3 } }, - "appearance": { - "size": { - "x": { - "type": "curve", - "curve": { - "keys": [ - { - "value": 0.6, - "interpolation": "LINEAR" - }, - { - "time": 1.0, - "value": 1.8, - "interpolation": "LINEAR" - } - ] - } - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "rotation": { - "z": { - "type": "expr", - "source": "p.random * 360" - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "r": 0.25, - "g": 0.23, - "b": 0.22, - "a": 0.0 - } - }, - { - "position": 0.1, - "color": { - "r": 0.25, - "g": 0.23, - "b": 0.22, - "a": 0.7 - } - }, - { - "position": 1.0, - "color": { - "r": 0.3, - "g": 0.3, - "b": 0.3, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx index 261e050a3..7367e346f 100644 --- a/runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx +++ b/runtime/src/main/resources/assets/hollowengine/vfx/lightning.vfx @@ -19,7 +19,63 @@ "children": [ { "type": "hollowengine:vfx/plane", - "id": "cloud-plane" + "id": "cloud-plane", + "particle": { + "size": { + "x": { + "type": "range", + "from": 0.8, + "to": 1.4 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "rotation": { + "z": { + "type": "expr", + "source": "p.random * 360" + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.15, + "g": 0.15, + "b": 0.2, + "a": 0.0 + } + }, + { + "position": 0.3, + "color": { + "r": 0.15, + "g": 0.15, + "b": 0.2, + "a": 0.6 + } + }, + { + "position": 1.0, + "color": { + "r": 0.15, + "g": 0.15, + "b": 0.2, + "a": 0.0 + } + } + ] + } + } + } } ], "emission": { @@ -48,62 +104,6 @@ "from": 0.05, "to": 0.2 } - }, - "appearance": { - "size": { - "x": { - "type": "range", - "from": 0.8, - "to": 1.4 - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "rotation": { - "z": { - "type": "expr", - "source": "p.random * 360" - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "r": 0.15, - "g": 0.15, - "b": 0.2, - "a": 0.0 - } - }, - { - "position": 0.3, - "color": { - "r": 0.15, - "g": 0.15, - "b": 0.2, - "a": 0.6 - } - }, - { - "position": 1.0, - "color": { - "r": 0.15, - "g": 0.15, - "b": 0.2, - "a": 0.0 - } - } - ] - } - } } } ] @@ -197,7 +197,44 @@ "material": { "blend": "ADDITIVE" }, - "facing": "VELOCITY" + "facing": "VELOCITY", + "particle": { + "size": { + "x": { + "type": "const", + "value": 0.05 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.75, + "g": 0.85 + } + }, + { + "position": 1.0, + "color": { + "r": 0.75, + "g": 0.85, + "a": 0.0 + } + } + ] + } + } + } }, { "type": "hollowengine:vfx/trail", @@ -218,7 +255,30 @@ } }, "lifetime": 0.2, - "maxPoints": 10 + "maxPoints": 10, + "particle": { + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.75, + "g": 0.85 + } + }, + { + "position": 1.0, + "color": { + "r": 0.75, + "g": 0.85, + "a": 0.0 + } + } + ] + } + } + } } ], "emission": { @@ -249,43 +309,6 @@ "to": 5.0 } }, - "appearance": { - "size": { - "x": { - "type": "const", - "value": 0.05 - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "r": 0.75, - "g": 0.85 - } - }, - { - "position": 1.0, - "color": { - "r": 0.75, - "g": 0.85, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx index 06299bb78..0e8980df5 100644 --- a/runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx +++ b/runtime/src/main/resources/assets/hollowengine/vfx/magic_shield.vfx @@ -491,6 +491,51 @@ "id": "motes-plane", "material": { "blend": "ADDITIVE" + }, + "particle": { + "size": { + "x": { + "type": "const", + "value": 0.08 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + }, + { + "position": 0.2, + "color": { + "r": 0.4, + "g": 0.75 + } + }, + { + "position": 1.0, + "color": { + "r": 0.4, + "g": 0.75, + "a": 0.0 + } + } + ] + } + } } } ], @@ -526,51 +571,6 @@ "to": 0.6 } }, - "appearance": { - "size": { - "x": { - "type": "const", - "value": 0.08 - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "r": 0.4, - "g": 0.75, - "a": 0.0 - } - }, - { - "position": 0.2, - "color": { - "r": 0.4, - "g": 0.75 - } - }, - { - "position": 1.0, - "color": { - "r": 0.4, - "g": 0.75, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx index 9c582b2f3..e1732435e 100644 --- a/runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx +++ b/runtime/src/main/resources/assets/hollowengine/vfx/soul.vfx @@ -21,6 +21,52 @@ "id": "soul-plane", "material": { "blend": "ADDITIVE" + }, + "particle": { + "size": { + "x": { + "type": "const", + "value": 0.07 + }, + "y": { + "type": "const", + "value": 1.0 + }, + "z": { + "type": "const", + "value": 1.0 + } + }, + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.0 + } + }, + { + "position": 0.2, + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.9 + } + }, + { + "position": 1.0, + "color": { + "r": 0.3, + "g": 0.5, + "a": 0.0 + } + } + ] + } + } } }, { @@ -64,7 +110,39 @@ } }, "lifetime": 0.4, - "maxPoints": 16 + "maxPoints": 16, + "particle": { + "color": { + "type": "gradient", + "gradient": { + "stops": [ + { + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.0 + } + }, + { + "position": 0.2, + "color": { + "r": 0.6, + "g": 0.9, + "a": 0.9 + } + }, + { + "position": 1.0, + "color": { + "r": 0.3, + "g": 0.5, + "a": 0.0 + } + } + ] + } + } + } } ], "emission": { @@ -90,52 +168,6 @@ "to": 0.3 } }, - "appearance": { - "size": { - "x": { - "type": "const", - "value": 0.07 - }, - "y": { - "type": "const", - "value": 1.0 - }, - "z": { - "type": "const", - "value": 1.0 - } - }, - "color": { - "type": "gradient", - "gradient": { - "stops": [ - { - "color": { - "r": 0.6, - "g": 0.9, - "a": 0.0 - } - }, - { - "position": 0.2, - "color": { - "r": 0.6, - "g": 0.9, - "a": 0.9 - } - }, - { - "position": 1.0, - "color": { - "r": 0.3, - "g": 0.5, - "a": 0.0 - } - } - ] - } - } - }, "motion": { "gravity": { "type": "const", diff --git a/runtime/src/test/kotlin/VfxEffectTreeTests.kt b/runtime/src/test/kotlin/VfxEffectTreeTests.kt new file mode 100644 index 000000000..eb919264d --- /dev/null +++ b/runtime/src/test/kotlin/VfxEffectTreeTests.kt @@ -0,0 +1,67 @@ +import org.junit.jupiter.api.Test +import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxGroupSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxKey +import ru.hollowhorizon.hollowengine.common.vfx.VfxPlaneSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxTimelineSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxTrack +import ru.hollowhorizon.hollowengine.common.vfx.VfxTrackCurve +import kotlin.test.assertEquals +import kotlin.test.assertNotEquals +import kotlin.test.assertNotNull +import kotlin.test.assertSame + +class VfxEffectTreeTests { + private val effect = VfxEffect( + nodes = listOf( + VfxGroupSpec( + id = "group-a", + children = listOf( + VfxEmitterSpec(id = "emitter-a", children = listOf(VfxPlaneSpec(id = "plane-a"))), + ), + ), + VfxPlaneSpec(id = "plane-b"), + ), + timeline = VfxTimelineSpec( + tracks = listOf( + VfxTrack("plane-a", VfxProperty.SCALE, listOf(VfxTrackCurve(keys = listOf(VfxKey(0f, 1f))))), + ), + ), + ) + + @Test + fun `a node cannot be moved under itself or its own children`() { + assertSame(effect, effect.withMoved("group-a", "emitter-a")) + assertSame(effect, effect.withMoved("group-a", "group-a")) + } + + @Test + fun `a moved node leaves its old parent and lands at the index asked for`() { + val moved = effect.withMoved("plane-b", "emitter-a", 0) + assertEquals(listOf("group-a"), moved.nodes.map { it.id }) + assertEquals(listOf("plane-b", "plane-a"), moved.node("emitter-a")?.children?.map { it.id }) + } + + @Test + fun `shifting stays among the siblings`() { + val up = effect.withShifted("plane-b", -1) + assertEquals(listOf("plane-b", "group-a"), up.nodes.map { it.id }) + assertSame(up, up.withShifted("plane-b", -1)) + } + + @Test + fun `a duplicate gets fresh ids all the way down and takes the tracks along`() { + val (copied, id) = assertNotNull(effect.withDuplicate("emitter-a")) + val children = copied.node("group-a")?.children.orEmpty() + assertEquals(2, children.size) + assertEquals("emitter-a", children[0].id) + assertEquals(id, children[1].id) + + val plane = children[1].children.single() + assertNotEquals("plane-a", plane.id) + assertEquals(setOf("plane-a", plane.id), copied.timeline.tracks.map { it.node }.toSet()) + assertEquals(copied.walk().size, copied.walk().map { it.id }.toSet().size) + } +} diff --git a/runtime/src/test/kotlin/VfxFormatTests.kt b/runtime/src/test/kotlin/VfxFormatTests.kt index 5ee6c8fc6..428b50ffd 100644 --- a/runtime/src/test/kotlin/VfxFormatTests.kt +++ b/runtime/src/test/kotlin/VfxFormatTests.kt @@ -166,21 +166,6 @@ class VfxFormatTests { lifetime = VfxValue.Range(0.4f, 0.9f), speed = VfxValue.Range(0.5f, 1.2f), ), - appearance = VfxAppearance( - size = VfxVec3Value( - VfxValue.OverTime(VfxCurve(listOf(VfxKey(0f, 0.2f), VfxKey(1f, 0f))), input = VfxCurveInput.SPEED), - VfxValue.ONE, - VfxValue.ONE, - ), - color = VfxColorValue.Gradient( - VfxGradient( - listOf( - VfxGradientStop(0f, VfxRgba(1f, 1f, 1f, 1f)), - VfxGradientStop(1f, VfxRgba(1f, 0.2f, 0f, 0f)), - ) - ) - ), - ), modules = listOf( VfxForceSpec(id = "swirl", kind = VfxForceKind.VORTEX, strength = VfxValue.Expr("p.progress * 2")), VfxForceSpec(id = "wind", direction = Vec3f(1f, 0f, 0f)), @@ -190,6 +175,21 @@ class VfxFormatTests { VfxPlaneSpec( id = "flame-plane", material = VfxMaterialSpec(blend = VfxBlend.ADDITIVE, uv = VfxUvRect(0f, 0f, 0.5f, 0.5f)), + particle = VfxAppearance( + size = VfxVec3Value( + VfxValue.OverTime(VfxCurve(listOf(VfxKey(0f, 0.2f), VfxKey(1f, 0f))), input = VfxCurveInput.SPEED), + VfxValue.ONE, + VfxValue.ONE, + ), + color = VfxColorValue.Gradient( + VfxGradient( + listOf( + VfxGradientStop(0f, VfxRgba(1f, 1f, 1f, 1f)), + VfxGradientStop(1f, VfxRgba(1f, 0.2f, 0f, 0f)), + ) + ) + ), + ), ), VfxTrailSpec(id = "flame-trail", maxPoints = 12), ), From 2619264115fdd55892aa687c6e2fd47b992cd801 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 12:34:08 +0300 Subject: [PATCH 06/25] rewrite ui fonts & tabs --- .../client/ui/docking/DockModel.kt | 6 -- .../client/ui/docking/DockingCompose.kt | 35 ---------- .../client/ui/ide/HollowIdeToolWindows.kt | 4 -- .../client/ui/ide/panels/GameViewportDock.kt | 4 +- .../hollowengine/ui/styles/asset-manager.hss | 16 ++--- .../assets/hollowengine/ui/styles/docking.hss | 4 -- .../assets/hollowengine/ui/styles/ide.hss | 64 ++++++++++++++----- 7 files changed, 58 insertions(+), 75 deletions(-) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt index 6860f20fb..4c09b981e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockModel.kt @@ -11,7 +11,6 @@ data class DockItem( val minWidth: Float = 48f, val minHeight: Float = 32f, val dirty: Boolean = false, - val singleTabPresentation: DockSingleTabPresentation = DockSingleTabPresentation.BAR, val pinnable: Boolean = false, val titleInToolbar: Boolean = false, ) @@ -61,11 +60,6 @@ data class DockPinnedItem( const val DefaultPinnedWidth = 260f const val DefaultBottomHeight = 220f -enum class DockSingleTabPresentation { - BAR, - OVERLAY, -} - sealed interface DockNode { val id: String diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt index 8f7e3bf58..a4dc3e8f6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/docking/DockingCompose.kt @@ -178,19 +178,6 @@ private fun DockStackView( content: DockItemContent, ) { val selected = stack.selectedItem ?: return - if (stack.items.size == 1 && selected.singleTabPresentation == DockSingleTabPresentation.OVERLAY) { - Box( - id = stack.id, - mode = UiBoxMode.STACK, - tags = listOf(DockTags.Stack), - modifier = Modifier.size(100.percent, 100.percent), - ) { - DockSelectedContent(stack.id, selected, content, Modifier.size(100.percent, 100.percent)) - DockSingleTabBadge(stack, state, tabContent, tabBarActions) - } - return - } - Column( id = stack.id, tags = listOf(DockTags.Stack), @@ -234,27 +221,6 @@ internal fun DockContentBody(content: @Composable () -> Unit) { } } -@Composable -private fun DockSingleTabBadge( - stack: DockNode.Stack, - state: DockingState, - tabContent: DockHeaderContent, - tabBarActions: DockTabBarActions, -) { - val item = stack.selectedItem ?: return - Row( - id = "${stack.id}-tab-badge", - tags = listOf(DockTags.TabBar, DockTags.CompactTabBar), - modifier = Modifier.position(DockTabMargin.px, DockTabMargin.px) - .size(UiLength.Auto, DockTabHeight.px) - .alignItems(vertical = UiAlign.START) - .layer(20).clip(), - ) { - DockTab(stack.id, 0, item, true, state, tabContent, allowUndock = true) { 0f } - tabBarActions(item) - } -} - @Composable private fun FloatingDockWindowView( window: FloatingDockWindow, @@ -661,7 +627,6 @@ object DockTags { const val Splitter = "dock-splitter" const val Stack = "dock-stack" const val TabBar = "dock-tab-bar" - const val CompactTabBar = "compact" const val Tab = "dock-tab" const val TabIcon = "dock-tab-icon" const val TabLabel = "dock-tab-label" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt index 4264fe3c8..717205ea7 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeToolWindows.kt @@ -2,7 +2,6 @@ package ru.hollowhorizon.hollowengine.client.ui.ide import ru.hollowhorizon.hollowengine.client.ui.docking.DockItem import ru.hollowhorizon.hollowengine.client.ui.docking.DockPlacement -import ru.hollowhorizon.hollowengine.client.ui.docking.DockSingleTabPresentation import ru.hollowhorizon.hollowengine.client.ui.docking.DockTarget import ru.hollowhorizon.hollowengine.client.ui.docking.DockingState import ru.hollowhorizon.hollowengine.client.ui.ide.asset.AssetManagerLang @@ -28,7 +27,6 @@ internal class HollowIdeToolWindow( val minWidth: Float = 48f, val minHeight: Float = 32f, val closable: Boolean = true, - val singleTabPresentation: DockSingleTabPresentation = DockSingleTabPresentation.BAR, val titleInToolbar: Boolean = false, ) { val title: String get() = titleKey.lang @@ -40,7 +38,6 @@ internal class HollowIdeToolWindow( closable = closable, minWidth = minWidth, minHeight = minHeight, - singleTabPresentation = singleTabPresentation, pinnable = true, titleInToolbar = titleInToolbar, ) @@ -109,7 +106,6 @@ internal object HollowIdeToolWindows { anchors = listOf(ToolWindowAnchor.TIMELINE, ToolWindowAnchor.EDITORS, ToolWindowAnchor.PROJECT), minWidth = 160f, minHeight = 90f, - singleTabPresentation = DockSingleTabPresentation.OVERLAY, ) val UiProfiler = HollowIdeToolWindow( id = UiProfilerId, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt index 0cfc7caa7..862e05d57 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt @@ -6,7 +6,6 @@ import net.minecraft.client.Minecraft import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.GameViewportNodeId import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeGameViewport -import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.ui.TimelineColors import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.utils.lang @@ -30,8 +29,7 @@ fun GameViewportDock(active: Boolean = false, attached: Boolean = true) { Box( id = GameViewportNodeId, tags = listOfNotNull("game-viewport", "active".takeIf { active && attached }), - modifier = Modifier.size(100.percent, 100.percent).input(hoverable = true, clickable = true) - .background(TimelineColors.Background).onPlaced { if (attached) HollowIdeGameViewport.report(it) } + modifier = Modifier.input(hoverable = true, clickable = true).onPlaced { if (attached) HollowIdeGameViewport.report(it) } .drawBehind(key = "game-viewport-$attached") { if (!attached) return@drawBehind val rect = HollowIdeGameViewport.imageRect(UiRect(0f, 0f, size.width, size.height)) ?: return@drawBehind diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss index 5664b1daf..3573833ae 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss @@ -41,7 +41,7 @@ .asset-tab-label { height: fit; - font-size: 7px; + font-size: 8px; wrap: false; } @@ -71,14 +71,14 @@ .asset-breadcrumb { height: fit; foreground: #d7deea; - font-size: 8px; + font-size: 9px; text-overflow: dots; } .asset-count { width: fit; foreground: #687588; - font-size: 7px; + font-size: 8px; wrap: false; } @@ -86,7 +86,7 @@ min-width: 78px; min-height: 16px; padding: 1px 4px; - font-size: 7px; + font-size: 8px; } .asset-refresh { @@ -172,7 +172,7 @@ .asset-tile-name { align: center start; foreground: #d7deea; - font-size: 7px; + font-size: 8px; wrap: false; text-overflow: dots; } @@ -180,7 +180,7 @@ .asset-pack-name { align: center start; foreground: #687588; - font-size: 6px; + font-size: 7px; text-overflow: dots; } @@ -192,7 +192,7 @@ max-width: 280px; height: fit; foreground: #7f8a9d; - font-size: 8px; + font-size: 9px; align: center center; } @@ -204,7 +204,7 @@ .asset-filter-input { min-height: 17px; padding: 1px 2px; - font-size: 8px; + font-size: 9px; caret-color: #f0f6ff; selection-color: rgba(95, 140, 205, 0.46); } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss index ae7f0d0c0..cb39bfb69 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss @@ -49,10 +49,6 @@ scrollbar-thumb-radius: 1px; } -.dock-tab-bar.compact { - background: none; -} - .dock-tab:hover { background: #1C1E22; foreground: #d7deea; diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss index 2a1f1d472..b95e53d17 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss @@ -1,3 +1,29 @@ +/* + * The whole IDE is set in the code font, like its editor and its log: one face for every panel, tab, + * menu and tooltip, narrower than the vanilla one and crisp at any size. Popups are not under + * #ide-root, so they are named here too; this sheet is only loaded by the IDE, so the game's own + * screens keep their font. + * + * Sizes: 9px for text, 8px for what is secondary, 11px for the title of a dialog. + */ +#ide-root, +.dropdown-popup, +.ui-tooltip, +.vfx-popup, +#cutscene-dialog { + font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; + font-size: 9px; +} + +.dropdown-popup .dropdown-item-shortcut { + font-size: 8px; +} + +/* The vanilla drop shadow suits the pixel font only; under the code font it reads as a blur. */ +.text-field { + text-shadow: none; +} + #ide-root { background: none; } @@ -86,6 +112,14 @@ background: #212328; } +/* The game sits in the editor area like any editor: a rounded panel inside the tab bar's stack. */ +.game-viewport { + size: fill fill; + margin: 2px; + border-radius: 6px; + background: #141518; +} + .game-viewport-hint { foreground: #8d96a8; text-align: center; @@ -197,13 +231,13 @@ .ide-shortcuts-title { margin-bottom: 4px; - font-size: 14px; + font-size: 11px; foreground: #F0F3F8; } .ide-shortcuts-group { margin-top: 6px; - font-size: 10px; + font-size: 9px; foreground: #8f9bad; } @@ -223,7 +257,7 @@ .ide-shortcuts-keys { wrap: false; padding: 1px 5px; - font-size: 10px; + font-size: 8px; foreground: #F0F3F8; background: #3A3F49; border: 1px #4b5362; @@ -263,7 +297,7 @@ width: fit; height: fit; white-space: pre; - font-size: 10px; + font-size: 9px; foreground: #d7deea; } @@ -496,7 +530,7 @@ .project-dialog-title { foreground: #F0F3F8; - font-size: 14px; + font-size: 11px; } .project-dialog-field { @@ -518,7 +552,7 @@ .project-dialog-label { foreground: #8f9bad; - font-size: 10px; + font-size: 8px; } .project-dialog-input { @@ -560,25 +594,25 @@ .project-dialog-text { foreground: #D7DEEA; - font-size: 11px; + font-size: 9px; line-spacing: 2px; } .project-dialog-hint, .project-dialog-progress { foreground: #8f9bad; - font-size: 10px; + font-size: 8px; line-spacing: 2px; } .project-dialog-warning { foreground: #ffc266; - font-size: 11px; + font-size: 9px; line-spacing: 2px; } .project-dialog-error { foreground: #ff8787; - font-size: 11px; + font-size: 9px; line-spacing: 2px; } @@ -588,7 +622,7 @@ .project-dialog-path { foreground: #aeb8ca; - font-size: 10px; + font-size: 8px; } .project-dialog-actions { @@ -634,12 +668,12 @@ .ide-hide-toolbar-dialog-title { foreground: #F0F3F8; - font-size: 14px; + font-size: 11px; } .ide-hide-toolbar-dialog-message { foreground: #B9C1CF; - font-size: 11px; + font-size: 9px; line-spacing: 2px; } @@ -797,7 +831,7 @@ .ide-find-toggle-label { wrap: false; - font-size: 10px; + font-size: 8px; } .ide-find-status { @@ -948,7 +982,7 @@ width: 0px; grow: 1; wrap: false; - font-size: 10px; + font-size: 8px; foreground: #687588; } From 31c57662400ced4b00e25c23caf73cb1fe979dd2 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 13:36:54 +0300 Subject: [PATCH 07/25] Add reusable expression editors and IDE icons This change introduces a shared ExpressionEditing helper for animator and VFX expression fields, unifying token highlighting, completions, and diagnostics under one API. It also replaces hardcoded IDE menu/file icons with a centralized IconHelper-based mapping and adds the new action/file SVG assets used across the project tree and context menu. The notification stack style was updated to match the IDE's monospace look. --- gradle.properties | 2 +- .../ui/ide/HollowIdeProjectContextMenu.kt | 45 ++++---- .../client/ui/ide/HollowIdeScriptTemplates.kt | 22 ++-- .../ide/files/animator/AnimatorEditorModel.kt | 88 +-------------- .../ui/ide/files/animator/AnimatorWidgets.kt | 6 +- .../client/ui/ide/files/vfx/VfxFields.kt | 11 +- .../client/ui/widgets/ExpressionEditing.kt | 103 ++++++++++++++++++ .../hollowengine/client/utils/IconHelper.kt | 48 +++++--- .../textures/gui/icons/actions/copy.svg | 4 + .../textures/gui/icons/actions/cut.svg | 6 + .../textures/gui/icons/actions/delete.svg | 7 ++ .../textures/gui/icons/actions/new_file.svg | 6 + .../textures/gui/icons/actions/new_folder.svg | 5 + .../textures/gui/icons/actions/paste.svg | 4 + .../textures/gui/icons/actions/rename.svg | 4 + .../textures/gui/icons/actions/reveal.svg | 5 + .../textures/gui/icons/files/animator.svg | 6 + .../textures/gui/icons/files/archive.svg | 6 + .../textures/gui/icons/files/blocks.svg | 5 + .../textures/gui/icons/files/data.svg | 4 + .../textures/gui/icons/files/effect.svg | 4 + .../textures/gui/icons/files/file.svg | 4 + .../textures/gui/icons/files/image.svg | 5 + .../textures/gui/icons/files/model.svg | 6 + .../textures/gui/icons/files/rig.svg | 3 + .../textures/gui/icons/files/script.svg | 3 + .../textures/gui/icons/files/script_mixin.svg | 3 + .../textures/gui/icons/files/script_node.svg | 3 + .../gui/icons/files/script_reload.svg | 3 + .../gui/icons/files/script_startup.svg | 3 + .../textures/gui/icons/files/script_ui.svg | 3 + .../textures/gui/icons/files/sound.svg | 5 + .../textures/gui/icons/files/story.svg | 5 + .../textures/gui/icons/files/style.svg | 6 + .../textures/gui/icons/files/text.svg | 6 + .../textures/gui/icons/files/video.svg | 7 ++ .../textures/gui/icons/timeline/delete.svg | 2 +- .../hollowengine/ui/styles/notifications.hss | 5 +- 38 files changed, 328 insertions(+), 135 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/copy.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/cut.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/delete.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_file.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_folder.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/paste.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/rename.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/reveal.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/animator.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/archive.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/blocks.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/data.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/effect.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/file.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/image.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/model.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/rig.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_mixin.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_node.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_reload.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_startup.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_ui.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/sound.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/story.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/style.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/text.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/video.svg diff --git a/gradle.properties b/gradle.properties index e75b0b549..195e70d09 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.parallel=true # Mod Options modId=hollowengine modName=HollowEngine -modVersion=2.3.5 +modVersion=2.4.0 modAuthor=HollowHorizon license=CC BY-NC-SA 4.0 modGroup=ru.hollowhorizon.hollowengine diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectContextMenu.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectContextMenu.kt index 0bbfd4156..3e9ed2e32 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectContextMenu.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectContextMenu.kt @@ -9,16 +9,7 @@ import androidx.compose.runtime.setValue import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect -import ru.hollowhorizon.hollowengine.client.utils.IconHelper.Icons -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.COPY -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.CREATE_FILE -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.CREATE_FOLDER -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.CUT -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.FILE_SOUND -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.FOLDER -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.PASTE -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.REMOVE -import ru.hollowhorizon.hollowengine.generated.Assets.Hollowengine.Textures.Gui.Icons.RENAME +import ru.hollowhorizon.hollowengine.client.utils.IconHelper @Composable internal fun HollowIdeProjectContextMenu( @@ -46,26 +37,26 @@ internal fun HollowIdeProjectContextMenu( tags = listOf("dropdown-popup", "project-context-menu"), onDismiss = onDismiss, ) { - ProjectMenuItem("New File", "Alt+Insert", CREATE_FILE.toString(), closeScripts) { onCreateFile(menu.path) } - ProjectMenuItem("New Folder", "Alt+Shift+Insert", CREATE_FOLDER.toString(), closeScripts) { onCreateFolder(menu.path) } + ProjectMenuItem("New File", "Alt+Insert", ProjectMenuIcons.NEW_FILE, closeScripts) { onCreateFile(menu.path) } + ProjectMenuItem("New Folder", "Alt+Shift+Insert", ProjectMenuIcons.NEW_FOLDER, closeScripts) { onCreateFolder(menu.path) } if (menu.canCreateScripts) { ProjectMenuItem( label = "New Script", shortcut = "›", - icon = Icons.FILE_KTS.toString(), + icon = IconHelper.forFile("script.kts").toString(), onEnter = { scriptsOpen = true }, onPlaced = { scriptsAnchor = it }, ) { scriptsOpen = !scriptsOpen } } if (menu.canCreateSoundEvents) { - ProjectMenuItem("New Sound Events", "", FILE_SOUND.toString(), closeScripts) { onCreateSoundEvents(menu.path) } + ProjectMenuItem("New Sound Events", "", IconHelper.forFile("sounds.ogg").toString(), closeScripts) { onCreateSoundEvents(menu.path) } } - ProjectMenuItem("Rename", "F2", RENAME.toString(), closeScripts) { onRename(menu.path) } - ProjectMenuItem("Copy", "Ctrl+C", COPY.toString(), closeScripts) { onCopy(menu.path) } - ProjectMenuItem("Cut", "Ctrl+X", CUT.toString(), closeScripts) { onCut(menu.path) } - ProjectMenuItem("Paste", "Ctrl+V", PASTE.toString(), closeScripts) { onPaste(menu.path) } - ProjectMenuItem("Show in Explorer", "", FOLDER.toString(), closeScripts) { onShowInExplorer(menu.path) } - ProjectMenuItem("Delete", "Del", REMOVE.toString(), closeScripts) { onDelete(menu.path) } + ProjectMenuItem("Rename", "F2", ProjectMenuIcons.RENAME, closeScripts) { onRename(menu.path) } + ProjectMenuItem("Copy", "Ctrl+C", ProjectMenuIcons.COPY, closeScripts) { onCopy(menu.path) } + ProjectMenuItem("Cut", "Ctrl+X", ProjectMenuIcons.CUT, closeScripts) { onCut(menu.path) } + ProjectMenuItem("Paste", "Ctrl+V", ProjectMenuIcons.PASTE, closeScripts) { onPaste(menu.path) } + ProjectMenuItem("Show in Explorer", "", ProjectMenuIcons.REVEAL, closeScripts) { onShowInExplorer(menu.path) } + ProjectMenuItem("Delete", "Del", ProjectMenuIcons.DELETE, closeScripts) { onDelete(menu.path) } } val anchor = scriptsAnchor @@ -202,3 +193,17 @@ internal fun HollowIdeFileOperationResult.statusText(): String { HollowIdeFileOperationResult.NotFound -> "hollowengine.gui.ide.file.not_found".lang } } + +/** The icons of the project menu, drawn in the family of the rest of the IDE. */ +private object ProjectMenuIcons { + private const val ROOT = "hollowengine:textures/gui/icons/actions/" + + const val NEW_FILE = ROOT + "new_file.svg" + const val NEW_FOLDER = ROOT + "new_folder.svg" + const val RENAME = ROOT + "rename.svg" + const val COPY = ROOT + "copy.svg" + const val CUT = ROOT + "cut.svg" + const val PASTE = ROOT + "paste.svg" + const val REVEAL = ROOT + "reveal.svg" + const val DELETE = ROOT + "delete.svg" +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeScriptTemplates.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeScriptTemplates.kt index 34b368bcc..348ec0864 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeScriptTemplates.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeScriptTemplates.kt @@ -1,6 +1,6 @@ package ru.hollowhorizon.hollowengine.client.ui.ide -import ru.hollowhorizon.hollowengine.client.utils.IconHelper.Icons +import ru.hollowhorizon.hollowengine.client.utils.IconHelper import ru.hollowhorizon.hollowengine.common.scripting.source.SandboxScriptSource import ru.hollowhorizon.hollowengine.common.scripting.source.ScriptRegistry @@ -15,19 +15,21 @@ internal enum class ScriptTemplate( val extension: String, private val defaultName: String, private val resource: String, - val icon: String, ) { - Plain("Script", ".kts", "script", "plain.kts", Icons.FILE_KTS.toString()), - ServerReload("Server Reload Script", ".reload.kts", "server", "server.reload.kts", Icons.FILE_KTS.toString()), - ClientReload("Client Reload Script", ".reload.kts", "client", "client.reload.kts", Icons.FILE_KTS.toString()), - Startup("Startup Script", ".startup.kts", "ruby", "startup.kts", Icons.FILE_KTS.toString()), - Node("Node Script", ".node.kts", "node", "node.kts", Icons.FILE_KTS.toString()), - Ui("UI Script", ".ui.kts", "menu", "ui.kts", Icons.FILE_KTS.toString()), - Mixin("Mixin Script", ".mixin.kts", "mixins", "mixin.kts", Icons.FILE_KTS.toString()), - Dialogue("Dialogue", ".story", "dialogue", "dialogue.story", Icons.DIALOGUE.toString()); + Plain("Script", ".kts", "script", "plain.kts"), + ServerReload("Server Reload Script", ".reload.kts", "server", "server.reload.kts"), + ClientReload("Client Reload Script", ".reload.kts", "client", "client.reload.kts"), + Startup("Startup Script", ".startup.kts", "ruby", "startup.kts"), + Node("Node Script", ".node.kts", "node", "node.kts"), + Ui("UI Script", ".ui.kts", "menu", "ui.kts"), + Mixin("Mixin Script", ".mixin.kts", "mixins", "mixin.kts"), + Dialogue("Dialogue", ".story", "dialogue", "dialogue.story"); val suggestedFileName: String get() = defaultName + extension + /** The icon the project tree gives files of this kind. */ + val icon: String get() = IconHelper.forFile(suggestedFileName).toString() + /** [input] as typed in the name dialog, completed with this template's extension when it lacks it. */ fun fileName(input: String): String { val name = input.trim() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorEditorModel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorEditorModel.kt index ebc0ca201..8a49627c6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorEditorModel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorEditorModel.kt @@ -2,19 +2,7 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.animator import ru.hollowhorizon.hollowengine.client.ui.UiColor import ru.hollowhorizon.hollowengine.client.utils.lang -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiCompletionContributor -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiInlineStyle -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiSyntaxHighlighter -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnostic -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextDiagnosticSeverity -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextHighlight -import ru.hollowhorizon.hollowengine.client.ui.widgets.withColor -import ru.hollowhorizon.hollowengine.common.utils.expressions.Diagnostics -import ru.hollowhorizon.hollowengine.common.utils.expressions.Lexer -import ru.hollowhorizon.hollowengine.common.utils.expressions.Severity -import ru.hollowhorizon.hollowengine.common.utils.expressions.TokenType -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextCompletion -import ru.hollowhorizon.hollowengine.client.models.internal.animator.AnimationDeclarations +import ru.hollowhorizon.hollowengine.client.ui.widgets.ExpressionEditing import ru.hollowhorizon.hollowengine.client.models.internal.animator.AnimationExpressionLanguage import ru.hollowhorizon.hollowengine.common.models.AnimatorLayerType import ru.hollowhorizon.hollowengine.common.models.AnimatorLayerTypes @@ -60,13 +48,6 @@ object AnimatorColors { val EdgeHover = UiColor(0.82f, 0.86f, 0.94f) val Accent = UiColor(0.38f, 0.60f, 0.92f) val Danger = UiColor(0.85f, 0.34f, 0.34f) - - val TokenNumber = UiColor(0.72f, 0.62f, 0.92f) - val TokenString = UiColor(0.62f, 0.82f, 0.55f) - val TokenKeyword = UiColor(0.85f, 0.55f, 0.42f) - val TokenKnown = UiColor(0.42f, 0.72f, 0.92f) - val TokenUnknown = UiColor(0.85f, 0.45f, 0.45f) - val TokenOperator = UiColor(0.62f, 0.66f, 0.72f) } internal fun animatorText(name: String): String = "hollowengine.gui.animator_editor.$name".lang @@ -86,71 +67,8 @@ private fun titleOf(titleKey: String, id: String): String { return if (translated == titleKey) id.substringAfterLast('/') else translated } -val AnimationExpressionCompletions: UiCompletionContributor = UiCompletionContributor { context -> - val before = context.text.take(context.caret.coerceIn(0, context.text.length)) - val member = MemberAccess.find(before) - val prefix = member?.groupValues?.get(2) ?: before.takeLastWhile { it.isLetterOrDigit() || it == '_' } - val names = member?.let { membersOf(it.groupValues[1]) } ?: expressionNames() - - names - .filter { prefix.isEmpty() || it.startsWith(prefix, ignoreCase = true) } - .map { UiTextCompletion(label = it) } -} - -private val MemberAccess = Regex("""([A-Za-z_][A-Za-z0-9_]*)\s*\.\s*([A-Za-z0-9_]*)$""") - -private fun membersOf(root: String): List { - val type = AnimationDeclarations.root(root)?.type - ?: AnimationDeclarations.receivers.firstOrNull { it.name == root }?.type - ?: return emptyList() - - return (type.members.allFields.map { it.name } + type.members.allMethods.map { it.name }) - .distinct() - .sorted() -} - -val AnimationExpressionHighlighter = UiSyntaxHighlighter { text -> - if (text.isBlank()) return@UiSyntaxHighlighter emptyList() - - Lexer(text, Diagnostics()).tokenize().mapNotNull { token -> - val color = when (token.type) { - TokenType.NUMBER -> AnimatorColors.TokenNumber - TokenType.STRING -> AnimatorColors.TokenString - TokenType.BOOLEAN -> AnimatorColors.TokenKeyword - TokenType.IDENTIFIER -> AnimatorColors.TokenKnown - TokenType.EOF -> return@mapNotNull null - else -> AnimatorColors.TokenOperator - } - UiTextHighlight(token.span.start, token.span.end, UiInlineStyle().withColor(color)) - } -} - -fun animationExpressionDiagnostics(source: String): List { - if (source.isBlank()) return emptyList() - - return runCatching { AnimationExpressionLanguage.bake(source).diagnostics } - .getOrDefault(emptyList()) - .map { diagnostic -> - UiTextDiagnostic( - start = diagnostic.span.start.coerceIn(0, source.length), - end = diagnostic.span.end.coerceIn(0, source.length), - message = diagnostic.message, - severity = when (diagnostic.severity) { - Severity.ERROR -> UiTextDiagnosticSeverity.ERROR - Severity.WARNING -> UiTextDiagnosticSeverity.WARNING - }, - ) - } -} - -private fun expressionNames(): List { - val declarations = AnimationDeclarations - val roots = declarations.roots.keys - val members = declarations.receivers.flatMap { receiver -> - receiver.type.members.allFields.map { it.name } + receiver.type.members.allMethods.map { it.name } - } - return (roots + members).distinct().sorted() -} +/** Highlighting, completion and diagnostics for the expressions of the animator dialect. */ +val AnimationExpressionEditing = ExpressionEditing(AnimationExpressionLanguage) internal fun UiColor.mixedWith(other: UiColor, amount: Float = 0.22f): UiColor = interpolate(other.copy(alpha = alpha), amount) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt index bf24d7aa2..4a1d46a08 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt @@ -54,8 +54,8 @@ internal fun AnimatorIconButton( internal fun ExpressionField(label: String, value: String, onChange: (String) -> Unit) = TextRow( label = label, value = value, - completions = AnimationExpressionCompletions, - highlighter = AnimationExpressionHighlighter, - diagnostics = animationExpressionDiagnostics(value), + completions = AnimationExpressionEditing.completions, + highlighter = AnimationExpressionEditing.highlighter, + diagnostics = AnimationExpressionEditing.diagnostics(value), onChange = onChange, ) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt index 9114e8443..eed8e4f89 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxFields.kt @@ -8,10 +8,12 @@ import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu +import ru.hollowhorizon.hollowengine.client.ui.widgets.ExpressionEditing import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextInputFilter import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.client.vfx.VfxExpressionLanguage import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f import ru.hollowhorizon.hollowengine.common.vfx.VfxCurve import ru.hollowhorizon.hollowengine.common.vfx.VfxCurveInput @@ -323,13 +325,17 @@ private fun TextCell(text: String, property: VfxProperty?, onChange: (String) -> draft = text } + val diagnostics = remember(draft) { VfxExpressionEditing.diagnostics(draft) } TextField( value = draft, fontSize = 9f, placeholder = vfxText("expression_placeholder"), + completionContributor = VfxExpressionEditing.completions, + syntaxHighlighter = VfxExpressionEditing.highlighter, + diagnostics = diagnostics, tags = listOf("insp-input", "insp-inline-input", "vfx-expression"), modifier = Modifier.size(0.px, UiLength.Fit).grow(1f).onFocus { if (property != null) focus(property) } - .tooltipOnHover(vfxText("expression_hint")), + .then(if (diagnostics.isEmpty()) Modifier.tooltipOnHover(vfxText("expression_hint")) else Modifier), onChange = { typed -> draft = typed lastExternal = typed @@ -462,6 +468,9 @@ internal fun InspectorIcon(icon: String, tooltip: String, onClick: () -> Unit) { InspectorIconButton(icon = icon, tooltip = tooltip, tags = listOf("insp-inline-icon"), onClick = onClick) } +/** Highlighting, completion and diagnostics for the expressions of the effect dialect. */ +internal val VfxExpressionEditing = ExpressionEditing(VfxExpressionLanguage) + internal fun vfxText(name: String): String = "hollowengine.gui.vfx.$name".lang internal const val FieldLabelWidth = 84f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt new file mode 100644 index 000000000..888cf7668 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt @@ -0,0 +1,103 @@ +package ru.hollowhorizon.hollowengine.client.ui.widgets + +import ru.hollowhorizon.hollowengine.client.ui.UiColor +import ru.hollowhorizon.hollowengine.common.utils.expressions.Diagnostics +import ru.hollowhorizon.hollowengine.common.utils.expressions.ExprType +import ru.hollowhorizon.hollowengine.common.utils.expressions.Expression +import ru.hollowhorizon.hollowengine.common.utils.expressions.Lexer +import ru.hollowhorizon.hollowengine.common.utils.expressions.Severity +import ru.hollowhorizon.hollowengine.common.utils.expressions.TokenType + +/** + * What a text field needs to edit an expression of one dialect: colours for its tokens, the names it + * can complete, and the dialect's own diagnostics. Every editor that takes an expression (the + * animator, the effect editor) builds one from its [Expression] and hands the three to its field. + */ +class ExpressionEditing(private val language: Expression) { + val completions: UiCompletionContributor = UiCompletionContributor { context -> + val before = context.text.take(context.caret.coerceIn(0, context.text.length)) + val member = MemberAccess.find(before) + val prefix = member?.groupValues?.get(2) ?: before.takeLastWhile { it.isLetterOrDigit() || it == '_' } + val candidates = member?.let { membersOf(it.groupValues[1]) } ?: topLevel() + + candidates + .filter { prefix.isEmpty() || it.name.startsWith(prefix, ignoreCase = true) } + .map { UiTextCompletion(label = it.name, detail = it.parameters, tail = it.type) } + } + + val highlighter: UiSyntaxHighlighter = UiSyntaxHighlighter { text -> + if (text.isBlank()) return@UiSyntaxHighlighter emptyList() + + Lexer(text, Diagnostics()).tokenize().mapNotNull { token -> + val color = when (token.type) { + TokenType.NUMBER -> ExpressionTokenColors.Number + TokenType.STRING -> ExpressionTokenColors.String + TokenType.BOOLEAN -> ExpressionTokenColors.Keyword + TokenType.IDENTIFIER -> ExpressionTokenColors.Name + TokenType.EOF -> return@mapNotNull null + else -> ExpressionTokenColors.Operator + } + UiTextHighlight(token.span.start, token.span.end, UiInlineStyle().withColor(color)) + } + } + + fun diagnostics(source: String): List { + if (source.isBlank()) return emptyList() + + return runCatching { language.bake(source).diagnostics } + .getOrDefault(emptyList()) + .map { diagnostic -> + UiTextDiagnostic( + start = diagnostic.span.start.coerceIn(0, source.length), + end = diagnostic.span.end.coerceIn(0, source.length), + message = diagnostic.message, + severity = when (diagnostic.severity) { + Severity.ERROR -> UiTextDiagnosticSeverity.ERROR + Severity.WARNING -> UiTextDiagnosticSeverity.WARNING + }, + ) + } + } + + /** What `root.` offers: the members of the root, or of the receiver of that name. */ + private fun membersOf(root: String): List { + val declarations = language.declarations + val type = declarations.root(root)?.type + ?: declarations.receivers.firstOrNull { it.name == root }?.type + ?: return emptyList() + return type.described() + } + + /** The roots, and the members of the receivers, which are readable without a root. */ + private fun topLevel(): List { + val declarations = language.declarations + val roots = declarations.roots.map { (name, field) -> Candidate(name, "", field.type.name) } + val members = declarations.receivers.flatMap { it.type.described() } + return (roots + members).distinctBy { it.name }.sortedBy { it.name } + } + + private fun ExprType.described(): List { + val fields = members.allFields.flatMap { field -> field.names.map { Candidate(it, "", field.type.name) } } + val methods = members.allMethods.flatMap { method -> + val parameters = method.parameters.joinToString(prefix = "(", postfix = ")") { it.name } + method.names.map { Candidate(it, parameters, method.type.name) } + } + return (fields + methods).distinctBy { it.name }.sortedBy { it.name } + } + + /** One name to offer: the parameters of a function right after it, and its type at the right edge. */ + private class Candidate(val name: String, val parameters: String, val type: String) + + private companion object { + val MemberAccess = Regex("""([A-Za-z_][A-Za-z0-9_]*)\s*\.\s*([A-Za-z0-9_]*)$""") + } +} + +/** The colours of expression tokens, the same in every editor that shows an expression. */ +object ExpressionTokenColors { + val Number = UiColor(0.72f, 0.62f, 0.92f) + val String = UiColor(0.62f, 0.82f, 0.55f) + val Keyword = UiColor(0.85f, 0.55f, 0.42f) + val Name = UiColor(0.42f, 0.72f, 0.92f) + val Operator = UiColor(0.62f, 0.66f, 0.72f) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt index c4a355a2e..e4eee6d5c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt @@ -1,6 +1,7 @@ package ru.hollowhorizon.hollowengine.client.utils import net.minecraft.resources.ResourceLocation +import ru.hollowhorizon.hollowengine.common.utils.rl import ru.hollowhorizon.hollowengine.generated.Assets object IconHelper { @@ -30,18 +31,39 @@ object IconHelper { } } - else -> { - when (path.substringAfterLast('.')) { - "bc" -> Icons.FILE_CODEBLOCKS - "zip", "rar", "jar" -> Icons.FILE_ZIP - "gltf", "glb", "fbx", "geo.json", "obj" -> Icons.FILE_MODEL - "kts", "kt" -> Icons.FILE_KTS - "png", "jpg", "jpeg", "gif" -> Icons.FILE_IMAGE - "ogg", "mp3", "wav" -> Icons.FILE_SOUND - "mp4", "avi", "mov" -> Icons.FILM - else -> Icons.FILE - } - } + else -> forFile(path) } } -} \ No newline at end of file + + /** + * The icon of a file, by what it is: the engine's own formats first, since several of them end in a + * suffix another format also uses (`.node.kts` is a `.kts`, `.geo.json` is a `.json`). + */ + fun forFile(path: String): ResourceLocation { + val name = path.substringAfterLast('/').lowercase() + val icon = FileIcons.firstOrNull { (suffixes, _) -> suffixes.any(name::endsWith) }?.second ?: "file" + return "hollowengine:textures/gui/icons/files/$icon.svg".rl + } + + private val FileIcons: List, String>> = listOf( + listOf(".node.kts") to "script_node", + listOf(".ui.kts") to "script_ui", + listOf(".startup.kts") to "script_startup", + listOf(".reload.kts") to "script_reload", + listOf(".mixin.kts") to "script_mixin", + listOf(".kts", ".kt") to "script", + listOf(".vfx") to "effect", + listOf(".animator") to "animator", + listOf(".rig") to "rig", + listOf(".story") to "story", + listOf(".hss") to "style", + listOf(".bc") to "blocks", + listOf(".gltf", ".glb", ".fbx", ".geo.json", ".obj") to "model", + listOf(".json", ".json5", ".mcmeta") to "data", + listOf(".png", ".jpg", ".jpeg", ".gif") to "image", + listOf(".ogg", ".mp3", ".wav") to "sound", + listOf(".mp4", ".avi", ".mov") to "video", + listOf(".zip", ".rar", ".jar") to "archive", + listOf(".txt", ".md", ".yml", ".yaml", ".toml", ".properties", ".lang", ".cfg") to "text", + ) +} diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/copy.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/copy.svg new file mode 100644 index 000000000..bf839b3bb --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/cut.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/cut.svg new file mode 100644 index 000000000..2cde61f50 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/cut.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/delete.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/delete.svg new file mode 100644 index 000000000..016dd966c --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/delete.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_file.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_file.svg new file mode 100644 index 000000000..010d4cc5b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_file.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_folder.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_folder.svg new file mode 100644 index 000000000..a7138c32d --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/new_folder.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/paste.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/paste.svg new file mode 100644 index 000000000..3df726476 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/paste.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/rename.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/rename.svg new file mode 100644 index 000000000..38374041a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/rename.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/reveal.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/reveal.svg new file mode 100644 index 000000000..5a341408a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/actions/reveal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/animator.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/animator.svg new file mode 100644 index 000000000..dadcbf47a --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/animator.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/archive.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/archive.svg new file mode 100644 index 000000000..a499867df --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/archive.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/blocks.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/blocks.svg new file mode 100644 index 000000000..b7799e08f --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/blocks.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/data.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/data.svg new file mode 100644 index 000000000..35d096bf2 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/data.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/effect.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/effect.svg new file mode 100644 index 000000000..df706f742 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/effect.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/file.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/file.svg new file mode 100644 index 000000000..33a231e00 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/file.svg @@ -0,0 +1,4 @@ + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/image.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/image.svg new file mode 100644 index 000000000..f5af0d097 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/image.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/model.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/model.svg new file mode 100644 index 000000000..656b226ca --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/model.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/rig.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/rig.svg new file mode 100644 index 000000000..4c6eadbc6 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/rig.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script.svg new file mode 100644 index 000000000..fb2d955c4 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_mixin.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_mixin.svg new file mode 100644 index 000000000..a5df6571f --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_mixin.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_node.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_node.svg new file mode 100644 index 000000000..300d0b713 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_node.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_reload.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_reload.svg new file mode 100644 index 000000000..1ce5a6f0b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_reload.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_startup.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_startup.svg new file mode 100644 index 000000000..026eba3f3 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_startup.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_ui.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_ui.svg new file mode 100644 index 000000000..6f4b682d4 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/script_ui.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/sound.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/sound.svg new file mode 100644 index 000000000..4c815ec42 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/sound.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/story.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/story.svg new file mode 100644 index 000000000..933f23666 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/story.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/style.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/style.svg new file mode 100644 index 000000000..d4767dc4c --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/style.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/text.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/text.svg new file mode 100644 index 000000000..7efc63616 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/text.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/video.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/video.svg new file mode 100644 index 000000000..6d1770b43 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/video.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg index e1751264b..016dd966c 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/timeline/delete.svg @@ -1,4 +1,4 @@ - + diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss index b4d0bca80..ea1983bd1 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss @@ -1,9 +1,12 @@ /* * The notification stack in the bottom-right corner. Each card is bordered with its own kind's - * gradient, matching the icon it carries; the rest follows the IDE's popups, compact and quiet. + * gradient, matching the icon it carries; the rest follows the IDE's popups, compact and quiet, and + * is set in the same code font as the IDE. */ .notif-stack { + font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; + font-size: 9px; size: fit fit; gap: 6px; margin: 10px; From dd6707d8b35a737894f1c14328a2bc9539937466 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 15:27:59 +0300 Subject: [PATCH 08/25] Add HSS imports, theme vars, and UI refresh --- .../client/editor/GizmoGeometry.kt | 2 +- .../client/models/fbx/fbxBinaryTokenizer.kt | 2 +- .../client/ui/ide/HollowIdeFileActions.kt | 2 +- .../client/ui/ide/HollowIdeMenuItems.kt | 15 +- .../client/ui/ide/HollowIdeOverlay.kt | 4 +- .../client/ui/ide/HollowIdeProblemsPanel.kt | 2 +- .../client/ui/ide/HollowIdeProjectDialogs.kt | 2 +- .../client/ui/ide/files/vfx/VfxInspector.kt | 2 +- .../ui/ide/panels/ConsoleCommandAssist.kt | 6 +- .../client/ui/ide/panels/ConsolePanel.kt | 2 +- .../client/ui/ide/timeline/TimelineApi.kt | 2 +- .../ide/timeline/ui/HollowTimelineChrome.kt | 2 +- .../ide/timeline/ui/HollowTimelineSupport.kt | 2 +- .../client/ui/layout/UiInlineFlow.kt | 2 +- .../client/ui/render/MinecraftUiRenderer.kt | 4 +- .../client/ui/render/UiAnalyticRectBatch.kt | 2 +- .../client/ui/screen/HollowUiTextLabDemo.kt | 2 +- .../client/ui/scroll/UiScrollbarInput.kt | 2 +- .../client/ui/shape/UiPathGeometry.kt | 2 +- .../client/ui/shape/UiSvgStyleParser.kt | 2 +- .../hollowengine/client/ui/style/HssAst.kt | 37 ++ .../client/ui/style/HssCompiler.kt | 12 +- .../client/ui/style/HssImports.kt | 127 ++++ .../hollowengine/client/ui/style/HssParser.kt | 62 +- .../hollowengine/client/ui/style/HssSyntax.kt | 2 +- .../client/ui/style/HssTextProperties.kt | 6 +- .../hollowengine/client/ui/style/HssValues.kt | 12 +- .../client/ui/style/HssVisualProperties.kt | 11 +- .../client/ui/style/HssWidgetProperties.kt | 2 +- .../client/ui/style/UiResolver.kt | 2 +- .../client/ui/style/UiStylesheetReference.kt | 18 +- .../client/ui/text/UiVanillaFont.kt | 2 +- .../client/ui/widgets/ExpressionEditing.kt | 4 +- .../client/ui/widgets/TextFieldState.kt | 2 +- .../UiEditableTextFieldCompletionPopup.kt | 4 +- .../client/ui/widgets/UiTextEditor.kt | 2 +- .../client/vfx/VfxParticleLook.kt | 4 +- .../hollowengine/client/vfx/VfxParticles.kt | 2 +- .../client/vfx/render/VfxRibbons.kt | 2 +- .../client/vfx/render/VfxSurfaceNodes.kt | 2 +- .../common/scripting/ide/ui/HssCompletions.kt | 24 + .../common/scripting/ide/ui/HssDiagnostics.kt | 37 +- .../scripting/ide/ui/HssDocumentModel.kt | 15 +- .../common/scripting/ide/ui/HssInlayHints.kt | 27 +- .../common/scripting/ide/ui/HssLexer.kt | 38 +- .../common/vfx/VfxRendererSpecs.kt | 2 +- .../hollowengine/textures/gui/icons/add.svg | 5 +- .../hollowengine/textures/gui/icons/box.svg | 10 +- .../textures/gui/icons/code_editor.svg | 7 +- .../textures/gui/icons/console.svg | 12 +- .../hollowengine/textures/gui/icons/copy.svg | 6 +- .../hollowengine/textures/gui/icons/cross.svg | 5 +- .../textures/gui/icons/discord.svg | 6 + .../hollowengine/textures/gui/icons/docs.svg | 11 +- .../textures/gui/icons/export.svg | 8 + .../hollowengine/textures/gui/icons/film.svg | 21 +- .../textures/gui/icons/general.svg | 8 +- .../textures/gui/icons/github.svg | 4 +- .../hollowengine/textures/gui/icons/graph.svg | 5 +- .../hollowengine/textures/gui/icons/info.svg | 6 +- .../textures/gui/icons/invisible.svg | 8 +- .../textures/gui/icons/keyboard.svg | 12 +- .../textures/gui/icons/layers.svg | 15 +- .../hollowengine/textures/gui/icons/link.svg | 18 +- .../hollowengine/textures/gui/icons/load.svg | 28 +- .../textures/gui/icons/maximize.svg | 4 +- .../textures/gui/icons/minimize.svg | 6 +- .../textures/gui/icons/options.svg | 22 +- .../hollowengine/textures/gui/icons/paste.svg | 9 +- .../hollowengine/textures/gui/icons/pause.svg | 5 +- .../hollowengine/textures/gui/icons/play.svg | 4 +- .../textures/gui/icons/reload.svg | 6 +- .../textures/gui/icons/remove.svg | 8 +- .../textures/gui/icons/rename.svg | 5 +- .../hollowengine/textures/gui/icons/save.svg | 19 +- .../textures/gui/icons/save_all.svg | 5 + .../textures/gui/icons/search.svg | 5 +- .../hollowengine/textures/gui/icons/stop.svg | 3 + .../textures/gui/icons/telegram.svg | 3 + .../textures/gui/icons/visible.svg | 5 +- .../textures/gui/icons/volume.svg | 8 +- .../ui/styles/animator-editor.hss | 92 +-- .../hollowengine/ui/styles/asset-manager.hss | 104 ++-- .../hollowengine/ui/styles/dialogue.hss | 4 +- .../assets/hollowengine/ui/styles/docking.hss | 84 +-- .../hollowengine/ui/styles/entity-editor.hss | 158 ++--- .../assets/hollowengine/ui/styles/ide.hss | 552 ++++++++---------- .../hollowengine/ui/styles/image-editor.hss | 50 +- .../hollowengine/ui/styles/inspector.hss | 267 +++++---- .../hollowengine/ui/styles/model-editor.hss | 114 ++-- .../hollowengine/ui/styles/notifications.hss | 37 +- .../hollowengine/ui/styles/sounds-editor.hss | 108 ++-- .../assets/hollowengine/ui/styles/theme.hss | 112 ++++ .../hollowengine/ui/styles/timeline.hss | 117 ++-- .../assets/hollowengine/ui/styles/widgets.hss | 230 ++++---- runtime/src/test/kotlin/VfxFormatTests.kt | 2 +- .../client/ui/layout/InlineFlowTest.kt | 2 +- .../ui/layout/ScrollbarSynthesisTest.kt | 4 +- .../ui/render/UiAnalyticRectBatchTest.kt | 6 +- .../ui/render/UiSvgDocumentRenderTest.kt | 2 +- .../client/ui/style/HssVariablesTest.kt | 75 +++ .../client/ui/style/TextEffectParsingTest.kt | 2 +- .../client/utils/font/MsdfEdgeColoringTest.kt | 10 +- .../client/utils/font/MsdfGeneratorTest.kt | 4 +- .../ide/story/StoryScriptingAnalyzerTest.kt | 2 +- .../ui/BundledStylesheetDiagnosticsTest.kt | 6 + .../scripting/ide/ui/HssColorHintsTest.kt | 6 +- 107 files changed, 1730 insertions(+), 1251 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssImports.kt create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/discord.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/export.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save_all.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/stop.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/telegram.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/ui/styles/theme.hss create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/HssVariablesTest.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt index d2c6f1af9..37bb0220a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/editor/GizmoGeometry.kt @@ -112,7 +112,7 @@ class GizmoGeometry(private val projector: GizmoProjector) { } if (GizmoEditMode.SCALE in modes) { - // Next to the arrows the scale handles lose their shafts and the centre stays free movement. + // Next to the arrows the scale handles lose their shafts and the center stays free movement. val basis = Triple(lx, ly, lz) scaleAxis(GizmoHandleId.SCALE_X, origin, lx, basis, perPixel, translate, GizmoColors.AXIS_X)?.let(::add) scaleAxis(GizmoHandleId.SCALE_Y, origin, ly, basis, perPixel, translate, GizmoColors.AXIS_Y)?.let(::add) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/fbx/fbxBinaryTokenizer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/fbx/fbxBinaryTokenizer.kt index 0d9a3c821..3ceb623c5 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/fbx/fbxBinaryTokenizer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/models/fbx/fbxBinaryTokenizer.kt @@ -155,7 +155,7 @@ fun readScope(outputTokens: ArrayList, input: ByteBuffer, end: Int, is64b private var sBeg = -1 private var sEnd = -1 -// TODO: Test FBX Binary files newer than the 7500 version to check if the 64 bits address behaviour is consistent +// TODO: Test FBX Binary files newer than the 7500 version to check if the 64 bits address behavior is consistent fun tokenizeBinary(outputTokens: ArrayList, input: ByteBuffer) { if (input.rem < 0x1b) tokenizeError("file is too short", 0) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeFileActions.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeFileActions.kt index 3ec4a0dfa..c3349d507 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeFileActions.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeFileActions.kt @@ -137,6 +137,6 @@ private fun HollowIdeFileAction.withSeparator() = HollowIdeFileAction( private const val SaveIcon = "hollowengine:textures/gui/icons/save.svg" private const val ReformatIcon = "hollowengine:textures/gui/icons/code_editor.svg" -private const val CloseIcon = "hollowengine:textures/gui/icons/close.png" +private const val CloseIcon = "hollowengine:textures/gui/icons/cross.svg" private const val CopyIcon = "hollowengine:textures/gui/icons/copy.svg" private const val FolderIcon = "hollowengine:textures/gui/icons/folder_open.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt index eba158a0a..9b2e4e84d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeMenuItems.kt @@ -21,12 +21,15 @@ import ru.hollowhorizon.hollowengine.common.utils.openUrl private const val ReloadIcon = "hollowengine:textures/gui/icons/reload.svg" private const val ReformatIcon = "hollowengine:textures/gui/icons/code_editor.svg" private const val SaveIcon = "hollowengine:textures/gui/icons/save.svg" +private const val SaveAllIcon = "hollowengine:textures/gui/icons/save_all.svg" +private const val TelegramIcon = "hollowengine:textures/gui/icons/telegram.svg" +private const val DiscordIcon = "hollowengine:textures/gui/icons/discord.svg" +private const val ModFolderIcon = "hollowengine:textures/gui/icons/actions/reveal.svg" private const val DocsIcon = "hollowengine:textures/gui/icons/docs.svg" private const val GitHubIcon = "hollowengine:textures/gui/icons/github.svg" -private const val LinkIcon = "hollowengine:textures/gui/icons/link.svg" private const val KeyboardIcon = "hollowengine:textures/gui/icons/keyboard.svg" private const val ImportIcon = "hollowengine:textures/gui/icons/load.svg" -private const val ExportIcon = "hollowengine:textures/gui/icons/file_zip.svg" +private const val ExportIcon = "hollowengine:textures/gui/icons/export.svg" internal const val MenuLang = "hollowengine.gui.ide.menu" private const val DocsUrl = "https://0mods.team/docs/hollowengine" @@ -51,7 +54,7 @@ internal fun hollowIdeFileMenuItems( dock.updateItem(file.dockItem()) } }, - UiDropdownItem("$MenuLang.save_all".lang, SaveIcon, enabled = model.files.values.any { it.dirty }) { + UiDropdownItem("$MenuLang.save_all".lang, SaveAllIcon, enabled = model.files.values.any { it.dirty }) { model.saveAll() model.files.values.forEach { dock.updateItem(it.dockItem()) } }, @@ -80,7 +83,7 @@ internal fun hollowIdeFileMenuItems( UiDropdownItem("hollowengine.gui.ide.file.reload_server_resources".lang, ReloadIcon) { ReloadServerResourcesPacket().send() }.takeIf { operator }, - UiDropdownItem("hollowengine.gui.ide.file.open_mod_folder".lang, LogoIcon) { + UiDropdownItem("hollowengine.gui.ide.file.open_mod_folder".lang, ModFolderIcon) { DesktopUtil.openInExplorer(DirectoryManager.HOLLOW_ENGINE.toFile()) }, ) @@ -182,7 +185,7 @@ internal fun hollowIdeHelpMenuItems(onShowShortcuts: () -> Unit): List 0 -> "has-errors" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectDialogs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectDialogs.kt index 31564b998..f425f4c30 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectDialogs.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeProjectDialogs.kt @@ -43,7 +43,7 @@ import ru.hollowhorizon.hollowengine.common.scripting.source.DEFAULT_SANDBOX_NAM private const val LANG = "hollowengine.gui.ide.project" private const val SettingsIcon = "hollowengine:textures/gui/icons/options.svg" private const val ImportIcon = "hollowengine:textures/gui/icons/load.svg" -private const val ExportIcon = "hollowengine:textures/gui/icons/file_zip.svg" +private const val ExportIcon = "hollowengine:textures/gui/icons/export.svg" /** What can be done with the project as a whole, at the right end of the project tree's tab bar. */ @Composable diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt index 4dbfd9d3c..8aaf9fefb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt @@ -126,7 +126,7 @@ private fun NodeHead(document: HollowIdeVfxDocument, node: VfxNodeSpec) { /** * What a renderer gives each particle of its emitter. A trail has a width of its own and does not - * turn, so it only offers the colour. + * turn, so it only offers the color. */ @Composable private fun ParticleFields(document: HollowIdeVfxDocument, state: VfxEditorState, node: VfxParticleRendererSpec) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleCommandAssist.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleCommandAssist.kt index c25eb45a0..cdb2d85f6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleCommandAssist.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleCommandAssist.kt @@ -26,11 +26,11 @@ internal class ConsoleCommandAssist(private val onUpdated: () -> Unit) { private var diagnostics = DiagnosticSnapshot("", emptyList()) @Volatile - private var colours = HighlightSnapshot("", emptyList()) + private var colors = HighlightSnapshot("", emptyList()) /** Colors the parsed parts of the command; anything not parsed yet simply stays plain. */ val highlighter: UiSyntaxHighlighter = UiSyntaxHighlighter { text -> - colours.takeIf { it.text == text }?.items.orEmpty() + colors.takeIf { it.text == text }?.items.orEmpty() } val contributor: UiCompletionContributor = object : UiCompletionContributor { @@ -97,7 +97,7 @@ internal class ConsoleCommandAssist(private val onUpdated: () -> Unit) { private fun publishParse(text: String, problems: List, highlights: List) { diagnostics = DiagnosticSnapshot(text, problems) - colours = HighlightSnapshot(text, highlights) + colors = HighlightSnapshot(text, highlights) onUpdated() } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt index 03dcdf148..5ee8263f8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsolePanel.kt @@ -442,6 +442,6 @@ private const val InputHeight = 22f private const val ExpandedInputHeight = 120f private const val RunIcon = "hollowengine:textures/gui/icons/play.svg" -private const val StopIcon = "hollowengine:textures/gui/icons/stop.png" +private const val StopIcon = "hollowengine:textures/gui/icons/stop.svg" private const val MaximizeIcon = "hollowengine:textures/gui/icons/maximize.svg" private const val MinimizeIcon = "hollowengine:textures/gui/icons/minimize.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt index 792e6ca6f..43cdabe60 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/TimelineApi.kt @@ -25,7 +25,7 @@ data class ChannelValueOption( val labelKey: String, ) -/** Name, color and editor behaviour of one scalar component of a property. */ +/** Name, color and editor behavior of one scalar component of a property. */ data class ChannelSpec( val name: String, val color: Color, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt index ab5bb0a30..18d15277b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineChrome.kt @@ -586,7 +586,7 @@ private fun TimelineSeparator() { internal fun formatSeconds(value: Float): String = "%.2f".format(value).replace(',', '.') -/** Zoom keeping the visible centre roughly fixed; used by the toolbar buttons. */ +/** Zoom keeping the visible center roughly fixed; used by the toolbar buttons. */ internal fun zoomAroundCenter(controller: TimelineController, factor: Float) { controller.pixelsPerSecond = (controller.pixelsPerSecond * factor).coerceIn(TimelineMinZoom, TimelineMaxZoom) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt index f24eff656..327ae03a6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/ui/HollowTimelineSupport.kt @@ -256,7 +256,7 @@ internal fun UiColor.withAlpha(multiplier: Float) = /** * What the lanes, keys and curves are drawn with: the IDE palette of docking.hss, so the timeline - * reads as part of the IDE. The chrome around them takes the same colours from timeline.hss. + * reads as part of the IDE. The chrome around them takes the same colors from timeline.hss. */ internal object TimelineColors { val Background = UiColor(0.110f, 0.118f, 0.133f, 1f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt index 149796ecf..aa8921bbb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/layout/UiInlineFlow.kt @@ -194,7 +194,7 @@ internal fun UiLayoutPipeline.computeInlineFlow( ) val lines = breakIntoLines(pieces, availableWidth, wrap) // Alignment still uses the container width even with wrap off, so a single line can sit - // centred/right/justified when the container is wider than the text (a fit container just + // centered/right/justified when the container is wider than the text (a fit container just // hugs the text, making alignment a natural no-op). positionLines(lines, availableWidth, align, lineSpacing) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/MinecraftUiRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/MinecraftUiRenderer.kt index 418f8658f..97fa12ba7 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/MinecraftUiRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/MinecraftUiRenderer.kt @@ -71,10 +71,10 @@ private const val ProjectiveLayerTextureSubdivisions = 12 private const val PORTRAIT_YAW = 180f -/** Colour links are drawn in when the style does not name one. */ +/** Color links are drawn in when the style does not name one. */ private val LinkColor = UiColor(0.34f, 0.67f, 1f, 1f) -/** Below this an underline can fall between pixel centres and vanish entirely. */ +/** Below this an underline can fall between pixel centers and vanish entirely. */ private const val MinTextRuleThickness = 0.5f /** Corner rounding of a span background or an inline code chip. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt index 20e0c48db..c825a0b26 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatch.kt @@ -237,7 +237,7 @@ internal class UiAnalyticRectBatch { } } -/** A dash pattern fitted to one border: [period] divides its centre line into whole repeats. */ +/** A dash pattern fitted to one border: [period] divides its center line into whole repeats. */ internal class UiBorderDashPattern(val period: Float, val length: Float) internal fun borderDashPattern( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowUiTextLabDemo.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowUiTextLabDemo.kt index 8bfbafb62..a6d4efce7 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowUiTextLabDemo.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowUiTextLabDemo.kt @@ -341,7 +341,7 @@ private class TextLabArgs(private val effect: TextLabEffect, private val values: fun int(index: Int): Int = number(index).toInt() - /** Blank means "no override": the rule then takes the colour the text is drawn in. */ + /** Blank means "no override": the rule then takes the color the text is drawn in. */ fun color(index: Int): UiColor? { val raw = values[effect.key(index)]?.trim().orEmpty().ifEmpty { effect.params[index].default } return parseHexColor(raw) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt index 0cd40a871..aa185e9c0 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollbarInput.kt @@ -56,7 +56,7 @@ internal fun scrollbarThumbDragState( } } -/** Pressing the track centres the thumb on the pointer, then tracks it like a thumb drag would. */ +/** Pressing the track centers the thumb on the pointer, then tracks it like a thumb drag would. */ internal fun scrollbarTrackDragState( layouts: Map, scrollbar: ScrollbarNode, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiPathGeometry.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiPathGeometry.kt index 4ec5409ad..2d946740e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiPathGeometry.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiPathGeometry.kt @@ -367,7 +367,7 @@ private fun addJoin( } } -/** Round/square/butt cap centred on [end], the outer terminal of a segment coming from [inner]. */ +/** Round/square/butt cap centered on [end], the outer terminal of a segment coming from [inner]. */ private fun addCap( inner: UiPathPoint, end: UiPathPoint, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiSvgStyleParser.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiSvgStyleParser.kt index 4a7fb4620..cad9ce39e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiSvgStyleParser.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/shape/UiSvgStyleParser.kt @@ -320,7 +320,7 @@ private val namedSvgColors = mapOf( "cyan" to UiColor(0f, 1f, 1f, 1f), "magenta" to UiColor(1f, 0f, 1f, 1f), "gray" to UiColor(0.5f, 0.5f, 0.5f, 1f), - "grey" to UiColor(0.5f, 0.5f, 0.5f, 1f), + "gray" to UiColor(0.5f, 0.5f, 0.5f, 1f), "orange" to UiColor(1f, 0.647f, 0f, 1f), "purple" to UiColor(0.5f, 0f, 0.5f, 1f), ) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssAst.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssAst.kt index d321dbebf..0f24f4883 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssAst.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssAst.kt @@ -9,6 +9,37 @@ import ru.hollowhorizon.hollowengine.client.ui.hasEffectiveStates data class HssDocument( val rules: List, val keyframes: List = emptyList(), + val imports: List = emptyList(), + val variables: List = emptyList(), + val sets: List = emptyList(), +) + +/** + * `$name { declarations }` at the top of a stylesheet: declarations a rule takes in with + * `@apply $name;`, the way several rules share one look (a scrollbar, a popup frame). + */ +data class HssDeclarationSet( + val name: String, + val declarations: List, + val nameStart: Int = -1, +) + +/** `@import "namespace:path.hss";`: the variables and rules of another stylesheet, taken in first. */ +data class HssImport( + val location: String, + val start: Int = -1, + val end: Int = -1, +) + +/** + * `$name: value;` at the top of a stylesheet. Any value, a variable's included, may name it as + * `$name`, and the name is replaced by the value before the declaration is compiled. + */ +data class HssVariable( + val name: String, + val value: String, + val nameStart: Int = -1, + val valueStart: Int = -1, ) data class HssRule( @@ -33,6 +64,12 @@ data class HssDeclaration( private fun rangeAt(start: Int, length: Int): IntRange? = if (start < 0) null else start until (start + length).coerceAtLeast(start + 1) + + val isApply: Boolean get() = property == APPLY + + companion object { + const val APPLY = "@apply" + } } data class HssKeyframes( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssCompiler.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssCompiler.kt index a3421c68f..30bd54a58 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssCompiler.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssCompiler.kt @@ -160,7 +160,17 @@ internal val HssDeclaration.canonicalProperty: String get() = HssSchema.find(property)?.name ?: property.lowercase() internal fun compileHss(source: String, origin: StyleOrigin = StyleOrigin.STYLESHEET): CompiledHss = - HssCompiler(origin).compile(parseHss(source)) + compileHss(parseHss(source), origin) + +/** Compiles [document] with its imports read and its variables written in. */ +internal fun compileHss( + document: HssDocument, + origin: StyleOrigin = StyleOrigin.STYLESHEET, + scope: HssScope = HssScope.of(document), +): CompiledHss { + scope.failures.firstOrNull()?.let { (import, reason) -> throw HssParseException(reason, import.start, import.end) } + return HssCompiler(origin).compile(document.resolved(scope)) +} /** Compiles a single `name: value` pair, as used by HSS-valued node attributes. */ internal fun compileStyleModifier(property: String, value: String): Modifier? = diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssImports.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssImports.kt new file mode 100644 index 000000000..150198eeb --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssImports.kt @@ -0,0 +1,127 @@ +package ru.hollowhorizon.hollowengine.client.ui.style + +import net.minecraft.resources.ResourceLocation +import ru.hollowhorizon.hollowengine.client.ui.HollowUiResourceAccess + +/** Reads the text of a stylesheet an `@import` names, or null when there is none. */ +fun interface HssImportReader { + fun read(location: String): String? +} + +/** + * Where imported stylesheets come from: the resource packs and the project folder, the way every + * stylesheet is read, and the classpath when there is no game around (tests, tools). + */ +object HssImports { + var reader: HssImportReader = HssImportReader { location -> + val id = ResourceLocation.tryParse(location) ?: return@HssImportReader null + runCatching { HollowUiResourceAccess.readText(id) }.getOrNull() + ?: HssImports::class.java.getResourceAsStream("/assets/${id.namespace}/${id.path}") + ?.bufferedReader()?.use { it.readText() } + } +} + +/** A `$name` inside a value. */ +internal val HssVariableReference = Regex("""\$([A-Za-z_][A-Za-z0-9_-]*)""") + +/** + * What a stylesheet sees once its imports are read: every variable in scope, and the rules and + * keyframes the imports bring. Imports are read depth first and each only once, so two sheets that + * import the same palette, or a palette imported in a cycle, are not read twice. + */ +class HssScope internal constructor( + val variables: Map, + val sets: Map, + val importedRules: List, + val importedKeyframes: List, + val imported: List, + val failures: List>, +) { + /** + * [value] with every variable written in, variables inside variables included. A name that is + * not in scope, or that refers back to itself, is left as it is and fails where it is used. + */ + fun substitute(value: String): String = substitute(value, HashSet()) + + /** + * [declarations] with every `@apply $set;` replaced by the set's declarations, sets inside sets + * included, and every value with its variables written in. + */ + fun expand(declarations: List): List = expand(declarations, HashSet()) + + private fun expand(declarations: List, applying: MutableSet): List = + declarations.flatMap { declaration -> + if (!declaration.isApply) return@flatMap listOf(declaration.copy(value = substitute(declaration.value))) + val name = declaration.value.trim().removePrefix("$") + val set = sets[name] ?: return@flatMap emptyList() + if (!applying.add(name)) return@flatMap emptyList() + expand(set.declarations, applying).also { applying.remove(name) } + } + + private fun substitute(value: String, visiting: MutableSet): String { + if ('$' !in value) return value + return HssVariableReference.replace(value) { match -> + val name = match.groupValues[1] + val variable = variables[name] + if (variable == null || !visiting.add(name)) return@replace match.value + substitute(variable.value, visiting).also { visiting.remove(name) } + } + } + + companion object { + /** The scope of [document], reading its imports with [reader]. */ + fun of(document: HssDocument, reader: HssImportReader = HssImports.reader): HssScope { + val variables = LinkedHashMap() + val sets = LinkedHashMap() + val rules = ArrayList() + val keyframes = ArrayList() + val read = LinkedHashSet() + val failures = ArrayList>() + + fun visit(imports: List) { + for (import in imports) { + if (!read.add(import.location)) continue + val text = reader.read(import.location) + if (text == null) { + failures += import to "No stylesheet '${import.location}'" + continue + } + val imported = try { + parseHss(text) + } catch (error: HssParseException) { + failures += import to "'${import.location}' does not parse: ${error.messageText}" + continue + } + visit(imported.imports) + imported.variables.forEach { variables[it.name] = HssScopedVariable(it.name, it.value, import.location) } + imported.sets.forEach { sets[it.name] = it } + rules += imported.rules + keyframes += imported.keyframes + } + } + + visit(document.imports) + document.variables.forEach { variables[it.name] = HssScopedVariable(it.name, it.value, null) } + document.sets.forEach { sets[it.name] = it } + return HssScope(variables, sets, rules, keyframes, read.toList(), failures) + } + } +} + +/** A variable in scope, and the stylesheet it came from; null for the stylesheet itself. */ +data class HssScopedVariable(val name: String, val value: String, val source: String?) + +/** + * The document ready to compile: the imported rules first, as if they were written at the top, and + * every value with its variables written in. + */ +fun HssDocument.resolved(scope: HssScope = HssScope.of(this)): HssDocument { + val imported = scope.importedRules.mapIndexed { index, rule -> rule.copy(order = index) } + val own = rules.map { rule -> rule.copy(order = imported.size + rule.order) } + return HssDocument( + rules = (imported + own).map { rule -> rule.copy(declarations = scope.expand(rule.declarations)) }, + keyframes = (scope.importedKeyframes + keyframes).map { keyframes -> + keyframes.copy(frames = keyframes.frames.map { frame -> frame.copy(declarations = scope.expand(frame.declarations)) }) + }, + ) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssParser.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssParser.kt index 2bf7fb375..ad120cb12 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssParser.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssParser.kt @@ -36,11 +36,22 @@ class HssParser(private val source: String) { private fun parseDocument(): HssDocument { val rules = mutableListOf() val keyframes = mutableListOf() + val imports = mutableListOf() + val variables = mutableListOf() + val sets = mutableListOf() skipIgnored() while (!isEnd()) { val start = index try { - if (peek() == '@') keyframes += parseAtRule() else rules += parseRule() + when { + peekAhead("@import") -> imports += parseImport() + peek() == '@' -> keyframes += parseAtRule() + peek() == '$' -> when (val parsed = parseVariableOrSet()) { + is HssVariable -> variables += parsed + is HssDeclarationSet -> sets += parsed + } + else -> rules += parseRule() + } } catch (exception: HssParseException) { if (!recovering) throw exception errors += exception @@ -49,7 +60,48 @@ class HssParser(private val source: String) { if (index == start) index++ skipIgnored() } - return HssDocument(rules, keyframes) + return HssDocument(rules, keyframes, imports, variables, sets) + } + + private fun parseImport(): HssImport { + val start = index + expect('@') + readIdentifier() + skipIgnored() + val quote = if (isEnd()) ' ' else peek() + if (quote != '"' && quote != '\'') throw HssParseException("Expected the quoted stylesheet to import", start, index + 1) + val valueStart = ++index + while (!isEnd() && peek() != quote) index++ + if (isEnd()) throw HssParseException("Unterminated import", valueStart - 1, index) + val location = source.substring(valueStart, index) + index++ + endStatement() + return HssImport(location, valueStart, valueStart + location.length) + } + + /** `$name: value;` is a variable, `$name { … }` a set of declarations. */ + private fun parseVariableOrSet(): Any { + val start = index + expect('$') + val name = readIdentifier() + val token = HssToken("$" + name.text, start, name.end) + skipIgnored() + if (!isEnd() && peek() == '{') { + expect('{') + val declarations = parseDeclarations() + expect('}') + return HssDeclarationSet(name.text, declarations, start) + } + expect(':', "Expected ':' or '{' after '${token.text}'", token) + val value = readDeclarationValue(token) + endStatement() + return HssVariable(name.text, value.text, start, value.start) + } + + /** A top-level statement may end in `;`, which is optional before the next one. */ + private fun endStatement() { + skipIgnored() + if (!isEnd() && peek() == ';') index++ } private fun parseRule(): HssRule { @@ -226,6 +278,12 @@ class HssParser(private val source: String) { } private fun parseDeclaration(): HssDeclaration { + if (peekAhead(HssDeclaration.APPLY)) { + val start = index + index += HssDeclaration.APPLY.length + val value = readDeclarationValue(HssToken(HssDeclaration.APPLY, start, index)) + return HssDeclaration(HssDeclaration.APPLY, value.text, start, value.start) + } val property = readPropertyName() expect(':', "Expected ':' after '${property.text}'", property) val value = readDeclarationValue(property) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssSyntax.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssSyntax.kt index 8dfeabd77..f90fa790d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssSyntax.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssSyntax.kt @@ -12,7 +12,7 @@ enum class HssValueKind(val display: String, val candidates: List = empt PIXELS("px", listOf("0px", "2px", "4px", "8px", "16px")), NUMBER("number", listOf("0", "0.5", "1")), INTEGER("int", listOf("0", "1", "2")), - COLOR("color", listOf("#FFFFFF", "#000000", "transparent", "white", "black", "rgba(255, 255, 255, 1)")), + COLOR("color", listOf("#FFFFFF", "#000000", "transparent", "white", "black", "rgba(255, 255, 255, 1)", "alpha(#FFFFFF, 0.5)")), PAINT( "paint", listOf( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssTextProperties.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssTextProperties.kt index fc89951bf..82cd3625d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssTextProperties.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssTextProperties.kt @@ -90,13 +90,13 @@ internal fun textHssProperties(): List = hssProperties { property( "caret-color", "text-field-caret", - summary = "Colour of the text-field caret.", + summary = "Color of the text-field caret.", syntax = colorSyntax("color"), ) { style { it.textField = it.textFieldStyle().copy(caretColor = parseColor(value)) } } property( "selection-color", "text-selection", - summary = "Colour of the text-field selection highlight.", + summary = "Color of the text-field selection highlight.", syntax = colorSyntax("color"), ) { style { it.textField = it.textFieldStyle().copy(selectionColor = parseColor(value)) } } @@ -114,7 +114,7 @@ internal fun textHssProperties(): List = hssProperties { property( "line-number-color", - summary = "Colour of the code-editor line numbers.", + summary = "Color of the code-editor line numbers.", syntax = colorSyntax("color"), ) { style { it.textField = it.textFieldStyle().copy(lineNumberColor = parseColor(value)) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssValues.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssValues.kt index 90d3f5590..314433311 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssValues.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssValues.kt @@ -269,6 +269,13 @@ private fun parseGradientStops(args: List): List { fun parseColor(value: String): UiColor { val cleaned = value.trim() + if (cleaned.startsWith("alpha(")) { + val args = functionArgs(cleaned, "alpha") + require(args.size == 2) { "Expected alpha(color, opacity), got '$value'" } + val base = parseColor(args[0]) + val opacity = args[1].trim().let { if (it.endsWith("%")) it.dropLast(1).toFloat() / 100f else it.toFloat() } + return UiColor(base.red, base.green, base.blue, base.alpha * opacity) + } if (cleaned.startsWith("rgba(")) { val args = functionArgs(cleaned, "rgba").map { it.trim().toFloat() } return UiColor(args[0] / 255f, args[1] / 255f, args[2] / 255f, args.getOrElse(3) { 1f }) @@ -355,11 +362,11 @@ internal fun parseMask(value: String): UiFilterEffect.LinearMask? { */ private fun parseLinearMask(args: String): UiFilterEffect.LinearMask { val parts = splitTopLevel(args, ',').map { it.trim() }.filter { it.isNotEmpty() } - require(parts.isNotEmpty()) { "linear-gradient() needs at least one colour stop" } + require(parts.isNotEmpty()) { "linear-gradient() needs at least one color stop" } val angle = parseGradientAngle(parts.first()) val stopParts = if (angle != null) parts.drop(1) else parts - require(stopParts.isNotEmpty()) { "linear-gradient() needs at least one colour stop" } + require(stopParts.isNotEmpty()) { "linear-gradient() needs at least one color stop" } val positions = arrayOfNulls(stopParts.size) val alphas = FloatArray(stopParts.size) @@ -616,6 +623,7 @@ internal fun looksLikeColor(value: String): Boolean { val cleaned = value.trim().lowercase() return cleaned.startsWith("rgba(") || cleaned.startsWith("rgb(") || + cleaned.startsWith("alpha(") || cleaned.startsWith("#") || cleaned == "transparent" || cleaned == "white" || diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt index ea05b904a..a107e2f23 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssVisualProperties.kt @@ -15,7 +15,7 @@ private fun colorSlot(name: String = "color") = slot(name, HssValueKind.COLOR) internal fun visualHssProperties(): List = hssProperties { property( "background", - summary = "Fill drawn behind the node: colour, image, shader or gradient.", + summary = "Fill drawn behind the node: color, image, shader or gradient.", syntax = syntax(paintSlot()), examples = listOf("#1E2128", "transparent", "image(\"\")", "linear-gradient(180deg, #000000, #FFFFFF)"), ) { set(UiProps.Background, parsePaint(value)) } @@ -29,7 +29,7 @@ internal fun visualHssProperties(): List = hssProperties { property( "foreground", "color", - summary = "Text and icon colour; inherited by children.", + summary = "Text and icon color; inherited by children.", syntax = syntax(colorSlot()), examples = listOf("#FFFFFF", "#cbd3df", "rgba(255, 255, 255, 0.7)"), ) { style { it.foreground = parseColor(value) } } @@ -67,7 +67,7 @@ internal fun visualHssProperties(): List = hssProperties { property( "border-color", - summary = "Border fill: a colour, or a gradient stroked around the node.", + summary = "Border fill: a color, or a gradient stroked around the node.", syntax = syntax(paintSlot("color")), examples = listOf("#5F6677", "linear-gradient(120deg, #9BF763, #70A832)"), ) { style { it.borderPaint = parsePaint(value) } } @@ -127,7 +127,7 @@ internal fun visualHssProperties(): List = hssProperties { property( "tint", - summary = "Colour multiplied into everything the node draws; stacks across states.", + summary = "Color multiplied into everything the node draws; stacks across states.", syntax = syntax(colorSlot("tint")), examples = listOf("#FFFFFF", "rgba(255, 255, 255, 0.75)"), ) { set(UiProps.Tint, parseColor(value)) } @@ -333,8 +333,7 @@ private fun HssPropertyBuilder.axisProperty( } /** - * Declares a single-edge border. The width is per edge, the colour is shared by the whole - * border — the engine keeps one border colour — so the last declared colour wins. + * Declares a single-edge border. The width is per edge, the color is shared by the whole border. */ private fun HssPropertyBuilder.borderEdge( name: String, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt index 582e61d5f..1384d8f66 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/HssWidgetProperties.kt @@ -204,7 +204,7 @@ internal fun widgetHssProperties(): List = hssProperties { property( "checkbox-mark", - summary = "Colour of the check mark.", + summary = "Color of the check mark.", syntax = syntax(slot("paint", HssValueKind.PAINT)), ) { style { it.checkbox = (it.checkbox ?: UiCheckboxStyle()).copy(markPaint = parsePaint(value)) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiResolver.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiResolver.kt index 6d2bd535b..a86c14269 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiResolver.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiResolver.kt @@ -117,7 +117,7 @@ class UiModifierResolver( node.resolvedSnapshot = finalStyle // Fingerprint the transitioned + animated style, not the base: an animation on a // layout prop (size/padding/transform) must bump the layout revision so the frame rebuilds - // it, while a draw-only animation (colour/opacity) leaves the fingerprint and the layout untouched. + // it, while a draw-only animation (color/opacity) leaves the fingerprint and the layout untouched. node.layoutState.updateResolvedLayoutFingerprint(finalStyle.layoutFingerprint()) val modifierRefresh = finalStyle.requiresModifierRefresh() if (!requiresRefresh && modifierRefresh) requiresRefresh = true diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStylesheetReference.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStylesheetReference.kt index f55061d33..e05515144 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStylesheetReference.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/style/UiStylesheetReference.kt @@ -56,9 +56,17 @@ sealed interface UiStylesheetReference { object MinecraftHssResourceLoader : HssResourceLoader { private val locations = ConcurrentHashMap() private val stylesheets = ConcurrentHashMap() + + /** What each stylesheet imported when it was last compiled, so editing an import reloads it too. */ + private val imports = ConcurrentHashMap>() + private val source = object : HssResourceLoader { - override fun load(location: String): CompiledHss = - compileHss(HollowUiResourceAccess.readText(resourceLocation(location))) + override fun load(location: String): CompiledHss { + val document = parseHss(HollowUiResourceAccess.readText(resourceLocation(location))) + val scope = HssScope.of(document) + imports[location] = scope.imported + return compileHss(document, scope = scope) + } override fun version(location: String): Long = MinecraftHssResourceLoader.version(location) } @@ -68,7 +76,11 @@ object MinecraftHssResourceLoader : HssResourceLoader { } override fun version(location: String): Long { - return HollowUiResourceAccess.version(resourceLocation(location)) + var version = HollowUiResourceAccess.version(resourceLocation(location)) + imports[location]?.forEach { imported -> + version = version * 31L + HollowUiResourceAccess.version(resourceLocation(imported)) + } + return version } private fun resourceLocation(location: String): ResourceLocation = diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiVanillaFont.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiVanillaFont.kt index dd116f687..c96ea7f99 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiVanillaFont.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiVanillaFont.kt @@ -236,7 +236,7 @@ object UiVanillaFont { val glyphs = HashMap() val coloredSheets = HashSet() - /** Pixel size of each sheet, so the renderer can sample texel centres rather than cell seams. */ + /** Pixel size of each sheet, so the renderer can sample texel centers rather than cell seams. */ val sheetSizes = HashMap() } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt index 888cf7668..0be6a7df2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/ExpressionEditing.kt @@ -9,7 +9,7 @@ import ru.hollowhorizon.hollowengine.common.utils.expressions.Severity import ru.hollowhorizon.hollowengine.common.utils.expressions.TokenType /** - * What a text field needs to edit an expression of one dialect: colours for its tokens, the names it + * What a text field needs to edit an expression of one dialect: colors for its tokens, the names it * can complete, and the dialect's own diagnostics. Every editor that takes an expression (the * animator, the effect editor) builds one from its [Expression] and hands the three to its field. */ @@ -93,7 +93,7 @@ class ExpressionEditing(private val language: Expression) { } } -/** The colours of expression tokens, the same in every editor that shows an expression. */ +/** The colors of expression tokens, the same in every editor that shows an expression. */ object ExpressionTokenColors { val Number = UiColor(0.72f, 0.62f, 0.92f) val String = UiColor(0.62f, 0.82f, 0.55f) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/TextFieldState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/TextFieldState.kt index 71ea194ed..0da5f61ff 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/TextFieldState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/TextFieldState.kt @@ -12,7 +12,7 @@ import ru.hollowhorizon.hollowengine.client.ui.text.Shadow * Compose-observable holder for an editable text field. Owns the whole edit model - text plus a * list of carets/selections, and exposes edit operations directly. [caretRanges] is the single * source of truth; the primary caret is always the last range. Also carries the field's view - * config (font, wrap, colours) so the widget itself stays a thin `EditableTextField(state)`. + * config (font, wrap, colors) so the widget itself stays a thin `EditableTextField(state)`. */ class TextFieldState( initialText: String = "", diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt index 0dbdf62c8..1b9ebb341 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt @@ -107,7 +107,7 @@ internal fun editableFieldCompletionGeometry( return EditableFieldCompletionGeometry(x, y, width, height, listHeight, rowHeight, visibleRows, footerHeight) } -/** The keys that drive the list, one row under it, centred in the height the geometry gave it. */ +/** The keys that drive the list, one row under it, centered in the height the geometry gave it. */ @Composable private fun CompletionPopupHint(height: Float) { Row(tags = listOf("ide-completion-hint"), modifier = Modifier.size(100.percent, height.px)) { @@ -430,7 +430,7 @@ private val CompletionMatchColor = parseColor("#6CB6FF") private const val CompletionFadeWidth = 16f private const val CompletionFadeDurationMillis = 300L private const val CompletionFadeOvershoot = 2f -/** The row colours of .ide-completion-row, flattened onto .ide-completion-popup, for the overflow fades. */ +/** The row colors of .ide-completion-row, flattened onto .ide-completion-popup, for the overflow fades. */ private val CompletionPopupBg = parseColor("#26282E") private val CompletionSelectedBg = UiColor(110f / 255f, 155f / 255f, 220f / 255f, 0.24f).over(CompletionPopupBg) private val CompletionSelectedHoverBg = UiColor(110f / 255f, 155f / 255f, 220f / 255f, 0.30f).over(CompletionPopupBg) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTextEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTextEditor.kt index d1de98f33..83a5cbc3b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTextEditor.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiTextEditor.kt @@ -169,7 +169,7 @@ sealed interface UiInlayContent { data class Icon(val source: String) : UiInlayContent - /** A solid colour chip in `0xAARRGGBB`, drawn over a checkerboard so alpha reads. */ + /** A solid color chip in `0xAARRGGBB`, drawn over a checkerboard so alpha reads. */ data class Swatch(val argb: Int) : UiInlayContent } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt index 1993f028a..86cb45af8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticleLook.kt @@ -7,10 +7,10 @@ import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value /** - * The size, turn and colour one renderer gives the particles of the emitter it sits under. + * The size, turn and color one renderer gives the particles of the emitter it sits under. */ class VfxParticleLook(spec: VfxAppearance, node: VfxNodeRuntime, particles: VfxParticles) { - /** [STRIDE] floats per particle: size, rotation in degrees, then colour. */ + /** [STRIDE] floats per particle: size, rotation in degrees, then color. */ val data: FloatArray = particles.channel("look:${node.spec.id}", STRIDE) private val uniformSize = spec.uniformSize diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt index 6dc0f3115..a718e02a3 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt @@ -38,7 +38,7 @@ class VfxParticles(val capacity: Int) { private class Channel(val stride: Int, val data: FloatArray) /** - * A private array of a module or a renderer (a renderer keeps the size and colour it gives each + * A private array of a module or a renderer (a renderer keeps the size and color it gives each * particle in one, see [VfxParticleLook]), created on first use, [stride] floats per particle * that move with it when it changes slots. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt index c5ff84afa..ccd585f68 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbons.kt @@ -140,7 +140,7 @@ class VfxTrailRenderer(private val spec: VfxTrailSpec, node: VfxNodeRuntime) : V private val points: FloatArray? = source?.particles?.channel("trail:${spec.id}:points", maxPoints * 4) - /** The colour this trail gives each particle; only the colour, a trail has a width of its own. */ + /** The color this trail gives each particle; only the color, a trail has a width of its own. */ private val look: FloatArray? = source?.let { emitter -> VfxParticleLook(spec.particle, node, emitter.particles).also(emitter::addLook).data } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt index 2b31c461b..14aaf429c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxSurfaceNodes.kt @@ -23,7 +23,7 @@ import ru.hollowhorizon.hollowengine.common.vfx.VfxSurfaceSpec /** * What every renderer node shares: the particles it draws, the look it gives them, and its tint. * - * Under an emitter those are the emitter's particles, sized and coloured by a [VfxParticleLook] of + * Under an emitter those are the emitter's particles, sized and colored by a [VfxParticleLook] of * this node. Anywhere else the node draws one particle of its own, a unit one at its origin, so the * same draw path covers both. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssCompletions.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssCompletions.kt index c112c27d2..db7d8b38e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssCompletions.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssCompletions.kt @@ -18,6 +18,8 @@ internal fun hssCompletions(text: String, offset: Int): List { val model = HssDocumentModel(text) val state = HssLexer(before, model.keyframeNames).scanState() + VariablePrefix.find(before)?.let { reference -> return variableCompletions(reference.groupValues[1], model) } + return when (state.region) { HssRegion.VALUE -> valueCompletions(before, caret, state.property, state.valueStart, model) HssRegion.PROPERTY -> propertyCompletions(identifierPrefix(before)) @@ -28,6 +30,28 @@ internal fun hssCompletions(text: String, offset: Int): List { private val KeyframeSelectors = listOf("from", "to", "0%", "25%", "50%", "75%", "100%") +/** A `$name` being typed in a value. */ +private val VariablePrefix = Regex("""\$([A-Za-z0-9_-]*)$""") + +/** The variables and sets in scope, each with what it stands for. */ +private fun variableCompletions(prefix: String, model: HssDocumentModel): List { + val variables = model.scope.variables.values.map { Triple(it.name, ": " + it.value, it.source ?: "this stylesheet") } + val sets = model.scope.sets.values.map { Triple(it.name, " { … }", "set") } + return (variables + sets) + .filter { (name, _, _) -> completionMatches(prefix, name) } + .map { (name, value, source) -> + declarationCompletionItem { + show = "$" + name + insert = name + this.name = name + tag = CompletionItemTag.PROPERTY + fqName = null + middle = value + tail = source + } + } +} + private fun propertyCompletions(prefix: String): List = HssSchema.properties .flatMap { property -> property.namesFor(prefix).map { property to it } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDiagnostics.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDiagnostics.kt index 7aa36cf91..f038d9bc9 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDiagnostics.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDiagnostics.kt @@ -2,6 +2,7 @@ package ru.hollowhorizon.hollowengine.common.scripting.ide.ui import ru.hollowhorizon.hollowengine.client.ui.style.HssDeclaration import ru.hollowhorizon.hollowengine.client.ui.style.HssSchema +import ru.hollowhorizon.hollowengine.client.ui.style.HssVariableReference import ru.hollowhorizon.hollowengine.client.ui.style.HssValueKind import ru.hollowhorizon.hollowengine.client.ui.toStylePatch import ru.hollowhorizon.hollowengine.common.scripting.ide.Diagnostic @@ -22,6 +23,12 @@ internal fun hssDiagnostics(text: String): List { for (error in model.errors) { diagnostics += offsets.diagnostic(error.position, error.endPosition, Severity.ERROR, error.messageText) } + for ((import, reason) in model.scope.failures) { + if (import.start >= 0) diagnostics += offsets.diagnostic(import.start, import.end, Severity.ERROR, reason) + } + for (variable in model.variables) { + diagnostics += unknownVariables(variable.value, variable.valueStart, model, offsets) + } for (declaration in model.declarations) { diagnostics += declarationDiagnostics(declaration, model, offsets) } @@ -34,6 +41,7 @@ private fun declarationDiagnostics( offsets: LineOffsets, ): List { val propertyRange = declaration.propertyRange ?: return emptyList() + if (declaration.isApply) return unknownSet(declaration, model, offsets) val property = HssSchema.find(declaration.property) ?: return listOf( offsets.diagnostic( @@ -45,11 +53,13 @@ private fun declarationDiagnostics( ) val valueRange = declaration.valueRange ?: return emptyList() + val unknown = unknownVariables(declaration.value, declaration.valueStart, model, offsets) + if (unknown.isNotEmpty()) return unknown val diagnostics = ArrayList() try { // Most properties parse their value lazily inside the patch writer, so the value is // only really checked once the modifier is applied to a patch. - property.compile(declaration.value.trim())?.let { listOf(it).toStylePatch() } + property.compile(model.scope.substitute(declaration.value).trim())?.let { listOf(it).toStylePatch() } } catch (exception: IllegalArgumentException) { diagnostics += offsets.diagnostic( valueRange.first, @@ -69,6 +79,31 @@ private fun declarationDiagnostics( return diagnostics } +/** `@apply $name;` naming a set that neither this stylesheet nor its imports declare. */ +private fun unknownSet(declaration: HssDeclaration, model: HssDocumentModel, offsets: LineOffsets): List { + val range = declaration.valueRange ?: return emptyList() + val name = declaration.value.trim().removePrefix("$") + if (name in model.scope.sets) return emptyList() + return listOf( + offsets.diagnostic(range.first, range.last + 1, Severity.ERROR, "No set '$$name' in this stylesheet or its imports"), + ) +} + +/** Every `$name` in [value] that no variable in scope answers to. */ +private fun unknownVariables(value: String, valueStart: Int, model: HssDocumentModel, offsets: LineOffsets): List { + if (valueStart < 0) return emptyList() + return HssVariableReference.findAll(value) + .filter { it.groupValues[1] !in model.scope.variables } + .map { match -> + offsets.diagnostic( + valueStart + match.range.first, + valueStart + match.range.last + 1, + Severity.ERROR, + "No variable '${match.value}' in this stylesheet or its imports", + ) + }.toList() +} + /** Flags `animations: fade …` when no `@keyframes fade` exists in the document. */ private fun keyframeDiagnostics( declaration: HssDeclaration, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDocumentModel.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDocumentModel.kt index 72547c49d..90af7a346 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDocumentModel.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssDocumentModel.kt @@ -1,9 +1,12 @@ package ru.hollowhorizon.hollowengine.common.scripting.ide.ui import ru.hollowhorizon.hollowengine.client.ui.style.HssDeclaration +import ru.hollowhorizon.hollowengine.client.ui.style.HssImport import ru.hollowhorizon.hollowengine.client.ui.style.HssParseException import ru.hollowhorizon.hollowengine.client.ui.style.HssParseResult +import ru.hollowhorizon.hollowengine.client.ui.style.HssScope import ru.hollowhorizon.hollowengine.client.ui.style.HssSelector +import ru.hollowhorizon.hollowengine.client.ui.style.HssVariable import ru.hollowhorizon.hollowengine.client.ui.style.parseHssRecovering /** @@ -16,11 +19,21 @@ internal class HssDocumentModel(val text: String) { val errors: List get() = result.errors - val keyframeNames: Set = result.document.keyframes.mapTo(LinkedHashSet()) { it.name } + /** The variables in scope, imported ones included, and what the imports could not read. */ + val scope: HssScope = HssScope.of(result.document) + + /** The document's own `$name: value` declarations. */ + val variables: List = result.document.variables + + val imports: List = result.document.imports + + val keyframeNames: Set = (result.document.keyframes + scope.importedKeyframes) + .mapTo(LinkedHashSet()) { it.name } /** Every declaration in the document, rules and keyframes alike, in source order. */ val declarations: List = buildList { result.document.rules.forEach { addAll(it.declarations) } + result.document.sets.forEach { addAll(it.declarations) } result.document.keyframes.forEach { keyframes -> keyframes.frames.forEach { addAll(it.declarations) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssInlayHints.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssInlayHints.kt index e43c2274c..3c4315ca7 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssInlayHints.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssInlayHints.kt @@ -1,5 +1,6 @@ package ru.hollowhorizon.hollowengine.common.scripting.ide.ui +import ru.hollowhorizon.hollowengine.client.ui.style.HssVariableReference import ru.hollowhorizon.hollowengine.client.ui.style.parseColor import ru.hollowhorizon.hollowengine.common.scripting.ide.InlayAction import ru.hollowhorizon.hollowengine.common.scripting.ide.InlayContent @@ -27,10 +28,32 @@ internal fun hssInlayHints(model: HssDocumentModel): List { } hints += locationHints(declaration.value, valueStart) hints += colorHints(declaration.value, valueStart) + hints += variableColorHints(declaration.value, valueStart, model) + } + for (variable in model.variables) { + if (variable.valueStart < 0) continue + hints += colorHints(variable.value, variable.valueStart) + hints += variableColorHints(variable.value, variable.valueStart, model) } return hints } +/** + * A variable that stands for a color shows that color in front of its name. It cannot be picked + * there: the color belongs to wherever the variable is declared. + */ +private fun variableColorHints(value: String, valueStart: Int, model: HssDocumentModel): List = + HssVariableReference.findAll(value).mapNotNull { match -> + val resolved = model.scope.substitute(match.value).trim() + val literal = hssColorLiterals(resolved).singleOrNull()?.takeIf { it.text.length == resolved.length } + ?: return@mapNotNull null + InlayHint( + index = valueStart + match.range.first, + content = listOf(InlayContent.Swatch(literal.argb)), + tags = listOf(InlayTags.COLOR), + ) + }.toList() + /** * Every color literal in a declaration value gets a clickable chip in front of it, so a stylesheet * shows the colors it actually paints and any of them can be re-picked without hand-writing hex. @@ -53,7 +76,7 @@ private fun colorHints(value: String, valueStart: Int): List = internal data class HssColorLiteral(val start: Int, val end: Int, val text: String, val argb: Int) private val ColorLiteralRegex = Regex( - """#[0-9a-fA-F]{6,8}\b|\brgba?\s*\([^)]*\)|\b(?:transparent|white|black)\b""", + """\balpha\s*\(\s*#[0-9a-fA-F]{6,8}\s*,[^)]*\)|#[0-9a-fA-F]{6,8}\b|\brgba?\s*\([^)]*\)|\b(?:transparent|white|black)\b""", ) internal fun hssColorLiterals(value: String): List = @@ -62,7 +85,7 @@ internal fun hssColorLiterals(value: String): List = HssColorLiteral(match.range.first, match.range.last + 1, match.value, color.toArgb()) }.toList() -/** Renders a picked colour back into a value the stylesheet parses: `#RRGGBB`, or `#RRGGBBAA`. */ +/** Renders a picked color back into a value the stylesheet parses: `#RRGGBB`, or `#RRGGBBAA`. */ internal fun hssColorLiteralText(argb: Int): String { val alpha = argb ushr 24 and 0xFF val rgb = "%06X".format(argb and 0xFFFFFF) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssLexer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssLexer.kt index 5e291d095..ccf305a87 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssLexer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssLexer.kt @@ -33,7 +33,7 @@ internal data class HssScanState( /** * Scanner behind HSS highlighting. It tracks block depth and `@keyframes` bodies, so a * keyframe selector (`from`, `50%`) is never mistaken for a property and the declarations - * nested two blocks deep keep their colours. + * nested two blocks deep keep their colors. * * Value tokens are classified against [UiLanguageCatalog], which means the keywords a * property accepts are highlighted as keywords without any list living here. @@ -48,6 +48,9 @@ internal class HssLexer( private var keyframesDepth = -1 private var pendingKeyframes = false private var inValue = false + + /** Between a top-level `$name` and its `:`, where the next `:` starts the variable's value. */ + private var pendingVariable = false private var property: String? = null private var valueStart = 0 private val spans = ArrayList() @@ -88,6 +91,7 @@ internal class HssLexer( } private fun region(): HssRegion = when { + inValue -> HssRegion.VALUE depth == 0 -> HssRegion.SELECTOR depth == keyframesDepth -> HssRegion.KEYFRAME_SELECTOR inValue -> HssRegion.VALUE @@ -98,6 +102,7 @@ internal class HssLexer( emit(index, index + 1, TokenType.DEFAULT) index++ inValue = false + pendingVariable = false property = null if (open) { depth++ @@ -137,7 +142,21 @@ internal class HssLexer( } private fun readSelectorToken() { + if (pendingVariable && text[index] == ':') { + emit(index, index + 1, TokenType.DEFAULT) + index++ + pendingVariable = false + inValue = true + property = null + valueStart = index + return + } when (val char = text[index]) { + '$' -> { + readVariable() + pendingVariable = true + } + '@' -> readAtRule() '.' -> readPrefixed(TokenType.FUNCTION) '#' -> readPrefixed(TokenType.EXTENSION_RECEIVER) @@ -186,6 +205,14 @@ internal class HssLexer( private fun readPropertyToken() { val char = text[index] when { + text.startsWith("@apply", index) -> { + emit(index, index + "@apply".length, TokenType.KEYWORD) + index += "@apply".length + inValue = true + property = null + valueStart = index + } + char == ':' -> { emit(index, index + 1, TokenType.DEFAULT) index++ @@ -207,6 +234,7 @@ internal class HssLexer( private fun readValueToken() { val char = text[index] when { + char == '$' -> readVariable() char == '"' || char == '\'' -> readString() char == '#' -> readWhile(TokenType.NUMERIC_LITERAL) { it.isLetterOrDigit() || it == '#' } char.isDigit() || (char == '-' && text.getOrNull(index + 1)?.isDigit() == true) -> @@ -217,6 +245,14 @@ internal class HssLexer( } } + /** `$name`, whether declared or used. */ + private fun readVariable() { + val start = index + index++ + while (index < text.length && isIdentifierPart(text[index])) index++ + emit(start, index, TokenType.VARIABLE) + } + private fun readValueWord() { val start = index while (index < text.length && isIdentifierPart(text[index])) index++ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt index 538c79fec..93374b893 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRendererSpecs.kt @@ -257,7 +257,7 @@ data class VfxTrailSpec( val maxPoints: Int = 32, val uvMode: VfxRibbonUv = VfxRibbonUv.STRETCH, val tileLength: Float = 1f, - /** Only the colour is read: a trail has a width of its own and no turn. */ + /** Only the color is read: a trail has a width of its own and no turn. */ override val particle: VfxAppearance = VfxAppearance(), ) : VfxSurfaceSpec(), VfxParticleRendererSpec { override fun withCommon( diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/add.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/add.svg index 8d88eaf25..2199c68c1 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/add.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/add.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/box.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/box.svg index 9ea29550a..67e964cf2 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/box.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/box.svg @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/code_editor.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/code_editor.svg index 7a6636fc1..f4bf09709 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/code_editor.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/code_editor.svg @@ -1,3 +1,6 @@ - - + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/console.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/console.svg index 1917040e0..7e279c408 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/console.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/console.svg @@ -1,10 +1,4 @@ - - - - - - - - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/copy.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/copy.svg index 915b1118f..bf839b3bb 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/copy.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/copy.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/cross.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/cross.svg index 473f2845c..6e1afe7d4 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/cross.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/cross.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/discord.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/discord.svg new file mode 100644 index 000000000..56e7447cf --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/discord.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/docs.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/docs.svg index bbfae43e1..56600cb7e 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/docs.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/docs.svg @@ -1,4 +1,7 @@ - - - - \ No newline at end of file + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/export.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/export.svg new file mode 100644 index 000000000..efb8681a9 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/export.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/film.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/film.svg index 07a4f57ff..026809c24 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/film.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/film.svg @@ -1,14 +1,7 @@ - - - - \ No newline at end of file + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/general.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/general.svg index 004eb33fa..468de83f2 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/general.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/general.svg @@ -1,4 +1,4 @@ - - - \ No newline at end of file + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/github.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/github.svg index 8507da072..c645d6b28 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/github.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/github.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/graph.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/graph.svg index 2f0f3effd..3a94b0bb0 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/graph.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/graph.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg index b15e5404f..7aa5741b0 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/info.svg @@ -1,3 +1,5 @@ - - + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/invisible.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/invisible.svg index 5f2cbdd86..42b70e704 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/invisible.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/invisible.svg @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyboard.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyboard.svg index 56922ab0f..b3f3185ad 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyboard.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/keyboard.svg @@ -1,6 +1,8 @@ - - - - + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/layers.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/layers.svg index 3b1ec1ae7..1b94a1592 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/layers.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/layers.svg @@ -1,12 +1,5 @@ - - - - - - - - - - - + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/link.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/link.svg index 0c830554f..1ffa8fbaf 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/link.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/link.svg @@ -1,15 +1,5 @@ - - - - + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/load.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/load.svg index 740ef0c36..d892493e4 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/load.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/load.svg @@ -1,22 +1,8 @@ - - - - - - + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg index 2db8e3021..5130d87e0 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg @@ -1,3 +1,3 @@ - - + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg index e503b6d8b..a71659992 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg @@ -1,3 +1,3 @@ - - - \ No newline at end of file + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/options.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/options.svg index 1a7e3206e..468de83f2 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/options.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/options.svg @@ -1,20 +1,4 @@ - - - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/paste.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/paste.svg index 92e423160..3df726476 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/paste.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/paste.svg @@ -1,5 +1,4 @@ - - - - \ No newline at end of file + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/pause.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/pause.svg index 3264da956..08d825caa 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/pause.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/pause.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/play.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/play.svg index ae4f11b68..4ff0675aa 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/play.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/play.svg @@ -1,3 +1,3 @@ - - + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/reload.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/reload.svg index f38a143e3..484d79769 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/reload.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/reload.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/remove.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/remove.svg index 4f1ee12a7..e1751264b 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/remove.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/remove.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/rename.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/rename.svg index 71672ae4d..38374041a 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/rename.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/rename.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save.svg index b4578897e..246160f77 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save.svg @@ -1,16 +1,5 @@ - - - - - + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save_all.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save_all.svg new file mode 100644 index 000000000..6a1c0a3be --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/save_all.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/search.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/search.svg index fac00c367..72284370e 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/search.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/search.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/stop.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/stop.svg new file mode 100644 index 000000000..a23e815e9 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/stop.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/telegram.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/telegram.svg new file mode 100644 index 000000000..5c41dd459 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/telegram.svg @@ -0,0 +1,3 @@ + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/visible.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/visible.svg index 9cc0ce543..2e70c4cd9 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/visible.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/visible.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/volume.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/volume.svg index b535d2a5f..bb4a4e37b 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/volume.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/volume.svg @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss index 2962a6da8..d45344e8f 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss @@ -1,79 +1,81 @@ +@import "hollowengine:ui/styles/theme.hss"; + .animator-button { size: 100% 22px; align-items: center; justify-content: center; padding: 4px 6px; - background: #2E323C; - border: 1px #FFFFFF1A; - border-radius: 3px; + background: $bg-selected; + border: 1px alpha($white, 0.1); + border-radius: $radius-small; cursor: hand; transition: background 250ms ease-out, border-color 250ms ease-out; } .animator-button:hover { - background: #3A404C; - border-color: #6B7385; + background: $bg-pressed; + border-color: $border-strong; } .animator-button-label { font-size: 9px; - foreground: #DCE0EB; + foreground: $text-strong; text-wrap: false; text-overflow: dots; } .animator-icon-button { padding: 3px; - background: #00000000; - border-radius: 3px; - tint: #aeb8ca; + background: transparent; + border-radius: $radius-small; + tint: $text-soft; cursor: hand; transition: background 110ms ease-out, tint 110ms ease-out; } .animator-icon-button:hover { - background: #2B2E35; - tint: #ffffff; + background: $bg-hover; + tint: $white; } .animator-icon-button.active { - background: #2E3544; - tint: #6E9BDC; + background: $bg-selected; + tint: $accent; } .animator-icon-button.active:hover { - background: #34405A; + background: $bg-selected; } .viewport-toolbar { padding: 2px; gap: 1px; - background: rgba(20, 21, 24, 0.86); - border-radius: 5px; + background: alpha($bg-window, 0.86); + border-radius: $radius; } .animator-pill { padding: 5px 3px; - background: #2E323C; - border: 1px #FFFFFF1A; - border-radius: 3px; + background: $bg-selected; + border: 1px alpha($white, 0.1); + border-radius: $radius-small; cursor: hand; transition: background 250ms ease-out, border-color 250ms ease-out; } .animator-pill:hover { - background: #3A404C; - border-color: #DCE0EB; + background: $bg-pressed; + border-color: $text-strong; } .animator-pill.active { - background: #6199EB; - border-color: #FFFFFF1A; + background: $accent-soft; + border-color: alpha($white, 0.1); } .animator-pill-label { font-size: 8px; - foreground: #DCE0EB; + foreground: $text-strong; text-wrap: false; } @@ -82,68 +84,68 @@ align-items: center; gap: 4px; padding: 4px; - background: #21242B; - border: 1px #FFFFFF1A; - border-radius: 3px; + background: $bg-field; + border: 1px alpha($white, 0.1); + border-radius: $radius-small; cursor: hand; transition: background 250ms ease-out, border-color 250ms ease-out; } .animator-layer-row:hover { - background: #2E323C; + background: $bg-hover; } .animator-layer-row.open { - background: #2E323C; + background: $row-selected; } .animator-layer-row.selected { - border-color: #EB9433; + border-color: $accent; } .animator-delete { size: 18px 18px; align-items: center; justify-content: center; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; cursor: hand; transition: background 250ms ease-out; } .animator-delete:hover { - background: #D95757; + background: $danger; } .animator-delete-label { font-size: 11px; - foreground: #D95757; + foreground: $danger; transition: foreground 250ms ease-out; } .animator-delete:hover .animator-delete-label { - foreground: #DCE0EB; + foreground: $text-strong; } .animator-splitter { size: 4px 100%; - background: #FFFFFF1A; + background: alpha($white, 0.1); cursor: resize-horizontal; transition: background 250ms ease-out; } .animator-splitter:hover { - background: #6199EB; + background: $accent; } .animator-node { - border-radius: 5px; + border-radius: $radius; cursor: hand; transition: border-color 250ms ease-out; } .animator-node:hover { - border-color: #C4CBD9; + border-color: $text; } .animator-minimap-mark { @@ -154,18 +156,18 @@ .animator-edge-label { padding: 3px; - background: #21242B; - border: 1px #FFFFFF1A; - border-radius: 3px; + background: $bg-field; + border: 1px alpha($white, 0.1); + border-radius: $radius-small; cursor: hand; transition: background 250ms ease-out, border-color 250ms ease-out; } .animator-edge-label:hover { - background: #2E323C; - border-color: #C4CBD9; + background: $bg-hover; + border-color: $text; } .animator-edge-label.selected { - border-color: #EB9433; + border-color: $accent; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss index 3573833ae..132da2090 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/asset-manager.hss @@ -1,8 +1,10 @@ +@import "hollowengine:ui/styles/theme.hss"; + .asset-manager-root { margin: 1px; padding: 0px; gap: 0px; - background: #1E2127; + background: $bg-field; clip: true; } @@ -10,7 +12,7 @@ min-width: 170px; gap: 3px; padding: 3px; - background: #24272E; + background: $bg-raised; } .asset-tabs { @@ -18,44 +20,44 @@ height: fit; gap: 1px; padding: 1px; - background: #1E2127; - border-radius: 4px; + background: $bg-field; + border-radius: $radius; } .asset-tab { align-items: center center; - border-radius: 3px; - foreground: #8f9bad; - background: #00000000; + border-radius: $radius-small; + foreground: $text-muted; + background: transparent; transition: all 120ms ease-out; } .asset-tab:hover { - background: #343943; + background: $bg-hover; } .asset-tab.selected { - foreground: #f0f6ff; - background: rgba(67, 106, 154, 0.62); + foreground: $caret; + background: $row-selected; } .asset-tab-label { height: fit; - font-size: 8px; + font-size: $font-size-small; wrap: false; } .asset-splitter { - background: #323846; + background: $bg-pressed; transition: background 100ms ease-out; } .asset-splitter:hover { - background: #5F6677; + background: $accent; } .asset-content { - background: #1E2127; + background: $bg-field; } .asset-toolbar { @@ -64,21 +66,21 @@ padding: 2px 5px; gap: 5px; align-items: start center; - background: #2A2E36; - border-bottom: 1px #323846; + background: $bg-hover; + border-bottom: 1px $bg-pressed; } .asset-breadcrumb { height: fit; - foreground: #d7deea; - font-size: 9px; + foreground: $text-strong; + font-size: $font-size; text-overflow: dots; } .asset-count { width: fit; - foreground: #687588; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; wrap: false; } @@ -86,18 +88,18 @@ min-width: 78px; min-height: 16px; padding: 1px 4px; - font-size: 8px; + font-size: $font-size-small; } .asset-refresh { size: 15px 15px; align-items: center center; - border-radius: 3px; + border-radius: $radius-small; transition: background 100ms ease-out, rotate 240ms ease-out; } .asset-refresh:hover { - background: #414653; + background: $bg-hover; } .asset-refresh.loading { @@ -106,20 +108,13 @@ .asset-refresh-icon { size: 9px 9px; - tint: #aeb8ca; + tint: $text-soft; } .asset-grid-scroll { width: 100%; padding: 6px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } .asset-grid { @@ -135,34 +130,35 @@ padding: 3px; gap: 2px; align-items: center start; - border: 1px #00000000; - border-radius: 5px; - background: #00000000; + border: 1px transparent; + border-radius: $radius; + background: transparent; transition: all 100ms ease-out; } .asset-tile:hover { - background: #2A2E36; - border: 1px #3a4351; + background: $bg-hover; + border: 1px $border; } .asset-tile.selected { - background: rgba(67, 106, 154, 0.42); - border: 1px #5f83b2; + background: $row-selected; + border: 1px $accent; } .asset-preview { size: 62px 55px; align-items: center center; - background: #17191e; - border: 1px #323846; - border-radius: 4px; + background: $bg-window; + border: 1px $bg-pressed; + border-radius: $radius; clip: true; } +/* The folder carries its own color, the same as in the project tree. */ .asset-folder-icon { - size: 42px 42px; - tint: #f4b942; + size: 38px 38px; + tint: $white; } .asset-file-icon { @@ -171,15 +167,15 @@ .asset-tile-name { align: center start; - foreground: #d7deea; - font-size: 8px; + foreground: $text-strong; + font-size: $font-size-small; wrap: false; text-overflow: dots; } .asset-pack-name { align: center start; - foreground: #687588; + foreground: $text-faint; font-size: 7px; text-overflow: dots; } @@ -191,24 +187,24 @@ .asset-message-text { max-width: 280px; height: fit; - foreground: #7f8a9d; - font-size: 9px; + foreground: $text-muted; + font-size: $font-size; align: center center; } .asset-filter-icon, .asset-filter-close { size: 11px 11px; - tint: #aeb8ca; + tint: $text-soft; } .asset-filter-input { min-height: 17px; padding: 1px 2px; - font-size: 9px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + font-size: $font-size; + caret-color: $caret; + selection-color: $selection; } .asset-filter-close:hover { - tint: #ffffff; + tint: $white; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/dialogue.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/dialogue.hss index 720ccc9e6..b4f0cf405 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/dialogue.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/dialogue.hss @@ -178,7 +178,7 @@ mask: linear-gradient(to bottom, transparent, white 26%, white 74%, transparent); } -/* Padded from the code, by half a viewport, so the first and last option can reach dead centre. */ +/* Padded from the code, by half a viewport, so the first and last option can reach dead center. */ #choice-list { size: fill fit; align-items: center start; @@ -255,7 +255,7 @@ .choice:hover .choice-text { color: #ffffff; } /* - * Multiplayer: after this player has voted the options they did not pick lose their colour and stop + * Multiplayer: after this player has voted the options they did not pick lose their color and stop * reacting, so it reads as "no longer yours to decide" rather than as a dead button. */ .choice:disabled { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss index cb39bfb69..d19a2c863 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss @@ -1,15 +1,19 @@ +/* The dock: windows, tab bars, splitters and side stripes. Colors come from theme.hss. */ + +@import "hollowengine:ui/styles/theme.hss"; + .dock-stack, .dock-window, .dock-content, .dock-splitter { - background: #141518; + background: $bg-window; } .dock-tab { - background: #00000000; - foreground: #8f9bad; - border-radius: 5px; + background: transparent; + foreground: $text-muted; + border-radius: $radius; align: start center; transition: background 120ms ease-out, @@ -24,12 +28,12 @@ } .dock-tab-indicator { - background: #00000000; + background: transparent; transition: background 120ms ease-out; } .dock-tab.selected .dock-tab-indicator { - background: #6E9BDC; + background: $accent; } .dock-tab-icon { @@ -43,20 +47,20 @@ scrollbar-thickness: 2px; scrollbar-margin: 0px; scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); + scrollbar-thumb: $scroll-thumb; + scrollbar-thumb-hover: alpha($text-soft, 0.6); scrollbar-hover-thickness: 3px; scrollbar-thumb-radius: 1px; } .dock-tab:hover { - background: #1C1E22; - foreground: #d7deea; + background: $bg-panel; + foreground: $text-strong; } .dock-tab.selected { - background: #1C1E22; - foreground: #f0f3f8; + background: $bg-panel; + foreground: $caret; } .dock-tab:dragging { @@ -65,39 +69,39 @@ .dock-close-button { margin: 0px 4px 0px 2px; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; transition: background 100ms ease-out; } .dock-close-button:hover { - background: rgba(255, 255, 255, 0.10); + background: $bg-hover; } .dock-close-icon { size: 8px 8px; - tint: #687588; + tint: $text-faint; transition: tint 100ms ease-out; } .dock-tab:hover .dock-close-icon, .dock-tab.selected .dock-close-icon { - tint: #aeb8ca; + tint: $text-soft; } .dock-close-button:hover .dock-close-icon { - tint: #ffffff; + tint: $white; } .dock-stripe { - background: #141518; + background: $bg-window; padding: 0px 0px; gap: 2px; transition: size 120ms ease-out; } .dock-stripe-button { - border-radius: 4px; + border-radius: $radius; scale: 0.75; opacity: 0.6; transition: @@ -107,19 +111,19 @@ } .dock-stripe-button:hover { - background: #2B2E35; + background: $bg-hover; scale: 0.95; opacity: 1; } .dock-stripe-button.dragging { - background: #2E3544; + background: $bg-selected; scale: 1; opacity: 1; } .dock-stripe-button.selected { - background: #2E3544; + background: $bg-selected; opacity: 1; } @@ -128,14 +132,14 @@ } .dock-pinned-panel { - background: #141518; + background: $bg-window; } .dock-pinned-island { size: fill fill; margin: 2px; - background: #1C1E22; - border-radius: 6px; + background: $bg-panel; + border-radius: $radius-large; clip: true; } @@ -149,30 +153,30 @@ } .dock-pinned-header { - padding: 0px 4px 0px 8px; + padding: 0px 4px 0px $panel-inset; gap: 6px; } .dock-pinned-header-icon { size: 12px 12px; - tint: #aeb8ca; + tint: $text-soft; } .dock-pinned-header-label { - foreground: #dfe4ec; + foreground: $text-strong; } .dock-stripe-divider { margin: 3px 0px; - background: #2B2E35; + background: $bg-hover; } .dock-drop-zone { padding: 3px; - background: rgba(110, 155, 220, 0.10); - border: 1px rgba(110, 155, 220, 0.32); - border-radius: 4px; + background: alpha($accent, 0.1); + border: 1px alpha($accent, 0.32); + border-radius: $radius; transition: background 100ms ease-out, border 100ms ease-out, @@ -181,8 +185,8 @@ } .dock-drop-zone.active { - background: rgba(110, 155, 220, 0.34); - border: 1px rgba(190, 215, 250, 0.95); + background: alpha($accent, 0.34); + border: 1px alpha($accent, 0.95); scale: 1.08; } @@ -192,19 +196,19 @@ } .dock-drop-zone-glyph { - background: rgba(190, 215, 250, 0.35); + background: alpha($accent, 0.35); border-radius: 2px; transition: background 100ms ease-out; } .dock-drop-zone.active .dock-drop-zone-glyph { - background: rgba(230, 240, 255, 0.85); + background: alpha($caret, 0.85); } .dock-drop-preview { - background: rgba(110, 155, 220, 0.14); - border: 1px rgba(110, 155, 220, 0.8); - border-radius: 6px; + background: alpha($accent, 0.14); + border: 1px alpha($accent, 0.8); + border-radius: $radius-large; opacity: 0; transition: translate 110ms cubic-bezier(0.2, 0.8, 0.2, 1), diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/entity-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/entity-editor.hss index 31ec66631..f9462c6ba 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/entity-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/entity-editor.hss @@ -1,8 +1,10 @@ +@import "hollowengine:ui/styles/theme.hss"; + .ee-root { size: fill fill; gap: 6px; padding: 6px; - background: rgba(16, 17, 20, 0.94); + background: alpha($bg-window, 0.94); } /* ---- preview ---- */ @@ -11,9 +13,9 @@ grow: 1; size: 0px 100%; min-size: 0px 0px; - background: #1E1F22; - border-radius: 6px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; clip: true; } @@ -26,15 +28,15 @@ max-size: 70% fit; layer: 1000; align-items: center center; - background: rgba(30, 32, 38, 0.9); - border-radius: 6px; - border: 1px #31343D; + background: alpha($bg-field, 0.9); + border-radius: $radius-large; + border: 1px $bg-selected; backdrop-filter: blur(9px); } .ee-title { size: fit fit; - foreground: #E4E9F4; + foreground: $text-strong; font-size: 12px; wrap: false; text-overflow: dots; @@ -42,7 +44,7 @@ .ee-subtitle { size: fit fit; - foreground: #8B93A5; + foreground: $text-muted; font-size: 9px; wrap: false; text-overflow: dots; @@ -59,28 +61,28 @@ .ee-chip { size: 26px 26px; align-items: center center; - background: rgba(36, 39, 46, 0.82); - border-radius: 7px; - border: 1px #31343D; + background: alpha($bg-raised, 0.82); + border-radius: $radius-large; + border: 1px $bg-selected; hoverable: true; clickable: true; transition: background 140ms ease-out, border 140ms ease-out; backdrop-filter: blur(9px); } -.ee-chip:hover { background: rgba(49, 52, 61, 0.88); } +.ee-chip:hover { background: $bg-hover; } .ee-chip.selected { - background: rgba(215, 127, 28, 0.72); - border: 1px #D77F1C; + background: $row-selected; + border: 1px $accent; } .ee-chip-icon { size: 15px 15px; - tint: #C4CBDA; + tint: $text; } -.ee-chip.selected .ee-chip-icon { tint: #1E1F22; } +.ee-chip.selected .ee-chip-icon { tint: $bg-panel; } .ee-stats { align: end start; @@ -90,9 +92,9 @@ size: fit fit; min-size: 150px 0px; layer: 1000; - background: rgba(36, 39, 46, 0.86); - border-radius: 7px; - border: 1px #31343D; + background: alpha($bg-raised, 0.86); + border-radius: $radius-large; + border: 1px $bg-selected; backdrop-filter: blur(9px); } @@ -104,14 +106,14 @@ .ee-stat-label { size: fit fit; - foreground: #8B93A5; + foreground: $text-muted; font-size: 9px; wrap: false; } .ee-stat-value { size: fit fit; - foreground: #D77F1C; + foreground: $accent; font-size: 9px; wrap: false; } @@ -120,14 +122,14 @@ .ee-splitter { size: 5px 100%; - background: rgba(95, 102, 119, 0.0); - border-radius: 3px; + background: transparent; + border-radius: $radius-small; hoverable: true; transition: background 140ms ease-out; } -.ee-splitter:hover { background: rgba(215, 127, 28, 0.55); } -.ee-splitter:dragging { background: #D77F1C; } +.ee-splitter:hover { background: $accent; } +.ee-splitter:dragging { background: $accent; } /* ---- sidebar ---- */ @@ -135,9 +137,9 @@ min-size: 240px 0px; gap: 6px; padding: 8px; - background: #24272E; - border-radius: 6px; - border: 1px #31343D; + background: $bg-raised; + border-radius: $radius-large; + border: 1px $bg-selected; clip: true; } @@ -150,7 +152,7 @@ .ee-header-title { size: fit fit; - foreground: #C4CBDA; + foreground: $text; font-size: 11px; wrap: false; text-overflow: dots; @@ -166,29 +168,29 @@ min-height: 24px; padding: 4px 8px; align-items: center center; - background: #1E1F22; - border-radius: 6px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; hoverable: true; clickable: true; transition: background 140ms ease-out, border 140ms ease-out; } -.ee-tab:hover { background: #2A2D35; } +.ee-tab:hover { background: $bg-hover; } .ee-tab.active { - background: rgba(215, 127, 28, 0.18); - border: 1px #D77F1C; + background: $row-selected; + border: 1px $accent; } .ee-tab-label { size: fit fit; - foreground: #C4CBDA; + foreground: $text; font-size: 9px; wrap: false; } -.ee-tab.active .ee-tab-label { foreground: #E8912E; } +.ee-tab.active .ee-tab-label { foreground: $accent; } .ee-search { size: 100% fit; @@ -196,14 +198,14 @@ gap: 6px; padding: 2px 6px; align-items: start center; - background: #1E1F22; - border-radius: 6px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; } .ee-search-icon { size: 12px 12px; - tint: #8B93A5; + tint: $text-muted; } .ee-sidebar-body { @@ -217,12 +219,12 @@ size: 100% fit; gap: 5px; padding: 7px; - background: #1E1F22; - border-radius: 7px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; } -.ee-card.virtual { border: 1px #3B4557; } +.ee-card.virtual { border: 1px $bg-selected; } .ee-card-head { size: 100% fit; @@ -235,12 +237,12 @@ .ee-card-icon { size: 13px 13px; - tint: #D77F1C; + tint: $accent; } .ee-card-title { size: fit fit; - foreground: #C4CBDA; + foreground: $text; font-size: 10px; wrap: false; text-overflow: dots; @@ -248,15 +250,15 @@ .ee-badge { size: fit fit; - foreground: #7C8AA5; + foreground: $text-muted; font-size: 8px; padding: 1px 5px; - background: rgba(59, 69, 87, 0.5); - border-radius: 4px; + background: alpha($bg-selected, 0.5); + border-radius: $radius; wrap: false; } -.ee-card-remove { tint: #C0564B; } +.ee-card-remove { tint: $danger; } .ee-card-body { size: 100% fit; @@ -274,9 +276,9 @@ size: 100% fit; gap: 5px; padding: 6px; - background: #1E1F22; - border-radius: 6px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; } .ee-add-list { @@ -289,22 +291,22 @@ gap: 6px; padding: 4px 5px; align-items: start center; - border-radius: 4px; + border-radius: $radius; hoverable: true; clickable: true; transition: background 140ms ease-out; } -.ee-add-row:hover { background: #2A2D35; } +.ee-add-row:hover { background: $bg-hover; } .ee-add-icon { size: 13px 13px; - tint: #8B93A5; + tint: $text-muted; } .ee-add-label { size: fit fit; - foreground: #C4CBDA; + foreground: $text; font-size: 9px; wrap: false; text-overflow: dots; @@ -312,7 +314,7 @@ .ee-add-id { size: fit fit; - foreground: #5F6677; + foreground: $border-strong; font-size: 8px; wrap: false; text-overflow: dots; @@ -322,19 +324,19 @@ .ee-section-title { size: 100% fit; - foreground: #D77F1C; + foreground: $accent; font-size: 10px; margin: 4px 0px 0px 0px; } .ee-script-icon { size: 14px 14px; - tint: #8B93A5; + tint: $text-muted; } .ee-script-name { size: fit fit; - foreground: #C4CBDA; + foreground: $text; font-size: 9px; wrap: false; text-overflow: dots; @@ -342,7 +344,7 @@ .ee-script-path { size: fit fit; - foreground: #5F6677; + foreground: $border-strong; font-size: 8px; wrap: false; text-overflow: dots; @@ -353,10 +355,10 @@ .ee-dialog { gap: 8px; padding: 12px; - background: #24272E; - border-radius: 8px; - border: 1px #5F6677; - shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.5); + background: $bg-raised; + border-radius: $radius-large; + border: 1px $border-strong; + shadow: 2px 2px 10px 0px $shadow; } .ee-dialog-head { @@ -367,7 +369,7 @@ .ee-dialog-title { size: fit fit; - foreground: #E4E9F4; + foreground: $text-strong; font-size: 11px; wrap: false; text-overflow: dots; @@ -375,9 +377,9 @@ .ee-asset-tree { width: 100%; - background: #1E1F22; - border-radius: 6px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; padding: 4px; } @@ -394,15 +396,15 @@ } .slot { - background: #16181C; - border-radius: 3px; - border: 1px #31343D; + background: $bg-window; + border-radius: $radius-small; + border: 1px $bg-selected; transition: background 140ms ease-out, border 140ms ease-out; } .slot:hover { - background: #2A2D35; - border: 1px #D77F1C; + background: $bg-hover; + border: 1px $accent; } .slot-carried { @@ -411,5 +413,5 @@ .ee-busy { size: 14px 14px; - tint: #D77F1C; + tint: $accent; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss index b95e53d17..695b94c00 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss @@ -6,17 +6,20 @@ * * Sizes: 9px for text, 8px for what is secondary, 11px for the title of a dialog. */ + +@import "hollowengine:ui/styles/theme.hss"; + #ide-root, .dropdown-popup, .ui-tooltip, .vfx-popup, #cutscene-dialog { - font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; - font-size: 9px; + font-family: $font; + font-size: $font-size; } .dropdown-popup .dropdown-item-shortcut { - font-size: 8px; + font-size: $font-size-small; } /* The vanilla drop shadow suits the pixel font only; under the code font it reads as a blur. */ @@ -29,20 +32,20 @@ } .project-tree-panel.drop-target { - background: rgba(88, 123, 174, 0.20); + background: alpha($accent, 0.2); } #ide-toolbar { size: 100% fit; - padding: 1px 4px 1px 2px; + padding: 1px 4px 1px 0px; gap: 2px; - background: #141518; + background: $bg-window; } #ide-logo { - size: 24px 24px; + size: $rail $rail; align-items: center center; - border-radius: 4px; + border-radius: $radius; rotate: 0 0 0; scale: 0.9; transition: all 420ms cubic-bezier(0.34, 1.56, 0.64, 1); @@ -56,72 +59,72 @@ .ide-toolbar-divider { size: 1px 14px; margin: 0px 6px; - background: #2B2E35; + background: $bg-hover; } .ide-toolbar-group { gap: 1px; - background: #1C1E22; - border-radius: 4px; + background: $bg-panel; + border-radius: $radius; } .ide-toolbar-button { size: fit fit; margin: 1px; padding: 4px; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; transition: background 110ms ease-out; } .ide-toolbar-button:hover { - background: #2B2E35; + background: $bg-hover; } .ide-toolbar-button.active { - background: #2E3544; + background: $bg-selected; } .ide-toolbar-button-icon { size: 13px 13px; - tint: #aeb8ca; + tint: $text-soft; transition: all 110ms ease-out; } .ide-toolbar-button:hover .ide-toolbar-button-icon, .ide-toolbar-button.active .ide-toolbar-button-icon { - tint: #ffffff; + tint: $white; } .ide-panel, .ide-empty-editor, .ide-editor-shell { size: fill fill; margin: 2px; - padding: 4px; - border-radius: 6px; + padding: $panel-inset; + border-radius: $radius-large; gap: 6px; - background: #1C1E22; + background: $bg-panel; } .ide-editor-shell { padding: 2px; - background: #212328; + background: $bg-field; } .ide-empty-editor { align-items: center center; - background: #212328; + background: $bg-field; } /* The game sits in the editor area like any editor: a rounded panel inside the tab bar's stack. */ .game-viewport { size: fill fill; margin: 2px; - border-radius: 6px; - background: #141518; + border-radius: $radius-large; + background: $bg-window; } .game-viewport-hint { - foreground: #8d96a8; + foreground: $text-muted; text-align: center; } @@ -130,33 +133,34 @@ padding: 0px 4px; gap: 4px; align-items: start center; - background: #212328; - border-radius: 4px; + background: $bg-field; + border-radius: $radius; } .project-filter-icon { size: 14px 14px; - tint: #FFFFFF; + tint: $white; } .project-filter { grow: 1; margin-top: 2px; align: center center; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + caret-color: $caret; + selection-color: $selection; } .ide-empty-title { - foreground: #8f9bad; + foreground: $text-muted; height: 18px; } +/* The first breadcrumb's icon sits on the rail, under the stripe buttons. */ #ide-status-bar { - padding: 0px 8px; + padding: 0px 8px 0px 1px; gap: 12px; align-items: start center; - background: #141518; + background: $bg-window; } .ide-breadcrumbs { @@ -169,21 +173,21 @@ padding: 0px 4px; gap: 4px; align-items: start center; - border-radius: 3px; - background: #00000000; - foreground: #8f9bad; + border-radius: $radius-small; + background: transparent; + foreground: $text-muted; transition: background 100ms ease-out, foreground 100ms ease-out; } .ide-breadcrumb.last { - foreground: #d7deea; + foreground: $text-strong; } .ide-breadcrumb.link:hover { - background: #2B2E35; - foreground: #f0f3f8; + background: $bg-hover; + foreground: $caret; } .ide-breadcrumb-icon { @@ -194,22 +198,22 @@ size: 8px 8px; shape: path("M 3 1 L 6 4 L 3 7", 8 8); fill: none; - stroke: #4f5968; + stroke: $text-faint; stroke-width: 1px; } .ide-status-message { max-width: 360px; - foreground: #aeb8ca; + foreground: $text-soft; } .ide-status-detail { wrap: false; - foreground: #8f9bad; + foreground: $text-muted; } .ide-status-detail.version { - foreground: #4f5968; + foreground: $text-faint; } .ide-shortcuts-dialog { @@ -219,49 +223,42 @@ .ide-shortcuts-content { gap: 3px; padding: 0px 8px 0px 0px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } .ide-shortcuts-title { margin-bottom: 4px; - font-size: 11px; - foreground: #F0F3F8; + font-size: $font-size-title; + foreground: $caret; } .ide-shortcuts-group { margin-top: 6px; - font-size: 9px; - foreground: #8f9bad; + font-size: $font-size; + foreground: $text-muted; } .ide-shortcuts-row { min-height: 20px; padding: 0px 6px; gap: 12px; - background: #2A2E36; - border-radius: 3px; + background: $bg-hover; + border-radius: $radius-small; } .ide-shortcuts-description { width: 0px; - foreground: #d7deea; + foreground: $text-strong; } .ide-shortcuts-keys { wrap: false; padding: 1px 5px; - font-size: 8px; - foreground: #F0F3F8; - background: #3A3F49; - border: 1px #4b5362; - border-radius: 3px; + font-size: $font-size-small; + foreground: $caret; + background: $border; + border: 1px $border; + border-radius: $radius-small; } .ui-profiler-panel { @@ -278,18 +275,18 @@ width: fit; height: fit; padding: 3px 8px; - background: #31343D; - border-radius: 3px; - foreground: #d7deea; + background: $bg-selected; + border-radius: $radius-small; + foreground: $text-strong; } .ui-profiler-button:hover { - background: #414653; + background: $bg-pressed; } .ui-profiler-scroll { width: 100%; - background: #1d2026; + background: $bg-panel; padding: 6px; } @@ -297,8 +294,8 @@ width: fit; height: fit; white-space: pre; - font-size: 9px; - foreground: #d7deea; + font-size: $font-size; + foreground: $text-strong; } .tool-window-header { @@ -317,45 +314,45 @@ padding: 0px 8px; gap: 5px; align-items: center center; - border-radius: 4px; - background: #00000000; - foreground: #8f9bad; + border-radius: $radius; + background: transparent; + foreground: $text-muted; transition: background 110ms ease-out, foreground 110ms ease-out; } .tool-window-tab:hover { - background: rgba(255, 255, 255, 0.06); - foreground: #e4e9f1; + background: $bg-hover; + foreground: $text-strong; } .tool-window-tab.selected { - background: rgba(110, 155, 220, 0.20); - foreground: #f0f3f8; + background: $row-selected; + foreground: $caret; } .tool-window-tab.selected:hover { - background: rgba(110, 155, 220, 0.26); + background: $row-selected; } .tool-window-tab-count { min-width: 12px; padding: 2px 4px 0px 4px; text-align: center; - border-radius: 6px; - background: #2B2E35; - foreground: #aeb8ca; + border-radius: $radius-large; + background: $bg-hover; + foreground: $text-soft; } .tool-window-tab-count.has-errors { - background: rgba(255, 135, 135, 0.16); - foreground: #ff8787; + background: alpha($danger, 0.16); + foreground: $danger; } .tool-window-tab-count.has-warnings { - background: rgba(255, 194, 102, 0.14); - foreground: #ffc266; + background: alpha($warning, 0.14); + foreground: $warning; } .ide-panel.console-panel { @@ -365,7 +362,7 @@ .console-toolbar { size: fit 22px; - padding: 0px 3px; + padding: 0px $panel-inset; gap: 5px; align-items: start center; } @@ -380,9 +377,9 @@ min-width: 84px; height: 20px; padding: 0px 6px; - background: #212328; - border: 1px #2B2E35; - border-radius: 4px; + background: $bg-field; + border: 1px $divider; + border-radius: $radius; } .console-command-row { @@ -395,62 +392,55 @@ .console-filter, .console-command { padding: 2px 5px; - background: #212328; - border: 1px #2B2E35; - border-radius: 4px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + background: $bg-field; + border: 1px $divider; + border-radius: $radius; + caret-color: $caret; + selection-color: $selection; } /* - * The whole log is one read-only field; its colours come from the console's own highlighter. It sits + * The whole log is one read-only field; its colors come from the console's own highlighter. It sits * a shade lighter than the header and the command line around it, like the editor does. */ .console-log { width: 100%; padding: 2px 8px; - background: #212328; - foreground: #d7deea; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + background: $bg-field; + foreground: $text-strong; + caret-color: $caret; + selection-color: $selection; + @apply $thin-scroll; } .console-empty, .problems-empty { align-items: center center; - background: #212328; - foreground: #687588; + background: $bg-field; + foreground: $text-faint; } .console-button { size: 22px 22px; - border-radius: 4px; - background: #00000000; + border-radius: $radius; + background: transparent; transition: background 110ms ease-out; } .console-button:hover { - background: #2B2E35; + background: $bg-hover; } .console-button.disabled, .console-button.disabled:hover { - background: #00000000; + background: transparent; } .console-button-icon { size: 13px 13px; - tint: #d7deea; + tint: $text-strong; } .console-button.disabled .console-button-icon { - tint: #687588; + tint: $text-faint; } .project-context-menu { @@ -479,15 +469,15 @@ .project-name-dialog-title { height: 18px; - foreground: #d7deea; + foreground: $text-strong; } .project-name-dialog-input { - caret-color: #f0f6ff; - background: #1E2127; - border-radius: 4px; - border: 1px #5F6677; - selection-color: rgba(95, 140, 205, 0.46); + caret-color: $caret; + background: $bg-field; + border-radius: $radius; + border: 1px $border-strong; + selection-color: $selection; } .project-name-dialog-actions { @@ -505,22 +495,22 @@ size: fit fit; margin: 2px 0px; padding: 3px; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; transition: background 110ms ease-out; } .project-action:hover { - background: #2B2E35; + background: $bg-hover; } .project-action-icon { size: 13px 13px; - tint: #aeb8ca; + tint: $text-soft; } .project-action:hover .project-action-icon { - tint: #ffffff; + tint: $white; } .project-dialog-content { @@ -529,8 +519,8 @@ } .project-dialog-title { - foreground: #F0F3F8; - font-size: 11px; + foreground: $caret; + font-size: $font-size-title; } .project-dialog-field { @@ -540,79 +530,65 @@ .project-dialog-scroll { gap: 7px; padding: 0px 8px 0px 0px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } .project-dialog-label { - foreground: #8f9bad; - font-size: 8px; + foreground: $text-muted; + font-size: $font-size-small; } .project-dialog-input { padding: 2px 5px; - background: #1E2127; - border: 1px #4b5362; - border-radius: 3px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + background: $bg-field; + border: 1px $border; + border-radius: $radius-small; + caret-color: $caret; + selection-color: $selection; } .project-dialog-dropdown { height: 22px; padding: 0px 6px; - background: #1E2127; - border: 1px #4b5362; - border-radius: 3px; + background: $bg-field; + border: 1px $border; + border-radius: $radius-small; } .project-dialog-dependencies { padding: 3px 5px; gap: 2px; - background: #1E2127; - border-radius: 3px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + background: $bg-field; + border-radius: $radius-small; + @apply $thin-scroll; } .project-dialog-checkbox-row { gap: 7px; - foreground: #D7DEEA; + foreground: $text-strong; } .project-dialog-text { - foreground: #D7DEEA; - font-size: 9px; + foreground: $text-strong; + font-size: $font-size; line-spacing: 2px; } .project-dialog-hint, .project-dialog-progress { - foreground: #8f9bad; - font-size: 8px; + foreground: $text-muted; + font-size: $font-size-small; line-spacing: 2px; } .project-dialog-warning { - foreground: #ffc266; - font-size: 9px; + foreground: $warning; + font-size: $font-size; line-spacing: 2px; } .project-dialog-error { - foreground: #ff8787; - font-size: 9px; + foreground: $danger; + font-size: $font-size; line-spacing: 2px; } @@ -621,8 +597,8 @@ } .project-dialog-path { - foreground: #aeb8ca; - font-size: 8px; + foreground: $text-soft; + font-size: $font-size-small; } .project-dialog-actions { @@ -633,29 +609,29 @@ .project-dialog-button { min-width: 72px; padding: 0px 10px; - border-radius: 4px; - border: 1px #E7EBF2; - background: #3A3F49; + border-radius: $radius; + border: 1px $text-strong; + background: $border; transition: background 80ms ease-out; } .project-dialog-button:hover { - background: #4A515E; + background: $bg-pressed; } .project-dialog-button.primary { - background: #5F8CCD; - foreground: #FFFFFF; + background: $accent; + foreground: $white; } .project-dialog-button.primary:hover { - background: #6E9BDC; + background: $accent; } .project-dialog-button.disabled, .project-dialog-button.disabled:hover { - background: #2C3038; - foreground: #687588; - border: 1px #4b5362; + background: $bg-hover; + foreground: $text-faint; + border: 1px $border; } .ide-hide-toolbar-dialog { @@ -667,19 +643,19 @@ } .ide-hide-toolbar-dialog-title { - foreground: #F0F3F8; - font-size: 11px; + foreground: $caret; + font-size: $font-size-title; } .ide-hide-toolbar-dialog-message { - foreground: #B9C1CF; - font-size: 9px; + foreground: $text-soft; + font-size: $font-size; line-spacing: 2px; } .ide-hide-toolbar-dialog-checkbox-row { gap: 7px; - foreground: #D7DEEA; + foreground: $text-strong; } .ide-hide-toolbar-dialog-actions { @@ -687,31 +663,31 @@ } .ide-hide-toolbar-dialog-button { - border-radius: 4px; - border: 1px #E7EBF2; - background: #3A3F49; + border-radius: $radius; + border: 1px $text-strong; + background: $border; transition: background 80ms ease-out; } .ide-hide-toolbar-dialog-button:hover { - background: #4A515E; + background: $bg-pressed; } .ide-hide-toolbar-dialog-button:active { - background: #303640; + background: $bg-selected; } .ide-hide-toolbar-dialog-button.primary { - background: #5F8CCD; - foreground: #FFFFFF; + background: $accent; + foreground: $white; } .ide-hide-toolbar-dialog-button.primary:hover { - background: #6E9BDC; + background: $accent; } .ide-hide-toolbar-dialog-button.primary:active { - background: #4D78B8; + background: $accent; } .ide-editor-stack { @@ -729,23 +705,23 @@ padding: 0px 3px; gap: 3px; align-items: center center; - background: #1A1C20; + background: $bg-panel; margin-left: 2px; margin-right: 4px; - border-radius: 3px; + border-radius: $radius-small; } .code-editor-inlay-text { /* A share of the code font, so the hints follow ctrl+wheel along with the text. */ font-size: 85%; - foreground: rgba(142, 153, 171, 0.9); + foreground: alpha($text-muted, 0.9); text-wrap: false; } .code-editor-inlay-icon { size: 9px 9px; align-y: center; - tint: rgba(142, 153, 171, 0.9); + tint: alpha($text-muted, 0.9); transition: all 170ms ease-in-out; } @@ -754,25 +730,25 @@ } .code-editor-inlay.inlay-action:hover { - background: #2B2E35; + background: $bg-hover; } .code-editor-inlay.inlay-action:hover .code-editor-inlay-icon { - tint: #FFFFFF; + tint: $white; } .code-editor-inlay.color-hint { padding: 1px; - background: #00000000; + background: transparent; margin-left: 0px; margin-right: 2px; - border: 1px rgba(255, 255, 255, 0.22); - border-radius: 3px; + border: 1px alpha($white, 0.22); + border-radius: $radius-small; } .code-editor-inlay.color-hint:hover { - background: #00000000; - border: 1px #FFFFFF; + background: transparent; + border: 1px $white; } .code-editor-inlay-swatch { @@ -786,8 +762,8 @@ height: fit; gap: 3px; padding: 3px; - background: #1C1E22; - border-radius: 4px; + background: $bg-panel; + border-radius: $radius; } .ide-find-row { @@ -799,89 +775,89 @@ .ide-find-icon { size: 14px 14px; - tint: #aeb8ca; + tint: $text-soft; } .ide-find-input { height: 20px; padding: 2px 5px; - background: #212328; - border: 1px #2B2E35; - border-radius: 3px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + background: $bg-field; + border: 1px $divider; + border-radius: $radius-small; + caret-color: $caret; + selection-color: $selection; } .ide-find-toggle { size: 20px 20px; - border-radius: 3px; - foreground: #8f9bad; - background: #00000000; + border-radius: $radius-small; + foreground: $text-muted; + background: transparent; transition: all 110ms ease-out; } .ide-find-toggle:hover { - background: #414653; + background: $bg-pressed; } .ide-find-toggle.on { - background: rgba(67, 106, 154, 0.62); - foreground: #f0f6ff; + background: alpha($accent-fill-hover, 0.62); + foreground: $caret; } .ide-find-toggle-label { wrap: false; - font-size: 8px; + font-size: $font-size-small; } .ide-find-status { width: fit; min-width: 58px; wrap: false; - foreground: #8f9bad; + foreground: $text-muted; } .ide-find-status.empty { - foreground: #ff8787; + foreground: $danger; } .ide-find-button { size: 20px 20px; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; transition: background 110ms ease-out; } .ide-find-button:hover { - background: #414653; + background: $bg-pressed; } .ide-find-button-icon { size: 11px 11px; - tint: #aeb8ca; + tint: $text-soft; } .ide-find-text-button { width: fit; height: 20px; padding: 0px 8px; - background: #414653; - foreground: #d7deea; - border-radius: 3px; + background: $border; + foreground: $text-strong; + border-radius: $radius-small; } .ide-find-text-button:hover { - background: #5f6b80; + background: $bg-pressed; } .ide-search-overlay { padding: 5px; gap: 4px; - background: #24272E; - border: 1px #5F6677; - border-radius: 6px; - shadow: 2px 4px 12px 0px rgba(0, 0, 0, 0.55); + background: $bg-raised; + border: 1px $border-strong; + border-radius: $radius-large; + shadow: 2px 4px 12px 0px $shadow; } .ide-search-scopes { @@ -895,25 +871,25 @@ width: fit; height: 20px; padding: 0px 10px; - border-radius: 3px; - foreground: #8f9bad; - background: #00000000; + border-radius: $radius-small; + foreground: $text-muted; + background: transparent; transition: all 110ms ease-out; } .ide-search-scope:hover { - background: #414653; + background: $bg-pressed; } .ide-search-scope.on { - background: rgba(67, 106, 154, 0.62); - foreground: #f0f6ff; + background: alpha($accent-fill-hover, 0.62); + foreground: $caret; } .ide-search-status { width: fit; wrap: false; - foreground: #687588; + foreground: $text-faint; } .ide-search-query-row { @@ -921,34 +897,27 @@ height: fit; gap: 5px; padding: 0px 4px; - background: #1E2127; - border: 1px #4b5362; - border-radius: 4px; + background: $bg-field; + border: 1px $border; + border-radius: $radius; } .ide-search-icon { size: 14px 14px; - tint: #aeb8ca; + tint: $text-soft; } .ide-search-input { height: 24px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + caret-color: $caret; + selection-color: $selection; } .ide-search-results { width: 100%; max-height: 320px; gap: 1px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } .ide-search-result { @@ -957,15 +926,15 @@ min-height: 20px; padding: 2px 6px; gap: 6px; - border-radius: 3px; + border-radius: $radius-small; } .ide-search-result:hover { - background: rgba(84, 124, 176, 0.42); + background: $bg-hover; } .ide-search-result.selected { - background: rgba(67, 106, 154, 0.62); + background: $row-selected; } .ide-search-result-icon { @@ -975,19 +944,19 @@ .ide-search-result-name { width: fit; wrap: false; - foreground: #d7deea; + foreground: $text-strong; } .ide-search-result-detail { width: 0px; grow: 1; wrap: false; - font-size: 8px; - foreground: #687588; + font-size: $font-size-small; + foreground: $text-faint; } .ide-search-result-match { - foreground: #ffc266; + foreground: $warning; } .ide-diagnostics-badge { @@ -996,16 +965,16 @@ padding: 3px 5px; align-items: center center; gap: 4px; - background: rgba(28, 30, 34, 0.88); - border: 1px #2B2E35; - border-radius: 4px; + background: alpha($bg-panel, 0.88); + border: 1px $divider; + border-radius: $radius; translate: 0 0 20px; - foreground: #d7deea; + foreground: $text-strong; transition: background 120ms ease-out; } .ide-diagnostics-badge:hover { - background: #2B2E35; + background: $bg-hover; } .problems-file { @@ -1022,7 +991,7 @@ .problems-file-name { margin-right: 4px; wrap: false; - foreground: #d7deea; + foreground: $text-strong; } .problem-count-icon { @@ -1031,28 +1000,21 @@ .problem-count { margin-right: 3px; - foreground: #8f9bad; + foreground: $text-muted; } .problem-count.has-errors { - foreground: #ff8787; + foreground: $danger; } .problem-count.has-warnings { - foreground: #ffc266; + foreground: $warning; } .problems-list { padding: 2px 4px 4px 4px; - background: #212328; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + background: $bg-field; + @apply $thin-scroll; } .problem-row { @@ -1060,13 +1022,13 @@ padding: 0px 4px 0px 22px; gap: 6px; align-items: start center; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; transition: background 100ms ease-out; } .problem-row:hover { - background: #2B2E35; + background: $bg-hover; } .problem-icon { @@ -1076,33 +1038,33 @@ .problem-message { width: 0px; grow: 1; - foreground: #d7deea; + foreground: $text-strong; } .problem-location { wrap: false; - foreground: #687588; + foreground: $text-faint; } .problem-copy { size: 16px 16px; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; transition: background 100ms ease-out; } .problem-copy:hover { - background: rgba(255, 255, 255, 0.08); + background: $bg-hover; } .problem-copy-icon { size: 10px 10px; - tint: #687588; + tint: $text-faint; } .problem-row:hover .problem-copy-icon, .problem-copy:hover .problem-copy-icon { - tint: #d7deea; + tint: $text-strong; } .file-context-menu { @@ -1128,7 +1090,7 @@ width: 100%; height: 1px; margin: 2px 0px; - background: #3a3f4b; + background: $border; } .drag-ghost { @@ -1139,10 +1101,10 @@ .drag-ghost-content { gap: 4px; padding: 2px 6px; - background: #24272ECC; - border: 1px #5F6677; - border-radius: 4px; - shadow: 1px 1px 3px 0px rgba(0, 0, 0, 0.42); + background: alpha($bg-raised, 0.8); + border: 1px $border-strong; + border-radius: $radius; + shadow: 1px 1px 3px 0px $shadow; } .drag-ghost-icon { @@ -1151,12 +1113,12 @@ .drag-ghost-label { wrap: false; - foreground: #d7deea; + foreground: $text-strong; } .scene-hint { size: 100% fit; padding: 4px 6px; - foreground: #7A8698; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss index 325d48310..6acd7d7b6 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/image-editor.hss @@ -1,26 +1,28 @@ +@import "hollowengine:ui/styles/theme.hss"; + .image-editor-root { gap: 5px; padding: 5px; - background: #24272E; + background: $bg-raised; } .image-editor-tool { padding: 3px 5px; align-items: center center; - background: #3A3E48; - border: 1px #555D6C; - border-radius: 4px; - foreground: #D7DEEA; + background: $border; + border: 1px $border; + border-radius: $radius; + foreground: $text-strong; } .image-editor-tool:hover { - background: #454B58; + background: $bg-pressed; } .image-editor-tool.selected { - background: #45648E; - border: 1px #6D94C9; - foreground: #FFFFFF; + background: $bg-selected; + border: 1px $accent; + foreground: $white; } .image-editor-tool.disabled { @@ -34,44 +36,30 @@ } .image-editor-canvas-scroll { - background: #17191E; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + background: $bg-window; + @apply $thin-scroll; } .image-editor-sidebar { gap: 7px; padding: 8px 10px 8px 12px; - background: #2B2E36; - border-radius: 4px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + background: $bg-hover; + border-radius: $radius; + @apply $thin-scroll; } .image-editor-sidebar-title { height: fit; margin: 4px 0px 0px 0px; - foreground: #EEF3FB; + foreground: $caret; } .image-editor-setting { - foreground: #D7DEEA; + foreground: $text-strong; } .image-editor-info { height: fit; - foreground: #9FAABD; + foreground: $text-soft; text-wrap: true; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss index 2e2ae901b..cc8f322f1 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/inspector.hss @@ -3,26 +3,21 @@ * editor, the timeline selection, the model and sound editors. Editors bring their own chrome and * canvas; everything that shows a property lives here, so a field looks the same wherever it is opened. * - * The palette is the IDE's (see docking.hss): #1C1E22 the panel, #212328 fields and headings, - * #2B2E35 hover, #6E9BDC the accent for whatever has focus or is picked. Text is set in the code font, - * which fits far more on a line than the vanilla one. + * Colors, sizes and the font come from theme.hss: the panel on $bg-panel, fields and headings on + * $bg-field, $accent for whatever has focus or is picked. */ +@import "hollowengine:ui/styles/theme.hss"; + + .insp-panel { size: 100% 100%; gap: 5px; - padding: 6px; - background: #1C1E22; - border-radius: 6px; - font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + padding: $panel-inset; + background: $bg-panel; + border-radius: $radius-large; + font-family: $font; + @apply $thin-scroll; } .insp-head { @@ -34,13 +29,13 @@ .insp-icon { size: 12px 12px; - tint: #aeb8ca; + tint: $text-soft; } .insp-title { size: fit fit; grow: 1; - foreground: #E4E9F4; + foreground: $text-strong; font-size: 10px; wrap: false; text-overflow: dots; @@ -48,8 +43,8 @@ .insp-subtitle { size: fit fit; - foreground: #7A8698; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; wrap: false; text-overflow: dots; } @@ -65,9 +60,9 @@ padding: 22px 12px 18px 12px; gap: 10px; align-items: center start; - border: 1px #2B2E35; + border: 1px $divider; border-dash: 5px 4px; - border-radius: 8px; + border-radius: $radius-large; } /* A shape rather than an image: one opaque stroke, so where lines cross nothing doubles up. */ @@ -75,15 +70,15 @@ size: 26px 28px; shape: path("M 5.3 12.34 C 5.48 12.44 5.69 12.5 5.9 12.5 C 6.11 12.5 6.32 12.44 6.5 12.34 L 10.7 9.94 C 10.88 9.83 11.03 9.68 11.14 9.5 C 11.24 9.32 11.3 9.11 11.3 8.9 L 11.3 4.1 C 11.3 3.89 11.24 3.68 11.14 3.5 C 11.03 3.32 10.88 3.17 10.7 3.06 L 6.5 0.66 C 6.32 0.56 6.11 0.5 5.9 0.5 C 5.69 0.5 5.48 0.56 5.3 0.66 L 1.1 3.06 C 0.92 3.17 0.77 3.32 0.66 3.5 C 0.56 3.68 0.5 3.89 0.5 4.1 L 0.5 8.9 C 0.5 9.11 0.56 9.32 0.66 9.5 C 0.77 9.68 0.92 9.83 1.1 9.94 Z M 5.9 12.5 L 5.9 6.5 M 0.67 3.5 L 5.9 6.5 L 11.13 3.5 M 3.2 1.86 L 8.6 4.95", 12 13); fill: none; - stroke: #8f9bad; + stroke: $text-muted; stroke-width: 1.2px; } .insp-empty { size: 100% fit; text-align: center; - foreground: #7A8698; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; } /* ---- sections ---- */ @@ -96,15 +91,15 @@ /* A plain section: a title over a hairline. */ .insp-section-title { size: 100% fit; - foreground: #8f9bad; - font-size: 8px; + foreground: $text-muted; + font-size: $font-size-small; wrap: false; text-overflow: dots; } .insp-section-rule { size: 100% 1px; - background: #2B2E35; + background: $bg-hover; } .insp-section-body { @@ -114,8 +109,8 @@ .insp-section.boxed { padding: 6px; - background: #212328; - border-radius: 5px; + background: $bg-field; + border-radius: $radius; } .insp-section-head { @@ -124,34 +119,34 @@ gap: 5px; padding: 2px 5px; align-items: start center; - background: #212328; - border-radius: 4px; + background: $bg-field; + border-radius: $radius; hoverable: true; clickable: true; transition: background 110ms ease-out; } -.insp-section-head:hover { background: #2B2E35; } +.insp-section-head:hover { background: $bg-hover; } -.insp-section-head[expanded="true"] { background: #25282E; } +.insp-section-head[expanded="true"] { background: $bg-raised; } .insp-section-head .insp-section-title { size: fit fit; grow: 1; - foreground: #C4CBDA; - font-size: 9px; + foreground: $text; + font-size: $font-size; } -.insp-section-head:hover .insp-section-title { foreground: #ffffff; } +.insp-section-head:hover .insp-section-title { foreground: $white; } .insp-section-icon { size: 11px 11px; - tint: #8f9bad; + tint: $text-muted; transition: tint 110ms ease-out; } .insp-section-head:hover .insp-section-icon, -.insp-section-head[expanded="true"] .insp-section-icon { tint: #6E9BDC; } +.insp-section-head[expanded="true"] .insp-section-icon { tint: $accent; } .insp-section-head .insp-arrow { size: 8px 8px; @@ -177,8 +172,8 @@ .insp-label { size: 100% fit; - foreground: #8f9bad; - font-size: 8px; + foreground: $text-muted; + font-size: $font-size-small; } .insp-help { @@ -193,8 +188,8 @@ .insp-hint { size: 100% fit; - foreground: #6A7384; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; } .insp-readonly { @@ -207,14 +202,14 @@ .insp-readonly-label { size: fit fit; grow: 1; - foreground: #8f9bad; - font-size: 8px; + foreground: $text-muted; + font-size: $font-size-small; } .insp-readonly-value { size: fit fit; - foreground: #C4CBDA; - font-size: 8px; + foreground: $text; + font-size: $font-size-small; wrap: false; text-overflow: dots; } @@ -229,40 +224,40 @@ size: 100% fit; min-height: 18px; padding: 3px 5px; - background: #212328; - border-radius: 3px; - border: 1px #2B2E35; - foreground: #C4CBDA; - font-size: 9px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + background: $bg-field; + border-radius: $radius-small; + border: 1px $divider; + foreground: $text; + font-size: $font-size; + caret-color: $caret; + selection-color: $selection; text-shadow: none; transition: border 110ms ease-out; } -.insp-input:hover { border: 1px #3A3E48; } +.insp-input:hover { border: 1px $border; } -.insp-input:focus { border: 1px #6E9BDC; } +.insp-input:focus { border: 1px $accent; } /* A field inside a bar of its own, such as a search: no frame until the pointer is on it. */ .insp-input.flat { min-height: 16px; padding: 1px 4px; background: none; - border: 1px #00000000; + border: 1px transparent; } -.insp-input.flat:hover { border: 1px #3A3E48; } +.insp-input.flat:hover { border: 1px $border; } -.insp-input.flat:focus { border: 1px #6E9BDC; } +.insp-input.flat:focus { border: 1px $accent; } .insp-input.numeric { text-align: right; } /* ---- inline fields ---- */ .insp-inline-label { - foreground: #8f9bad; - font-size: 8px; + foreground: $text-muted; + font-size: $font-size-small; wrap: false; text-overflow: dots; } @@ -271,7 +266,7 @@ hoverable: true; } -.insp-inline-label.hinted:hover { foreground: #C4CBDA; } +.insp-inline-label.hinted:hover { foreground: $text; } .insp-input.insp-inline-input { min-height: 15px; @@ -287,17 +282,17 @@ .vfx-popup { padding: 8px; gap: 6px; - background: #26282E; - border: 1px #3A3E48; - border-radius: 5px; - shadow: 1px 1px 3px 0px rgba(0, 0, 0, 0.42); + background: $bg-raised; + border: 1px $border; + border-radius: $radius; + shadow: 1px 1px 3px 0px $shadow; } /* A field the timeline writes: read-only, and tinted like the accent so it reads as "keyed". */ .vfx-driven { - background: #1B2230; - border: 1px #34507A; - foreground: #9FB6D8; + background: $bg-field; + border: 1px alpha($accent, 0.5); + foreground: $text-soft; } .vfx-curve-dialog { @@ -306,17 +301,17 @@ .vfx-gizmo-readout { padding: 1px 4px; - background: rgba(12, 13, 15, 0.8); - border-radius: 3px; - foreground: #E8E2D0; - font-size: 9px; + background: alpha($bg-window, 0.8); + border-radius: $radius-small; + foreground: $text-strong; + font-size: $font-size; } .vfx-detail { size: 100% fit; gap: 3px; padding: 3px 0px 3px 6px; - border-left: 1px #2B2E35; + border-left: 1px $divider; } .vfx-node-head { @@ -328,16 +323,16 @@ /* Whether a renderer draws on particles or once; which one depends on where it sits in the tree. */ .vfx-placement { size: 12px 12px; - tint: #6A7384; + tint: $text-faint; hoverable: true; } -.vfx-placement.active { tint: #6E9BDC; } +.vfx-placement.active { tint: $accent; } .vfx-material-preview { size: 100% 96px; - border-radius: 4px; - background: #141518; + border-radius: $radius; + background: $bg-window; clip: true; } @@ -359,14 +354,14 @@ .insp-check-label { size: fit fit; grow: 1; - foreground: #C4CBDA; - font-size: 8px; + foreground: $text; + font-size: $font-size-small; } .insp-checkbox { size: 11px 11px; - checkbox-active: #6E9BDC; - checkbox-mark: #ffffff; + checkbox-active: $accent; + checkbox-mark: $white; } .insp-slider { grow: 1; } @@ -374,8 +369,8 @@ .insp-slider-value { size: fit fit; min-width: 40px; - foreground: #C4CBDA; - font-size: 8px; + foreground: $text; + font-size: $font-size-small; wrap: false; } @@ -392,16 +387,16 @@ .insp-vector-label { size: fit fit; - foreground: #6A7384; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; } .insp-nested { size: 100% fit; gap: 3px; padding: 4px; - background: #212328; - border-radius: 4px; + background: $bg-field; + border-radius: $radius; } .insp-nested-head { @@ -431,53 +426,53 @@ .insp-pill { padding: 2px 6px; - background: #212328; - border-radius: 3px; - border: 1px #2B2E35; + background: $bg-field; + border-radius: $radius-small; + border: 1px $divider; hoverable: true; clickable: true; transition: background 110ms ease-out, border 110ms ease-out; } -.insp-pill:hover { background: #2B2E35; } +.insp-pill:hover { background: $bg-hover; } .insp-pill.active { - background: rgba(110, 155, 220, 0.2); - border: 1px #6E9BDC; + background: alpha($accent, 0.2); + border: 1px $accent; } .insp-pill-label { size: fit fit; - foreground: #aeb8ca; - font-size: 8px; + foreground: $text-soft; + font-size: $font-size-small; wrap: false; } -.insp-pill.active .insp-pill-label { foreground: #ffffff; } +.insp-pill.active .insp-pill-label { foreground: $white; } .insp-icon-button { size: 14px 14px; - tint: #8f9bad; + tint: $text-muted; hoverable: true; clickable: true; transition: tint 110ms ease-out; } -.insp-icon-button:hover { tint: #ffffff; } +.insp-icon-button:hover { tint: $white; } -.insp-icon-button.active { tint: #6E9BDC; } +.insp-icon-button.active { tint: $accent; } -.insp-icon-button.danger:hover { tint: #E07A7A; } +.insp-icon-button.danger:hover { tint: $danger; } .insp-pick-button { size: 18px 18px; padding: 3px; - background: #212328; - border-radius: 3px; - border: 1px #2B2E35; + background: $bg-field; + border-radius: $radius-small; + border: 1px $divider; } -.insp-pick-button:hover { background: #2B2E35; } +.insp-pick-button:hover { background: $bg-hover; } .insp-button { size: 100% fit; @@ -485,51 +480,51 @@ gap: 5px; padding: 3px 8px; align-items: center center; - background: #2B2E35; - border-radius: 4px; + background: $bg-hover; + border-radius: $radius; hoverable: true; clickable: true; transition: background 110ms ease-out; } -.insp-button:hover { background: #353943; } +.insp-button:hover { background: $bg-pressed; } -.insp-button.primary { background: #3E5F8F; } +.insp-button.primary { background: $accent-fill; } -.insp-button.primary:hover { background: #4A6FA5; } +.insp-button.primary:hover { background: $accent-fill-hover; } -.insp-button.danger { background: rgba(194, 87, 87, 0.18); } +.insp-button.danger { background: $danger-soft; } -.insp-button.danger:hover { background: rgba(194, 87, 87, 0.32); } +.insp-button.danger:hover { background: alpha($danger, 0.32); } .insp-button-icon { size: 11px 11px; - tint: #C4CBDA; + tint: $text; } -.insp-button.primary .insp-button-icon { tint: #ffffff; } +.insp-button.primary .insp-button-icon { tint: $white; } .insp-button-label { size: fit fit; - foreground: #C4CBDA; - font-size: 8px; + foreground: $text; + font-size: $font-size-small; wrap: false; } -.insp-button.primary .insp-button-label { foreground: #ffffff; } +.insp-button.primary .insp-button-label { foreground: $white; } -.insp-button.danger .insp-button-label { foreground: #E79797; } +.insp-button.danger .insp-button-label { foreground: $danger; } /* ---- asset picker ---- */ .insp-dialog { gap: 6px; padding: 10px; - background: #26282E; - border-radius: 6px; - border: 1px #3A3E48; - shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.5); - font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; + background: $bg-raised; + border-radius: $radius-large; + border: 1px $border; + shadow: 2px 2px 10px 0px $shadow; + font-family: $font; } .insp-dialog-head { @@ -540,7 +535,7 @@ .insp-dialog-title { size: fit fit; - foreground: #E4E9F4; + foreground: $text-strong; font-size: 10px; wrap: false; text-overflow: dots; @@ -552,19 +547,19 @@ gap: 5px; padding: 1px 5px; align-items: start center; - background: #212328; - border-radius: 4px; + background: $bg-field; + border-radius: $radius; } .insp-search-icon { size: 11px 11px; - tint: #8f9bad; + tint: $text-muted; } .insp-asset-tree { width: 100%; - background: #212328; - border-radius: 4px; + background: $bg-field; + border-radius: $radius; padding: 3px; } @@ -573,19 +568,19 @@ .insp-bone { padding: 3px 5px; gap: 4px; - background: #212328; - border-radius: 3px; - border: 1px #2B2E35; - foreground: #C4CBDA; + background: $bg-field; + border-radius: $radius-small; + border: 1px $divider; + foreground: $text; transition: border 110ms ease-out; } -.insp-bone:hover { border: 1px #6E9BDC; } +.insp-bone:hover { border: 1px $accent; } -.insp-bone.empty .insp-bone-label { foreground: #6A7384; } +.insp-bone.empty .insp-bone-label { foreground: $text-faint; } .insp-bone-label { - font-size: 8px; + font-size: $font-size-small; } .insp-bone-popup { @@ -607,7 +602,7 @@ margin: 0px 2px; shape: path("M 3 2 L 8 6 L 3 10", 12 12); fill: none; - stroke: #7f8a9d; + stroke: $text-muted; stroke-width: 1.5px; transition: rotate 120ms ease-out; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/model-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/model-editor.hss index 464629a32..884896e1e 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/model-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/model-editor.hss @@ -1,6 +1,8 @@ -/* Styling for the model editor dock panel (client/gui/scripting/panels/ModelEditorPanel.kt). - Palette follows ColorTheme: bg #1E1F22/#24272E/#31343D, accent #5F6677, text #C4CBDA, - main accent #D77F1C. */ +/* Styling for the model editor dock panel (client/ui/ide/panels/ModelEditorPanel.kt). Colors come + from theme.hss. */ + +@import "hollowengine:ui/styles/theme.hss"; + .model-editor-root { size: fill fill; @@ -11,9 +13,9 @@ grow: 1; size: 0px 100%; min-size: 0px 0px; - background: #1E1F22; - border-radius: 6px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; clip: true; } @@ -22,11 +24,11 @@ margin: 8px; padding: 3px 9px; layer: 1000; - foreground: #C4CBDA; + foreground: $text; font-size: 11px; - background: rgba(30, 32, 38, 0.9); - border-radius: 6px; - border: 1px #31343D; + background: alpha($bg-field, 0.9); + border-radius: $radius-large; + border: 1px $bg-selected; wrap: false; backdrop-filter: blur(9px); } @@ -43,9 +45,9 @@ .model-chip { size: 28px 28px; align-items: center center; - background: rgba(36, 39, 46, 0.82); - border-radius: 7px; - border: 1px #31343D; + background: alpha($bg-raised, 0.82); + border-radius: $radius-large; + border: 1px $bg-selected; hoverable: true; clickable: true; transition: background 140ms ease-out, border 140ms ease-out; @@ -53,21 +55,21 @@ } .model-chip:hover { - background: rgba(49, 52, 61, 0.88); + background: $bg-hover; } .model-chip.selected { - background: rgba(215, 127, 28, 0.72); - border: 1px #D77F1C; + background: $row-selected; + border: 1px $accent; } .model-chip-icon { size: 16px 16px; - tint: #C4CBDA; + tint: $text; } .model-chip-icon.selected { - tint: #D77F1C; + tint: $accent; } /* ---- animation control bar ---- */ @@ -79,13 +81,13 @@ gap: 7px; width: 300px; layer: 1000; - background: #24272E; - border-radius: 8px; - border: 1px #31343D; + background: $bg-raised; + border-radius: $radius-large; + border: 1px $bg-selected; } .model-anim-title { - foreground: #8B93A5; + foreground: $text-muted; font-size: 10px; height: 13px; } @@ -100,51 +102,51 @@ grow: 1; height: 26px; padding: 0px 8px; - background: #1E1F22; - border-radius: 6px; - border: 1px #31343D; + background: $bg-panel; + border-radius: $radius-large; + border: 1px $bg-selected; } .model-play { size: 26px 26px; align-items: center center; - background: #31343D; - border-radius: 6px; - border: 1px #3B3F49; + background: $bg-selected; + border-radius: $radius-large; + border: 1px $border; hoverable: true; clickable: true; transition: background 140ms ease-out, border 140ms ease-out; } .model-play:hover { - background: #3B3F49; + background: $bg-pressed; } .model-play.active { - background: rgba(215, 127, 28, 0.9); - border: 1px #E8912E; + background: $accent-soft; + border: 1px $accent; } .model-play-icon { size: 14px 14px; - tint: #C4CBDA; + tint: $text; } .model-play.active .model-play-icon { - tint: #1E1F22; + tint: $bg-panel; } .model-progress-track { width: 100%; height: 4px; - background: #1E1F22; + background: $bg-panel; border-radius: 2px; clip: true; } .model-progress-fill { height: 100%; - background: #D77F1C; + background: $accent; border-radius: 2px; } @@ -152,18 +154,18 @@ .model-splitter { size: 5px 100%; - background: rgba(95, 102, 119, 0.0); - border-radius: 3px; + background: transparent; + border-radius: $radius-small; hoverable: true; transition: background 140ms ease-out; } .model-splitter:hover { - background: rgba(215, 127, 28, 0.55); + background: $accent; } .model-splitter:dragging { - background: #D77F1C; + background: $accent; } /* ---- sidebar (collapsible sections) ---- */ @@ -172,9 +174,9 @@ min-size: 190px 0px; gap: 4px; padding: 6px; - background: #24272E; - border-radius: 6px; - border: 1px #31343D; + background: $bg-raised; + border-radius: $radius-large; + border: 1px $bg-selected; clip: true; } @@ -187,12 +189,12 @@ /* The node-tree eye icon is a button: dim by default, accent on hover. */ .model-node-tree .tree-icon-button { - tint: #8B93A5; + tint: $text-muted; transition: tint 120ms ease-out; } .model-node-tree .tree-icon-button:hover { - tint: #D77F1C; + tint: $accent; } .model-anim-item { @@ -200,9 +202,9 @@ height: 22px; padding: 0px 8px; align-items: start center; - background: rgba(255, 255, 255, 0); - foreground: #AEB8CA; - border-radius: 4px; + background: transparent; + foreground: $text-soft; + border-radius: $radius; hoverable: true; clickable: true; transition: @@ -211,17 +213,17 @@ } .model-anim-item:hover { - background: rgba(255, 255, 255, 0.07); - foreground: #ffffff; + background: $bg-hover; + foreground: $white; } .model-anim-item.selected { - background: rgba(215, 127, 28, 0.28); - foreground: #ffffff; + background: $row-selected; + foreground: $white; } .model-empty { - foreground: #5F6677; + foreground: $border-strong; font-size: 11px; padding: 2px 4px; } @@ -230,8 +232,8 @@ height: fit; padding: 5px 8px; align: center end; - foreground: #ff8787; - background: rgba(36, 39, 46, 0.88); - border: 1px rgba(255, 135, 135, 0.45); - border-radius: 4px; + foreground: $danger; + background: alpha($bg-raised, 0.88); + border: 1px alpha($danger, 0.45); + border-radius: $radius; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss index ea1983bd1..b35fd7030 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/notifications.hss @@ -4,9 +4,12 @@ * is set in the same code font as the IDE. */ +@import "hollowengine:ui/styles/theme.hss"; + + .notif-stack { - font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; - font-size: 9px; + font-family: $font; + font-size: $font-size; size: fit fit; gap: 6px; margin: 10px; @@ -17,11 +20,11 @@ size: 280px fit; gap: 5px; padding: 7px 8px 7px 10px; - background: rgba(33, 35, 40, 0.96); - border-radius: 8px; - border: 1px #2E3138; + background: alpha($bg-field, 0.96); + border-radius: $radius-large; + border: 1px $divider; backdrop-filter: blur(8px); - shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); + shadow: 0px 6px 16px 0px $shadow; } .notif.success { border: 1px linear-gradient(135deg, #9BF763, #3D5A24); } @@ -42,7 +45,7 @@ .notif-title { size: fit fit; - foreground: #E4E9F4; + foreground: $text-strong; text-overflow: dots; } @@ -50,39 +53,39 @@ size: fit fit; min-height: 18px; padding: 2px 8px; - background: #2B2E35; - border-radius: 4px; + background: $bg-hover; + border-radius: $radius; hoverable: true; clickable: true; transition: background 120ms ease-out; } -.notif-action:hover { background: #363A43; } +.notif-action:hover { background: $bg-pressed; } .notif-action-label { align: center center; size: fit fit; - foreground: #D7DEEA; + foreground: $text-strong; wrap: false; } .notif-close { size: 16px 16px; padding: 4px; - background: #00000000; - border-radius: 4px; - tint: #7A8698; + background: transparent; + border-radius: $radius; + tint: $text-faint; transition: tint 120ms ease-out, background 120ms ease-out; } .notif-close:hover { - background: #2B2E35; - tint: #E4E9F4; + background: $bg-hover; + tint: $text-strong; } .notif-track { size: 100% 3px; - background: #2B2E35; + background: $bg-hover; border-radius: 2px; clip: true; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss index fee95e057..04c1246c9 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/sounds-editor.hss @@ -1,7 +1,9 @@ +@import "hollowengine:ui/styles/theme.hss"; + .sounds-editor-root { gap: 6px; padding: 6px; - background: #24272E; + background: $bg-raised; } .sounds-editor-toolbar { @@ -12,84 +14,70 @@ .sounds-editor-title { height: fit; - foreground: #EEF3FB; + foreground: $caret; font-size: 12px; text-wrap: false; } .sounds-editor-status { height: fit; - foreground: #6FBF8A; + foreground: $success; font-size: 10px; text-wrap: false; } .sounds-editor-status.dirty { - foreground: #E0A94B; + foreground: $accent; } .sounds-editor-status-dot { size: 6px 6px; - border-radius: 3px; - background: #6FBF8A; + border-radius: $radius-small; + background: $success; transition: background 150ms ease-out; } .sounds-editor-status-dot.dirty { - background: #E0A94B; + background: $accent; } .sounds-editor-list { gap: 5px; padding: 6px; - background: #2B2E36; - border-radius: 4px; + background: $bg-hover; + border-radius: $radius; } .sounds-editor-list-scroll { gap: 2px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } .sounds-editor-detail { gap: 7px; padding: 8px 10px; - background: #2B2E36; - border-radius: 4px; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + background: $bg-hover; + border-radius: $radius; + @apply $thin-scroll; } .sounds-editor-event { padding: 0px 4px 0px 8px; gap: 4px; - background: #00000000; - foreground: #C6CEDC; - border-radius: 4px; + background: transparent; + foreground: $text; + border-radius: $radius; transition: background 120ms ease-out, foreground 120ms ease-out; } .sounds-editor-event:hover { - background: rgba(255, 255, 255, 0.07); - foreground: #FFFFFF; + background: alpha($white, 0.07); + foreground: $white; } .sounds-editor-event.selected { - background: rgba(88, 123, 174, 0.32); - foreground: #FFFFFF; + background: $row-selected; + foreground: $white; } .sounds-editor-event-label { @@ -100,7 +88,7 @@ .sounds-editor-event-count { height: fit; - foreground: #8B96A9; + foreground: $text-muted; font-size: 9px; text-wrap: false; } @@ -109,7 +97,7 @@ .sounds-editor-placeholder { height: fit; padding: 8px 4px; - foreground: #8B96A9; + foreground: $text-muted; text-wrap: true; } @@ -124,20 +112,20 @@ .sounds-editor-section-title { height: fit; - foreground: #EEF3FB; + foreground: $caret; text-wrap: false; } .sounds-editor-label { height: fit; - foreground: #AEB8CA; + foreground: $text-soft; font-size: 10px; text-wrap: false; } .sounds-editor-value { height: fit; - foreground: #C6CEDC; + foreground: $text; font-size: 10px; align: end center; text-wrap: false; @@ -146,35 +134,35 @@ .sounds-editor-search, .sounds-editor-field { padding: 3px 5px; - background: #31343D; - border: 1px #454B58; - border-radius: 3px; - foreground: #E4E9F2; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + background: $bg-selected; + border: 1px $border; + border-radius: $radius-small; + foreground: $text-strong; + caret-color: $caret; + selection-color: $selection; } .sounds-editor-sound-card { size: 100% fit; gap: 5px; padding: 7px; - background: #313540; - border: 1px #3E434F; - border-radius: 4px; + background: $bg-selected; + border: 1px $border; + border-radius: $radius; } .sounds-editor-button { - background: #3A3E48; - border: 1px #555D6C; - border-radius: 4px; - foreground: #D7DEEA; + background: $border; + border: 1px $border; + border-radius: $radius; + foreground: $text-strong; transition: background 100ms ease-out; } .sounds-editor-button:hover { - background: #45648E; - border: 1px #6D94C9; - foreground: #FFFFFF; + background: $accent-fill; + border: 1px $accent; + foreground: $white; } .sounds-editor-button-label { @@ -184,21 +172,21 @@ .sounds-editor-button-icon { size: 12px 12px; - tint: #D7DEEA; + tint: $text-strong; } .sounds-editor-button:hover .sounds-editor-button-icon { - tint: #FFFFFF; + tint: $white; } .sounds-editor-icon-button { size: 16px 16px; padding: 2px; - border-radius: 3px; - tint: #8B96A9; + border-radius: $radius-small; + tint: $text-muted; transition: tint 100ms ease-out; } .sounds-editor-icon-button:hover { - tint: #FF9D9D; + tint: $danger; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/theme.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/theme.hss new file mode 100644 index 000000000..d03777718 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/theme.hss @@ -0,0 +1,112 @@ +/* + * The engine's look in one place: every other stylesheet of the editor imports this one and takes + * its colors, sizes and fonts from these variables instead of writing its own literals. + * + * @import "hollowengine:ui/styles/theme.hss"; + * .panel { background: $bg-panel; } + * + * A stylesheet that declares a variable of the same name after the import retunes it for itself. + */ + +/* ---- surfaces, darkest to lightest ---- */ + +/* The window itself: toolbars, tab bars, splitters, the status bar. */ +$bg-window: #141518; +/* Tool windows and panels. */ +$bg-panel: #1C1E22; +/* Editors, fields, section headings: what sits on a panel. */ +$bg-field: #212328; +/* Popups, menus, dialogs and cards: what floats over the rest. */ +$bg-raised: #26282E; +/* Whatever the pointer is over. */ +$bg-hover: #2B2E35; +/* Pressed, or hovered on something already raised. */ +$bg-pressed: #353943; +/* A selected row, a toggled button. */ +$bg-selected: #2E3544; + +/* ---- lines ---- */ + +$divider: #2B2E35; +$border: #3A3E48; +/* A frame that has to be seen: a focused card, an emphasised outline. */ +$border-strong: #5F6677; + +/* ---- text, brightest to faintest ---- */ + +$text-strong: #E4E9F4; +$text: #C4CBDA; +$text-soft: #AEB8CA; +$text-muted: #8F9BAD; +$text-faint: #6A7384; +$white: #FFFFFF; +$caret: #F0F6FF; + +/* ---- accent and state ---- */ + +$accent: #6E9BDC; +$accent-fill: #3E5F8F; +$accent-fill-hover: #4A6FA5; +$accent-soft: alpha($accent, 0.2); +$selection: alpha(#5F8CCD, 0.46); +$row-selected: alpha(#587BAE, 0.32); + +$danger: #E07A7A; +$danger-soft: alpha(#C25757, 0.18); +$warning: #F7C363; +$success: #6FBF8A; + +$shadow: alpha(#000000, 0.45); +$scrim: alpha(#000000, 0.5); + +/* ---- sizes ---- */ + +/* How far a panel's content sits from its edge: headers, toolbars, lists and fields alike. */ +$panel-inset: 6px; + +/* + * The left rail of the window, the side stripe's column: the logo, the stripe buttons and the first + * icon of the status bar are all centered on it. + */ +$rail: 22px; + +$radius-small: 3px; +$radius: 4px; +$radius-large: 6px; + +$icon: 12px; +$icon-small: 10px; + +/* ---- text ---- */ + +$font: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; +$font-size: 9px; +$font-size-small: 8px; +$font-size-title: 11px; + +/* ---- scrollbars ---- */ + +$scroll-thumb: alpha(#9BA9C2, 0.28); +$scroll-thumb-hover: alpha(#AFBCD2, 0.6); + +/* ---- shared looks, taken in with `@apply $name;` ---- */ + +/* The scrollbar of every list and panel: thin, over the content, wider under the pointer. */ +$thin-scroll { + scrollbar: 4px; + scrollbar-margin: 2px; + scrollbar-overlay: true; + scrollbar-track: none; + scrollbar-thumb: $scroll-thumb; + scrollbar-thumb-hover: $scroll-thumb-hover; + scrollbar-hover-thickness: 6px; + scrollbar-thumb-radius: 4px; +} + +/* A text field of the editor: the code font, no vanilla drop shadow, the accent caret. */ +$field-text { + font-family: $font; + caret-color: $caret; + selection-color: $selection; + text-shadow: none; +} diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss index f63ad218d..7eb22ec41 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/timeline.hss @@ -2,23 +2,25 @@ * The timeline window: its bar, the track list and the ruler. Lanes, keys and curves are drawn in * code, from the same palette (TimelineColors), because where they sit is data. * - * The palette is the IDE's (see docking.hss); text is set in the code font, which fits a long track - * name and a time readout into far less room than the vanilla one. + * Colors, sizes and the font come from theme.hss; TimelineColors mirrors the few the lanes need. */ +@import "hollowengine:ui/styles/theme.hss"; + + /* Rounded like every other panel; the gap at the bottom keeps the square lanes out of the corners. */ .timeline-root { padding: 0px 0px 5px 0px; - background: #1C1E22; - border-radius: 6px; - font-family: "ttf:hollowengine:fonts/jetbrains_mono_nl.ttf"; + background: $bg-panel; + border-radius: $radius-large; + font-family: $font; } /* ---- bar ---- */ .timeline-toolbar { size: 100% 22px; - padding: 0px 4px; + padding: 0px $panel-inset; gap: 1px; align-items: start center; } @@ -26,143 +28,136 @@ .timeline-button { size: fit fit; padding: 3px; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; hoverable: true; clickable: true; transition: background 110ms ease-out; } -.timeline-button:hover { background: #2B2E35; } +.timeline-button:hover { background: $bg-hover; } -.timeline-button.active { background: #2E3544; } +.timeline-button.active { background: $bg-selected; } .timeline-button-icon { size: 12px 12px; - tint: #aeb8ca; + tint: $text-soft; transition: tint 110ms ease-out; } -.timeline-button:hover .timeline-button-icon { tint: #ffffff; } +.timeline-button:hover .timeline-button-icon { tint: $white; } -.timeline-button.active .timeline-button-icon { tint: #6E9BDC; } +.timeline-button.active .timeline-button-icon { tint: $accent; } .timeline-separator { size: 1px 12px; margin: 0px 4px; - background: #2B2E35; + background: $bg-hover; } .timeline-time { size: 52px fit; min-height: 16px; padding: 1px 4px; - background: #212328; - border-radius: 3px; - border: 1px #212328; - foreground: #E4E9F4; - font-size: 9px; + background: $bg-field; + border-radius: $radius-small; + border: 1px $bg-field; + foreground: $text-strong; + font-size: $font-size; text-align: right; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + caret-color: $caret; + selection-color: $selection; text-shadow: none; transition: border 110ms ease-out; } -.timeline-time:hover { border: 1px #3A3E48; } +.timeline-time:hover { border: 1px $border; } -.timeline-time:focus { border: 1px #6E9BDC; } +.timeline-time:focus { border: 1px $accent; } .timeline-duration { margin: 0px 4px 0px 3px; - foreground: #7A8698; - font-size: 9px; + foreground: $text-faint; + font-size: $font-size; wrap: false; } /* The lanes and the track list scroll the way every IDE list does: a thin bar over the content. */ .timeline-scroll { - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } /* ---- track list ---- */ .timeline-corner { - background: #1C1E22; + background: $bg-panel; } .timeline-corner-label { margin: 0px 0px 0px 8px; - foreground: #7A8698; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; } .timeline-row { - background: #1C1E22; + background: $bg-panel; hoverable: true; clickable: true; transition: background 110ms ease-out; } -.timeline-row:hover { background: #24262B; } +.timeline-row:hover { background: $bg-raised; } -.timeline-row.group { background: #212328; } +.timeline-row.group { background: $bg-field; } -.timeline-row.group:hover { background: #26292F; } +.timeline-row.group:hover { background: $bg-raised; } -.timeline-row.channel { background: #1E2024; } +.timeline-row.channel { background: $bg-panel; } -.timeline-row.focused { background: rgba(110, 155, 220, 0.16); } +.timeline-row.focused { background: alpha($accent, 0.16); } -.timeline-row.locked { background: #18191C; } +.timeline-row.locked { background: $bg-window; } .timeline-row-label { - foreground: #C4CBDA; - font-size: 9px; + foreground: $text; + font-size: $font-size; wrap: false; text-overflow: dots; } -.timeline-row.group .timeline-row-label { foreground: #E4E9F4; } +.timeline-row.group .timeline-row-label { foreground: $text-strong; } .timeline-row.channel .timeline-row-label { - foreground: #8f9bad; - font-size: 8px; + foreground: $text-muted; + font-size: $font-size-small; } -.timeline-row.muted .timeline-row-label { foreground: #6A7384; } +.timeline-row.muted .timeline-row-label { foreground: $text-faint; } .timeline-row-toggle { size: fit fit; padding: 2px; - border-radius: 3px; - background: #00000000; + border-radius: $radius-small; + background: transparent; hoverable: true; clickable: true; transition: background 110ms ease-out; } -.timeline-row-toggle:hover { background: #2B2E35; } +.timeline-row-toggle:hover { background: $bg-hover; } .timeline-row-icon { size: 10px 10px; - tint: #6A7384; + tint: $text-faint; transition: tint 110ms ease-out; } -.timeline-row-toggle:hover .timeline-row-icon { tint: #ffffff; } +.timeline-row-toggle:hover .timeline-row-icon { tint: $white; } -.timeline-row-toggle.on .timeline-row-icon { tint: #aeb8ca; } +.timeline-row-toggle.on .timeline-row-icon { tint: $text-soft; } -.timeline-row-toggle.warn .timeline-row-icon { tint: #6E9BDC; } +.timeline-row-toggle.warn .timeline-row-icon { tint: $accent; } /* Taking a track off the list is rare; the cross only shows on the row the pointer is on. */ .timeline-row-toggle.hide-track { @@ -173,20 +168,20 @@ .timeline-row:hover .timeline-row-toggle.hide-track { opacity: 1; } .timeline-splitter { - background: #141518; + background: $bg-window; hoverable: true; transition: background 110ms ease-out; } -.timeline-splitter:hover { background: #6E9BDC; } +.timeline-splitter:hover { background: $accent; } /* ---- ruler ---- */ .timeline-ruler { - background: #1C1E22; + background: $bg-panel; } .timeline-ruler-label { - foreground: #7A8698; - font-size: 8px; + foreground: $text-faint; + font-size: $font-size-small; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss index 1fe813e99..eaa5c7a45 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/widgets.hss @@ -1,41 +1,48 @@ +@import "hollowengine:ui/styles/theme.hss"; + .dropdown-button { height: 24px; padding: 0px 8px; gap: 6px; - foreground: #cbd3df; - border-radius: 4px; + foreground: $text; + border-radius: $radius; transition: background 100ms ease-out, foreground 100ms ease-out; } .dropdown-button:hover { - background: rgba(255, 255, 255, 0.08); - foreground: #ffffff; + background: alpha($white, 0.08); + foreground: $white; } .dropdown-button[expanded="true"] { - background: rgba(255, 255, 255, 0.10); - foreground: #ffffff; + background: alpha($white, 0.1); + foreground: $white; } .dropdown-button[expanded="true"] .dropdown-button-arrow { rotate: 0px 0px 180px; - fill: #ffffff; + fill: $white; } .dropdown-button-icon, -.dropdown-item-icon, +.dropdown-item-icon { + size: 14px 14px; + tint: $white; +} + +/* A row icon a little under the height of the row's text line, so folders do not crowd the names. */ .tree-icon { - size: 16px 16px; - tint: #ffffff; + size: 13px 13px; + tint: $white; } .dropdown-item-check { size: 10px 10px; - checkbox-active: #6E9BDC; - checkbox-mark: #ffffff; - border: 1px #4A505C; + checkbox-active: $accent; + checkbox-mark: $white; + border: 1px $border; } /* Fills the free space of a button wider than its text, so the arrow sits flush against the right edge. */ @@ -47,7 +54,7 @@ .dropdown-button-arrow { size: 7px 5px; shape: path("M 0 0 L 7 0 L 3.5 5 Z", 7 5); - fill: #9aa5b7; + fill: $text-muted; transition: rotate 120ms ease-out, fill 120ms ease-out; @@ -58,10 +65,10 @@ padding: 3px; gap: 1px; align-items: stretch; - background: #26282E; - border: 1px #3A3E48; - border-radius: 6px; - shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); + background: $bg-raised; + border: 1px $border; + border-radius: $radius-large; + shadow: 0px 6px 16px 0px $shadow; } .dropdown-item { @@ -69,8 +76,8 @@ gap: 6px; padding-vertical: 2px; padding-horizontal: 8px; - border-radius: 4px; - background: #00000000; + border-radius: $radius; + background: transparent; transition: background 80ms ease-out; } @@ -84,21 +91,21 @@ align: end center; margin-left: 18px; font-size: 10px; - foreground: #7f8a9d; + foreground: $text-muted; } .dropdown-separator { size: fill 1px; margin: 2px 6px; - background: #353841; + background: $bg-pressed; } .dropdown-item:hover { - background: rgba(110, 155, 220, 0.18); + background: alpha($accent, 0.18); } .dropdown-item.open { - background: rgba(110, 155, 220, 0.18); + background: alpha($accent, 0.18); } .dropdown-item.disabled { @@ -110,14 +117,7 @@ } .tree-view-scroll { - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } .tree-filter-row { @@ -127,31 +127,31 @@ padding: 1px 4px; gap: 3px; align-items: start center; - background: #212328; - border-radius: 4px; + background: $bg-field; + border-radius: $radius; } .tree-filter-icon, .tree-filter-close { size: 12px 12px; - tint: #aeb8ca; + tint: $text-soft; } .tree-filter-input { min-height: 18px; padding: 2px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + caret-color: $caret; + selection-color: $selection; } .tree-filter-close:hover { - tint: #ffffff; + tint: $white; } .tree-item { padding-right: 6px; - background: #00000000; - foreground: #aeb8ca; - border-radius: 3px; + background: transparent; + foreground: $text-soft; + border-radius: $radius-small; transition: background 200ms ease-out, foreground 200ms ease-out; @@ -164,28 +164,28 @@ } .tree-item:hover { - background: rgba(255, 255, 255, 0.07); - foreground: #ffffff; + background: $bg-hover; + foreground: $white; } .tree-item.selected { - background: rgba(88, 123, 174, 0.32); - foreground: #ffffff; + background: $row-selected; + foreground: $white; } .tree-item.drop-target { - background: rgba(88, 123, 174, 0.55); - foreground: #ffffff; + background: alpha($accent, 0.55); + foreground: $white; } .tree-item.drop-rejected { - background: rgba(190, 60, 60, 0.35); + background: alpha($danger, 0.35); } .tree-indent { size: 16px 100%; fill: none; - stroke: #34363C; + stroke: $divider; stroke-width: 1px; } @@ -210,7 +210,7 @@ margin: 0px 2px; shape: path("M 3 2 L 8 6 L 3 10", 12 12); fill: none; - stroke: #7f8a9d; + stroke: $text-muted; stroke-width: 1.5px; transition: rotate 120ms ease-out, @@ -244,22 +244,15 @@ .code-editor { padding: 8px; - caret-color: #f0f6ff; - selection-color: rgba(95, 140, 205, 0.46); + caret-color: $caret; + selection-color: $selection; line-numbers: true; - line-number-color: #4f5968; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + line-number-color: $text-faint; + @apply $thin-scroll; } .editable-text-field-gutter { - background: #212328; + background: $bg-field; } .editable-text-field-inlay { @@ -267,12 +260,12 @@ padding: 0px 1px; gap: 3px; align-items: start center; - background: #1A1C20; + background: $bg-panel; } .editable-text-field-inlay-text { font-size: 70%; - foreground: #687588; + foreground: $text-faint; text-wrap: false; padding: 0px 2px; } @@ -280,11 +273,11 @@ .editable-text-field-inlay-icon { size: 12px 12px; align-y: center; - tint: #687588; + tint: $text-faint; } .overlay-scrim { - background: rgba(8, 9, 12, 0.46); + background: alpha(#000000, 0.46); backdrop-filter: blur(8px); animations: overlay-scrim-in 140ms ease-out both; } @@ -297,23 +290,23 @@ .ui-tooltip { max-width: 260px; padding: 3px 7px; - background: #26282E; - border: 1px #3A3E48; - border-radius: 5px; - shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.45); + background: $bg-raised; + border: 1px $border; + border-radius: $radius; + shadow: 0px 4px 12px 0px $shadow; } .ui-tooltip-label { - foreground: #d7deea; + foreground: $text-strong; } .ide-quick-fix-popup { padding: 3px; gap: 1px; - background: #26282E; - border: 1px #3A3E48; - border-radius: 6px; - shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); + background: $bg-raised; + border: 1px $border; + border-radius: $radius-large; + shadow: 0px 6px 16px 0px $shadow; } .ide-quick-fix-row { @@ -321,17 +314,17 @@ height: fit; min-height: 18px; padding: 2px 8px; - border-radius: 4px; - foreground: #d7deea; + border-radius: $radius; + foreground: $text-strong; text-wrap: false; } .ide-quick-fix-row.selected { - background: rgba(110, 155, 220, 0.24); + background: alpha($accent, 0.24); } .ide-quick-fix-row:hover { - background: rgba(110, 155, 220, 0.18); + background: alpha($accent, 0.18); } .ide-quick-fix-label { @@ -344,28 +337,21 @@ } .ide-completion-popup { - background: #26282E; - border: 1px #3A3E48; - border-radius: 6px; - shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); + background: $bg-raised; + border: 1px $border; + border-radius: $radius-large; + shadow: 0px 6px 16px 0px $shadow; clip: true; } .ide-completion-divider { - background: #2B2E35; + background: $bg-hover; } .ide-completion-list { size: 100% 100%; text-wrap: false; - scrollbar: 4px; - scrollbar-margin: 2px; - scrollbar-overlay: true; - scrollbar-track: none; - scrollbar-thumb: rgba(155, 169, 194, 0.28); - scrollbar-thumb-hover: rgba(175, 188, 210, 0.6); - scrollbar-hover-thickness: 6px; - scrollbar-thumb-radius: 4px; + @apply $thin-scroll; } .ide-completion-hint { @@ -374,16 +360,16 @@ gap: 5px; align-items: start center; font-size: 85%; - foreground: #687588; + foreground: $text-faint; } .ide-completion-hint-icon { size: 10px 10px; - tint: #687588; + tint: $text-faint; } .ide-completion-hint-key { - foreground: #aeb8ca; + foreground: $text-soft; } .ide-completion-row { @@ -396,20 +382,20 @@ } .ide-completion-row:hover { - background: rgba(255, 255, 255, 0.05); + background: alpha($white, 0.05); } .ide-completion-row.selected { - background: rgba(110, 155, 220, 0.24); + background: alpha($accent, 0.24); } .ide-completion-row.selected:hover { - background: rgba(110, 155, 220, 0.30); + background: alpha($accent, 0.3); } .ide-completion-icon { size: 12px 12px; - tint: rgba(160, 188, 230, 0.9); + tint: alpha($text-soft, 0.9); } .ide-completion-item { @@ -428,71 +414,71 @@ } .ide-completion-label { - foreground: #d7deea; + foreground: $text-strong; text-wrap: false; } .ide-completion-detail { - foreground: rgba(169, 181, 198, 0.88); + foreground: alpha($text-soft, 0.88); text-wrap: false; } .ide-completion-tail { - foreground: #5F6A7B; + foreground: $text-faint; text-wrap: false; align: end center; } .ide-code-insight-popup { padding: 6px 8px; - background: #26282E; - border: 1px #3A3E48; - border-radius: 6px; - shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); + background: $bg-raised; + border: 1px $border; + border-radius: $radius-large; + shadow: 0px 6px 16px 0px $shadow; } .ide-active-parameter { - background: rgba(110, 155, 220, 0.24); + background: alpha($accent, 0.24); border-radius: 2px; } .ide-hover-documentation { - foreground: #A9B3C4; + foreground: $text-soft; } .ide-diagnostic-tooltip { padding: 5px 8px; align-items: start center; - background: #26282E; - border: 1px #3A3E48; - border-radius: 6px; - shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.45); + background: $bg-raised; + border: 1px $border; + border-radius: $radius-large; + shadow: 0px 6px 16px 0px $shadow; clip: false; } .ide-diagnostic-tooltip.error { - border: 1px rgba(224, 108, 108, 0.55); + border: 1px alpha($danger, 0.55); } .ide-diagnostic-tooltip.warning { - border: 1px rgba(230, 179, 90, 0.5); + border: 1px alpha($warning, 0.5); } .ide-diagnostic-tooltip.info { - border: 1px rgba(110, 155, 220, 0.5); + border: 1px alpha($accent, 0.5); } /* Its size is the editor's, set in code. */ .ide-diagnostic-tooltip-message { - foreground: #d7deea; + foreground: $text-strong; text-wrap: true; } .timeline-keyframe-visual { scale: 1; - stroke: #17191f; + stroke: $bg-window; stroke-width: 1px; - shadow: 0px 0px 2px 0px rgba(130, 164, 220, 0.28); + shadow: 0px 0px 2px 0px alpha($accent, 0.28); transition: scale 160ms ease-out, stroke 160ms ease-out, @@ -501,12 +487,12 @@ .timeline-keyframe:hover .timeline-keyframe-visual { scale: 1.12; - stroke: #dbe5f5; - shadow: 0px 0px 3px 0px rgba(145, 183, 242, 0.48); + stroke: $text-strong; + shadow: 0px 0px 3px 0px alpha($accent, 0.48); } .timeline-keyframe.selected .timeline-keyframe-visual { scale: 1.12; - stroke: #ffffff; - shadow: 0px 0px 4px 0px rgba(165, 201, 255, 0.72); + stroke: $white; + shadow: 0px 0px 4px 0px alpha($accent, 0.72); } diff --git a/runtime/src/test/kotlin/VfxFormatTests.kt b/runtime/src/test/kotlin/VfxFormatTests.kt index 428b50ffd..f237a565e 100644 --- a/runtime/src/test/kotlin/VfxFormatTests.kt +++ b/runtime/src/test/kotlin/VfxFormatTests.kt @@ -129,7 +129,7 @@ class VfxFormatTests { name = "Smoke", modules = listOf(VfxNoiseSpec(strength = VfxValue.Const(0.5f))), ), - VfxPostEffectSpec(id = "grey"), + VfxPostEffectSpec(id = "gray"), ), timeline = VfxTimelineSpec( duration = 3f, diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt index 689fed4cc..c855e6894 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/InlineFlowTest.kt @@ -179,7 +179,7 @@ class InlineFlowTest { } @Test - fun `text-align positions the line left, centre and right`() { + fun `text-align positions the line left, center and right`() { fun wordX(align: String): Float { val s = span("aa") // 12px wide in a 100px flow val (layout, container) = flow(100f, s, sheet = "#flow { text-align: $align; }") diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/ScrollbarSynthesisTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/ScrollbarSynthesisTest.kt index 90a3de507..ced7219f1 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/ScrollbarSynthesisTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/layout/ScrollbarSynthesisTest.kt @@ -161,7 +161,7 @@ class ScrollbarSynthesisTest { } @Test - fun `a horizontal scrollbar keeps the container height and re-centres content in what is left`() { + fun `a horizontal scrollbar keeps the container height and re-centers content in what is left`() { fun horizontalLayout(childWidth: Float): Triple { val child = BoxNode( id = "content", @@ -188,7 +188,7 @@ class ScrollbarSynthesisTest { viewport.content.y + (viewport.content.height - child.rect.height) / 2f, child.rect.y, 0.01f, - "centred content re-centres inside what the bar left over", + "centered content re-centers inside what the bar left over", ) assertTrue(overflowLayout.scrollbars[overflowViewport].orEmpty().isNotEmpty()) } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatchTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatchTest.kt index fdb3e77f1..a9c11c9a5 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatchTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiAnalyticRectBatchTest.kt @@ -76,7 +76,7 @@ class UiAnalyticRectBatchTest { } @Test - fun `a glyph encodes marker, uv, colour and clip into its record`() { + fun `a glyph encodes marker, uv, color and clip into its record`() { val batch = UiAnalyticRectBatch() val clip = UiShaderClip(1f, 2f, 3f, 4f) batch.appendGlyph( @@ -97,7 +97,7 @@ class UiAnalyticRectBatchTest { assertEquals(UiAnalyticRectBatch.GlyphMarker, records[0], "glyph marker in texel 0") assertEquals(0f, records[3], "page index in texel 0") assertEquals(0.1f, records[4]); assertEquals(0.4f, records[7]) // uv rect (texel 1) - assertEquals(0.5f, records[8]); assertEquals(0.8f, records[11]) // colour (texel 2) + assertEquals(0.5f, records[8]); assertEquals(0.8f, records[11]) // color (texel 2) assertEquals(1f, records[12]); assertEquals(4f, records[15]) // clip (texel 3) } @@ -202,7 +202,7 @@ class UiAnalyticRectBatchTest { @Test fun `plain fill joins the analytic batch and is hard-filled by the shader`() { - // A flat colour rect (no radius, no border) batches here; the shader hard-fills it so abutting + // A flat color rect (no radius, no border) batches here; the shader hard-fills it so abutting // opaque fills stay seam-free while still sharing one instanced draw with rounded/bordered rects. val batch = UiAnalyticRectBatch() val command = command() diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiSvgDocumentRenderTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiSvgDocumentRenderTest.kt index d3abe95fa..cb7975273 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiSvgDocumentRenderTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/UiSvgDocumentRenderTest.kt @@ -125,7 +125,7 @@ class UiSvgDocumentRenderTest { val shadow = assertIs(effects.first { it is UiSvgFilterEffect.DropShadow }) assertEquals(1.6f, shadow.offsetX) assertEquals(1.6f, shadow.offsetY) - assertTrue(shadow.color.red > 0.9f && shadow.color.blue < 0.3f, "shadow lost its colour: ${shadow.color}") + assertTrue(shadow.color.red > 0.9f && shadow.color.blue < 0.3f, "shadow lost its color: ${shadow.color}") assertEquals(1, effects.count { it is UiSvgFilterEffect.GaussianBlur }) } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/HssVariablesTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/HssVariablesTest.kt new file mode 100644 index 000000000..acf1dcf4f --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/HssVariablesTest.kt @@ -0,0 +1,75 @@ +package ru.hollowhorizon.hollowengine.client.ui.style + +import org.junit.jupiter.api.Test +import ru.hollowhorizon.hollowengine.client.ui.BoxNode +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.style +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +class HssVariablesTest { + private val sheets = mapOf( + "test:palette.hss" to """ + ${'$'}base: 0.5; + ${'$'}half: ${'$'}base; + .imported { opacity: 0.1; } + """.trimIndent(), + "test:loop-a.hss" to """@import "test:loop-b.hss"; ${'$'}a: 0.3;""", + "test:loop-b.hss" to """@import "test:loop-a.hss"; ${'$'}b: 0.6;""", + ) + + private val reader = HssImportReader { sheets[it] } + + private fun compile(source: String): CompiledHss { + val document = parseHss(source) + return compileHss(document, scope = HssScope.of(document, reader)) + } + + private fun opacityOf(sheet: CompiledHss, vararg tags: String): Float { + val child = BoxNode(tags = tags.toList()) + val root = BoxNode(modifiers = listOf(Modifier.style(sheet))) + root.children.add(child) + UiModifierResolver().resolve(root, animate = false) + return child.resolvedSnapshot.opacity + } + + @Test + fun `a variable is written into the value, variables inside variables included`() { + val sheet = compile("${'$'}fade: ${'$'}inner; ${'$'}inner: 0.4; .a { opacity: ${'$'}fade; }") + assertEquals(0.4f, opacityOf(sheet, "a")) + } + + @Test + fun `an import brings its variables and its rules, and the importing sheet can retune them`() { + val sheet = compile("""@import "test:palette.hss"; ${'$'}base: 0.8; .a { opacity: ${'$'}half; }""") + assertEquals(0.8f, opacityOf(sheet, "a")) + assertEquals(0.1f, opacityOf(sheet, "imported")) + } + + @Test + fun `stylesheets that import each other are each read once`() { + val sheet = compile("""@import "test:loop-a.hss"; .a { opacity: ${'$'}b; } .b { opacity: ${'$'}a; }""") + assertEquals(0.6f, opacityOf(sheet, "a")) + assertEquals(0.3f, opacityOf(sheet, "b")) + } + + @Test + fun `a set is taken in where it is applied, and the rule's own declarations after it win`() { + val sheet = compile( + """ + ${'$'}faded { opacity: ${'$'}level; } + ${'$'}level: 0.3; + .a { @apply ${'$'}faded; } + .b { @apply ${'$'}faded; opacity: 0.9; } + """.trimIndent() + ) + assertEquals(0.3f, opacityOf(sheet, "a")) + assertEquals(0.9f, opacityOf(sheet, "b")) + } + + @Test + fun `a missing import and a variable that names itself fail instead of compiling to nothing`() { + assertFailsWith { compile("""@import "test:absent.hss";""") } + assertFailsWith { compile("${'$'}self: ${'$'}self; .a { opacity: ${'$'}self; }") } + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/TextEffectParsingTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/TextEffectParsingTest.kt index f96388349..57959f165 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/TextEffectParsingTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/style/TextEffectParsingTest.kt @@ -30,7 +30,7 @@ class TextEffectParsingTest { } @Test - fun `a rule takes thickness, offset and colour in that order`() { + fun `a rule takes thickness, offset and color in that order`() { val underline = parseTextEffect("underline(0.09, 0.04, #FF5555)") as Underline assertEquals(0.09f, underline.thickness) assertEquals(0.04f, underline.offset) diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfEdgeColoringTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfEdgeColoringTest.kt index 6754aa032..484e57e44 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfEdgeColoringTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfEdgeColoringTest.kt @@ -21,11 +21,11 @@ class MsdfEdgeColoringTest { } @Test - fun `a single corner splits the contour into three colour bands`() { + fun `a single corner splits the contour into three color bands`() { val shape = teardrop() shape.colorEdges() val colors = shape.contours.single().edges.map { it.color } - assertEquals(3, colors.toSet().size, "three bands, not one colour for the whole loop: $colors") + assertEquals(3, colors.toSet().size, "three bands, not one color for the whole loop: $colors") } @Test @@ -49,7 +49,7 @@ class MsdfEdgeColoringTest { } @Test - fun `a square's four corners still alternate colours`() { + fun `a square's four corners still alternate colors`() { val shape = MsdfShape().apply { contours += squareContour(left = 0f, bottom = 0f, size = 10f) } shape.colorEdges() val colors = shape.contours.single().edges.map { it.color } @@ -76,7 +76,7 @@ class MsdfEdgeColoringTest { } @Test - fun `a colouring that would drop a channel falls back to a plain field`() { + fun `a coloring that would drop a channel falls back to a plain field`() { val shape = MsdfShape() shape.contours += MsdfContour().apply { edges += MsdfEdge(floatArrayOf(0f, 0f, 10f, 0f)).also { it.color = MsdfChannel.CYAN } @@ -86,7 +86,7 @@ class MsdfEdgeColoringTest { assertEquals(MsdfChannel.WHITE, shape.usedChannels()) } - /** Corners as the colourer itself counts them, at the threshold it actually runs with. */ + /** Corners as the colorer itself counts them, at the threshold it actually runs with. */ private fun cornerCount(shape: MsdfShape): Int = findCorners(shape.contours.single().edges, sin(DefaultAngleThreshold)).size diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfGeneratorTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfGeneratorTest.kt index 5cf728f2c..0efb30e49 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfGeneratorTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/utils/font/MsdfGeneratorTest.kt @@ -21,7 +21,7 @@ class MsdfGeneratorTest { @Test fun `distance is positive inside the shape and negative outside`() { val field = squareField() - assertTrue(field.median(16, 16) > 0.5f, "the centre is inside: ${field.median(16, 16)}") + assertTrue(field.median(16, 16) > 0.5f, "the center is inside: ${field.median(16, 16)}") assertTrue(field.median(2, 2) < 0.5f, "the far corner is outside: ${field.median(2, 2)}") assertTrue(field.median(16, 2) < 0.5f, "below the square is outside: ${field.median(16, 2)}") } @@ -29,7 +29,7 @@ class MsdfGeneratorTest { @Test fun `the encoded distance crosses one half exactly on the edge`() { val field = squareField() - // Pixel centres sit at x + 0.5, so columns 7 and 8 straddle the edge at x = 8 by half a + // Pixel centers sit at x + 0.5, so columns 7 and 8 straddle the edge at x = 8 by half a // unit each way; with a range of 8 that is 1/16 of the encoded scale. assertEquals(0.5f - 0.5f / 8f, field.median(7, 16), Tolerance) assertEquals(0.5f + 0.5f / 8f, field.median(8, 16), Tolerance) diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/story/StoryScriptingAnalyzerTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/story/StoryScriptingAnalyzerTest.kt index 6a251bc39..774ec2682 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/story/StoryScriptingAnalyzerTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/story/StoryScriptingAnalyzerTest.kt @@ -35,7 +35,7 @@ class StoryScriptingAnalyzerTest { } @Test - fun `interpolation and named arguments are coloured inside a line`() { + fun `interpolation and named arguments are colored inside a line`() { val source = "Баланс {money} монет.\n@play-video example.ogg volume=1.0" assertEquals(TokenType.VARIABLE, styleOf(source, "{money}")) diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt index 180a90089..aa37091d1 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt @@ -9,12 +9,18 @@ import kotlin.test.assertEquals */ class BundledStylesheetDiagnosticsTest { private val stylesheets = listOf( + "animator-editor.hss", "asset-manager.hss", "docking.hss", + "entity-editor.hss", "ide.hss", "image-editor.hss", + "inspector.hss", "model-editor.hss", + "notifications.hss", "sounds-editor.hss", + "theme.hss", + "timeline.hss", "widgets.hss", ) diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssColorHintsTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssColorHintsTest.kt index c83e55051..c11bb51f2 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssColorHintsTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/HssColorHintsTest.kt @@ -10,14 +10,14 @@ import kotlin.test.assertTrue class HssColorHintsTest { @Test - fun `hex and function colours are both found`() { + fun `hex and function colors are both found`() { val literals = hssColorLiterals("1px #FF8800 rgba(10, 20, 30, 0.5)") assertEquals(listOf("#FF8800", "rgba(10, 20, 30, 0.5)"), literals.map { it.text }) assertEquals(0xFFFF8800.toInt(), literals.first().argb) } @Test - fun `values that only look like colours are skipped`() { + fun `values that only look like colors are skipped`() { assertTrue(hssColorLiterals("#GGHHII").isEmpty()) assertTrue(hssColorLiterals("hollowengine:textures/gui/icons/link.svg").isEmpty()) } @@ -31,7 +31,7 @@ class HssColorHintsTest { } @Test - fun `a declaration colour gets a clickable swatch anchored on the literal`() { + fun `a declaration color gets a clickable swatch anchored on the literal`() { val source = ".panel {\n background: #123456;\n}" val hints = hssInlayHints(HssDocumentModel(source)) val swatch = hints.single { it.content.any { part -> part is InlayContent.Swatch } } From 35528c3f15c7d3c3f828b9cb4e8dd61675d57fa7 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 15:43:16 +0300 Subject: [PATCH 09/25] Fix UI node identity on recomposition --- .../hollowengine/client/ui/UiCompose.kt | 113 ++++++++++-------- .../assets/hollowengine/ui/styles/docking.hss | 2 +- .../assets/hollowengine/ui/styles/ide.hss | 10 +- .../client/ui/NodeIdentityTest.kt | 32 +++++ 4 files changed, 103 insertions(+), 54 deletions(-) create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/NodeIdentityTest.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt index e07c0d83c..56cced8b1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt @@ -152,17 +152,19 @@ fun Layout( } } } - ReusableComposeNode( - factory = { BoxNode(id, measurePolicy, tags, modifiers, attributes) }, - update = { - update(measurePolicy) { - this.measurePolicy = it - invalidateLayout() - } - updateCommon(modifiers, attributes, tags) - }, - content = scoped, - ) + key(id) { + ReusableComposeNode( + factory = { BoxNode(id, measurePolicy, tags, modifiers, attributes) }, + update = { + update(measurePolicy) { + this.measurePolicy = it + invalidateLayout() + } + updateCommon(modifiers, attributes, tags) + }, + content = scoped, + ) + } } @@ -202,16 +204,18 @@ fun Span( modifier: Modifier? = null, ) { val modifiers = modifier.asList() - ReusableComposeNode( - factory = { SpanNode(value, id, tags, modifiers) }, - update = { - update(value) { - text = it - invalidateLayout() - } - updateCommon(modifiers, emptyMap(), tags) - }, - ) + key(id) { + ReusableComposeNode( + factory = { SpanNode(value, id, tags, modifiers) }, + update = { + update(value) { + text = it + invalidateLayout() + } + updateCommon(modifiers, emptyMap(), tags) + }, + ) + } } @Composable @@ -293,19 +297,22 @@ fun Element( ) { val modifiers = modifier.asList() val nodeType = type.lowercase() - ReusableComposeNode( - factory = { - BaseUiNode( - nodeType, - id?.removePrefix("#"), - tags.map { it.removePrefix(".") }, - modifiers, - attributes, - ) - }, - update = { updateCommon(modifiers, attributes, tags.map { it.removePrefix(".") }) }, - content = content, - ) + // A node is its id: interaction state is tracked by it, so another id is another node. + key(id) { + ReusableComposeNode( + factory = { + BaseUiNode( + nodeType, + id?.removePrefix("#"), + tags.map { it.removePrefix(".") }, + modifiers, + attributes, + ) + }, + update = { updateCommon(modifiers, attributes, tags.map { it.removePrefix(".") }) }, + content = content, + ) + } } @@ -673,12 +680,14 @@ private fun ContentNode( attributes: Map, ) { val modifiers = listOf(if (modifier == null) contentModifier else contentModifier then modifier) - ReusableComposeNode( - factory = { - BaseUiNode(type, id?.removePrefix("#"), tags.map { it.removePrefix(".") }, modifiers, attributes) - }, - update = { updateCommon(modifiers, attributes, tags) }, - ) + key(id) { + ReusableComposeNode( + factory = { + BaseUiNode(type, id?.removePrefix("#"), tags.map { it.removePrefix(".") }, modifiers, attributes) + }, + update = { updateCommon(modifiers, attributes, tags) }, + ) + } } /** Popups render above everything; the OverlayHost carries this layer so all passes prefer it. */ @@ -813,17 +822,19 @@ private fun PopupNodeEmitter( val styledContent: HollowUiContent = { CompositionLocalProvider(LocalStylesheets provides stylesheets) { content() } } - ReusableComposeNode( - factory = { PopupNode(anchorBounds, alignment, id, tags, modifiers, attributes) }, - update = { - update(values) { - apply(it) - invalidateLayout() - } - updateCommon(modifiers, attributes, tags) - }, - content = styledContent, - ) + key(id) { + ReusableComposeNode( + factory = { PopupNode(anchorBounds, alignment, id, tags, modifiers, attributes) }, + update = { + update(values) { + apply(it) + invalidateLayout() + } + updateCommon(modifiers, attributes, tags) + }, + content = styledContent, + ) + } } /** diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss index d19a2c863..fcd9834ca 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/docking.hss @@ -128,7 +128,7 @@ } .dock-stripe-icon { - size: 14px 14px; + size: 12px 12px; } .dock-pinned-panel { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss index 695b94c00..0d7c8dc90 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss @@ -37,7 +37,7 @@ #ide-toolbar { size: 100% fit; - padding: 1px 4px 1px 0px; + padding: 1px 0px; gap: 2px; background: $bg-window; } @@ -85,8 +85,14 @@ background: $bg-selected; } +#ide-toolbar-search { + size: $rail $rail; + margin: 0px; + padding: 5px; +} + .ide-toolbar-button-icon { - size: 13px 13px; + size: 12px 12px; tint: $text-soft; transition: all 110ms ease-out; } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/NodeIdentityTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/NodeIdentityTest.kt new file mode 100644 index 000000000..50e9a26da --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/NodeIdentityTest.kt @@ -0,0 +1,32 @@ +package ru.hollowhorizon.hollowengine.client.ui + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshots.Snapshot +import kotlin.test.Test +import kotlin.test.assertEquals + +/** + * A node's id is its identity: a composable that is recomposed with another id must end up as a node + * with that id. A reused node kept its first id, so a dock panel that switched windows still answered + * clicks as the first window. + */ +class NodeIdentityTest { + @Test + fun `a node recomposed with another id carries the new id`() { + var window by mutableStateOf("timeline") + HollowUiSurface().use { surface -> + surface.setContent { + Box(id = "panel-$window-content", modifier = Modifier.size(100.px, 60.px).input(clickable = true)) + } + surface.frame(200f, 120f, 10f, 10f, 0L) + + window = "assets" + Snapshot.sendApplyNotifications() + val frame = surface.frame(200f, 120f, 10f, 10f, 1L) + + assertEquals("panel-assets-content", frame.hitTest(10f, 10f)?.node?.id) + } + } +} From 015b82e3008121ac2fd2454e6d2561757e2a9f21 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 15:47:41 +0300 Subject: [PATCH 10/25] Introduce console history abstraction --- .../client/ui/ide/panels/ConsoleHistory.kt | 106 ++++++++++++++++++ .../client/ui/ide/panels/ConsoleState.kt | 28 ++--- .../ui/ide/panels/ConsoleHistoryTest.kt | 25 +++++ 3 files changed, 138 insertions(+), 21 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistory.kt create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistoryTest.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistory.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistory.kt new file mode 100644 index 000000000..91d0251e6 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistory.kt @@ -0,0 +1,106 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.panels + +import kotlinx.serialization.builtins.ListSerializer +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.json.Json +import net.minecraft.client.Minecraft +import org.apache.logging.log4j.LogManager +import ru.hollowhorizon.hollowengine.common.config.Config +import kotlin.io.path.createParentDirectories +import kotlin.io.path.exists +import kotlin.io.path.readText +import kotlin.io.path.writeText + +/** Where earlier inputs of one console mode live, oldest first. */ +internal interface ConsoleHistoryStore { + val entries: List + + fun add(entry: String) +} + +/** + * The chat's own history, so a command sent from the console comes up on Up in the chat and the + * other way round. + */ +internal object VanillaCommandHistory : ConsoleHistoryStore { + override val entries: List + get() = Minecraft.getInstance().gui.chat.recentChat + .filter { it.startsWith("/") } + .map { it.removePrefix("/") } + + override fun add(entry: String) { + Minecraft.getInstance().gui.chat.addRecentChat("/" + entry.removePrefix("/")) + } +} + +/** Kotlin snippets, kept in the config directory between sessions. */ +internal object ConsoleSnippetHistory : ConsoleHistoryStore { + private const val MaxEntries = 50 + + private val LOGGER = LogManager.getLogger("HollowIde") + private val serializer = ListSerializer(String.serializer()) + private val json = Json { prettyPrint = true } + private val file get() = Config.CONFIG_DIR.resolve("hollowengine").resolve("console-history.json") + + private val loaded: ArrayList by lazy { ArrayList(read()) } + + override val entries: List get() = loaded + + override fun add(entry: String) { + if (loaded.lastOrNull() == entry) return + loaded += entry + if (loaded.size > MaxEntries) loaded.removeAt(0) + write() + } + + private fun read(): List { + val path = file + if (!path.exists()) return emptyList() + return try { + json.decodeFromString(serializer, path.readText()).takeLast(MaxEntries) + } catch (e: Exception) { + LOGGER.warn("Could not read the console history", e) + emptyList() + } + } + + private fun write() { + try { + val path = file + path.createParentDirectories() + path.writeText(json.encodeToString(serializer, loaded)) + } catch (e: Exception) { + LOGGER.warn("Could not write the console history", e) + } + } +} + +/** + * Up/Down through a [ConsoleHistoryStore], like the chat does it: the text typed before stepping + * back is kept and comes back when stepping past the newest entry. + */ +internal class ConsoleHistory(private val store: ConsoleHistoryStore) { + private var position = -1 + private var draft = "" + + /** The input one step [older] or newer than [current], or null when there is nowhere to go. */ + fun step(current: String, older: Boolean): String? { + val entries = store.entries + val target = if (older) position + 1 else position - 1 + if (target < -1 || target > entries.lastIndex) return null + if (position == -1) draft = current + position = target + return if (target == -1) draft else entries[entries.lastIndex - target] + } + + fun add(entry: String) { + store.add(entry) + reset() + } + + /** Back to the text being typed, for when the input changes under the history. */ + fun reset() { + position = -1 + draft = "" + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt index ee5ba9947..9d8200fb0 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleState.kt @@ -40,8 +40,10 @@ internal class HollowIdeConsole { private set private val inputs = mutableStateMapOf() - private val history = ConsoleInputMode.entries.associateWith { ArrayList() } - private var historyIndex = -1 + private val history = mapOf( + ConsoleInputMode.COMMAND to ConsoleHistory(VanillaCommandHistory), + ConsoleInputMode.KOTLIN to ConsoleHistory(ConsoleSnippetHistory), + ) val commands = ConsoleCommandAssist { assistRevision++ } @@ -73,10 +75,10 @@ internal class HollowIdeConsole { fun run() { if (!canRun) return val text = input - addToHistory(text) when (mode) { ConsoleInputMode.COMMAND -> runCommand(text.trim()) ConsoleInputMode.KOTLIN -> { + history.getValue(mode).add(text) running = true ConsoleScripts.run(text) { running = false } } @@ -88,34 +90,18 @@ internal class HollowIdeConsole { /** Steps through earlier inputs of the current mode; [older] goes back in time. */ fun browseHistory(older: Boolean): Boolean { - val entries = history.getValue(mode) - if (entries.isEmpty()) return false - historyIndex = when { - older -> (historyIndex + 1).coerceAtMost(entries.lastIndex) - historyIndex <= 0 -> -1 - else -> historyIndex - 1 - } - input = if (historyIndex < 0) "" else entries[entries.lastIndex - historyIndex] + input = history.getValue(mode).step(input, older) ?: return false return true } - private fun addToHistory(text: String) { - val entries = history.getValue(mode) - entries.remove(text) - entries += text - if (entries.size > MaxHistory) entries.removeAt(0) - historyIndex = -1 - } - private fun runCommand(command: String) { val connection = Minecraft.getInstance().connection ?: return + history.getValue(ConsoleInputMode.COMMAND).add(command) connection.sendCommand(command.removePrefix("/")) HollowEngine.LOGGER.info("Executed command: {}", command) } private companion object { - const val MaxHistory = 50 - /** Named like a project script so imports resolve, with the console's own script type. */ val KotlinInputPath = "${SandboxScriptSource.SCRIPTS_DIRECTORY}/${ConsoleScripts.SCRIPT_NAME}" } diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistoryTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistoryTest.kt new file mode 100644 index 000000000..a12fabf1f --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/ide/panels/ConsoleHistoryTest.kt @@ -0,0 +1,25 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.panels + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class ConsoleHistoryTest { + private class ListStore(override val entries: MutableList) : ConsoleHistoryStore { + override fun add(entry: String) { + entries += entry + } + } + + @Test + fun `stepping past the newest entry brings back the text being typed`() { + val history = ConsoleHistory(ListStore(mutableListOf("time set day", "weather clear"))) + + assertEquals("weather clear", history.step("give @s", older = true)) + assertEquals("time set day", history.step("weather clear", older = true)) + assertNull(history.step("time set day", older = true)) + assertEquals("weather clear", history.step("time set day", older = false)) + assertEquals("give @s", history.step("weather clear", older = false)) + assertNull(history.step("give @s", older = false)) + } +} From 3e2036d53830d2cdbca5be90f1db6c7c14a49341 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 16:02:54 +0300 Subject: [PATCH 11/25] Fix text field diagnostics and key handling --- .../hollowengine/client/ui/text/UiTextFont.kt | 11 +++++++++++ .../client/ui/widgets/UiEditableTextField.kt | 1 + .../ui/widgets/UiEditableTextFieldDiagnostics.kt | 9 +++++---- .../client/ui/widgets/EditableTextFieldKeyTest.kt | 8 ++++++++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiTextFont.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiTextFont.kt index 4852d7ded..f0b0321e9 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiTextFont.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/text/UiTextFont.kt @@ -11,6 +11,8 @@ internal sealed interface UiTextFont { fun lineHeight(fontSize: Float): Float + fun underlineY(fontSize: Float): Float + fun width(text: String, fontSize: Float, style: UiInlineStyle): Float } @@ -45,12 +47,15 @@ internal object UiTextFonts { override fun lineHeight(fontSize: Float): Float = fontSize + override fun underlineY(fontSize: Float): Float = fontSize * EstimatedUnderlineShare + override fun width(text: String, fontSize: Float, style: UiInlineStyle): Float { val scale = fontSize / EstimateBaselineFontSize return text.length * (EstimatedGlyphWidth * scale + style.boldWeight * fontSize) } private const val EstimateBaselineFontSize = 10f + private const val EstimatedUnderlineShare = 0.9f } private data class MsdfTextFont( @@ -61,6 +66,9 @@ internal object UiTextFonts { override fun lineHeight(fontSize: Float): Float = metrics.lineHeight(fontSize) + override fun underlineY(fontSize: Float): Float = + (metrics.meta.metrics.ascender - metrics.meta.metrics.underlineY) * fontSize + override fun width(text: String, fontSize: Float, style: UiInlineStyle): Float { val boldOffset = style.boldWeight * fontSize return metrics.width(text, fontSize) + text.length * boldOffset @@ -76,6 +84,9 @@ internal object UiTextFonts { override fun lineHeight(fontSize: Float): Float = face.lineHeight(fontSize) + override fun underlineY(fontSize: Float): Float = + (UiVanillaFont.ascenderEm - UiVanillaFont.underlineYEm) * fontSize + override fun width(text: String, fontSize: Float, style: UiInlineStyle): Float = face.width(text, fontSize) + text.length * style.boldWeight * fontSize } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt index 657908a61..5307a66f3 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextField.kt @@ -1290,6 +1290,7 @@ internal fun handleEditableFieldKey( GLFW.GLFW_KEY_LEFT, GLFW.GLFW_KEY_RIGHT -> completion.close() } } + if (!state.multiline && !input.shift && (input.key == GLFW.GLFW_KEY_UP || input.key == GLFW.GLFW_KEY_DOWN)) return false if (input.key == GLFW.GLFW_KEY_ESCAPE && codeInsight?.dismissSignature() == true) return true if (completion != null && (input.command && input.key == GLFW.GLFW_KEY_SPACE || input.alt && (input.key == GLFW.GLFW_KEY_ENTER || input.key == GLFW.GLFW_KEY_KP_ENTER))) { completion.open() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt index 0aa2f62a2..cbc0bb978 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldDiagnostics.kt @@ -10,6 +10,7 @@ import ru.hollowhorizon.hollowengine.client.ui.shape.UiShapeSize import ru.hollowhorizon.hollowengine.client.ui.shape.path import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint import ru.hollowhorizon.hollowengine.client.ui.text.UiTextLayout +import ru.hollowhorizon.hollowengine.client.ui.text.UiTextFonts import ru.hollowhorizon.hollowengine.client.ui.text.UiTextLayouter import ru.hollowhorizon.hollowengine.client.ui.text.caretPosition import kotlin.math.ceil @@ -36,13 +37,13 @@ internal data class WavyUnderlineShape(val halfWave: Float) : Shape { * The squiggle's proportions for [fontSize], so it scales with the text. Half-waves are rounded to * half a pixel: the stroke mesh is cached per shape, and every zoom step must not mint a new one. */ -internal class DiagnosticUnderline(fontSize: Float) { +internal class DiagnosticUnderline(fontSize: Float, fontFamily: String?) { val halfWave: Float = (fontSize * 0.28f * 2f).roundToInt().coerceAtLeast(4) / 2f val amplitude: Float = (fontSize * 0.1f).coerceIn(1f, 3f) val thickness: Float = (fontSize / 12f).coerceIn(0.9f, 2f) val shape = WavyUnderlineShape(halfWave) - val lift: Float = fontSize * 0.12f + val middle: Float = UiTextFonts.resolve(fontFamily).underlineY(fontSize) } internal fun UiTextDiagnosticSeverity.diagnosticUnderlineColor(): UiColor = when (this) { @@ -86,7 +87,7 @@ internal fun EditableFieldRowDiagnostics( fontFamily: String?, contentWidth: Float, ) { - val underline = DiagnosticUnderline(fontSize) + val underline = DiagnosticUnderline(fontSize, fontFamily) rowDiagnostics.forEachIndexed { diagnosticIndex, diagnostic -> val localStart = diagnostic.start.coerceIn(0, line.text.length) val localEnd = diagnostic.end.coerceIn(localStart, line.text.length) @@ -105,7 +106,7 @@ internal fun EditableFieldRowDiagnostics( rects.forEachIndexed { rectIndex, rect -> val width = (ceil(rect.width / underline.halfWave) * underline.halfWave) .coerceAtLeast(underline.halfWave * 2f) - val middle = top + rect.y + rect.height - underline.lift + val middle = top + rect.y + underline.middle key("diag", diagnosticIndex, rectIndex) { Box( modifier = Modifier diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/EditableTextFieldKeyTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/EditableTextFieldKeyTest.kt index 08c44bd1e..b3e750798 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/EditableTextFieldKeyTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/widgets/EditableTextFieldKeyTest.kt @@ -146,6 +146,14 @@ class EditableTextFieldKeyTest { } } + @Test + fun `a single-line field leaves plain up and down to its host`() { + val s = TextFieldState(initialText = "say hi", initialCaret = 3) + assertFalse(s.press(GLFW.GLFW_KEY_UP)) + assertFalse(s.press(GLFW.GLFW_KEY_DOWN)) + assertEquals(3, s.caret) + } + @Test fun `ctrl-alt-down adds a caret on the next line`() { val s = state("ab\ncd", caret = 1) From afb74567cb9a297f1b2c454c8b7e46cd85183dbb Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Fri, 25 Sep 2026 16:38:16 +0300 Subject: [PATCH 12/25] Add sky VFX node and renderer --- .../client/ui/ide/files/vfx/VfxInspector.kt | 2 + .../ui/ide/files/vfx/VfxPreviewState.kt | 2 +- .../ui/ide/files/vfx/VfxShaderInspector.kt | 17 ++ .../hollowengine/client/vfx/VfxNodeRuntime.kt | 2 + .../client/vfx/render/VfxDrawList.kt | 8 +- .../client/vfx/render/VfxDraws.kt | 3 +- .../client/vfx/render/VfxScreenNodes.kt | 58 ++++++ .../vfx/render/VfxShaderDeclarations.kt | 2 +- .../hollowengine/common/vfx/VfxRegistries.kt | 1 + .../hollowengine/common/vfx/VfxScreenSpecs.kt | 30 +++ .../main/lang/en_us/hollowengine/gui/vfx.json | 3 + .../main/lang/ru_ru/hollowengine/gui/vfx.json | 3 + .../shaders/core/vfx/sky/shockwave.fsh | 97 +++++++++ .../shaders/core/vfx/sky/shockwave.json | 19 ++ .../hollowengine/shaders/core/vfx/sky/sky.vsh | 14 ++ .../textures/gui/icons/vfx/node_sky.svg | 7 + .../textures/gui/icons/vfx/sky.svg | 7 + .../assets/hollowengine/vfx/sky_strike.vfx | 185 ++++++++++++++++++ 18 files changed, 456 insertions(+), 4 deletions(-) create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/sky.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sky.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sky.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt index 8aaf9fefb..a9838b171 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt @@ -80,6 +80,7 @@ private fun NodeFields(document: HollowIdeVfxDocument, state: VfxEditorState, no is VfxTrailSpec -> TrailFields(document, state, node) is VfxBeamSpec -> BeamFields(document, state, node) is VfxPostEffectSpec -> PostEffectFields(document, state, node) + is VfxSkySpec -> SkyFields(document, state, node) is VfxCameraShakeSpec -> CameraShakeFields(document, state, node) else -> Unit } @@ -224,6 +225,7 @@ internal object VfxIcons { const val TRAIL = ROOT + "trail.svg" const val BEAM = ROOT + "beam.svg" const val POST = ROOT + "post.svg" + const val SKY = ROOT + "sky.svg" const val SHAKE = ROOT + "shake.svg" const val TIMELINE = ROOT + "timeline.svg" const val STATS = ROOT + "stats.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt index 42b84e2a5..d6f7fe78a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewState.kt @@ -261,7 +261,7 @@ class VfxPreviewState(initialDistance: Float = 4.5f) { val FIELD_OF_VIEW = Math.toRadians(VfxPreviewFieldOfView.toDouble()).toFloat() const val NEAR = 0.05f - const val FAR = 200f + const val FAR = 1024f const val PANEL_DEPTH = 500f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt index 9e983a9af..a0a6d24f8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt @@ -20,6 +20,7 @@ import ru.hollowhorizon.hollowengine.common.vfx.VfxCameraShakeSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxPostEffectSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.VfxSamplerSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxSkySpec import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformValue @@ -39,6 +40,22 @@ internal fun PostEffectFields(document: HollowIdeVfxDocument, state: VfxEditorSt } } +@Composable +internal fun SkyFields(document: HollowIdeVfxDocument, state: VfxEditorState, sky: VfxSkySpec) { + Folding(state, "sky", vfxText("section_sky"), VfxIcons.SKY) { + VfxShaderRow(sky.shader, vfxText("shader_sky_hint"), "vfx-sky-shader") { shader -> + document.replace(sky.copy(shader = shader.orEmpty(), uniforms = alignUniforms(shader, sky.uniforms))) + } + VfxShaderFields( + sky.shader, + sky.uniforms, + sky.samplers, + onUniforms = { document.replace(sky.copy(uniforms = it)) }, + onSamplers = { document.replace(sky.copy(samplers = it)) }, + ) + } +} + @Composable internal fun CameraShakeFields(document: HollowIdeVfxDocument, state: VfxEditorState, shake: VfxCameraShakeSpec) { Folding(state, "shake", vfxText("section_shake"), VfxIcons.SHAKE) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt index c5922db2a..668d1501c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxNodeRuntime.kt @@ -10,6 +10,7 @@ import ru.hollowhorizon.hollowengine.client.vfx.render.VfxMeshNode import ru.hollowhorizon.hollowengine.client.vfx.render.VfxModelNode import ru.hollowhorizon.hollowengine.client.vfx.render.VfxPlaneNode import ru.hollowhorizon.hollowengine.client.vfx.render.VfxPostEffectNode +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxSkyNode import ru.hollowhorizon.hollowengine.client.vfx.render.VfxTrailRenderer import ru.hollowhorizon.hollowengine.common.utils.rl import ru.hollowhorizon.hollowengine.common.vfx.* @@ -157,6 +158,7 @@ object VfxNodeRuntimes { register("hollowengine:vfx/trail") { VfxTrailRenderer(it.spec as VfxTrailSpec, it) } register("hollowengine:vfx/beam") { VfxBeamRenderer(it.spec as VfxBeamSpec, it) } register("hollowengine:vfx/post_effect") { VfxPostEffectNode(it.spec as VfxPostEffectSpec, it) } + register("hollowengine:vfx/sky") { VfxSkyNode(it.spec as VfxSkySpec, it) } register("hollowengine:vfx/camera_shake") { VfxCameraShake(it.spec as VfxCameraShakeSpec, it) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt index ba4f6afc3..ff56eca5f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt @@ -99,6 +99,9 @@ class VfxRibbonDraw( /** A full-screen pass, with the uniforms it is drawn with this frame. */ class VfxPostDraw(val shader: String, val uniforms: VfxUniformValues) +/** A sky node's pass, with where its node is in the space of the view and how long the effect has played. */ +class VfxSkyDraw(val shader: String, val uniforms: VfxUniformValues, val position: Vector3f, val time: Float) + /** * Everything the playing effects draw this frame, sorted by how it is drawn. */ @@ -108,12 +111,14 @@ class VfxDrawList { val models = ArrayList() val ribbons = ArrayList() val posts = ArrayList() + val skies = ArrayList() /** Camera shake in degrees: pitch, yaw and roll, summed over every shaking node. */ val shake = FloatArray(3) val isEmpty: Boolean - get() = quads.isEmpty() && meshes.isEmpty() && models.isEmpty() && ribbons.isEmpty() && posts.isEmpty() + get() = quads.isEmpty() && meshes.isEmpty() && models.isEmpty() && ribbons.isEmpty() && posts.isEmpty() && + skies.isEmpty() /** Whether any surface is drawn by a shader of the author, which may read the scene textures. */ val usesCustomShaders: Boolean @@ -126,6 +131,7 @@ class VfxDrawList { models.clear() ribbons.clear() posts.clear() + skies.clear() shake.fill(0f) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt index a41d328cb..6c3fe787c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt @@ -28,10 +28,11 @@ object VfxFrameRenderer { renderSurfaces(list, view, target) } - /** Everything drawn with the effect shaders: meshes, ribbons and planes. */ + /** Everything drawn with the effect shaders: the sky, then meshes, ribbons and planes. */ fun renderSurfaces(list: VfxDrawList, view: VfxView, target: RenderTarget) { if (list.usesCustomShaders) VfxSceneTextures.capture(target) + VfxSkyRenderer.render(list.skies, view) VfxMeshRenderer.render(list.meshes, view) VfxRibbonRenderer.render(list.ribbons, view) VfxQuadRenderer.render(list.quads, view) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt index 14220e6ed..2804a77b8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt @@ -7,6 +7,7 @@ import com.mojang.blaze3d.vertex.Tesselator import com.mojang.blaze3d.vertex.VertexFormat import org.joml.Matrix4f import org.joml.Vector3f +import org.lwjgl.opengl.GL33 import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeBehavior import ru.hollowhorizon.hollowengine.client.vfx.VfxNodeRuntime import ru.hollowhorizon.hollowengine.client.vfx.VfxNoise @@ -15,6 +16,7 @@ import ru.hollowhorizon.hollowengine.client.vfx.VfxSamplers import ru.hollowhorizon.hollowengine.common.vfx.VfxCameraShakeSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxPostEffectSpec import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxSkySpec /** Hands the frame its full-screen pass while the node is on. */ class VfxPostEffectNode(private val spec: VfxPostEffectSpec, private val node: VfxNodeRuntime) : VfxNodeBehavior { @@ -26,6 +28,22 @@ class VfxPostEffectNode(private val spec: VfxPostEffectSpec, private val node: V } } +/** Hands the frame its sky pass while the node is on. */ +class VfxSkyNode(private val spec: VfxSkySpec, private val node: VfxNodeRuntime) : VfxNodeBehavior { + private val uniforms = VfxUniformBinding(spec.shader, spec.uniforms, spec.samplers, node) + + override fun collect(into: VfxDrawList, placement: Matrix4f) { + if (!node.isActive || spec.shader.isBlank()) return + val origin = node.frame.position + into.skies += VfxSkyDraw( + shader = spec.shader, + uniforms = uniforms.evaluate(node.context), + position = placement.transformPosition(Vector3f(origin.x, origin.y, origin.z)), + time = node.context.effectTime, + ) + } +} + /** * Adds its swing to the camera shake of the frame. The swing follows smooth noise, one channel per * axis, so it never repeats and never jumps. @@ -67,6 +85,46 @@ class VfxCameraShake(private val spec: VfxCameraShakeSpec, private val node: Vfx } } +/** + * Draws the sky nodes of the frame, each a quad over the whole screen on the far plane. + */ +object VfxSkyRenderer { + fun render(skies: List, view: VfxView) { + if (skies.isEmpty()) return + val toView = Matrix4f(view.projection).mul(view.modelView).invert() + + RenderSystem.enableDepthTest() + RenderSystem.depthFunc(GL33.GL_LEQUAL) + RenderSystem.depthMask(false) + RenderSystem.enableBlend() + RenderSystem.defaultBlendFunc() + RenderSystem.disableCull() + try { + skies.forEach { sky -> + val shader = VfxShaders.get(sky.shader, DefaultVertexFormat.POSITION) ?: return@forEach + val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION) + builder.addVertex(-1f, -1f, 1f) + builder.addVertex(1f, -1f, 1f) + builder.addVertex(1f, 1f, 1f) + builder.addVertex(-1f, 1f, 1f) + val mesh = builder.build() ?: return@forEach + + val offset = Vector3f(sky.position).sub(view.eye) + val center = if (offset.lengthSquared() > 1e-6f) Vector3f(offset).normalize() else Vector3f(0f, 1f, 0f) + view.drawImmediate(mesh, shader) { bound -> + bound.safeGetUniform("InvViewProjMat").set(toView) + bound.safeGetUniform("SkyCenter").set(center.x, center.y, center.z) + bound.safeGetUniform("NodeOffset").set(offset.x, offset.y, offset.z) + bound.safeGetUniform("EffectTime").set(sky.time) + sky.uniforms.apply(bound) + } + } + } finally { + VfxMaterialStates.restore() + } + } +} + /** * Draws the full-screen passes of the frame, each over the result of the one before it. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt index 4670366f1..1f0a9575e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt @@ -50,7 +50,7 @@ class VfxShaderDeclaration(val uniforms: List, val samplers: L private val ENGINE_UNIFORMS = setOf( "ModelViewMat", "ProjMat", "IViewRotMat", "TextureMat", "ColorModulator", "Light0_Direction", "Light1_Direction", "FogStart", "FogEnd", "FogColor", "FogShape", "LineWidth", "GameTime", - "ScreenSize", "GlintAlpha", "ChunkOffset", "Shaded", "BlendMode", + "ScreenSize", "GlintAlpha", "ChunkOffset", "Shaded", "BlendMode", "SkyCenter", "NodeOffset", "EffectTime", ) /** The material texture, the light map and the scene copies. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt index 2edb7d83a..0a5e6c382 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxRegistries.kt @@ -48,6 +48,7 @@ object VfxNodeTypes { builtIn("trail", VfxTrailSpec.serializer(), "vfx/node_trail.svg") { VfxTrailSpec() } builtIn("beam", VfxBeamSpec.serializer(), "vfx/node_beam.svg") { VfxBeamSpec() } builtIn("post_effect", VfxPostEffectSpec.serializer(), "vfx/node_post_effect.svg") { VfxPostEffectSpec() } + builtIn("sky", VfxSkySpec.serializer(), "vfx/node_sky.svg") { VfxSkySpec() } builtIn("camera_shake", VfxCameraShakeSpec.serializer(), "vfx/node_camera_shake.svg") { VfxCameraShakeSpec() } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt index 4c8642a25..fbafb8804 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxScreenSpecs.kt @@ -73,3 +73,33 @@ data class VfxCameraShakeSpec( scalar(VfxProperty.SHAKE_FREQUENCY, "shake_frequency", frequency), ) } + +/** + * Paints the sky while the node is on: a core shader drawn on the far plane, so it covers only what + * nothing else stands in front of. Terrain, entities and clouds stay over it. + */ +@Serializable +@SerialName("hollowengine:vfx/sky") +data class VfxSkySpec( + override val id: String = newVfxNodeId("sky"), + override val name: String = "Sky", + override val enabled: Boolean = true, + override val transform: VfxTransform = VfxTransform(position = Vec3f(0f, 200f, 0f)), + override val children: List = emptyList(), + /** `namespace:path` of `assets/namespace/shaders/core/path.json`. */ + val shader: String = "hollowengine:vfx/sky/shockwave", + val uniforms: List = emptyList(), + val samplers: List = emptyList(), +) : VfxNodeSpec() { + override fun withCommon( + id: String, + name: String, + enabled: Boolean, + transform: VfxTransform, + children: List, + ) = copy(id = id, name = name, enabled = enabled, transform = transform, children = children) + + override fun expressions(): List = uniforms.flatMap { it.value.sources() } + + override fun animatables(): List = uniforms.animatables() +} diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json index 438f2b836..04b8415d5 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json @@ -24,6 +24,7 @@ "node_trail": "Trail", "node_beam": "Beam", "node_post_effect": "Screen effect", + "node_sky": "Sky", "node_camera_shake": "Camera shake", "renders_particles": "Drawn on every particle of the emitter above it. Placement is added to each particle.", "renders_once": "Drawn once, where it stands. Put it under an emitter to draw it on every particle.", @@ -42,6 +43,7 @@ "section_uniforms": "Uniforms", "section_samplers": "Textures", "section_post": "Screen effect", + "section_sky": "Sky", "section_shake": "Shake", "section_motion": "Motion", "section_material": "Material", @@ -175,6 +177,7 @@ "shader_plane_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth.", "shader_mesh_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth.", "shader_ribbon_hint": "namespace:path of shaders/core/path.json. The vanilla particle format: Position, UV0, Color, UV2. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth.", + "shader_sky_hint": "namespace:path of shaders/core/path.json, drawn on the far plane: only the sky shows it, everything in front stays over it. Vertex shader hollowengine:vfx/sky/sky hands the fragment skyDirection, the view ray. The engine sets SkyCenter (direction to this node), NodeOffset (this node relative to the camera, in blocks) and EffectTime (seconds).", "shader_post_hint": "namespace:path of shaders/core/path.json, drawn over the whole screen. Attributes: Position, UV0. Samplers: SceneColor, SceneDepth. ScreenSize is the size of the frame.", "shader_missing": "No such shader: the json is looked for in assets/namespace/shaders/core/path.json.", "uniforms_stale": "The file holds values for uniforms this shader does not declare:", diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json index 0fa2d3019..b86ac0e93 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json @@ -24,6 +24,7 @@ "node_trail": "Шлейф", "node_beam": "Луч", "node_post_effect": "Эффект экрана", + "node_sky": "Небо", "node_camera_shake": "Тряска камеры", "renders_particles": "Рисуется на каждом партикле эмиттера над ним. Размещение прибавляется к каждому партиклу.", "renders_once": "Рисуется один раз, там где стоит. Положите его под эмиттер, чтобы рисовать на каждом партикле.", @@ -42,6 +43,7 @@ "section_uniforms": "Uniform'ы", "section_samplers": "Текстуры", "section_post": "Эффект экрана", + "section_sky": "Небо", "section_shake": "Тряска", "section_motion": "Движение", "section_material": "Материал", @@ -175,6 +177,7 @@ "shader_plane_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth.", "shader_mesh_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth.", "shader_ribbon_hint": "namespace:path для shaders/core/path.json. Ванильный формат партиклов: Position, UV0, Color, UV2. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth.", + "shader_sky_hint": "namespace:path для shaders/core/path.json, рисуется на дальней плоскости: виден только на небе, всё, что ближе, остаётся поверх. Вершинный шейдер hollowengine:vfx/sky/sky передаёт фрагменту skyDirection - луч взгляда. Движок задаёт SkyCenter (направление на этот узел), NodeOffset (узел относительно камеры, в блоках) и EffectTime (секунды).", "shader_post_hint": "namespace:path для shaders/core/path.json, рисуется на весь экран. Атрибуты: Position, UV0. Сэмплеры: SceneColor, SceneDepth. ScreenSize — размер кадра.", "shader_missing": "Такого шейдера нет: json ищется в assets/namespace/shaders/core/path.json.", "uniforms_stale": "В файле есть значения uniform'ов, которых этот шейдер не объявляет:", diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.fsh new file mode 100644 index 000000000..3e73f4168 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.fsh @@ -0,0 +1,97 @@ +#version 150 + +uniform vec3 SkyCenter; +uniform vec3 NodeOffset; +uniform float EffectTime; + +uniform float Radius; +uniform float Width; +uniform float Opacity; +uniform float Stars; +uniform vec4 SkyColor; +uniform vec4 WaveColor; +uniform vec4 StarColor; + +in vec3 skyDirection; + +out vec4 fragColor; + +float hash13(vec3 p) { + p = fract(p * 0.1031); + p += dot(p, p.zyx + 31.32); + return fract((p.x + p.y) * p.z); +} + +vec3 hash33(vec3 p) { + p = fract(p * vec3(0.1031, 0.1030, 0.0973)); + p += dot(p, p.yxz + 33.33); + return fract((p.xxy + p.yxx) * p.zyx); +} + +float valueNoise(vec3 p) { + vec3 i = floor(p); + vec3 f = fract(p); + f = f * f * (3.0 - 2.0 * f); + return mix( + mix(mix(hash13(i), hash13(i + vec3(1, 0, 0)), f.x), mix(hash13(i + vec3(0, 1, 0)), hash13(i + vec3(1, 1, 0)), f.x), f.y), + mix(mix(hash13(i + vec3(0, 0, 1)), hash13(i + vec3(1, 0, 1)), f.x), mix(hash13(i + vec3(0, 1, 1)), hash13(i + vec3(1, 1, 1)), f.x), f.y), + f.z + ); +} + +float fbm(vec3 p) { + float sum = 0.0; + float amplitude = 0.5; + for (int octave = 0; octave < 4; octave++) { + sum += amplitude * valueNoise(p); + p = p * 2.03 + 17.1; + amplitude *= 0.5; + } + return sum; +} + +float starLayer(vec3 dir, float radius, float density, float coverage, float seed) { + float b = dot(dir, NodeOffset); + float h = b * b - dot(NodeOffset, NodeOffset) + radius * radius; + if (h < 0.0) return 0.0; + vec3 onSphere = (dir * (b + sqrt(h)) - NodeOffset) / radius; + + vec3 p = onSphere * density; + vec3 cell = floor(p); + // Kept away from the cell walls, so no star is cut in half by a neighbor cell. + vec3 star = 0.25 + 0.5 * hash33(cell + seed); + float present = step(1.0 - coverage, hash13(cell + seed * 1.7)); + float size = mix(0.07, 0.2, hash13(cell + seed * 3.1)); + float glow = pow(clamp(1.0 - length(fract(p) - star) / size, 0.0, 1.0), 2.5); + float twinkle = 0.65 + 0.35 * sin(EffectTime * mix(1.5, 4.0, hash13(cell + 9.0)) + hash13(cell) * 6.2831); + return present * glow * twinkle; +} + +void main() { + vec3 dir = normalize(skyDirection); + float angle = degrees(acos(clamp(dot(dir, SkyCenter), -1.0, 1.0))); + float front = max(Radius, 0.0); + float edge = max(Width, 0.001); + float started = step(0.0001, front); + + float inside = (1.0 - smoothstep(front - edge, front, angle)) * started; + float ring = exp(-pow((angle - front) / (edge * 0.5), 2.0)) * started; + if (inside <= 0.0 && ring < 0.002) discard; + + float haze = fbm(dir * 2.5 + vec3(0.0, EffectTime * 0.05, 0.0)); + vec3 fill = SkyColor.rgb * (0.7 + 0.6 * haze); + fill += SkyColor.rgb * exp(-angle / 20.0) * 0.6; + fill += WaveColor.rgb * smoothstep(front - edge * 5.0, front, angle) * 0.35; + + float starLight = starLayer(dir, 2048.0, 70.0, 0.55, 1.0) + + starLayer(dir, 700.0, 45.0, 0.35, 2.0) + + starLayer(dir, 300.0, 28.0, 0.2, 3.0); + starLight *= max(Stars, 0.0); + fill += StarColor.rgb * starLight; + + float fillAlpha = clamp(inside * max(SkyColor.a, starLight * StarColor.a), 0.0, 1.0); + float ringAlpha = clamp(ring * WaveColor.a, 0.0, 1.0); + float alpha = ringAlpha + fillAlpha * (1.0 - ringAlpha); + vec3 color = (WaveColor.rgb * ringAlpha + fill * fillAlpha * (1.0 - ringAlpha)) / max(alpha, 0.0001); + fragColor = vec4(color, alpha * clamp(Opacity, 0.0, 1.0)); +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.json new file mode 100644 index 000000000..c609e9716 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/shockwave.json @@ -0,0 +1,19 @@ +{ + "vertex": "hollowengine:vfx/sky/sky", + "fragment": "hollowengine:vfx/sky/shockwave", + "attributes": [ "Position" ], + "samplers": [], + "uniforms": [ + { "name": "InvViewProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "SkyCenter", "type": "float", "count": 3, "values": [ 0.0, 1.0, 0.0 ] }, + { "name": "NodeOffset", "type": "float", "count": 3, "values": [ 0.0, 200.0, 0.0 ] }, + { "name": "EffectTime", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Radius", "type": "float", "count": 1, "values": [ 60.0 ] }, + { "name": "Width", "type": "float", "count": 1, "values": [ 6.0 ] }, + { "name": "Opacity", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "Stars", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "SkyColor", "type": "float", "count": 4, "values": [ 0.98, 0.68, 0.26, 0.85 ] }, + { "name": "WaveColor", "type": "float", "count": 4, "values": [ 1.0, 0.9, 0.62, 1.0 ] }, + { "name": "StarColor", "type": "float", "count": 4, "values": [ 1.0, 0.95, 0.82, 1.0 ] } + ] +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/sky.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/sky.vsh new file mode 100644 index 000000000..3f530161f --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/sky/sky.vsh @@ -0,0 +1,14 @@ +#version 150 + +in vec3 Position; + +uniform mat4 InvViewProjMat; + +out vec3 skyDirection; + +void main() { + vec4 far = InvViewProjMat * vec4(Position.xy, 1.0, 1.0); + vec4 near = InvViewProjMat * vec4(Position.xy, -1.0, 1.0); + skyDirection = far.xyz / far.w - near.xyz / near.w; + gl_Position = vec4(Position.xy, 1.0, 1.0); +} diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sky.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sky.svg new file mode 100644 index 000000000..a932d9523 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/node_sky.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sky.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sky.svg new file mode 100644 index 000000000..3a69b713b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sky.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx new file mode 100644 index 000000000..405eb50bc --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx @@ -0,0 +1,185 @@ +{ + "nodes": [ + { + "type": "hollowengine:vfx/beam", + "id": "pillar", + "name": "Pillar", + "tint": { + "type": "solid", + "color": { + "g": 0.8, + "b": 0.4 + } + }, + "end": [ + 0.0, + 200.0, + 0.0 + ], + "width": { + "type": "expr", + "source": "2.4 * clamp(p.age * 6, 0, 1) * clamp(1 - (p.age - 0.8) / 1.2, 0, 1) * (1 - 0.4 * p.progress)" + }, + "segments": 32, + "noise": { + "type": "const", + "value": 0.25 + }, + "noiseFrequency": 0.05, + "noiseSpeed": 6.0 + }, + { + "type": "hollowengine:vfx/beam", + "id": "pillar-core", + "name": "Pillar Core", + "end": [ + 0.0, + 200.0, + 0.0 + ], + "width": { + "type": "expr", + "source": "0.7 * clamp(p.age * 6, 0, 1) * clamp(1 - (p.age - 0.8) / 1.2, 0, 1) * (1 - 0.4 * p.progress)" + }, + "segments": 2 + }, + { + "type": "hollowengine:vfx/sphere", + "id": "flash", + "name": "Ground Flash", + "transform": { + "scale": [ + 0.0, + 0.0, + 0.0 + ] + }, + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE" + }, + "tint": { + "type": "solid", + "color": { + "g": 0.8, + "b": 0.4 + } + } + }, + { + "type": "hollowengine:vfx/sky", + "id": "sky", + "name": "Golden Sky", + "uniforms": [ + { + "name": "Radius", + "value": { + "type": "float", + "value": { + "type": "expr", + "source": "clamp((p.age - 0.25) * 70, 0, 180)" + } + } + }, + { + "name": "Width", + "value": { + "type": "float", + "value": { + "type": "const", + "value": 8.0 + } + } + }, + { + "name": "Opacity", + "value": { + "type": "float", + "value": { + "type": "expr", + "source": "clamp((7 - p.age) / 1.5, 0, 1)" + } + } + } + ] + }, + { + "type": "hollowengine:vfx/camera_shake", + "id": "shake", + "strength": { + "type": "expr", + "source": "max(0, 1 - p.age * 1.5) * clamp(1 - n.camera_distance / 64, 0, 1) * 2.5" + }, + "frequency": { + "type": "const", + "value": 18.0 + }, + "amplitude": [ + 1.2, + 1.2, + 1.6 + ] + } + ], + "timeline": { + "duration": 7.0, + "tracks": [ + { + "node": "flash", + "property": "transform.scale", + "curves": [ + { + "keys": [ + { + "interpolation": "LINEAR" + }, + { + "time": 0.08, + "value": 3.0, + "interpolation": "LINEAR" + }, + { + "time": 1.2, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 1, + "keys": [ + { + "interpolation": "LINEAR" + }, + { + "time": 0.08, + "value": 3.0, + "interpolation": "LINEAR" + }, + { + "time": 1.2, + "interpolation": "LINEAR" + } + ] + }, + { + "channel": 2, + "keys": [ + { + "interpolation": "LINEAR" + }, + { + "time": 0.08, + "value": 3.0, + "interpolation": "LINEAR" + }, + { + "time": 1.2, + "interpolation": "LINEAR" + } + ] + } + ] + } + ] + } +} From 331f2a31631d2c1c5dafeece680745a3eac65060 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sat, 26 Sep 2026 09:15:50 +0300 Subject: [PATCH 13/25] Document VFX and IDE updates Add English and Russian VFX docs, expand IDE and project-export guides for the new workspace and console workflow, and refresh related screenshots. This also documents HSS imports/variables and the updated project export/import flow. --- .../pictures/ide/client-reload-script.webp | Bin 101422 -> 80532 bytes docs/assets/pictures/ide/code-editor.webp | Bin 85780 -> 151504 bytes docs/assets/pictures/ide/code-navigation.webp | Bin 74158 -> 88260 bytes docs/assets/pictures/ide/kotlin-console.webp | Bin 0 -> 68214 bytes docs/assets/pictures/ide/new-script-menu.webp | Bin 35444 -> 47700 bytes docs/assets/pictures/ide/reload-script.webp | Bin 59404 -> 101804 bytes .../pictures/ide/toolbar-visibility.webp | Bin 18732 -> 19364 bytes docs/assets/pictures/ide/workspace.webp | Bin 137714 -> 206188 bytes .../pictures/project-export/actions.webp | Bin 40826 -> 22172 bytes .../project-export/export-dialog.webp | Bin 0 -> 27844 bytes .../project-export/export-success.webp | Bin 23858 -> 17910 bytes .../project-export/import-dialog.webp | Bin 34982 -> 137186 bytes .../pictures/project-export/settings.webp | Bin 34594 -> 22658 bytes docs/assets/pictures/vfx/editor-overview.webp | Bin 0 -> 109916 bytes docs/en/commands.mdx | 13 +++++ docs/en/guide/index.mdx | 6 +- docs/en/ide.mdx | 31 +++++++---- docs/en/index.mdx | 4 +- docs/en/project-export.mdx | 14 +++-- docs/en/scripting/ui/styles/hss-files.mdx | 21 +++++++ docs/en/vfx.mdx | 51 +++++++++++++++++ docs/ru/commands.mdx | 13 +++++ docs/ru/guide/index.mdx | 6 +- docs/ru/ide.mdx | 51 +++++++++-------- docs/ru/index.mdx | 4 +- docs/ru/project-export.mdx | 14 +++-- docs/ru/scripting/ui/styles/hss-files.mdx | 21 +++++++ docs/ru/vfx.mdx | 52 ++++++++++++++++++ 28 files changed, 247 insertions(+), 54 deletions(-) create mode 100644 docs/assets/pictures/ide/kotlin-console.webp create mode 100644 docs/assets/pictures/project-export/export-dialog.webp create mode 100644 docs/assets/pictures/vfx/editor-overview.webp create mode 100644 docs/en/vfx.mdx create mode 100644 docs/ru/vfx.mdx diff --git a/docs/assets/pictures/ide/client-reload-script.webp b/docs/assets/pictures/ide/client-reload-script.webp index 463204ca2035fd152ee6a8df9f652f1a7751e2dd..4183a406a5fa8f976ab1bbc53c3c54f895a98423 100644 GIT binary patch literal 80532 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 oi{?mR@ti^#(}a#p<1 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 literal 101422 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

OETNE;oM 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

Inj;qg#jCa49AkwRxq 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 nFlXao&0h`-1^D*M9`>mF)%&93ue$OPxei literal 85780 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%0DqJ#px6Bk|o*l>jInwmPicP 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 diff --git a/docs/assets/pictures/ide/code-navigation.webp b/docs/assets/pictures/ide/code-navigation.webp index 727212067fac378e7c9f574ec4b3994b1a2335f0..39b4b71bea48a08d27be91e63a7b916073854e76 100644 GIT binary patch literal 88260 zcmd?QWmsL=vNepm2X}V~?jGFTgA+8k1$T$w7A&~CySoGp?(XjFkM49@PWQRz-249g z;Lm*418c7}XVs`tW7JlZ5EX4v2L@6T5t3Jx=OCLF8S+ONb08u0IOk-YW$cKkfGM^pc=HV;x}e;@?Ct z3DZpO5$fk3e34oB0=D0HD+>Z*{J{)3eJ<`yS)MYsRY{-~fPsNquZD z@QQqTylp=Q?0S9k`UE(AiP|K1Ah^hAzz^kRzdyYv*l$&Q5xKEGZ(nR5_8NG(d|baR zz9~P`U1}flN`E=tJMCpS=I?%42Ke8DKjq)c-L)TkHD;`|DthI=Y`-wSd^iQflQ+M# zza-vgT&}FO4L##Lx8E^b@;`d@KR&r5K3Jdf9{`TLf&c(O>|Xm6e~(u`faE0+;QUZt zfw)UB>$M69c)kQ^008^^S6uXyF$F;e*nw^8t&m-iS+F$8e={NZUlc6>eq zKyc)>9YjTnZW$R~FKTBG$t4*DMLe~M_h=CskB=mh-^YD3hepjqXat2}bd(lb^e z&rR`PEh{b5W(e0U#wu6#8>GP2E_>mYsz3z9p@9iW!Ms1C{I&$T>mIe2S}-#1#16&^ zXLKa>#V6}&NJQDtW>a@lphel&Lmu_CZ5umx zLQ~`(w7ADot(We$o&x|^lPS|?jGCO@wKMx#vs9U>vb<57lhEzH-8_5QA9EPC7>BMK zmg!DTT}g%{i-(Sd(YfmbHe~Clle}enTN&>;Gexe2U=TsHu9(~i zC0&!Os5P@5G`1|R&M8^^2)T}Aa;u%eVT4)>Zr|>z5Ip_ ztAh4!rcXbZ}OpeUrBxF_12ByHUGoT{w=m-tno!RUyfQ3Bk5 zIM?^Jm8KztL&VAFsi_|XCfsdp5<>HmLf1>b`&$roAMAU0I`SOVvt_j&Abce`s%umb zFlRFgQ_`c9u~q0q^&!)+J?QgvxkJjb_GLw4#x#V}4^i(;%<78|w#*P*xah3ia)PQ96}ys-I=>b={skPMuY)b-34Hy0n@Rb}3Q>VI>-{=S zdZf|U48qGxB@p5k!Sc6vVWCb?g`~=rm>?g_KCYJfnN}oe)qWl%WUg#te3MP929TXz zAC9yRnJ)IS-f9iDnRwRP&GMBQ?eZ(u_QR9 zE@~?mocYr6F|O7%6e`T%MMs+;54TaVlMs)Pe8!2%?t-eh>-SvP$QAQPHam}euI+tA z3^=_Min-H1M2q{lnwhw897?aeB{0~6-92@rbl%QF z8$j0K;8pYplr3c!CAsIG#{)Xr$TIdXZjU3on@$9qzwz5cfs8~{08lWTryy+-55@Ea zme0`>DBI_}0N=!$S zvzG`v7+aOl2)61|WYBt>LJ#c?H`v#ZFp^$X#Bc1YNP6VActDSD`d~-_Iz8&n(AhAE zLp_&@$ZxLm#*+!{_HrOHh+*0sK+zFs)qSgiDb(a&Pb7~r5CQvzph^D3r0`Sui#iL|z= zLG$h?ZpyDi8yxkmiRb$r^4YNEKcaZtLmsh%5;xi#^|CB7hRJrZdK>w~!LkN&wmIgFPcXlAecbR#O zP1PjyFuDvzNwL_UjLZ}VY9VehUQ6Wc5^}+A=ocfm(l;(dx?Cl(bMV!=d^+)4yOO#p zH5T!c;NXaCPhhbBTs|u=Q|`mUdwrMlpWm9@0GJw^+CwBN5m7d>o3elTIOIzjvx76- z=?#g4xAA>$y0X_Au&3&3Tkm4c0Fc8Ww)AAf_a4*>a%sfn;7m-Lra3PQM+&Pg?Y|~W z?4w1cnCHb~2K{ekRqB_2_)%eB>tE0Otv+KV-7PT4HD38^WoDe%QnE>M%ZJzjSvH7O zZ`vM-ArVQ=?hj2?t!}h3vEjDz4EEwG3_p|SHqTRo>{WWirp zg%3Czu%w1P*eFg=)mV*@s^k7{l{qT|aA*K^Z>G0q#Ppk7oRbOx1hj5*IQb{{!d+9) z&e#Z>E5YJdAZwJ>Kt~vn?cuLE`?XU2Lw0@m4uxT?&NJPRh=x}Zd;b;uXUQym6Ym?9 za!6nRbehMq0IiPo_2KP#Fs<@?pPZK;K)Md5>2BEmig>P+y(G-RS8zWo!k-iOHJ!0; zK)~l!5n1WUdd18KE#!#;_vwsnqf4(s-D^J8p6$-_#+>LGvJ5{XQ-W`5wyj0HgX<$p z=}g29ra!qUiC@g-KYV|?utSqMc^WD+Fi=?!3B_fEm!OZ^yb){1MBByb+)Ku7l>ap# z)lVZt?%f|e>`#>Jb$L8RLXRu&(vuWjPn0cJ%KR)_MBH$i!g6gv0GeavVRLk~YRAHK6zS+VPgEPZH1aOIK|rq*LW+3}kib%~ z>VoryAlDPL9yRjqz&I<`x(LWfHGPS8m{{$2CekCXA@wSVrJ-pmUT^QBD%DfyO-y;F z2x+l)c{ASqaf(j%+ee}brct;Pn@ z5+QyiEyxF`4ihIB!#*(vtYZ4icDA-wb5!1!21{;cjhX~s{7{FMg(zWqdtue-*P zx!FaPZ1AAhIg}3?1JzKQ zU7E`BNM}5vFTV!JZ{*|8p;q_k?ei&e7Da9!sOg(%ctCxG96SZAH{i@40a7Rd(26{J zb)2TCPkvrWyoll2CB3JHKS;aWc*$kZU<-nJ?mT9cw&~)KD8z=_?e0 z3oW#S-!dz;fQyGrI(5t%@L>}JU;M)S{{(_Rmxf5mST-AeBf`sgip~RGKa=~l7#sv| zqF7Jd5LSk?9>Epi=MFqZW*wQ*ts(Ok6nZ<-MzuhzHW&e{dRVJH{X?1jN47C{@$4Ai z2r260RvN82MfcLWHZf@)x?X~{^fH!zH^xyf-+|!^?%y83#}j!AoY>MMYmV3c`Q9zh z?|c$HGaP^YGYU6ekYqPhzl2ZFEOel~5$N_$%>Mbfzr92s5fjsTFC-!Evjwa{BC8T( z3(he^GU*$eJ)b`{Yo%|(87pdTK9=+89qP}0z~K(>Eu+qUqam^7GQA5iZsZH}T*=Pg zp2>n*R{C1qevSR#Na-(W@auBj+s8@8Zy1TRFGXNBWyiz$on{tVDRyi<+vm#2WJ*!S zHMDDe_@ZvBw0^TL)28D$#o1$$jMGcq*vWhRLw0Y7{^$~GQ=BP$1g==wr z!?rdtujTW{1`Xc_V_3o`1q%}XJw{{OLM<&LzUcqY0nta=a~CET@TUWymRsk> z(kS5}oBanmtbw5Z@0w*}>(}PCyYF~bBk67R<3=ia65-QE`_!PUAL)}Rwt6u77wC|; zU_V>q*Gw6TOvUsYoLKs6yt34a>He{)zc&}Z=65e}hd{F;YS|jX$4k|`8Ny-y#;>Pw zQ)mTt7ez}Li7E+#C4dY@NU1n#)T?f4RlE#h{)C5oy(=y z8vfgzf5~xH3{PAYpJugfRj4}kGe2M{5sI5RgUF|A9^*gQ#6L$SSw~*e0!kNd)Y=UT z#}aW*1TZ;#8N?r`_5o?{^}ubMxjmTGb#*+fmy#>*5GP&~zgg#5z#f*?@BIT{|9~>S z*H@+P+{vBzmog?y&1Ly|rt(8o1pLYQsb$p~h#4bOqjMT1K7Y|3eh1xOuBIYm*@&eS zB*P!cl{mn1%I2CQjg?W1vOax61j9EnVCcmbqnkwCk-Cpn^&R0BsU}dY~3OqHOVg%POYNrXM0El^%@( z^1rx;jC_=>qHljgWf>m*pmK)OP;PaudT=MZUm5fpj4|x|t+V?NGEIFH%7*@?Yjk48 zvZUrbD9XW~Qhpi$HT~DB^Vc-|Yry@|*gn28wqnTm0cEzOwP;I`##fg1M|{#(TY%dr`J+2D>05m?eb<^emkmsF9M;~f+nYU zLz(?`lSkeZQPnp`i^N2#D3A+?T?|6}Jqzpnn2K;g27#mZm@vXH}rx7C-p@O5i z!J4n+zvNL!Cx}B;IBp48z55(B5lUyxHz1Zi$h9|`h`b-vpt%<6y}tRUO7uJG{0sK}8DOOJ{gZ-+eR*cY z97P3$v*4se3^Qoy%U9a3F2ars3=6EF6RtpDqS*7uh{y(@@I0>rCtG3-8t(HtXK)g# z{3xYYC3v0#RdIP%{KF2&(5|r*<-bVc<9LxzB)sUBqGFLDU0VK-G(I z*#_5EISVyOwP5VQIJ8{&`^=q85OF-CF8B*u|Z!Y~pg5HWj@PqtdLj$oXze29G ztfxKchWN_i!Jh;%P7_)yi+^rn|1O>9P`S6p5Sd|K>6Zh?b=(D7tM?43`5(fW-9cr# zj73?Etb7!hZ}G9hbE$U^)srLVd+*i*L99I5Z6fX7Kw)jt%dsiB$lQld)`fLX@y&*p zWz00t$sq0nfAt`X%{@^iS4)SngG-SapG+vT<_wA21LZ^v+01dtH`lMN7b(tef#bLl z0^bTk6w$jbE=vjOM?iB`v(VU8W_7y%Wm+mMD|Chvl#~cjUv@F^ zxCXbopzelRVKf0x1T2bR6oUnwB#5D92{M;m5%cVJ!YODYze!5%QB+6=;LuHezR zxlj-=#O%(n{1%j*qvFFDnWPDIdjB^&sfujNc|e^2#x?c9WZc zrX=X|_+>*!%NN(f;TsF`E$*}Hz)TuezcTHACrthM0aW7OrJ5Wo7veT|7fNc2y#wO? z&`Z8$eKxLtZ{AAwt7iL3sx=e12)QBp09C-t;Q23Ah-gmh{sRRni-B*5v(!FfN{0sM zH0U!?zg~6^J4EL84CNiPtlY-0hy<&JIChMpy!N*tD`2-MaTO~e@u3rJ)-fF7)yIW4 zhhI3vS2%=PJ(o9eYV0;M>BHBB((5hHq__~Cl@(J)#c48(3=f`rScW!JBm*n)Pa4$E z;SLMeSz42I1M4ZFk&WFjh?vYXc?@A)vHL;6$w??5+-$-yf3s))2T=Rr-~9Rq3E%7i z$!xMil{#6N5|c(N^XpeP$gxs)P}4wfEC9)-aOVa!sKHq3U!uQJ%@XqD@AT;NDkw)u zzjlwms`G5<$xFft(Vx+=e4VV9MEASwvljXgk$1QpWFMi2R8etu@b%?yv2lajshhnw z$*l@jZFavk3`ECAnkw~ihE|p?yVN(KFK_!H&>C^B(zb6Bd2On7e`kGTe1gVD&QFnrYI1~1n4}*#rwtYygD7O#_)P&Of#b$jH{=%dMz_lm zs6?)r<;f+uu5MxlkM{kGOOzHw26mK#oP(!Y`4$qsgpMMV!{UXwHRs1#-%y&(+M`Um zRXz>iR#|FTk%$?_0Tu#1b7?&n{Vz>75=Bp(Wl{U?4h9Hyl8G8Ng)TH1F?ybCg*h=} z)WW1VcWYlmQ!Hi&q+Ff*FvUKXu}mW`!>zw)7FE5W30k`Zwvy!svGbND)inZLIa6U) z8!R8|H!a&`^F;AmWU?8vo02jJfGTNS(%dtPreCV9gNtDH|4QU>(iiBcNl>TRZX=px z?8uWLuxOXn5sJfxHBWAsNn(5r!?()|@gP&c%2M(kB<=p=dzivn6g*xwKa!DlU}Ilb z+W^6SN{j&AEl|_coPkMj>WR(2x5nhMmT9rmLD@GPUpE}H>SZ4cRiy~#AFiG7M{IGs z;b{U6ZjWtlWI~hH^N^KCWp6u6vP!Zt-AeJKd4mwZnouS0BECk$Pz}=~!@vm;QXx<^ zosTR>@muak!F=wEy+l^J$O9iHO|Y92k3PpDb+ET!NfV*1+bcg{k`OYdbL=)maNJ<& zSkyt-7MRSe;@Eray2%UeJ@GL%fj?+PTaHDL0S?KvhNbP#8w_-TyxA~ONlYnMWzxqW zw>;SOdi)3C@|y}tD-erq2C8Y1w6cn5y%}0}gRwcY+Q?6@^-d1#+#t<3N)*cLg%kXp zu;PbSXs?;j9m}{1MYq7#$FvN258(~_iCkQ7Ukkyx>ELhQ%H2_wP=!i z_>-@z*5xKeNb9kjQHE8w!ql4mrCtQfD1^vSjI^bM?i_@=SCv*pvvg;^%) z!vm4?|E5L$P2wWbeCm(%WEKh`5u|qPY`$1gpK{G8`@9|YjV)D(kT|T{UNyi%CF4@K|TjjNiO+t z#n_6u8^WEvsKBl{6`ts=qL?*6LxVw7O@&HIZO~BS&T?oB0<+?kdxm^Im5$;v4>0K62{c!q>2-wawwm&N786r6~=Ciy{vIKhnX zt3*OlQ!*kK)@E+YjY~*$e_Q#S`xSM~T%k83B=OmV??iN?TMeWEDtr1j?o9N;_P2i7 zz|^Y!(vfz=pN)wFF#89)caYY@v&zH_J0)*3b2HR1H8g?HF~RYdTcV!?Z+$x6?uH5kz3@lxCbAPRY&#cYNyX>M?i;avj$HVGaPOa zVW;XRCoPYhmL~B1b`RxJ8i+~FTS!G`S&>*u1O{+#{zB_|*GZDf(7oW^UmF^ZjR)NQFnA zbv-vh2tj7}mE*~_>RBp8?I2DUuxj>#7hzO$ttt;lGtHiK*_d#_+n|YtWTa~Co*-go zyLmd}-r>)I^RY;p!o7~Vx||^%V&Wut!!QvWlb<&0_J=?f6pJR<;KUjTf z097-$)Vdhm0O5gvg%pF2I+($$Ek;*owKI-&hdHq+^rD+CbopXD!q?8`E_?eO&thl<#G$23?fG5kt6Rms_|9EOYu%d+vnA2ct^9pb7lmY6L%~9rPTGMXjtLiVkmfLCzPdD)euf z5?1oUA^=KL^Eu3RNJB;tMk&K>4jkzg1Y7Y|`88gv1n>-t5iXw8>&b06tE zZlFz7J-2y;0aXnGetVhRi;ggoO$3aYfEj#tyLPt=vbqF=uPI|Lic%WpbKh`juCz$U zNM1au;()=3)>Ac}WP-ufi~Z|Aqu;j`oSl98;-zlk!9b4ep!Cp(`v&S7s1+wp#p_hY z$sE5N8jb+THAfd?VzEnhUI``f8FW<=C$fCC8rF4Mwks1}{MvlDOxNk#5jre*tuF4m z4>HT?u7v^qs~76{=0)JkBP%)nt)JC`bJzMo)n&j{!sPs78oB5}{ux2rs7P=$#{3XJgY+?mn3@VbPc z!7L7EW+S{Ii<4w@7Itnf)^2$9(}if)$ie8uGq@q^zX6$!>Rprr^@ZWCn5rYo2I>_& zLKu>w>GNa;x{Tx^eU}rmk_{RD$l&D2k}E>Ebp5bva+!vdSsnA1bEtT11$LW7^qH|EV6-O!+5XqkwqzV7DZ3yWDlFRht`_Jz8IjgB8lz%$w+Lt8jW8{ zQDjh9&?((mDG+F&Lj9kg8Na$@wz%?ozSC0M7mh>c=*mrwcv%}ahkW2e+L{{ROmOF} zh5Mj<0!EC%q~`PTuD_-ooG%zL!_B^;&(+K>yTdsigg2su#&s6QVw zehR#Z+D{*0z2J0Bng65&+r7fSJ(kU{0lAYgvm0kOYI%}y9xQj#aRSi_wh(h zOH|y1{KJbQisPh_)Kzud#D$cTcmYf1dASU|(kJUszmJeWbzK=ad8Vv5zuVAT%~3x92Vra*vfmWfdw`E?Sm+alr@ zhx(rk;XhlYKWV@Zkvk>9{&IUy$1Na?!mo^Lrh>``m~7Q-50hi|quR_l5Hp4{OIDu7 z+5lc9+FV$-uIsq4^K&wE7BX-gp=T2t@FtTRzB(RSSL@PDSdj*!RM3VNcWtgKHe=Hd zIWn_Q+u8lU63D)ff>bX!7Bv6sNIV65kkk`j*7guTW$V`RDz&hn`d zwN#>5%Je((!-TkC2*VdO5JKPNgoezV#fF3g3NVLXCI4SZTFXC*%YR~d|FZmHCeL}t z2Q2D%NHtf8G+O_7v~N?mNvFpDO9lRTNh-wd#%$l?v!P#~C0Pd^wlu7qKDabn;Ls+| zp~d$FZd!*uR;6ruv(MDB;xSRtH=0N_grwi-j~+60yAWpLDAML%8gwObWIl7DSC*YZT9dlKUvO>FDzHIjtL*Kq5j3 zw~!MI7nX9zGDXwKD|PiVs$X+8GU6vp+rDIVuF??HBaZc4%(?VQ*vqB@k~ex1Au9Ry zz~X(g`aB3d6jf&mKvhiK=}ZlZrE1RZ;+jjT747X^1Eae}J^wE;!168cjsXy4Uv$%T z?!{{-_C(PZ_&`pSg)~=;si7}GixS55aRtZ)$5Dx)&tfNIyrXK8vW{#TsEPU5nbrv= zF|QmAs6(`gN1#bJABWuaRgw7fwC-OVv)^ZU|F}xt^O{gQMcf*EBx97XvxF8wzf1{6 zO}BB7$S8-@d13qqRsUy1|1<+wO+>X(+ujc%R_Q_WFw$mW3@8&rLGp@7-D%v3b*K(m z8zuJqn5tr=R>NEUzuq1m_7uw}C&}R`o$-suq?~noIA~Aaa$QO=PPACCu=yGj_faee z`L=rV-fl5deakVGAGu^$IFX@|Gz9KVfaiv?LOBpR1+qJu8HpST0x2o=Mt*!~)eyq< z*>4V=@Ye^#x#fQuzWjHA`E$Oyj%aOPaXSc4nz6?h`8oYM7V1idlpw~RQHPf$-3+Ao z4KMdOQfJ@~U=>tsIJs;4Z|s0Sl(WWSCi(|1$lJd8>u6Smg~7iX{>}d{JBqXt3%|A( z#zgPTyxLjO{PC@F`bYtYP4$)vU~I0GJ;!=jvc?AJlcaF>g{uH}>nSVb$2|8g6S@BH z5FNFiP@y0~V0-?M#4@>JucP6V{vrVtwi-+C`2J>1{g3e!I{f<2tJiqNQXOX~59CSn zF{%Zy3$D0oUJugCXD-&9z0&e#5w&CU)bsnP#d>2bW*`IMTW7P0$N&YJ!uLiXr@P=JP$6G%%@Z2U zp_tLxmX0xTFoR>NJ6|VzJInfLf1iQ)?;N5Z{%2y37jRWFS@H)hRLpl^#f0MgjjvAj zYu*V{cq|hNH2>XA`1h(YjmtT~qoUfE6PoP9`BM#s4UMC4*KnSnnf8mmpST_Le*kO0 ztC5oqr}ZQyOX%!jM$*vs=&x7ofi}&m3E~NuqEB<;9#|M7>=c}vt6adz73)ZQ=Nbmrz6TP%{3t$V#I}|dpT%h0l zPEr>IU-#(ru6;KqQ(%BN1bwKQMn>x@v2;}$3=&VicY`LILhA(_o7Gp`o32c%yevjisdH5M~L*qDOyN)r-AFax3EccySl=XK!vb+Yqy22jKQml?o;*BQX=Rn)&tSBZ)wiP7KXEQN=?jnp}p zXv9MQF&N57i1>5vp8tctsv4Ad?)ks(FbEz!a!@V^?jb9_sl8&}51OA7l*|osUXUQr z(%dy%9(w=Y?dcTt*(!m1qp~X*gk(rzb{sl{4if56)qF9UVd6mUK&u0JSsoPyST zO2xBl_#yR3#B=Kr0fP2iRX~eWCcX4Pk>@?if?d=C`AU5Y4R2_n8_|80UMdgz4jZh~ z>-+L-uU_ny`Dwvddz@gsfzs_^Ys&b%Xueuzt03GGilo^>M-NQ`A*4 z$!=+dV!6Ip$|tTdm4q`>6MkA3J@gsx$FZLI`;HnPQ9xv@MG%hAQK3JQRgC7 zRAmS;fyN?v~%xHP~IF zf;tVmi9Jdp^YLpmO$u+=sxCAU?!#Vs`ydi2;JetVO#v^<4hRkYB^8oPcB^&cLJ=ud z);uDQT1uxiPH(>=5rxjbt)h1SPAyZ-UJ9J5EABI0cLNH{cL5Z0Qf=E15hLoFengYaioBHV3jZV_bHiZ z#TO;qhy;*s;7LPHe*Lb^lA>!Fo1$dKJt`Go4E&d)!gPdNJr}s|KtSkC22#_u9|`H3 z;p8!>vB8D3zv9CZ+Yph!i$x(mgs#Q&5f#e$t29vqZ7v>vU*dh_@a=AjfafYDgZYRe zWUDUXj;MVAhVP#~Li9$-)a`MygErRFrGpy0g!S3W7BsUqi~LgBF{(-UdSI%&mTHPf zQgofslXi#z$(*%dHr8NwR{UYmABR=^5z+weAV2aeSD(~{(_DVdPMpi`CI+u0He%#g zuyvVsopqBCY|lt_x0_`nk@xYc;-d~6Hy6DPoc*Pza0&L-53=oMgAjpM`|YfV0tiZH zo**~5HGZ{%7JC&RA>VZ7&&PrB(nhItH76ttg9w)T6akOEA9D~5YA``Zej4u1_yD4b z@14u?=o~hYpBLKtHv`$y#v|I8Sh9BXj8Awf^ z;V_zis7#)$q@1S(6}#_VUY13Xp+ySfKgJ*A{n(e-xj0*TxIhPht@W*T)!j=c)ENmW8|VNr8hSBpV$Xfl+;XiibH* zgH`{IZ}cYAmIXxglE~++m9QjS#@<2IHd2}&kn^s`vn}OJ6FDYyb=JLj9?0$!p)z7|jT1k#Kz74K^tL9= z37NRyiWY71KC-9t(}Z2B;fzYj24G4h->S2w^?Y9eCqK2Q@?s=1Rq!i^sf^MhkHSXa zt)%-BKFtF@C1+nhk<{m1$T$?ENpBXjzryu|WQw2^ih;Rh*bJU$JL~xcMbT2kIb-Lf zS9WzJH9XE40o<yqYZ6?B4Wt zA0(!>rurJ#^Gztr4{pqPl6QB(GiHaq&{U7lqYGsq9 z8}co1SnZUS0)|YM3|;c7j5*p=ad1go4NT7CKjZ$8HBbU-RI?Jl8@>lTA~v%BITdq}RcJ>*9SU z7HM!MU0#3A!^ugIexThGZ3^#+XoymbvJ7*C%4c&1TcE?tOH~oZif#(uy&RHjP`;%& z0#U#-@SG!ZzRw|UVb*%u70XznC%=)CR>gV}oWbW_LuCN316G@4F#gH*o4QoCnj}tZ zbP#A*(`N|$X={{fEh)zwBV-FOUs{=N<}AL9Q$7-nozY>Q#|Ae7XP-J7aE9A7dD9jK zxX;8{GSA&?2Q>BZM*{K6AI@S`#XgzJOf>41ECq#E7l(P?xbZb}BjwR9s+Lk7(~u1j z^v}({>-(B9cO+_t%_mp@t@X~4O?eIYGip6b=zBipOJ((rgN;XzH=nzxP#7;rT&N?c zCJR%t>*2#kxI1LgQ%A(t6Qe;;Gl7~?%VW-4x_>$RLDjAa$9v$OA{)W#S{5Q9>b5_^gl+USN|*{$G^ z&s+GCMd2#;Sv7GX2y-1k`t&5%v5?7MZZLa<_|ths(7ChP6;g=2l;Cx310#97qk`yK zVCAsKmVNaUn5t?#>Kh^yEe7x=!JHg?YVV87_ZEk9X~qa-QJ1i8Lz2Hh!vqDQqv;lJ zL!ecMW}ERHxXe|3FytC_cD4G3Pm^iJe}c6A#G?w?D+{TDfnn&Iqt2H?htJHqe3KPJCf;$Rr;`$S&8z4XsRSc!b)>t{F|w%_l^H zU)^-(!DW92QlKH0Le}jt)`GEyI7Didj}sQ+%`iLK&|LS$-ZR zd`~&8i=&n4itdQ_@nhTO^(;BEF^SzV7qd)nM}ZJwJ<>2}mmey^Db~FTHhm8^g_e*0 z4!c5*3%z`!jDra#)t>0iZua0|J)k>UEA9Q2@P}*9D3ZHP4`b(Yc12>rpbQ-|Go@%= zxorBxNOQ*96FwI3=S(#mwOr?I&^m)-Mm7-oaLsRO zN?E&#`w+B0I)wUNJ7HHAsD*!WPUD27mVN7oUpdj?`02RNabwf0DDF2)&PnF1C#1Sf!4&|7yKO3}-5(`~%#v?z1^ATA0<)a&3)jIYI|&hx)au_{>AduxpGZlY;<-7R}C2 zuze#hsGRey1Xz%k=C{wDeNZiAbt3V{iq&7rvhXfY4q0eo zNyv!gY*`jaZ}hpdoMl{C`vR85rQP9S1Ti5LR}ut<4>IG4yH*+%ZRKl198Il(9QV2L zOX8xH*IBZ`?8|aczJa%9DAN@TJRr^V4u|&=N0-5a#u&tfFL}T_crD#Lq}sshK30ZT zv@MRu+xfL>tl$}0s9ejLeR_+E&JWN9<`L332qZg)G%>xToJx=Ns%da5w;yUZPA9)A zZG346v*nf<>9|%8HJ)e;Fx_T)9?pS$^4UZe%YbWTUJbfS5ckLqGOhJ3QzWv*6z)iK ztqxQQ?SNY{#Y<8+W4;P4pTUv?k+yfy3SODoMI+=fWvDA-twKt_FfbWyA6GL)RVIzG zrIC~PFa@cLG&fdjq`!U?Ed;h{`pkagE;H$nuF{IE?Lb~V-@7f@#pVg!hIx&7-v|q$ zLj~bQPA@|;C?GEW&Ecu`xEh+C{Be69Xk{_Oj|P`7GVz5+LlfF8CVSTC;KaSr6=hw1 zx+ws}zIiBm!s|IF^oRqmZ&RPy zfytWP!?tGc@&o$nmJWslNmpMb;z2Q(oPV@$Ul}GwjTF>n*|9yG>F}E7euzDjfs<|G zgbFBt=rl+S&xH%!DcYs|K7YSYF8x;9rY41tV*9odV_u9x`$$Te@`JAyL3H*;*&CZ% z=Jd`fmGziu&w{ruWBKMTyB9)o6A6Be^+8J##9f?2tO+){WuFG$lFzJ_#Dko_z)bZR z?7vtBa}+WfVD*ic1o`jXb2h)kj8Z#7@bUoP5;`cF9|XcBa)>~dfEe6}YGS%rKlVD* zc(JKnt9Ury(IObf<2oV(S1B9;=MqxrAo=bo0|6UBRROfnnb1y*Kw+Bec-n*=Dvpem z7P!wPEn%$QA5BPG%+0#9RUoFWT~9WM5>C%o>)X^_KbXjz$8qF;v`w44fiItT4TxTA ze7;E^8Cg-UjCo|&GdMMn%2dHMrIW)IWB08pGH5eusd~wJ{#2Jm#AhWkqmNuj7s@sn z)<>6x`|fO(>FIq<+{Z98x9(?5m+*bWihE4H`i)3jGW9de<{x3gMz1JM@Jn-)YjoB_{Z>NC{nXb83L z&PiIV&kku1BJ3DpR>91g-$qPP*q1df9Vi7wnjL%uhw__KXi`F}0ch55UBH0|7r!{M z3_=l?i~}ffiAsQj7!AHkZO))&PZL@~LQ>~mVi$Xb?Yme=>Kmb(34bT!R*co#$ zxfJw3U4UJ3ymWsLm1zT>IURdM*zK;y4)h;gsgYW&ofFLYme+B)k`RzJ!HB5_7T|%x zxz2W)3H^_Q6!;X>{X*?WLe+>P`G`Xhxq8i;GxjYb-4V^HVB^ zB|eI+JM5rpI1jV4^2v8tVB!cl;292r+qVR)VBQ@>XA%NAHU3?Bddh$eos)w679{H9 zU9Q2q?N2C@<~-^AhHsjlNiVY*k3x~1fPH2}t~vTip(buKcAV=0L)Q|RzLYXlnAgFn zN1g=UtC2y)$47_)3L<4~mahc+d{-mQaG>4Q z>dYl7wZl*N${V=Buio6(7B}15&c0vI=Of{7MMcG9$q~EmlYR%G8KZGvSa|xq{i^Y^ z;vQeiXGq8Uymyi5fh8+VHVcmc!8_7HG&IRi9`;D8^8B`IT!QO&$?9LPHQxk~;qXk_ zwU8%M_d+Jj_8P$Tb@h_29DGDDOSE?JVQiX~6{7P)AlMcz{A8q% zi0)U?4PQUFKSan1sj!b&H_Y9r-3Frz+jA6(!P`}ApUqEgupXvltK@vPZXpm175sG4 zbSw7_h@O}vPtLU8&7`0oB@E&v3BB%n^t;?pcCAeW)cAp6PcLs7Y;m4ewE;93RGg3@ zB~o<%{+l9)$)MexFl8V5Ppk};a!hCM8F8hIHaBTW7&1>pUBv|L3u&w}0}cce#+Gcd zeAei>ra1ch(=QkI`xm-khZMO;MP9UWh?8YD5>4ashSl$?I1A?lgq+YNLZgcylLTDr^!hkx^V4?+B-0MYEBAMx< zZR>kw`ulNWxb&Mmfd?U~QFK^qY;mlZi_!`4X~HXSGai4e@;HbPXw!O17LZ!Om2pR3 z@7fR|hR)svxhum$c&2T;(~wN}YS(M{7@_OnaNetaAi5*KI@MHKfZ!BqL%n6Q#Af4Q z6V3Zk)39rsR{vn2N*2ubQT}tAoCd4`$EIIZMlplq7rK}rkgC=BK7I+{%2W_=7c9XTAc_I<&X17Z z{#!3D+1;zpVN2&Z`O}QIi_P8UqTH23K}$;~kux0H8g4h^v)6>e)yuG2Qw)&rxH}q! z)EVPE^;W?@Cr^es-XBc|!gNo9RrQyJV6?&#nhZr-D99wBwoV?2el#APIX5Y@CCm$m z8A)C!%AtgO8sbq*L$AjvKeB*_@wy~57jlxY@!D^0r!0m3F{rq4?O~!NXyykxIKWJ%r2N?WlV!(-zM!Uqn$Ldc1swi+fh}%CfFUAMvT(CpRW3 zW?9!R+$^nl2WC8}O{8lkMEig*%_1)=0lVH!Clu1zsCWM#W8WC0SJ8dZSMS5!Qnt8 zE8Bsm?_&JPzK_%fo39Egl6M>Y1AQ%Bq%jAQ?wfxBMSU}Pcsd}%liCNxB%Rzrrh&Kh zcynR3>1eHpN37fcwrGPW81!Kqxk~9c(8YN zRwUqNGJ4yCk2q~XER2HTWpn%U3ua`u@2zYLL`)NTls>w29;^_XeI4)6Eql=TJ)yXG zKtd34KnR1Czr@x4T=>FTjF+CJ0d()w{j{#|Ujd`n_OeH2*7MI1{PSdSAfj!RHY|6uL}{xIsDcanAa_dwHY>ejHe(i#oo|Fj;Y(SmQT8V%6Kg2V*?I*}; zmT(^dBNOCCxlDp(eSW*A>Y2W;%mIYpY&!&#gFn< zWZ%+I|D5eGRWJV%F8=>S(wrlH_ZO`EM|>fkW7f?krK3E3gmyJ-xWkeIbIJJ4cgiG% zPS)8F8W3B2%O7G6AK@Sg)G<|fpHyny7^H()qZc&raiD7?qm2?)eseaW-oH)y z3>cyaeVgJ*=pZToI^~!Au7N~E7C>osQKf$Y03`nwF?n)UD5I{Gw}F1cDQhf_l%Ez5 zoWK)kgxIJ_xTfkPHErl^KY&UM`&GbJ`D>{%5@GWqlbvk*;k-*}%74By7!#iYRx*Le z4dgKm75T5yC!2K}T$CxYo!{~WI-~20;||Clzdulf5OlGQjKatIF#VN;oR`x$si`-U z0p35`&nB5!)YLaUQtrwc5Qenc#WFD5js*$n86PL9hyOBQt5yS@e~MPq!5;;#lh#a3 zDA{lfvI8cUf-_ED^gL+pOET%YC;D@j51HGhqjA#(q|-1GaenS-vofF4IT)+p(xa}8 z;Y+8qY%u(M%z3f%@BJGRy`Y}&f zW$$2iGI!xEp?^_EaMR@EC^YvE;W$;!O?nX3#uWQ2K}xDg=Od^GISkM&d)O^@#_)1s z`;N;8ufmXmFsQZ_cQbw)g9{ z1D<$C+4frGub^(|^dcAh+fw7kiBJt!XNe2%05;Y@Y52GAI_x!0vc8AzQ#+7WE{CqM zN_8(A25m`sGo_g1x33wEBKFN)TAe4-w3fROt08~EdA}yK$?RLUB#7=b&);R-nKuwU zV;)VoZiuDtlc3jq5=LCD%ZfrM@xGxXFQ06&5bP-o9mop-W^b7UVD!sz{Ek4U1@hO> z&su)!R&Hj^UF8IM9cE5L+Zh}$gi}o@K-ka3)ZJj?Gl1j<6xRFX+#>jA<;-x3)5Esv<2F-lo ziF?|#b9@z?WV%P|_EJU7?n+W&2tajkfnIm5qq?b&Gv8xFsO#Jjjd1g}7o=7qNAw#G zHJQc8!Dp%ZRhv00*$P$o;`@K9{>Uo`fx?Cmn}R_6f#}RNw&TlOMq8$nqPLxay=A-e zbl?{voHJS{E(2f;_L;Q1v8)=sKeU{;aqu9x;3<$&as6YqX9882IbdDq@O$}Ad}0tu zKKn1r1Iml6f9TL7x^ayK4*mb&%|4H2Z^GKIa3B*4IKq+d>M}g>>W!J zNS;L@y|i5X*Tr6Ck6gYox7{AM7*dY}7^YVUa%l*JPJyLc21@ad0Wzy=foh&KDP zFp~qQ*n8X{8+8=sS2X=B8PwGGVBxmO@(VfGknAm$X|E{;nbNI)CB7LSK5n3Jjj!Qn zXK!C+xeV0Hm(0iDSm~Ep+|VaBt^(oIa#i6p`dYZUMmdL+hdN%e${znN2WU_H5sIqk zF5`NqO)QJhhXae%Q6B&+oAq~7kXUrC?-LuZ#mVL^#GNgJziiFeyIv@J*A$YZ1V5xf zo6WzgDFe{fH?V&_CiN96V_R#@o#%f4R#4Au>S)fzKOiMJ{`r?uG-J!+SAOYOMZ&cmq|oayy&|DqQPYj2Qii_Td3BN`wwU_7JDoLzYJ<2|sQ3UhqL8 zlzU)!8{Xt#agCRh4K&<(bH?lrQ^I$2N2a85yrK%+?3y?D^5BTVU#NpwaRuX+gnmLNzZ9x+ZD^XGPt26INbxl%)i%p8xBu)Cuu$|@&;jh3)ZQ~XymnFwe=6w{r|)ti4Q>Y8rE0u(Ce)2wuEWIGFU_9E~Y3c#&ow{}Z-eCMB@SMMoJoJ4SpbX#;5Nb4wR6_j%SJy-BIJZd}7D{USWK`Kx)H$BCsP|1E4e z{aVLI{?z;1UzlKq4fmc|++TpusBUl1Q)iDs4KzUM9F?in8AZT7lKUkc8J-5v73=hl zWRZad-K>bvqa{|`h#oUIS<^w?Wj1Yqi$(hapF(PzOknd=z14!Y1Q!=AuqOUPw*gEb zY9fd5j#<}1z5HVk8r$<}C3QUH`!p0)F8Z3rde~~63mP!%)BYvAqHiufb_!}bdbDA? z9aKhMhufnqm$7_DjV(NpPyr-E^)JYQZ6Zz8V4~arRdIaou@z3?A|^bBFV+Dl0nDe* zaW^o3VF?tcvzOCtbrB=HDc|Vx4Dy)eogTZr(GO^H9lgzvJ`iFQ4?u~0DXv#Ggn=t3 z9Jn-h?G(~8CDlH#J@K3`Vfj&~OZJ*pbp)-b;3VsTebFR~rlzb$e*O66Q;fazA(zRE zpVO^9J=T8N``f*?XI(zzbMl~JEIxV|z{%1(8TJOQ1801i7TwWh41sc8Zb^Vm+Wrxb zD&GOJl#H=$L_@bTKSsjJSy4r@!KSG6TJ9p!vKj9w2!c_(Cbe}>UCwT{Epj!&PbXYI zIT#`Yv?O${%-577FjhveV>`zmYqT4?KkwwbF!e8e2LLCLj5zTN-Ek2*dofTkiV2?= zPLIcSpghU^4Uyjp0s(U1#Mz z>F99Pz-nPw$k~RIl|k)c@xpHu zxQwV2zRi*wyy^aYG&^+R@r@Z{W}moZfq*pV)PCR7N}+5yuYzuJI_B@D!cjWq5RViu zD-be0H9=Ps#+{?PNB{6jqbrgOgQ2pLKAtvl@GCkhpxyin>er(?!@#+`x+-d=Ev@YE z>%*kQr+B|0aX1TgC~T*sH)&02un9now*wu6dg8%aJ;)xZ%ct#~^%IE*&in>}Rz$c| zcm@*9!vX7({7pT2fT&bs4J3&r3;gK`lxaDPXdh-4M5ADTHe4J9a^Dk46tpOd#q{yO zl%pq_Y5uWgSOooS5#LBKdp_IgVs)6g)=5{YD)$%maU%N-g>r$fbe5xeo)*Fb<7>G= zM>Zy=q&P0jH4(=z@5~oa67=QylRwq!03chzVuQN)pKH@6zNu?x_)(iLTz3)U!p^>7 zZ5uyJ+L?==$sJ>Qf(~^z)^iReJ4ZPoX{`2uDWemLg%^gdd%Jrg)&XWKYY4Nn*ENhO zXPR;&E@RGHQg_Uc6aGz# zUsSL2H<7~=IPn&@B8<9>$VR@JY7@1yEWD=}B6`Ir9R<-1On?Lc>_$Fau$kC5F3Gc4 za|4_&JFq+Tr%)a1Q-I&B@F&{IlBJtLB;*uEoy($CxTVD+2i?C}M6|YRk~*2A<5?B4 zKC%d!sfzuCx|Q|5>rP(@{#Y?So$5X)MGqK&+co@D37dZ;$v=?5edFvE{sUs|w6owG z+eD19)<53hjXP^keQDUlLR%9Qw#fcvC~gvGwfKULdq(|X)f?+&2KEUn7d?axZNN`Y z!JQe*gv7F=HgvN|T>M)O;L~tcNo--oR&c7lj`gQm!+1m)myN4rrufbRZl=}QRy`#w z7kWuS_s{y)hbw^>P;wP%cH>L__p71i6%usTP~(01fbbTjwc4Vbx$+IRQ~Ys~CN9`L zqj98AbwgbeX2;6pjyrJXwg1}gu+J^1vRgQICCnlSB6tj1c9K^JdFS(tWcRhnPD%V4 zM(;<1-bG16YowWjn+rpE&5P=Q@1vj6xb~Wr?Vc5r9&9@~VuBMQI@kTy-+aZRlbMlv zvo*i(I7S>zlKh!sr`l?{aP_)YFk7;%79eIV5locVp0bk0_MIdkQH;6cB6o#ZNi%j_ zUjPGlT(#&EOG2C$ty z>fp+qcu-MN9S&xB!%tgzmBuH`&qT^pXOKc**}a#GiDiAn+36>q-h!lp26tfqxl#iwl@cH^P>srR2kE79HxlzdMr*)^XZf&s z6kyziSmU=R*F)^!hhW7_=_1h@sLZr#*qnZ&8Zk$7n|H` z33RCHF=cAk_ePi*p4_O}g5;Q*VQdwh+YGe>L>g6&YpI zJD6xvK>Z5ynCK4A(>tuFPQMC@=>t_!y;qw-v4gtHUt2@yGCT<9Hsde7K7*TCq0>Yr z<**$z?$*r+7qOX~NcNRcM!qyERi}u=x;b0U3Zy1UMqcdPPg7`qrFsE#!6NSFoWcF@ ztcQVyMJ9*`7uSt2S*qQZx+%>=Z0 z*W|Y7D9-xachw6bI~?U!%X)-BIwL85Y$xZgp}Xq=^>pEB{+$6SZA5znLm_I8>0VbNRzIVng#YXMEZHc&Q)%#ZVQ{n~V?RdNP5e8y4_M6~%R~JtIo-GqGThm{h^RuHTURTjmh7Dw4sL6)kHf%y*aujXQs5O`zv_(~pc?2rG6; zS9WI;xT6*18gs}3DtvHQnEFAxq-x+Mrw^(I%-cC|_8T{aTrQDHG`0wONHAX)&)^{> z)5w~4*L5p+jhF@Gl?6i(GC_{Uv9h|K4_^Et<0&R>p`>KAo^%LxvZn?S?KkRgSJIMf z!)R28Zq(-04Fx)->(EH%?WQ?HcJt?Ev&2?$)cs^#+9_g~Lr@#%zo574+pF85nN$2H zlgk1lOrcfqO>?+D(_mRjlC_)mZL(@YiW8gcGNmo_ZRHbus#Ly zGSJf!Feo9V)a`NOeCUa{<16aI>iMXArakIo{))RrJKI$4f`E8sHRQvD`dA2P90nE5 zHHPE10z-z%`(8@zy=q0K#BPM;&feVjV<{0V8!xOA*hUZhQg(@#+R>Gm?;CUf99Lh0 zMT80cu5@pX<%hvg+m(V^?oFv)7Hzc?@owafEY-P8B_nkG(`ocj?}BMzv*K{3d)jpn zH<=JtfKYUq-j88(Bypwwf9N*p;sDe)fcK?gXs?gWwBf_x=@RRbTGq7_@1fsLR9)0Rn?af_RL6=fNnurauT%HFXB; zY8aN!mQ8MkZJ2k`7wfe1FmG73m%Nd{Jv^xQ?nf{;;HGaZaGOy6a6-dtuSk65XXxE0 zKUOOZ(;5g6)+Glxu1mNNvwnm$S7#-cEs${U1BZOSPV#G){APv{5b{6MbLCvzba0Qq zM!Wg)n!=qIde3}!%fh^uE%-8jvMLM1ulGYBjYQ!6c0ZMfSNIonF@A@+IRLFC^_xHB zyLCi>z~2H7_)qJc&cD{C#P#Pp(2JAXeli&f&@53tXdc_f9L*s*4U}&&-|Wu1#>0{eGo30g`8c$&0aqIGRMNN2nJcB`o^}twBaGIr+Mc%h z0Dxlb?3fW+l0VN~@mHR@1CN!(jY%&#Bh2qYxU44Y76D(wi01JjR|Pd_Hd`~&TG}N< z5H%}!c13OOrEYiXVPWwksg@hG`@ZI&Jz^(=jy}HXQ2);($fm@FB@jo3x0r^$P7Y+0 z_{8})ZC)SdFl5h?&1D^>q4a*KVI2AhVNKgv;t-B9Zr51H?ZO@Xiewk%+Q(qcZ!oo2DpkTc~_=MPd56zzqf_7>H_W-UWS%&`;127Em>tqu177rrDwWB*_+A} z-bR7s>!9wdjv;OHQyFEQC8a-%)pcapqT$DMXeGD#`y?k&l(liCIb#{yIUN@VuuiOS zr(y43q#?sd)t$#jomD*F@dFEZ3sYyzbvFJu?^g75%|9*BGMR%YhcY5Cu5Mq&2P)n( z0{8|P=*AiF{b;K>LXSn=ZPP8SGOWi4fmu~9 zN)Z1f;RXNIUg5AC8{~_trBU#wN=v&)oAbd@@7juWWZeuhOL$es$k|%`vqDy67Nkj- zg*t`bLRUPngv%x>?r)+RbDpR*6hJc3gMyu)z#^%C_V(B@GbX~%Nk{X9c03n2$3F>s zME4@2AhbBZySo7L`0MX7gy2eFt5`A_!St@5ox2w=MUq?*t^Wu0?Z(MRuB%wgW)=T} zP!GyOBIptKScGj0^1aT(1xF3XcQkZQXy%fEu5gbxO+fKsu4jhQSQA?xEiT`!QRyrJ zRfJ4H@cI(sL9Z;Y$KSt`b#3iP3NuzEUGcu+-) z2sDOrjRgeI;@Kpb3**qP`>5ZmgvAv4)^WL~ z2I34km9y=tKIrv8y&T6IB^@0xLw3Nb}>CO=VU?sdPI!m%ZP$TN) zE}x3l1*XJ@w*8K${<%<&m~IiRBGq~IOX-%M__@0Msz<2U=tb#c&SyuE$`0hkJ;;b^QoQ;WO@5E}&Lqhl2 zb9@^U2U9vuO*)sW52YF4XQ3Y_%3BicXYX-c%2dsP8W^hJS{=~3^5#AjX822&L8_#s zv<-gL;=)dacwVbBX#!1GO{!mnV+-N{lnyxfmb!QiUV{iuQk02JFcc!ZxYL~ zsL^WqpWrVUnQ>srcTw?#vPXRLqCg&G1y3|-q=qGzC32=~K3r}tfjubzAjj|}vwyy*qT z`WOP4e2sM&qacL89>`P&{8rh_*tpU2aU}b56aD<4Vx7NT6uFx|*ITrz&BQ2zmV{{* z-Jyh+aDtkEM=GW4nN8Q*n-4U4YI}ILj#aYn|L-_`DIRya`f!?9VEg%Yo^{B_sA0)B z-K8Zn11_2_yIQ}e)?XF z-Wh9W3nXhfS;q-nFceKEiVaGlgj$u#X06D#b<5m(0s_h#a;a66)ilDIrn#!+jwO0q zx!^oF#7^NSXq{ZAPIq$ZlU~$K@k7mYZ)OsJNDV^p`%SG!?X3RrMpU0gCV#p)MGf?o z=WDnlquKa3aXa^7p5%;=#S`sG?CF#Y8fCZ;RXq`eg#xyHrZt?sv;;{)&d9ga;N+Ym z3=)h6!-2v@v5Y)*0IHW7JnxFtoup*=x6S;oF7^crDEEnUTPIPUzV$jvoE0@$yS-)50&5edtKsJ7W_N@q)|EEmYF}rj+ zi^@>`y?1p9R!tkNRKrJZya%lzx_gIkt5BA0)vH4l?U{kYW47`zOqvbDWY?R)NM$eG=S!)}>_ zbE6PeTNRcV`mOg>ovrheA?2gYQC{H{oSrX%vL^;M1QY)ES{?|l(Of_A8}r~M4Vx9T z5Om#-jR^F(T<3#{WD00qOY&Rkd)3Ye2uSBWj4H|nt`Fw9RLYO5&*wMSZpFqb_9Y^Q z#77;x1)u#zdU|w82F#jRwM8(R0LzFAhL`51@gAuv*`fxmB<6@=&y-cI7?@D|DZEmG z0}-_}PN?gF!vd0RJ}?r7+jz3MEu#$=r;=z{pCY3}<st z>lh=rNjGzlt#kFi)}j`xRtaF-;MIE!wE%dyjd?%&z!55H;sMC|4_seRJ4@W_6=b|b%OKbW?MU9CNdCc#eo2g&!?mg%auHp7@p6UGnP})jQz{33ssz+uOdzDD zSE*}if&Cg?jC~mMk;5**taJrt&wg+0Ep?Mp#K;X8SIT@br1oDlqtJbiD43&GFENKwE31w$-%m?i2&ce!*=Is(?JAL zznqD~H0n7aG}gf%jmd{LokW@Ru(%RvdS-3tto$e@aZjm&Qa9i`G#Od2-`(l;h8mc$43`=KQw(c;S)BC^6?;DxcCh~@6@>X@ToJs!Mbu1eEtFbIO zz?c!dF2**(EaR#|eWdjlE(B2pI{E=PW$Y!N-F60hp=RHayE74^^@N#&JL%nF8SrhlLMCL^ozqD~xnm_dtugIBkMV@t+y3`PlB4IITGGT=b= zy^{V-sxMi4N*Y2(sriQ59!Rag5wh)gE|J+UlWHJY#Wiiyz*hAS1iLD*czIP4vhtzI z3GN9>hm}Gt0_{!oRoM8fLBLGSOi$6%VXhr6={zRRtsHtIr*A_@%qn^=grUKeaB5Tnon_>P@_^MAS zO^_WZmK>(^I@}N(-w?%Yf^po}@95Olww_{214bY};WS+Uh&y1JPi&@J1(GT#$$!Y#>3vyy6*V5KWi9i4pS(WNZV$~1iAd6^R zf6K?|`|-IlRL$xCoRqj*YNd@@qj|G(el~4u*RmVPfVScFD(a|()GF}*b0kO&imM?2 z09bNEWu;rtvG%JA#b_ zSWbexy<63;;ZFdA0TUxD8r_Pmb3$x(Y#@18EcWtOLX&XCV&JAX@&E{0~= za2T6YQ|KuCutM!4x3N{XmF`_;9?jXl*PY)dfvZ^&dZ~=?Gkh1Iy5>4NB4HCeQi5N_It>qVa4F5b=^| zV^DkJ4zMQjj00nO%o8j@Vw3ZbX~B#cpi{Osc>mI*a`nKU7#mZ6&JNyA-M40YF$^= zwVA#ETc14++#4h8)8WbRAd6oe?ea>cCVU4GI5SprCfYQLxcz>0_i__6SiJvb>8sXG z@kf*?yZc#TOHWjUkogCd=AlC8q0PA!o1%=okhs6fH=tDir!_xNeS_(Y?ePLSs4psK zoW2g!wMTVWL6k(59X6>}-US#&+I9aZ*S<^eg5q$ zvDHpWK|K2ux)8!Nw3H8D_jt2|#@5)^8Az3F(6j34%v2g+8cR{v*<%r&)W~0_41M-{(^UZ&5dKpIq`>SwS6c~F)7|4p81n=O$_QwdA1yq` zZYtAsF`j)(`kfo@s?Sm`->zZ}5T+E4Yg2}&16t%RoGp5T(A3iML|4;w^>C~XHom+M zd#?anP+SP4lKy-EfTp~Hz0`6lPQxDn0Kxj9Yxuh?NXHFo23s#+Nf7o%U>v`dY3l&O zL+S^b*~Kg+Ah$r^#x6n|S~kYdx18=MuoX%Di&X{as~iWt2Bg)wRANcwg)-{^d;8Ze zTE%6H6^tD@%?o9jO(1-evz+1!2!!ZNSueWY;vi5&mO7Z^2EgC`*&xO6`Wpih4OF+Be>Ev)V)%AldYr1p=gT)CU$n3Eq{JLGxaBy*mz z*3ui9Qyqg^?88#5se)x{i6|d3R=A`CYM#Sp{HiZ<-R1GjSMcM|tk zADH;y_Ixmg<^9~_TroO!>0+ozB7-gYS7Q45t;Wm^p`u9O@;}ZCZe;dLezW6dE>ds? zSh#@sE=I)SaA-S)_DVNpd=2Il9-L(#zjbYknVRx`-t$4fAF~LDUbfqdn)2(8LTnu3 ziZzqF%f}^;%>y5JMPP>b`6VCdwDaWy!1IfbBM@2q!c}L@c1_X?L9HElta3NXrQr{D z?xbw^lT89_zL9c2=|!kXs9gl;UBUnSO=6m<6Qm>5_5aM~+vM^C_hZ zjYC^TrY)HU#6ETqepOjz9t~%tfkIREhL-zZ4dQ1=Y1`GKX=l5(G;>z?X8uGd^3{GQ5j1euu%Xqc2SZBpJmvFuVn zrs)NL z$IUn;pnB zWlp7AR7`5~_+TaaRaQlC$WWidBd@Mj6>wjBba&DjpLF*Od&`tmFLd$H9t5%&BV4+C zTu8exOyN6i{b&+?HmU@fsjBKd2kfzMlBIBBO|N8G@<5%PJ}m^ogP4ngZ|o(Y76Qq? z=a;J(1&iYkM+W&0f3A5!r{wM^9A(RZuYmvn=8U^)pz^&tvqpj%n}H_Micg1a!Y)8a zi6S!x_)sCao-l^6i4ZIS^oA8X1l^e*kzt9Kf^`z(HBS4U#W8{3Gvm>{Ycp|Si$2@d zgXPYzjsys2LJW*wTfoOk6<8zb%Hinib&cl|V(7SyVe%8t;kEi~#ND;VL>*VQ+f?;y zL|gMM9rR}!_i*Sfn9j1Ot(W{InQ#jPtOZs{IP|twzw%u(3JFmg@R_-iY3(|o$K79g zh#H_8ZmF*7U(B}n%%b=iJEp+%yLi2>fWymQga5qVi(w} z`}16R`<4=T3I;Btq>_t2;|-82pAFWrPe?}x?{I&RzB3A8n@jpPhKK-TLsA%>b`a4(a|=tg zXE`C+nq0wkKflsE1;nrf--`v#@~h}s2RIum<=glnFEDmh?vyq%&nJDY718**!B8h< z95s^e5)(Lk6m6uy#qeEUXTTX>8wX(`TpEpy9WeI4Cd3|lFyf^83p{)A;)L+B9y&j| zN{;EZ20zo~p?TIy&-LJim`W*`TK<&ql6EmUAsiLCJmfP8YodzV?3BYn%ggwS zJVK82CpBO<9`-+WQ395tmpc^^Wipq0-~zI18a9hxyc&0T0t8FX>^I%P6Q5}_XwqU* z9vgQcvu%btiZ3=Hv1(FQMg|9lzrT(1wvv6WBw^+rqi1CTF?U z;Guhbd^~KQ@Os1@%bv&jg-4Bu7nMMdEPc-wP4UNGBl_;;zltV$xgD<-w&#i}Qn6h+ zunXVb#Vlm^s(($af1aOU7oJuXkb8cEEjWfCJ!@Wh6&nFdc7(ZKlOko{K96DgiMWZU zd>3fG`YjRXgsWI0^$hpM2{2)#;8u9{08)?L0eKmCY1NOY*J}<9TC0Gl9BE}wE|sR| z!swTR-z@ci{f{usI)&#PEq?WO;2OT1eg;@I}~!JnokOYJN&y*dODq+DG?fW{wV+* zOU#tDGY$m}jJn{@UV7AQVEAMG^h`Ex89vK@neN5GZ-Mq*pnX%XOz^64L)L%I#HU!)SEGVu{Cna5 zPmmzER@wgsX*hESD?tQrKP5$hYcEdvph(|Lbslk#Ym3`oV<~Er{)F@#P_>zJ-Au4= zj2E>;QnJD1!V0f69LiCqaieTFbG~;?&d;1`Ptf50Z&#z?Z6Hj}*#K0v-CExJ?Pd6f z62Y*$$6SmKNt_1qK-E>~TMn;iC~|a#Zt~JU(;U(=9xzWnLOJ(Z!QHd+P7s7%=%Mts zP?vZ_AGo=$4rRKMBuM^T1|r=Yb7BtB2WFvfo}xPAzeRYMfym^g&)|^y7HbLW~VL}OOaC4)n;u< z6W^w8K>gVRH{t7$Ncw+Mb|t@zqh{f=u8bZTcM(U+arxR%vN~Xb<%^;iNhmEjS=bevD}} zQ!E%}8A|t%plSd9t8Ryc@~YnB+_1c6XHK5_X-c`9JzM){e3!SkH^^jrDe_+p8UT|A zIshcQ=foEM-$_8G6Zd_0SRvV1;zJ7B1EL{Qw*-XCwq++5)Avb(y>L0M@%5O2h_6pf zQCmN*n`MtpWkp)dlfxH``H3GqQo*_wAvM?b*Hy|PeX^thMrZ>(L8wp%Ln9bR|g%}c3 zfCR&y<)e|nL1jwzT+uHOb|6qBg4xqvSfF1Ru=HIEkfq#*hw{t&r%Ux5-{)7|($Z?E z=LTna+Y7ia8X+}@Y|mM&j@10V#9N6H&u*Q>%lkix^XZ*|k7flJ&`1mIYvoE|Ah zm)$c>E+h=D1)9)DCCgFgxTJ-^{H;;W4fEd3TAKHD`|FyPSc%^8-#=F4cg&_U))fAFW zHL*r7V0P)8VAhV$ELQJF^rZri6t&5}^--xG=G;u;4CO)ZZdrTSX* zmMD{FmYx@loTzBV6x(<}kvu(E=sL0W`ss?mPC@gCfGXCotVfa(kR~)YJ85JjLZc%i zj7ezEY}x~&yg20ua_|VetgK62j!>58u18a{`QY(z8fKM#L9~T;`jx^`dKW0XK4+gW zc4Au+se8YSg6OQJzdu3blxcqA0PFA=T|@j<4|mPq%QAR$>b_Oq(P`XC@IkC-b17Xk zryLwaO~TxU3Cn{o;QJi<2&cGwiF-0{@I)F1t|wcoE?poZOC`4Mj zdJ{GSn=pGAJ%`b`oy`sKF;*S{9OS4z8i~pxVykKthr|{)Uh%!aan#JYmIK$4^J`%` zFJb5{gS>KjK6zun$Oz^G?LQ98SU1b&U$7WE9-4@VbAd$l~Q0@6S9xT{nx9(G)<>UK0qYrZW5awHfc zg{ZAb%=SotQGwKTd)tV53-HcU@0P&rbVr_V$z4JI`9Hij*Xzd@@6TeEVqd~Y&X;R7 z$C0z+m+7URcTF)J`M5-0)Ek=<#W!V*K7>gg^DhB{WLt{@(;n`V&cLBHrZP!TFbC{u zyFl^!mDY&*R`b$AG(n_jM>?n~{qruQ05A&W+Oe@eNmjN6CVtjx=n{JgGpo{AIgJa48U_4meEz0oaeA}d$A^Vb zxX?*L**cZ58z8&%g+m%M80tjZT3rl3XxI#uQ}|C*8yKRKd?hb~AhdbZGP5}E9HT$z z1PBStWlw!nk#q*2f+5FEETTLuY3}j~uNw7<19=KG0ntrXegMP|DZJ53A@mh0Z?{iK9l9A?d zr3%~Hb5>mMVu9ztaCO{iyY9Ccsg1)%(@A%6EMhdM4VD=DmNZ zcOXmmQ}FvZPRXAX-QU$7P{?uNS`C50^5e&VkyLo_zIsqxF*3LL(SbM(ItR+)Pv z)Z3!r_6=12S*UvUyC$>^5sWUzg*Meoy7zr8&7*Ak!1#r5n&Ti3)*cbwJwU_2(IZuCP?dc0U zrK2ExSSiS`3KB3Jd`4M(ll{h(y5sQvR`QK19Tl)DTt4@XwNf^Dl%oJb+@$hi+!aqM zZp?Jv4N2Uu#UO0a@BCNQ*{%Rt2mIi7+vhr7g*=fV2HTE`1TpaybWji^5-cXHv%Qio z;aTZ4Q#76C+SeQK%*GH+dvjp%<3P?(bD?cu`Ond9gwu~cC}e7v^by?1El0!(h56q8 z;w?qBKEx`sv}}b&>8ARW#JJKLMT(iIQQ$n{f648?N1y{mmQ{eH_oSS3*>V^Ouk(1G zb6cF-Yqfm>dYVhk)LdIxYu*2i3`I6$C3CQlYGy#cLcYdRD&+p^{hzA?V`x8OtS*?x zQ{~VdUM$0Dztclm*$e_5B4YSXn~;1h@n?O3m{{<1Ph0AYock{BLQzy4k>MR?Bx%Y1 zcFZp#&K?yPU8e&r_9(i4dUmElP+RvFQUO6Myv3kb5G7XRJMmOWnb z74%4l6L=SE7Rxq!ZWi=73(|(ZB zqiU0|97?6wP)WI$voh&cKKo{oXa}eeYS@m8L{rt-a$|+O!ue$2uBblvooVdE>Zi2+ zOn$cUo*gLlKypq05}LSneGa7Epe`%3!h9#4nBU|jc5GqYY0i!O+n%21hR<5!Qa-)b zG-AU%ou+k%NgtCN*$A)b5EWG5JE&H^mh@~!5B#*2`vd;x%HzXnmrJvi1)xu|!jq`; z2%K;=h5&um@%t&bY8tiCG><}#U0jd|tIa^hIplQ??Jq)0bj|o2NGQbLP4lG&3YCC@ z;_&~$);9)c5_R3iw(U%wI1}5pZQHhO+qUgwVmlMtw(q>(d;i>9->K@ZK3&~ar&jN( z-gWlcYhh?SNOa&&Q)rIcq_3aYLEQYbCF_+yM$DxWku0mVS0hUFqUD@iW)^^vfm*w1 zMj-C_zL|^3qnm?zUW!RkjV?jEMiE?B>&}9FcJzTV-@T!-NR%w^9mm6LE2tkK0LJpFA$1be`#R;knr@hbs8LC^lgiZBx873Jc@ts1xf^@8mR%=n${(c=Q`J5XH+T@rTTJkY-0-uXdh75Nr7d}zR|%Li!bmhvXJO=sCJUgDpCRJits zBF56pY&fn!HC9k|h1uBgVuGpHJNMsAcL!}(ijc27o(4^0KfZ@T$M?%aVZFg3S@x$F zv}j6`e$2~kr(51(R|Q`^I2*XdydQh5QX6j^&($A=p};*Rv;^$u^K+=V|6LoNs~3x= zdO;yzc!umPK2ogB!JJkgC;8Stcgl|j2Am;Kso_S4hNwvJlu+@ZhfPBJ8y!QH{@jx8 zWKyW=>5o)MjIQl3F|jP~D=~Q$Bfl{#tc(yZBEpViBOdH4d-jljwyeBy-cUdY9BKW3 zqB;?xV{^J4?#1Sj^;1e~@cqg2@1^3Me-KUq5roD*v!CVpQ{)@KpiueC(oJw2y5vRH zGu7($A!}K179ExsXm@wih<5`FugQ|%=p+I%$1F4M7oM1W2_*fmZB!mKS()H^2IBKX z7J!oR?`~S}2{$Y)^^X#2MyJJowE53$T!kPD`VY*IH+J-F|BDUB` zg8gQ-&r5bIN_N2sJvXDk{n;bdm1vxh$WqtOWSAXze9rz?({y>ZlD12ehKYIOuB(RF z?Oi(Kg2cepX{Bc8UN^Moa7IZGi=kI`K7L?U2Btlsb|CHndKSnEQQGtE9jb)0&*(4u7ZuxmFlE9ZKihQ zxLh`4mNXy?Y@X2}{Dcs7-LF$GB}xw|%31XS*j`YdVluciyRCWbeXGw=ggg~YA5;v2 zEOx-umx!8wHyVs{NA*xNnGIV73JB&9o-+>v)%UVmJk)zQb6~!?0|ExxW3V%xQMt^v8OF&hXk8^KmrXFW6X{9)q zM==G&**(b9E6$coy_ILnSWJFXzRPmPZ;iNdRL#%rlCfdeE^DFGz+k4E6PHi~h-XXw z=2{K3H52lRQQ8jrCj$MSA)kR%Y<|fL)sNIyZ%NJ9jzHF^GE)d!TsvyApe917by}Ef zISAdzgFT~FAL7Sb?l`L*M=X}Isyg_KR1As+<*t{4=18hL?_Ae~LvaXka&``(pD((& zmPz?49!%*4Z*(IuVI&C@+)=SMoR2wRw%{y}<*f=u0<)}wc7(=%P5o{PHmmbU+V)z9 z#aUj9Abz#e{4D^c(S@M+sa1*dzFWhpmGf`x`_k=FEAnc|K08Irbc-lOtL<8GqK^)4 zpxKOUR1T^^Q_bG{_=xS=x4^*4scf$mr7DGV8kyfxgVUxuwzGKO-%z`~UVIw376_l} zDKZ)gLAk)0_7cK!ei6uxk9o?E>K8QfcHKpuHyx|qt@ zoN3bkO%h4nI)}fbXZ?YYTaW$=A>6^oce@8=0Je(3$F=Xwot~C0DiU_E|3>=9KjV(^ z(BHckQFfXh-q#)nnDP68gWUYn4E4mFQ+v72sbmiN_8@z*A~1Lix@#1|l+kzWjFGN* zU~6fzbcQz+seQoj#ztcMqpDt=2eE}XtxCTRg1;#^w-(^Ty>te$m>mfN_eEUByo=d- zDy7nv6~5Hrc<1NSSYW2gX$jW1SC;Nz&fQZ5Z82>$0-yyn^z!`w=KBV8aJr-9Wt&y- zV$wu@bXS#ltuT~@E|paU-XTRWoQF)8lvW)??5Vux;w?A4HG-D~J<#l7`!K4ODl94Qh77BFoyJ#(H z9B-yn*56}rb^X^@;L$Y0tn}Od)on@bm|8JrR676%aQLGvu2sP+S`qs}_UuOG;ua8F z=m=TeC3XV7V~3pC*1I9j5xKhT&&y3g_aEa%YDVtZ+NQuL^|_~Nv-P6NP-r6c1*YKm zFn#IKU;NCA)soRSP4VxBu+8RVn#Dkr0jVOZR_walMG!5$%rB@|zi10Z{l)#TM!f&G5Jzz~)bKc-74;K^6w~kxwLd&eQ zV?V9vL|R}&zFk$zKL&G?nJHxmU5L=i-~GY7AF_uM5vd5!XjkHy65ztM9ENmbG6prd zkoeVz_z{oYl*{Jdk?6#A(fqZX&cZLJ5KKUA1%Vi)*bL->mqI{8h!vT8B5gVH)&l3I z4e{V*aAWKikWM#1`5`InNl$;TrH2W^O>F~&#JW+9>bhsZIZT_`b_04ddckCQHT(my zqed1bdi(OtS8{106q`gUZLL`y1viNm1ZyksHb);^>Q3_)I3^&JUf3ANoO)3m5+(@^ z`^a&gDtxJ$^>wsyLr91_V`zj;wamwErEXA_6KCncpe8R zs}Mg-F!5Vv5yn^HLhXHGnyaB5(q&a`bI$@8b)_cMFfe~Bf;A5#LdyQMZ2Es5U)q&^ z5c#N{da*R)HC4NMH{}Qm0;0nCW68B4t>xQcgD-09MkK3#s7VnKrP+6l_P8nj(!{dJ zMST7eH`!FJ&woT6M#Zw|?1$>kc>f;F>Ee$TV7NZ-%O495v)d#_wpud@S4VKyOeo>t zY!oiz%dw^|hwIb0Gd()b@{80Pa~2mD2)3C_kWg@Hb{T7*-4Y)nQ6n2b7a|5SP2Pv! zgp%V2or5`S3^{!R{UTJWfy-%3nsnvK+aZgs2d+2@s{@**O{Y?dL~!{MmvT4CX1(WB z#)bIDQe54Wj(rUvg_sHjeX6*nW+ot%B-A>J0wVu=%*Eo!xz49& zbu+k`c2KIy8%MYK>>Zcp5%j!~n8ZjDmA$}37T1eM>@yct=n0^osyNm4arFS`f9p~+ z+IW@tYCl`HN@eR}unoVWa8#a^?Q>(BTZ)Kv!hT>HasaS}jJA>{;!zz@LXi6A)BrS% zMZ@Z990 zZcp^T<_n75q$@B^ySf`qF?8`JK`-!(@yVpcm`Gxl^tYO@(Ixwf?b(56juq}1%dJtg zzDWLDuXU5JDJr`D10|G1p{hvI5gf2QU%~;BY{gQFBr zDOwvtIfhoGCYpQ*^S`~IixBrg?GH?aD5Npq%AdAlSHl7uO8G}41G~Z-ZhH-i%1lIN z-y<~XS)zfzz8JU|E|eV>hd<$Q5I$`XK`}uZmZnX-J7C@s;OJ-zXp)WU<;?al&bOIhyA^_#-)*Mm_dvf1#Lz&B+{h6pL{Lg*O8 z_m&>*MJ*V$;L$Co622iHffbeP5iQXSAYFx)N{PiX;xL&XLeepApL9w^sVG5lCprTf zAI1Nif^%5&ndyUzON`(7cpD0t&TS>hf@WudD{FT9bG(9=epfFF zm0@HPUEzoezh)r9O>e_)`vvxe2m68HPVXWL;MWr}9_?OQ0gm+u9x+tJE{UKQ{o&RC zunY*CTBR8DyKhS%(ZN#kbQ^&J&GSp~$LmgP>yfY=%jOG?`^2CdU!c49BN`35mR6(- z?jd?QK}HBuLvJabEoMkIR|TfSx!1pDSI$LN+x>Jm_iaA#{EKu1iNPp+jwY(QYu{g9 z6s`B+<~4t=zO9S;#DZOVj5l;w!nkTF!&Xu}rb}K6O-qkiabf(@=rL8OV}9xVGUv|O z=w#AaV9`)fR%9YDvoB+b?2^K`Io#AGa$`UR$bRdRS$K$mC|?&)4~(WnS24?YLZ%Cc zM=vU&{KfQS8|9%BuTTuPoI0x!%Xct&?5dOX^cg)&qhhGm876dflBJOTGe`&hM}@7W z0Wh7rwcX@S-r|};!b+MX;L~*}le+3$m7h!C@}Q7k15ZMeMx|I*RyCS6hAWhjRwJTA zK$+|R7-@eoOSc0BTNSFZMT8Od&kG2A^%E1Ux$R(w_YKLxJ#GU?YU1}Kl*i#X`9uX% z&%m_(>p~p{fX6R7d4J&dAo-2l&NPW$TFKVbiu1}Ku9~nfV>)K`%HQynrd`Mjx)he(On!H03GHOlECn=GWb!L{j%WWYYLf zz!ZeOthFV=S>aRsUKx{~HLT!JGc9KaHq+3`GOF$|D4v&uPEn;cTvjgLWpG~JtNk?O zihhrV;`i!al)XSSb4rah`zldq#?dfOtlvG+CQleHvgRE{?$+g1xj;Bnzw%=G%1?e2B{3dlxVK$dkwDZ! zj;*6ed50LrzPYsNc7s4no>AldDP9sIqzg?`YYhKjLiNLt zS7@z=Y^sAS;S|E6{yez0LrMogvD%r?D+#T3yA-4ebY%;|Qe-UR8 z-ZXEIz9D}f3h2+~`vflk^(izrpt*NZke^)R+i)%qokbXj9Jg1tnMLO=*ZXa!&u5SQ zNGUQAD)HrWV#Km=-3)A12BIt(yUS>!FWQD3-GZFME~l+Ec(SL%otm}@6MDE$o-zIukt&#+uZ-X%Dm`3qe$O~0xNvtR;> z_lQ_Di+-V^a57ZGYL)28$;C;WMQ+9*(On4M|?wtCm6O(!yXNJ0TM%tnYT}hWQ)1eA8{! z)G9Qs2YoS+0o;y|O)bO!WfzED!$g#T=M@`O%~H$q%1jEDmMtn$lV?SvFbcjf^in+A zC!gX%rI`2~ns`J+bTV8ab-gt$PHAt@|F$XFx&|K(pI)ro)kfw%an6nYvQ+s(f9R_@!fhHx`-rZzJ0diKq1W+I zgNO>>cwP{OFqzz}w^k$V_nq&_B=hUsXZjl#+Uh1=N{|Hk6{Espe_#-2NKh-w_Pq1K zqn)SS6rUx1pra|ZqD*}8v-*<)_Fa~mFpf`^MU+Au1x#EM7zx^}f9w>T-LYS5fzeCu zs{>VMebd5eR^|~Glwu3^#wK!EQl->44rTIM4X$0v%(6l%nE(KYe+5P6MGo!n!rDihcM-1SR3>=)YvXo ztXD5i!U1&nr$rrA5}v^fs6?b**F;+`5};0)G-`9z)%3G}Z`}6=G{U_o^%PRf5@{_f zM;!@PW3Mplrf5!T0-l6vK9RX116qao;&ha_y?4J36x*8;l;Aee+)-K@g9Nalb1M2~ zbLKr2MgB_GPVe=x=5BB$l)csr=oT~Klugc+_3)|4#2WL4tk9`%!+R>Zk7wv6<4%#i zUV+TiL$evgK3|r|65-G=W;JoQl?oLUsM;EIsNN3}A^(z2^+-UUpt9AH9%NmWG)$J5 zB~oYeOZ97>=;ly<^vOO?=H}X#Gfl^{nbSsgg(^Wu$m5If*D^8m!37Yv;sCNTErV9` zhi2cdh=}xL^6O5bV48iMgt+u9GbyR>4zSJiJogV!?PhB~DoB$LX>A<#U8bcMuv?)z zVl(L`eh42K(8eJ%XC7!kFPg1Be9O`sr($Twn3;#hR3h=Bi5Q|A39RvwuYLO@t3Scp3~ieZB=LFve?Xw(p0*NUx=Ih4q=4rO{F>uO89M+*#boB47Nsw)OCmVkUPq&8a7N!Pp?O&+MWN7%_=wlM*Jxn%$@9@kQ$~amdU#QekIIRr1 zLd9N*Eh!pI);w`tX%s&~Eno2&Vfz*d9y;-bXgk*-;aq)R^nMqC=(EXxsRvZ@8IF+= z9M9E7;6G$;fg3JHVDi;M(gpp&EJL;3`c=FDE9ly223_R7cZvYYi5kKe=l?F19g@G| zL6*@!MW;goIOe7@Wu@3$U6NTrWiRz}wwfBwzX{%jlsneZ9V{=_;nwgj5WE?*1Y9Z1t z^0x%rjd}Si3XMy;Ld|I9j6|oAm5AWLx)&Im+TNu&*m+yQnqo&L&ie`I_YvpFWG=b6 zLj>G^>W;P*BAzrCh8kmayeJ(&eHsy!8p)!6QRQi*txW_ts%&_ETGS`-m*{d6PJz9qGfhP=ClL0wCNKT<~7xOqLrWL<$@7xhfAyU!u++hq{5n zrzvY-crx9%Z@YOu7uyX+o%BZBnH|6^*^zUEJlHyv$b=KMm_>u%d)avq|Ia#sGNhp@ zBJ}Dizg;vA-ZR%3f*YGdf~mmtT~qTp9Bn@{``b)8;&2)JsWcrs&jHWwpL@F@9lc<845yLl)||KC z&wkXC*%y&U>tkXkabhP<)){9(} zv&x&bY=jEkcddjKaxi{9*pU^Jc$b7IpM!$P6LUPssVJA^W~ByocB)yr%|p|Iqw9P7 z`+{?C_E3@lR$`bo56y54TTLZWg8EUs_ar0pmjX}{BZw?jV;kBPs+(gci-k@KtOddI4}-ZcF2etlIAjQR8W1~uW1`G3fqr)TIu7);uGiNc}vb^#QM)ZQAu&W$#-v1qxex*{c2dA#? z3zpsqr0)aW9U5_#Wwp&{j&=#eUgo=(W3$ZhQ(^t4;DrP6Zb2~ktMw0HOH$z|_Pv#5 zcGy&O_^%FK)fp{Xwf9!wx-zW@Tr3W=0bpp8d#&2@0|fCQO^E6_bcwWRE{8@&AWy;R=4*$_ZnR-^G(-@G%9OT{*kJo#PhZI`C}(^IhrX( zaTIWV;%;Ig0S%Z^y_SQF&5ik@jatVdDgdx7CAvt7ipZKjO*%ZIhY>b}wOZ(k?nK|p1Pk&L_JeS(K(jOF8@T8W{ZdD@7Ayd2grqP=@muK#vsun z_AH}0_q0Q!*`2g1GaooaVsEgm*W%*L0fF)RElmf! zP+h>#O=n-xgbtIbi^#QP&?@KOG4O2x<(FLCT-kQHC3i(OOo=;N9% zRelO_8zCrSJA)j!))^>jB$OuPnY*oCk^?f@E{-$yxd+8Ok)O4CzGvW{vdPJ6fUjh! ze=4y7z}SubF@+AyQDDbT=EX?YyR$ek-{Ec!vo~*Rl?}`)PQ`kY-{(s7njGWOWMmph}JZz)J96kH@~Db(I!N>o)d*!y%{zBoGp zydnAP2tqCy#X+|)x(HY(2!~DzU?D#yhw7;0J1^`lwdxiSZ4vt5w~Q<%8;=;Zuw*RQvvluld}|NKiF6WFB$ir$)I+Xh_YK14Q9 z-jX@IoQWU`2V2DDUk+lY_#uya1(!g>XNt1pr`=4v{EDa6Z! zk@hsDGrAlI=$}^YF-lB7Rkod(*#1R+m>tWZmRL~Du0Ft_ILZZ#R}9wl5ke3O?2u&- z;9wjaDvhX9=3*IhTV>I|_s6U5`IAUHC#|2y%`?-juf9?x{<544b}*nKm;xZyK7?fu zwQZ@-K;ewdz4HLiax%kOiXy3rj%E8f<|O`hO$?8iX1)OZw8^-Mt!Ids(;lbWJf5)z z&@RTyODge{rS7wmyr&EAO94`u0nJCLs%{8~@W)HZb;FGfz-sr;W%LQDNwW~6&ck~} zy`Uio)mfHT8i@t2f{5G2bCatyWogpiQ|Caoc0Pu1t(Yq=^ne06>f2K{ZWHA3X#Epk z+D%XJ3rvRFY`^Ea8WEsPc}7~I9K!@flmuuyC%&BI)Ql9fkP8tdf+rdx;UZw=pOKZ+>m*Ab2TzeoH;JKw-e~nh>+aUW-)IHiJ^@@Yc72kBe!snTD`DJ zwti!CCYTJyssC;^MZ__%4g*>_R+`_Z^p$TtqUZgal(2u$`YP3qh)R249anbK-UpSz z9lHw`z|L!#THnYFS|v&!zA%{A-rni^Y>ytT5yzsX(9x3m2rJ#?oh@wKutNzo)i1@BU3phT+X3DWtUa7L|B-lFwEYd{dGG@)QY zR4Oydc@rD6eKYxc6s+aZzs_Vmy=m=^^gbrhiI!tA1OPQspz_o~}we;QIQ@ zlE~$?BMeTmCm8c_#8>DZj#-_p&cEVkd}H@a*v^X+Cs9{a<>&HQvO)qE7ixCJ^d6<` zm&s@6AZ)Zt5|{(RoMb_CW-#)sR0M=Ent$7Am zsoI#SU=f2(ArCQ&IjZO6eW7nS3m!>4`epE}*ISiSO9{;WhX{?6Sv7~0Gl|UC*{VM7 z#LM1zM9x5hS@%wd;Q50qB*+lO&Hz3R5?9{Mq%xqu=7@dj+~O~w8D#$|yQeQh;XCy@ ze=()^{a!VeLv8knuM1)3#4x5^g>9?ketYhV6s+M|>?VbTzB_1I`Am{^vF5n!De2rh z5Ak4_yf|2+fwXC{Ppq;T#@fcb(G%Khtm-xsY>HYS&38M-z)Rz%30>w5&qRi+)9(GX z5U0i)FRbH|T7e1JD|;ln#wYsZC*&R(m?pN-+EKCM+|}oR1BF9+b;;6dQn0#LI!NP=iJ2a& zytv3IbzQ#YoSc~+Sq#U_nm+d}=9NwaappR6U+7G@aQ3CG!web#1zZ_x9rcRO$+I3m zsiSNw@=BWB5yUssUCN|$mJY@ukNiY(dqTK7We1b`ywe?B3L$P01dF2h&n-x?qF37B zL<^7NC}U3?mz8aygn71a2p22);4)CG(yhSAJm)r%fJQE6O_rPUZHf3>Tl?i`Ml@4u zjL&^zG$161U*$0YwgSDvlc^Moq3ka+ZU2C;4|dO2yeXN@foxN)$NeuzgH={ifxG z$ea*B8b>UNukxR}mR-g@qK(EdFjy;`l^u?u1F4_PIrWB9DN^ZeO>|*aLXY0wXKFy3z;Uww$$Y6;)4`$&|= zE6AdGe1uWyI7_>YGHfy(2Y1wjcYU|IsfnDVJY;dhEGX82{k-}8GA+OAV)AyEm8y<2 zfx4&8!@l$YL67gp| z@cL{br!9O*zng%%^(5R%0gti6cKYq)fF|W?*C~3bVVCrB0l&I|T zS989B(+bN%N2h{^w?G3tPQ_}i!2x9z#W1^g0} zwT)pAgSPuNa6pgvXH)^)Ny3~k!Z%yP?{1mNVgN|3bWNYYjG$)y>0giG#ip`8KjUGUqK6 zU9eTsmT6Hox4tB{O|#wek{;bvMAi2K1A*@z`k7D!Zw;rvWbn}6dvYC%u0Olh+>+z> zYO!*{{F#aAyJNo_gI}yzGi|knAnVKTnEHRx!WI%z{oU(Qzdh@~(Dn#}a0gqJ52+B| zA5V-Hd?ejKs%yAPKc{*!Z7v1Ol<~DWt7d&gTP+54yb#-VVK8w+(-ZXuEvcze4pnVx zrQ~@%VO1vl;v=IXdcVj#0?uJHrMk++CH1}IH(FaMBdQSB>?!Tj^r95^a9#jHmIyy% zXF_Iy_vJvg+9~ucJpw~rPWMPH+ENBrWTqD3Iu97XYzzQ(n1c)<%YHIK!b9^b?kSqm zI2}izXFhbrDJXi_uCA1?_u#EPFr@7q16`s(2#vCP!@mE-xg%>G(JxNW{Z^DYlNyFB zmt5~c*~P?F8UJQKt|>pC?1Sx^pM)D z;AMjxcm~DecOzW;ryiMxivVqW8nave{5^1OdB2J-YXF8S6Xi&`B48iIh6|7~L`lHW zE=*?}F`uS#Ge_K!B>K0e<7=sphi9A|jLyHW~8uR#d?vp;j^YW;=vbQ$D z`^^Lij>zgOA`m|@jxOs*tpJKg`|>mHCn|8+{P`9q+4DB2AA^?PO5VDDT!c{y!4PI* zo84rQK?;$f$+2c&Z%IY+H<*A=WXY>*ednHei|f1>xuCc2MzZcOpU$G>!V&xy@yifL z=uM2SXa&-sKHRMoJ<&rvGvmFt&b`2_3hng@ghLFazB43fij<*5cLpaLqo2hEQQ0QO#IdNZgT%OB@-enl$&*FLWCn zBeQ0dBF6;I`lYixR5S;kXWll%ydk;fiAhVkCgg9tjB_FJC(1O{PZ<|yPjiYKvK}7^gZeKPEMLKFA4q}tz^mbI5@!Bp$ z`|}{&loO$8tP1_%g)^F)MJWg@17{!h-6K|6)ifLfx&rt>iCDx=H)1G1z$SzO?>Uz#uQvstDTICc)}EAXk{$(X#2i1 zY@;oKF4H?0;ghuTCu=E}mCh*1M_2RSek}~BS{wZZ8d3JW>U};N9yJWPY+tTsNTTQ> z4jmo4cTIv9=tBaQ25j=aCVC7HP>lb|J!qtu8 zLUDb6R0>-|(FB*^%w`n;^+KP@Qw|OBg7POOc29JgDW!O7RM)lZs1O{2eCvMG1#^za z6jvp%)!>>ah31|P`tec?pCev}=!Gjlws=F5<~}ZwyK3zkE#9Ca=MW@8vhWtt>0$fJ zIBOFUV(ahUc8|qNBjY%0xG{XeOC}g(4jqEb*GV~<8(^%J7xsT_4%yA{GTFH*wyj?@?G9zh{IX zkf9+-R7^~dIlmJ5O)AuvJWXodt4fh6TYt)S-@X`WV zUOZV8+#Es#hs6erYSEN14&hy8|w!|XggWB}wtNRG%oX;eKIYp6Hqxn8fUMfy<(>pyeM`xZm#*N+Ej$|c!ePX;u*PCbcEDEg1MCD>qIwvo8>lTjn7$YND zg}!o3>FGjqEoBgXKQd~%Ua+1Gb~+|hO(m=GFBr*lNhcARe9dV6O)m=*k(M%iXwTA0R6R3c}P>D&+n6xxxu9I~sf(M0svVwUm&FU4)!0gNW zDL3M1MXoa5m;dIJmiA#nT$aRt23w6A+$F-PSf_dc`a<9ExN6gVI7>M>4t~$nI|apa zX#TN@fI;Ud^DmEXl`gni`$v)oyZn5Bq*v=4zL0|SEQ)2qTs4HkV$UnxZVa4DY(ldY zGVTNXvrIz4cJ=5E`mIAJ-q9t2IN}!J3<^lEhm|}6=B|)MPbgER+ysOd8DmitcQi#zC5-*gQdgB1nQU7vXw${OSE8Mi~%% z=zg3KTSR#?=j|lf^rGc^cDIv#yYb0XVzFY^T}N(c{5iiTiRU?r>-D&9Etitth-nJ% zNeDq-Kq-V`NyO0kHyt4ZS7OPU-s^yqsJON8uoF3vpExT)g zCeZ?e`WB`F_X4;w7ECadhh{i(IzA2!4khc)2-y&tkA6cQCvpN&ZleE<{G|(nD?aoI zFD(;b-e7t*vY5W@l?9&71xt?tPQ@Ch@(~AfC#V0YySzZuMY5^2em8Pj_6)O#wgu9;Xa#dWcboDX zb*aXZk8DRg304_1Rr|DGi4vXlQnuEAp&nnyTso125W@aGDglLOI6G)$s8#SoI!lK+ zG$1*ZR(!9Ng^IiB1cok+K$`fagq-Z)^ylI=)ZoSU5s0KlvOs>vmh`EY$3cW%<{eLQG7hmSEc@R;|rzjR6T%=G2d8 ziFH=G=i}g$NR4e&9~JoOSrm+mW};;)pwLjrz$3u|j@4T00PTnGeqiV%l)2s6F~S>~ zhMpD3hXh@~oW|S}{~Qs|CI748$yxt~Z>+2RKQ$f%Lq)_Uv1A?@yPIv5xxhcfutHsU zGI_$b@-Js@^21A;e^D-Uj(BVx!3PW4N{)@Mn3!c!{jvE*uSIr=G_cw08TB7TG9-Sy zphv1Z60IQ<(;-#nBLEhocGnW=#ox&lpgLfhLBoq-b}cIpno)F8LOE-gJK#ao)sriR zrLSkU$!ItS>e(WLACMgv%AoIZG~4}$D!o3yAY;AFe3MbDcoeeBSi~TI!k;X=V6Q5& zr~d$A*GmJpmVUcev`;8*C*)ity6~DHPOuhCSYB-HDsq(zATlzNc&AJVFb~w&PE$Gk zmJ0n`9HYcZ2`!(1L`0Rq|A~Ro1K2mX*E;3&;D-{8Vt>U}zRTyo&P3k%GT!*9zsXjW z5R3n7Ox|N+aW;LH%A*Zz9HiDRy~f%I47ryz=DMP-Mz)vvVPG{6IC zBK7}{rW@3+8}0KTb^fNds>_ioc4@YKrVRG9u^_Sp<2sL@*uv~EMt3X@)OSs4`AzS? zAK7EVa~$I49ln?*IAgseSKo;cqPggFHD?vW!hDIU6SOpe8;|8ZUu-2O_gQLki0OEQ zbi(B2b;=h*^1(HCOQDbfj(d-STm&)c?bNLvruf<(0yD4J(%Du!uI)l3DZ3H5SOP03 zi8z59hN^wdf2T~w9YFr2KEQfm`AL1^b<$J}(M9y6_XF0sZDa6<(;?EQ&i3nqnXA;q zq2Jwtq;>1cM9%=|FVb2gVa=hn32t*iwv42$N<7HkyxcmcHW7+7U1crtPr@W52nB_l zAxfamKapu4&kt2qxRH3&GW7mg7}+`k zuj9liT)7p$VV)9vZ*trvW3TywSUZ{2*i8x0n!de?AzVm0DFPm;=l%vz?&gmk*oNC>-< z&0JQgY?Y(;8s2GMvIdcs_sJ)&V&)N-f`hn|r3Ru7EK22*FPq$8(v2v+S{hibbzMiY zqy|%!Cl|x(dnGHR$I42iv^J{}yx}o@2T=5$C8$Y(nw#zj{tRy9;%{>{ODJv0T}AuCECO~gsW&Br(O z^rb1HvQ*0$274u2N*>@cK2)x}-86QV1snyQVEz)$$)h#Jw4K@H+kn~hrHfcOUVIaJ z7~8UJs1fuut(77u5af7>!?KmN zfsAXG$I?$g3VqNqe#%-jgESdDj|HW87q_Lgfc$2SxQ^J7&98Ibm~f=-laOp9Kw`kY zeZJZqLSssXT2*eHyeam}iMj8C;GHp)p1yBW@WkSFie9R?{|x8+$QYVaGg0k3Pc`6( zK(4v>#9xV1=wlmi?7n0n9qIf$HNeKi=Xz-7L=quCM>5+;L7M=?-vBRKqzKxv!qEbUbnW%5QqS=W zwxj4xy%G(!C5tCYx`h)y-i|uaYVkQ zjp4Glbqso~?TND3ZEI-{?3U|c$POdgV=BZnm8Yhe4JL;crRdRsz82n1u=t+={tD@= z(j@5GU@F~W-)L1;RM6qcbWNFEj^nM9O(U*Yvwb4EqeSYG@?ynSz%3Oz;EiJu?FgTX z!K7AfikgZUss{qpr^>x}_pkk|OA^sWf<1GX`9IgkuESqe@j(b{$ozCHCHH1AW!H5m z!-Jh)BJ&feY0=|wqCL%mSAXzxoXFO$deVLx{vKA?s8Fr_vqX6fHvHRS z{Td2pkA#3wXTQ8b)@az2BjbcXb-q5iIjh;s0<9@0y}y{Y+wcHL;ehFVV9c(UOPzJf zsb!R(H8sz%&Jej;YI(^%93NR%<$9M3chnvS?Q`8I@YV3JX;dOYtlRHQD0%wxwA6f! zfs1j>Mx?!Q8audLSfVLH8q_RaVp;lpq&@`;pWui5iW;9MNP2jE5uY5@uUUOM(a81v zVYpacwGBBz{8<0`5oSug2;3s3m`uzqfMGs1j&_+r)L2=p!?#<8%5D?Y3uM|8Rfq>m z_qv|4U$)hf8DT>ga(X%vAbfLU7yAS1dT_PP25urB9|Xl4Fn~K^?}{B=R#eR zP=!$(22aP*gcwvFVsCBjrat?OAXheQ6Z;v5i;G;902j&v1Y6FVng`V<%ln<>k6Ses zdT6RR-b}(IWQXNh?9vbQY-`|gPvPqYoWezI>!7R53HjpLk#>GY!OTzcy5hEi8S8ju zg@7kn`T?$lVBs)~dEVE8cK`anRh*EwG<)4t87oX5%=;rRG2_6Rhgxgqzy|t{240d_ zd|}|Y5)5xUiK;r;w9Zm5Ctci5w4ryA`r%J$&f6=r+r$440B}H$zr8XeI3}XLnwg@| zD{*R;Ht`ZzEynO=4{}*Kfcqes(Jc4%w23Csu6#@xa|HUj3%uCl#lLAlkyfig26Tb( zG^?jl{S>o3r+;GTKwvMf?q=ctG)t*kDq0vBjqI}S4igjU>QiM5;&^nB-lBlgT`cZmLyApALf4&Bxyih4O-| z=aKsXV@1fI-$2<4%J`7etnP9<7`7~ay7mlKO8Uy2hYUis79s87{YrphyO*_oV}Rvt zu+wgOv>-Qb*KoZkB2uvtJf~3Se+I|wXd`ww<<9niuM)uE&bX^($vx125gqPS>^-rk zF2f=3c5WA0K~G2&{Bc?9xH6^za#1%_2zE2S){1UnTNSzS@B6fB^vy3+ZlP+M)=mwo zjM``aFyf)`yB8FRr=bI`usj7r(czejm24qeSYrBA$xj14Vtv`!Ej`y8H%dbq`nW+tdlG?- zRSS-XJSM-bv=qzqZ^PZ^I!l8yyFFsx%)8%_Z&rD4Szu_2o;7vY5{ZO&%I%GZQRqqf4Tavqm$*H18zpbJD3UWGJ z%wK@X$_~#ON1j-Y&R6fm!TT=Wz65duSQnRJW+g6ZSFUKygp-9&P!nZ?kh}snmeTUzjY?hB2)$Jvlw0Pad z;AD0ZJF(Y=p(o@%MxQ)W;i>;5(R^FL748eD{l9Y zi7v!QnyL2H(xd|rlVKS#mL>Wi#hnBG#GMh6Fc^5QP4sBupR zXTfzhxr^=lZzavXxbhl|z62sz`7XfP7}etus-j0!7kz1u!%07>md-h*Bw~8>aY_}) zP%{6>F8NAQB%`=|Crsx;OM5#f>jE%b{~9sF3iOyVO#S=z%?D3!Vco;&((EN%@3k*J zbdJc7*C8qMXs+zCvpPtVSl986Q-TuQAcwif9S~!P0d%_ATw0&XT(UoAsMo2J#>Q7C zFD>6|Y=z_WmpG(8!qSQ`8nr7YLASNYO3{)&dGiRCAN43t# zB|T}ruETR#=_=?@_nF8h3fN07NAr;>Lv7R}KE1$;b&XUPq#}Lpfwc5i5U)^@3ho-K zSa7{6?L2zcnL|`m?RfqOdL0*k{9J-OU4gbHk_5X)-n&l7>?U~gwa+Dii^Rc^J$eD( zO8yG#p#cHA;L74fbO0U?OKK8P)f)Mj7nA8TFerk3(z{)&;!B>~T zrzI9)w-&CY!!`|YJg*{v#?%?^AtzP5x8QF8A|zxH=Gk5$rJ6YA=)Ywm;Qr`t^X}%;0000IHMa?!jJdV5xL^n)X%T2- z+3w~>s9N>Kr%|PrCO`HR@ z90k^2wE%fhBSf}=S!S+qPXQ$gv)F@P)tp_Niyo>oIVlWD67lZG@PUuVBN@Z`yFawl z)9Vp3AGmJP50hgi22}=3U2))19yAOQ_UEz8^W369B5bunyQKyTS((sIgpnAjD?}88 zkwt+k#K@xdME$;#)y^n6MqyjEVw`uV)++|slnS>b#>boZ22oh>>1Sue1>p|%W+fIGgE)cU&RTBRUIQP)O zV^57dcA}$`EkMgM$99TfRAn>tC$t?z#UA;(EDwKg$kW!JJrUOg%e z53~HvsFLx<_~S}d)esPkyDmh64NgFK-=5o#$`nvxO2MG-c!d~eIHKkC9XthD4q-J0IT2HO3iE1rlM|?LUdXXDQp(^0-SXCbw6mn;D;&!l+V6jJS_Vaf* zw>JGH*-Xnoj0vdKYcPNUy$9>qRJ*-uCnYyhW<#?OXC;71!^brk4a$J-( z^T`LCi_C2>JD}PTgNZ6)FuDR}L$x*{NOp**=R6@+zyJUM0005c`;Uc{@9_Ifry_D_ zhr<72dT0pZLCLt{KgBavDJ-h7p5ad~`I+1Y3Ud#>BWNH+g6da+EA^5uKss-=j;5^t zbyE7f%fIs?K9{>MAv%k}N>nRZ!|Uo-)9>-`?Y}1dI(3cxaa!9-Ej=a`1ERUN3Cc_2 z!i_gzw6FxXk$-SCF7C~w9-N78$QT@6b^k~>wjui?*H z>=83KCeY_~`-rz}OIe~)?+!$W;c=DQz&8SpB_CiVP$yyN6r?&kG!7Mx%6q%`*^I50 ziKY0xU$e**qP>{P$h8a}t%GC5!D z{%rHXjO;@s(VDY_m~n*VxuhU0>r<4YberpDK~Yu^wnj4Lzvdd!DKM*q`;^XeqTqsG zLLmnT5V4MO&)Fuk(ktM=hl5Zkh}5-3w^&exteUa2K1##vU20Kvk;*z*ZTl@D25gL( z*6~}`)wze37JM-_D1XUG^d`8>Zaf9TciR0EuTD6ZA1BB+BZVor|Ho^Es<|_#Pm0^U z{u}(Bv!fSJK&Nc`6=kbj!y~rJa?M(~KVikQq^zXB~dRrhoEAJnImeg zB8*m#&a*GOcI~KF@+=1zC#o$R@3Yy9b?Li3Lk7?qW^l8Uc)Zcvv9--qh88+7D#ln4{xN?uEKBqP`QyVu%}fv&Yt*<^D7=%)j`;ZiAza!fZ*E^M4)9S>f3X&cy6s5(a za-sz9gWyTN{clI+<7%x2R0tGBu%W)~>LHk_bkg=Z%V6Lkjbll>%(n5~%;E_(WuS<; zUYx(ocE^;MQWwu9G;O~(YvN%lhU!pt1z#nQQ0X95ZK?W&H1bQxAyeo54COR@SkNPDpjC4*=cy>p2 zEmTua(1CI6I2V9(xOCP#YR6?d1kZrp<_m{sVIw+CBj%VJD%;iqd?niaTzY9l_4&ya zWLDQ-I+sZ6Xx;2n2=v;_kABJIM>cIYD+!kryawTzlhg}9q_`t!9^E6v)F3J)R z+RbB4KQ3%G0h*`+yjjRjfdIlkPj>mk$q*AP*7hi7+?Jnvj}VxwdV^|ayF~jDv<|rj zE$bwDJNCetENvw@-F%vk&CeHFJ85>>d|PM39yd#o5~^xR>V5kVq_n|Md>EcRoa|ov zpW^l|&ICOpL134UDye5JuK{3;dDk5mo{P;E8%5z!1KzB;@GIbQ=(OxOkB=8Yw#Q`q zyjyfG8qQ00R^bvRHb%9c1~8% zb*xl%x!_3w2mcyre-3x$K;PTKPJhC-FS~%eTi7NOS-VX3Pa}*D?#5@4x zvo6a3AhJ^dGci*??SP#e4jf3xq3WJY-cQD+PO84x5mG;2smlSgOFilREG9Q>s<{%& zVBvm@HCLmTi*VmdG2@ruN^VzNNIS>KJ6GZ8bRo|5%|1(}P+9uosVzWQ8O5 z(tn+r{-KTZVyA4oj2A+^!Z~!qi57qhZv>r$f(?Jor$rANsqfm!sS8sx4zB!|JL?=b z6e6IJmCkOKYnY!#`2eIie7PjYQnsqOXkfj3U=_BAXlT?=={WdUlFHSvLd#Y6dfU<@t8S+%&3^Qn6H_ zV{p&n{-uP+0^koUCPYAxF7@rN)}l>&`Fd8(T9CTB9b6Xa7VZO`e&>seXd1~21lJ>B z^R!Ow;#`_z=KJaFJFM@#i^b#0eTGQP2=_zH_4f2{PAE{elWT-c zXQ=6ac&Y>EW!quymOi8jp}@lWuw-WjeL3zc2M7oe)(>MT{>L+dL=YjM&CnhOjwGC+ zH)El1iw=wCtbrZ^)CaC;;0&0R-aVG+CSf2tcr|oHUDN(_UoJ1qaw>5t#m^raDH?va z)W{mxeN&~0L#|d_@aXEyJ7N8?dg#0`HeOWz+Cm^2w6rPs*i+tXNoJ^u>GkS-L>WsY zyD9bqj@t4-H?^prb_aKHcF>ci>*dZ6Wf)P;BgxhXY~ZT z1a4mOkcik=Q{?&ANLcmjQrk{!ZEmxkuR-e}@%Yq*8q@%^dRRk^V7RIswu#I3n-Xn0 z*ejQGolO+5d+E!G(VC#qp%ZR2r5xKa5b`B8q!0-b|s;q#AwTMkb^r;Sm z+&M^YPBwGN#A-flEB{sSFCWvDEfz~v?R7?VVVo9I)cQ{nimC-jRf=G!Ha)i5XuJ_F2*fM^;+_K z=V~Y0xCKo{x4bCkfb|jh(jMFhyjaEAT9GLc-4H-&A?;+Cl{!E_5IK977V1ex&GpcG z|EU2?k?qU6Dj^UO^mCy0AD_JN$;5e|lK=X0IuqTF5i_$@tqmlu;S<%1Qm{heoO|fC=bY4j#pmjk!dfj|7YPzSV#)^M93SB zHH==g)=BiVyige!3pV%tb9tmYn-UVZ0VL0@`c!!^HQo zJrybx*>m7vPCv^qZYxTuv-Sz8aqX-h+A0q9xqpZg5S@SpAiYcR6ySbk@pY)SVlV2Q zziNo-$20uX`RF>F;9nnY=>L;RC;c}M?Ejnsg|ii7c4DY|f8DuAa{E>3fQSz-CBL1;pvxTLHqO&$v|7CK#=6Ri6rXUC?Td0AbiBHpET6nv;5!G?g=gEE#^B(s8YCyjul2eZd(Z%g@gm)mq}od) zBqW}6R!ds=*PSJD00qRCr>~Q0XIC9c`OpKCpK&!Zj#YSWhC&cHBgY}fMAl>b8XwLG zGbbs*e}n55Krxa>!;wKe)2of%zZ0pDE6{C8taNqMB?9XQn$DMmpm)zC9ffXKMjZj?0^#JQIeR2}s$KDtje_`n|Q zZ~*)QtBo+{abhlHR_>?N3sh%yhF~__MzgWsiU*{PcvTvvH%#FLo z%0|F+SuxBap7(T?#8ZaaE$LjWI43y~EOw1o%Z(Djt=Xh7(Dm(V3#W}h+QD%ljkos5 zBpUZ>WePf*%U0qF&hUL=kud5(J4R|Oi)C{a%CK8N)}j~ZjBsi?PxaGt0?^?k!mZX!SClbG_K%%I4jTr) zDvP_|*Q0i%I)thRuxcWbuK!pG1@X1{AsX>NM-qF_TvRRjDCgj9smX`NUpIE{KesdI zA>l;Uot25X>XRBr0x-ixo36f6wi?b5{-Q@fRE5LLoReUQd%f!};S~HsDMSga`@GDQ z8)gS)iP=+&Ahh)He3i~l0S!BGuILF?V^97IZ^?n>%u%$7=d-@apTp3^2{;?UQ&}8J z`0$qtxhX5SYNWOsfXA#jpsIuec7OW5zQQ8!h5Ci9m{1J_PF>8cLcb#vz}<@8uM#{x#! zJ$#ZsxKXZh`_|qsuG$Cd*{6f9ITLC@F|&;vD=x5!QC_MX%WC8~jRx~Z<3zIy#`G+E zdEsQA4N_xB;GX>83i!1(`$17#g)NZKZB+A%7Z}uX!Fu7_ejB>8>UX82Q3YyIdKHCV$uhfuhKjbs_72{ooPqbwg^~d;26TjXk<=lhy>kR<^5pt70 zh6@L<o38{nZ)raT1@1%^Nx1AZI)6{=mG(-}{*u zm7a|ex7PaYFb!i5Nxv_nRyXBlYgB|?q;IZ+zjd{Pe$+`^EP}7eH76-cFkgb`;>p#t z1!b#rtdIjC{cr<66bZ&VkPJbG#ppr~!Z@q3I4%}X0u%OL`^K{Q4*tt%JsL!`@e719pAk}8CZNg{UlR?1pw9i~k~9R&46ZOk&%Z;JYj3Gd$U&WvLliBO_j z$F;AunluglL1NE2c;O0NCRIB^1ZLOt=qvs5hv70<%`J6|?z^~03)We3o&Xo_`6!)@ z%Hg+;BRxAkFnN&W@J_O~snnSQa2J{h{uj0)y z#nLK*t8-1a6_3Adv`-37i3ICU8xv@X3zA zY&Hp1$@FvHPLxzF0}p>(eK+P3+#~xsxwAyt(Ke`D(-Zc{GCxa3mXhO3Y%tcOgy*qbJeMhk# zjX?R;@3D-%Z%aFXT-Z$rgJmbB`gCy&k&n3Z?nDZFM2`SNsS>3#c`1D|#GRJlvKSlz zwgde6xF5SG7Ak}g}0|HpAcB) zrz$rR;h|SK@EujFK00DDc!|_g3K5{ka=S{Cs*V_~L&^ci`B%-HlSipP&x5abC`=7X zFF5~bs&=dsWz(AQqLL5)Ua`4${4448c#e;jc?a5*_aX7r1hEMhl~XEK#1CS*+_i2C z*u(ERuH;6-g@mIWGQ`Xl)}#HhzaEzIRX7WBkWgR52^d|-DuuYBt&tbDQ{Smi9CveNjUzcVn&4L4 z?6HfP#k~M9^&YbXKQ1}-rK@l-a#M}RH7FK7*0PBqbx#+DyP#S^)gbA5S4po-3kR$Z z$GjKl{ntZEwvy)#L%-5bm^0+Is%+~4-9G>DqB}vWBDY?AaP3@mwI0Vu&?Gxjr1P+| zH4KO6{>%rm33B076raT;95UQk$KQ_I)Fg{9u70arltmHZ*<)&1_Io)>5+nhWU(Z={ zxBV)hI?FB~OHLOJLvl+!q~se0!SuF7kRLnDDcYC_^6G8^bl*7Te#$Y;oP_`0X=}-2 zHVbY_<6-2#x!i(YnJg;7Y=nn!V*=rSBl*5t%}!yZz2n)%w4k~T)XGXXY;(6rR@|Z^ zJ@=orN@$|Q7abM3I8RbIVsr_zHdVarqLlv3p!!gb%v(Q*hMnOYj)`@yUuHf0=hgwf zT$;ni!1lz-%(r_h^|)Y5!<}I*IQy|79NM@+HZh*C*evyMkDBbzjuQbtH(vD&m%3^6 z(;uCoa2>i?UD=OB4Z&yTgz^4rw?-hqoqg-aS$C!#U0E}^nl4uN$(Jt%a4rY%% zjhg121Y`g22DO>jeYR|5OW0yeLAF808;U zIZxH9jznUb?f?Jf-+02QBcbSiCa4r5i~2xrCIW=QZ8tnY;ewIc+IE742ID1$kJ|fi znN^w!-Jhk;5#J!6tBxXyEcV9B?J}&QLZgC%9FJ`5J6+;E>cF2Sk)m+F2XQ#KsaBOd z6Kuz3>HB*S8e^6jO2WBRatwaHQ88Opv$=jW>0XkUN-ApYeTcgGO$a^{iNoqS1*RxRBn0KlG7F!f%d%lAQJn1uP(DZAe~CY0-H^SCFm+UlDc z@2)9X4f=+d^acAZOFz=(8*`^`e>@+q=69n1h-z4=#Y`)9>rCJ&>#>&7icM^|oz>}3Y}=?`o)Qx+ zQ}Qe!OxKT<(ThIsIXm;i{@5UL)#^v4fo_ZuiH6pNdcW(sA)4MSnssDKt~nGZns)@5 ziT`dvX#D2VxG}pG>IEDxU9E0xEKR)fYEOD&Aw(~_B(}RP&G+;M=JeD~WRzAShZcFx zCo>t{KJ~x(M2q@QjK$klabof88kq;sb5gUK32NG3BvV)sEjVci*E)p_$WR&*Y;N4e z{v}=jvWdaOiNjIm$!dgQ0$51is;&6`ldRqpag08VnN9>@sm z1s-~(>(5%gBab0jGnUpw)w|P3e@9xi;I!^n#GK;q3T>H$LKky}C#N=-f;N#5tPG;) z_j--z&fiG}T!>(LBl~>chVqqIQ7PFMqx?KX_boto41oXqIbQJTidN{g4I3bRpKThV zQA};XX~?BnKZKnRa;Rm&IX)kN9Qkq`u0y8vBTe~c)=n}plHZw; z2`*qVUX69CnH&j24ueTwShrBO2k9NAjtfyLxV_AgnBDAZkN3a78XN=$DtLAZnU;n4 z>fq)QpqY_FNX{{fb%EU>+Y~m1vX;1Z8Tvy}8F41WFOAy8^9Vr^ElWmrVUJ4W@9(Dl zT@FIh{-X!X0Q{=xM-G7ZW!IfdHtLtmKPQq#x-D|iB{4+MTZ&x65pmrMO0&11<|%EH z;79AoDi7EJ#%n3QMCfEN8}mI-v9deiEypFx#kc(LPIqS0mZHDwh2b-D_IWNi%#vy$XMJU_*}wSYMNy z?8XxH@RSquX5DTIp@>CaqGTj?Lya#0@QY?LC+|=RI$Al>@*#w96)fKK9-k0j?%<Ka?iz%ZB2m-hf<-KUwcJqy z8Fpd<;Wd?rX+}0LNJ2%|imWCGJ~`YI+*Bfo)b}rlV2l49KbEo+WV`*hD09MO^wh1U z)~*mGCJO-ED;M-~f2ed?rgM{dfsT_qF5H!ggEfSQZ>w+dW#gJmmq5S62K5vb!5Db_ z2;+8b8AX-8<#mED1K0Hx^T`kBQiAk`y@+d?xbV zXEBhVe*zZP65pU6DeMIl~R-3XZOAhoJgo5sPF{h4vprs!pgM#=}+C@OP zP?i>PQJ(a(dLtS~`H3xyp?Iz>r#$XJ2xW|XY$Agz`SDa&KseMz(H@pTFP0!_&`;x? zt3*Cd3_JyvIC$FiSbY45==H&_LR|2I2`p03x6#KKS*;FcKtwmSO^O$Jh@L4@32`EwuAh2l$W%I1#U%eI!ggZ^ zm^V9Wzh5pwAJO050y1vF0lf%zmF|YHFO}ar1>sM zK*lxFpwB_|@EX=9$dAUJ#&`wJEtDmE*@{RV3LN#Nc+CZgyW^HZDfbLKnqe7DQatr* z#m;v0{1P+%0^T?`k*U)FZXS$mOr`y&!7`(8Aw!@d_>?K_tq|(Xt^@1V4-|WxEXsoBGXuk(D&F@m zz=&BGubmGrn`m6`UPjay1{QP#6aUbjsu0?9C{1UOb6K@b`cSAqk4eu{y{f0z-K-oAPy;v0k0d$ zNfzD(Q^o>Z{g9SdD*x!^>HXb*-^vr-aSI_v2|$Qx;+K5 z&_J8(Z_xyKt`xhxe3AZoWNkNuE*R#@Gzy5f{zwIJs03BCh9ais_JCl92DV00 zWhKK#+2Qieyk3#K3GfsR2LSM8WJ`--0PKWX;BDN^WETz4My$F+hzr?Th){MH;sKT9j7psnxPq2pbT zuJejmMDGL0u;0o9d#;y{@xaWcB4~Whmx;gNDW5*3RU0hO^3id9{b*VA{PoZ+XK=c| z&PF9;2zF-Yw?_ok4-|LGgbHdJ_nRM^mfL5D`r)tP`Ie>6$W~Ta#(G>uz4a3Dla=5L zq4Xi(A|KdQ2Vw)j98qY)CS;oKNayM*`TAAJQDdEUk%#Xfq)#-Q;5F96aC! z*sPan*Q0ekgg5jb#BN6H`owPVZ5>o=-El!M*Sc^F5d2Mw{j+c3$-a!g@7A}Mb+RA= zusml0(py9_z!S_RJRJnBlVz!SpIB7i1eH1WZS-0CN+NwuY(wK}-jwq zX!B74+0@ePHW$1_6yPjS;G6vRT0nv=O=T%()H{$(3;)A-R`VfHzKK_q3a@C zL7{Xc&ugGCAob)9dV3&X9(H{$34T`_( zuR^8tUSkd@f4}Ir2I{h@N}4*WpKKVsG#OPGBT`drMjBf|-d4>%+zVUOidU=3TPz~X z(FQ5gtyFDf=8%QUB-_kFCl8TL&D%%7P*BtmS=?$h15O&OAcIcQBKhdvRQx%h6#tzS z6r56b6@qj%Kaq^i-(_nzbeAynFwyzi96@Hc57*9a)WQFaCO=74=G()28s+tOrWG32U?z`1CMY z?^sVFf+=W|B0Cwi)2qVVvjd5M4XVFtj_?gwKLh|T{hSbFIOU?>iDY5L0$Z!QY`-f& zxb$5R(FiZ=xd*bLNq*7wOu`#3Ow=a7iTL=ebhfD3oI4y)$r%mh-Qq8{SbZol29+3z zrWJ9jhsTUCZ`@>B&y7PmH%rL6XLx@w{H#XkPA^z3vR|eKqex-V+BN6b@R~^`*1T^u zn5BJgYme(4?l!&SNlFr7v~T0+1<^#0%iZKNasRtA4m0X3OK4qx1SEU$n257;8;rli7id7<47nQwbH3at^GmfXl7%HD-P%p8v}`ob-x=7V6_ zH+w#yPNp9HFv+>??lAk}Hi86LE~R)9zgZ&m1E%{}>T1vTMPdFngYYuHPz`i6sC`!E zpE3q%?os%$e|&t8v(=&vieL2{KVxtp|4|3f8V|~5M-hH6gVFc=^VbHG|MX!!=k zhP12coG~}pik{Bk#HEiqq}knAi%4_UWzVs|BC8w$s-O_!X?fC#u}dn;R9m@l)TN`u zn1;YEJa&?+jC;108xAQKe`yqSWF`VAND8fZDn#WTxwG&^2mdj}&`p-4P;eWH2H`29 zlH6oeR9!f~QZ~)D<#jKTf+x66VEMBr<;Ifcp##KK`E2H~O5_5cH>XilrXs8@fInQN zI=XB@cX%FHG)s(~c)bJUr6Y96#wcI;HS@aTm%vQbWt*(dI#6sRtiVRBEvSQi>)zNq zNtCAIwOt2146E3_X|7W5+~<_6*r#MP4IR}JpKUVJY;YZZs&lnsDyUo;)X)xcHH$f~ zKXDG6Gg*T*SM@d36-8+J@Zm?Z@~SLE9m0&5aByGhfZ!``7Q{OmE_-Hs+~nenFK@FHv&l`?2-Wzm!~It;3V&OY zB>Td26Ot^Z@9*6si7Vhja;cKA1r%B$i#;K0pRyfdC7; z`5DeMk`JNPq~!p8?{pa0Z|h6LW*Ht)S#N^9EVa;GMv=yeoabjh))EQ)eF5RoWA`(T z*k_BN4Q%7&-W<(<4eb?voR5H5@Fq*gSgOpltkZ%weSOuPD(gC9TdVsicddf%d5ZR@ zqxw^C3lN`zFk--jqqwd9_s5u z3^NGd2pP6)NpkSZqu>pMcoSvbpa7YcCH+GNP_scQa~=pS@89j<@NX$)FU(%P)CaZKs% zv`Rk*sg|X0PNE%2mb94o;^W1TEsA`YPgjgvy%@Siilo@gX6>DwwN8t2uT=M!ALuHq zByIpdb0Q&4&krj-p$61t0PuGcq7WcbyIiX}BSS|Ti{E$eM(CW06~`^t>R4dxs`82b zu+NXT&aHKj!VbATvr(KDB6i5P_FgMNfgv^X>1I4k^Qum?1hz`vhF-N0gRz)Ig^Pgn z)O_{UehF+5^I@I;Z;QFI*%O+bhqAS~Vbs3e+@DdvbskPRtGqH`P_m9t^Z`w%p>T<4 zhO7vEaPfEhY8|WG3zT^~fj9&p+j+4;>5z(5+cuE0&TTdiTAsNoceL=*8kNaN>yY7( zcAmNT;nS@eT^6_+UvA$iQ0@2^+f(Q`x~U~4Eygpp5{ZvGS?Ax>1RMA62i{E&Ix>)i zYzwOHOgnRx7F#)UkYGpI-Y|>)2D%QA&eKrUI;K#p;+*7rkv{s1}1fjgkYI#Q(G-z9o(c_xvLc z_VHJ!;0@W0N+r}*IPB-YV)B2rUOv8d2T{nRCN~O2ua6?cPr;6~2Y+i<_9!svQ3ZIt zJZgegJTd#XeYIIe<1DVt?inI^y{bN%%wX1JU9-%zPWnYtK@%-p7T$m z=#;(;@LiE5_OQcVNy;G-)VcG;U$P}*j;?L?*oPRk(ynjI$gQp_N1@le4j74H%J7gJ z{FWdQXj+*1vR`_nyAunBU#C(Gy5$a^#W%BN(;B=D8r2e-3lPF35~!VS|AqaqPD&%bXG zk|EJA%$@>K?CUiB2b*afNpJL(yo?dGuhF8qx~mG%l_t4TZp1b$hEo&9k-NA9JVR*YqyFM_iHKPRd5% zbS#T&hj&CqOQlWF9(p2+Pye$?q5Xbw)XoEHHPYHmF$@7Hq362GXifSn#8G_>;wXn0 z{Tt8Y8`gzcnxKL=98(XS{@#uNMk3NWBCF(p<1rhHfpZN;b=2=-6f9-^09-98N6quM z%}ZU4p||~UNIbSlSBd((rowSu!WA!C56;MIno&4Gz(=T3=;6I&8YEtlHKH>J!}@R; zrnKC~QqHFjEkZPx>1ka5Dy8&jcIm%b&PVFDMjS1-oL--PsQ?^(!dwZ}+y&+aXD?1p zL!gX_mag@&9qF&J8>(VO&}Rk{6!iPnszR8dn`G95_XYNFG+%`aHX2D0pm(k6)=!?a z@~cQ9i91uV){xr!<7g#@pN*KNm!UBbpEJ3!4ZGzy*kC^?bfn6iWAd*KYxO^7bDTRm zouYqb^Wzgb0!?|C-c18n9?`a!)fD?Pz4e9Q*jbT)U<0}9?*be9>oTU&zq!F|24d9i z3Iq5o?SAq-Icb<`I((3Ph`D)GsVvA)GpHky>J^*HjPwIFP^9=vXY$3YCvSh(2gO7g zN)*0YQ&NbxrGDS`6(8IBy%6#ttMErc#d`VizLitLm2kv2KF?m&1sv72&6D@R++<>H zwq3VK-mKOkHYKjAi``-$a^6o8sX(vQ+yy4NP7=Rjko|~f=^Yy8*5vImzH10~LmDWu zLwT+Wk%*`V7MON}_;4rPH-x(DbJ8G{IGoj^un{X!O~qaWItVdHTSub_xmJAvEDSsa z(T|Uf4c!O$T!2pKWV{x<(253;Xj&!%SSBnszs@<=_DJqIrN0R!imqclCwoYa(-P5Gy2aJP=LTqE;7kr(Z=2nXGl<}368T96VInf-$n z8bRMfm-#zOj7=me%P%R*80K7!kXUG|>@f!KDwa)=Jx z6h`c_RA$`0gN?$4x7%}Ti}4(A<$TvTuh~%#fmIilsm3eLEdLVVT*`?W02$;pO zk+-ojN;Gv$K9xj^Rw;x#Ll9q`t?7^l3Fu{y3`V zO6a%De6ck3DeoFFA{u9?>ZQ7|m%?-(LvGEZ(Ij8&{J)0!$ISe3_03J^f#6slK?>#&5pUVnTI zA`1+>5!p^YYYukHIykQ0v9PSe(q( zI1B~gd8B|=+p*i1I;mC^2nr=P78E-a;veMx+X*7p76si=%b}DM9)I0E_Gw<*JSs}F zMsp=>&AT#v(U9(3c96%+4NWu_6AwX7v0}8t=^-~&x5LNCw{_St;PiF#qTti%5olXS zBEdi$t4D09?;^&{MQ(hje}?eo*%@AjJyr$i7g{0oifN`o1%VwSN>RxFsoMKWHOFcO zu=N1Brx`nZQX&yz-OCf;{!_9QaWD+vv!>)#jT_*5uM?ykFNu z5ZkHzBH&r-Mq#{_{%PrlClTP~Gqim~=^oD%6xSOe(SWNqDuKB$?>OPE9_Iv2!kify zc+|aPvnau`Ejn%6wr$(CZQHhO+qP}nSkqY3=38g)6Zb{je{lOlM^|-3Ra8Y*qBDDp z(VsxnlqeGdtUq4snM(4u5KpKD4Oh$XDiQnNT-JO~z84LruYqMc9|ubCuD>Qi-732$ zTtlQ5HcgDhJv>695m`AXOJnqFcel2RSidh0Ve>zQ89!<_=l$Xwy!UlT(!`PFRt@gt zbxWZ$?@4DxSo}5gryclmt_H}k0D)a3190NT!=u$yI z9Rd)pz4QL$*Uxx9)KT!;79W)hH+1j%)NRg96$nc;3f5XIpyQzgzoZc(N|;|Y>O&RXYh(&D(&meI|)E;K?u8!u0l4y~q_UP#g?ZBH2gxLI zG91eu%^R!~p$mJS?Mxi;DQ8<&hyIJxE;$_pY zy-~P+_5F_Oo1USK`O}LGq8qP(v(&(WDsh!=GnrhbQV~}*6V~#i<6`EZS_RwEV zd%$2@fJCGaq>!(6g6ta*$eQ=KgaFtxA>?2!_=H|Whk<*&==Pz)Q|N8i(D!<6H2EIx z*}l$?rp7p0VtoSMUKytz%b(u-iqdVyBgQUOZX1C_)!JRM@oV|sGQj$icz!h?Nf@2V zD-ouHwVK#GFwRm|dmq9A-|(rIbu=v~39p*pmXf+09L!2UA{r5?Q68?N(G%^h7U`Uk ztYU14ONhHB16-P)?3L!w;DuA>6no+jTzf7>-xRcqs|8!Yw>WBz%#xgwC8~@aN6W4R z#0Ljw%ggO0;@b+5LbVynlW9_phbT+Bm8-{l_m5FW9(WbX?IP!QlKrN)0!vaAAfZ;s zdqrtWxgW?mBz0Z02dfykw->AK260R~JcA=4W!C5P%Prs- z?zB8<+yclw&*0P-M;0cVOUEwPev1Rn$m@6B<{vX~#7*hETN6iFSdtZxmWDaqPlSSv zo=gs&mT~{^kWC;g;4w*WD6LL^!R@~6l|26| z-@!J{WYi{~SDkU?^W-&I64(2S?^w35zc?EA4!otY6O|wJwt}&Z^t> z$;=CR(1jj}+)L)nRw|s;2SLQe_ewun%NLe=62Uo%*UmVx;ZSIN0j#t!>5>uP&b%u{&1uuby>tMsW<|9 zE{HHFd&|*Hp37cmoV-zpzPK(pshhE_h?dFhijV})Yomx8y#!Tz<~+(e z^;bMVIC9d&W{nNct@vI^SG`ehX+%2VJ5zf8M=?ZkHcNH_G+8t4N;c0;b(`+H%i zNN`F8posQ4XK!fAB=4eu)by*)RpDNG8O4ypOL!TAvd!{9>9!Bo&aCE>&HLUNYOjL8 zB)ykIg0bXhHuM9tM>ncI5OuKguQ?i9)Q;~7{R>AM5e!zQV)$T~b=epDTqrqVI+#!4)dTf=8SxK~fGKqwH<0?Z6?IfGfPLgwGgW@#alf{v7uHcAKk(me((Lq=Cexk}PvvjPni;qVmQ{JDfu3Yl{WuZu63Z>Wr; zw-_g|liXnwtk8~jfMdf!3Avu9Yc9FP0l&!_<{9QIeZNsRyZF9U*?eRrb=sdthQ_b-{)o#h1o4ySVa%oFADdzO3sn(dtV_uxi@$aL`uV;SgG$f)+8E7d10PP1{Uw z%Xd=5XSkWMI02P9hjm`J(R!cZA8{3>2_**4oLn?@B_1JY@&`&v^gW1$x#WP%USCw^amP zAb6g3f^xzQV5dgrelfaKC(K>KkC@tm8LSGacNXsA`9xxp*;TdYvj5p&;2sX3v^r{k>1nWbr^ zYfg@JW&0Ief`-)hH&57#L4{N1q=vAD25mugpIJrU;IuX(Wmi-YxxKtXM<65oNSyUy zr0Ua5p+A?JBje+#*ymhJfPBH&9azRX$=Uj58z3>+(P{(bnt(@oHisbHEPmA8Q!FT$ zHibc4Dcfy;C?DBiW3<*|=zg##a)D!cq=|Cc+}kH1kU2Tk$0j_t=jeTDnTU}5w*>Y- zCe!hdRi>XDf|cChQ>i;7modw-Tvsd;FD}>Ay!T1En7{L0(?VoG7Gqrr9^{NjO1W(q zF#B#gv$grg5&dJjhnn9t`R5bTcHgtBJGwfsX;PPB)Rpa+Sgw+{DP7> z#=7cStT1spPo59z#ghTxj9K=rpRylMK!WI;DoW^ImJD&((hE7oby4aKO}WWyGXwASc9GEkO8?<gVJnGDC7yfGK{F4yt$tCK54Dh@y;XH;@iIpP_CF8f4TAGu^CBKQWVXAE2v7D?*9ZogBuDUXLEAi zrvFyoCUfx)h9>Ji*C%d&UEu~kFRy|_O0FonEE?$fGIQIY#~8PzwZ}2=`Ys-SKPqAx zzD$D>ghsYIM5GB*zw%f>8sRr#W;d^)v-Kwj53M?UvSnV|UP>#C@G0GHgWs@xU{>)~ zP$y&l`uFj0^C~#o1xD2NV=H;r`%mW(T27FbAS{0$G|#1(d+$0k8wHGhjEeH)63pg& znf~{@LvPa=kY8heHMcVRiMldsxvJn<}@EXP$Q9IhgBIN%XCNsFpf(Z`NW z>5QvPW66nw3qwubLcUxsg-H^#8dK4++N=3H{J2q_-atVEwA%5;C956R;4I^-fAx*Z zjR**E2qi_;(+S~ZU6+2ozg{;BfTMPz3{YQb0)Y^=z*?M``zJ{2v}yq3BO{A3})Kd|t>7qQ1C)#$aWk zRT6kO3WYEhh4U3g^0ljU(BYEuHF}4D%HXp5>*fp{89*_(JwP3hPIjQdfcoJ?j0qEk zfhXz|wAh?@aeVX(eIP0RyE*2K?OWycQe6Y!t^zDs4qnN}p5}jWa7-iiX>qsOq;<7v z`rArN8>sBI)-8#iyV_?)9Yu+l@+64xbx0r}YvVc{FiY+xM(C+?iAn8h{2k$m8@rZy zBr$P7RB1w|L>VdT)A}L-_>(iaZ1hu5piW9&6;exL)2Tw__iF^DWhIs?LEe^Ww;*b^ z9>xfrJ(6>2O-uVe`0<36n*Hbql-eL%KFaJbfJGDo@UD?vXt}|88ik3@{P6B+I9TIK_cd}$P z9wTn6WrsJRWO)@BJX%zZ(%LUtH%gXTgp|(zyj_^r532;YUzWb!=LUHZ#Y7IK!0;VB zH6K%w%AR$!?{(e&6vkz4A1d-PL7^<{pV8+K;8kTyRC(nBS!Sxr@%VAqpQ8$U!whtHhvVqIm7m9A|JgAf?lrkYxj z`Fnv`=+h+vd_x}a*MWgML1nmf09Zx^5)$c#hCbF=e4oauD1Tm;k$9!%w>p>kwn)iO z7CWvZcx&jR*}hhys-4;@vBZTb%QYn`8i!keIVS*9V6D)GD&&@Ya=LuD5S ziUqe2A3@pP_-2pVeK}4Yv+#5S@w>u)uKB&lZ*$^I1`DnSxitF+I0x{ZnBG0$Hhicu z|ESkf7mL}T1L=y{yE}7w=&Qe}k}jYl|6J3u@bJMI@L6d(nt}i0lltQoiZ`Yyz z_4M(QZ=vd_21f^RzFuAPQQJP%=awggE}$>;+nrZig9yeoQU*HepCFlfqdXgNUgpa> z-{C`rtqe&g1T( z%@nUhh@JGa@_5o_LZBukR=$-Gc!JGNPZIuhPlcUE1pj4>;BGKt-YDFI2LTgBN_mNvU_CY{|wbzjt;xjGC@Vbv-GaMCrvgE0ANMye53)W z{horvTdV*-6vIiE;PFzPP3pD|Z4x~^Gh9^i;X_l#nD`Kc1@#8}1mYbX8|ZDK9Ic9c z{e{kCv4cdfEXNFwufAbRQxhT6pbSGCi+7t%a5ze9n;4$6&Wt4}5ktW?H`599WO zebsxGp~9cgY#K07NYCoO)M&}~z}akT%J^ezrF%Fio9OBt6WcSlAq})W^yD`-GfGcH ztk_i+0wdNvx_Z}Qiw9@MM1>sxIvNiVlkioSEj?fLi{Dlf;l3peq#G8?eto{HnNzYN zFKpz)s8w=e`C-AOKqDC+XlDubUv-L(By`8VFf`xOx8HD2dCnG!LmpV@eH_h)Made^ z#3w?i&qT2A&6JIJi|^c-^3_fK`TqI(a;e`9hh4!=Gjk>Z1quR%_%*F53g3;8kXx5h zF7_vvTrn(lX%{xBnQvRS>((e<9NlgwppHzLU}F6#cRBE_{pmDeeNbjP8MjcO`mYk( zR5mimSR>6VC%gJhspp#$0$XI++35wS9NniIvbA+-JWQNEPP>)JoXV9v=7yf0-S@bWhxE-d74F zB_m@{Z-q3_;)HH_!GccJji|J+Y*)Uu*hf=1fZ@w`&H{XVnn#qKbqPO7Z(|Fa*$d=Gr93`mJz*G z4GUgE?r8WVj~e0|xUgvxrR*_3>Ks|6%zUfy)o5q>PXDcJq5v?MQvxADZ+holXdOK~x;gMD494>Ipy0)CJnf}LR^_RsNeGR5xUK9h zsZyU-zUdBWOV1pA$_By#>>i@hr^b}%9WpbKDu7pMTQh$WS;z~H0b^OS`Wno zTB(z~02RqOjIICmQ2xmd0y;}n>3?MiHkS2qqd2J7&C7gDgmH7pjjy$)>FnZ~^CBOM zx@J=uSSG*AjKXc(s8GJw*-^5;8l*$zmNyVF*GjHH1KFkLwSBUn+3bK|m%g^Yv}z2%`W6&bYzj@bdBzKS5+>)LqZtWWke zwD3d&dSn6qkzY~9@zdhBFRt8ckUx{RbT=;OC4u?S#NG<{s*PWI4S|oC9G{n=6On&G z%`cC5=eqRgE3#E-(OH%2=YC`9LR%x^rZ@I3e(r?SHs3@SC zUN;$MLQEC4tFw5pH3wz_Kfk*!_?SQui;sG&1|*t<0Q=G= zp=-5HY%Z^N2(Si&QvTC{k8aQXwAz5k)(u`|bG{_5eKB3;g>`0nryEQY3+w$aIiih0 zvE949;Inb~+Cwh3>TcfhQ=m#GRXB1)Z-BcQWUO&xebc1r(I{pRA_ICI7s7b|=8_ov zG41jj4vj-oE6!jq%qI%mR3c1i_Bu;K+msD^#m1={e3)blj?g^uhu@bW_lVC-yGz&x zwgI{5mzJ!qQj53YCG_TCpS}kZUH^ zbo(WTUJ)I5D^)1ezCDl_hJ1!J<6p6 zSHEBYebON9VgDuXy(rY^-o6%P zM|0)1Tpx7NzBS7lRJXU#A>vBnDz1R~b`hSilawsYH4RC@EuiHuZ2RSUkwm&zBpKjs zkLb_66~vhnDJzu(qJnO}c2abIp%B8JJ;ZG*Y*0y9hPjPk;=qv%3SB(}n z^~;XUjxTD4Km=OME>wbYYLF-3!+k8%blE07!bP48d%IM~#-a&_o=+^vR7im`^oTq2>0N0%7DNGh3+24S zCl$!(gbR)@!o;a3#JO8QPkO`=o@OG$K|2}m^nz)(SbKII9|-W!1Ff14=?*~tp@n|G z5JiP2jMoZCqThqtN9qS)(d&C4DF0Dipb|mIZR|Y^%NJUajUOV5lT;W7SnSW<*IY;0 zhA0V^jCW{e=va~^p%r3c+?t87fWu@iZ)+M#4N{bFks9Fp=kjEGo&$shQ@!js008J5 z9!dfK85gqbBkJq#=A}Uk(2-bLRP{E(%&F;hZ;S^ZuW8m7@dz-bFd1r3MbyGG?7M2a z?@qS^ybHg$4`?{}>v-|Wrw<)H$Phs4+Mq60l|R^r1QxCs1{!R1HN4ovA zM6c6u-Sh|VNfVetEl3~vp)Pts!${1G-eWiKu}W1uPz#t9HsA+Rqko}d^7iwxIr;L6gfCpty?RzIMJrH%r^7an)?Vl3r{t9#Fe_l<|d6j zK-FWV^uL84**s1b+^#2t{P@1E2s5jT5fnGH6C(4=-8RboKx#l22gq^?CZ=L z_imZDD94kv$h~~+e)`l6OxS{bPxfV?UCTbvWE?YFs2h{-#F*-uMhSQ zZJfO|68o~~s8txsbZ&tyaqwiTuFqwyF$r751W31XI+J~o(uju<; zr8#Rhe|&>Ty!s9v#2cJf3}~Q(WcKNC5#uH$B?q*BLSYTtqMXD(n_PGDm2~lY3TwBDy7R#JOwH{_XqODB5MrrRhTa+KdPG z`P86K-KrWlWm%llz2_x)wF%Ci4y!;}#&fEgRF|Fn(c<%!fmv7xXLZaO^3yVW$Cf_zk;%VZGJGK`*V z+f`>uJxn)veXj{a&|7IA%GZ&o)=$1Ioo)h!u&V$?FgnD{XFl7OTBD5Xi3qg(bMzoT&k{14C-R z_p^b3E4&2tc@l7K#Bvw1tVwGMJwXe2KRr(gXFyZ&@d}S zud}ir_cqvTWJjrFPbE|}iL}myE2#op1fo@MkO%K1Z;FOcRlFwUktkcfQl+7ebZ3oe zo1!w4uB<7sAnvqd^M>tm4y-yPshL2Jz{6YB6(BGbh|u5&9^-H`iw%{;7&36=N%ug# zpf;F{-my4toQ`bOx`T@-<*oN5F`f#P9t`y>m;A-#ar%c}FXXx%mWEx}LfNphY?1{q ze83x`l1O^$qd81Vr`mY!&dA=E!HnUuI9!`{@T-j#Z}x5zW}fz($qVo+T|^63P0(tHCW2xBO|aVz3Z<|`r@7#(YeH5T{5`E3L>B^3BB_gp#1o! zOytqVC2R$pk6Z>+xrWJ_82`1W^B-(i+92ricGtf7Hj3w@VH`j9UmitNDnSj`2EYtF z-#l{PLp*pQKvMF{NnY~-=rMlO%xG#$Nb`%?o!xyyy6a_A)^0-PB}L>Ux>!p%W_hHP%Y1|6{oNj9uQVd$7CQr5Pv0>+J%vZ`U^6v)xK}f7zX~ zzci=ef)I1&>56Ge%k0n>PL+4<-?#{Pd{$a_(Lg@X1+**}ML0DCv7?uQ*f&2kd$x_Td zU;Wq``P+_`h>v=NHAIr|5;R(nH%>fS#qTxh;fd z+#T9mYUYEU+}gAOPc(5!miSqQFV;lj#o(d*-bc62N*m$*(K}M;{O!l)NvgVyKLUp@ zc;}A|&HJFUvG-#qzn?#laJ!n%5Dz;GLK!qq%B5LPFG%Z{d4Uu2Xdk>QX3+__x_Cbv zqd6f*xa=J#HLk8VH*!Wl$T~Z*=$8ES>goVGy4aQ*`&V0%8|itYtwf#M+^d7A1v)7` z6`@veCt>AdSX@}RwAV{cIIm@k@E+Un_<#^Ed5RSZw?6qJSLLjc64>Y7djT-0k+{Wc z>bdN-$5qsxurMb7kI)Ybhm@;AJ2qdE4o{Iid)?RSAJ_w4!GuRl|5CWt%O2TuJ}^*1 zNBz>015*7MsIUJLY6ty#XDZyXtpyGfQubhM(=C59?sHDvko@&jwR*^RiX;=NYQ4vF zSw^vovCpRS3`zX8e&j?{Dp*fSo+y}|z zN=nQePhe|(l28qeYli(HcIo8a?Y$icr~4W={tl>ZtfD3yT9Ko%8MA#+R5qpx1qDZ* z*t?dOtK4T+F`%+qBpn$|4(%LS_|qyIwDp#q>Vts)C`@cA61HsC0_7u5*Hj9>(vw8` zO+$`BjH6j5&TJlbR0f+=^RzuV2f^+o2A+t2js#r7ML>d%;69v`%nU_td<9Sa=^2o2 zLy4bJ4Y*vn5J5QpTp0e^?#_hQ&_>az`<28aw*$&|;H=?uDj29JtYcE`mf0pz{ zwZesW4XQlyzJ52&Y{6>OD+#TV==yL z((T;C6g|MPHYcs&x?oskU&t+{Z{AAQkTRrKY%Ze<2oI2u%mN__!+a}IH+KGBxV-&T zq%z!MF~`$=kTmSCh2G}MymCozmGCiITuEbyPZVHin6+m})V_mTOdsSkdPM=YMLQw7 z>nfK;hl`}F=@l=Tn6t?2S<#Z`Vd&o;rv&vCN!aKm`j7q2(i?!BiyCr#C&xBxu2BPj z0#DV`+#R+Nt8a1btt) z!1i0qkGgv>sN8GkWgOGs!@F8PXW4yS`HNu-CO&A-_TD!gZ32CuOy%$X79F3IaOJOn zp$syR0oK!4?}+5AEC)e{>b(2KZHw2M6G!G13xA^|t65}Ua?lyxmHAS`OmtE8(E+on zR?L*hJ}&A{=i;MKa%fVLmz#CAUxt=kqUDZcVoVLPzMQTgXwa)VgR^Uogs7b`*X&={ zNkHvP^mnK%H!AtDV`5RbB$-Cq%tO`D;AfYCQ`vzCL#jT z{x`KF32}BAKX+V6#-^#>FQ}1;zs&(4ErlchJ=s6LQ)5zWTwl4vU2&Spy02@}GMW0b zDk=sko%14EJX@Sy%V9Wa#A;POW=f10%dPt1(}x%>m*1k<;};~_?balMX5mK+-$J(W z>8;7bwXC}(8jI(ZI$}{;Qrv7opVa|WHEKx^Uj!u`FfOA!5JlE73st{F9cXYvjyhYF zbS_XMZ;CNU1bx=31iRV=@`F}S8@TZhdF&|+dZkS~F+$5Iewhg5G5koTJB5oNJt3jL zw#Ko0gsRa5u}69?(U%*_+{H238}7LAALlA|!(G6KY>vU>^xnz7O&4up$6Id#tf9ru zw9tNofn3vFP-%?R2@fg6?MQ6{mKM!tN?Yxyjp9I|7(*&yFS=Fjv*lQQpo2sxQ4bDK zIF#-kthO-%zU4S`Pk)LZNEsCt5e?GnP4~#>ZF$U_6El%_p4xN)wp_VMzzcIvsDEcvrVK`^}`R0KdsYfezZje4yZnje6Xu#U>Ys-vxr6~a_ z^D0WsR%-1>N4jFiTwPs94!feVpTPsq_(;5?gvL0kX$2}y%qs=Qiw_@uu_?TNc7#SI zS7HAA;<>3zQFCl{8?%;vN^9fDi4h0$%BdM|nMh6pkbtr5zf{VknxLmm z1z9&IiH9oHu=r$n-3ML$79XBnVsy;I?1u#)R{8#H$*A7u$;#%r61rfDL?R!~eXh4M zOJ+yf@6KLQzlD%l!QqEe#$Sh8tZ#4{h2@^;KDkhVwE$S}5=dfe57E*n zqagBEf*;6r@)9i6{H>U*k6OofhR435er`9f3|fGW#nPgxw-IK}OmBK)JOFu3vxW33 zU*61V42DVSQl$#iXD(8S!M&atCf3ziYNg|3llBc(?AVr*u#qGy#y!GKUW>U-ka_rZ(ytyy9XYBe6*c{DE zFV{B@8b7NZY86gk;iJ_hbnbf3jiKFQKj7EXWeXwac>jc`TsoAeRF4}D3`|AO z{B%ywq5r^&(ny@h=4VJD_+&)_N4@qGt3&qnRXXMo%^R|A9t_qS!eXn$I^Nl0VJue9$nBm%0IJUz%0f+ zYZsuSm$Nu4pjT@k&>aV0(7K^At64}(OD`ZK$fVu64^`J76Mk@PjX-n`mGm<;QeW6T z=RAJl58y(I9$sx#?tf?BEnei{$n*j4-9}l%Yn2#|U{?P6p%@E;4Ht{=jBj4* zAZb1*vRUVY&nfu3InqzXjuLV5%xOH~4MQ*Q03>xKLr{-)qR4}~>&;QdSMZUJGpMf- zWA_u9W8XPz+Xm+Xy7d})ak7Cofhhw^v#PaGf!y2>p^E;1Ig7dNVz>&l@ApESYY$$c zmjNlQGfx)yi~x7S=;}|hp%yX*K4X(Vuh+cij_cIx5kJqiDX-TFrwYp_V0Xe{D{In> z@%lC+>W!G)ncyNr>$aXr#|?OW4sh<%l(SUkSjggW({J+FA8@}@K$pQ302`!v zs`%uO-RI|>dsTW7j&87zwd;z0(2fw#CuDY$Hj^U)UmGJ?kMohr^Quu8<~l=-@AYr{Pd!G493@ zOP~2Dzj%=zbd(uvMZb@C&0+?lw}-=4PU5INM0CFcGz6WQ)&WeBHuKeI?d>0+(pAeR zUKCKL_E(<}?{y^X9A{8q7N=W*n0${T9oIR)B{qxcKTUAXRQMggF(5ws_A1!V-)ekh zTzbC+Pg@Su>~%%gM}WMZ-9=J-d5>WH z{D&cT9Hv@B^UQE$g-f0>LemWtZV!Jn1ezi0O~st8y_NAyCZgZy$vL{Q@SJbW*<=wfZj+BbXl{ep#duiES|vP`>7~-R<1k z2Nq%`y=1dD1I+=jm1wo#G+Gcxb2~NgGoC@XgUk!18q~Zl?Th|}z(@(!d{sUPU~+`M z^;`n2kM6yk&P_DVEq5YW>C~lBP|zJw4jY-@9?lmgH}e-ri$i_KJHso?>i3NdJkV)? zVppimSN&H>)_7NW4TOPAT9nlfs19gaLJ3!XWq736JJys{kk71qPXUUC7h&doHEZWP$s3Bl!36 z^U35dN1I7RkA-%!<{Sz+ij#|=T~oe{XE=J6HSN}VJpMh`x$+i_kN4ImB|ID?O-%9H z(`@(B+8*H^I(@6&YlZd)U3R7)XCaag>=i;l7{q!$ZxZ*L#Cj`UIB$qT8RC0onc_$o zN{5krlv(MxyG4W#!82#JtV*aG5aG49N1{l1vm#sm)cA0AIb_$qTSe9rtR#ga9&&fS zWbIJ?4ayL}>q=)8obq0RLS9RF5{s|pgu>@Gp4@((OQ=V;ABcWC#U+rVpQ{r52DlbA>{oT8Es_` zr5^PDsjIy)UKsSY+pA7L<9uysX=vd*be!9!q~&vd%1q3o+Gs~<;vUyIjcx_1{emD| zY(I;=XV#CfS+|Zs-D9{CSbXFiqK(#XslyIp#+SOjf@)xc;0_JnXbT^Yn9v7SHGe_) z5W~#4av;DtT0XC$5H_fBLp2#dV<;WC&R==IK6bpH|Njr7LdmX!moSSOA`hL&xpRbGxRidyK^TK%WSl zW9~^&A?==01|t29qXnWe#V%39nO)SHpEZOgjA>bG#)W-8x96Dg*j1v}q9c=;nn ze~Lg%B`JXwrA$T0&GY|&;?~MI{-TkJ&r`QdGF%cL^x35PpPynwewxW$!urWks;wBj zu<=SvJb%T2E7*WxOwa)N`Ed4YstBrq!aqCR=!pLHzG5ldJiZns!3lpHJWtOstX_KNheL#etc;D9icfis0R!%d4_|!-A`T3=gIi@2L^n2R zn#~pv_K+fm`SgyVcN6v!TU0Xp+`pBZTImdThB4r#RhGQ1H>+Fy(_I{xni{~i+2Sdy zqmHTjwx2Z>IxqWrUur9xDfF>)o+ihxfp;+QOgal{M~P9qSOUs9A5ti2=qf66Q=N=* z=!>!WC|ezZV{9f>Z!ANu8#l-|#~3cF`Ih>0zl^f@CXI39z-q!iiwgnq8YIyZX3}h%eC| zma4;h0mT!VkqLB-Tncu3EbIk03{+F!xz{>YsjTk&m+1`lz3B2Yf0JLpl2rGdqY7Xu z%A57^8R2GFrfE9_8RK;M)4Q1h!>tj!?EK$f<&S=yL!H}>xU6q|o}JybI>=vAv0fh! zW|W@`6IStC!rM++vHZHYZlBH%1!=V{5y&1{WV1K~uCvYr-7!rK4 z%@x*NPLO347x9`6aCCvl&xr+40+@ViE;_LA{)r9a9EK3ZPEH+ul4S zZE`burSxScFHItL&$!W8*dJhKZo3TPa+^s+xDMb>|DXa1zUR5 z=oBPi+?KWK;&nuLhZ3tUpJqk6%NRR|o))rLD%EWYiyzotjf1J1uAIJS$c!tuZ7dgN zEJlT`pe?Rpi(3VlW1(!C*6m3hK&dKKyMkm&2V(Upq&JFe_@BxC$w^?>8$f{MTe=sn zCzjoRm8-$80#tr!xhQ0{Ttn+`_@TInW`FU#Uq_132T|HP?YQ{Go^NRykopWBPRV7 z-af!%xG`lf$}(p-YlT=-dnMN8ktAUjXRp*OL;J^TO%|@tE_H*4+D4{ETZ@AKFFm5J zk!Azi(gno9#4+4OzK~yV(jgjFX5^5*HgIyV*au{~h#d!VE!U_>Qz6bKw(Qm)enSxI zguA`~U}2lyTbp&0i6Q6MiuXx|o7W+}0EpUD$<$IU**>CEmyU3WTG-J3QO#3x%(X+e z0R{Wrg*zO_1iy;@;i;FEZVlZ!pW&lcI&zmSZ2BcSEATK4yj@s(7(l ziL2^(-0YSGJwTAnWy9F4SC_QA+wJ;83AX7!331mTY;m9-FcT1rn1P-uhQFt|iiTJP z?yBfDu{YZ-P=CD;a!id}FIFzF{z?C02f`2C2XEOpKECr?B!*w5a1Sps{U8-(7wNrt zAs3?McZ4Gw6ynVYdfZ*ngM@77Xw*gOolx8(#1OvFV!?$vei}BYTFm6it7T$L;+BcW<^Ts!}pAjXvpvKB` zFP}eZE_X^SYVRksSQy!tQ&h1=8IgkU^YwCixie)eu874IE752{Q-chgp6Gz_&(WRd zu^aG(jglCq&4SA7o}!88w{y^n{?i>{IcLt^A# zfvBy)t%+qjr9je6Q%r0sYhv z6$-#zRp&zGr3e`<1}_-C#BvC%hbxZj7_5UUk}e7;zG5Z-A=579G!HRu8HinB6vrwy z9_?`XDk?E|3ZEK4wDF&4ZcA<*xVeV=Xue0nK0YlPWCn-BOO5 zsEj}qpHNVU?4o#Zi__n!4z7Rd@7!DRsi(xFXV{J6cJrOD7%V3DmYi%%DgC{CFXJEt zEi_SQlwQ9Y90}|Tr1i6F8kBoJYX=9yK&bAe;PS{9>w zu~npwMhij12Q*~cacrFmfw)shbk|ciWMbpZXh9X(R+W`FPKZe~B#85{{?Q)+h&uPu zdy2{%m{~Cce0Fe+_lpfON{Wjv4s9Q<2Y~QSuh{rOZN)WR5Y?ffdRCK%oOArxAM2M) zW$&&ZP9X8@3H?OU1!^T4v(T3kX#tJSTER}b(E~jQ$E}0j--8-{F~unm#$RE`mel@+T%9%9FutmWzl(C{}CIgh52VXwirob z=joZ`aNwUG2|a*v72T-ak6@)0^!1SBcR2bUVO_kjbHLX)w45X(^Zx}@2CMnZYny1w z;`bxV!}=q1HCNj;vnJ@luCm%Dzs+)p1~Len7jb*CP|BJ&LE_ov)xE1Xt>jpn7krh# z08%L0P9U7kUvV|GzS*k_rlNm4M?we(QvkkIML4S;Knep+b%Brt{VxDUb1@wiU3qm76uqP4LIWHODBdZ9KlahhXo0I)cN7H zsGF$@CY|cnXLHBf^P^q&Kk=xK4PS@o89q|Sh?AdLthajKpuNm10vPQDjfCzZOvqAf z2%%93)cW?h8}}k%h%01k9_7=#{t8?;OR{1|maX(<_zu zB|xKNBh4QG`2raSQR`(LE-g7f9L53nDs`hw;RCtz(2lpxd`W6`8eOPlORw0fV9oc{ z){>S$+Tkiox|c@24ZgIBVxC4mT(6>=Wk^Z&7+OGRo6W_D8pXTLrGGRN#R6F&$_NAE*1jR!kvRoAFGFf%X9kAg z!2dKD@_mU3`m^;g=G}g{mIVDN@UFV7#NP?3|4)z2+b~ur^vpyMpr4#xeK@{wj1YQ8 zZyVsbvXuL^O9s!$;A;9>Wp=}n3}Vw2cUj91>%8DiMyGKJ!u{t4-ZbHJ*t6^$B1cBE ze^Mj}+@yjQlUJt7inkg-DUt!^afr+L)0xCaCT~9vnR&dxXS0kV7a%pcmx1#CNc@dP z7Sl~^vA8=s)6$Ptoh$4_BYKwcjCf;p6W)kNQdCU+Lrl0%$&hYT{|quyQ^%lH{t7eWzd$Aq)t3bYcs&cR=6x*yBaLYlx!gB|OXD#6H!f`+6dT>2keH5TNf%m#$`(8BHOe5YfKwaRl@_y*Na(A(Xe$DBB>Z+7_?hMJ@tBYP^AA6=CpsYjKxM8M zC*n1y_N7n5LFmw`TUY$m&q`LKy`T> zTtU!}Xu(od|8g*t1)|jKyD|i!FkxhaWSjQpOkyXmLWJe+EQO}FL2EZD0$osTfmeJl zATQ^r_+&`nx;TYXx{M7p@YQ}z5xe}Y&GkEsQz3a)0Kvugf%|>kOphU5V&KzQZUuWW zxBf^#O8^2krzb!@BUw-Y004b<;mZ|yR_-k`rB7L%#zX|-2RGmm7l_7CZ~y~aNGg$J zHpHgHatWf4BTSq5GwF;h)hx$cd6#T}08e(J4K=K`F3~|F*+F~JS#U(ny(5YuJp&Ab z=5>to)Malq-UL3#PTUQlN{Fgl#stM}D%{MEFl|jU_g_Pe1*WGqaI7Z-JxW)C8=h7X zV;ayXL%TkHMFZ#4HylkzrXPd8xGh4HDz7CWL;%Z1an%2qp?5&5mG?EBq9?2zPYOgD z2&f~+1-#GI^`a*RrGO1E9TIhzHdRF@4SNInwarj%R<+<1NW7)&lq;NYZe)Jo9P2r=(mPgmM07or4yC3*oDY)@9_PP6;U9IBww;a9;& zP$S5dbdc`haxk;(Lm*MH;p*a0+@B1mU|QfRdXu~Ht9Dv#^&~#WmU41EW}&4GB1%a z$?Qq)n&9*B6UotPi_~G}#iQ4ArDw(S^O5^=SJ5?bE4<^^Yg*tef8mCS}j}~?uMS-$MT;ZKDrOwfj>x{d9HijdRpFe z-cnybf8lC*>U(%|*Kl+4=&{B%{ap0i`1~^YYn&~ulhyN%4v*(MbN7}frK9;ylCzWJ z%sZ}r&%hhwr^qL%+sF&9n~qV>=jXli=R^1>tz!>h&zxuB=e8&Ehp+A9&(DuspzdIv zjxTp?!VA8V`T~2mMXc(k)1jU>EEV?dATHVDEa1^LmXecZwL;dQu~efA*CFdQJ&nk%yNDr&S-j5lKD&=CjLOzG~C){mDc0o?kKC9k)t0^;P_A zPeLR*11lct)Wbq)A~eoK8WFBm6H23_4H1Xi$=(5Bx17(~(ouA=IQ9~+@y&avRtO3t z2~pkTEkn4R3@Z!_e1KTf7LwHQrOF|b@JZ~66nA}1k2H(YP}9f78;B|f;Nxe=xu8bO zeMYg104I-a#o)+nB&e51AyLx^oWxk_#p0{_ZBP~l3V4L1rCWD8Q?9E(fMCb1Hbtqb z$75J6KU@__9Jqnwqm3^GMdTHKk^@LFJ1*YIUGAYS7HmUB)YF)VwDCU=lZXrX<@Bqj z=;mo?2ryKeKSS-z)=$jg64uq~ZTj^@DQ7lKYYRgH;u3;*MIixk3p*(Hww;pXF!jyI zDA=G+HhGm`BjXKog)xj~dB^+W3oiFcyV9S)*^IIDGw)!1NwbUipNH`j7zxBM1)*{b z5#dHY4}^FwMk{}QtxXz(*KRizXzQyiwT#Qj&X}Glu42c3G_!A0XE_>8hLkz6FhU~h zGT8cC97Xl8j^w~I7k@pdp>{-s!2jQbq9gixN^B4ZcBD}5AP&t*x<{Ups=g@rsa^EyIx9jWl-HBQ7W)T;<$=%{>3gJ)J zZBTN#&U)_#R|ruML>Hgb#Y6A-=f*{#&nVDt=0`$^6)0+L!3ChXT=|Agr?2Az3CrVy zlhR{PP^pASA^G7F;q21&1f>$YPUyq52$WrCHyQ9_d&K5guG!$UG8Y~-u*C9Zd}Q6# zcn^Y;n&fgKed};k!FX^!SQWjFTpFi5OpDaikMLY;sxsy%JD1Z|?;IV61 zJ`3;(3L|?#UWvS{{=wJD4n&E_f}&wV_w_&5_?LjTfCbDVVJbxh1_4qs$XPcRSVpUT zl=EsY$V}uQHt%a6YLh$wh`|J;pd28Gey)AfpTdLvK6ehr242oP2|9uB5u}y@#ozGxELd=m=I>L<>K5#tNuGS5+fB1@(@L^72yAUas)lCq+dJr+ z-cPiyl$(?;fR>D~QmRoRt~hbE{wNeLvxfmyiqRZ7c7?$7Sb=mx~MeSzPDA>{a-DcQ~QBpx6Zvz*5+O09U6TgMB8%GBCxVQeL@Xvzsvd)<+iE}*@ z^PZ|wwD2WBpl0X)rbPZ)Ls3{u4Oe}Kyz2ErytR(Cdzz62Ivf;}^DW^%xq73YYq9wx zmT_UBbavi)+WSAe`;mA-y+%IDbQSswii&J)kN-N9eu=8T4bx8TMU2%fNa9obE`(*Q zUMJb>6soQ0@EeC{!t7O7JvG4-Gz*LSb4Kg0;xP!zdt2`XAMNgqN<3Z7Z0~cXY(s z`b~(T2;ecBbZ1P3$Pbh-42NeYFo_eiCH^g#fz=m51FNqbgc~Q23iK*pQ0IIJ(%RGuUgl*{RInoM7W|AH(cftnm$-FUwgP!<(_fO#ant!!J-$2n4etbOO z(H*fuieYaE%Dgw@J)Td`)5-tkbJxsVb2hcX2o+{|H)Eq=1I*ld$}+uLfSL8E<-fXQ z#CJ~lIjxlgd*qkD@|OtDvUpa`&6h=T=;KU@NkX%^dL~f%yBR*zLJEYeLLR z3ZDBLnOuaNJY0J%PuvCKdOK)8=-iKN&`2pmKh`{@6Qe+7bLWRV3<1Uok|N@4)U#en z=$IdvB)LV%3)O%N6OhIr?hVhGJrP{&;7#Jdr+1)GQB~y^6=p*+In2ALS1>E`sX;-!vshoRe8rp$ev5PDDy zX;2TK#8SkuenZ((j#DAo6}}1}RhR$RreGUNEP0ioZv<=Wa1yV}fJWBpIBar!isep- zOL%ARE%GSP%omq5E4lD}n>HEguD2M>D}}GWUn);~Byiy;%RC!P{u=nN85&EFpuwG& zi;JMdUx-|&oe=)bw{p$R-@5soSm%v1=l;pttq?j}BXthPe-`w=786#m)ho@p-fqs| zfyFpba?}T4KDKlKT3sw7)XRp8`^cu8=mcjLCZyVwEoL{eY*X;X%wbv5A0(1-L>K%! zz>I9-Leb5Gb=Gl?gSCH6H!ChD@v8um8eY z=H?qOC1`2bl+Oz{8ecNXEF^I`JSa%9(O0C2v&hqU;c4f&mn@VNpt9)in#h|n3Di@q z#NWM<(YB8b3M~MG_k&4Y3lW&LtBVC9kl~Eu$`l6L;l|Wx_oJG&NzK+7PYqYVxf9rQ zV&GivsE)5TA*(a>#>p#u1Y?3ZPPtF98ES0B?FmZH5}|F%1SHaZIL4W?U=!TbK#Hq! zdv9{F`bW9{=dJZ_c=YgemYK5-r?W4!S3xZ0T`GXXf8sG zyU0s!^GZ28Fcw2!qXcN2Ugg>m=qz|VH{hsRQtszAe^KuvsM-B3LH!$*_%kYAvY{A^G!$eRo;))e5qfmAKd-_EAI8}C>t^%p9BVodfw0cmxaXiy;$M;9X|ZE4E-6idMaI7Xf&E+c}?e)uiN2eY-E=OMu`lKXhNdjq5RoT*3XG!eC@~C7fg%RdU4|g z8Glo%f43&IagazpXAq0Tq>_N@n(%;>^q;6Z4sT0(h35g&nMfVaDfH?(&{uP>wiv71 zY(w*~d?&kqfLw1=Zpa;7Rf`)XC>n{R`LU+opQW{#*F^-I`Dl(|Hqg^>P6)(&>}n%+yRUEzS8F zg!u}HQd0f=w|k&n`^?ko*l=Oqp=N-o-?c+HwN z-+p*1Eii;j;rpBl$rP4NSZ1o#@@rp4aA`neJ^##| zAE5Nxt1LGExvQ_XY2PFYs{IAV|A%z=IYV8=piIApUrTKl&i^|6 z&31AqmtNDxlnv8M%V)tZS=#bp;-RvS*chf0nOy z3%3XUhiCpn_4=n9QW@vB^0=&JjwQd2c6JYWs%++eFWZglPws=7%DzHC1(UOYtxGc~ z_*jf97z~+ej=X&kdDoUz1yvD6*6DFDtR?9}LHQqr7r4j-D2tlHo ztR)D?uhOtLqlhox^A)%}4)fWAs->$ln$y!{D((9l!? zoh>8I^iPsk*`$wR`}sENL^#E+8GKIB|FKxx{Q?R(pKTFaFZQ#4WbwxGpnYoH2+&Yu*ps-5?Qb{2Q|M&O zja4|vzrsdZBYA1Zq)U$vLh|D14-`DE$g)RBo?C21fn20?BE)dDfQKx!P3$c6|49bM`(%xWZ?`cMh7%* zU+|?<>UjB4)lFj@ex&G^e*;mJf@*{`E8;z!gGsHNPwL}FxQ%V^+IeQ_ySC#W8A-bH z!{`eK%Y2HZQhvY|1Q*B1a#^Z9zn5LUh;pcF6*pEn5VeI z?MsiS9gQtEPAE|?Es^Ep$=H*11DX~2j5vhwGh)p$8&piK=N|u{eunVl4ke5*FOGs7 zqzsd$?Tga^(*EB&9Zbum_g(8?EJ>Pep-S+E#{<^@5t_Vsem`nr9_F3 ziv5@F#D5j-e>FmOp(X}ufUR5tejW{CQ{npX$mct zV6C?gUlORQb$`krDs5bX=tEG+Ae?Jh*9IQcSso>^&__9~kinGmZ#U?>p}upAAj&*j zip$TzGw6|xndv~<7G_fpNc^eyd=L7V1mCVrRBW5gk7@^~)_tj%{{ zy_p*i8(Dmg@LO~sww&2%ml%Lz_+4ug%+&HEAaaaCP`J*I>9etY(%7#KkLZcWz_tLV zr!c@7M;IJKKQg2$BgHV3McE0Ewb-f_ip>@`RmmA!zGb)xP~8MiCm>o4z|Cg!?KO}n zV}Zo+)dl7PD|&D-z3?i4%O?OtD2+X=ha%b8HSQk9fgWH>;@}v?^fq5$h6g*NbKbu5 zf7nJ}(H2@Q!7VL02eVoF7pmpAV$Vn#3{0S}jXCq=F(LR#hWF)M`9vZ2rx_D&hY>N@ zSXR3Y!CIJcb7Yy7q0iqF`c+V`;LF||TKnrW9h(*FAgej8CSaWv=~m1Ek=Ii~aI=f~ zgeN#E4;q}AeOfXeN{)&PqMl4kTdg0s^l*h0b%HZ6+cf!^)4|ZscSVw z*Kg31W?FwtQyog>!3&0HFiY>h`>F)a!hM@|$3S<_%dhKYi!Y?5iO!bMYkO0<{stA| zU~8zc?6$ZJKI)|!ykQ?-laSDiFDpKq8w(`%Ijq`XD@`aWV!OdEYqYZG0~*70RzKJf zQG_8cua;h_%#qLG+v>1{;(mTU5w8x&`7D$fQ8kAPhc{x4nFyy-OReKpDfk(dK|{%8 zh71y(1pTI9ccZtX&{eQlPTt9f-^zw3!edDP;2j`CDKSVEcBf{(7c5*2jVK4(c?wsK zrpP_@$B_q=bzS*R#G1#%<_f$yTNi#2bz342Yp{!<`TXZFItoU%T5=O}-EQt{L&P5? z`bYhGkyQ-glV0UAK;JV2G_@GpWVLg;b%RSeXlm=h1#cJqAdN3F_9#|Df01g}J}DTY z@gB`uWQW&9bU$-DmN#~DZW{g)B-9#6OSt`W;`_Tw9B0%xH_!VBhDF?&kay!6Lic2( zqa&$^0$t)YDplOk7~OVR>B9v_5tot-Ldw*^C!%RF1Lx={1+F)g;Hs4?o2km=!R&iI z_GSy(3JOm#PDDLt$O#yRM}CPNfYZ_g6z_R$=2|5KN#5yW+m-F5gP-$YVNj91VXP4r z8EzWlR*ZOU1kwL? z#nB?(H*0q1Da-3_r{FiNPtm3nK@s^y<*2(0d3=3GI+LM+r&1?m-|`5Z3eb1oRGxty zT$I2RKq`IiQ54ZmI5T-`U+*;)d_4X&kn(<nQgG0? z4Y<;99qj&7r!Qi)(^LF#o-or6Y&PKZq5ucRM!`qk`jd+?D2;9>YatUCip}4r}p7;5e1YIUEBPK$IU}jS^YO!M+NT z@qdrNP0&cXHn5ZnKr|{fVcYXmkQ~3+L%qf`YdBi$<#zL@ewsP;Jah! zILvtxQPH9aTJO|sngDzI#^jJY6B%0}59x`zug?VGn7uha7GDVmIn?sJR_`oLtZ``G zb-p$d(>0mcl}uTeH-7(i4AcEh@IdLplX`WOfzA@ZkTI%^PZB=FvAKtOKNcDn0N?}a z1_kdkCxWfXZ11DOMch?t*HAkM3}LAgQI3EeuJ2z@cH}&=+8gZhQKlsrnU2KkK4Mxw z`REG`v&`Gn1`{;e(fhC_y%hJ1$w)P(jI-bKMG?eX(R@M`#uRI|>6I!1nesJxF%@2s z30+;Sz4qS@eL@<#Vgupaf^Z+y0=tj#s#)64-p;}wVSiKd^rLi8Z8NE%bG(uk<6-aK+Io#- z;o@O{?wbM~{fG7pw%y0a_1@GyWrKH=UrYkye4>Edm5yMGQlM|tztrd5r?2?+c zd`ClXRkTeQtgpok3M^?)S!mq7y@e(9tL0(&o1Kyj^3+_{1mCIN4p(IoLfl+#Lxhh8Xh1`~32*L-R+dfO){_{7 zBNcx|%S;?K=&lhk5h9I%)o+GlA=Br9i8tU|&1Tqy7^bg_P^pM~tQ>y0bltxuPD)3N z?}Vw+m_=wxJ95RZIj(`$TWr$Gc^dc>0|NEy`QuO7`ES&y98|-J&@_OD4Aj zqN!5&BFVe)OP!XDF0)R4BO!E?%d@+?)@g(O;>kvgCmdY)l837?u8pg8`j- zZh`FC114L3X{A40$py9DklEL{^y4)%lfwSR26m=IiTWq%2cF!!T{UxDk{euYAPs5e z<=Xd{JG-&TR38~F`kG=d_&CHF``Wy;9iz6|&H-MZpOEZQe*FjRF^T7*sVz(#+mg@W zM#>e>!e)b7^-DNv!JNW9lI7^17(<|l@e1X6z1Wv*30sypyQfzCsUc#`N&YACD*BNj zC1ts=WHjLKMQq$`9_@0_I@~rJ&p)BYQa~r@ymI`&tgTB6|NdpMIv9S{g#0*lKZ~>^ zei1=1Qk7R#t_=uMwQFqkP7tO&3M&P;4Ex}0GSt^8by-O*HR4xPY#M~PyqYDk%UEMt zn7;KeVYh*7GIJsH_G*D!^|R+Z`4XIojXoGx;aT9Jw@}=f(d3~@=(z*$zppeRLtE@jjAVh&{f%TY+^p4>bdA)&biprr}_88agDc|LmjI;G5&@kAVs`O}F)FI~VN(Lvtmjz1a zl^^P$3i*M&IjJa|2@;<}seaJY^OoX)s!#T*q**3J@<3LNZ#olY!RHjkDk{Ic+?=mI z&pJcF&u@4t5D=g8-9a=k<;=?gafv#hue9N}Qo8s2QJj3k%wXJ!nre3ONRx5AAr#RV z2zzoewsM9nu{ZYc^JibVWN!c*vm=}VeV38H*S&iI4D~^P zj~l)*R4T^Jsv{N#-nWsI;<_Dette2*-i2?p%X+w`k#oG1EGqY;<0Osmh*Gt5g0u-QN z?K})A*pQ9L9IZ(cJ+~hhV+s=1M*{(uXao%eKUqxO+FCTe_}YqNaHp{oa@UJ8BduHB z&ICP+qqiUi3e*Ss22gc|j1o#R5e60zFd&a|09VG|b0f6feAiobF8fq&ZcI#7zo8XJ z$pDgeW(=WDiEtUjS6pi*uLs<+ojv#{3ViV8A`;M?B$0-paZ2M+ozFSQd5X=-$ z%4}9mbM+0(RT;C2+DV3%OkkgNKCI@ICD<*r*sOzOMK!|bWR%%l1J|ooHoaGFSc&o> z4_7_XsC(D7IttnLm_fciiwXMMl;y@4s*=nh2Q4nmqiv^)t!E}^9AB(?;BO~gK=M!1 z+^roKbEvi`)hX!>%9!-L_TL{Thn%A3P)7FLe>#CVphzzS2VN~pZhwc?->gZ|7idm5 zDjkbrY_WAyx>08Bv1sH)J;k$9n*+J3-QR)cfov0E8MsSxdLq~S!=3*_Vs6H zK%`QdqF{Xx`p%ZNkTAUVd*=e5 z4!ZR>oa)?%be%fjo>G(Y3N0d)CSfkP#CtAAos}#_z7-aeTr7`-mKCb*+qO0DCaq_r z+#@~J-4MsNKk_1MVy6eJ-)GZ6Q39+pXuDPQRIW#GJ)5FwwXeK|GE=KFzo?6hG9!sttE(!VkI7PLsNfwFDc2#|-^{%o2~9^G-*8Tnmz$?vy&)KNUi<%wH>c$ShmycGw=H+m>l>4NG)Mm?5q zg$WNkCq>yeEKY=szb)6EC3>N_pV)^uwPI8&O*9teLRz!C^OdULcqk7|?d*W|OUv$C zmjRB^|K2`E%_`dU-FY(n{5(pNg6nG=Ry`X)Qe)wc`c=wvJP2+|gtQ#DQ#k@JImN}I zPzNHS4uL6_axEgjgNPjBcy~(}(4Z~cvPYAd{j~tLJ-}hjK3;nKAdR!$Og&`w_6IDQ z1IlooZ$A9!D;%W%+KmpjQH6>G@R=GQ#qNpU&owES7+p!uR?J#$Nusp~)Bi4^Pa4Yo z@61ukzxx8T7-iQO|3&ljA6cC=1QOKReqpWA_)d3J5mw%!l!gYsv(Il21`(EOV9h%m z{hO}J?m$5a^WTO14dC&JG(b>f^{}0ciTU5%x{slPnu8^y61`9?wA&xg&xLI=Osng zA_0A*<~6h4s*7UD1B}e%Iwt(7-#=ZpACb%-6jpf6nB!;r$UiZU4e@Z z4GWa{F1sQ|Kbe-r*d^|346+PgQEjGe-6h&e+CGXkk+68=FUO{J$R3M~X%#yX?oiLP z{6{wqBu=qDO6-9AqlxavYcKsh^1fy2ii^Dy(mV7<54xqtiv7 zQbHj}*g}gb~5gYl@AoTmYEWa+`zx77{>K1i4-bMV=yD?j>Ht)Rvo}N(~ zJ>`+Owpm%7)BivIWWbffPK=z6!6<{&mwj3XV$bSs+AhZj0KiwIYCWpA8C?VIQK!x7 zZ;K_Q-cc9>`1uJj`dSX_pMyMi6ySHYCXW-p2lIvkk^1$CyU6C&gSa~&h1NlC2E?0c zI2VY*W;%Cvc z4~M>y1{|natMM=aEZTOTUP)F9o?}5F(c@1pm>RR5PyBcYzULX7YdcEdwR8U(rzHSU z4Rx!~n95t`l$m?2>kw<&0}v7DBNMdU6w$J)mJHkVh>H@j(vu?3DZ4V{3jJb55(PWD z_;l|CJ5F)dvWujW7L^|Hekl2?N>*6U3`g)lH&^L9h4azzxV5yvxChrn0>M)+v`ts)0dbR+w{LPy>^P=~xi zGE*zmjl{XjN5yxN+P&wsKE;m$9f%{kYQ^%9xyJ)MO!5TV?q&C5=7IKuCzd;K+5TCm zFoIju^K&qEqDU(YDJmfHw`hk!!Yc2x8BQ`yqwH&XZm;%67donLW>z2hPIX}D z(PTX_>z~@d@au#+9UTZo6>#5bVmyAaa~2;~iSt$-7oC z6aY9TwltHlQ1T%r-;Lv=A|Z!;KJpyn2j*}DD;7&7K!LF`WeBUUmN;2W%KrW)+3iJR zc}o>L32wK9i=h4E%+ra|c1@^@ZCmc0B20MPVFT;7^_^;0BPA^koAlhBkq5z5jgLh$ zkr1-x^JIc<2k9|Vss0`rsjl3MAVF%Lt@KckJF3;f!Cm$mK4_cYG8v2xvMQfOE4w!# zR_lJKibx|ww+rW~SkCurG3qYoFz96oCA28^hp*U#NhAhv(`RHOq1VsS-jcy3!vJ6G z6i=i3HN=(dkGhM&vFQ46izpA`efgxYxcP#Zsp z<2Vr!`uCTVYi$i!hz;D#Q`cmxnwfS>j?y~8q16~8V{(%(VfJBe-1B-P9`4~C_08C**uaCtzaWr&EsTD&Xs=)7zp2di#r`Y8375c^R(9iN zUn_yyLWWgU$?oKB{62b2SN`6)0{0|Pysk>TNh^Vt@^xj%HSBbxS*{t}s@z7;02sxO z*D_f~+=!rsy21-C&SoG>W3UEp2qp;^uTF&ecY<)hBix&i&fL(Q+T(RXPHAiSSrqQX zX?L~Is(YD9hIkI%G2I z$RU?FNPN~lVmf=-5y|mcWHU{rHEJ`UF>ye9#Et!<_1(n(geUc;opEQu^AjCMD$(Ba+A@B`I}~-*&ckU zDT<5JqsoGYLTS&xQ#g$rcaS)xatn)=(lprusf7*H3f!AXhf?uWW;?+EQXnu9O=03eBdtS$?M zRNPcx!$@hNRaa-#_I1(fI!YR5dMM3273_>_Bl{J@fnPALV39Lj3V)cOi;DZcF5iCuS}d8mlaahya!oeS zgntH8H!dk$NKD&2b zD}h616ksF7F_Vl$vT>9^w;D#OYn-lx4(*yN2*S2ur~o#XV_&-)ETUD~$=PtKhI@0T z(-z9eV-pm*vM7ZZ=HKwMTwb^Lt?vn7*NVbXjDnz$jzg2dJ)@nKhaOU0T}eHzYcm5O z3L{9v#EM_+;2@GM(;{%RknF+SpB2~ybE6UIaCARGb z>saHjcD0=|wt``Xy7V<#uSFXOWT_2brF9HFZWujaeK>%jZvsE&tA2oOhD`e`Qu2 zHJTKhu$O0ok>yegjez&5_HX*!dm6-qJev=u&a2Eb=8^(*oKvua@Ju)ZPePSHu~pZ< zUYZHUcV^cDtJr+@Zf@Y-3sG9dZo_YvnhZ*VR}7Bof~ zh3k>X5Ri>mmropC@!!6@xL>F4q=}yxH1x#=8y`U769!6r`J0F00(`5kWoZx5p?G%P z$uDo}tCNmMnTw8uSnw9E&Cyz7>eq3*_Ts`S8pM=qXsq~-T{CvTobb4>v(`O>>V3cx zc2>c>FPP_R)oYBYp+~ptDZ{w{8-|U^L^YN=6^-{6uS8?xBU$Xvc;KLbp9+2=N<=!h z?wcU)J*8Z--YJdU93DP~5BW^(GO^q`X3F~ratuqF_Muj{%m?zg7N1&U%(Bv2Ayh+? zYuOe7{~`B6(WbJwYueBFptBaQcGeZ=O^hQIVbY5GwLQitD4oC?k?t8Va=Fythe9sO zFV*7`mfL(2L=wyS)C&&D+F3^teOXRO)fT(67Ashajum|OpnTyw($u0Xm2@KOjiy)` zwlrJ?gjj@1JFiDt2x>{bLItr(Y~>(dj|_?fN{hf>@+m7Ry+0m zfw94X*@j;CvoL0pVw;LEa8>XiCtR0m5hNNq{I;6p^on5A5tQ%aqWdfROp^S|g>LfR z#t}T^ve$58L#?AWPG*tkYTgdoQp_sjXXg3g0^S$h$JpG`yrp->{*AFHp`Gm}Jb11( z-1dB~J1M)jeA=4n$GnK7vV*aJ&eb8O4(@^8L4nXC7v>X+FWZBoYk@gY3u94Ci9e>m zd$9ut7~jt3{)NYa30#=-=&shFF@4ZNFIT4pRV)l|RgZuI|A;2-^mu|cBEx0yd=WT2 z8^Md<^G-J$73wzD>K776al|p?ql^l1HVLxr(^^zq_mUTHNKG@l5GHJqx~_#P0^NG- zf%hl?i( zy123xCyJ@#ZAdy&3A%p|&G=e$q$)L|IVGqP>#IOGJ&`4-k9d6xw4{siQ}sNq;g-;I z@Yu`=Zu9kGX9DBcmXilNVV!*lNwK_I(Xn_#(b|u4GUV|1mZurTpT?J1`6r}Hh}R%4 zxNiza#sos;&J7%nOCk#?dQY?($7{w`fL#Iai~@HMVL_ci?4>?IJH~w}A0&4I3P@PB zIu+`c6`Q)b;LZeH^b_PI>*ow7mak{;(q3#LT-Y|PBko`p&1Y?ITWEb81Vv-r9Fn+7 z8QfMQ0Ohk_PiaN(u7S>tu@(xUG7V+QAEz`SF-Iv$D#(O_f2Hs1S<`|p!rf;}=6Y6@ z5R$2LxfAfL4Cig4?E-Bl(7h0WTLgBiipIg&kYkl+Nwia4daDfmsmnP}NxO}+AW8i4 zRU!i3!e$d{Vjy^5{lbA17LcNlrx$Afjm5f)K8Ourb50v%Tq#TF#-`SVDQB%6kL{Hy zjuV3(veTA%rl+SmAY|%oz$xA; zoQHSa&+)Pf9Qh5|Rn@kV?B4j*Rnz!WmxGAzkDH%f4KTlQQz8tLSkg1d!b)CjBIT6! z{t&awrHM;25M~TWeRJk)Bzu?Tq%_S4VBBKwZE*gUdlCsUYi?LhtPBaRSMJK#WOrkj zsR4Jey$clyo!Z?le{?;xyDR@9+f&3@n$~IIH2`(`Ml%2O_Ql1#5 zLBqIX*L5IBUqWL{a(E6>g$XJe+x2s~tn4^V;CZh0Sa8F$$^^5_&vD^yISCR0N;$vC z1s>#QT!%vCOo&MkX?Vx!kIg`7#~eQuGe!UbUZadfE7vZl4fo8D118EzZ9i$}^5pT1 z_NIJ!A4H3>yAWJ0=%TTc^R5Xf>5An2pdbF-&<ZZm=<7p@E(1qZbQd`ohel~3iTpf zx1ZEF^UfZd_s*LLpTI?|#-X*}J8cNFdrahj1A*nJB-0{6_2dyIF@oI!XO-eoUNg7l z;E)&&4e-sIFlC;v+@lh{z0U1CpdkVQ2lMqgiW3Eki7)DMsao=)!?6PBBNn7St&Odl z+K05tB}(l9o&5Sm8bHzsXd`7!^@+~>Qvn8r2anNt77-sXx|5 zlMEke#KT|1MZmjc1}W2n;jKHqx61*RqZhHZCL}eV3ofbWVas3PqYuCris2|Ip@DqA zrVvK6cA=E?v{NZSzd!Fbi|A5wp0S)R?fJ%>?A*P1X%tQ6MOb_MtcI!P3^)Bq2ha@e zseyl*V}K%2i+5dtmnBI!$P!?(6^@TclcY|EW^ywf^y2xN|AD0S8E6`Wqr280` z9k}Zme1AZgcI_{HEJit4o>uTnm%f&6cwSu|(+r^vQD$*My%>E{1a?*Lp1(X9Q*a^L zJ>ZBosN1R5Phn?vap^tSJiUl1c{b*@Q)J}=Imp%Jw?W!DLKo?C49+9+wNb+S#)yR~ zdK^H6$($Guyg zIcO+udJQekjO(vtX7Dx?*yffPsHS~#d_@!e(W@H2R}L$K!&~|lBL7k;9!FHNe@-e5 z-^+X3EU|))Ib=RE%c^5^sZJQ(Tdsap)~)5#1cw8v?t^gTZyJ!l^p5BSbwb!4MS5X|k1;3?g@7$GNe z3>cxLE%p?)jvRM*b4|m!J%ToTX=K-AjC2`Lwbx2W+sLS z7{_0unwdikG86xaDt))E16;IDDJ|YN5bJf&{9eKQ$58i5o7fIYisP!a)9vwQNv=}|!3C-@-y`uz)%$mfgJe$&S7ohe$a9-HZ)5Rz(HOARVNbFH~dQ6eNJKe+gpwkjgxm!=i&` zRCJq|1**0=XfXk)=!lRm?>Q-9JQSA$%j)*&Z4IYpdH+OBG73oAom+FAV6kk+4mG;>EDbr~l%JN}25{CID?RG$)Txjl^`j(I4K93zbuWC-Vu9yUXt9N-obRyu} z9N-w6G>pZU_CzX6AR?fZS{T+WBY%J8y~afuxc+@TUZg7FE(z*to5d!(z^D~Nd<{#( zO$6rlJlue!!ROD(q|RS4pf&aq?XR>l2!pybfDVr;&sqi0+&M$Ac3|7nA+_KwAz4$| z-!iTZbiW<-x5kD9nfH$_Cmv!tz#DbC)}Girph<>J1PG{To36O*@KlFfRBr6%4C(5< z9?*_hBv5f%h!{@Sk-E!(6MEl|(yr1|oIX!CWGkwwJo#uD>Mb8-xIUSvGjA@&|BlpqtMwtbC9XmH1N?eL8kdh@pWa~j>^&oPC_r}6at!Gg zM-?{Q)X7vwOmNPWEEK*9k{XN|;ft)nvLJ*TyNgeCsCV$Nt+MZPbwutzwfwNWD#|30 zYU47`-4c;PH8Fodf{H<1eHm>|n+H5J-0Mi<;JhXQ6Oo2Xp8AvoP!l*7y+=2_+$EVO z9HY8#`MxcBC<4{bfSayWY_EF%nXpAR_hCAFwM?DC(^l(Aa%$%lc-cVt{5?h?BWkRa z4#Z&`+&&$9>%ZTN*N|e}{sub z)GrJ^uUMA7#y-Z* zGHdlkWRW{uJcfp+$9_ADo4dn79J34tcrcVgVlx5rcz@5q3F?J2dIeSc?B6LJj>Eqk z#Bc}`)V(CU2=R)3)445Trq%J9!Lu>1mw;9qr2yyh*AROfw$I}bwy&yTIU@hMp*nN9unLb4RRqaTpE6d+kH; z07(xe^4HQn17Y?pgcURaR z!m0Gy0bEQ4LS(v zbPT*HK3Wu#6s#K_Nh){9vbGG%tgW=E&rLLzaDP5k+KJH+yu?TsHnm7yY$P-{j1A3e zU|Ay0w@0P>!Qtt47uhEKsItCB`2yVD#Gy20?6AeQKyP|M*hz;rASapw<=vx(vNqq# z0)cB42hln^%G|M>qi^7nOQYdCI^@mwths(n;54Fv$Td6&J4i3P70qe76L#Reg?D{+ z?$2;5whkIyKHJCr{V0%?Q{Ns0qQtP0IffZ8pLu#M3nCvMS&*7|`^Zan>AMk287JHm+bQUi;n%>pDP z!hVZ!k8eQbGMv{YQ&LkpPUVgbB8)KaPTBsD(ek1KA+hp=-l-n8)L14!os55GfEByvJjzjFyJ2`v~gx2M})# ztBsCeY90noq&emLuZa$k`p7TA{TAc=wqBQD8Z?(p(&7+6&y1>xJKKKcXK)u0Ma`=# z|6wZwjo%UDJbD1WGDB-`y3&#PE!O4^KfRoOKF_G%r`$S8S8!4Dn30YCdo{ZDbp&wDytve)K z-ye0dYM1KJwgPYIE%%0gq~7nn$h4uWMsQ64V;+fw-mR%nGTT~y;F$cB;&kt?RjATk z$YoW-)p*gkQ|#MZ0X$WB+irJYrkBt)JbWkMEG5B#Tz5F-BgCykbqZeJtZox`F6NshLWkE^XvH=~0daebZ`IjvK8 z8qM7BT$2r|onZPm0OcDVSQv>#oFD4-udKHxS)=T^e?kQyi0SFzccWe=k$015->vr_ zhy+;ywp6k)uQv@)U31X1m64IVGr1>Rj_rxweiA4S^LDGL4B6s8UU*$>EnS(B)pR?* zo(K@FUuO$WhI-*`m+MBiHGB#p`XQnDc}yMauMU9ff$@f5dtTTHGN}fpupv?o9Q8JK?PcqC>O6qj?!~B zLU3+w{s9cA+bQurrk_SN@78TrJ4$AJ znwkuaO9$SINSLEH+7!G-@mM#E+Ft5^l3{bUaV+glll`DTn(u4K+QSO(wOv~&EP6zHG1`e*HRfuqjEhRfz0Z!p(f zS0lLhxxm6{Fh>e+7EM!clSH-5VR}F=+~+j4|9BW&{tr=K`&)#_)P&yWnANAEdc{)e zA~4IS39WoUE2dvOuIUNQQ@s7-r)XJCCviPJt?VFyO+tQv$vCa z%x(L^X+}GyNNs*_d#VuLZ>~-o9JTHwS$Xxz2PK{&_t4+PB1bv;$2YeUUFsfH1I-KF zDqO7=C2~et9J?`w^py~F2lIi@Cy43be=gUmaeACgYG{iG%!fE+(a3tPCB9|2pDC18 z`ztmX*(hj{#x-9T|Ads80wcMw_giXl@QN53W{X1SxUh)Mu+3wLW1+1+PkDX;6+tEa zyt*nv%JsJ6qZ|u1TV9#BA=Yd%2(|%Q7PxI%j<^~H@pOvps#o3;$3wQexiJZIIA`K4 zM|~nct+(-iD%Qthn(OtYqLXA)Q5|)Xpw@(3R~5c2q8)a^vO-rW7XG*ZlP3{pZ`S;l zM@}Hi5^e4nCe$ooe8@gyz~Z~{44wHi0aqP)8hy1k~?CT_=35Wm6f<#~%qK}z6fq@0P7ewXSK}m|g!f7`FrrynnnvxSDzFOO)XP2rcIW_gLDJo_Kep#J zFb5C+L=cdR>{euXO0PqSw`rzqmP>eb<{JpwtPa->3`L__SPX$Q05|(ZgxQIY6-9kS zcCq(ket;UkF8+w8j8P^B*u=okKTP; zA+c9CIVm4}>H+455~2VBIIVZfQItA6c#?2? z7?cywb`qxEauUv-*XonrMJSK{V!Tqz3r58w-@}V(-tYlj`pX>s#>otiZQLH1TwZsH zE~L+L<08%3aQB64AX)gt#ehb~9~@;S@$OZVn+U4=ixZap>l~rk%8e4-%g46iRJZ3x z&3iW4!g7@BB)Av%t;47uF85jvY;uHUD8Ccoo;SvY-TgI4I%1_@#-am|ThIw6SQ^M<|}{ggy>yCD%l-Y8t{jvKeG6#JSFaeuz*)zbohlTRVZ^JKdGs4qSM z`2AedXq*_nEtm`_q1^HjP18lR8EO8f|G{r+YDfn0lvmlfV#eQK6|f*$L@<1h8`Cqmi&?9M z9P90T(wlBF(GsS{eTotF>?g4zlqHGSWL8K*0y{D({2aRl?4d{4@`ML$^F8aYiBNs9 zCNMu}vfRfpt{1dYCi*vyRTBYH#>$Q$yX7F9!$E0~&jwl&VTq%*p5)_6HXCa`4u;ZC z2KWR3cl)TW#PmPYa_#W?+9%=3@bm{Y=XHLY9-);xIr4?NuReb+gm@KU%7!e&AEurH z1RV$>^(eAY4T5x%vk=UNsU%KP(Rc=KmXoN9GB+@^^Yy-cSTby~BOQZ9`Ker`RdFy4 z0)b?l4dv$NZ2p{G!K9Hb+3qfd*W@gX3~5@UzuWr(l?#;>T-yj0(MsUKYpLvUfV9-wiMQGec9LM>|G$pB$6-`0g4d z+wcGfyHLYBte}F*VCNKZjcXl5kf=5ooFI+rmw^1crYw1p`cWNn=TK2ZNgXyF@%XYcLb=ug!*JkeszOd{z=}e>Pb}tAwJ~dz z{vXZ22y??JXGP**TKl=|c%e48z~gdo4doO@v}4WT9d}xa!=^T{T5}8b#Gh;I_33^T zy{JIX4Y_zwP2HcRHlx?3qrex~FE_se`0Cn2puKG5hTluY_yg8oVex94#Oy|-zm%20 zZOm;O5Zyl0? zWp-|YvTdN(B5Ydlm?DlY(b@{B=4X_cXN!%pwPs-0!Imq~M1lY$A7E5@UaNG?IMbzR z_RE*UNmvE)5*eyd57>Yr)tgp>XkuLiZx^9JB=1FOAGPYhNB#IcfoL~gw72JUYh-9U zWT`BY!NtjrM!q)7hX{~%kwKv4x4jhM6b(Jli>-GNuQBug#4s|cj+FbFpkN7ljKktK}q(??ZH~m5#@KGpSocU%WU2i zAb!#vLO+J&4Kg_X-%2i?>IFo9#qvc*{J>ew2^nM-^6Xu*i z>{$)CeHAyl_HaL=JD6K*%h1Q7Dj0jP49GKS1H0edx?C+WiWwvOML{j;*9zNX4=cHc;vR6HehS*VBT}G7lN2=h~s3KfjeFAMFGgaXtk41q4+XDi(b69Nk?EkUL zj0~B-mQJ^l)d+onFNmpY-jN}q?+es5jZXM8Z^0ZLSm4e>&v#DrIr*rf?=1`NQE0nu zx>j~5VCI^G9^v*R&_4I)^GA`Ww=5xK{N=jf$#tIQeRRBqfQrB?NPX72)780Ozq6T> z0Ssi$KvQsX;5k1f2sUg>wS=0DkiB$3P&tlZu1&Zi1-{iZ#5k8=k1kwjC>JZf?m8T} zVk9^&Cm2yxumukLd0l$!yKv#K@)=qDTKxDI%=3f6t!7mfhD)gqyL+rmHji<61imr+ zG))&oC0m11-yPti6Ov%(%_>4LA?T@Y8T7ppNq-YbX!gE|49FG5gmoGh*)PG_?hgYB z-XDjMSK#>x@>|#E-Vmh-{z=zOax{>fC5axJqTu7Su2%IgZKQbM^9qE8$mZcw&=hsa zLO(v*24duEuqgOYXAY5a{xRAv=3aM%%ik`;rauoIW1cIa6)%0M{E~j*4uO_KH)_Y% z8a1W>PCoVb@O|A3hO=uT!JE9iU>f`3J#Pa1$q6 zpwLEAGN>kho@4h@2E%%4tzfo@_`ABnz2jLw@sB%ExKhMQ;xr*A%gT!g zF1pWJ>HVDpbu5U7!7QQK)`%Qr^V?En4p~~6f2wic-k;_-QEo4h%Ndt}+~3Op-0a1x z@h$Js)r7bFeO&Xp?^TkaJS-AF&Lug>Ros7G;`Z-6y2@j$$|-BA?H%E>VLmR($b*o* z?zRZ2{Nj=a`ipvu|S( z3!_r1&LpQw!?iXX``gU$kdeUb(KCz#G01i{82tzWq}o)pjw+aW!;DfQDdc`2<(#FN zn%3qQ@U>~n5O2%JCEK?BOR#h>r}!Mx`U+G@|H+TOB6WDio*Sy%0Y8a2n-P&mt(L$S z^jxH5Sz>k7jS6lKk_5_w_iHeV8-xD*$Q;m2P`&=q@`@qhL{LSlo41V#v(ogJHK*X9 zC`1QhD09Pw&7(ZZd;lPm0su@F1WzhEFlPw}Q~?>sjacjqRjD<>1I4}OWzP#Yi6^nZ zA9pVZw|~m0p8a}`S7vYG4=(C^JU?zfrI(r{01%5F&TCV~Xn=UjB}~!z!uvj2wVPN^4W~ z_s3K(4#xm?dSQ#_z2jG2`XC@`@|%_r`o%4`mB;n~GRqNO3;!HzAY~~2&#G{cQmy5U z2LMb-w)cm`aaqtfgjl~!T2%{s;^~ZJdKLy%B(pj3p`v>w68C5YzCk_v2Oq{o4-=Da zlWPP6e|}@V>vy%x&e*4@e?uPsa>Moou7<=Z^uoc_>FN#Lfm`+>R=rgr>?9pB|si(4AZxOk(RR)nufiDY*VDiFtC9-8+T9YUfydS>Hlla;hjHvb1 zY4lwdzIEZyDJl$_a`c!g{f(&Jyr*$;<8YHHTGKz3rzb1F-*lN0EnYPyn78cT4mjtIZ%H9i9Uh%RVC}a*nmJFz9E|e05|@^xKWc|gRCxS??>V~MmF2@8 z?=Wd|j1G9q*$=uCe`Y=U-*35v${#LU*j`V=k=V zzAj1vzpS9@IYkYQF2quN_XFpjJi41oFyUOt@`LNGPwNd5CfF0(-cp!_M^(Ncq_6o) zD;V^0Jf5;FCrl<4ajH2i*j;MDWQoC`go(zD?|cJOpZ#T(pm^QwHI2xCDOWM$Rg1ic zbjB|xbVyWBxnXPR9p{(QD$B)48D7zxB?+38h@ZelUyBw(J6r}%&%G(5EvFw<9dGbM z%>QtVIc=pZL-c8;l|;NSM1tRxm|k zJ%Bdyz77?Le$G(8i@Utfzh9nwZ4I|S4%cFx3(iVHIl81MJYS@^N+Bx6Kj?d+tO-#j zFzo{3OEIy^J%7~6yNMOQtUBImGhO1JutgL^gkmo70LqQbs5(*G9TO)XMP!}dkE!MRp|%8bkG+>`qaXp z?2m#r+%-wI%sjW?U~>%A%fdS27tTf^!f9tP;(aX`GmG3UF9`rkLjr}Ol~`G4NQHsD zh!UHod#u&GC>D_vcg2Kkktwtqbpya(&?1M7AgWQc^wBxoeP=|U9?R)|-bk;wxaDxq zTf23LM8?!SPcBu;><@!hYAY@tw!2y;p)cejNwO*XXZ{7Yk~TJZe6H1or3-yKgoiwB zTexzunBzf9P*?h!Jcteu31MNRS5KR{6S*tsQ>cahPa9#UU_L zpmrrj0>38t>^RWl>qR2v@rs!l-ACw7XmBP?4~YEH8l8xzmfsK_7L>`1H>-ZUAUIo6sL1cdsjOq@8O((7xvia@h^^_^tq6h9TW4|n$z&`K^|j@{WNQW??N}g89>FY z>^f(Bq;*QfC3rF^CFQ4oWKDEIuvXYh)EL?Xd7EZpND(M)jnFh4wVa@V!I=1jZDB;@?2cHfdY(t+| ztS{UgHk1^GS}{{VFT$v0JV!GAV%hJt4+L@p?jg6pWj&F?KXi~U0>8)BancY_De*Yj%or_sh$?MI z;c%XiI%Lm>Wx^GKLWrXxG*P2?@>fe+HAW&a{l!FVBdIAw%Anl&d5W?|A(8+3c=EFK zmcPamG`6f=&wphv5nWb3lF*Wc_Qk8m?zYzZ-mS>pIOZ&bhU z>2fh4N$apvJA@cXy<&yI!1A#-gl0>|vuL;V^a?jiTH6o!PAj0t|-iwnW ze0cuv!Le7|o8ePyVPqulr)!&(DV5k26R}oRq z@^^sp?Gc9U<$aZey?#OJw4}O;z+m(*Bi6z5;5qtw8IQD zLP%XPF;=IAcJBEe^rzs~ctQO-J5Z1h39C=%Rd+w8VhApQJ-mmfq>7%?-;F#~#!au} zc-3wT3_0kQhO=Mwvn?{sxiBSFA=4V6w#NipN!s`O^pD+*^Q5BR_d^G~Nsx5mL8*P& zMATAy1Ipoc=5vVmVY%o&L*o#{5ZGGpI(O(8mNV#JdlaM!T)asjsZCH**cXd40=Snl zL;17&42WH1$|shm35=QT!cP?}bqX7%VhrOXBlU6zat&ThH9K$5K<$N#p+`RM+b2N= z)&s$ca9%f|OlbV;tp=tyR7#(*l#T^E(c>YWO`*Mo08xS;A&t=>e93O3QF zPP1p?;78(i(bBA23lrNQ@(!ZIPeLo5`-XiJ+mjruaeXds!A?kd&z9^a0qEESy~7MU z@X191E^Ml-3Lvl0f6zzY&`EzT;)AGfjDIO%COEg8-UHl#CL3R_pn@XMsRYrQuR*F@H>QbL4fO_d(maC|-)> zA56~)3Ps;G#^2moeW~I=J_uC-s-kGFXKLP?3DOV;%89oMH1;Voca?#Q|5+ITfTkrl z7am(_w>$X*GaCE=DbTQ27%g%_-329WdlC*y5}Iz~#GCw53Lc9``_v}CV^ zaLmJ<>d55RC-cnUmaZx5jBPSLp7GS01mS@yr_(Uzv>j?FWH0@K83e>K_Q!la`+8Mv zx9-64bsv+=^`L~&h6xu35-R&lEXqleQ}SpMMb*RE(Ryr+%gXMEOfv(BRTwC+A1Zej zBa8cQ$t#{7r50`|ouDxKQQZ--GDUcIrn_tu=s$3WWYz=aJv2Gso_;40nG}W&|53Gp zBD*VeSlpDEJ71Xx?-W5+N89H}=LT^2r84iFKw2*OTO306A~eZ0+@RUsLNm0cmF8es z=yIc@&p6`;kbC?<@*$LTI$?iR?ubAs5ru4KLK?ECg-FoevG(st^am$(nmtjboChJ-qSMbm5ew z_yfOolG`T&b+&Iz_y^LiAWzonesZ<|-;P_r1dLIN0-V6b&Ge5cR5P$72mYgn`XwvI zn_#S=Bk6?hpF$E}V^3GwI=s=;znKVdOUYa~Op1EC)Ru)#TQ*QCB~;tiGe=DPz6156 zaceLUybdF|cbux7_>xlXQD`rSoYzyKpIJi;duhw2B3%=IXtVMdrY9yD27UxNJPhy$ zXzLXYo^R!X#g4i*Lx*>}a-6xe5_wU*BC4vbn;L5o(riqr;>aYz2|x@X7t;J$Vk_?o z-HPPa6!b0>+`q?VtGIQ12fC~*)ZrI4L3n$)#<<1LWB}AX{v!)u$^ii2>gN6L-4y8H z*2wEpo?Lg-KTr_GOh8n8l*vTPiHkKV6ulqpdZ=S z|6gI`;3;Xb8|u0nv}3zCMUU`}BH^<;?EgOjn4-l9ef2wOX_)M%J*?${(O1DO70YOB zCxL8xXnqt4_0VJum(Tg#1E~J9BZm_>lRb(B;puj2Bl8L`M!ak@ z^Ih4Lpf*U4Z@oFUq<+S$=(NA60SNSqW~w4N1Fnal`dyHI`^UWl={E{X{6Z2x%s=>L zaS%tUWJ^Kvf>{zF{D-f}%Y34ELkg+PIqgyK{?xZ$2&037cKBBG0n8T`xx z35pA4C|Fj;B2lWK%SD<+xOaGi=g}-sF5BPw;ws2ignF_|bRusV7%pnFN`!EAZp&*i zT%e?7(Hk9V3K88kh6ChuZnMy|w^^>*Iik5metjkd2u2@zkGtqDrwt`$7FK?s13IFj zDv}y&53p?_ef1G&KXx=0=pS)FfktCn%Tmqi6ZOXA-#{L=cLUa@8URHYG74QNn6(P0 z4LwZmfM&hY111aSrCSO!ur>30dzZhPKXNG9TXxCE)0A+Fp}HM$F}}VUiVXTUYnuP> zM=^9;j;QM)_{mEpRWw}=8dDwz>wc)8*M!)L*EPeuL>8wpMPtD2PvK%`CCDMH0ZD*B zYmG7w_Lw9E5!_**HkFdxaiqm zd`VQqfeT4{N+oy=>PX{vi;7Pw@UVwap0xn5*6RINy~#U(qIg-^<&wx5If)I(%>V&8?_QjgZ6_)-K>-4iSGY_C@?Co@Si=_pU@9jXNLpLFC$4iZ;K2q*dx4dhQ#|VVlqU7S zCRz3A(r7taF$KbQLxzDP0Ib~pRdDN{{ZUhDIKv1z3r(SYgIi+K&4ZG6yX*jiS=Zlp z9sEBj8W&0 zbR5sBM@Um#3wsrhuPxUz>*#^LA@pX@k6>5H3An|rc zSAd__l!(khpoy;K`~pC`fA$p>l-XyeDvQ{guFe(%I}cC!ysY?ryd@%(Sp10kozS2m z+_y#PnPCD;VmyP*E%I!TG^{JU<`RVZceS2&b%QLs&we2dunwtsu|?0*Vr!WL)(kuc z${fitaq}r^tC0Ofr!QpCY2tL5a-c_!9Vj^Joq&*DypY zOyZ4?6uIw8IDQ!9XjF`WI%ZPFtX^lpEt%2`|(|@*@Jr*p#Swp6ZJM%83uy= zIhqdw|364Oe8@6kwgQhlS<*ON)r~HfpC{+1#SfVwB_9xHtSZ`^uA>Xx$reIVBC=JP zQk-AMLF9A)qz!~Fq`ag}hGGEWtg#Abv6N&bYLV4B@6m?-6xaD=+1SIN_Toqt5W^x|MhzCzj}0JKwyE ze9BhYwvGo&znvLpaFkI?(s~4P&YY2tXVb~GlA}0DNObf_fZ1iiL;HI z_4J7L16OxukaVykA=}8o9-A4cJhvB9BJ3s|XqaK&C*fE*1A|tQ(+?{#Yz8kY* zY`%@bu0lob^E6|NO5?DfK^LzI5jkZdMmQQytNZ^U zm_h#14H$RtAMF67h-0hW^^q{a9^6KyTZZF4Y<;257Fx1_^ml>=fakyKMT(uUU0(~iM}5Q?lCL=<-=Dv;#*Yi5Bjw!O^uGf3@Q zH*ia^PufhJ@(W&j38gm?eI@9s(7UbuU1Fyk`j}#-sr5ddX!d@lo=z^=#BUkKxMWBR zEg-NOhY>5Jb5&!j07R|ng ztnx(K2XG^hHyxCCbE_+g{@wqNfRJI&N-d7)IbO#(12REfL0u5~MiUW#I{I2no}h-f zM?;q?biT6dzOn4VR%)6LJ^TicfRz_kyb&L&yi1=q8{?GqY>i^!l~R9dWX5Q;-JNE8t>Vd9OD9rE&gIRh~ zH6F)E`u>KSQ|KVb`7@K7!X7B@sXoR?pkQ5riYGVnBY{c!MOI*^)1rN5Q`)pk zHzGtiEP8a~=eR7!^dMv+Nci1q2|kpMV@iGYb+2*gl)09MDnEY9qdxcG>+K-@4ZB2RGqD^|zrzaIa8WkC2s8bDRwKo%nG z#12hLPNo{VtLj@zJFA)^hy;nZ9KDq7;vI0>-uxRmh4ahcktI~^74+eM zJry(bYQ)Eux|iox?Ku~{EJBocLiu&>>Hp(7DvTaF4Z`dZV1CE#?YFR6|nGYSluEBi^UM5JQq!UpogRt zMNE0RItkk+iC!*-UQsYWWC1gBI!x##dhpAd z(384FL%KlF2N@{i;-cnWE6FinmsaHLwR7cA!ufAZzkke_CrSlOmI-#;neUM*c*9P< zXSJn5$(YV}hBwW!N3p=dnCokAhdx6`skwU-2^5DUC~tG7klU}q@HeI$6$v3J5!vc2 zD9+x{(A^lQu|RU}2>stDfu{1Eg;{rdisHj=FBmygw%uHxw>Ie%xhEc}$97T?8gXCWGA33(n8&{){)1q+hE{oWZV7MwyWA##LYEIT)hhO9jfJPH9wA(=Ip=>g2X z9QP1I?9HLdtRc}E{#xQ6*+`Bz&n_i~*OnH(D*))UT6!uj5 zB|}S=mF<=&?YIPZvJ|*H-f&q$4E|Fo^1df?*IUN>$J5CW=@Tt*vMfD`UE=t1l)UXr;qr!Tv%k{k+Ogux z4K9&exc@$V<%)hiurQo^Kv27SEpRBBwa(Mq_e=?z9FWk&+pLW#|!wVVeV7Bho z;3ijs^y%}zYB9zXAubk}Cc2j?;fgE}T-M)|UkjWftCyd2h|w=kCq9m^Q&o}C{a+o1uPcIV z#eT88Zw)iZ6JzeCL4@mdd`A8O`Wrp!s^y0Eh;F!)U9S{k!E&}v&TbSkwftw5nFNv& zzJSZ-$s+L3#|dQNOwgsagvvtLYW~Vea(rEI^bTjkF-8~@&)a#a=B_mVEy`!Xp%Mml z4{H|(tdzX{=g&U{cLtW}-Fv*?8_3HHM%nq|V_YN7L`J41Ap94L{rFdNYn_Kxj8}Fl z@iF)eM2W!&_%+mK8Lw@EYK#o#29(QeCCwzJcYRkwHKNd) zCefqnQ8({!p#+Yq(@((owxz9jh%6#unLJhcT%3Co7qh3sV{>4Gf&)V4#%z1vZ z+I6Fp4+lil=Uh5n&_DN@FFu_eDHW<}+1=5IpB-C`S8~;IVb7OfHs&JZ_$MfI9|psC z7q-~(r7|Y$5!Bo<>OUwGyq+*IJy$%A)3RG(z=ni*>`ME1J^h09FBQ2{uDU&yq%s#` zcav?N#bbgHq}JJu(3V!6*~B@oKf54Mc#ay_Tq4}lR~ z!8L0P;+KR5(OZ-^U8_|!XwP((a+sGtIT@z|s$; z?&}@eweGCbKxU97h^Cf@beH)e{FWc(jD&}4DC^h`s-=UzDtj)iNO7@j&QGF;L|4ks z)U?#bKz^>RC)iRB9DDXC*@%3UC2g~t+SeMZ#0uQvVAcipWrRWl`G{z=cis_eNLowHcIwd}|pUDzxFdT-X!>MlPvsz6?8B zNSgBUWCi>o?O7}>)dqy9>Vb%hD0by_BG5NZAAk#%?&-=)RN1+U{F`b_R}sF?i0=Rb zwwy4YFAIl4|UkLgNihwLHqY-USWqubcp_5;^f-8zg<5^^g(jU#4!b*JZWa zHX4MhdpD$3b4^5^;79{&NC#%5k#Br$_SKLs*9>#Uo9ad+pR#$5tE$(EyOJqq_YO`J zsIqxJj#Hz$#TirbPkJKnB)NzCKV!vL)<|O}q@7IbkZ9|ru@h5|rYVs$@&PTe3}juI^8tWno`IC|VfMh<__XQ!H4lX9=k6zD4HD zM`lnEW~0duPgZKk;uhY>|FuC7wzr~0QynSVV}`F8_#TXLgiuidXNH?_P^Ij7hj zu(3^hv8!2=S39z{;bU`S07oMQpD=we!qXK0Y_DYg!`1eXpSK^j1}}VKD6E8yzY`HF zF^r;B{l*6?XsU8lq;bClS^NrD;+L<5)OWl&gZTRE-zgAe_@OK77@`fOua6yz z2`)5M9i%AkQe+6ph31z8w%qP6KVX15q;~j0|pU z$o82iyhW%!Kzr5mqKF%eEyTfiF$+=l6CN2}H0!o?L*td{^fyEVIge}va!FD^J7kRSwe?QO5478=`o_h`;a@*g-R<{6&Xdh+A&!jPP5is(KbvD*J0i_&uumS zxXJWXUZ+!oWhuvvzbBO7E9?--{iMPQ^sm;lm*@W~nO7^rZ;a?R_sD&2a2NbVIUj_Y zpf*Elt#l^DZ4To{CK#XF^c{OyNSodohW;vpEv7Hon1WASvOUn^%vjbwt&P5O(Z8^_ zT#MS!T`*#({k->=3!peCFUVf}c7KCLqwe4l#=N6%IlDd}jszSHRwLv+#==vNF=OT3 zzw&&uN5))qNiZYiHM3B99l>GwAB~N~i4UYX^(N!}v)0u9CCxPOegBRMk z7cuoVOy1yDJHTac6L8etc*~<{ZmnufUjIR4a%9hQtUJ|RLu5uc!8&M5yx zO@EmU>HqGYYgvf~=}Y>G=@E}HHevY;FD&|f0P>)xE>idce3G$l<)C{2vY9liJ!b}J zY#j-yiWA&TyC3C1wm1A(E`NQ0QGrsy8)E8B7GRCtI)Ss!OL=EHgfy~^7sgc)dJ|9lsOr! zkq*YecWxH=3-CK4Z+^Fk4Z1b62TQ8@`;mkdx*H(GDHE+#gU(21ozWF9(zb25k3%+f zh6fS{7<=A7oV#tBqx%0PH~>Hx!cvKsQy@y)x`XEhVQlp!{!PJehUZ@Ru(H>*U_+D$ zL>0)41NkiggVp{B3E5+xdxi3IEa<>tY<@HePgCtxMz-EczMINo8OJf8$E2S%4sogt zvTuLF*r&aK8e@N#cF64iURnO%e+pEZGXSW^++yipM`@|!tw<6=N|=6#B#J)k)WPE& z2#i9wIeK&Sc8R6GgQ%tv{rh%W*{9LhEt2{9l$tYTpUtq7^I8S+98#`cD|I)f7x_Ao-trMyQN(k zebr(SU%;yINCKn(`j^%gEl0BegZ}?>-H@#AkXcdMLgc~tau4llrA*I!OkMya?nrpe zjAH;BoyFfbguIs3D_$Jez4RSWNAhf+zt$^RKiUd(zlFE`Ubi;w%sC5IE{z&l$0aU} zHr+EB4-|fhT%a%EOTSRRdiq8@IA)%qp$h1UIOtt1y4)PpYY9WCH-t%NRU2u8?9Y5! zm)~w2mx*F8?pM+~*6u~%TV_8kok3Lfk?z!geZDk3rSCQaC48*kS*S8w@@;4EdtARz zE_FC8AyVMHyn+2}XfoUX?GS7NXY=ix%&?oBc+^@E6**Ex*(I4t%a(&Vx1-?0dc8?d zKN$?ir(88m{@9$@l`H+GbZ%gp0;>0#dnJ?LDV2>Ki_i}aH2V`DOwh2Uh`T~j*w~i% zdW(lh(lmyg&dEZHv}|Nta;aId6)mks)|sS?!8#cibulaHt$~T*5eK)8Tb0TOy7@PY zU)cW7djx7ulMrVuHyELHxM!AD5{ikFiq(rsByZitM?h)hY2=8=aRCO|YGr^%whx^> zp-yE=w_U>^+tx@q13+JX1mfyTOLUD?DGn3WB)5dwi@J<$V&(;tLWKz}O@ykP^Vpye z^cNayr9!ALD#(1JE>3=QkMx*f0RN8N0LrMHi(WR;v7T02*RhS_%|yaO$CIJJUj4&o z;p);YJr8{>QN?0^I*HuO=0a^4TjQ;M6g^z%S)##$1I=mm+*jUdPSB#A`#fRQ+K3L9 zm;o*>#Gs+#VBF*y$w|V@FYGS%4TQ)>a%MQ}Dje}$N|##I2(`q?Art*8ww^^NldMvu z($THK+aAxj$ zSH)!!6F6yD9p5OZ)-x9}I&xjTyMR@Ek;+_ckqlyyq>+P$(T_s(z_99Vz$iLfiAq+6%DqDxT&dkQ<)jCp${Ve(oyz;W)kfuT4jdW^#932f~M__KPGdji`S)+m6hO81xS6wI}YFu4f!mS zrUWo=oBayWnyvyF+sX6Z^H6=9nlS2B0{iMwi;MV;PH3W~`uw#BTKPi-)12$}s zZw@iEMk|W&)53Uv=YJ$o844ycoqw|CKZzRqR5$*7k>1b$h^_cP?dk0A1l9J`xjQ_I zjk@u6Ole_UMVmC1BAfTB)(;TczM7}gJ<;2< zr>?|$e@Am1#q{u+Jfg>{_ksZMBVtyLFc9co>tZP!W(_SNym(g z7+7^l%cmXN+IUaHS^>8y&c^GplAIo+Ku5**xfnYq5oqwg9U`YHe8yyC4qM;(&KN$c z;PfX0J*~t~s@oe}Bq``)$dQ(h_USe_hX&?D-=;|SIwq1rVh!Q|sTt{{gv1-nRCf^` z>+@64U%)H>!LxUaNdx4UGRWgNU$H!&Wo)RX)$jo<f$vG`ZyEV&2$YF~a}(=Hhj z>`bEc;!C-goMVV4iT?`4cfCcKzx21 z2R!C+u5%=I@AGWFRZ%V8Y{_5@S(XQBEg{C689zOU0FZWvjOP5}++e!)={vI$;FUWf z7}|f>4vIWcgYmQ-|1yLhibpz7Ga+H@mI3Wv|8*vIBkX9HYh#_H*Nu(M63-o3@yR(| zPn`c`F$%-8OpVkT)3;sp!PJNjh_Lp7x1vUt5I(c=z=Iu zWY<4yfzaJ@mys|4`!S)|fNz3bE0Wi&g_UKCZL1{v%J9F?P$E>`<<7a6*>GTfFX*~c zWttYvC563xOAtGk(A|%qhpGj@JP}>sWdY=ck3h7LueG@p1Qd}l7U$bnAlkfiJIVI> z*Gtp$L%;jRST>AB&NF%uA>#^W9XjuOBxe@!y%2+~YVpAnw%^a7ryV-1^!tf>Ita87 z@+PXW8iZl11{br|G*QWp5(cfZXR5n?0HC{ca=G%XqULi%aO&@pt~=8K+DJ7z))S{k z8Bg(FJ?*ni>YONVB8jTqN4YaIDbR zZr=C7GV%_+GkV6_a2$>X^q!V;&})I@PfiyPwFM-#BNUkoedkmfqX@e!6f5M6(120! zNy9mGf2h*wb;JUE)NVke>oGP^aRyRrmZvYl_QaHeU%PBgO|wD6V&IRX&)tz#@IjzB zwxO&fElF%4S3}b7@rRqvZt;o9Qz!$6dTwVvsIC1s(IqOecL!TXm3mLw2L=@?;L_|$ zMj@c$y=7GoBn;k6(#gAC_(Fzd3+r(Orw3vTMNme=f7W4J;scinDz3DJP}s$E#K(DY zGT+!)L4?$?72O3vxS;TZkO82v892Y0CG^5Q7gqFKPm?V3?ZAV6MCH(6NsMA@65mu3 z<)1QyN;Xb$G>MH(G#w}6{X=QP6V!LkyFdT{s0jxPF;f|p3oJQ&vOa+dG_~&%9vBcf zs{!0dlFNG}T*_8PWi0JtQy{v=gM^-l3yig%#CPS1s+RZ#Jnd=-gnH4~oH?ls@Xc-g znIa8pPlSi(>O(kI@=`TEpk(>_cw-SchwW^U`8B)V`-Kh5DIv?Fec$JptT-1mgu6ka z3h``LLjSC(P}LsjdZ-S0?R(OTps!sZro^ZgYUzeOyK7Stpyeg;P7ep)$4*Bd1gyem z7kFL}9&Y;bWMX^ZIHyZo7wFr64Spfs?Qz^*Z22(njxi# zSL&>W5XVyLTj_jM-R~=JrhF$2KT$Rr8gR4GWQlWe3_F%5tcTO5 zEyTPy*#nOD#xD{s)TBR$5A)I2es5@^r|8ULY;s4u);Ahm{M55cTRpw~)c8 zz$5;$O(@Fc5`Avm3^o0Mo3X3AISm2w+e2mZlW9=d5@{GR3gPN{z~;pB+(5_1-e4u` zzQc_v{LY^h7y?b{AUz^@YLi9eG)q!`Wv1gZk7!$QL(wOw4;pz^A|>)vY90l&qiYH$ zl*7;tVn|(Ts~iG})?j3D3Q;=!@2D*V&gW6 z)c$fkRs+7YjkAWWL;FY>Y3r9*sWAs@s2d?nnIF&r|xEJ?d1A5hP)f z_@XbT-!K2j#9-km5g8)fFG!6h0kR-@j7*8_-)EQO2CV#@iVZCg@NseYf1}7g(p!(8 z7=`ldBF8*@UIf?7H-UAl8p<9jqft)znr6mZwmfry3KD&c2ijgrm&rsd`iNv|TV zPSi+?OGYqFhAcdXAxV`1Ar{HFzPF56Q-2Rt^AJv49w(5md+cN+Mm7SnHt7yI9b=+^ z0_yD{?Mt63cv^FCPE)=VMnre{8`3MG%86bl4PA8z`X69IpX?GaGuN)r_1Ltx?ey!r z8z3nfrR%GT!O!oTfoLk%t;N@oa!|7n^YQ!E76BX*B)$M$xYFWE_Tk5nGWMoh3NfnH z4{^`cD&{%UTe}rR%fAX32K*9z`mJZ@5GV0<;gBZxt?TxbGwqJJV;Qi?fw@WLTj{gr z1atFFba7pc*~Q$2eG!laAo|-nJ}DEr8q0L1hl7nx*_$sHEfAA9o19S}w;uR#&Hlge$C1XhW9us}$KVY@mt5@xX zy^^K9>Y7q=VZFV_`e^d0MN)^iZb2O~8k%HEBzLuxjx595_w;$)eX}0W;FHfYr3;{# zy6^)%EMfwIjdv6K4jv9N$cbB_TIb5e?FUJoy%<;w#_`Eyo85zy20`NAU(s6qhtIm+ ztu!6iW;WYQHF?$mDO;G6IZKEpK8GxM(ry|}8%j4aUTUdsL&?LZUKrRbQj`jRQC>B4 zpFvs02=LqqEo}g)r&CDN3d^|0gF9N=c(tG9*%jnL5Jl0gfo-{0rm{1f;YKc}$e^lbr#!@_3ITj+< ziFMPf36+f7W2%b*eSTRsy^$(vB&k+5v@qj&koDsZA&i9vvc2VDhRd@|oCuKB@0+_RO!8Z`up#i#+B^D!KGAcq9PbMTQ-|!`>xytW zT41baWra731|ebtCk~0yT|nVFj$UhEAc&Z@QO|k~#7Tb?4i3Bgdx8H+PqJEeiZhd< z`q^kEz#m-WUW7k7#g)a&*8u$*=0H*;kJB$jN(<)Sue};*h99Ts3O-9nEed^$O8DfL zSDnQnRGiUN&MT&(Whs^4`JY_KL`G>POuHk~?i@FVid0VwfJ*<0aB|q&WCH?JooD%F z-JsLI)vK=3I%S{v0QdY9Fu&{J;RJ*;8Li8%Jw}ULyYS!yA50my^{it zJDw#te;ByOL+jib2PYFqCADswe&Mi$uSXH9qWi5dHp*ccj9Lxkyb|E|H_}G*twgsi zKQ6il(JJXwVa25@$_bYTB+|>zeu0|D)X)#*9F2V`Z1mS(0o=oc1W3;(m{ML0?%_5IkemkRtJ>DzB<(S;#wKt_bwtRMelDFB zbarJhARKJ~uo54jG~2>fJDyLCGR{DB=X7}mnI$EdG#6%*_(@nTt zA?ibs%xLqrM_VytL9oLdEg}NI_K%;i0ThGF8X|MmsIv(c^AQTW+odUP1L><$2?0_m z7S0P0RT_b_epUy3kv~6_<9UnJc)b*5jf}p?x*Ahrj>>Hhl!0~EFcq0U6f(@f`d4#- z>C6FKe=!!9LlBD(V$l%gU%f9!<5jJAAqg9<86I$%W}0rsEDJn9+eIoEu2eAkG}7TV zWWm$+vY~KJ9*WZ{4Xa!S2&?$jfzEr=IEdY>mr8{=qguVMQ;X8PRpY`DOe8|;mVr0X zM9w&iPdpp03K=THSOlK=KhQE$aq75HQv8O0er)#9+Mz=M@xHna;6xFXN#vUPO2yV4 zZ~zCv8MM%J1HM7fL2CicVY^i`e7>O>jqFRzP?3_w3Eu5wx>LY6ys+i6xKGIN3UeTC zoOzM)%|5}*-@LF!{Lgfz)o4H(5EI^#gtF}WOlIlA{vTR|??tZMhDPT=DIV;I*^3&t z;WRtOHWiw+qQ_ki<}`x|X2kcq@IjW@f@SWRzS4-_Cop=PT_W*|)^wkbIHP7*6qGNt(Hc;p?kvnCPI z!YUW-H#MDk=~gK}#zmU@AZ9|H#=Rs+oM zSrw4x=JLg`i4q?k(5%;^lm$a|IclQDmH&KlZex`gZ$I9XnloB*H(~5%F1P%Cwbn<} zOn9t|sMrpTO#c?Is`IpkMqhp@j1CsMC5A@sM(jS*pnb_Qe~=)&5&w!TemusM5LVg7 zgr-S5%R4bWU}=FAT9o-k`ZsYN=-=JGDNloDXG49swdWIZEM}s$QLrwta1%&lMeYIL`Dk!PKFk-69Ol>bFcUM|BC=X zZ2iC%f5{}XxoY`7y{w9Nkb-ncpx?u%83yy8Y7qyL?|=bGvO@2?U9{A&$vBKpSqxrm z$C+XsvHzE)mejxiCZzt_gSK5?{4z+UY=i5&NaVHRy`D z_T((>%MxQ`43;wg4G(-1e~!sv>+oqr!iue}afXGJfKYa`7pi)p6hTP#lt9zvT7myp zLEt4}iQ)_fOMrswYJG;Io*SY>3xgi1w)h=T3Io~yERtv)SPz6#Q~hJ>0p(_IcouHB z?po?-3x%XHSL--^$`5xm4o?69)7b4LPzAZIW_lZm|pNI8EAumLCew`F&|f5skh20EL(^LstzctDHSQnd@kn#a(PHbwok8& zKvky1FObH%{WyfL>@snb7t#9u)okE4nm=$(*LuHi9m}|qv=TNr3Y=*4)lZgSP6DH+ zJQE$rk;TP7L9}|<8DbEK>1zafO>AU)g|scr_er3}%4(fJGN;E_9I2C*?NUL)9FHH? zDpIV=e;hZ7Tw;^dXVhcGwdB9ModuxN0X03D8g=c+vX;KXpY>ksX=Ycz-T!)EqC~xB zWc~fGC;FTF?H$C!1E|f3 zx!MEeq89q53$;p(Y6k3^0Ckh(AJ>{>lT|TkH@oJPHb8nT{O#4SnfvML3inmsT${4T zD}%q2t@Hbf2{oy;7U`_#Ecbaxc@VsY9!+Z#K<+F5i^{heOh}%;kn0j^pQ}37opGtV z9(@y?TbJvJmiJzsDT%PR+Wo(rDYqfgzruaR=9L(c)dskHHa{CyQkLAGsBpL6m7BLd z%b?0gV6&kj-$5IJk&z6dhwA7_Y>?)Pmj?_eD$)2pRujdj1DI)tld|HAv$^+ZcD1i) z-cfd~DRUd*pWdj>G$pym4RkFm>w({bYaYw~8~L9KWzLCz?>E1a#%0z()6$S8-17*( z*MH#Zo3aK!pg=5p@X|`gHr!RuvEQnX9&H%LntnLFEB~5N8rq-A07i0WcX&a_7NkU> zf0WQ=BryM*r}U6*NFf<-;R^$N*DQqsCxO;m>dyQy1BMXw) z<^0ipaO|%rJF_Q>sMOxbi|n@9Av4ggo8Y%)i>85*M#Y6PHs5tO%@%)@0)UvO7=)u= zOJ9g#3t&nVY$c$e;GYg|Rq>z}tu{Tp4f`t*0C|-QRovMvk~!&~AUZs{gr5NkULXke znn~opM8Oi%-XT10cO70Qga$hL?b}B@g_P-hX%oPYyePBFV&le~4D_oMH|b^l&HV<( z{zJOv09c!>;_ub#YwHS5oJa3kb^Cv~679kce6^vTbi#yqAyX;ZD6swfUA)m>%mZP#&FOr$0Be$1VQ@2dD1_L1}n578Umzz)er1?dPm+9 zP^&>IM&6@(T}0!p(8V(i9uh;nQT4(xk>J(v6UyrEuDcVLFE+*7(oR(x>9*mZPo^1! zT!i?DZ7)3m_KSb>g192!+O9BRE-thYFk&>B!v%{6RZ?2o-%^ zt+B;-S--0bQ_`_|9bSy~39Wfu*AkMgit)z-wqy?b)jNU*-#D#ngMq-lS#{G7^Xz;fevqDVQLv7lyJvn zslrw`HTh&9n;;l!VI$+z(n-Rx0@C+Ybo>Kma_xm6<%%Dv>eI>e>->4Pox zNg}e}a{dGIl^++7A1b2!-{MHlih8?4ITgI664z;V=gf5f5CpqNxfPs<+30u)?~0n6vgRc0gs<`Ak2h3m3?Fy{DzjTnYV;x&{;CKaf9$Hr-lPDwZvJ2QbC8Tvj&((L#5&Ao;6M6sm+vBHZC8I@pC4R|3ZRi# z2Zs|l(=K*#dJ-8rfJc7&qPH8#gr4!(N3wr2y$m6f%lIWs``@GTu63?%n9MM6Qr98D zbgxP7r9+V7&&)gD1%Fot<*IZBayA)Bg1qNfT&E-E#6)>E*)^_Z=$XaC=W_f?JbVj- z;;{ERctTWd>zr#aOJ4%7T*w-IUfUoIQGNAWXOnUmvW^<4c-SC;tbZ2u^0$*#X-2zs z&S5lhQAN0A+UTJ`$PF}P$1W57n!88;ereJ}9|i1zIiD5ya4W7d%=_;KG|n_WK~>E& znwx`e+b5YWZc=WTSMK&9?p^*U4C!=K4k36#@f9e|-87Vki@&~8Hfe;j;OtP_L!$3+ zX$Z^L7@kWdF(;Oe0ToE z^Vfq@BHvJnPQbbM+`^UOV+|mxVE4(R9P5gVK>79O~@9_Z;bD8sH zQ9y(~k8cW+OPK)1L?N)XReRCMEJ1Fp>URMpW_9+5rwfG)d7sFuFH&I!oGn1K6yTO7 zYRxSao4U)%QJeG+8fZNt#G~LW)UE#yOh4nYL_Zl3cgFs)a?hoTg|f#fz*1s(1HEf6d)K1~m=e=~d` zquv^T?#!pdgK|`$p9i`%$b9rYT!v1vwG0(O;f;n{yXJ?7WjGyF?gaf6#@}O6Qa%7i zHQppuY4$dgkO~IQm!NKhsPe$vF-@Q=n;x+XRAxQqTk~-Lt3qh0fbq22F9S#xFQB8WrB3R1eHbIASSYPdD#{>;U)}&i+w&h- z#sdXJ3hBygPa>7)!mBM=@q_l(HTT+Po_2rbwnRSM{1l~at%`;IP)6&kq9(U%dESe3 z77Ykie5kRoC&5X8MMeo7BWOK@V&F7xOBD__$_`XkqCBs{GmlNmO<4`23qL-#v;A2@ z342I3qjNSYwH+uh=Xqlgnaon`_bIb(v&KrBC+x#jq3^!M!G8qslb(=f-nTmFkMj{k zTRmCwsNW^~XG!-g7Dta~H~5=n{iU>HpI!P|=~Rwfn*10hisY zHnC9^dMagQO9YsnPYrb|y$2r(Jpd@$Co~gt`h;&h+(qt)a5i4J#Zey8nY=|bnsOm@oXb4l0>cgn^ zSR?-pNu=Iz;^%kxj;l`xeiFzvc8M4)7Qe4hwaGhI&o0DveqwZvD`MI&3TJJ#73(;P zn~E&ViP?k+gtZ9UITuioZk3?}YAdT}onHfl(=Y{+6R*OuA#@cnnN8_5YJ;KpjID+U ztX$Lrf-owQmknhR+wAl%N=IE8)T-(}83vwH7g)3T0kr#W@4Zy12%EJJSwu6_hlZ*f z&v+r92a@-t-LrQ+2al4;3rB#=O3?^x?Tf2>bT>c7z|knO<{6S&p&#f4r}KX#$R!LC zMVM3f%w0Ug`(C^r`17KJkK{{8SE~Ug9kc^4gFkU_sc+Do-sH<)pQ#xvxC)>0y!GYN z@(gZ6HH)H|3r^ABDNClKHX5*hNd6y`%oMT#gfU;bpJOy72|@TzXilOoyJoOHns?2< z8blAPlk#a~P5qF^MAYXgmOAfFY~o`?Ge=HNyO^M-YHPDogp|uctL>SwWMbD++(3oX zTIE4!2^OWFDNfCkT}IrTYA_;4CtG=1Wj+h-P^eP5uJ+6W%pdgT6yy1ilu>J4pEru} zUvR%R{bw!?C1F*t#S^f~?6Ot7lL5)cG=?Oc ziFNFUz=ilqV6AdSf~SpV70KeJR%DhQBb)Uop_q#0AY0Rb6b-kH(o&Su z*%)-LE{yuOp-(JVKX8``rru(D|7Dq4ANM(@ipV}r8Lx~LSfTG#jQ2q?BAXcQ?C>bs zU5wb|t3WN3hQ3Az5&>XYnRWJh0Q)zltd!(KhNa7GttC^NI|;mr*Xj%DEi7tX@L$;9 z=yP8nwWo)>?F+u6l~8t_mRQrLLUJ3o-Kz&Ae)jyCc90f8flzyxfp(2k!E{u>4X7#( zgw%K8vKG*wgf%cYUv)lHRgN&5GTOUf@2H<9v9Fg&l24vEmwg^J#bO`i*I+LHNM;mS z>V^;YBo!`U$Aj`u3Q2^i;^>I8yTjs*h2b|CP>{@k7ZF?3z9k+CX#SFkM{6{eOl2UR zOo%%V#>9Uley$x18lvJXUAbo(+{^Y1uUVM%v7#1NFe;N0gMZ#Z^R&u=J!YlTdjJr; zZ)r&K;l8VhuAZ8PF7@-gorirn)vU5U%LZ4h%n`w8FXGM=&j?>~7zk?gkZ4Wtz&`+8 z{r=?lV)_PE3SxV$f2K>^1aULf)=1%Q1S`wdOVQrnF*Dw@pfw22)K=jN!2Gbv{Omog zo+bIu_{OciGt|pdu9uPe7COB+tA=TXoq^LXTyWwN5!Ng!xh-PBm-QnG9AMjey+BR9Ac}zjsp+G2gP9%#6196CM?>m;Px@ z0ew+6YkjVXJ%-WmW7zjfQQcNbQYPzP6D&}0jj5dX1pgWPwUiHoFn@u;+yYQRx87i? z)p+XkU%ceeth~XxG&Og~c;u#LmZ~T{nSdzdwZG3U432i~oI0#k zr7V7}gmS1=T-936UjKO%**7c)4)0}_1EI@4S~EDI4l%KB56uaRPUHD=SF4S>_pceD+1hUI22*HoAaowkNk zm%e*b0d$F5TSt_~k%Ip>63D2y zgg8(~(%G%Lx1hsHvY2C)f2*danJEl2>VP`iu*hLwuLYzh^ZxLOPnJ5GgLG`|+FKYX zCt0qZLN``XoPo|+VC&UIs-foJp<%{QK$6Don{?ePo=ZMwC zM_DBy6jV)7mgfdH!;N=Ey9|%Xj=ZdQ1m2$!#JiC zW*+F6uJI1qe@o%v`;UGY|ClZEir!6f+SA#EOE+`P8{DI{+n3X}$m~cGcO@J@U@(jZ zoR=EMG2)4Sr!g^dmoMdE29t>lpW$mwbDXjU;eBypZt$%aJL2s=j(gYgokP^MJ2Y+e zv8KA=Y@}kTqsOypEEzt3pNCn7bgl+CI&?)-8_exrM;XYRBd^=L#ZOzzw8NLfRm(=Z zilWTE8lyHLOw84|)y>A}`5H!=#prA!o7BnkFFa>_v5u(|9mmzXHjFxv^_UdhHb(%( zfw!*bMs@xXjBku{JcBT~KrN=Wd!LC%OAa|>2+^-T@gfb$@f3V-qwnzH4u7>D-ywP` zpy;>qX*m`ZN5tW6Ju-S_Vu02}w!ymCNLA-2=@%R-)PBo2`oH%#zQTFOe`?Yzb=lQx zjTd`DaG6BXHDoDgU^z3_Os8}1_Cmb-4tfm|+VpbbWI4v{h6X3g@jdo<@4(zL7Q0c+ z05t-L$iVTq)w@P~HiTu7vvNBcCwh*?-aE+%!qqW|Wj6)VId-r8s7Nj)ioiN!rJwf} z)BXu|P`)uWlIm!^^qs!#Pom!C)R;akKB@ahGcCnmt!EsayZSBHJD9Z72_xw z@xus7=a5%21%OW*Z~T2&=uBRQlwzygfYQonH-;N1fo`SD1<%1|=&b0HFBx+-gOK;q zq+#&!pRX@`TFB$pt|R!8l&j*PrJvduCtWO#0gC}N#{48&5bcmt^b8T}dK5mbL(LoA z0uhVbl0q%LlR+$FPKnT<^i~Dx-{TahD8eR?DTscz&1oGn<+ZEj3olBXZ0#qKhX;0} zXj7LU81bL|zTL41xfZo2gVU&K842XvkIOAO_#GllTan@MvRlB4+ztAa?%Qjz(x7|3 zp6(4XW5$~BR-;;`H4V#%$t(#!iq10Kko!+c)rE$1bTT2B24dP{>mhj^tjos>`?P0O z$adNQO@j?eXjDl+o-p&kj>AGA4|Gzijx|1Y;ob4d@l)CS!Vy!{LD=-=xTyer>ltZI zD}Cde(pdn-OM%1pbBQl>gcFWI9j?w>W*)t@=ipKKf|P$Jy z+9rjWE>$LYsxs>pG+a&*68V3!7a@Gu+gVKggbzaEh~ z0ixz)KDZ1;m2SiX(+2~M7A?%AA;4Lp0a#0VViMYT$ln&?fHUtbaO)82%8W32rYZn_*)COR0000000012dh(oAQ;HUxg0|>GEzdx!LvnC1xxpS} zqLP&!i6a5i_DR|?nEhQA_TW{eVi8eV+|%X)KK~fp?ThynYH;(`p`ON3u+;e$(~F6X zi(_0ol|B(QL6Js|~Pj~JPyvAj08XX{pRETb$9?hR5JRPXe_wXdmSU5vL&)d+~-{_?)T8IDSo9ByjS0k zXcN#0N9+czRKq3}9SZ~vYo&mfitE7_s5|Ih!={Yx@N@&oCZ1&V(bjaJTmqPl*V0OaT^POetM#gx0sA zs*yY?aJ^Z>f=nDO!HkH-p+X?Da=SHY5Z)?L10O_`+$k1X9h9PIH=Isp=m}n!naO#T zRWXu7d{^KtVVaiJ5o}_aUXM1c+;t`rs^F=|h2GTDVO3-NVn4tFZn?WDUG7W!G9iiS z;#&uv3~K3dChbhftc?JTzpjnu!j|O9+56HDUm=*DGx(z@VZq9F@N3qnB)Bf zz-?SDKWy-K;2u}{>%p0RPI;>+z@?NF^Hk!>M7$!s{y;4RF*|ktZQkkGe9IynBFPlK z^!C?GtPlSlF@*W*Rt)e{qR&eYzrSwl#9F-cS?AF3zyTfM-=+-X6sz*jKOb{0JK#$< z>W}&PLDU~a;vls2nS{7JK86TP!-FE%4N9w`JxAxs6!t|}zU2vsVs&c?gkoF6eb;Ai z8J~rff9yqD#JQDd00000BX>(?`jWB=tZdTMGIR^w5su0gv2q~dxKq6ZX=J{mWlGk` z;KU)a744HL@m0Ns@xX%LFR27$|%)YNX#gi{(ip(M-49fb)E4+5Gz&dkt zRlyKcU(Y)U;u7@s-tYI_SF$q?IkF4mGp=<$uVuB?ns@k9?Lw4lG{Gh!wu5a7U3#5+ zl*yq_@!e&=2SY!%M)P4yKdf~uF0Stj0VD1^ZHZ){4#WxUxJe(j$3qzu6Byj4&6kz6gj0q@a-@?;*bEoZew8(Z7SyGz_5ZO?H}NyA|K}ECvjD43nVruIh)zrs3K*8 zSSFx|c+0mUT=3lHMe}`NjWXeDbSSwlsdW zI_wd%mDeNoChz#uREpINJMhg+bIf>f)|h zGA*nMcOL@Q4iKh3HhdyAKyW#-IQt{`1v#MusH-@Y7{M|89V05Iilvd$kN&YX4qb*P zZXrFhz2|KNnHn3N+=`d5UB2qQhj4gzEW9iPkGU07Y>3<|E6vR}DaLo|uTmv- z$`31Cy?s-koYOM&j+XQ-fc|L-D{kUiX|Fy)x+m(Vy3(Qc@VzJ`xCir-CUk?Ues|Sd+DJA5&|QFaHKZLgf;k;c{kuE;rOsdB{}v6XeI^yr*fTSe(b$QjJL zY_8?>=86u>M8_yg$YGmXv#EcmlyM(&qg|P8HFtepP)692W9kVESW^!R6Fde@!FfP_MiE{H0!)C(RDRzarBLHNN!P9 zjzyCxHXq6A;gMcoW*{l{hCQ#pv(*MuNxs;{*TdTSpdHk7cv(g_@&=pzMtndyd-0$K z0V|Xk$YqV@xB%Oa5o9`)OB8r#SmT@@w+^|&Ie89fm=Dr#YjCN)>gULvu(qZdG@>sik<_Uvr9NIBQ>4bWV+1+ux`2>CJfVv+fb z6>&3s$-Ay$t3+I6u`jz+Q+^=L z;VgLzXPQA!A^#&`b_s7>Fg-VSKyU8EvDhaE7!-{NCv8ovHv+#4ktFj>mxjiw2cXgC z!q#ILT~J`ND+Y}WhjKWzB5xVm&!dEDDll+W_OrJLWqxKu`t<1x*AWL`GeXt0 zVVb6M#U-obRt>D94ja3RFgFxVYy8zkNDH#!_0k8N>oma?wlh19CbaKK@~J0Uh}opq zGd-TD=@+O(_;;cL`&862&60x<+qURVIK@c|mW>%L;b++)#YWUAD-+#h9M8m>S!qY0 zKgIF5|TavVS5Zy(vrUw;8H{$^lx&5ekE#unk<2lR%P8}_B=Eej*B?O0r4`@C! zv=s-DX>qJG?Oy-SJZi}qr8SU+k}b>e>G#|P*@t4L!!St{wr2rNk$81_sR%LG$Z9hY zrk!)zRTW3KnaGT2n-)-LPI3Sd3kC8?w$B;6Nb`);W~Di>dFXti*~zayW0NgafE18t zk_54UZhuaIkG0Sh`FOtwJinb82r-B6g1`a5=T{$o*=tSV4J-5~>kzWxa;7q>G`m)m zunL~dn4@>`9mI-Aby{TNA|NPSawv-|_YP+0lqSMp1(WOr(_2dSh8NDkcGT2j(C|~+ zXZz4twB4S779+3BSF2Y&ZO-L1r`L4NeZ>h+_!ZgTe5g)RC1RGZ^@}kYgFN?ubl^= z1O-`O#Um8&O>DD4LZCH=M+3f8uwMoTVwYIjlJ|z zvQ!nS2_@tPxRWA-kL1=0tziV)o+6bOw7hNevDQNd1qFD8sN8H-_r6XuDqnLO;GtoVIx{L|QS!S%r)lPEXIoR-hv{5xF$saGxuKC&R2`V3nb-!E+4UHni8|zE|B@ ztI&)_nN|2Y^$C420$cCx%QOHOTkj&QWpE>`@~ECvMf7?j;HRFaxv%>(mVChzI|0d^ zp(~rE*5iGC+pv>49F`9CcjVoyT)(Hnn)tTnc&5@Ndrvjbn_iW0$x7}-fvXO3a z4g(by#cD;!&DXs)AoZ&52*ZA~6&J%Z^^z|dI=>z?UCp~2KicYs%Y145?9<{TLqEH~ zZB!%vmv+mX+gEAUs2#C~g`%XeGU*Sv&wR{;jq8j2W$!Ck1)*?*6ez5;4KJcgk^Z&l zxMUb_kS*W`t^owao}LqZaa-NM`fhVlSH}$K*5Nqu3gEPNB23y@E5StQ1~ReYZOVC= zqJXZ0t;(Z5oAu3R$BWOk3R8H{7y(qmy zQmae!y9q3#omhwh%E(y7RgrJ1z>kVrOAvta z(BRe)HSHtBsK`jjjP@pLYk%}3^zzFSMQp|!h_9BS^7C8~$RyMMEe)rylTdizOuZ}u zUMC1iy%e~6%+h$yqJ=p7=D};-<8a9o_f6gEc`Stu;l$zygXP~VA6jqjnhcGV$fL(p zij-mxK!9!Y(;k#%(^R~$a{rU3M=@#5F4KBB)o<2qYQ)qX2)sT+VPahc2oRN6G^BAc zU$9#lHm}>uTQusjg(JI>oQOiJ1&Ig*{_NJ8;@n=*ME!744jYdQbN7$L(=A2!{ZRI_O&+#wqqJa^Tz?0194OJAp}5% zt3CYzbY;fI@d++Q;hfv9r9lx0vwH`d4Bw(ZD&#`ND{+4b=cYUzhgQjw+NbWr^m-o* zcK>&BS@mioCYSi_gyWHk8BptFpKolc_KYct^5+5!7faVqGYXUFkIK0x`qE*b<5KI} z_9D7G5xepuQL&(&IRV;}}Y6Z#`QOhZrTv689ou=yg` zYOMu@jcKXXh=$zyp-s4VGsG7j^k|P_l$f<-)I%8z7j8>!xTBuEfBC6dC1cOZz@=0P zU0@4b-DxFbx z0rd3owA8}3!i+uNosToq*I8b?UK6M2)-z4`6e18}&w#s_e5B6EkXar=HSYt(4djIO zrzLi>o?MYQ2pPH>?Yj-1Y}+ovpo9u#H_6a-lku+iF_f;i$J6mblANss*lMtq@-!5+iZ`d+J%U16jhS1xyDcPCF2K?JQ2cm+Twk_29mNuI zTAEA|%byoxzlgPe#R?9e`n9d?=cT!1< z=VH+zA7ed5GFeAz3%;G>|^JO8&yG^0>YEFUJob!S^T5Jf<+ zfa%aJo(kk*{VfEy7bFbo_WaG2^3TS!@ETE+HstPL!ng(|NJSqf?@r+k3$>CDcAem= z;}m!SK)rPFI}cPdX0N45e+B@aTaiugV;dH(L6K2+u#y5txF@t}T( z{|0^Wz+n>4r1RlVc|Wf7&7;!af})I3i)~kmHDnR#;t`KQHitVFWd|djJ^~;yk4shQ z@*>=SL}c6JLO^x{s?S7=9N7*Lg}MPvV9>sJ-I#hsvf!Sbs8S}cz@w}AM`&W5O zr|>vYC4?23DF9qCBnbnO3!4V`P3z~|Z!h;o@-wPBo2zjXO1cP}NFeNL5-x;({FPRX z{_{^$b#6c_;7NC?=b;UD+J|G0Y)6_eQ3RWja{)};3+KhQkK9lf)4M9Z%qJ9Hx7bZz zFZ|T60rQ`3T{Vi&I7nECcL0?@YQK=;B>qp&*fho2!+4+zB!fF$s}vfzCgOEUsJ680 zNI>mI`23i~uX6!KT#IlrLGKLkV``515#2J$8f@vKSbdJ~aG9Dy`M#O*omOXrPg%Q+ zKKaJ=MDZTjpVl3x_p@f<8NPIur6Y`?U{9a|1WPGcTZT%zW5rA+h`>T!?Sp>LkFyP~ zkx)~bL_{E#z*xP(GCr-SX%)Y^9*Gg|;IAYn3yi`6JT_Ha8AYrnt3fVcyF6NQSy4?5 z`b1pA^sd27a|F^jAWgqRVB8fI zyfwjb`L3w48(o!_#nE;J&RV68$n26D|6-`|J1jjSzxq)xYDQ6TpFZE;*sgU`w3jt? zleqAdf+PStp8zaWatTz|TX3>;+b z_Qo`hXRPLF?G8ncct-`2c6`2i?Ck?pZw_Uol!(69;G8EeET@E4H|OXV=+WNXragjmjt!FxPs{%vb^Sc!>I=?Zg!}9q7uQXaE#O8yJ&sbx4Vn4Ax;Vfq zLmn1P6WB4`tuF?!`N!Q>2U_)Pp29_U7;}4#UAqW67v;{GC6MKD7hY>YKo@m}>pzT4 zgmf4Nl#cW^0$RK+Y{qS@hCpdPyNQ6ybq(@FEDj(0R|UDnIm4!}^i=k?QaQi@yf-HV zm4@t_JFhbDQfq_WmPt0Rh$PcPZf<1sV;)7UHrZH8I}xyX<+Go5B`-@_2yCOnXXtas z7482&Cf^&?zkJJzbi7LCaTw_Q%`9UOtfOkQ&_qU1F*+6&R}MD7%uJGh*Y2*nv%4r$ zmVzM(pqws?2!%SUKD&_8%S0lJG1J~9B{b!_uop??p2-g>>?sUAOMKB<3I8zdlnchu zzn?&>Hf$6*w^?wfLpM8l?!uXz9k?KK&%h4+fjLw0K}I{@3}{swEL$)p`tN3Oo%grD z;09xs-RdU9%r6fy4w{w}^X}&Fi;|`p7;^2~$KJ$Z9&2|MFHck47dD1AgRfa9*NHbY zS%8+e_5m(Y2^oO(+?cDmrTQZn-EIzKvh-Y}8VCfiowIsurzc%8NUvw^ymU8l5#`m$ zRNVnm(D9-gcubId`-~cbm7!s6^P!_2NNj@T6@>Q zm{>>WfVj^Kl({V1Bn>C<((P*>F8;Cdh2+uhxPH;GRRWwQ zBsY4mufGFr3lOybn4sBm{7vZImi@v(&btVd3QEkyA^(AR*+yHy|IfIZs-=2mYt}iT z301qN&B7`0PlyUQk>d6R)3FQ_m?SqlSG_Pa{+FPp$Q5tkrY6D6@3E z8lCLhETfcJ5zwjSQ{?6BwJ#L@+xcoem=6nzDtdRZZEqX56x1K#NA=PfL}?GGoxQ5j zy=FQR6jeeClQnaIKdg}f_Xa9>MEsFFjFKVyNDaRCwe(F^9)dsE!Cn3*tNq2{U}BEi zT*a^@%TCM}j`ER=kJCaqD^G2n`@&@^D?3=)8@pEl3+A7832TF|g~4-9$vYPa-@vKX zE`~y^0G#M$eLa_Q(Klxl1?!-R&YrxDr|~bJ>#Xapa%5M+LQ;-0+eSce-sQ_mJVIpt z?FeG4u0Bt%6f+u><5lPh* za?JER!rL4*UFng?7bMA|a;FDgmyp_=3T&f>J0|zs;Yl}$3aqW(Rm8f+>M7=q|LV#q zqq3eu29H?a-?F$Pyt^O+74T?N(p3OMzqdhDYCy&}ow-GA+w+gNJuJKIoU4R+M@7Wp zf+RB|n8eMB9fj-#h~QeUnV2W5_1^a=F;EBY2*xWhIg@_X?`bPo+8ep_!4_|!D)V5f z1$+L2h6Q$dJ6yjl8rctu+q)D9P3jLp2Zm)dedqFCReGRJRr5=;RV}zy^^m2jjo=eNmq+7 zUX0L5&}ZR?ACHpv-U`G$TB&m2kVBv>Co9XTbdeVwpiL6(7x#MN4)yo3DUc=PR_Z7vyBxjoI(|5CTk+@iOlDvVxonXl=I4On{nf{dTMq-=h=`=&(%*Kbh#Nm^zjtE%9OJkE+H3)VIENSPc6 z0K0Tj{3eq$sN!mj>_%zDlUNOiW?x1|Z`rv^O*W}^`nQwcU=@Y_9qFIEU3tgkCbP@X z9%E~x>gs8PlK*Z9_Gpn?1)mShP~bdT+A7BZ$y0Et;JZW6H&BG%8gf@zv}HWo51$4}N{8@i(Ck(jrsT(gjVk>TpW2a)IV`6S`% zRjGOotPTgKPL^8%_IK7>;^Lo7FYMjKvA#MVDMA+AGTMbOP3xo{$B=Ny@;ygcva3%o z^ml2arbzMLQ^1zpg(knWym{p71cPD(kkvV@vois03b)x>h6z#__)V{c(JDEAiOTZ0 zClj@puYof^t);H=#kJD(m%yLZ=SP z0|LzV>0GdY_~)v6G$Z4NLyJI^)`P+VfSK=fK#aJmrTF=-4|YPJ_k8=WBEY_Q4048Z zM{-zLCI3!Wdlnf})LQNL2Ch{g({0`x6iWl?&G@Bv{gU%~U0k?nFU;(*s>Wl4_5{EF zQn@(z_uk4qPx4C3orST1ghWT72Srdq$M@43$VbHGU$7T=z6E<3;?6SRy`@cZaUpJ* z?38;B3fnaHR(sYmqN`rq8JYXr)hc)vU=Q?&)<3m;Te~2b(FHq~C!UxSt{K?#B5}4wAy~9Idy~A|J#1mj`H3Cg zw_@yqwWLJ>ppS$=<%8VS_rT&pRIzV9s%KrF&YHuYMMM8a2XnekF( z(%|X?^0$oQd)!hS0yMYAbRF-M$tsG0cJFq8WmHJ&za=g{y}iP#^FG!GVjuCTgW^Yq zw#>x5yo|U@nA&paSQ>Mwbr6h+a7l%sHE2vOl5|NFxis0bB>gCH31GjAu90=F^Q!OM zZFO=XyFA`TZUM4Nj1m|10r{JrQj65BA0A@>RBr)Ls*| zK!2!b$kfacQSX_D z3~$1o$e4%3y7?d}PB>E~0cbYXAfv?jE{h7PhGQXks5HWU4>!UFSwj$gUengWF0hxK zF`S6agA{ny%|XbcDKo8ovOjGBq(Q${>zOc7(;BjXO;S0h;3Np5!Sh2OcEf<%-segz z0V2gu+>61yXm)p97uT)>($c|=eNCg=alBdHYf-DyPTt;WyE=7`R!DU#fWtGtH|m{r zVWgA9n@91}c#{_(d!joko3QM@83(G6PZ6|#)qH$x0RQbjStT%yaW`ZcI{kH19t#|L zFu-oW1@weWngZi0bLrGs)uJ&n7=@CE?E1mf?`9 z1WM<4f}KOHXiKXC6k1tVX$s`(!7R!5JU52q;?ft*L+FD^t5Sd=!?w9vZ{JlVH$WZ-|v02m`Ny}L1g5nvl#E2Oc z8}rnbI<2Rly?d4(PA7uu@i`0wE~)Xgbt_H{P7s%Qb&;ls^i;$)%tjs7B6{P(X<^Jo zVy3QenrDG{4G-P^b?JEVzEe8J;QYa9_|AX^b^_RJ>YK6G!`7CEr}SBfGVtr45BiDW z1o|}1r&!qzkhE`o5t5uFLWV7(!O|*n2E6}A1rd{Bp&>7}8CTB%nc`%epY|4zZhtR0 z=WwvrC*L48Bfgkv08Yifg+L_VjFM^Yf48s&qa6=L>?4Bw(EEcUTw=UE+@4m(kEYXf zDfvF#&T^Hs$WgUZZ%(D!d5_C;&z^R2SVO`k+?K;LZ` zsGIAERSis+IRd}VJ4;uRLkS#y%&z*J) zKS2@%R1cn@ws-{2bU-Gh(+*&j_QqsT4*yYCF;((k{A{}2b@OxFzn!OwxG_VW^UX7-s}gd3q}rTO za}R0AkRN&jRQDSp8z%%+QD!*lqK2qfj%HBE7x`D>EJ08d(D}HAee$;|WR#~1>s5B_ zwbk4Y#ny0@Hiq5;c=Ea(UGgCzm{J`@2q>PND- z5aQgEOjN3hwgc(4_U5+&N&V687Xzu@=mBj;47cJ{4rERkL^4OTMUgC4M4(NaQxZPF zw=qKyL3*P)l!2$VGP52UH4ky$ae)qxIX@6ADjhJ#jYy{f_0>038@(#NMjd!l)$|ah z?IpX(iWjc3p->Lwg_7gf2oWd-avy5uVe@pypCUP>m60Q1Xe{6QETejleH1k?f~YJx zcuNo&g<|CAO6Q(XVrfSlwR&3mZKSrnUnS+1Ak2r=4za zNR*_*2LCZ;|J5#($hiw6c2Xx2GsB%qObYxar`* z5#fMCSt0Q^^nsbYF;6cl(m`t`3{sZ&$7r%eu@X&2xpsWjh{KAuX8!20YCI<29%Ors znM4kFTt8z5Ho`nsk};P4`Z@>OWIsFDTk5=&h+NRIiNUAgIdZ%?{ECv_ULIST<$l>f zJ$yBZCwf?2PnaZypwaH_gDxQUF8Nr5MKnaUc1ND5dj6G|G}cuFeRtS`6HYhShyk-w zoM+#7D*37#$>4eT!$ljY1ZZmJ5b<63RolnRq^}GH@==W5dI*CQH^Q`1VAS+ae!_Fg zQWUQp4Zsfk@5&V}sySs1wslfwJhDtiMi+?n57CF3mQd#>^w*B_l;JTvGGX0GMl%wnhdwZSs0f{Mx#sxSq&%S1*#3w?(Wo^L?CiG|a!V{wkv$8I^>-lm^ zR@!eI^f-KW_r{39*gfonHFbD_8BEv{ z@>ZDHLiC0;vVzX2JtVqTYAST^>5rr482i>bHW~*DjK4UUs^ge_jNiC0A3Vm%iX=&mTZ1nRTl=Z~f*i-$htFeLZf^J?VQxJ&u zR3y68lk4KAr;`j0*@oD~jjpav^yj4~TT6Z48{Z{*r!SAqN$!S3CC-F)&`u{2)o%&! zc4__GGiyfDyrX#`#WV6r)?0Z0o%Xsj@iHxl6b#={EJKs5pnfEuFDPiF8hPSfWo{xs z6{qay#HQ(!e={&1_J|j^ck?k)$H?cJzZ3%R!8bw!9@PX~?*qGNS`cXY-s@jo_s9q? z(9INu69{uA|LBG$scGAZ)iT@UXhKhrJ${lPgw8koEI)sV+*6_6mc3z}L_8oUFMEuN z$SVkKgs_x|M~?BtDioRc1N@8cTfm5Cg@`Q)o#@u-Y5b|Jm6MKc7XcnP zayP#{PRTwrrAFK7*dJwm+H?*QpsR_I>bJg?S~=&pd$o~VK;}PdC;$K?9cV~;tS3S#0?gHeRmOWE*9O&-I5o=P!=BKVsujuADwk#7BL z>~lJhFt^xODPd3XPWf*C_egK%@+l$J5vnf32ihR7)v~#OKtuybQJ%?+n%Nw_9x)OS z7&sJ6pnJSlW!Ajj7<(lQ>ffuJrq86V3!vBm8y!MpnU^wG9(<9XHc+*C_^ zxvEtW5Xs;H%}^E2rZqtv#*shbi}%FIUdzc&_bKDz25MCS3f*Y@p#(o4Yz_SA?7p7P z5Ab*jq0@|a@0jmm*cWG#5r%yFPzFd|BLmm#!~}~7RuJlh{V@RwUh|%}1f4sh%S#Am zycmcngE9D(h(MHJrpKki7FH3l=ufXGM*9OBA!>5J;5rp1vT3!`??2ytA8VF>4eB)M zVNTLAb1;J+svf5I9jTYi`DHWkC92(h68|;8S+u z7J=RfWpCY_q#f&_NR3JnYrH}H`h_yD& znzt@^b2fjy$#uTt7}yA)-kQg!}@8)FYzMcQ)HAi7HpA zvyq7znBpz;_G|g*=a?y=RODQ}v{~W*WQm&qF%jrD-RA`@(gEY__)kW5y0x3FFwT(iI>r2BDUL1?nQ~)>A;*a$ zK+pIX=??CcDFd+B-~p`dV%VXUI$}o+8+2lzpfvqwl6WR@s0>Ie+%{Lm_xZaJ_e(ow{fpJz;OOXG zYZGO=uO5o4&#m8z!!7wA7O`xrFc3U7?*fN0)7(hFo`Ws)0AhPLI~A%05%ShS;MSK5 zjz`$41ye*)4EbBxOVPfbsWz)rJ{e=EMJ*7ObD=?XMQu1ND5PvztKitEEo_zXrHk4$ z_fQbKV!Irn??y6>@asWHDgy8}T+k3M-)2J`hOM`HSRJ*}Jo)ySdldmfiF;0)Nq9#D zRe{9VZQTLx@1m(x2)&g;U+~Vgde#f-H0m*pjArGO6+i#zv0LI|2taLdXaRE%8?Zo( zd~;lq;l?$V+VkN0?_#FT>vtc6F>40zUlBjm9P(?>=o^1(;93o$D|4cT6;Q(DSF0}J z|BGyHl8R2`9e6#e0b&kQ()EtEb9%LP-9;2Pji<53+oeW8q-r;4gnKagO4>qIq?!@r zBn@eZpg3HO$28Ht=J>cUdB zK4-%j0iJ?)Wm!emg@cye!~b_d_v`wN5~3$-(FC~10JQjO?Hv<8odL`cJZc4MoY}fO z77al2fB|lLc`W-iFXkqaj=_~IqMWZqdVpw!R4bb+$78&EbALLKE@%)xi2^_#gjWXr zr580FxoB6nqK^M3R2}dGy_cimQ$t-P1IMU=v~@M3`)FOf+h*JN?1s+$)kR~@7p!rKzcC)wVzLY&<-o8HI{zw`>o&cX+Pb96Cv zO7mWBzQDJ1MD{W?YJyQ%`>+t*R)t!z;c6w$>>UNRycPzeL+KR5-Vgu*z0h}tL}U#K zbj$9hDBs-U37%q~S04M8H`kqC`HV}IHn|2A>~kv~%ytsDLbzEuB@kSVBRRz06DCU_ zJ&a*A4p6_}%7!^DV3%2~m?d>f2AmRnNrZmH{Gb^8gaKkm5<u7~}RoM6D7v)|dDgaWO~ z_EXpotf8T#TMqE;S!aD0+aV1a%sj?Ul*GN9Z+Fn^nXy1{Sg*(gDx%_oq7^cE90umy zn@#fA89>8jx~6pM2NvQ(j%5&vQ)}DP#0GYwtp9Ucdn!lUg6KjuDOmOP7_ep}@MaF2 z(fdIL3tzOipS(cxpJZ_E99U7mhLuWP=2Oc7loQ~8yJXqOh8i5fm!+@JJgervTqv;V zFr{tF3`DiInmf__3%OoU{eN{q6ds50@cLKF#v!sUV>r0;`N2-a5Zv21^FDcpd1^U;J+iIC)N4=_rY?J zlm{Dk!&rsE+ShPYioGi86w&sG75AJ{2PXtqqfpMK<#|wSZoH9$?Yny5U1|TykurZ>aI?E51QgF@KIY;p^SW13+hP>rs#B~t!`GS-b#EkQ+9r*I?r1s*#szi**j#E8vDad8udRY+BYtZssIhQ=K~Wo8ulm;(Us z;gb^8+HwD>>%;oxwpMO$-mnmV1!zr0J5=>{sqitstsPm{RGo4-StRcLw$!E(X~HRg zo>2H@Ybs2F@EF-eaJ(bQ^z|dGlO@F2KYcfq8Z>n8({}M1+N*0EWHQL z>3m|_`;?YCzTf$m`#Eg z!Fa_@#2Z>J>ZhGGD6^*agrTsW=D>(-6wBZ~zG|o|!`JX_`wgm35o5_5oC7)nq~t74 z?b*n`oz6@tQ`(QTm8Q!t;IR-P6St?b1s&DK^Ho6L`|=fb75GJ z^en!vHkvoe_m4PV`c2TS#I~$dFg2tnd(dd{e$qaU_W37VLPJ>#N&Sm9lWH~K{8vvP z?j_Or(ezlTZtSqL1rGm1lZSa|veX!|$2U~15V2Na!UWy@Wgk=ir+5+TbOY4X6#ret!#X$mJ2os-2DgpB4h-^R#_TbK4eR9{a;%43 zd=U4tn~NDutdj;&RYEZLUf0u462PI5vdf43gB;B<01jbDg&JxT zCUH{@I$q#w;{H17;5V&`%t9BD-UZIZXPshh+`1oLji-uhlO#xh0qcJoN~}D2xa`#N z>aO?bSt`xG@`fh{Q>&QSYoQH;M2z@o+1-KI;r3rnSQcWSiVk(DlbYk_N~*yHJOcW@8s`5RyzO>=OZcu#Ayf* z+ScCANR{f+{>HwiF|hsqUNx678;Vr(M=Fc$1C)o!Tw;-2P@Q@^=O=SA z?+dhk;-Laaqmm(h?jq+{#xh?>`^Gv2eYgIIcc-<%8N}A}-%Kjp9+mBG*^u%0Xn?X_ z_#(BwW?gwPO$CgcO@&E7raBvt<;_skei@1^?UYjAfb2D;M2j9QVJe z@KStYz$+<&t6$NJF~n2S2CULN*0k+=0(I(>C+xfJNav$lo7PNpD_lEe6nwHcF;;K@ z8o3W~!k%$NZbxawOn3R1Ik}XV_?e?5GJKloM<7a5VnpFB^k@I(lQ0;dvVLF}F+dvz zf;!-zoll*D!ccwSYuwEzG$-2WUmjf$F<_krc{}k`ce|?uIC8IdMGF3rMPrl!)302O zBI>3cp|bUE-P(uR`X{3ty4-4?3~|_r5MJCBE>!3_V@gAhg2Y^EAF$zsn zLoVIH=?+;Zv7KK4aBTRFEJib9j2aPW-Oke5h|c0K6Vg!RkFB3aoY zA5(`X77+h$ho`+*Rfo1&YTni&)PS;3xFOyc{H_Df^oomAb-Tg+XvT^@FMY9~c>oPlQRzBIYOyjMaj z8CVA1n|9lL#rGGfP$p9T7#0anviuH|C(hcu%t@0eUY-$(2}Vy{4@YTbTz5zdXtMJI zt(DOcr#bav(iHtUcQ`f0h08tSSJiZQR$g83XhZk=9)!Gc2y&Q<>;E6T0PIe?Fhs92 z5o=MSRY}z}XqL~b;)U)czU`Mg3K$BO?Ng|fIm}2CT$m=p<;4{cZuNDFo@``B2*2i_ z6fmZ<8$7Q$D)eO#*V}#nphIBOhYn3CtGLf)KZ&H}7_VGscX!U`=UIKVw-ZK>MvEfl ztWH3?~a?aU0$&L3ur&WGrk zgEV)1CV-&k4v7jPag<>g%R9NuGq=nDCd9=z>d70V@VR@9PuNwrHY4mL1kdw@S~d$& z3zbdZ*E6>PH%L|+A-N`5x*)0c>0I_=d_%ckLa$_n`}d)I${`#wL{*X#LMyk72Fgg! zr^%p}Aq-Hxq=NBrQulCd1lI1|bDHjmq~2V>x|1Pzff<%7i8Fx|@_rfUK4!+_@-dr@ zHSGZlT0Wai%gC#eKnb_bpuOVuJ(fvA_}Ylxx-P|};Y+qmJAEX*vVXe^bEHEfQlfu) z{QXd^oiIQwU1y!OZB|++N~`y8z|-Cu^-*3-wVP|;%lxE%_`@+0;AD7@Wf_HK$Mj}O zkwF?0iJYjfDYM0ediv4?suyFBjmTKZ`>ZFW^_lt;N>wNTwwF+0I*k)LOt)>^5(<*^ zo+<@-l=>TJ!XJ}1^>p4ATL<=OUdh17KhM#y|2R$m1#~-6g#$N zbq^`(9;$ezgl_Q4TSZm76=_E&2r$>*R!y;EPT_-Dmi`tr-$gdWK$44~#hNce-@5y5 zfd?_km@h6SASA0nMhWRMtT&(7?!UjDm+P@ltFOsK9NbOf@o$ zX38kmW@3E6+r@EGR{>pB2Q6P;-*%)l`jL=ru_n(0=F`aAnc4{d0U{x{ zNM*PI(lJ4_*}#?mP&Vk=hF`eExWrL*6k6Ki8s}yE4u}!NVGfkXt8`jDsV%OKRq)gU z!(?TQH_IvEovQ%WQBH1__L!@q_FZoc?IHo@lG+`Vo+&&f>^La{4&8IKS3KBmYCNH? zoX2e=?n#2YjgS#)y1VO*zx$M;Z&n>OYmrdSQM=ZFy1>HvvA4j=6$^t4?j74-`6(%e zBG5Nml=w$W)Z9i-xZL`1im^ql@&`)K_-f(p7-%P|nT|RoFd@Rh%U(T(seGOdcmxBx z6*)Vf&CtmrV!(a%3Us?}p|vPsLudCxSq#;xLBrJl*TL@OR5O%rN*%3Cx9Cg><{bWB zV2ie1O-2(p;hL~${Hyj~y0NINB_6Ou*H!H5CdyW4Xw2U^ac6>m0=B(iAL2haX-%sV z%9L8XcDAOnEDw33>X81nW`xh$JXf9;OQGQl;4cVV4|B+PeEatdcn`X7S_gjQ(ImJ9 zwdsC0k`fR1CkaM%?Lu0lo&sNU?kT_8_xAd~0_8S)KQopJ8kaEsk4Mee?a=;a z(^-!}9zZGHoEzl!v;ab&aat8kTflfD@zgu=j0UpUf33q(IQgD5t(@8rGg zp=tso4~Avxt4g!59+n@@SsHP44S; zqCl>Sg_ykC=k$;FBS^GM^~_4{+U5~bU9jAqnXSpzOuh|BVp#@+*0q>(4(%pdRlD86qDX@mimt;F9d zJjK}D<9w+8Jmp#GflCx`POz$_Lh@U4zhiD&7EtB(NYv9Z>7$zi`LBWO$)4f@t-u|s zKlfm|BeHuWNfkPdiynmuD{Z3ZZaJzvUQR)6nquuK^|oMLn3>d`JN2H@QWv-fspjJ8vX!aHDbDPW}&>!*q?@DT2K=Zva^>UM8k>=c!IHklkE zCzC2QsdZQqCXfa63_-v8JZPVj&a<%Nee5koeNzaw6M7K8rZhG}-`#P8+P()A_p#EiwPBQ;?9_|IsOmM zfw90nCVVS+^9^hJOKftnE5>}SG&d}Rd*+^0_DgwvymTTJewy*;oso+|9Bs8pvZ(N* zyi6EiD{Lc;$)oagxepuk-3`^OSO{k+;?`((VPa+%Embv1teS0f`{m{Yu)x}$8y`fJ z+$k1XAGl~uZuh?7LvdBqnQ9Igi<2XN3&K+;*rzl?;%f+nP<<%ld*+^0_DeXTd`Ls0 zUYv7BMPv+Urh&Fxj<_L}A(#$&x2bfxK!iPlJ{h73j(yqS47LA{4?h4lA%fbqt3 zAsw@Yz#SXQv3-T!zN#j90|=2taggS6l2I}3>}#Jq-;la&t8BkWouxTZ@1@nAhGC1V zT3xZDfJ{nxbEfKUARsEN)I-*Xr3HEUlexExN|bsswTLn>UURS;;;e>ju>M6OrK~&Lx2DP0000PidN}oV>)N8M$Iil zCqTW?80?{27a|TTg*(tjmP_h3RIO~D3_=^uEvfqr_-h*-_5$J#>5kH_YKBV%wXCEi zrQ4Ec=2J(A9(~ZI{!KS76WWi*JWt}5z?KA;IHkukyscbdLPMX+q}<0gY&vqLawv=> zMFm|%8J{|Tp_i)pHdAJP^`vRi`9}pIttK)kXp>%1;9mD)sXCgC1Yg#M9a=6J#XaHq znzRbs9sXBNuSCO9hlpot;_GlBK+fb#i2a|Zq#wL*2mkfN1PHQn+jz6IO(apAt&aNc z$xV_l1sKC%nC*OieQ*958kBl&l^r^KcrdCG24J~5)%AswMXYm|Rqh)yyP#c(^a1Q} zCzd6Qcz@o_q!uP*_{0e>t`BpHJWeZ`-PEOux`=o_C_8QHWZx zhOoE;nkHzWf}#m0F2wD7HA2#l zT2ID~Z^(i$aiT(lb6!|w#Vj9v#)TuUP6Bn%QQ~*VTkU(?yf!W->V`KyVQCAIhZg@g zRGNh@U`T`^xCPNh6A0d*Ib+Keg?ibV6F&kHj{~W|000003jg%~@=)<7mgjWO{>yrj z+Uf5mb6=;2rM)NDpNSZx)b$dMU>vrSE?)ZETs1m4;bb66;^o;T>MzdtlmG<|00000 z0GSIUvC`#iElh=|ai!?Jn&03M3}49&dO4QLAlPkBF5C{ki+mmSOqXMWgP<}iQQ&I0 zmE6Z4$>-wW*j4Z836##srsUgHX%c%(?^itQ!EvF1F;o=utFAier#n6@bHp z%nug+!v-={jZrVXhY>|5rw2Fbpxyjhf}?RcBCPwl23q*QhhzspLXGP6H4*jtWH{$3 zr;DL_q)q#niP-0W-eQ}>OFMpfEN}n-000cvE&{_*F9PWwR4Cs?!7RuCI~Ja5U3ga& zJk3s0K?j*FVKW{v{Y80~FX30-O8PE@5UdSH2+P?EcMhj}oC1w?pjhj2b80=*H3hCx ztA8;Ae9*?JZxxiRx$SMO?VTH`^|TT^}q$RYU+QB3LW;_1<8$**nlfME(^gS+L$Z?(h=g! z7DZXVoxQ~vkB_cNe#QyDIp(Hwq0MzW64MD;TM$&iC=!7e0$M(4g0TDFJ^n9CXzB?c zVR0aqaVf#tJ$3T?nr&;fG&YIET9eZASU$EER}O=+DaZjX zx`*G-=A9+_G4+|c5Tk&WH-#oyTH;qe<|bTc_s?hCqV)EO!&x2}>oBcn0000006{)W z&ucPrAL6+`91$=BPiF329%B@=ErS3ihG^Bgl-J#j$gXW-m+v-6RbK(4mBQiS%rb2s65_;f)xpK`1#C@B%?s^%L5;j zy9usRtA9EvQrgWM=dmeJR#k4KrkFJ^36ABz9m$eljodqsGMLnft!-LXMwiP9o1zpn ziW}=^%@teEUd-0s@2i!P-nw@|mPnzkY4cpdPaJQ?FVH4I23nO~HzWXRBH>B^00000 zei+7=kAM#Jy~olwAZ6RbIR(OUyzOR0;F_zEq0J$VaXtAtWU)+^3=eWmJSu#m$O{pu zLZE|f-I7xaOYM%|Z7BmUu!C;qrLS)i{5R`5G)R?;@ZYTH(IQqa!+x`)M2S|RK+;&b zDkhjjFw5D~Ir+x)000001TDeBA^_bM!o8=Hs2zERSiikNrl7BIABhN^-MGp={}WXq zwo1GXE!L{?>W=_vb-q0x!1*2eoQSroZ~z3L-~a#s02A80O=|B5HA)J6LqICotSe@8 zFb`{eb+mq?%I8oV0%Ai ztuJhP9|fppDyS~ms}4sH&q5GKr3tdO@!E?+3~YBJz7vCLO*l0;c)aD;L|ZX!4lnSO zN(0heZ3c4Vrohi~AJpa@_`pwtkBX}`8wkpeQ#4l*&CQyP^V6r6ANR40V+jm&l*6I% z*&-i|i5{{+#P`pn$6n+NM(sz?q}EL~x_#{FR3^Dj&h86J<*Z_U!fb!CsPLn_Oc(E< zaFr?qaHf^VVbf`8Y* z?I|z7YjV9>(@0XjHcQyBX9)@Ir5Ru*vp%Y6OS-!CvFh6dGFz9vN;FysYs8Bm*@v3}yM zP9A#HGuX;D8lFbDh3XdF0#}hW%==&1r%0qKK2CXiWt-e_OYGjzIe{0I10^|=TfOhN zP|R0N@D<8H=57$=_pJzsk}Xh79g9idtzJRigB)G;4y=}oMiFzwM12XXPRjt~eBXQLym!uZfhx(%@ z7K4HtI7PswLn>Vd%%E1*!Fhk+*L{U%gTwdD8O;Y--`=f*zX)5hS8R}w6+?!wm~jzk z#+Ygh6Omn@eunBasf=DLYmW=vk$KN3DQu~P&c5>I10%HV$t`?c(-XJLzaeMJD@a9i z#%-kjZT3VM@)-j)lXW-LQALJmx8#cl-vj|wK{iR#)rg_fH^i`z!&e-S^&v02m;?JI z&tIOv(XV{&PXb!Z2c{Scs)L!P)$k4+J<5=KBN-9DxqO2GeJbRU1Y?HaH9w=h%X4~z zaxIwMhiihUT-T!IY#*4T^3_NK_u&~`bEY!$k=ire7L^OKt-M^fxyx(u2Blc%>qDR9 zdLp+41fb*H_qx(QI_I~>^@w@m#ekNTmKp*kyp3Hh?a4BNdY~@9vUTXT?9!y_4c)D1 z9!T&ILx_=M1^Q9oAFm!en++to%Qu;D*Ro6R`WOCQ9Pjn2Yn*r<9_jv(M85R6*sC@m zy3m;M*VBU0qIhh7Ti9T9h#X4vVuLpZ;kT{+i`$%m1p$F(dfhw{g$v$Q(0N{K^g&kT zz{OVjRm85!2aT&_Q$hBDSd0<7dNYKr9Wk9i;zTAd(<8noBjw@iR5)zG4tVSWG(j#Lt>Mhw54wqdL@O5bY~$q z@|+FCmu8?-;*wM*r>0ia5s z7WvW}r}BNhHr7E^-6s=##cCOF@BAMLu|b>q8Pg}df+8O!_|mxta`s}geol?`2qPw! zt3SPVp*Ed*s;53Tx_Et&#T#y_yrxIs6fLi#?MCQH;50x)=1hSP8jS1?khMi5lYT#} zv2OToQm7caC^$Z&Ea9BsWoF$0*lt>j+HHZlwrb?7k&{|s68Ls?BOb6N z^eS<$9~!^Q3kq?LF9#y_-?JuqS~X?$;S{lROzSJ~aR>pdqlg)I*j;T}!i8x1{X+rr zZTHJ#rCS3O;{G1Va__56jaoGs%6%9v8Ie_9m{^uc{IzLPM{|Tq9JX9rG91cA-*yuR zC@!+LQ;Hg#WPqK#5MXSGGp_y_%(#2XfowwKZGAo&!qH!o;?DO8{PCxxl*n_N9PY>< z3p&(_*udvC1`LOWH(;0Gjr`W<*ZaHYtwxbUo0MQVaenNg>mg}eYEmxJW_HJD z;~b1x(p{wzX?3!Ob>MR~r6{h`G=F4=u)~2z`QS4fZ`5HRUkEfqpzGshOKHDuF=>?! zK&NnhEA4}6YdT2POB{pP<44#*$jjYro2)hEb2{$T%nAytUHYLaY6g=hco!I#cJtvo|qsrFBQp7=f?4OV?~QMKxT z|8o3QU*^cOc{yrnT06q{1h2R@?H4}NYBy=y-nrXAie)K3yFSz#ni;r?XkDY-8HA6h zLyrwZRwtZNXtP@zKkmI|uhjDk0^~JClN8k!tW`YCQa^2VCYdP zke)d0v%@u#mH%pJmZM{*|fz}6JTu~&cyamK>1Afdc}hw!tOI=tqp6Y zhq$b5w@x+6Dgp|e$7uy}+mjizn-L-06v)Z$Ws0ZTg8jSBV-i4@#C-X|9bLEraRCGSgkS1wfqr&6zN?Vft3nVkR{_Q1XLvXC={oU=Y z)3e74ofZNIC#lkTC*C=|@UDA(#zT@lix_Fh!};^UZ?3v0RB|XvNK!F8kloCN)I?7i zd9xXD$-LP$;C3U%vZ?Kdk8v>#)pNtX_C{kR(f0G_GlfmBq_apSSyMA|;~b;YhVkb)Pmn;rSy;}iRlNcJQ6kgOvrlN?E zSDS?jIsezYl`T)mExj(?j|+0r7x!pFJ`uCtz~${M^tF z^Q@zDbwpFkJZh7EMV5clG{Vf8S~HSzOL5t&yx%Th{d4&I z+W!TE9e_SK^j<+CTHXHJ&MWrNU!ZV`g!^IxE8|3P&znyohFROVM5lXVT&Z1j5>!Xq zinP+BXKy4i>>GAP{n<47G-)3#Z&POCa!KZ%P_kqS>nYFOyC&>L19I0Q;GFqc|L7-Mg$ts%=B}(A1q}A_%|n z7i|n?0PBvTKRyLPz*_38+(V*lSy`g)#RFieE$)FmHK*2{A72kFGl>Rc6Qh|DjRLMr zn3$l+ksbL-YI{uY64L?Bla5=%D@FCh8)D4Z;HhJ6wGL|kukz|%{R3E;lN=%6@K+pS zgK*9O;5Hk!oKi~)e5JT0SdDJIQNifK!|Bb7mj=1t2%f}%?`Y6{*qgncYIEhGU890X z9=j3ZNRhdv2mwf-UP5+~-5BTx@b|~ufm6eh#0U8-9%E%uFLV4hy|u?H!cK%Q%|t=qLI0N!a=$mHEvu>NQK~+i z@pz`th=b0lG)^g7FkMs*t7_*ZcScjkTh86aH8=n}zsnI$=ksXq=T25)*PURj*?l41 zsNp+In-W*&Dc+_oan8Vn&M4%#y5&euvdt*AhI-AVA2R>H6Wx_Nnlzk{ON8_qZ?nTa;M*Wo8C zdZW#z{yf3+#j?oU)hCFQ2fgd{Iup~!7|CD^DXIAYqr5)>f#4cRURy*2>gd(jEcIC= zK3kzI$5zYF<0;y|7d%D&%1#CU?hJ9*qSO8b<%{$Ess B*}DJ$ diff --git a/docs/assets/pictures/ide/kotlin-console.webp b/docs/assets/pictures/ide/kotlin-console.webp new file mode 100644 index 0000000000000000000000000000000000000000..def93136693538d979adf36b6db151e8275cd9e9 GIT binary patch literal 68214 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%0D`Fu>>>Aw!V0oLY)Qgbask)Y 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 RfB*mh0000000000003EK9nb&( literal 0 HcmV?d00001 diff --git a/docs/assets/pictures/ide/new-script-menu.webp b/docs/assets/pictures/ide/new-script-menu.webp index 524c1f55c6b0019f6d4b5b3b952b000aa36cdf63..1e2211b4d64c1eb051f218ea93409e3740062e1a 100644 GIT binary patch literal 47700 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 a>Ah0+Fc*^Q{LO5q`VeEP%4R0hi+})**b|Td literal 35444 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 MKmY&$000000OOb{r~m)} diff --git a/docs/assets/pictures/ide/reload-script.webp b/docs/assets/pictures/ide/reload-script.webp index 3db27a3bc28f04627c560dd4046a4a836e5e6746..0f440870954b81d90ef7ee88b87867645634e023 100644 GIT binary patch literal 101804 zcmc$`V|?7}`aK+5jnmj}?8dfjH#QsFwv$F}8ry1|#c;?Ma zW+s`rwbr`Uy1r2m7ZJ&i1O`$S7LZesV<$*?eH_yZnF&kC!fcxir?y#p+^U$i#?gq9w+gL~iGoU^>> z!ags)+$O7X0S*A9_okO6&-E{er`~&B#`!2PlB6DR;5wS;{S|se|n35 z=sgAi0NQtTO9177z?aQi-CMvO#$5I%KiDY|+5 z<@HuXfbJP!$HV7&7;p^$eK8%lJ&Fd%Uh^J%zrKp_L5~2LHc5`^V>rFTTT)=4#u%+z+iSX;fm+M9tBK0{q zdBc_LAR$|CCBhO5hRJ3k%32B7RUs}SxY5;wXome$(vg;c6~dPzB{RDEBfbXhWUxVf z%R&Yvllx|eyz?$_VaMX(K`}0L|2lcCqYUP_fzRH47*atZC|p>;R1kQZuv_K3lm4gw z;cNGo!OL4QGv>?osPSi`1zHPSsvnns^kM@+=-}>jSM6Jx&^Ia2Z>%T5P4nh2IziV$ zM)&$)-2%CEbK-Jl_GO1USzCZX{tf(|d7|Y(*!fO(KVwnJ#dT~mGT;p;_<90KNzILu zZV+Tj0j)FsDD;*7nEz}WE>!FWFFywDX=+M(8ka?YBtztyexM=TL(we;GuDHkgLs*= z=w_x7X$SWQ2#_gPqf7>Jpr^5>_9e_v4zP%NsmO`nU$@liASAZ!$X|L-R zecfQ32V)62>xZZ89i%dylSYg?8Hx)jFzejdTFno7sQl!pH-#V#vLdtZUQ)o3#Cy0u z`;?)K*ABH80t+GA$(rj?2V7a%pYHp}gZ=X_g4VdP)M3TMRo}qZ9hJ^>`zb2DqyQKo znE$rtw|l@pHvMuA@L0cjk(mcz%;j<5=6#woXEpGZ^Ls=UC9YBW2rn`$M}?$o5VGYQ z7Oh`A9}2i~YVK-Kg<0344zw*p`|*&fIPRkHIY5gA+H$(JM5AZNIb_asb!@JbwHNZ3 zDF?ZV*FA4!b&v{u8tB3~fNh{E-G>kIi^i{~aU&p>H%P)A-zfL-a?LLGLzY$1AtMkc z6b+O7tPz!1Kd51Hg`p&J#FsVz41x;pFtN;OZ=VkabDlSa!~AA)-j}@>hPZLo`*BL; z@B?jh_(i!PT{T)Z105?7_LqudH*g|C%|T-D1V>UG?(g0#N%re?YL25AnKTbBST7Fq zpZbqVjBvA)WfW|O+$pKGh{Up7X+OqDHd1|HwEW^18qe8b$PVmpC4;ROSO;|w?XVQ$ zj?gV-sj6Y0iWaqY4-xCuTIlROS1<9SlUJy%bsQ7<}Q2469PO z9>xCfMN++xcrInk5mPs~l6RPBa~IG_|L4!GzK>1Qd15x|leAS;=Qj=S=1Qo`Kko8sdST(=&a_jp%M5wZMGQrsnCDH`n;Z5W63dr`cc`3 zRZMhV)uoKn0@FTk1Z@x&4gvE6=ygj5Nt=L2=zA*0p4j>$ z?#5Pk$#?UBV4P?cG)#IcWJC0mQu8`&wHUua(87Ml19Tx2Q1`-oSma;RJ$}bY9PYo9 zqUq&v%CWA3B=a>ofLq+(sc}6VsSww-ewV9GO%g$5Dtr&=#E_&Y32(W7+LL`bcclGa)P?Z z2Y&In+648;@K|A7`(bYX6(IM5qF>fiw#$+yk0MC#9lKf8WH%I)jP2|wqSCy;bcI8^ z=H%-!ZX@NYJuhynB`5b9g9cDRqL;M{!Q+bEfaXlJhL816&6u(0fqZcyT$U+P{5*Bw z#F;7PGPd$WvJuYbU4XB7)$3~X7h0Bp0VV1dEwcFFvvSm!B+OgTYUXp2()Hr39|YQD z2>YNpy$arKJtFN0nNtK!+%24_o3sN101cXbfdB|LW&Zvt|K>pqd0b09s=qs-ev0r_ zM?n7~y=BP?)_qDxrAg^Il{@B9SxYEgds9DWnwJPoqK@v?YO#w>NS1$xg#(7K zXZeMOew`5tBWucy-3+|iZ@^z=n`R63rOZxOCyHQ?5}{}ErB&RdRj#|(?;3QIg8~W1 zqOgQ5bo@ndw90Pr8E{ThZTeC^-Pdj(lmvRV?tD*Ir7!#XcOLjn`=k(WOt>Fl$lK;0!n7^clw7Uhya2LhXfQoh8tz21SKk z7Dy~^Kq)y{#c|kG8Yri^6iHBFGCHMrYJL!sqyjk*TmpQE0|kdq4iR&NcT!^;Mo$x7 z2>PI*u*CHSXKd9Qx$zMuw2i^YP^BB6zLbVWzNcgEM!jrLFrzN-?Tzi5BPaPccHs!# zw$l*=QihQ@-E~|2CZ=DbVQjswm3+ujZef#8=z5ShMg0XIG*O9oyTtm(5EvrWiYo3I zf1lGot?6&#&yUE16AK}CICQN@ln{SB=zC>uzHo%07@|^R+dVW^XrJ@4K@VxLr+1}@ zR4+R_=~$prf1KnaLstA7h?2vBIRlxwv-{s>_p5J=md@$T+RMIb52|CE*d7E9D_?s5 zfUMjE{jqSTjPv5!sM3ITfG}or(r35XQ^k5Lr0h0`qAoh6nYj3PLJzt`kgi4dhJIfA z@fbr@^Nn3*V8p>^X419aNb}!F*qD-|$Py}5#B)f6FF`)`wmNGEGIAZwAHlCE%_y+& zZnX(nc>GE}-prsnz{u2q+rr2-FoGN{e>4^#Lv|0E5w3>IBuq7aR95f@-9PT`2rOFF z5Yj%Dueg@T5dBHjub&#jh~1+ncHu&5OLX2nA)zrfOfeBo^Mp6zt@qA7GH3U_aR#6M zNWwQcJ)!0*EkzeHJD>&3ciQ$|dn_7Sq=y}y4+x2c+qXQubR~=wBI$^}&&B=tqxTwe zwCCAwxq9x6{^P}IgvcjwUa9XeS%byaMOl5(WeE5eG61GVw4`F*wEStuav$vB|d< zpleB4=YP=n%j&lLrqm_RbHQpmGDdkJB~a)I(v^K_mH2qUH(|hkNbfg}b_OZv(C@zR zrw5x9!o`11?8l#Ovg~HqoVbwJD^{wC)@DM)RhVe9)kO>>+>CelPY)JME7gz3#-?Uf(X>%tC_SZ?hV!z{QLxf9DM zFX~}_(~6^`6-=U_dpSueabC3_*U?9yZ5f}SWgVP9<2*GQU#?V+Fp#WjK-fCuFN9?$ z^%bH@NM&hO*8y>x5Z+2BWu5V94`?f2uFf`gVoH zWca|UW#$OK_D%cAR}7!!Jy4?dz0)!*4~7yOVuml&$A$)PW|A(wHEP4-o#q|UX7}0~ z*oAse4G2H9DtTnfEVh#Om?r48XqgY9A@Is~bMuBniVz8#>)wgmU`8Rs_aB%l;yKnw zjpN@|SHPU((l~A)7~gwfa@SxvZ0Rw4kd1n{7qB#eCeku`(cxcR4!pPF9D;*aQIUP$ z7+hP?Mt3ElIFGe@d-chZl8K`x_}i9RhNj1cxX&|0M|r8r=au_t(K&${b!rzDZdQ7d zq(N{CmaodMM-%aA>QoElS}3Ql|bq*nVsM^zmK?(`TWPMTHf}5Ri8E zi{vV%^h++Q*o0i)Mz(t-&7KfUTE|fG726Augav0b8@MM7ldP4uLy3PUva3hP4w~g9 z7k_$xO})r3Y)8cC)6@>e?8<$uXif-tE%aQT`iz2hMvgE2JA}b${uxuVPoEmp4o1Lv z+QgvMWC|(K9Ln2RCg?uzFp~sO2+kxn8AW0`DfS--k|Ys2vhvqBCB4UyP#8jqY=Of~ z&6pm7?xSu`6>(|1R@)n*aCqqxNdZ-MnlzxtHGdfrPyq#+z|KoFa{voJMoG_#FwF!T ze_P78kJmpC>_MNq8J~Lq^pz$w@p6%$f|DP{oUcl%UDeIHK)|YjFyl)IP&nTvaVUA z$SJ)PZS$fy$kxia&s?&*xfFS?@86o2$2kZ&gU|;Sa2DVy|4H(G*$7y|~(# zcYME3sR|UdQFHBA`GlchJ~i3!vTe_Ap1dhY`F2b=pcK2tbtSYxz<7=qe8DvJ`oLS5 ztBnhxc%B^dbFD+{93qP`4`Hf06BywtnmxB9XJzY2R1Z<%B zVg3>@Wn z^3IrOAn{6^?|D?>_0`+!23JJW!nzO!Q={?;e~?ac4F+WZ%{OOV*^i6Gksz6*QseXd8Ra8`a-QbR2p7mfxRMhXSb zP+Nw5K;TYRQF8GVtJ??`*i(?|dqrg=1Bvi+#dxI}gWQ@gHa=tcVEX9UyQZluRB3Q$ zNF{nioR#QHl?b*U6LjrZxqT^>?&Jq#Xp)m^2LP$XD=4me#df8frqcQ5QKK z_vu*DLJLsT1_vG;2m~RDztQVCGX?9P#7&8^DeLE6;NuHMt0AZuT2AnDAN!Jiph`Jy z_p$@*uh3~s^ajj?6P!=fT`*+R+_EDJ1;yoCBFwfy;CmvgE9%36YW8Oyl*>?918Vwn zHFk_G9vHqAP>^e642bLH!)o-!sknu`y!?3o^)cw;6HgcQamEwehq$M_*UA-RALcAv z#i7I(Tfa5?oGW0_z?7fiI^wK%J2^NEgqVjj6xuf4s{8jnT@&53-5ilerie z*%;)Z%}&1kknk;e!;QV0vX{=g)F3XR2unN`sOhqXQy1J8`|uDK{Hp3}Vd7tlR)&e&|+R zV0ab0e-XsP9@Dv1b_4&LYv;wWjC6=Ih>7FX z>xg{d)d-;R+ovwCSe==5Y$vMi&1EZ!mBQBHy zYJ5T@XH}_GMzB**f_)Z zKIrUtsm`cqxJgCrCeu#9(=4VXs6zox+LNT@8FxPFF6E#_p(5*p@M0o52 zOxW-!{J!IM+YrHGJS4>JWm7|#<^2I<*1-trH$wf3jQM?xvkjc_3G{Rzxibc}usb%+ z=q0%D)rRmI(emO-mfwT);Dw>c-bBAGgyFOn!Tba2Yb7}rI>HYVme^5L+)>aQ>JnD$ zAQaa7+CFks7J}t4o)1-pNCXjL?%Uxu2gs|jrN^>@iEMv=0|k-hL%;4}nsG4UFBYjq zo^Ch2tua*Mdfxnbb~n-&6`sMlvmnO=QHmqr4RJ_7#J;ygUJA7B+LCWG?vXKDzTwww zTZfVqX~!=vA3QRNLFP)60H{k;%5h&5LMjN+{!@|ZBE;RfeyJTRJE$euU4K{XzDY7+ zP2NdcX5BKI{^}C{G>e-asPJBZh(L=ot{ATNk~ubuR2hq;vVc(!6}pw0F$C_B?gGaQ zn%EZxtu1=DC~Bd-H-tw_GDDbU_5%pF$E%WagF-*0e=Z14CuN|w8ri+QzTY_o4{=Ku zt$xcXKYJ7n3Mv&{r|uud&2LH?{O0zrOM3QSzf>drJt(Mj@ zdF!yN85TcT2O$ZCxzNWdNy>>CF;=w)VnyICLyl5Z$;IfXFyZBJ#BNU;<<*kAK-xo* zBCC{|1cBPN#OKuQdeQCqsW=O4v{#VHGlNyILk1-(^ab)3lUB+Xlb>(!g&@_~fb4BZ z@;{njpi@b>iSE&|Jy)2;(bhILuJEx>NDJf3iLbfE&5U~ZEH5V;63WVnot4oL(XrEW zd(i;7D){!zPpn@9iEj%WVSp2XeF~F1x{Ue22D++Lb8GPTxgng&j(Sav`gFeRz=50Y zKa4n@4)Pg_6^sJi0_Kivbou${v(J3N*l|cV!d-NAh&lsIFr0KL3i?sSoT``vD4c>-P*V16iviX9oKkLH77> zjQ5*g5-)oua;m=Rt^`JfkO}MJ8B5}jFEI0TAcVOfh2UZDWr2HfQ)nFkXOU6xiRsTB znz=qU*JzT;QJ#4c6kpZ;P)FrlC0?lZ&;H){VZ@pvxSPvkt_q9LlY?4+z3aSeIQ=Q0(o|$^Z+nX z0khxwI*Z5euEosf4@#Qa2{)+|GDgZXuOkSabnj*FD)n$BX7V9pX5z@6W^by2GErlmXI-9@LrqovmihT!#Jmtg+vva2d4w8y-57LNK zU%ai<9|^dPY2Xr54bW(G%C-CDyBMW8zdHby5RDE&-30b@Kw_F+q@W#$ z&b|D6-pObw-Pn26fom!{0CM}>_0UaQdS5-%q_yo*^fWAeGboYg$AsX2J{O7bc?zq8Ytujs0 zwAxotyt9?!54t)xWl?P+QpQtb>hFPOUZQvPOj!(G{Zp>@D`HP?&-{CIcukTKZCyQP zjU0w(PY?^d@WAQ&dZ zxyLweiS2~`d5_t!8fBc_2cP0 z@+Epm6@vYx4RO{EXGyV8!4JDpyxjX0Ob3PqnE~JOYL>fr6b6OQF|@8#D}Ec0Y&b{B zsN#JVqp{gr>#qdG^3>fdnHoDu3r_B5ve-@=UIeViU9E^{a@4^L$1N$x$ZAuYTMEty zDPJya{vfoM!>e2QS6}Tn{P?3N`z4hWdH-r_mOw6gT%a>-c3bCei>KuvH$S&{IJ|U9 z7i8mnp;%DZ5co3ig+2{8TNRvc)oEPyy7On5&K_SsN3&zmGzhJs&~{nJdTKWw1|7Za z5jFOqKDuou&ujg8Q}q~qvG(jGNR*^nyazq;X9DqCHo%9OY$O@{#^#@F!H@o*IRrt@ zbV<1^W{jLVj6i;5A~Jgp-1ElIsSIa)m}D`_M~pCs_h&6oC0-wCK3jY=93pgDn(Upa zk*r{8Vhbc?6WoN;)?OXq08fGaxp+ZqJHEH2>1Au^gnw9zzxmNWn-OMW`qB<|8fc6s zBm*6RL#s*wAM*Tm*1E6Ne^P{aoaG7y5#h!D;QtN%|Sj$h05la9z$;JKzboxs_$5;XXNd@uaUrOOWHGT{@FY(x_eJ4%k z&>SAYA)I_4nJgAX>T}(kwVw(vhhsm9hoKQ7)B0v?KHGvYA1S=;FblKjR06HExAzHJ-)OclX7A2TO zU-21TC*+r1qY*fDE!d7Dqx8UxX<3Ip?dDmCYs-ngx&%Mg3@>#x>s4r&*Gzf=Cg8se z^RX01Bn$|g!A%NpgQAYvacq6j3rx@C)CR%@%N^Yn*R>r~q7m+~U?3vwK(hvxqYr~~ z9du~N`qoJS644_$<(ek;w;qF^+0u{N5j>)?qZ7h^a%65_jfHqt{(iI9XIQix1V{x|B7~Hd+syy zc^sj0>=z-qP|4nhkUSVgpi5tSfNF4M5A=$4F}c)XKcnF}Fb`|nzCaD=uJg`>HdGs+ zRgS9U(vQe(;b9+1_;*%A4g}%&B`d7dfDh!_95smRdYCJ8z%}*8u!Sb$vNvqw5aKF7 zd#&r{8ueQoLj$#p?J*=-y{}zOqP4R4wSD1l6fYx-D%pXky66cI7Is2k<=mXJs(Pl& z(<^BIT|sg)wR01^F1}ge6{p^jAbeL75WKmu{LXIba(&D4j+;37bmoYvgN0fPTt}wg zYmNSIWzTQeU=jl*CBE`!mp?=uN|ILX!y%ai7P2D|{ogs`l|~c|${7A>x#H9Awbjh* zQ7e=6fJ?QXLS;cn*qX%l+k0)Ymg>si>0lCSe1HwBcw07+|V|f&fX*=9WhV1Si}6 zm}kgX0-)>#I;D)BdeK?&hoQlTk1(p(%C`D0)NBnUsId-gFL)MkU*lXo2C?k-<0u{1 z8#CYh;(aJzK^?yQ^(eXFMba++UyS61VX^JiDslch$Pu9nAP>DJDv7u6TmCqdKgagq zI{xb({fXUw30I7ot?}7uOyY(>f_=jLH4B`eFQQ5Ql;#2F;GOWBzjg_=I|(EHd9q&T ztoR>z^B0r4+}4SlLQe;FRmAdMq|`^C6OpKHL%eacOGAj{aNzs0-`1+hMU{S58S&5> zy961EnP$8GOja*;FdWHQH)nzRn7!|-sh}{q9OA&sF;)Kyt0Vx!K)V`W7AtgX#+I2% zkeZjXzO3@p{$tBr5Aqr4^v$aGxSU#FG<;KVBAL05#OclX`6RJ8D->sy5TD%u)lA;O zZ0ZH4DkyO(c2rpOH;1u%+}ekqA@?sRul~#6|Cb)TTSx`_An>&|3Fq0b_VycoKD9qs z6ax>msN$bPzJDRuAB(iprmFH*EAa0$t339Hw8|a6HBR|2ngjnLZo*zO+mhopKv@KW z+uP!SZd*GYS}Q{B0-i02t8Z5EO!0bW!Ki<@FUwPz%@{vBX#U&T5Rt4~zx3-hqiGym zF|l1oNZqn*60)O#EM3aNT^$WWGqU+TzWsfT|E|OTZ+WbL@-55@_y-KXZt*xmBSM;= zbN*M+`A4(BPb~PO*YY`;S2OujBkpYI;5< zc)eulR3DUw+3r)3!bXCYY8F8|v~qZE1wtPrpH9@txDw;V69D zRfXYA`n;%(XlrHHcy70*`og$5LTkxqfv~NH(J_#YoO~|PRNU5Jxb^M9O}kSBQ-9o* zihn$7|GqtSkR;L-__VkaO)oyyjDn#Xe;(=3$me2TOF%!QG9BHjTs;h&{}O$wf865h z@1^8#CG+28#9#Iu=Gm)4_=<0J`%`be@S^-Wrx8XUYG;0H5Be|LXCqt@m1mF|@ z3Flr=g>mL}ZWW%WcgwBGb|q{hlE^-WAPXZCVc%y~ppVFyljNi>q0MU;$Rj$(!EF;u zJKrCFp~z5Q;hJloYKipzHVCr3LIn(hE8gEL60WWHCouhQrtfD^WYcaR7gXj8PYec; z2iFB|c&LxJj`ltcH7nl^(jRSu$2JZqb9|#ch(dDi20yUYbYL^J#xDb1AGuS=_X+$6 z*A6sXO^~N#g~uyVt;iZT!E$=PP;hfYvSZq7#7xXLint>oA6#8U7D)qV6*7W|8ctQAlYy|(e!r(8&^XF*vcV(iAdJ1kl z^XF~|*l6I%InrO7z5dJ93|9DE4*+$(%_;%=de40H&yyr+# zrL-05{}1p<8~iCKGrc4Q&<@50Y&A8_6)%D+n70=kM6A&eK`j>W;ruN^k3dC}kedDU zS;v!MOl?W>E}`E#6xq@)dkd{4ZP|xnTJ95_x=w8csjXvC{-N zs6j|P_JD_awT2pT5Y!N|mSuP5ZA8qndRU7c;pa@PZH&Ea^Y}s^=0C64f3X&~kip-b zMc-F#p|={wXRe`EJL1}X_^6`ljLlSLU1n z{nGwfrd+>Y6N9tKi`NB|Ql2;+luRgzl@B6_5FtReB_9#HP%wc(!zWf) zhr%=jqR$qDDNd_Q!4%Q$p$u;+KN4!YA<;3@Vks@}H?wp0i^DU#`|z4a{4cHUzt@;n z=#e*lxo7BEh(rR;D9P_?D2#q2F<2lCFHNlXNGU^kCf{F`iehTxXdDQzH;uG4jN9iJC$^#FJL%sFl=7duEx+u zlu1L{TIR&9x$Hm-*++7<@zVEt`+Jk@6=EW%RIRxw zrQV)loal{kBuPRF1+x(bo(iCbjioKngGi1mM7z-<=s#Ke!Z!DHXzn!b=rq>r;VL&K zK|nqNM=ybC6Ce)ia@^ z4(OXWkuzl<{+2f7{nNMpEA0INMcxi;_hpOYp;05mpYsR6j`crH9_jok>-}#o0Ks~< z7(4=tm0yP!!nNxxFbXbLWyuVIKyN8JlX%wGnjwr4`v>P1)n?Z{+%-{S+{Z#~=ayyR&I z|5H)*TK4Nq&sXvFP3Z+UBhV^-z9$URlVFQa=@+`faV4`c46>@;@`GrWBzkY-Kh6NM zG*zR!95yEx2K&97FBcES@HYsiFtYg{S4I48*HQ4R1BF0S<@@&m^Fln~zcszd^{*oS zkK_0?!P=3rnO&|l4i=a6w-pKrwJl`%DAdNfdh~0t`=emsp*j8^um5_LJVjIaQCSbr zjLqQ?se4SAuo1hNIfT6#-YE*+wmzhOiuh!f{y`jP48Fvsm#`;ZorZz#s8`%m_b!1H zF>o0U6$Rpw^rtZiB(ciAL*wC7sEw^!C#}{dOXio*ns$fV@M>W1L@>hhpm>SIdp>^$ z&W2hDmslz|na|${m-x{-|7u(pu;hF=OV)>f7bX0^NkEy`?l>MHdX(zE0^K5{>Py8Y z+C`gb&yTFAZ|rW@Lo26J7c9SMDj$aLZLnW>UI5|bXR6Rb>9v>>C5XO3DH`%p=Myq% zsEkb{9+A~A_;OXNlT

ZGf*rU(o(f2Kv8K8Lwy3ZQ>gEUR#rS%y68!{LK`le(3;8 zH%aKBJ*)Ql_AjQxuUAf?dixBVXudalqY8h)`Y)lvFIQImmYM%}_dotr?9+)vb%Xa> zv9yiLAF*IF@D=lW2BSX;i&jio_JHJq-%vz}TFji?)n=ntZ_IdTjE1Y9Tkz1D_I&++ zd}<;MCqOjvIShI4=n{gA55>sT;%X!hF_q6ge<7w8cW!FqVq=LWvv0ij1^K>BddC+6 zMiMkKP*w?0g7PK67&T*esDQ*UZ+xsuNK9ZJ9#Zv`hfOi>c({Wa^5c%?zIUtQ6(v!KcUi5CDE>#=3T6jEhAXcz&Qs>Q5ivnBp z3wA{kr%=gh>1KiSBzC&DrgN7iKfScx1a&sLrbG8=c1b*Uu4MSa$QI`sUI}a%QA@&y zQC<)*2BqhaCDZp{lGO{|DGLj`bc%T!5K@ufRO-+%c``k}A+1o)nFGS#X3 z$dSRkDd=I6pbLkg1C_3imh;~=m+%jde75l9f0IL;UWxs{@$ZaSNNH{f&fOOhZ#HT5iOsaZ;kLi z5YP+Ydq5+LJUBt5$=w zm)x8Hm&0+0V|BC6fVA4FU^^!s4y+RTu{GE+#5(l60jjk5_^fnbu%f-9s@TjyPPRm* z%yShX{h28K?6H@#K(7DNIA2SxJjk_DbHGfiB*rW+X|Q~shWl|&7NKj2qwHyDqmRti zr?PJFQYK2A1}~O*d$o{k-@CGmOIEhsx7|4IBkRq?Bnk9>a#Zv(mNHK)4wH3US^L59 zTVm&!`SQZj^NCar=DACYCyzu{u+zeP4{^h0i*m5ft7;r~!uGYvnK%?)7smcHIsG zZu0@M2I};;Cob^lE%h>q{zcWb!6T?66rCYZg2ZW&DW(p!TIiVVlkW)MQ@xE}TogUY z!A@Ev{ea0FM+cXX8j?q;H~ONK@YP#85xEDYmY^5$I>|xav-g`V?Wb&V*^(QRg*Xn+ z3+d)LW)@1?s0r^tBA>m~+lb1@LNICl4O{Ny7t$E-q))GXZPTShB4zwWB3oTH>?6&+ zL%jy(CktkRWQH@HHF1&&+>N~8H4ZxlyFgQvH?=@Mrj?Q^1qp6Bq{ryQDV;b69{V#< z9JkTivbR@{W0;dLJC5)GQp?%#G|%4Sg|fwq10IO@hx-P?Q|<#9-y=$y+H6R&dMqe- zY({4JtZ%Y&xEh-f*%T}agdiR65H$noZ}~PO1Z>u&D2u~Q_8u`UZgJ^F#C`SXRCnjw z+Lxo;kv}FNpRfCg31RXgJVj`)Q!nB^Wvm53&=A17<$8Z8SkXnC=p-*(H+JYZfpH9l&>;g zRFFjpU!%K&1oiXa$E(j&!5(FLQBzm;Sub5mWi(!2dcHBCJ10tIWn$_L%kX1|qSI~2 zv<9Ak%gzT4_^@v{5GdDZ$@5+Qnp;91Ho<^3zw205Ut6PT%N_eYLPTr2FNkhZ%Y6dT z*UP@Jodgacf2k7ncJP!zQmQoC_rb&{-kl?)*`m9&^0d-!*ez9)tzpn!#*&me-%@Ko zeB-BX%yk5;fBedvX5-7H8Z$=W>a+FqNdG-ZV6ovNmGX!P_U94f1jC6ZA7Dolr*{a3 z!7xre`FM*J&`Nb#_`RWpcQvbB$IU$38-+VUSMhjT-?$*RKGTSX)VQ2xDW0T!P^}&Z zxX%zb8L=;e3YBn8h_hRfEwaa(__w=WeCcX#J>S_x{od4oE4~W}3aJT#gUWjE?9hQo=)NMKysHJ7I#NWCDb!zks zCfj=rH`+iTuSQXVT@RLgeH^LND^+vLQp!TgT9<2iV*CE7;%(!HK1xmOz5#sA$rkE7 zOh?FTIWWp|Tk~aE*|#xlx&RD49$*5fWEkJeB1Lf^^TA0_td$3E>l;M19_uM@=sV+= z-T{YYpe_L9nVp7W>y%*w7x{f>@8C#jso2Gk0k)ssMqq8?Cy?9+G&RC1OI}%coEojf zrfmg1FR`Sp)l{AhfLJlRxtDu(vrqf)= zOX&Gg%6kV@sgdvawENvItu1h?k{Z|-PsE3=m#!OOW7ajuqF2aIGMZD^Nj7)7{ZfxZQjp=Zs8ljzt@G${%A{@ygB`zBvN9HPT9bd`}6-?{U= zy8CHc*&|BpYM%z=yaKW&ISlzlHHiIT#P{8Nr!=i`qy0=w&bX8ZJstZobQacBgsPr; zp$RhfCslCa@kdW}*@4H;CKIg*hq)kg79YI9nGzYE$YYvc_^Qn^t!m82+MIoz>BFqh zM(e)KC_?xGk+a-yx@>~;v>Xl;b7-xU%$CxoF#>6Bb$f0k4=etYJP=SHr zjDEkA?T2xVp?@qB*R%PBZaBVdv^aTe^Eh^>!16q*Wc) z!!#ccgXLB~GDM`v-G#t>VcXlGakg{J&pxaRZ{8musBDQ7f2a@Wu68lN=$Jf0#(r;9 zT91R(h(pK&-nNnqqh_gV?c3L2yFK79!iyH`C{dmJ9i#gUn)`+H629X-kf%cKsF0D9 zX3YM0ds(NyT`5Ar+YP{b7GZ{nRRs9Bz%Y%t~7~Yhjn;X2v%Exh2AV>h%HcNV$_+DPbUaJwo`Gh3u*U(}08 zWMZ8&lBsO$CGiZSuinbT`nV6b?#)i|M$=qN`e<2`4)tBIF-&%b8?1XDKrTNE)g@(B z1g0;-K|x2&=<7f;z)N8f4%#qYJ0`xxnC9U50Q**zRaM_O54W&Rka(I^L-dIm*@S+I zdH6_K78vqEuDWS=m#cj|8iPFd*xjv>8lzyGLc3Iw5)b~DlPT33q0-8JIWr$Q$z+mdL&GD? zcX5%XuHrL0yOC<`c6Zp%K2OY1P+u|Xwh@qxs_ayUDi%JOK!E0RI$EvJnN)Gf+zk%} zN*_B?MJ7iwiq#W`4B}9|sgd7dPnD-3s9AWr_~t3~z9l7kzuMDPbwhOA`eD8ZhPG>E zsYs0Hi#x1{u0J9lK7H|N%e>>{$mw{Dm+P7KNzq9CZMF~GX?1oeW?xdO{($@3OPU&L z&?)v8DG-jc6V?(Vm^t}EuADpqMycxWM|pK2a-w`OEixC;BL#0y(cfby*64H zAOxWBW59BVyX1XiS*G*|^F3o6CcR0-MA;sGB@YrRY_R&wWGpA%Ktb>xX8!E4J z2WA^wd{Sh%KTgVji5i6G^`A7X>o*&P`sJq<1Q8;yaqWo%%b%Sn(^29gJa=yFX)fmb zsZN}=hX!p*d^ZKv%w}8SpkO;x3{-J?NL$-99s-FQt~Nb}ekaJCRyaMjS}!S5wojs- z4(ufSWm9|1cK}4?c+-s^T6(DI^O|v)q=Ir77s<>c802AQC!YrSVt@4o>0AX=4oH%` zPh(yxfvOO|wWMElbt11XArd?K-KE3mvnYvmPUtOhuUaf?_*xc6lHUWMK4X_=bUoC= zv^fXzn?inqVLVl2*O%cu=@DUiH&kCBL0-8fwW@KdQK7N+JCDQpdl7Q|sVKs_seSw3`nY;!A#{9+mSp=8fKm;xW?4(b-z z)32e(iR1A8wI(J&!0*C|-2<1Tb9!XGlKqC+6iJk9aB%$#*}stx#kZ2|GNb`z61Z?v zU8cb6!*WH#%+LJz)SpnnR_?kj{L!q;iZ@tfTIagISjV0l9752^gQO+u8J`#!nA+;& zo14MGCb?0%tX*_u9ssb8m`zVX7P2N$bAr=?%%hSL|2dS%2$8vHw*u>9h zMxPZNCf2Slg9UjK1=NJ%Ooybq1MD)D&9LI{mvy>pEv>Nz3~o9+!%ni)(ai#xV7AKv zw*sNK{fHh*5-W;GpNQ$1bx3%ygYM^dJU_S5&wY_z&o9uT$%DZSO&_gOD=B^nK%L)` zlRZId^#F{%6R)a}=S?N73?Sh2#f2TRr^WYlwhR<6ZRL?u;*@8$I~@aH`nxk$;m_#b zccpTwN}n`2^TFf8NVcXBlIeUDHFfRnl816h?jWj2U{~uS2#}}!ysUdwdU3A#FfOhoYE(8BY(iXsFe(Vc(jNqp&Ns+bACf-;-M z8TG$gFu+I~^k31M{5BKc-=%Np4AvVWl09dyXSHd||1y`}UA|lm>5^PI3g}J8xeetAy;UO)sb|nu9Y?QO+nHO7vOSv9I&tZm2 zB|rDUMT=gNluHc#q$N~xkc@OPA<{VIh7LcPGsfZt(KpHO_G9fZjA;@V(lRq{`d6e_ zx+q3TJOggQbiSS`vM$B#goqNKLxplg{M%!Ks6 zHI4*0DR&^>eo`NPhYm|9lzFb2vkXI5-s!+nzo3(Bs%TJ<{E@yI6RuGH*URSjL>`jN ztKRdaiYAQCm@%vHOfvfsxK1clY!SBOL@3GIdZ~HG+`WytNSfsTG_S-{!?&3YvF5w! z!|7+#Da!K+hs2ZiaKxQ*61k}&B{GsuYJgao6Sht&h<{_qbD=g{uV)@wwFjRkb_XNkG)qGLrGN?m1aBSDmRZobge4z2CHM7p+5#>aj5D z^EDY%7E6$Z)PUdB2Hm`94YPx;id!=Ugm7b1x?mLP>~%ForM>)1pvwMKf+bnz+sO_e zqSFSgKDaNG)~`pRVuWgnQdwb)?|R?AG@IaCnYN5Hr<^iA4I5>POV^{Id&*DSO1&-P zJSUBlT`O5yG|01Ws}O%F*NJujw;JgV{TbpD-7|*JRsZd|VDi zpZ_QzBF=`%IWq%IaUa%o=T5l?LYEDelopVyS~kY~q2tl>?R^@Ju+lr;s@yw>6lzx) zJ@A^@OMqlKif8CJ-l$^JTFsqGAnE=HkbQjMcsiv!*r?D^^T(B9lHSzsyMuRZkAmh9 zHAx+Xt}89UH=bH8g$j=0cj59|3zkSl5Yc1io%wxwuO!6Z);@i=2O}?6>XEo+2KCp= zUMD^9Kf&@f!P!f{G;IMRh#IJhybIxpV$e30(>oPxqiKZLa?Tna2bk4aq$JUTiPQ9r zll2x>;jL{WG-<^y&7fvcSv^Ren*IL1xSvLdQR?Ly8ci%c#;M19QdEO#;>2shNBh=` zFM~?cp}9)V;?{fVRUE1>346e6^!vqJAQRzm(Qh)WF8Mk%x2k<%>nrOV$**e!< zX1^BnCHiY4IU1@K5SQ#s=hP`VHI}@Mf%UfB6~|dAV4Ma)E@v%w5m8XX8At2=l-{n= zRaQ_@b^BMtzPt3~Bm*8GE5m$~b~Qm)^hDX;AhPUzg4G6eU)H5Kc+m=TwCtdNNlYb% z0EoZyMNSE>z7Erbp{~7irqrPI?yRKv6#2Dlf0yV=rrJmEx$n!aanGF7V_^0|X)~7qd z=x2H5e-cb=Vy6zTPQZ0bg)SeM{2R^j79|j9_<7<;*b5P)40e0OfHDEP?fRz9vi?w55a$HBvPQEaTZDy_;f)WwQXM zOhZ4`Jp0{g5prbDF{@KRXncMUGp9Ou_;d;bXvH>r^{$mF%)78F5K`j^C}1~@L8#91 zSn1sKc;Q}kn~kOViQ7f2eHaAnu5|k1HvgrITBTu7!RE@j6toS2KvErS{PW!%SXz#R zuCO97gosg}pqIji*XYix&{B`;`I9W!?I|72p-~^f0#liKlZ)hw-xQ=F<-CrizFu1J z%#sVH+KfLTj+J;P;{iga)x-r~a27Kv%%c z{QxfC6_8d`$YSG{_v~+dMz*D%ztiS!NdnSRP{F(5>*|BqGgR1yB{6$XQh5n>q@ixe zoq2rQd$BpGmIJbABkt=#9H$Bo!}?jp)qtO>@dDeyT!FEeC@!z z168h`l z!j&K@lb5+=v{0lijT_o!=#?vD8(>iI{P3d0QeOB@TZ|DZf_vkfLKMDOtt_0ta^QV* zk3nBymcHJ(uiX=W=FP&p=P&#yF_RDwm$&~k{`KqP?L~AxXGa6jRUULz5S9nrZxxV+ z!@pPo)M>LGGfT%qoDSsNc9oO2t=w&Wth@OA9c8NpyKl;S`pGDf#J-+;|C$gnL(<->;oER6nk-5wf!6JF;OdI_g3_bFb-FRiu?G zMBUt#gYdFtg5$Psjx?%09m{y9wv@M}H6&4!JGTVA38@X1*r`N~#{a z&}d2BhHu`=8 zW9o9jFObEpz~W)jxVJHsA*PtDT7wj!8~@zzA1NMT~r14$Cx#1x4(d7Y z%i;F_j3DYg1WF8CL2rFf49aE$AnM%kg~(*0P;1zUeg8Y0m8^d#MzW0l9yUoF9P1+S zf+$}T#2TJD_#~XB1l$E9nNKvF=X&4QW`N;&n=aLe?AJ;whX60-D+}VJ5H{1U> z6GGg%BH?ZtVVso-xmT6e-uI`v^u*q6X%@4OIX9%zi!cZgpm8zEz~z;KlGQ{7}=<4RLQy&khBD@_s6P{$5auYG^=4W5XpT@rmhY zpI(8>YdFGkAAc=w+woUZ@z0E#jdSK1?PyK6iIT{g;4Zl#+F$sQ!?@=5-z#en(rdBv z=U6(GRt4|fz}XI%&rz%3X&!$%n2B7eAY4_ea4oiq`MxflEw}(bFs4e`eg$BwsSnl? zh9u%He_c)SZ)C5+;5?bcR`#iZ<7(V%5jEW$^2}n&`t-nz{*V$Y=v2Sia`)$Hd6}|6 zOP&7;SN{o7Uvo6N`#CVB(~(GcQZ04vza7-S7JX$J#8L~PuXtXBhvc6vy5^nGy)lzi z+E4oYrR{(536i(EnKkg2)=hNLbW!f{*_U8$^Apt%eJ6H_Z_^EsAFxBua3m%D)1^Cl zWhN^R0>NH+6DKl#`C?mgZDw@+-|vUViSSj@RtaW?5D8zZw-5_gY;wN|$JxaTvFQ7^ zwIdkQ6Psbpidin zdWhCW9lir0AvLakQ0VInG=nUQ^s{ZGqCJ(@qrf^$>!Mi0*6xT4-a~i3P~K@DEOtyk zL7!{xn5XESvnTAl+{HNos=3NaN?sbT!x{ixq4bSiTuwCR;Q8xcS{fwk>E!lzcJ_}p zX^?c~IDi#+fCfA|ZKVLyxe2E2;$*TX;>3QdQ$j;wrEJUDW589UOp!S1W1?N8ZFm+= zhy?wnC4V;B{e=tJ6fsk5;_<$oeI1Av-C}i(G$u%WW~347Un^HRG-E;e=VLPUVz(in zrKz3pXX{fF1ElZ56GqC%uKfk%gQH6t;5^^xvNtj*clclU?ory3-t>T__QLoVb4*Ok=?m~cfE*s#zhx;H6Lo#XwXhM2a4zo-QOL@QxT`RhzBCx~L z1j0}r1TnH8ZN`B|BdU&y8HhuUH~pJoD7Y*0qv-A~S6JU=+&_@Bnlq#J5#kK!s{Gcv z*JD1VZQt3mA{ehwx6iJbVT3oK2UA6;Ih)7#*bB;ixPT>b8J?w#M#M zcRqW^#Q8H##R{u9yy@1diye4nvv$f^a%w94=lo9+-+kVd@xn34FQBm;(BEgKs)e@P z!&U&c*)y$_aN*6Z(}{b_MRf9$Oon4-gvcWDYfMaOSi?5V6K&(P-Raw1fz;}AKLFb( zRX4UF@dEz+j>krc%sHtlnN#V_17CL?NHD1R+BTPrYH3$xw89)9wNHtIaX4!1y4Tsy{dAUyOiw^^jdB@)Q z{#$7_e|UYD;6X8T<%|LVo2|MN@t0*`*qvn8SSc*XG-J;d0{FdUU)jYQFwma79jD^P@;9prkV8h!#- zPq@K@KEKHJ!osm17!Z66+DVv}Oh)Av*VV?QvBX1RrqGIZ8s?FRCp#QkN8X8KP;Rf< z^4DV?elsaeZ&z-@7%vdEWRRtNMx#mfT`RbHf)P7<1x@d{>Sn(q>@Hy1AYfF?8ZJ)v z3A-K)x;?mjFk_$8u$&=lNp)7LJdx#n3r3jF^mKyDly^ZE`n8~Wp*o)|0lSwjxJZ4i zncT1~sq<%K{a5-j@p!y>&BidP`B1&?s40zf7f@aKoJ$AQ4GBTnZ!OgYh6*@xo1uH z#tvbCJZ^0x_HqpX+$AnvY=hR14Djv5)#d6((w2{>*XaYq6_goVeV~Z5<48k+L#;j^ zPo~f0vCojT$h*q%)t)U8Z#Y#6K)AP8xPSr$CndR!*b0mCI(d$Tj`6!|(6SG_xnX?R zazP(56!7awC-|=bGJef;A+Uf|q?YeK*TQe{mKtrJN`LZr`>ahwVgJ6YEm~I8IpaG< z6DUnR>bptxmm8Ia|NF$ZFL*L048C{O7$oX96W1{gWC>}l{SzM*zu!L-gxn^)fY5p4 z#07++Wo6=J)~ZYy(rRZv2XUj_M+`LO<#QyX>C2{GPT#k$8C0I#RZYsie4cNK;?Zn< zVV-}~D6AX9kAmmg(WuB3?(nFXdYUSz5UsTEv^D|kPyRLSez)b`ig$qFaxL@#jtzu?n3Htxhx}Tj(N3Y)x)9ul{xK zckY+eRD!_RBopfE(;gm^^Q8g-Dxbbt>Uhoi?rU!>2G#{q+3o0f>KIFcb^n!XthG8| z*e-D@MoacieuN^^9Xyx!DRiX0l{%ve30QHbD|R|~!>kA1Zrr99mJVesGQY>G745$A zvLH_-%ziWF9C18pP!|;5D4}e%l+DEOW|)dYI#FW^8Tvr{p>g#5uLx5Y)|tua<`b^ zcNgjukNO#04Q&ojrg(qr<`UvV6 z5hP54wYarMO^Xq{<8EF;PK4Folxk_r7E#rni~-TWmczX)#Q~mw>Njm+6FxPNzp&^< zRq`8`mL&M1nv`Q-+|g1e$3(P6E1?*1);O->ju<$b2`L*r}n+|%r#qp`#=2aBG z5|m01+>zzX6D#9u#Lx&WvWZ zDH6tZh2&lBxsmSIk*HNzV0l}&5C4zGN%?KVS0U}Eshv6IaFeAfbtGzZOE57P1Cq32 zg+~tR`ecU#aWd|T;8XaPv}TLEFD9^rZ8$pDZGbv0S^ZIf=Q~KVk*Zn|L8P&;QABsH ze4b~q^BCtd5*dtRL+P4r_}EHDhOQBKxSkPS=_?FF2K62Yh38_Pg8=15qwFm_|3F}W zT{I3N4JzVDkY0kjGB~Iro^P6~?s%>4&6ok7 zCo6T0s%dY@>S<-U0NpGxPzdP9n{Q9z%uTUF4g#1oEotnJBFtuiCc$?g6Vu;L+qy)W z!&Xc&`6&ZP!&+5hbcnQ4@$v44RlWVqr#Zk6Qi&K__r40lV{o3()SBgrYUHbH{ytD` zxq=(m<2MOJyRs=nQCh@I+z(S<@};K}-8?taRQiCHs=3}uN?^tKdI`{}llN&Gi+LX+ zvtyE*Q%IR3f!E|ZNE9RfM#`c}_oqxvX4rM+6@)ghZVsvj9a`Zni2MHh_}TpDs3bDi zw$qPX_}<0uZ@3e?rGt1im|2v@0j!OA21TEdw4W0)B;%tgx9ZizKX0=w$`}hI*5^mv zigP=3Le^Cy)VjdEW5|mWXy%$)^h5kPVOr(D^s%+;lPHw1a7@)h1!DH}j3DbtB6j&Q z#|zB^F-^B7P})R8GWxUPB=>me@0!s#MAx{3-yNn$6ugx(Tg0qHMg z-R>l|v10dLGbLov(9hB$7Y;cSHB|n@tL(>8E zs4J1Y*Z`sCe9qOHba=Tb!-Yrdw?3G$E)~xsyvlx$ZVSro7gW&9%&%_34RA&_yZe zav%M^MR1Z|?;9E=WT({f=b@IeKkI7C$Tdkk!`lIv2!TYc%*vXYnBump)?%qCGeC&3 zgbIqHDfpvxE=3GPGCKsUwf}t5mhV4~->OhqDewIC!xN3+3NX6ckw28Q42I%9+a?hYf;P?ygum~K1-tzhl@(V z2Y!Z@ai$*ly(Y_sX8DLbMBjgkK<}8Ny>vB&D_)OK~nn8Bqwj@VC6f*#nO@n4T35jzEpMJbZQL_VUyy$tj~6=UHQH?0ooV;!+g>u zS_mzUqf%i*EFq70h}c5M_e@8d zgZ6Ye)7K^-(k0H(zU9t77!C89P-9AS@Pq+qeMlgb=URc#^PH=J@*Xu(EDIXKdvve4 zWEJ-V_VbEWu|8fXCM9|r)r@1`ZZMz;7Bu}m5*0h1uB!G=kL?ZS<2gu|A000000001mB_?@2CvF`?18oW&`)irk zYqI?uNbb*JDY+P@g2RyUaz1Snl8ytY=P1vlG17d4w|{RZuJJXy`M(0tC@VG?71d)3 zD!>2(L9^!59$0i>5z2m-B)VSYH1C-u()UZJe8^;%OWcM@biK%AmrM7|hDmh2$Ye6N zuylfY8UWBk{9#6af687YU*FXS^?D^4!Cs6lh$m{lD$RPB3Kz~?`BHJprW(ICSTmBq zQ%c?c34J657x)hTsfWP|6d;f|Ql*kQhy*S|EQe{S$kguzQ~Et$yp*r;hGPgxU*inM2azxED9H>QGUu$Zs9K*fxGfj! z-tMX@W@L)3u$BP`yjXiL%R1RqYcH(=vM>$eYF-K|cl0@>A$lF45^3h*^Wp>4M#i=5=N zt4K_WpxIqe5peI{lc<5O!{RjekUh-d^S-Zx&;Ql1%lz4ZAF@TUa%hk?pYk;xu(^Pb z{t-O4PyZzm!V8;b00000002DEbtVu_bk?{);1lv$E50S>bvgogJyC=I8j@osWAHLs znCe(&n6nHXaBc&|1buIS7vSj6aOKUlxqmcy@)C7=l$?f!GGQU;tA>m0E6CE|J8mqLf6VX!v`hae zT0v@Z$ee^tvd!a+57v#+yp!6WOE8EF3WotTOyQrMSj9~LG?nmg6 zU~s=><=k=qd?awxyXUqKyEWR?-uWo#XH4FXX{0b!22XKJj7os3YwsQG>U>DyRUjer zTxIN4{WiC)fiWs}a|Ufbc>NpdT5MRwhH=IB`ZLQM#1HQlr%h_Z*o^9dAitZWP3GX+m?0l_k6ykj z6Qp1i&AIPUJ4!p>ROppxx*hXYoju8a71}OlB?@N{9P#37-j6DIzPAd{wUqgp?7(X7a?M{g3Q&c zHGQ)ASK@B}DkFjC92SN}S?6m@ZFl8?(#c;?005-&7`c>rPkN`lQ`KK(bW#rPaDO+8 zsiR);R-8XuHbocnAxGkFyt>uB*$~_+e{F-6!6 zTLzEVJaH0Z-6qELl8&h&?573n7B#vP`oh+QVB8mSK0hOEvuOB$00W{C!p;HHfX@zs z?(Hg-67|3OX5zlFOEI7bC5GSd6VePNT5ccFU9Jt>Qg!6>b570;8KJoix7ieUZ28#( zbZLrS{#&-C%0Fm(-->54qh^On5LZUpI;;wo%kkRom;l9$ca?*rbyplA${YxseM9$s z#+(YORd_&4V2;yf)fLDs{uDCF=Bb}f&(^SS-2TDGAbyNvRy{rBX232dPUm|b9x9yY z2qAtuuKzYnH>#2!hg82^uubtY8Gnth-DnHpzDmN@20GS>&GyfFs(sN5TcrzLqixo= zIxl8MfDH9}aN6G-37X^3I6MJ9sYxE3e<;eO>bkIGf5!z{6;t@l3NN1@IxfaJK}6a7 z%=0)tYke(K9_R-d(Ca-7#b*XrO4gt-txm6b()PK^;{})1u+yzziIu|TedNam8X)k2 zsKatmlo;<06FUh0NI5Cp>zUsalfCCWi~Vw%#9bml%P$vz&_E(pMA`5}4TxTJ@2lj& zaB%i?r^hP@SnkAC&fi$hfv|>VhQkD>6+v(CQ-JsX_f!i^+%yU(H#9sI6v)8lpp(6mZzk z+e75Y#cX@zIXFjIvUbL{ysy4VCGl@! zKd?X)RV}0LJ*FH2%KP;tVf4)Cwh>LqmAsOCR3+yE79)6H6E1e9jUZQ$rl|NSQq(Dx z(CcJA>J^m0n`o04*?gF}kc|gpzSRPqkL)cD8!w(ldxG`v;pnTDX(+I3dRlK|$?^ii zM5`oZ%sRB(u&k4}rCo_2i*DuN#NAz_3y@L6gaz0zN^x~&PoLgOSG)>){vGiQz|T{e zzHkVTL#N<`n4XyP$Nwj-0hk|BX!Fd~n1_1B>2Ik?;q`kJB7wKHYK*Woc1$E!KRF>l zgU=iNVin>Vs(WE>6k2_XbE*@Fr`1AEG<%}x!`}e-Nf~VM7SZBL2vx)F0Ap1(Kv9G4 zyV^<;h@Bo!kB|9HML%_%Z_9u0wubKvJbiCGf!G`D>WmG%#Td2Kk&A&_nluh;V)|i& zS?(vJph#)3u~MeS>PKX`np$FIGXe&-PZwtg}Tc&CMXBZ zhH=B2c^vHBt@h8wsHrsF0A95`KCP=MnAf-1hYhwjebh`Dx2^Mpvn(()NH@_dJmt|&1sBql4L^vaz)lh!c(cHt#Wh6fWcL^t88A`7KmujS_2X2`<}=;WfC=)uCL3Te&y+JkxsWvAEk@$I!QTvRZSQ#ZrGr0n zQ#V%Es+m^;9_{l-e$=u1xQ57nbC-W#?C$;a+#`%r$@NI#Uzvm<6xR?AVl5+K0~maz zf|rl|9LZ~<`a?7ZYfD;Q1`&fvlTj_#j-+kzO7_wW0I6tPfbZ$mFX*FFNt!|5-d>+<#`1enbH-^`4~5iYz2GaR4WIRbAE*{;SoJN=HX+w`Zg8d zB0UT^u2%SzEyBUBly9qywS{!|Gl%yn@QmOFEvpi-I|gaI1X0e?eZ?0oQ|Dz9>Qxbk zAqslaz%u5Typ^IgRkEaEJ{o|YQX|${8iRbL@wB~`h zm+&-kP(;Z8OiCci+^>Bi0KO3iZpyA&B1hhH>nqEgj{!(~J<;f(^hwkrl-ZnE-N@_M zCCR7+9+w)*-+ZHmS=)-DBgXrjvyIHk6I>DYUYlhkA|g@YJJ9?RT@`EaE-zb>1_tsL zPCd0k-{MYPD*!IXL#=_~S;|cIq6dy&~JF7_B zFb|m_gXh{B8d~+)$$&v8A=TqoXGN5TD;rDfJt(GW;apN6-kFrS2l4G67{7)XurTNG zmruL*r>7 z5l1dQ*C-RU2t3~^&PDDE6*=nm@BkLW&29nk+`OlaFFkrRszM57vPVrbJX+_ia7a59=w9CZr z;Ow?r4A#x!i5&Qn%0{5QhOfAfOnUfYo3VPvFyPxieN z8Yx*FNYQEgeurt7?aG9-TyjoY=2bwPztlCt^ei^2!DSiR+$80iD@>OtkyZF1HWYwO zz^9=IVTVnEu)|s<3LLmxhA-pX-4%HHLCYq{Yuq=+6nFzP;GVEvwnysS+i6=ve1CC_ti&q#kc|cMo$@^(9ETH_7 zlT=6P^iL2}x@+ zeGF}8x8US#XM`o@YvL~5G_8GV`{$Z zVrW6lxSlmSsuN!j42MeZuG65Ds5mPkJYXJ@?ZSt1CXelfuLXM5|QD?t( zm}?=3fXjBnCvht907Y)SfG!#B+&>0+9#JYOP6gUmKD!>)y;*Y@r^D_$O<#b=sK{~~ z!rQutZh+(s@Stq5Sp>QHsUV4pp&VZJLqaaJAAbJ2z?mGHqkQ6w5Ov`d!SG!`n2*sa zhl0N$W+tn^?jUj7%%5Xc8X~_jqB<~6n?=0HakdA$vTCnES~YRn{yFF?u|*jc5f{-9 zyt;-@CKf5X=jx;*d%xgoCDQbtWQzVfCLd=6j0*{+yoOcgK+TS6irIO`1)?C1t>QKB zFd8BDrxj=7J(M3+K+`At;lueW3Q7~@G~>|+C{E%;QR(k9rw5TExU?eqldc1V{x>iS z4E$X=<0&ez1mgskaN=%{s@qh`+#Sk|E6z^wP4rwK004f4+;2qY$LzjlM`lC}^u(mu zcZ>nf(X})E&q=i%C!)AuV$iv*0pITBW9sC$ht;1%`{xi+(8nEu&p{6PXeJqxX2PDkjI0FOc(Fv* zL>1;|MZne68zLMCCJI7Q$I=iRFsr7vipiu4>*1eSX1a@H_1g#IT`!|&dFF_c@iB;~ z2*TPms}zd{jDd996h;8+Q`%3bfS>NyY!@{T0jdi4V}8y#i{4fm=U% za5$Z@Cxf>J#3k!P6tY7L!f-L+UglVJ$XZ-lkC?u^I`;L7g5GB4-$Gigxf(w)Ek5Vq0aiuJ3M8r3djfBuO zVTQm?D=xhq4GQ*sz^Gn{&OlF~GGgDe zjp{o*|L~O)InjISb=E9O&xBUO0FBf1cH?wq_r^#(7to@@h7dBxkg}jGzw8<7f$4gB zCL#|Nl;)f9*_URko|f_ol2Qza7=JpReuWWZj1zDqF}VH)>M3tA=t=Zlf%#T=H&~Av zprWXkudC($aGX7+CSluyA++eNvKexc;&oWhsT{8At_PJ>ofy;sW?n_TIX=}MHf8D=PH zc18Bk8LaOKWe2Y+=9ay`%Xj|J>~{Zm{%;2ilk4VvA_Xxf;v3{YxkQwX)J?XoCTk8z zV)7V1GY&^G9Xt8$xxC5fZCiocM?UGX7s*13?uG)Dfczwn zdXguxdwLc>pM~SK{Hg+p<@6m;j?us@3uxj`?E_CcXyiZ$!Z>tYF{$XwZWRyQC@iUq zl6#;y8iudj{3{*Z`eIdatXTmL_u9oGK518QUW^~xD?Ux{J3ZY97#2nJ=F zv4}rRyLmvxaib)4p$guE%aV>zOs?^cS}(F|vGqsHuHS2PsR??rT*?ggDjhrRDfkT= ztJJd${Q%QA@7TX^SG-I)7Ktrfw}u_b+jOL}G5AO+%2(%od&!pNm~%@^_^R$8s=BKq zsYt|bied{?x|ucNn|JM)fXQ*PAfHHjz_fA2m_ffpv225RPp$5<8GTz&{uO=weiBzH zWO__Jfq|x9nr^UEDDGUsr#6EW^cjL_+%0>~|16S{PJB(*Q40v(5!o>(L2<+;T~f;S zh-#nEktW9HIh2|k);$C}I4Rz|6J(+1D-KJT$!BMfsmuRaks#c40mW`)+OpvE5_JW+ z6K^aF?_%Nyb;Y-9lBZWI9Oi3VqNmP!eM2SL`_?UaXZFj!Qq{m$w4w`vpTmIBPY*ve z(zHJ$8U*?I9Iw#(Elg5rxv90Tj%bGDgB|)(Xx1ESUJv6J>C{u#+53qC8yt)2Ien!; zg{S*(blk*FLi2C?lNkn#hg}5h?Z11N*C_O?IZa3AhKGopQ)@C22vFhU{?Xr8Ft@)@ z*nK0X7nN5rYc?P{VryI6hA~@2BqG2F+gtrmXH$ViixyOs6K5P|P8!m725z{e-pMr~ zeC52Iq3=a1&4af4Q?4eQS7zqLyjaU>q3lgDn$}R2GAR+^=DCYu(W7OK)Y=oaC6!>c zg>&m8n<@dEkWY_`r^9lk(N6rAhcrtCDLpF>bMgdK{=cS%_9qU*o!4nn^v2r6XQz2P zRo1|5(V4ygMuoGr9hrU<)pqR{r!=v}0!g^bho#n*RIvl9A2^{l_uNhls{)q~ml+WZ zzdzCZ1?7pfEOXl8*Q9q*TC8XMT7Q4i>YZw4E2~GvqiocNn!;M^sjYY4!*Dy5NNQis z%w!9^Na@WbhFAqeZyH#MGiFv81pMJ?z`K6bM1eO(#)mh;Gm~!tIZ4auFs7y>>*^xi zyhxSJ6YOywPcf{lKoNH}_S%5={s4L>(PASz2h&Fo&qB}w$ptg$MyAf=ETlDd+XVN6 zl(Xh5x}759P0h4>bp7V4m!~QBS+-_wek#=^^y<5Sd8a$20BE0>dd|?B4 z7}=ETS)yAO&hV8MpFzS zxSSBDx+7MsR@u>}qm}|tI`6e_305{AZG+7bVLvrYDtuP9R6_(H&P1>P05*B-E90e8 zl;JT&$f9^d3S66bl?6U@x1e?ojIT&6n0RZLtnXLQGevc&fWP=af$;Im-QmeIb@hEl zp*FheBx?qTU%5_QM=}ahFv(5U;Aby-Y^0MAS)#1|ay^xnmc0b(^)WG%x`Xe}Yq*%4 z`gB$)q#1<$V_qhvT!jq0{aIXV~EJ8pW1 z<8kmJTUoipeb#(R``rI)3AB#O!QmY>w6w_kFlK^4kf~;w(2E~M4Le7@BG9VOc`-c~z_1Pb5O%ZCRtZ z48k6;tC;s@jtee)|#6Xw6McptDXP zLY(;Hbz5D>>NI@OEwKHRMZ$QtoXvITl3X!{}9!x@*p(80dk{Z?yLiw z;Xzvp)Ekc&u3x-#=;67!&7^ef7w8T?m}cWgCx<`Jyf;hfMDxwE6zMPFGa4c&oC6{M4XLeb$#F zh6q!sL_lYdY6#*_iXs%-h^}(WCsn>M=z44Wv#y?;0UGn8h#~fNWRq_}Y+^A$u^>ls zbgvd2&VogWVEM&cIrgKW!vE3P_O>Rcv-o^q&UrKxV%l*nU8~X)YY@o0v_851*j1o- z?rG4tevEe9Q>94vyQWE|a|=2AZGU>g#kb?Y!Cr1h_$EA6>QjOmmgN6<9|_l63*Hwr z;QQfCcxh4>w!6&~e!7d(oJ7NPzUXn^4Wfiw5xYu5QSB{lsUlwJfWr4*XAjRz>q|BY z$I^OKUcdDPE0N?1?%>yHoIaS*lMFmx8meUaj@T{G|0sq)0Lc_XGFm@9h%*<9<{^T$$9x3+@Ckh_&Iy(Ttfq&^edPA2)Kn$&r5 z-JIF$+|_>wlwVqM5EE|6mnXrcHyJZ>MngoejQ#*gRo2@l`lMA>2@%B73nhhqI0K5= z>_u>Aqxyni@{iQjWJF7l0B%I}GtM7@%)$#pw!MBzXkHLqUvbx=+kLAVwA6N#c9)F@Qutb2ZeT zY(So;lBa1kHD~H!#y%1GHL_^Rv3;aR42^**+{mT>vaPkXJoZpC={^4Js|3!q5Mq6| zklS}}UVVkMD{KPGnfSnqR|9jwKjlzl8;;hM(0zcz3OFfX96p#ALjhjNCz3Fva zg$d3!knIwny#$uK?o-&zx!}*3|5oA}`fylzp~y8VJu)G`^?P zakp7DLA)()03;2dS*Jn2%TD*4z}Oik1EwSsB-AUS@FF`drNBJ;fp=W?%n<9uEnu{I z^^1ANZ7lUW6PRZBusWoxnEIgvC(vIfqN=v>j@9^F<&6#4n&)7ur^r+tXIS&8^hS0k zM{*(3DA<@=#@?VLayg001)>O*Dlh+eZQGtc^o2FEsKBR#4~M0ZHZFc=ur$jF9+c1q zbu>}DfzVIR>3QSn#VB`~8W>=^ljf^VQGV*ZmOAp$I3<1Lp!?BuURj7UG_%Iw2w)*ig6CnDhtp`K<%K2WdizwE@xtNcBAwpBWeQZhfcG?l+Kdb=7RIa zWc%{Ow(#AC{A~|Y=&ah3iJ007KNoyzJ9`ius|==8teIA4)ZE#eU%(nLv5Q?+fq9=q{Gia`POzLA755yde*5XUa<^6TWi&^u|2~Vut|$i5 z2KsshuM6V>As4DIjtCyaWQ7^`95W*XAYnT8Kb7JPmW5#{d_4CMXKQT>GA3mx3RlU| zb{;-F@e62eR$PSKp#`9iIdSPGGQoU(;1OMJ}ROWR^php#BasHvYXyG&~VV@uX0>i2Zk1{+<-Es_@2@1W223S3d+GILCqaV_-U{zx3&Z6@E_D+J{IjT z)M2-V`a7ykGM3=dPNc&uO+le#6lm-ySwZsKkl_R-TrpA+-{>(}M^tTBZBV4owg=LN z;9+cR+bhfQRA*(8xG|Lb%E0F%W3_cL(YYEaBI3jrSQp^*lj=wEMi`0O^aWDrUZ>)Q zsBcEm+s3xwdjRY+cJPY0*X!@7u2FYln$iTbIV>t}Z<=qX(Sn2Ua_BY?a&|7Ty`pb6 z*zCq?%(0clNbJ*t=A}MG1)5YU8i4nBmbxainNOSN?&e}$ctcyKH$`a+x5SC0VlaXUgq>Q}xF`|zQr6{bK&ZQR zyv9Wh?q6s;O2dm~gE6~F6px0&cT7UHX}Mg(IKL>106Ozq%S>45Q=*UV(@xLO8_5p$ z17qkTK+^WV9VlL#HO3T&qx$dW0 z&%b3_CB+4%Uox?ruoS<}R>}!kKHaeNN6%k5to40IbKLh02fsD7zh(4bY5HUNG0478 z{i$f~z;k=XLu*9f3TON+MdElp20(s7;u{jyXKHw82V%E?WztUvSO6$XMpXF=Iina( z{2uU{qA|&)FRqJK+ctUE*MTda*pETO8^5)1iBeFO#Bt(j99xs`)4E$xbTwkVkZDu6 zX!vV&{ugk{Zyma$22+myB?~g{I}mr_n*P*Gl;lS1PVtpdK!aO(EPE5Ci-|;_mtUYg z@j#xV?2a#VU+;?`MKk}fT`i&*c+ZH|N=3529kQpXkR2+U&(+{lE%V<#o#CMS&F1p% zX|KADlw_m5RTpmD-4&h7(eNIj)!?fCU%bg-`Bwo?p+&PJnT>{0k zEO*db6AzPl;G5RL=DD)Y;dl!#BS~ql)ca-rE#gVKYOu1Na`q@7nLaW1UB7x|L>(F! zW)6h^RbrnyZ-aSJA-76m;Nyys^znxt`Yr?B3!FbnybBC{Hk1f_zwBOEDqOS96R2@6 z8pO04PY8Y_>OL7S`>(G8XLGU(SbFU^R>VYU1T)b7w2W`iL-T%E+Sn9G_`sla?1#I{ zDGTl_qGyGs6TNiiNB_*(+7T|+)|6ZyQ(aqyz|)-aC-mJ~Ah?0>|E%xokAhw=Gt@TQM6{?s0DgGuGnh3v78? zI{uK7Cxg8oY4=#vSnAor>q!xn6;_`QrdA-7cTB-Dw1=jH!A^*33{m_7f)%u;?5%ev zJPOc8o@YhT$$ZD^X=Lp2r}-^WnvSqS$kjrS-d(V{jNH0RA zY2)-}JVv!1wdkU)iDH=xd-99Ki3+Gu!aRSWq2Ubvc$xk8!vn86i#LRV8yM+}6QH0j zzsOGZ#?Y|qjuV*w0?f}5OhAQVxxjW>t6#JPU0W^(aSlW{H9G)rhr^y^uaFN)mcgglm{`p>CT-p(N@B4bbxuac&3Q%AEbWF2NQ5F+vLaZ&ll-!slV%`Rr}7HN zttHw>TY-VG;{DYbR%57%a;}S^EELoka*JbnSn!OAitv#!5*P$RaA$R{C^Kf`?i?M& zCz9Myn5c${P}d1RE~^EWAWjYh+_B?kVNj)t@pu1UB~IbJA7~L(Cg4uL`d(4AuDIG~ z?e8d;Ji!mYiPdFZeV}Rdl=SiZWCBdY&)XwzEQ|-5u>ntoRal34B(uvxc3KzhaEQ3q z6HEhy$NOnmwNkqQ-2SbU2Zb}iw6t}N-`af_ToWbmGsZ$dM5MLZPEyBp{bbH$uf!X+ zbgOJk(P(^sb^unDAxN3+c7Ne=5KcSA)EhJ;oBSm#!Ghla$}n?{U-|D2{vJ9$fdETO z@;FxCi+{T4Axx1eZYhKN$Hhke+D1d>Pm2C%c2G5^v)tN-jkLaQPuZOkO0bq5PtNJL zGb;C~*GUw~JJqOC)M(y51{kPVepLMLv8zRIOy&tAz~GRqzSC>z;E7rhl=R`z9&zwD zV6eJQ=(@P)7x!GZ4{;OuZOld@Mm|IR`-yl%H`Bi%mxDL+lpOPa(-)W1779Dj(wN~m zm!<#0f&@;%xu_ZasV3U|)ElVoG3F`m_{CZVV1x_Crww$h0F~X*i|u8QyB7eC-e@#^ zm``5d4@g2-=+jsw*QUmi z7rTvR_Z-Z0!y-ny4ZTXzRGR&p+lwAY*LsVFA3? z12LqZ_&Nu1{(J!0ujnK|-1}dl>AUf~3s?>Oy4gX*S8)E9JRxs+Smv0CQ}yILXO=y5 zHlcv11_q;nI3A&dS}WuhBEOU+R$Pn7qqHk4DmNcJbWw9Ds)x0HmX(vLkqD{pAnv79 z<-vt@1%RrEEZQN--VO-}M1)U9iN?SQE{G`T^Fh!N5&rcWV08pR;N=jJrGvqtF{4@n z`$E7t>capqdW<5%B{?B{g1+2J)ANWIajGX#ITMA$u_i_^$ktmDgrWkyde_VRDO+@5 z0oKaX%;rQRYG-KwfB?y<3%~dLUpLq{cvC9Yk;IWPcq3`J`_5#0s>ofN=?H zHTz3GAeP9T_6|4LzJePMl`JI?|5~a#?XYjOC37ZZo;3B}KE{b8Zf>qARrceroXiQq zZB~KT$5k7i0&V}PXj=5)pTfU0B#X(Xx1h}3rdS+siVxNhvig+Py(6Bfz!t0Ou|%40 zWY$R3PM~%lu8HZKMmpHoho|yW2|<&LvC*5z?c~J0zr4DzGB$mUSd1w-oa_@N`+cWA zgzSG*lI`Z;^ZkD_7jy*J9H8KbSKuMx44w_amcI05Y(T&U$sfgA$}4WAfpxJk?-T$C zV%)D=%ev(I*n9Nc{#-7OQ%uhmF73t!D?Wu;HTx?x z1H&nX@iUqt?6tYE?VacPp#KlkgHQjtk4`>UYT734JV|X?;Yu$evvpt&DhX;du@!=> zoQZ>&f*xMtN|1r>=&`2fdjmtbPY*j19-^)Ysqm2uUpFPzcD)&jsUhtNWwFOPcae1! z6ob3S!hi+d;x$|#;?R-dy9c846Gz>Fr9xNIw)n3W(bCRM_H39&eDsma1~~qau;Rh0 z<$s*=qgvQQsZ(2o>IN5FAla3fnSTT|uKkrjiLMdcvQ7m7*s5ZwTGv0}y$vr(aK$S& zt}?*Wu3x}0Bq|RI&--oGtH1+360A~u1IIEQX0CkXm}zhDjKm{J<;_iNUYRxT`{GMEDqIRo% zx$hJM3<2cC;7@m4H0I(yA`@TDP=Qn7J0aLGpmwU~ik+Hc19=K~JFTUphtAr`tNvsk z+(YZX9flaKRqwZH{zBH~*bwf-U=gn@8PhQ`-3PKEjU!=Rhxy9VUV5Dyb{`B+ch-NE z@ATL%*=i(hzPO@%8Awug*e43d?PNn-cA%=h7fIrlPOmfP-dyi)XYfJcMQnGaFP{RQ z8o$GKFKW~-4?sGRHW|)UA&*2>u1x+HWwCvFQ1XQwrN8p+hn$AJ+|C}e8fG|}(-~o2#fZVQQ9w3abrGAdqP4Pm}b^{c{Fib$SR68^j zhG@gVP%T^e&u2NM&M|(?@r}3Zpz*h28-nXE^RJ9<^$CCx^4^AUagm5(&_;MNFd@QP zHtSvxNRak_J>vjyaTqw^|3?PXfN6qf=g0t0c~5ukl(1#h2-4XPo3cuS6vUE=MJ0n1 z594br*qPP^&Q4@k+m=u}#SX-j3Ya+}!DV9H8@upkDksL}LLG8r{}c)VE^KINHZ$r2 z;=_T|&Aane`gj>-DpUC(hVwJUOwi(tV|@_6=(JT@I@`5&xv%&r&B6I=4Tj(%H)bZq zq4LgwS7It$7zqxSyxD2aC$zm}Mjv}i%L`d*O-Donq`pJ}Eey`x*qz5CrNWP|T!j-5 zpJ6@Sn2hvaAnL$oFm)PnZ?HQaERI)4KC6cGtRqP5YSf37)_gh^m-V)Pz|*}sJU)FT zyL>(p8C-!{C=kcQ;x9?wxjo0PG#Ts*ewKUxoz#TclH6!r8!W$+gmIjq)tWlrLRKlG z>Y(%_RH1nP*x^kHQ`EO5fGb6_&UiG&T%WTDJSaI^4l;-(agomnSU0l95RH;Ds$U6Z zhQw)nif~@1m~{+nSw8 zp!=zpD1ob@Xeucq#6iim@n*i4RM*%)5)jC`I6ghwA&Jy*AKRw(vCoWbe#9yZ2Vl0F ztQ|_vK^xntsm@}A)Ry7bwC`3Ga0K0>IF+G&Vzq|a%W*6!0!&fzA28{d|4s8d_@#;I zee9y4{39_Py8?xQ{oV)t2aQURt$3w*ciD;m*-!I?1l=imOI~aAz3is|7C6$~hGqKw z7Y0#gBFS_%Un0!n(dYg?&Res$doj<*IOnsHd-~fXLp!9O5eoO9pIVp4BRld}<@oH} z+1DCKHi`Zjt#RsBz_((OC&`fIFs7V5q^K|pC9OYi_*OLv1ISHtU(}pcETPtOsE(#A z+!G)!Vq~T)L?k!xzV|;1OZ6>I)0iuz%0u3g2!n?b7Gew#y!4bSpbJR!dHK7r?Npa# zg)7nO6!UEN>6NOz^7B(ea>%R{*uLTfJ}zM3a!*O@CD6*Fmz2@}zEr*NXt?~T?u;FQ zq4QUGoHAvb71XTv;3Foszcn7K-#212PFo-@Y>`a*7LhU9f`J#x6|eI9=3`RM zbNol2gV=gxVk&fTpQ{iJVD%v`R8j=%VNJ+^HL^_cvc@DdhFvVD{0cN`^t_Qdgw1gb zlT!V-rua>K+V=rDCMny_*{C}cO#yO&7HTGIrjM-qAZ{O%&e8A4Yh9F)B z`AA5DQM)Tk561}Wm&=9P9BDiM0%={u_bs$vMUPk3n45~dQ5-6U^oyU!~7%n!uO`el_(5Nfc zs!ArBTsqJ?5!}qFs3Hs}#BDl-mMyp26IMj+O!=GM$Q=niU4?cTjBv^Gs7KX_^O@ zk&%siuAR=hsLXZ0mycx)Od$6#7*dnN57j@6A2&O|0H=(+^^$kJ5u13G1wM6(O$hHk znjrF}0j_BF!aYb5eKRM#Y>yehpeQ z8n4i?ReeRJN&A}bv~yskz-?~OR~2E3F$Zsaf}aM`K{zQ1>#jtxJ>r$edjx*=+9H)B zL-QDR9UpK6sTg{Z`Cp5$MI}Dc0;`0zxN2?5TtLyCKW7e@ioq0j}=7S+#=QfSa}Ol=SI5l0gopSQE3+ zE4o^dtNhYC*`scb19MVRxiyE_1YVga`(kAx>#x*0uXRG>JDVscKgBuA14!pw-Q{~F z24sgCl+YUItKAd4;uE`!_4z)m%+rN~Pp-JTN*VlrRW+6_RI>sEJv0nz#>c7GK?qPF z>ez|rSP%iAi_tWr$$8Tom?ZRWu@M1xc^2h7bX`&a~{RDWa@Ale&OH0B5`{w6sm<0*1X1?r;@L5&Ad@Hgw(L33> zI$488{#cuP2M28F8vv*=bRgJ#@F7CKOxTRpJ#BJB-eC-`kirUz`&UuroxNUz!1&}? zAa1ay8Tu1kQGtTdnXs0EwOGCy>M8k`w}KUsatjZ}J=f(kpebz$e#d8{q;v@Nzpr&j zZrF`y6|h}9ZvoX@T40;A%ezq2SMX&5iM@1r=570_&2C}y_}j^$)>juc5_gG8M2#9y z&RSp+Wh<)2;u%&KX{cWnch3+@brA(-Jg--6OM23_!5 z4rtre3CF7I8c>-eL%MJXr^RpIn@SKG&J^>H$5HQR&4wnw6+&o=71czHIqW=>lxKb1vBGfYfr^}74Jwy+tFrBYkj5r_RoI@ zbh~=nKA}>K-+X1k>f&m!3*y<5F_LyL@HD}6RMyO{n2~rt{{Jjb;k;2@`OBoovhr%V zxf~TSVlSht|9*-P_|`s;xeFxXyfF|5`Mq$7PcGWsV=WhocxPg_rf&OUexChOu|o5r zUwOv=YzYdL7K9@Pg=PKaOJD48|Qq|BYYSxLBK9xEFNGc-a*vH!cW*NEVGF{a9kLJCz9~RR)iN z+cqAEAV37`SIy(wf)5R4(tEtWmL&sF{(Gs)n@@c%DaE+pxq-Z`xZN)x@6PA4&KK6u zMLi62NjYQOVj_EU#h<^DRpCskBxA41r;qQbXcT3xCF@jM&rum3j0ENJ+262BXm)cd z*TqHS<4_mA_ia(0WLJ7-`Cw?ucGoG#tZJ7&k?P%kr za<=cfl7uQddD)u=Azf@ak=!U@kqL9oOSeXC(F?WvU4v4w>X9CCZ;!@8h4%D8`1#(!1~Kc}hx z*RJbh^nqWm~N2@T_<;txn(b6dkC^F=;gro4S>U;JNW1>0+;OJdOHl z1|Fi6e{l99aGR_*S)Kl@Qb5K~wEkBQbxB}0S)V`Rn|%&4i#@PXLSpk=MNtR1H)t>+ zikJH89+hg8;oo=BHnw`Mc0dh}PlW#Ls#{@ALos_`)ShNI3^Hh_CfV$VXUElMHYfAW zY!q1aY$v61-D5Kb#x~a--qfPgxoq3to~Xt7V&bRxIb)g=GVW~T=1Js@=L*>`hb^1$ z2}RAFjc>I>KMc^V*1VdZ64d>^=%@>aH3&f!_ofwOe5^~tBheatvOCf*Ap-wz4-9-|?L|Rl;CWHPo?1&tj^r#j5c@#vMxrtdJPoM* z8n@L$*)s+BPp>Gy)6>hj=$Yxe<+8PIpaBR z{U09y;x|eTEhw6I3CFXr;@hfhMD*RIgBn`C_Yi%5=D zm!V)1*W*mX!c^Z8027G^5a!h~7X4-)pPa`1-|w$ol&?R^Q+1LqMUiy^69e-1F=EEN zC&gliRzw|xq=^g=(D^~Jq9e`|t*H;TEC~Xyv=k@X1D00nY@}o(dqP~A0VWC`C6Zxo zuP4tHA;T#LHm1QacKM(ppOGmjU+H}&{qe*z=Cf&kME2wHf!!DXi@0@x)iipL$N1s2 z|7)WMcW+BjHHz~)kvo~?8W26T6nC_mPGfLciLxMhnSM7}_w7B?Bp@sv(;Bh&UQ{N^MeU77fIQ!%EsX0sIdSND5!>okH*7^K{WK^W(7gx* z4EE@;I0E;T=Kn0Y#{$%xn;|89j&`asmb5TaU?W^U%zC{8!}i6s`8L>cUNLbn8Wm>{ zs2PLJM!FkisAl4e1u~mq1}!P6g32}hi$*-y;(W(o|CV8x#;w~K>qenzF)1iRQlpLS zDO@m7rydOTFarkTF>JTxPriq6m5Qrr$0J-E+?5T1Lk_tfu4HWC*gb?Bw zoaZnQ&tR6QByU%OUY$G$k0q{84TQrv0u>TnaSQFEK$95ID$>+c&A`W{5BB`MjFClP zT#Og`yAa(DPYF*`$f$gV!}a(ElbM?I-MT;C>$h8G>4H&1Yf(bf@G1}G^n*de%&a;dx_X%T*-52gw@!qR1&yWzlf zWm#otOj=^o&};b`o*L%vfQi+|C3hz-?A60urDw@5&^(FHmAqsOf{JXa4L{)P)Hf_Q`z) zh9^zkh+*S_jhAgaeQI$T6X3R0GB7xj%GUJ{g1}d_n&~S$hOUJG*xITe`})Z*_z_qE zMY?ybnBMDSF-@-+B?`}t^uVYL3`(%ojq<|Lqr^}&s3q?P9WrvJ2ljY=`dQ1!wzl9U zAJh1n>5ZJ-2CkTff(lhD;-MZmbuo0>h1788-#f;JhNyS3ghNAZI#hWv?O+fM@Jb=n zay$MwE%k}hF6C;q#CMS64Uh|&zWI6D0|+$aB`n2>EN(e_^ijVOX{sd^qRn!}t(EUj zPh?6*kVogvAk&g3Le;|c2>AO6=hKnRq+oI8pVqqF^%!*gJ%}io0&p-XY_ItwfsYQq zvlCB8?NF9@uyXMbzI9^iGhzZkXaNYz^i+T;?UPgNeul_BnM3g^0AIN7JL)Z`c zkV-;(CIJmxpP!{-oC_`T*`C+vbH~p8+2DlA0Kx$hw6?j!Vre0=o>nsx;Vud=j?#i) zL!0p*9=Ty)ZK*|tx+(H=a)=N`50%g=Y;xA5%}qwBB=Ha}CZg9TMv;s%6t4~re`*}GO(Ti z0000007V0OEy`JiXaQD+R$yW{>Xh1av<@Ze{gPF}W35J24a|a}9$BCr9_D*e>eE|| z5K1%yMqgF7t26yAJM9g-_tE=f;hA`2f`~!!Mvv3K zzvYF*Oh_5l+zk1rDYt#~Q^ zTKmqrX~y!4M2O-Si(2>wid|-blwyR38(($U8DzWGAa<@OoMwND_TH<#jTmFkIEnWn zyO_*+F5EoLl<=(ST0{)-B&Okr&4U5!IU~oH*{YZoFH5yNf<UkgW-Itm=BaV7E84RiftuD#YywIDW;{x|9ithZ|1qY?rhARjTF_x1K z%aDyDwCQ>*kA0>eK>M_ar3j-oTbmq_HqvCUMZn4@=5`M8et$i9t7Z#QN5Vz@uVlAp zCraWS;O3NK>YuqhxUK(FOJl6QgD8q&+6{P`Q)hSkwbm$Nc=t9$zqT7gs*N{v7Qp&E zq>tpeY>))u7{(CIK!$P{+dHae9kwP7E2hBMCmJ#^?6ta~p+0+OS;fcLA3G`>zaL46 zs_*>L%;h3K)o?8x#4s~_;KQZg#u=;s7EjSybd$Eo1VMK_jxK>td4|(v-fKi?RTz0=YdB0=m1Jk1g|!vfH1tG<7Bk$yHzM9v1ZLpKDdlr*Bx$2m()tBe8G z)(s%F5f=uf`s3MZL>rTDks35p*|=W>7=uTs*}fNr)X2_`n0Cq>Zn`YVjiSH{nhX8= zSRkL*nU#2O{<-U;B>q4@aCR2%Mjh;Izk-b1ACw?0nF&-gdqmKeNlN?!*Mt%#cWK`t z>`rmQ`0E3qOkVUfaH7qf+n37VCm~LQLV6S&(2}~Bxg1-}oxZucCh2GUw+EpPgbo() z@gpk2=Q|$M`j}y^A}bM`c5Ov66zA8&tx!8!ata;s2iHGnx&Ka81N!3;1KF&neP;mS zHkZ>b54P47ILS0mVpHx@^`yZIE4VN|J72B|c>tz1zV&9TxN#$D-+>=);@x2kSVDawQ2^_Uy0mC4ztH zThgSel)W-KgmuIu=m#{#?3J5`I4;5WZGo#3v=dQJ*M7(+Ua=F6Cu}mVM}TV7h7uLB z&Z{^Rl8~}82eVVX0kL=E{;~KrTAKts|5Hn2tiFRNrZAxLcRjQjH#pB=iC_SQkBs^q z_O2UITH15UGRFpWo-G3hJNtGFYLjn^?msJP-|&vRe>6K+nY?;>@~d$_beTkRKtd%r z^54ERHf=q#I0a8S9<*|fJb`8L6b9?dZ?$Vr4(lCHOoCLg5^4G`WUIRR5=al+s%Mmw z3K5z%rM-rMR)XaP02_JNNB4bwTd2nUw&5p!8-X7`V3g9x8wT4Akq*X*&QVLzn%3EU z20=A19UK-Y$TgM`=1v}4V@~(=R@+}CNy|$aI(UvB5GLiTm3~`8N*l?^aR!O0hql2@ zLY~rg_!gM`u;0<0IU6f?*DDxoeX7@9HPao#e`(Q{xJ$o1XDWv?xvn9Ad(pVKIEg^1}q&rm1Cw&$x!bN7bg?}=shZ76QP;qB1kw6-ok3}bEM zH@{Zd*C=~2uKM*(?Ml>tU=AN3mV`SxZ;xdWxh*x3_YXK@zi)eg5kUY3H${c483j=b zG?@_1{)!E}+3(ArTL?!BsI}9;s*RtmjMCZdJ>pLWOvI4S&9*&Wccn>_PU6WXzyvrt z-ocf|#>GiDSP+b-L_y#6hiuS7rHOqN$cKz%k+NS!U`mlk>nj_hr<$MT5jmZ>aX`BC zjg;$~#h!oG{mf3zXdj#9F?6=zlUm;Ap@RT~9$96a{_@RMCMVAH#TRvLMVtj_0W&$@ zVt)JU9o4cOE2_#J;B+`CR9b^zlL?FxnL@So;zG{RoiS-zZU--SE{kyEXiLE_s;)1omuFawpj1%fC}}Kv1-Hw#4mF;%uSzAm`URa^E0zBmMi?bTUM~ z9e3)(4;C$s2D|@G`MUp_cARMM0~YK*?QTV z?pdVNFZ!11+5eN95Uju4mDqGda6*gbEgjCSa_>}V&>eSK4{8hoTBRu?w)>Q!0|QPsQA;KsUF|Om zgFECkVKUQ|aIGiQX*d+gTR3j)KB%OYY;H7StDZ705E+MQm~XnW?Pi&?yU?zOk^sd5 z-?jM%cHkW;dz@6A>Cf^@nYi_TC0qvQ`gf;CTj8ktq4kr3L_vBp(Ji+jHE3gUGS-V` zEhJZmwA37%d%fUi#)vXD8Ky0W`;IKoYHzjI(E;HlD@wif=Ty;!L8-_*{-C3z{tmUaVJbu{{#}kp?#$}X4py5O<0hClg6?5TR+G}y zte;#}DCws>1bl+5BiD7`PS(HVMLVTT5iFf)d+H=I8c`O@+uq}I1-Mr0i<$`=mZ%sk zA=jGB^L5ATVGP%jONw#mhFOpI<{)y)&tqvt_-ykNRdy>lfQM%Q>-Zu>OHTT6A-@4@ z#bF5-BBl1uQ|_e;Pqf79%2rtf7#?^udnyQb(7wPbNzchlJh_-s;L>WGYD%=Y72VFm zD12CkuANMOAaZB>@mm#52BdA|cJF`O062?^>2B#(E6zgAHP<6>d;`-r8}SB6s6zU3^v4F4T^etXUExM&s1R;k&e@RHMCVmnSj+ulv~(|Eae(YT}iBn#hs zqS{SEBM^pgOvoDHW*0RS#Lkkv3BS*EHu9QU@e%uhxteZ|I92>q*9a6P)h6gNV)I%q ziW>TP)UAb=G%!AV+*Xdhk#@Kl#Z~*(ydUCVy;~!(9|o02Mgo8wbuC?Bq~<2P zi}Ua8692m4w41x3jB7vah#fyo><}iTbJ!QpBu61bo`Do>!Ry=i0D4s&Yh#yBKkJYt zx2K-$HB_}3pChn+`u`>6-6WLY2b5Fxf#2)QC@S?+G?Q*c8 z&XyLnxas(t;0xcsP6RVu|Il*ERO=Ooc#sL_tKIO}hmd(}=+jNpp~LNa7{^u>QG5 z{P*yj8d*tlw1jtTbKKV-0JS&7Wx1)802Qp9D!(GDpS)mVPKfQ$8)K-j4+(p&dqLVi zuPJRHY=<}NufQz~^<@Q@Z+@;$Y+@~1Vx&0L^wFM_4kzsny=r(I_}6a9r{zYpfMDGl zKAKQr?95@Ou}pT?rzZQ`Y4K`1xYLkU?!t0%*hv$s5}1zd#fd-YI=7V|kgNiD^;Nua z12)bia4Qmv=*L8$?7T{8*w=JMkGAIrh;iUuiZ6Br+P7#Wjem&sdc-cBT_As4DgR}8Jr0rVb1aQo59d!Uu?m~T zI!*QpQ#{%;%`OcYal8Ygb@mdbBGs>oCF<%KGIv%kxZRP!>+>z_C@_9n)P2owDwGQ$?Cq07}#4N2{Q=IHFh_-|t27RwL^HSng zkz_a-O7~lH{XFa;S6@@C18a`cV}hU`*fuRW;Q$5HzAxWK;elU`7v;DHrYPY6bQO#M zHFU2H2b+!lILC3_PUtMOFAuJh>ttgvwS?dY^J)b8LHwKK=LHVlLLGza>o+q&%h8RS z037NDUhUySS8*^NM%Qnh;d4zxZ~TdcUi&pBjGb4^hS%$;m0$~8HT0`p6p!^fm!ai^ z=A);EiC;*f2!Ew6)(DBn@;@Hod|LR=$EY0TZMzhz*WnHR?d^RDnk9`F^>5VM5fAwo zx8q7&kQf5+>xG@~Gt8+1t<{EJ4i9Td-BZzw%j^TctIG8L1mUB-L~LoGY85#v!6NN_ zP&=5F@SnXe+ZRrOLg&-Q7+sNObG(r#{kk4xacM&VaQ_|Ud{UCkt1rrpX#k_)NzILK^%Jyxtl4=}bISez?jQc2#3-D_<{(b6-iFWqD~9lm9$BA%@9^`DQSw21=mx@2|9{xVa5W6;ocp^|PYzTbRjIvb>MIKgRvXV66)aD}eJz6>*5wbJsOgX!+s&)ZF_WaEa?cd;!c8 z@sLnOQVMq+b#frO3-YN8BJ7+smMP89Puj>AbZTF_Tg1HiaSd2+Wk%D*b36zaDH*Hz zWg~a9jJLN?BsgAocA4@JxfqkdW07qnL=gP=IhQ+|wtl=GONkSr%M`hq# znh6U`*++@}uq3t!Lx?S)$J?}~#XnV*br+)wA9K}oSv>;_bD=3AIl(xl;Fm1`3 zN=zV@XR=WI8$|QGy0vVlc0lNW=}67H|E{NCv9e)3j7bn?$B;eoMLX=|P~5U?2;`Uq z)kGQ1;;dzzqS|Zk{Ba!z`14mA>alK|&-U2?oZ|nUG2i0@@JA%!4?T6QHlJbpMHBD6 zBK?<80O*LJmb-8#FX-9<`S-~{7a=GtUW20Oa1x`QrNJwNZB@4aQ6B z3%gWHgX`?-{e!qZALePVdWw%om^;MKIw@K>*mM7$@BGrTq&1i%E28BVF)@8fPtl_U z&S6>qs-+^?A-?pQ`8w-3_!MUo=S}NV@Z8c4AAh~qbhM`|e7(8>W1HX6|UB9TFkjC*eMfvx4-*c{E?q1ii{aK)a*!SIUQm)r37O3(|Lnn;I?V@ zv=O9LfEBeFE{C7eg7_VEl`b3-@zdN_JZ2sr|B)~z`+*5x4A+2#k?N%GwN(+UX%i{D zOw;Y*mncIHj8^63i`N497dB0>VBjU-XD@Z@tAwDL%VW)OLOTE_d&C$KW(oWRXIul8 z82)w{Z&35IvNS$JhZ$t<4S0#VX_1Nz;IHS-@u<^JRRTQD2(01j*BbYTEI+~~2b~|#X z_UT24X;YesAizOn2U^K%I5Q=JODgtfr@CK8+LZl;0gpUvBvM0+zi*V5P4{OX^;1yS z@c?=^B7b3N(lG53wNbTTgq6ud*xijSc;h)m$KFp5KdIc)SW2aVtL%Y&4~e&M_rTfJ z1wl;~9eWEEe0!MI5s=VL=Q=xstO-)}JhGk}vBP0!o3G=f!So1EKMfV1)W@pQk*A*n zL_Ud(EPoMfhbw0c`36tb9LR#y1{^S77^U+nNF8tfH*+u>mq3VY(Yh3czJx^6f>Dkf zc^7TdCyWjvNbcwyY=IG%FnY=ei|kUl*BWwtUfoBT1q1JDu%$4!Bv&*Q;a={uuIBrL z(%VU>094m*x(Z3nayU=&!Dky&d{fEG?Krn+eR-ZdV zMU~UbU%+*X_wd=zjlj-x-Z-6jF2yS@eE^0)dB1`73_2Wvx&WZWZbslbaqyU?`akFe z%QY$lNp3p+IPZ((A#4ePQW=C_4?5_IEtx`a)>aiuYdsU(4~3XF?c{r|53~~QiQlb0 zHsr=pMA11E^j4bWSiqK>tX%sDX`wkRvYz1|wmq2q4-7hQ*{dSyYUd-V610*DTzejX zMPl0#O#%OL%sbW_fn^)J(U}Lc^KI)BF?EM0i`p+l@O~a7_p)BhhI4nHU-}AFS%jp_ zM#$~@3fH%w9~InMgp49BG2FE?K7 zr#5y~CUA~v+61SUjr8*M5{WF!+^<)0V`*e;KG|fm2T55ORmivo9LU@9@k>TaHDH~8 z@z5APfn{)#>6<44jvCDsI|hn>>|c-4PR^KNXj@eI+Dh-PiZ!P7P0J_}OVun0 z^Dle|em=u#T(VoR5!QwxnL*CvIBi+fH8H|POnrMY3VaKg!wew}eQ87(RMh zxN4O2f!c8fr@n`C7JkR5n9Na(Vt{T~`j+YxM)z`&)7GLIVbgedt)CES%2~RU4zA&H z5DO3VSL>6G+X3OM1+$Eh#4P1`FbGyF;PhA!nc7f*00002b`SsnT`@!RF$Hich@`)d z4z`Yx!yZwlVL3$U8bk6e#%Gl<&~%VJ75M-`6b*~!9kaT~R~7Q|3>LkUHQu7^v1-nH zjaQt)o`KOrEI2?i#2w4HX%IJJ;-vb^?WJudL*V@nh$H!(6O7IZiK4SGd$9o07u^pl z6J^xQ`k_>&Mdvn>KG3K@rH?D}D>1ES26##|pg0S@{`pT)4Ln~uc7({xB+odflO9;e)&U#8DM8dDt zPqeb`f%cLQT;sx?6fYU4Y+u6>lrV4f@>2@1AEd2M z9a3456aj%~x^mKxy1Pg&rG~r>DZ=_upq{TsVSFJb7=;}M!c1!TqRldkVr5;!8&?)h z=M_yV%7AA80iSc-tie+iNh2lW&&gp>sTAwh5P38Y{OO2Qw3>K7XpWkW`pGB&00000 z000085rgX&T#PHm3_wyBP+e%orA-uqZfy6Q6efN4e9G1$0-Gcun8EZVbDMG=rV9)M zJeaXt`-cU;I+%?|>*v{;hkK9>(Vf}*VN>K$C_cNf1q#?|fY#z!X(t0UU;8y4ICN;3 z*fZ|Gnbn;=?mwG^rV%*6-K1Hdx^rq3ai@PIkUU|Ome`(T{T9$%6H&!sX>D7ip3vdP zn+SG~!DL^AiDJ@~L&JlgX7P0AiHt_KlD=Sq&eDgf^tCt3FN_FD!F6bE#(fZZ%e3q~ z!+Oswp7rnx1xvoI;m(GGU8^T10qlY|0(_8N%Y5>U($chH3nT-c6(&i0j#jCbH*ywo z(11}q>?JHzQ$vR3)O-Eup&%Zi#5+PLTL`ysvIldT)PHkxvgz;gmo6uj;)6aj(t2+2 zHfom{S~_iJ%0;b~_x_BnsT_V*vDSa=?Z!NPVJ3`}XAMcqHQ~whjcpz}w~Nt;PYr$< zq5ha5zyLQw>aW|)0bJ6orzDwo{HJvvpKE6(F6WnFzO&OOJ;r>_w{U3*yDxpW;1f5! z0hlTQ$kLteCMibzsz)7xE2_bnACcscp+K6?XS7Ms^~Dm@RL{q{FuJKjm@k*mS@p1X zy|cYXzY2*8@X+_C@j{y#bQE!Q-LX={m%K1v(Ub31?>{P&Z9wF41)F^ysTzVY7s~ibN&04PU=7=!z7ZthVF2z}RPKdLcJj z&5be;!!z$>nxjqu={pDlpqi-n7_A@08;AaUO)!>aTQlea1qFj#E*S(m`(4vh5}kNA z2{Iy23#Ii)Y11Lh@uW&WA|4NR`pDhH%)UGSQUU$!0fgyG5)`0E-Kyg>R4(e5D|K+!@M z8_IjR%Q>--e|q#l-4DG84OcQNotJIJF^&9&g>Zj$Vh-7Ygp1R0B|>#s!ugceBX=)| zZcZoqNvLipl3;pAW?wgPM(?K$z^I@^-g6*nj}Iv9pPu0oTi~aFATn+$bhh8P+F@5* zI^I<5i0ASCsiEPnPtNl=6cOI9DJ+nQxnq6^BVu4pDTwL$q%f9PX|CWpA&kd3OGk-r z1g#@`v4i2el=*tAjZc5BB{L?xo~P0Z!(BV>OuU0=26_fGKb;UzrK&J6p z`+^h~O!-d{?`dtdex1>=Lfup^m1qY@&ReZ&pFn4&-*jqjDeaZXN=bbP7Ob#A9PizE z$j|(!@86rICrp_*ZXJxq8F>k+zhDo?AgCwxBN462)i~5;rG&LEoV$NZf`=HGz>-t( zpKKR_#`0tyl3%Aklc)SVBS2VGvxm7Q!rt2{X8g4&{NQ+EiA2ahPz;qgZ8XBB6J>Nx z@#=!t_Uvb>Y))SJ!I=i0KvbO~)GB|%VS&y`n}J|%YWYLqGw06nz%x@TNxp5qwTnEKjeGlNto^3fd*wE{>J{ncNc3}`dL9Ik$ulHRt2fCKN zTbA!`#U^MX4S>I)5VU8w5Pca0lsI$5#!2=9okgb@ly!esm^Nu&eg$4bo0c2h-iRq5 z?q`O6;d<{xE_)@)ayJ=?|M~hs3$@I$w9H#bZWQZVjbv*>?pr%5AqVso5mR~bm_y9R z8Fv#q3Wzl#VX>SJb&TL}_#^ii8klokizT(;ki?$1^0EPoXxOFUF^&5r=VJLWfF*k# zk9eU}00002Tk1KB30$w-QHI$csjS=cdomGYR4r+K&QD1eXfKLsm?dC zyf|dKh2jpDH~uiEi|iLJ6Vw11pM=_RP1*vvG&^&YY~ycFG7cN^JTRy(y-v#DwTan` z!w#j3WIhR6#=&=4gy6Wd^9~PwJ;79G7HBx@H=}MR4sL9w4(~cZiVQdhUF9VLz=;|q zhi?zf)8!`ZQRJUXrbU~Zj8Xcp%@h+YTgw_8P*9c9TZuKAeuAG zSs0Ty;+zP1yi_i2FSdJ zj)HXF(8SmO6g{3M$!>Wh#;}+O2O$VCnvtO`lAA#dZLS>XV_ju6QlRUh?CqHf^S@mE zH|*2V`!QP~D~MHum2EfHBX;^=+J^s?8TYt6)?pI~m&#%8GpX&~w34x8C_5AJSg72c zZE%2d`nD63f9bzwo{!mxf+j2lH{x`>nKy7T4ss=?zL!WH81E;vQ3XkoFTT?^L7x1U z`?$LYD>d}*lRLfRP2WUZ>@YvvC|6*6un(a@i3Sm;Z6V*Oi3uB>Qv@ANrdL&{$YoU4 zSFfwd*yEtQPqh@l$0p|aPKzDFq;^=%wbHBf1aKy}rl2@dzTtGSr`00Mw^Q|jNM2M^ zH*}W+6TqkgTY$NKdDI*7t;O>sx*(F2G7UPdr}M=gX+aMD3Wghw?-kpH-E6_MqImLD>Hg8nYlZFyR`H;wWm~sy6}{_To|eJU za=0s&Um-FY!Qr5G4_r|#Dzf0?^Ox-XKO@Tp z?Zj_wX^d2L0Vyq6(2wm#6GC~eN0g0!!kYq`bm1NeD$7K@l@ao` zueUNDP4U9~u!hnD5wa$%DfLBZvY9`(xn*lgJU)O8y8j432zCKK1Oj!o z{!0hj6;I(Wv|yYgAQZorbUJYVrp?hjX|p7JV`X-NeDl6!=PV`);;h4f30YJ%;FB~? ze)3sW-E+hGF0xB~**V*#@#{XZ>lvu=+?O$*CgahYe>yX#LN;lZTnc2iBC%;5q?Tys zQsi+A*(WX8Wi?juukREvkC}~i{#4ZJn=`iG_x+>-uA(`=nqY&*UUYYwtG__0X_VDa z=(&!^<`_=X>9t3-pPs_13w=xUHvU%16odS<--XKIinjLLXBf|m_}TO-jq{elc8lOj zxPQ8(T`9|=MIwBo-A-0y& z!#sWogQ)3?qb&%Hf!QMCaUsbn6bhJavPlqxXr#6Mv8V&9tm zE(J(#cl$Sh1aK@v(io3eSLV<8Lw417b54bylTb0a!@zVc00f%94KAUcIdbaN;Kbju z48f?e;xf?wYy?s{wVHQ4QBp>;VB;k`Oe(qig_z3{T!>B2Fgz#Zq!ou*)-P9U)5#fT zCr-Osh}QMf0~{lwHHSn_ zkHv-B000037A!${jrD1X2vw^|XGzbcYlLaVRduB~n>eW=R^klj<69d zC0LS?$mRCRp?WN!Z9W-ud$`2%M@SI+y?379GSn4t(NH_bzm=iXRtW5Ju!d*cpa^e} zm&XBO_dRlDY}*sY2(NrhcQVe|n?Lb8FeRyVAw@K@f2Bw9F#Ewmmkb!c81&5qhvyjd zx0nghtpEs9R@T>zj4(%8$%a)vO5G3$wW?>l>MfD9w$HuEUe3_H6zB zOGf6M*~mZ%%@LGwcSQ zYV*h69#?bld=H*E&^}gL?j%*FTHnPvdEMMDvDA!QjIsnIcgh=p3ud!aJz?nP5VQ&R zT@>)eLqz29{ypp!zS;0nGE&6h!-&!z0p1S}R|JY~_@~j5QLvU6uPq^AzF?!M@ouVArw3N9XP_S#x zM%)vQ7xV!guG!!SMh-Fe!%ntarWrwq{HKk5LMhjpe?_$*Vxgr}vtoM6vx%k3wlD;b zxUhuIdo3|F`iHrmMnvZhIiSoO(|p-FlQ&j}2f3NzP@A8xdra7T+~c#2QILY`lD zvXi3mU<9@*m-Qe(g z7s%f=2?ZW^_#Sf2((+(lk`~ÐJL>G0x5*;7pDOEXHheNJ_sDT!!pMU~)2-E2mbo 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 E0CPuNv;Y7A literal 59404 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 diff --git a/docs/assets/pictures/ide/toolbar-visibility.webp b/docs/assets/pictures/ide/toolbar-visibility.webp index e06cad22ebed724c7d855fbfd6dddb0230e04b51..f39b514f3fae872693489510b66c34982193f712 100644 GIT binary patch literal 19364 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 diff --git a/docs/assets/pictures/ide/workspace.webp b/docs/assets/pictures/ide/workspace.webp index 04e829e075fdeefc9c01ff8774fc1ae868e32190..118bba575cb607736c59c02e3537509cb6f21d19 100644 GIT binary patch literal 206188 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%0D{=UhCV*nE*JV7_e*)9b^hGbnF#j>ygb`=s`! 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�pFQdI4(Bm}nSVijdJLW2xO=(gIF z>&@QGWdz6+D2E{4%L^*(3vbn0R4f%4Q2GoU{YPCE9ntt>Jp3AcDuh=F63yT2dk z(+o?EolzvECGe~0b)4^7@{n>Rh|OFB(H+m12(E{w+3#_utKEM&?kAu+f6s1@-R0xs z_A)bMfO+V3|I8e2-aDVm79!OPj-wQ9w>CL1=#8dCK_6_{QvAv!5y%$7-?*9erB3cO z(G)zW%S{wCeXCg~+h+)11sSjWXOahD-ie|+1n)Fliz2t2)HKVW@oVoL3Ut+l&T9kOb*vD@G*ArVg`<%$-gat_GZ{F zmvqlib%m`;47KX|D-dC53d??SO(rs(fyLzCJEnNeMwc7PczE!j>u=iZo=ht5VH&D z!@GU-ajeWiBLjK)#!%X0RpNeIW+!9jvuuF{+$m2}w{C06kiHnlA|1s=johmo{tTfk z_NGt*SF=YSnHjU14VS5*`>-oFQ@^7TQ}dOKKC1xAg7-Alfp zMT~Ulhwa}bZBk7SEEP!+xItOVk*MFW^HCMr+}8$#?*<5M-DOi@L;53DCONVSyo+%9 z{7AbCLNH&r0S}c)lTXa=w^l((t=r}lFE3+FTN+%!9Km$7oufTNn9Dx@x+0n@tX%Bb z-2iqKJ1PLIZ>C|n#zB0!bGNr1qH}1_QLXw(JvC`=>WF-_xYJSItHLU<#4LJeH4R2X zN#)&T{4E^|@!$zNr3Dt~Fe~05d;t*x$^~}|L?cf}lLz%;`L%@UZZvdjaNODwVe{kT zC@?nWmD*Q^hKI=PuC2EdOsH|OjvvAksTq;WFRI)NSd*aAA4-I^;?AnqsrUVa_49XF zONC!oRx#{lhj;D7HHPNzCRm#7fdCp9aq!142wX=#0r}fW7N3)}GP%OI5B6TkwNdqn zYg>Doz6wO)Ubmg9Dyl9DPhTWlNq`8b+%!47X-{U0)4rlSSv}*P1#{JHIG+LVK34z@ zQ|lW#@x>hUug#j`E!Q^;tTPEFO-g}@hs15k40JRq9rIOb)k61H?Uq)Lep{yqCP~`Y zg%px^f!+V!Qo>!!WSxyJ2z6Lf)n~TlH?M_OP-A%k7*>K1xS2`fgfP~l5>l&?CM&CE1?CH9iv%yY6pWb)bsV1U7O{5Qs zL}x&B^&-k91TNjwdp!5)irpHM)v(*G%4i&N`&Z`|j<&s)I6vWUIw@&wdqjE(VH8)` z5a2BgVXZL`GQA@^3!OhWl`AXr_YjI@t{O}Xlf+Zo%Moe#P;9hG|p!!h8Dv=W+?Nib1s!Z zdO;l9-Yq_LD`Mn`Y6F;NTG~NFV6ey^-spDOpz3>8Ei|&gN7ux9OYpch(p&@%BS>ff zA}c80RBO<_29%t$$(rUsdr;MbCUx^aY|EtD*}Nbf#^a%|Bf?|%+)8%irou%v+|z{x z-DIr#`dSgBkZ0wVN$2j7NT->Ww{$Ywn?YxgWimoP5d}zo;XEe|@%p+ffVpou(rxkk zj09;o9{<^4@${!Kvb(vT8H2fPQj)QCka=9Nhng9aTjogT2xK1|scE!gqk5Kd-*gR< z6y|%|%_?lLQ=VywDnd^jQ@WdvjSuT#1-^ZhTg zKxdAGYGwo!9(h^`fTQ+B_I#PZZ2$)o5wftN!)N!Z>OmWKx)5z`QQ>iE1e{XamP8pO z!!e$|MsWy(Mf?ijGhmuRlQmJj7SOjM1x#^#l_^4V=p6-0mA6S_uzWc=s8r_|CEPHF zlvA&xti_!C*KQrK4TXpDtv}+Ze%gbf@}%?x!FS&hf<)-z?f!IcZWk(Gm>jAA1dK9V z4?9QnAvI4bd?Xj<7w46A7CkUzI5XPf4kj%YNQGEC^A+hA^}g^b;!HJbXS*axf=%J?3M2&-EqrIvO?Hf)C3Wg7Dd1PEW#gJT7c z+PW#M!ft*#32lLnUplvPOoSY(!S@8ZAm!|e{-02E@jPO!(zIunGdd$=uB1CV;2-8m zm};@TnP@N2@U+V|{~X=DS{w6pr;t(t#K*0%Jn<}lth{b;b!Tfh2hH{)g!rs&&Pl%@4nB%aH2U^K`wVt|`KrTjHJZ=3V%fuJEn$y6mQA5p05F zLJ@{ST-95OJbVyymRa;oX9miU%K*%XroAJZ>PLH-bs53t0vw6RLAnJWB&KtaSHkET>A>z6Y| zA8nrt>-l@q|w{zi)!Mm^GBF1rwo-(>WS45fm(H)>$*CpY>L6&*@)7Mox8cN?d8b z8=SBFfbTqr+}hL<0dFLgWo&3L8Vwx)(Yui*=`q6l5Qy5xTh%Urg=w-F?ny@-$VBn1?4%8b7FUnsrt~(rApRSczO zMZ&IyNcPzHxwBMU6tl%tlE*eMupy7@}|)1$N7udW`PpX0S6 zNKr{<0PEqNy-r(T3a9adVt{G~PN|MUL7JwFTwMxQ)ZaeUKFSl_W35pp|8~mo>!T)E z#sJ$?{WYiFw=ux+8e*fkLn1DqvTD9%8lQQW-51Mj%$RnsC}p_s9{I)RFH)7gDOyI><1G0**Z3X_sfb2Mv13a~5B|JH5I0U*)lq0Oet>6{~7RR;pF zr*TZ{n^HRaSh7@>zSaaLO8)Q+O2fjblg*UIJdd0Br}@zEpjN%?4hqwE3(Gyyirku@ zGKeS=(7@MoULP|@<4eu}_>xeiy`eJ^)E!-39p^*5`Bu2o7z@%2|J5V2WX;H@sL%o+ za;OdL2mnPiSd=;z#_0(*f^31h4NYc&=;kiCQ))1^eDw*NZv7Vp*xLW#@#P=bvR;+a zU`Uj(D}Y0&yE%+*Ccm`$Oe*FR!N=Wy%^jsp_BHuVyqueiW*P0%BrhO9b&q^-U_REp z61cF@=RXJ?2d8^juMDoNo9Av7BwE6KbTS@7=xs-2nr6!2$bxM3BS56mP@;&C` zX4buj_`vv>jZ)f~&=mLfYF;fA1QueH1|b;UcLA+K$@!?jgka7aYQ8q)kC_m`D9ucN zqNowMd{u%GtF?m$Ak$n^b?9p^rmlLY(18_CKPn`e*@rNkJ1EOjSv^}M(|+FlxYAE6 z;smd;a>5aY2`(TS8mrrLLz5ggT{z3~v*GQS!5BV<#6Inf-HM9*Bcm!ICWzydtfm11Bx7$|OHl1GzPE#z0D^V(3G z(0Ov*SIR|rINW;HgHdNiN-gnld0YX=Dd!8M=d&_afDM{+`Zb*lz$rYo@uzFe(Drd= z$+tcx-)ly#7o0)9m_GH$sL|>bQl!Dbk5_wR?Ls4Qv3&|P1sF4{BQ*+>iHh~-3k5E= zq4d$UivrRD+9)>_^<-*@90o=e*75;_7TF*xN0M2%NE;(x1T1s~xpsa?`hvtG$dELW z=}(IVrNv3O4>FzLYegm;vCN&@TmYAIGHutrmQuwn4Lvilswh@|1YfB}uII^Go!5T+ zKL5|RYqwxoQ?Y|J=Td2lmoeR{B}Qap{<$%oZgVOlwGGMu@Ff*pz=&T?9lz)SD}6%t z@g}|Y(c8MSGDA zq@(SQ?YBjR^^ON}WidBKnM^IJk`+gND7cnuH_lTl>C%Ub@S{ubF>qyFxvL%Q?&t!C zm@s0z9d8hX?*EByeTAKzi9$LS?p8`Z3JNrxplL#$1z3w*1UW-i_0z2{eI7n|kcE%T zhX)IV82iW7@DC7V0pnU9rU}IWo^w=FrDTAT;vy3KZ zeh%w3NIil|Ze+xvb*OQUJgY6+YOW!;-v#txz?3|KRx^C~d{}S^TG1xrChT9f6ZV0H z8CLBQ%I7^*IW|?u2@ZyCw7|J)T(mRFP0=_$-5|EBaw=-RkJqI;H}M8i3Pxq>lGD;D4-eBUSc(~>nf16r@E@cizD2}Ned9JraRS(V3ZS)VI zB-bDILp(x1i0c=(jxn{14Xoau7|7a(G`U{4MhA7#WUE9twq4<_(Z-Uyrf(2dobPR} zr+p`^YDX~#x|lR{^K>cyWe9ftY{yJSn&z8jZZQ|&-@dLC+X}HPfHQiats2(%7;%v7`!i-osYP~xj5v|io}|iX0u!4Oh1PF46&F( ztn0S+P_A)@GXo1AU@8`}?71X`E3HUSNWL?IA&COatA7WP*c9rnwGsG?QS`~PJW^V$TZ@&tdcD? zr_j7#DKY=s%H19uX2>lKg|U(+8zR77p!8EA<{*l1 zQn>okO?vdWuCeid)fSK%n5@pDmhUgAVB)ENEQ)icB235?3me*;6d(83D(xfC zy>MBL>k{$mhaJ5U4fun5ANguJko4G`*IJ8dcJUw!UPIL0H%b!7gY>4F&$-!DsbN9^ zD=|qp08Yo!0Ep%j@G9bzw9}yFQBn3_C473El`9a+jGuZgLL+CQJm*u(?o#+=OU^+j z;Uq~A=i6W2K#t#nfKoAq*BxmJcS<4eb!NOf$K#Xh?rai7vSX&hr_I8P>KRLHT%u*s z`?431V_j6sFv@FyDUFMc+|@9G=T=Fv_w3GG>b0}?lLocA=<$wyGYv;iw&5swqSr9= z4!cF&4k_U4Ut^}QVCbk);p;LHf$cEgz?3q5#1Zbic+)kgO%;4j$z`uRTyMqe0D=LU zNeHV!Ml&ykw5|FCcgC9I@kby3tonAeeN^6KbK(z+FbgXdAtB{v~;xHNP z&f-vYZ@Vg1c}epIKYnh%zq+HZVU=z72p?&K)|^my1vs|l-%az-3O$*8qma@jZMG=a z1lSYF@ii(9E24eUP!ug?DhhUu4Ub#h8$Y zlMH7;7PkY0RC}QYV^pV`;sqibJvQa7u5Nc}y;msFOG=J}3^d>dZ!9FaboN+edwdMT zed$V>xk_fEU4HtO2an9x*Sv~Iu+o6L78oovc;|CWY_jP{TV_4yNeOFO2N4-T^5ri$c5|T&s_keuVxEcQJU2P3Kufe#!w3sjs~rB0 zomXc!c6tdfB9c)m=lHEvrDq54-0P!UE3K}o5k0)dfL;ocd?=H~1P~$5$h|Uukr&1` zZDP-qg`z>^6wj8XRI;o> zeJPKg_>#UVKOsBxWUc{$juM3Je}_Vhv9M_FqO6v0!m8WhHDF9ay=1UG9x*LAVRrO4 z_Mutf|7bi}m`6N}ol}(PP_U-k?$fqy+qP}nwr$&X_i5Xio_6IS zsbpm**;Vy_#avihvW6bG7UZuu#o!n6$AW1_xh*+y%t$K%T+TSN#QqF}V$56}5n;&G z7F^f_v`)U_XURAE((C(xMe&|Z+yp!0ofJW*W1hbU!aQ%ta`0--5*>~9(+&en*M!#! zE}%iw%|#L=XF+~}y@o`x@ieu9l9NKy<{8_G`=s@4d?JX+eq&uQ*YIkC@K$s4RLm`M zWpcNZmB>3A!x!s>UKB&EBKt`x57kfyFf#@Mz}bH4LFAYnQ`W}^4vjhmJjW+1Z9h@g z5%f!htK_Q@MsHt86QKdTHR9l3%Q$G1_W0Mn9=T)aqr9gkYYU6XyR2TC<$XGq1lpebH(!)C1FglFwrtQ{R zoLEPlN6-{D3~PdgbX{Vl_#Kw9!wtVe2>Qn=KlDV^Qn09E$v@%Mj-@d7n>bel%(g%w z138Oq;8cO2#ZZWEA#2Vahl!O7M!gW|TGpwLk|i*Y&m!>em`4|*m7%@v-}-)@pH?7o(U4_fuLP z7)I&TK~2wU&(OC9X~1}ksygbWDw~hET5`}}Lnq@*CYiGGFW;piCH8$`G#L<-sKD@- zb(Pb+odIN@BXS>4Jvu9IG%lx@7tY&F+MbpOIBN#&;jpTxCGYQoIXJ{l&2j~r4`xr6 z{m|4P2x+xU+dT~!0|xGWEzR38XEd8l8R&9Dke3w>-HYmF#vCl>HR`+VyA(TZ{kx?z zk27biaaE{J4AR_c0ha35fjfK{(MWj3A0&VPaH|&pUiD6N zwRs-@UUnvOnzQ_VyQh869r*il(N-S_4E1Z}=`GfuGx&y}7gDXuPz6TmTAdO6{^#Tl`7c*GCd-_Vk0 z`B`(njYZ57YdY<&7?3y34hAdJc4H#75T&n?ASr^w$-9bk0Ks|SVMSz-f*qhk;5O(A z7vX~hzyZh|d(gzH9iOgrCn8r0yGxjPn~3mSz@If;js*I<*@{z*abc+qT?ZlTLzW}S z1lN0|zUz~+_+w)s0m&^fVBFd&G$w5WrLmMXDTy%k^0J|rw_Tz5*ez~{{b|tQwpT$k)kt2i9q_Ji`+&AF>lLf%Rio$?jH z!Mkc;!fkwS2R%UYH_j^CQ8~^N-LC478m$*m~3IKCWd&E@$P8?y*PzW$a&_~gpy+oWdeb>HVFt={RXkkT5; zk0XdQnyeb>!-2w{%C0$ON=4d?kZCRq}7RPI|FxN@;ss1_hg zXW|d)Q#hw8Rm4?9DS*Gf0}a!Q-6dS=j3%`Dm-mFjtgUj>v-B6SQT$Non!grfYW_ZtaTY1O8dXEQhQ_)e1fEPi z35eTF7VM{GS-2gQ769s5Ou@gXyp71N(xDl9|KnVrj|U^ zbrR`sUmQR7v)(}73;)jpScNA%tYus!CHUoSf5w)&-GD@XZ)eN}VtI^QhP&pl+*lj7 z)R{%|Y+lrQh-;5VX86dnJdd3lVS9wv*rVu3CQcP&rbQ78r`J6AAVPY={J;t#^a0V- zDC!WXZahNz1#v~t34aH1?=(FOw@KwN*#^k(GT@)V)n$+DnlfRFSR%|#1j9m?7ph_0 zctJPgQPyK`@-MmU(mpq}aTC$Q+(y;=T4i9IL!c$cMn6KT=Jvm^41?Kb5n8bWt>?OW z+vvCxJaE=_;_^BPI|A2*Q;=C0+a&KwXg4J?u6247*&g@c2J~V+;^6>v;Zp_|+OM5_ zti~#KO1>=|w(^VDk!@fR)k0vSQd{s)Rm-@%g<5x(vMTpm(~o_;lWHl=7o{5f(UfbE z`ST!{aW~Nm-0Gt#p_z$aP@JX10?0xZ*J}x=Aoa)W)pWa!1n3K-O<|*VEhLk|9`AO5 z(gG)jprZ~fSh@C3N*UWD`uoA58f%Sj>*qnk2G(yUoc_U1q3oab^DBygdvC7`j9Fg0 zy$@yeHe8w(#;kv`caxV~)qhE{+VqI=LAU*LlYsH#oVMP^9Z##BPZiydz$)WAWj+{L zB6EAYg2;GabaYjUU^W2$x&WJyvj4Fi@CmSokFtn=XLpGe>!y@aQ5go*^Gwbqj{S4w z%6a4nm+fCW@NXX zqXmcVz|nM2)C#gz8S6o9)h$G4VqDdRaB5z8kESk|%26m>o~Ez41xCsb{kMMlVGoe3 z*J^g}m%1hX#gfy@#5O(%WD!!?Y*`gmf+WQNqN3|>qMRQI!(+Quyt-if%p=XZ;Gb|s zDVHH>PhX;~xfZJXPexJ9N9F)fu52pW!c?Rv&S8fg1y+GcBX*K|n-r(M-t6ur2rkqN z5y;|9+>cMf(jG_JB>sevhB2jTh!|h$8)4a=RK)E2)Gw5rs>WMe&O~Mwj6@2LzpxOz z$md;+j6#CmKqNfeiQ$IN`9C_bewtEX6=eF2f9HaROf@OV^9A9;3W;Zw7;xTtBY|E- zAFu6v3A5KdW-s8tWtR~-WqTC$hQRu`f?u{?zaqTK7*7_nO}oBA?$fXHNkYv-*nimt zyyk=WEl`-1j3aCm=Vh%;1B3DqYw0T(A)XsMx3SwdRNDoDC43m0)YMzxw<}`Rqll-_ zN+#)+9}>xbpDICI>{;}`yVE}GrHo=%!z>6DuL8S*qr#C8tlX?3s8;Y zmF}>;8#x)mi2YvMKI%)ULA;+R8JDPxt;QTjM7c~xEWgu2Z?hwKjx5c0e)3H2YFk70 z0UBDMOOQ1JVnueP2d>>r(AyAbZ27g9fvTWpoE|Z#fp?bnM83T%*8RB| zV2Lh4>xJ0$Z_{SIR^o(2X1z_p04nHAi-dwOncXs zuC$)>^qV8O0K!4R9L<4t^r?ajN8}EF-@{e`jL4hwM8SK!HX^m%^31^89F~>+sS-Of zGU3Ew>$zx~*rvnZ`|nCA(N-AtMd5c0)*o_r6o)^QN?X{#>Cb=01AWdIDyHC~uxt>_ zSXP^n=2&5hv7vIF>lF(L$7aC1h2rZ9G+WDw#`~-ecb@GQo-U*dMkW^%ZBB-(Qu3 zA?V{2tEO>3K$7&E5rHk(5o=r>U;Ccl`U3RYYo9>lgrlRi?qZ?rC3O1B4dY&d5?H|K zZ2E@>NzGlRl|kil9H!!rL?O6a;O9)UNU16h;k=+`AmoVCVCu;Z{m_IEI#iQjBcaQZ zfeoXyZ^j4ih<>AB60ZdLF;=e&GU1_e{k$wBoYFi@4JpcU!nV*unp@5cD)zS`v*>)AWmCqXC*m~ za0n|$(FTl~F3#%*$uRyfOZXIq)Y>g0Y`k}-b)&J`svSUxw;)0gv=$tBk8}DJPiDDP zaiiIzZS(`FXHg7#b7=%x*7i7XjD9a?!()aLyb`kv%QZ+#*G80)<|I;i;AjZyn2fWS;_U7+oBElES;SiKqPnQ3aMHR z=h?9k88Tc-m0AP-eHXBpw6u^jek!qmjeE;nZE(z;N^(l}Ij-OSnKvnOFAcTNrU_jD znk3-g0X~D7uFGM2`(Ce=3G=*E@mIO0VKn0a!YKeERLTzpoJr69B%g6v!`H3R$q`-5 zL`|FY1k{EW++yqvr$N`OMPr@}f6&jHv}AsYu48|3pD)bIe5ZzCeYqp*8idBzBH>5L zL)5A=2M6>mc6b~7-uN!iIIh=4W(jmzDy(^mYewJXWzTDff#FP$ti^9Nq;W8JItvYo zo=vJnprrAq$M0y2{&z59D2ElxY1`=^lnRl)Q(+R+fd((@qW!)QaP9Mo75@A_hW9_F z1b8~bi~?tF>k|ffDimgz-lwCLUN!e>ygmA!vn9YWLl~;Z@>w)#tc!1dfhuMxnW$&V zo$N})O0CcC?eVozT2O;W(;b+y9vTuhIO=+~NXkX{E0LVNMCG5=J>M@5J1cwU87J@a zn@Q(0Y7cKQq=wpClP1V1CoP2y;$H?n(-@~FoR%7ImsMj0s#<2&JIC69hPG3`{pO2b|Y?Cf4!7~Ty~d>pIYVY z<$5fV-eGo2)~rA+YXr$n)u(kw^}6x?@|=*DfBFcvj;zFg+H2eX;;j|;ugmA$&W+x9 z>qyyBkk`6?jOTElRSoJ8uCa)Ye~Iu$!3FKEI(?iCGp9pC-5%y36ASc(nWqN}U1w{O zVr=Bl9gzbdWD<$ybINKv$0~J4?wg;StieqT&D4$^aEPz`1qI39TGPUv@l`k)63{B0 zT1Xw4uYzEGRrp}Q#v#hgyyxFfzy~qqjG#35b6`UNK#+mZJuFBd*;HRU9B5kmfvSZi zBSuZ!DTR-8zPYCniCcG}#4&5#w$y=8hu@NL)^M;xMm0vYc#@hTc8eX&>z21O z{9f?B3+*J@{YJI3*Wi=HL_}1Xh(1PtV=!8~goNTcnXM$8XvJ$hh^&IQ%#o&h)?D&L z(Sp8}fQjsgQtD0GRU-{2>jEHOqzP^1l33>8&wy9?qiM^3k4i4m2;}52dWcCTITQxP z80qv-2YIvI&6sAM3-`Cii#w(EtxPkv!1)ih1L3?Yujz82l$3sMg02 zwb&%NMZGJ+9l-zI5N>QeySpk(LsY^6P&b@oev0ujBV8G0NG!hRGpfo%tgX3w=UH!2 ztJ%v2;zzlSF^M#9JjY?~4ipFifGw{insjyoCObzbq9GlzGJKnN0 zB)^?z9YI#vNjFOP*O8Z#Gqu2jR?cr55IcJ{^^7~QL?prC-P65Yz ziXcQM5Gz_GuFmSTvAEDD!w0P+(s0ag{7pC{xAG4EH5DB7HyR8FKumiVNsNj=o(XyXqf0-kDZZ!Qy&P&`k9! z4OCG#7`t5D8^S#jZx`~60M}Lja1PG4`jCoLXfHNPWv&^(kA6ZkJa5(Fv2`-hG$}5` z=sEFd7MtxyYegaG;pZ+IZn**hq~+264?1ks2zMFc9%ZomA5O^VSrrqC+A@{v2|p<>{vw8m z=l-%_$rpRGI)?3u^&yUr{jJdHK_a!(B? z-&ir#`kEP9f}Hgw-s}MO5iRxAcH;Z8bB1DOnJ7flFK^yD`_-e%dNV$^OLLKSxM^ zSn;@0tUyQdQ|Vh`HE*oOEaY3wiK(sJj@3Vej3##gz1#yedrk~ixrcoP9IVe&>s76qz z7eduhq{q%nGe}kKyuAKO2Xk8G7Z#zu?Ti|i6ubSbS6*RpDd1)JI15An93Tb9QV>eKwl--c>Y5MU|TdC6?Oey9AYi{d8ETvqVAk18e-IedhN9wr$y7D2O z8j$B`@K46-1aLD!j@w=h$2)bn$MfNov{{*|8B3?W4EBJZ-faSB9U!t!m~$s$V;Rs* zXGdDnw(iBXe#Dlx4nRd$J{y1c7aoIUgBXl1Z;f_s9UOFZ!#=@CxE@L2wTGj-da_%+ zw79Lh4I{-6WFutY6OyI$Ui-wL2tj|;s@ga!u|r%8p#xjdAV$^WAfrELH>gcZ|EV?z z@aNoxvn?vY)~No6qjxW+s=VmFoLiE2{dl-Qm}qca0u9penuN4_W0yU=*2lzGa8`t1 zBP?kR2sM%E?JfwLk{8U9fa3RWxy6Yxk}1aAxo%*66a0rZq(@1OWYb<_`NgpiZQ&gp zzmW*p=hvL6to)bR{x{cwSzPs^e~9Ky-Df+27Dk3j00aJ*2Ux!v+9+1QSV2>Ux~(Bk zkZbzlz&om$>aUP;3OJjB@FreLI!Io0$|i=t-fLczdU z7}#-XFr4Y_9~wANhh33=&_3c(D5t}}IPc&+@yH7fgiZyOas@YE?H3oVA-@k3vFpm6 z?H`Bv-%{Q4{gc>={Xm>-*4)NnSy}3a%aBc<``M!zw|O3VeH6K0diaMIjf(3gCG-m} zSC^Cr$D$^obY06LZNC2mRhAyJvTbCC=oQ5<%>0G7sP_e@++FJ@?=jEY;Jx384O(TZ z^0j;Nu4_-^8}bV63ojxsg#R@M2DELh=o}`F2~&SO$(1<)M3%?GSNexC_EVQ3S4%EA zdX>r|Tt;R3Vc=mp9WLDffIKj=e$MYtFM3Q4JU)C9OTT3FASX;Gd7Y*-u1D(hV`%4+ zJq#&G0)vJ=Cnb&Eka!y7X+>~%ub&M$@{Nsb=KB>C1+_IHlX*q1Lpj})mAT&Ef-IW? zvSfklYXREg^-$CqQmKBUc;LXNVqrE%BSV;j}o<-8%^+)YZ38BK8e!3zQh4a z?9CG>wHXRNo{j{RfxVCpLipvY;Yi~p4j$~6iG5*${G;~D!dyLHP2BlafrF%#xUib% zSteIZGGx=}bV1m%x!p8SSoIZ_xKAjw6vMg%isnrWPv}M_zuzi*@j(e1^&fsY%Y)Hd zLf}|X@f&KrZ}|c(n$9TNujv{_|8~Y17`b2v&5+n(3)$V9B1vkYL7H6JIGX=>=D=zz zI^AQxHkW}lDiLZ_*@->I;Ld6U5U|a!7^7zESLjQ4jhhotk8?8$fjsY-?+=f|<8*q8 zxAw3aM3x^?-myb)Bgg4%l){0!Y*}@knqWa4l{g@f%G5W-L1=ttW@h=nIj<`fa*qA2UYCLEjV8BCj_SX?bod#B`y8|o)F&#g)o<59XruGLO1YC8cDb}BGGIv=fnBC zFnlnN2__T;9I)Ih{}b|sH-=*~|5B4&hi#L%;)lJM-=%kY5tVt)H|#N-PEjxcAXteF zUVyedG_o2i_>(9wPgx0FuYwShrO2;!N+0BO_UcbmF8T&#(K`wt-wwwVzp)ng6h3IF z(@vp(ltN_(c>HbIZL)n-Q!#F7##^{P#Q6ba1@|+#^qs+lM%|Ys$8FJCS9UBWsNOil zd(d?Kq>vrBVs;g0Jb{3j|TyrHC&cDr3|kXJgy>3GS8Z$ET_Q^fZ9d=%@8qJ+(--AU;HfK&NvhT^;CY})Ve z#@=&qu2hFw6#2O|Frz_@Vn$h`HLx*HDh5sWV|%dR$t9UU%kue6r0JUu3XQ5smKUC% zQ^5G=NCRZ>u+39KUvq;gc$H|Ujk1xT-C4dQDD(7iP~qw|mf~VuiJF}qhe|84DX+?) zvE0kvKm%%2$(D7FmRn6D9;OOUAQPpARG*MyTZoE-*PP2w8u+no@FU~gT;XQ?_e8=B z%dQf~GH2;$2*KvRPFI4Nkt{#d-yjPM10iczlJV{q`d7eb{k=&;(Z81Sz*#ywGyX2~ z_{{@2Q9;cje;yGjOo!59_{#~)Th<627~j}6>NR#FPYWuW!0{=r<+b~+e-`&{{@%_M zMCcC_sVkOt<|Ex#n^{#Pq9(!#5kxx5nMp1VEny{F|M8B60S#L%rE?x#tJkZvfcPKMQXH1Tb1yE}zEMnHDX{B?u7_4x*x9!69adGmRm%7~_ z9YB|+xml6+MDylvxC*?28_mUqQHQ{Q=~egnV@MrFaa+|HkMMAI+m`{+6CCPxO{wH} zaK@&@UPq563ja++K)y?+DI0;Mczbn? z;A)DJo(d+qn{GAekWJcs$cSCl#m%7P5$xF9g?8Cgp*JQ6;P`b`yYEZ{`&EM?(&8Do zzf%$e*L9V0kSB4DcBFgiCRjXh!c6T!$VfYq9)m#;b6h-}BD^j$eLz|a#4o@H?f~h2 zjet!v*E+Br(GxMM*a6t-?4q2gHqmNrPZ7agi_wJ~lLB8?cu(&8 ze0(O15oza-ypcF0Z^9fvg^M$^6*vltw$5Fn`YWs}9%^qZ>i8O|Ts!Vy$kK{LC< z`S+wxp+&GApv{(vd=&}MBo%g1h&*_xbCD0AqZQ|)$4iFV9!)(K`yse1CiX9{SbGY4 z{^~!m##XBWP{dnRSpmiJy3(aG97Z|x5mdR^E|#aqYI+@j-v|HB^|Apfv&plH=F2Z` zN_*t%9%1qPxeC`8KFdrGo<*ovQfZgoXf2+B{{pk#M7>{B08uQ*{wE zaV7`Gud^Du3;TV^es?gpUyB;Ngw04*h&34rcVV5`uXyff{Jd&U&%dK~TbUY70?F0X zj19h2rsr|Jx=VGYm+uve11XlZW1$BsE`d*K-I#aU)WXgl>7-V?wr;#Api|q7WtHb?-D+5oziXq2JxH7fn-80blp=WD`f3$5)0Ft9u zYCxeEoCuG`^V`XFLNyH$5(_l!s6*ec;oVczkWP45HA=8kXv637e%2q)K1E7rTgry; zNmADaa*a~;p7|Z(Wk_ZV5_A|)r`Hmo^eFWa%-vyYIaL&R?&!vWw)D~Zdu~UBz<_VV z%c6Z+oleU%v!pbEQjD45P1uri9S}Bs99b*zhJ0aq|L`LdUp!{YsGya*p=GekOD0oUzi} zHfv7Vpy#TGe zNpt)DksgEoaU||TK!pG*X-u=n@NUKP9|S|%2ofrgoD*m!g~$RW+t|V+;anIZu4;QB zx{lp8`f%((!@FdmkBRMcZK1^7tnuW@h(tR7eM!rsj;2`mS*}1|n)&Sq#wD?Tv6kk! z_KFC}=nM)x#rlj~!{bzsH0DjrQ@KV>Kxw14McSLzKc$#JTc{ zD2X4F#0iLyY#cEEIf+>KkUW-2mcXZYw9_d4k{v@f|5Z*TfW;b{7lU`{3ZxYUa#gpk z>vy4biRd*Xny{m_N&@Y;R&G>Ua&x14KNbtzYd9tfr2LD|8<-uzN7-u^0 zQ0I*&S??S}KO!8D?QU@(k6$+Qu8o=Y9U(*R{4C9Cv^D=BnyhdoXDm++U|N5wWf#AU zdKqu+&@FA{UiN1Un15(IvOI(k>7SPSOrjI0dMGkIq=iLx*_Fmr}1u^&rgk$Be7%8N*IDB zWxtm8Yu{QhTvdnV-zpYzJ89d6SRCjtbVqjqSM+FA1ijTQo5D4PzzBvHZRRXm)W`eO zqcv!z26g?_f;@l5S2-6miQnyhI7f#zkP6rb+;-JiHz6O@c`YiK4&Z%~ccK~XiX&94 zy($5)`0u_EVb~$rPn-5n!1))3W>`<;GWo{?W zej|?x!nFS%Jw8^_rNxw4+V5gsBx>Gf@1ba3*6GIET?4)gF=(t(tFu>WB)_}g=5aqk zovxE3$9zpEQGYdXY2CsmG+tV~AX)0S1vxYWx8SKG&Loe_R^SppSJf9B*NfkyO1~jw z{^GHHGc%;7kC-!%o`{kXhuva+-0UQrRV0)%HI+aldHCNTSxTgT_~a@Fz$AZ%q_n)H zbBlSu*|g%5SxEzmq>7=t8CI_GtKkqN364{zGAebc^g!CG;`>`Wrra{6LjYB)hTG2v z|GM;pSw&}Y*<3$f5Q6vrE_-i&r|WpF3xu4un4OQPBIf3@I-=XZ3u|@`jBXbY#UHG2 zIGe0a3h{%n<$DrM=(J(yYMi8S3K%ml!~J zp@U|H9{#B-y*Pdf5`_dd78)wz4IgU}8QgtNwyxT-9}hhSQEP3QtuUhS<6N-yi6Ei- ziX+R_dD`den)pJNqRj#ba21^#HEW<$Y9h$%zcQ zwjhFcq-}+S75Gr+4?D*5PnGEsjG)(5IW_uZ2FGAjJbFz&t`K>Vy#;D z?Tmk&zu-NLp^!vij3xL-arf^cnvwa(^mC9n{rW5P1rtdW8k$hS7|T+O1VtLJM;* zx86A7)z5VP7@ukN*Y^MbkVK3uO8`>=PSZ&<2^HMnlp{BD|J?(?P3v@YsW)A)*HZrf z!=-;iV35a3%TW2zBU?M7bNA(d<0vnU_HH=N!Q^H5t{Y4|zV$(*HL?C#R0bQqjFb3U zZYYAy?Ko`he`4MVPUG<_rj8*0a1E5TQP{l3SEFtbRZ~9iTe2XnuOL|{EGgs02)}v4_$R);| z13C=xU+PQVuVIM_s*hNWr%ZYk&U$G-+r((+e{x`xkrw~|%Xt6*=%9S&cz|6I@7u0v ze2Cg8qlUztEF#|~`cA=XeShx#EtPZnpe0f}Q@=^_Yn-KFfT8)|M@gvwfz)G)45j72fnT1I4aFxbtf2@qI_Rdu$g`jp&aEyph7C++!JmfaHUaB+m zM5h;L4`9rtRz3W?{W4b64y9~hi3bMpdhC8z2Jgk)Dt(A!Ko|1^q7t};d+0x#g<fIRY!UA%drF_ryH`zy$2{5CwomTw8f;QOjIVBO5Yd5vGdhw~27zVZ;_9!A#oZehZLpuejkk%64cjh}1d`NR8mas405TL;JCW!=0N9x-`K0Pu;8ayRm-%P^OC0Wwx_e z;X|trk_N#v#XX6`KrocHW7|aXOowgxoN8ft6%t)IkgD*XeVqso6i~UO`OOdB2E?Wl z(q81WZJYR23S79Th^$lHL2~mW7_yIGjEi_$a4pA}VjbS(e?xMAfyL-x3KlCzAu^Fg zeQMV-H7nZ^ z{p;@7H3s%DcwBz2+}?c3*xMElO`Q@z`M0}Ozg8m9{>f`of%W{%-=43y#B?%YBmLslqo14tusJOqwkndnkL z04o%Ry9%DwFr~0VspGSv%^1VOL1_$>RT#1)q-r$s?>O4BQZyo9DLE~`QXVsrF)hw3k1l$D{z-Om7@ z<6JZrx(e_`nlpb)RB{-}gp7xY>6E@l=q&Yx-yvCRsM3LTJP_P3_>&6mJY4w3(5F8n}D}UKJ`F% zV&b4OE)>vQ+4Xy{ELV+eI=5T0ukm#n(=eY?AG86gGGK%3^+q#wd7C-WmMqbeCFh`c z+0`T8HYKs2Nv$(>_`LS#vmoO)UptyW-kW%^OrKCj7BC=Qe$6>+fzJc@nW~~2kj}YF zH{b8mtfYP(%p&{ET&cMKy%(~~Xfr+KY5KCs*ZF+3t~Pn}?)FUKJA6)%Y~)Z)2UjkG zmgsFy?_o!+CHlPk>8bumV(ogugm&@z;nhONO12m=ZVXfZoQQsi?60fmeV787+wN&0 zyb2X-K&%vzS@!&h%s&->5mZsi)ZE;QKYQeNcovaN&1CADGS@;xM}eiCXQWVu+}S9) z1EDPF0+bG~5Z8{0702k%_=*2h1pH6*{7B)`HnmA1L{)G4N5a7}6`K zXiojfkJl_X6~|X`atovpl$wYZ5cyGu+Z@I17Ms{hr3YpZOxX8po9{Z}(2@s5f}b6d z(_5q;)*(gEl#%(gQ{&MKInV5-7z%=_5HB&6YcX7z3qnOD&sllUHxq2q`KXTL^n+F# zjC;w^sRpLu_MJkO9S=t-kq~deguc!HS(}8DqFM)6)P_-G9%PVxixo8!3-4eA7B4*} z>;8C5bTV}O51=7phq-qb8Bb5mY0XizJk~>Pzlf`TniB(EstMHFFe~eTn;45Q*ffWB z*rPve%BE9CnBxTN%nmt<0vzm75SM>5*BkYdX$_hFy0U8x(g_i+9lI0r;qxS%0-=N} zDIiXgqm3l-DWxe2*Xskk7>$RHw?m#NBO7`;5A&i3%#%7T(ny|cw1QJNFeLg4KF*V^ zI3R>|6=ha`5$QXFv|v<37COa<)-d3Nfp1(I$Fp%%Zb@CE7irvfQSS(V?L~*JMisZe zY5;F!INqMFh*c`#>#36AoM1s+9+KObvcFlyM!x)l)I6-2*hj-p?K(S`E~)Hc$DGlv z&@X^z;)((Yyi|77zwELyzv`j-zNBWTh0QDQO8UxTq=>*IRNtSNAF$+<=`@c^e#;SG zAWRs~DkJegNE1Y|%LTsj^Q3-qNF8r(Bzx-No&(JO>m5#x%Bg`?J9JE#Z{RhHT|L?r z*uErBlqK31LwI;pr_!7Gh8i;pyf^OvL~nJyb+6DbcSrSO>(t`PI+<@+Ui+qU5HkI& zNz>&|G-Utxs0Oiuq2e|YX7n{I0RUu2@p1nk({C||HERF1(_44pJWAgbhJ%mh;mD11MYoPjwO8h$KgCBci9)MBE%OBheGN(``=?^C* zjKBNrJXQRYcv0#dyLYgevyy5zk|v?xyKw!nuonzh<>wNJ zKDeH|FB${Jyr6W!t_{~`60!dhz5=^@A17!z|1_OU0GPfn?coBTB*rH0P_uKV1MQHU zKo;TZA((U#V=Cw(`%DR{10eGl;&UziQ7*@y9tOkH9jW9l z7a0H5R#Ano{ZZzKvz!t!jAPU+;mx0RCXgx*ME%_qXVp0 zC7@XXMIr$OJsG2he1*rQq9@a;_e?3q2$aGt%qi~8ghf8+B3$6>%W2H(Iz8Ev{s2nX zxf5CTI{?5ZlOz(t(wK|~w)<7O4l@LnZ4KwW_{V)I7|Ybq%(ID3#P*XzwFBwm@$RBV z`PxNGY}55{8TAndu-W}1J3rzuE#@%Is|DjLc;ahkle=Hb>zbs6N?nq zLz2KMKE7+!E$Zsakd@%d@`Xo<(J(){X2K7KTWLp~(0u@hPmtIVBu=Y1ClS@)S4Fbl z8K&B}j+2z@ExXPe6hdk=p9xC(t~vWmuZ*P8Z@k{%F}xDG?wMGz_*hC`{;sCTCB712j6R6?PMl`76$`Y01rC%cs}YD8j_LT1 zC8-Hb2z&Ow71Jn`$Uk7X3zCX_L^{@j55}!1R%;&EU!RCl`Bs5^jjM4=s&$3o>3htR zJ&g<6U`i3lYy7efo*jBX{kY;aI=S9jOTARNl;gsAoMc2HmTeHA zaq_S4IL-r-=N#uJ67&7gt_o=7cEekVS%)FsT>=BMA3Pc!tfmfses{R8;b(lSNBhr> zhh?03Y!ysCT9~@4no5=i<~IsQ`?CW;R-S=}Jgjt0Wr+TQIVN4R>F$g3Hdz8Z%)oCV z?7J-kH{z73$vc5r5*(gG5@+3xgidN?anT$a#c-`QPIEUMguxtivgBw$G5y{}_>|YD zCgGs@m3L?+^2F>KllV02r@QB}H;nzE0gB)DFByEc+jISVv?;3pM8S=khyA(yO|?G{ z*Z@;VP*OKnJk|C|N)0`vb<{pFl4yK0hVu&szh~r!0jrFT$HCxEtT&uHGjk?gn<_=5 zDFj*!?g`3k@6%U9!LKe0ZOYz5`-~g|L;XAE%Gjnx1k2>jw?pt+Y)?;LuJa_`&W>zo zP{g8WqWmDdeYB=idUKr7Y(}1&GK(EDP|jyp;Ya~8809*oy}R6>bHgpkg&$psYa#_< zeCR74aQe0tj{Xvy8Wihl?D*OWz_Rp~UD04MWyd(1v_;VrwA3^nR7(C<^o@Li*k>)) zgabZ@cjJTAgx;Mv^q)&VQ~_()y3qZS$VZ70FLuRxL`%>B4){dhHHuIbi%jG5>+i~# zl!-pw10OhgeLgZnq>ixJCE5BxFSSuSr#|vm zKm__g$Ok&Ydg7--6g*6`-PLw+s-Vv$nH{Jd)9OCfs>_pvhzL)^Si(UO$86co4{;Fg zYT*D!DgFS}iIecaw^J8*nYqHq?nQl-f#voQi|QS&LXXpcnZV3o<}h;@`Aqz#{{Jr% zbbgqXod%FNUI>~0Kkv+c8OVzoN+|!AJ^#Z19OMqaB{=_+V9cq~P+vh%*4uej1p$jK z%##y-+uf92SsR&xL5#QuPLrC`XGA5l2?k%Le5==48}-=~K1ahn_<>Ww_FSxk5&5u% zeV}?04u#ie(xVFGFJ*X4v@Y==BYT)V8=phDAnaFG6>`ZRc~5;lH$XlByO`7+ueryF zgS8a~1Iujf>^*~fMy|<*Mm7NI&?w~t*ljciXC8rSV~=}?``3f__;}YF48YP1^-&kA z9l(E>Ya+g%@}IiwUew-| zPj#!cS%xr|yi6WaIwa>DMhbZEa$a)Px}vRE$IIHNQM+QZds9Y6Ky^M6_DUol;w+k* zgB4W=V)IjRd%f{!B8iAywKu>@%@;T&6TQy4A9rlYBQ$5Dl|@Z=7wn$Bn1^dr0Sh18 zYZp16zi#4S+G~V*!z4?BE4wVTV%Td&|$AGW=`<$W_Aw3mUx)_ zcQ8Uirj}$}nS`cHI*=#;IIGwm*Fk#d|CbGg*jjwslWoB2O_p zd?ycr`#>L+rmv&5U}i)SVcutzQXrG=s*u_)r&rkw9z(piY$);}5uVIXG3s#`ZN;EV zfwhRJWKi>gSl5q~q0_%>CNSn%K~^+Lvzi3OIx+%K1?*pXO^Bk9Cv%0f+_FfHq-GEs znC~&r6zO^J;}dW;RG(+-8dAGbLN}f&S-x5)jsO4&ESk%6U3MSFacFwYkE`7{ z|K_LIK)(p0(pRbVy7nq;wk0>?*&^lgM#v1uA3NUTf<;kr~ZmiW%0Nc=MTZJ6n z9!(>35RxqFEc@iA3LDTgRl+?tr^; zCyt#Ks+-#c$N2H{_iHYiOpf`B2e*&g<5AZYGR;8vSk=uD3rJ{PDnt_^7JEry<~R87 zVHts6u5qK`V5t*&mG{!Fl>c%I6bE<7%hN$MaV^|h?3Lm>78*SQ5U&p zqNTV7PZjP?{8d zOsP{{`)=Nj_0ey?c}jU3^e!?rG){M(yuqLjqs;0J-K*Xx|0Syh({y-s4n6{jH{;-Z zNKfN#vdhO^Ur7DpMOz90_ZZEKh`_Ftv&_RcmqPm(weAB zfZ1^9F~NHznm(xuO8^Ra-@-SXI2|t_#)!dV$1-#qA%M#`X$FUIE?m?#D3Pr&CcSsH ztootopDO)IMsS5y*meX@351XX+74hRnK;=?I4ec-D(H2>Dn^-uc|kYGIsjkjbW8^w z;Y#%UDNJxQQ?aTOC;#IYxn(HWreRMkI^Ljbmm!oADhx2ThUw&ZvjtXhn>uyCB23Ho znzIVKj7#r*@a%p#HE`HiKM{%}Aq70&y_yLF5OSDuiqzngQ##*eplkdke<{fqb#m?? z^6O`xeJft#D`3K>#_|BjH&{~TN3a#D6Eu@H$6&@x`w)EHPg0QxtV#`a7Siuf5KwvfO|E%XHkq2T*pfwJidu_zYZr+>~* z0I@LLJFKe(A+I=);dG90tLSD3n#GjimG5J`b2}~=g)iY*K3hvY$ma^7HR}6eE=A}) z2C2Z;bg0t+VI$A`I~t5r?~={%vu@HjJgSb4lv;b7{hGDpY~cyY;{;liuk10431$PD zs+oG_?joU5x{`11fmFY*fiagpZmdR-r7YRFR1{S4X?q$`3H51$1OGqZwko}+NUfPg zI_kiE%eIPd+d@ur{YtLPpK$s%5YYPFhqRWxoXb%;*uQ$odC! zV>p8011&7`mRK)K0iT95U7Rl#Mh5Ec{XxX_P#I_awXMs;ln$K}`ep7y7-zW0s zFvw_gaK@ef{7Z?+SE{o1(E&R%>I=I*P29`|+t{W~#qIJy|Mc{Y?|we&B&chuSC3#h z4zt4$hhG+U=*em72mf?I-3jCN|#`@DG6U2$rmSslp(MDpS3t#iquHD7Bi{Z;RcL!momsX!1 z$P=UM-ws356zmq9Eq2n=#6C~-XzJb1S;Z~n@+3<`ZJtdGJeaD_bvoF zNfK4FOn4d9Rb*?|8=+6y09;{4wKvVaOKJC|X8VSMNYP4GB?5A zvi`KY8tgpKst<#d%q)3ZPp&3*MsN*H79}INzxb z(edekmuX@D&_N=&zOwDxrR1Fsy8q%Zl0Q|0bJqFTNa*%H-mH2$AY!&i zGtt8Z_IoLcs^ca}I@1HSr7*1mOt4Qj2+aEm#tow6^_9J2V$BYc9J@b>A^xq(tY~N7;~+ zis~Y7=EHTl&;iE&gh2Fl*fNP9DV$4KSIPc$(gX&hb_1k@DY&-v!nenzb8;*G%C=lE zd1V)(4FfruNN;A~^n^Wwp(cui7gn3>q1N&q`zcffF+a@a)gAHJ@V?iV*0;uFTH$D< z8$>lKMA)I`vIQmP+J2N_{(6K1a9A>f*=_g4Fy#T)DQf%5+2$x&;c6Bo#BDCHpJiM_ z2Ho!(J#*i$jQswkLltt*^-o-Oi?+TyckZTX01AXxV>&U{^WF*TPd0aGm?a^=GnmHR z8_aUZuTDsj(u3(DU!sC-F2J_D`fK8fI>U{rV(OxZ<`r+Bao>#bOv)$-4u{SaOV ziD@;NlfNPSTpUMm+*W52n;TPS9^| z4{u&^15<(G)QK~7{yCFC-QP@wn`x`Nuy?yqRqGjTGNO3G!a<;_D1?y26{K3Q-&r`! zZ`kAJJJi!v+(%3$qo8^4M}1UjuBdN~E>Gl#z-H>l=<*b=LJ-J&DoP4a;mXYOok9A!Vj2ia8_KxwjUF!c!Ak?wWUsE^5S zu0P=R((;uLPz#sT2s48PYN2bn-OR#urykbv$y#F5 zJH?m2{f_zM1c)+xD zR>UbtxFF*X-2*OUBpr>H>UsNT)yvMh!m9$cU2!{9bYJ~1eV=#Ayi<)b<~}bmoB&xh zzi+81ossaI53T7!0*Lll1#f9itu5v|7-hv5RHZ$Ql3~SKm}y=tU)-&c^HRzSL;&$0 zh62IYdhyr_hNQ&mhvtv^B7qF#HKKjUol#94b7XB#g2SzmEv%(EgJH5{Od* zyzntl3F5D?24jd5Zx=jqT&!}8V~u{GlubDrV)zFaj*_~PCHcwoLJ>{ zJ6cYetWSnBsBf@Bsn-<9;}rgl&g3|2gQu1NO@E)N2yeM5Xv>3x3hd+^(um&qv?!R( zIBMiSoP%F8Qw>&=6(6#v+XF+$d&utM6n}b>vHXZ)M4b~WWQ!^6avViOobIY;4>Av*chNGTHfybNTO1noA(^~mGm-K|q`1HUQPW$MJtt#vn;(noKcfR*G zsnE)$y)Gij1B5C$XdkI7ewQn)A-f1J<~~-O4Qmfc*h!!^GdkF<(kxa=4feKRgv8EJ_WgpU|d)y(N-|J%X@ya{-g@7K(dPnmIrRC^#Dij_(xopA!l-p)&o?^TK*Tv(R zn_TMQwGfU5%^WmejSo~NJr?}atJxjB5^oH(VAa1q>&4Yjr=Q9|1H__j$$f6@5sY_{ zwGKlZtCytTAySlwjh%Puzaj@*1FOpePmKxt(x`FvAa|2awSHiqE#Q%>^ZEV4d_RhX z`{DJV+$O>)2feD^Pb|b1e6>Pm8#gunX9Kcx)-+k#^UM_VhwhzpRvLG!G< zEVO=nfDo9@;*nI1IRuQ(W34~_(|Rb-000000000*>{JpOH{pLR*g;L$EES((v(Nq?Aiw~1gYlGn+|X?~08nDKU^U zf|f#Wsi;7Lp|J+z*OM1QfP!#5^IB@M`|Upk{n}JnbGzL_+kaWb=r+Rx=x3xmUK+vT z&3!~;D{cv;4AABHFu2p{2@*>TDz!S}g1zuFRP|n^Y;4-mW1xtxBi8e@Z4mk-84|%$ zOc9I!!z!z^uVvTQKyNu$JQ&9hh`_a)14bZxcAPyXR8)3t{$O_ut>`u55}@DPi;Rh- zs-*y^h$xQYH6d_8c~lazACDsfP&s;6Hpo_`Y@D=WjXSQOPjwH=N&?bIDYlX;moG(} z&Q6+Ri@j!!?g#EsjE0M!CYGhX`-VH!@g1w<&exkkNE#4f+zEnA;3@`sjs{Df<=J_~ zwbar=NFmJ)$;1V(>de{ono@P-=pDG#5s3?%SIq`z)Jitc=@d;Krb=2nX5Wlb|HRVI z!Yx{dmiU@r*qq0egD0_WHSDLN<@km4!~)W0QA=xrCq};csY4R#GJ8))0Hy-(jI6=z zs7|~5S=IRFQ^NanoPocFX0s*?gFYmujS1T2lEpEs{|nkN)nNtqSl}|>vC`SuTEb2$k4GsS zmNY{v2wbohLpe{TGF;z2yFdMwEAA(=mO`9+Ur63g(ua}*Sptkgxf`%Km{F3DLBA7eP7|;EPRxDSv%xeU zFEEn}m{GxEhwfFH7FKX$y5$6gKb4G{Few8vHSO6zx_QFXdUA4S>3dTI<+ZBWo-C6H z!JJ22X%!+eBBZO&3qvzeA>y-Q5(1S)v|xuyPgc6x^uU>3N%f1!pc3hSL)sqEzKSHLv&Nw1Bi453tHb>e4J$ zDV0=}eJBU49xuT{qTY~7KmVI#C_|-F{pCdc#}@uyab19u@$-k^XxPMk%Ntv%RL75J z$nnDW7fP_QEPW#oT18{wj>ppkS^a7_2)qZPjPRmsNjmjV*$~FD-QKWaKf<1o&D5B1 zIaX(Cp)DQ0F7v;-eQw0-8AG4JF|_3MxH`M`I{LR0WLNt3M&PukAju;Iww_{*WJgJX zan?@05-wfq7JB51PzxVqslVzttkbp5l4Y?`9>5_1j7(Z*F1AoK$a`lWRvv9iP|=Xk zO>9=CP6m|fFQ)J^I7-u-AiUs(9Rw7Eof#YcnKG%w_NFuAU^Wdnk_zNA+B+_VbQE^Q%NMtB7SrmaMSk^dDFP>;plgEn`;QRV zi(ThxHsF*GF|X2`iBAnRxu?z?`BGdCqfm;_`>Kmyu^iw2VY>uAS8qWm`Zfaaeet$w zhIc)8_iNmm%3$Tsl1eZ2@3%I=(bIq@Ok@FbXgo+!b=UAcTz4?rcJ(kw59T&i8$eAz z%a36BVaJIh$St6}l|wG^u$wG_o1aU{_N3dniO?=GQLSH30o4T1>e3XIYHBuW{cAwl z1xW1~t7}3z2CQm%{nR-DGm8jWvRL#iV){5r$s*HG;Vt(P>;`uS4t|38kh{|pXBcxw z5_r+|f?C`M-NL0_=*2=~j^$8YuvO}BPU&~ZiL-N1OR9gh34{UB5$c^CKt;Y4`jlu1PSuZkL#&o2P%qPR+JHXl1CC_Y@c7pt-Ki$mW)cfdkUY9eg$5{N++I?!!ws+C!@ST zv-jbaC(T}S<|Hqwj~vhoWT_K5h98bGgXn@^{=<(d!Hic6Aw3{Vw8N=)2-c zY!*=p+1e_o`Kb9l${jru7|Sdbpc)19_X$6_g?U@mi^!eGAcCUKQ?f|qfutbN8BkkM zp;5k~S%n00D~PlJI&qzr4sDNUV8h9+n_%1@yvFT{J>YtA%Kn3oZWk{_&=B8LBziAl z&x%|H=@_tC>Kbg~%=eoKsh&szBM&j?FdhsR-Vq2qWHm<-P(QHn7mE{0z8@|D`Ff)@p-|qs%wX`bp|NpLruoJylxx z3M3xuz{Tn>s`-EEKY=C$-d;D{!-Q`xo`oO3DcejfdKUn|R0000000000000000000000000 G0002^HF0PF literal 137714 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 aK$Y1bWn|gpM}kFM?jQgFxi|m-0000bAQ^K2 diff --git a/docs/assets/pictures/project-export/export-dialog.webp b/docs/assets/pictures/project-export/export-dialog.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b44d5352d409a292f8750e954c93f9555de84f8 GIT binary patch literal 27844 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

L>xyDY) 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 z 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 z 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

X;elV#fGTD3~kFAYu{Z1}XAv4D7_#1rcW> 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 Z000000001M`~U~Z0LA!ahIFU^008Fg#`FLH diff --git a/docs/assets/pictures/project-export/settings.webp b/docs/assets/pictures/project-export/settings.webp index 784f7f0c57be6ac53c9eb07f371bd4ac0a5213fd..b822787404bcab33acbfa3e01fc9fbb56d504be4 100644 GIT binary patch literal 22658 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 literal 0 HcmV?d00001 diff --git a/docs/assets/pictures/project-export/export-success.webp b/docs/assets/pictures/project-export/export-success.webp index 08f5d273ac7d3579f5d3a8801187e21930b0c908..ee2c9e635087a7922f3c0422f4d1cad36139a3d3 100644 GIT binary patch literal 17910 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 literal 23858 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%0Acxc#|l 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

UkoIX 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 diff --git a/docs/assets/pictures/vfx/editor-overview.webp b/docs/assets/pictures/vfx/editor-overview.webp new file mode 100644 index 0000000000000000000000000000000000000000..daa69d1bdfc92c5f4dfbdbf5e904bec7357fdb55 GIT binary patch literal 109916 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 z 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

5nQOlcQRcQD}HZaU+a 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 Be*XXf literal 0 HcmV?d00001 diff --git a/docs/en/commands.mdx b/docs/en/commands.mdx index dbfb6bf46..61c6049c6 100644 --- a/docs/en/commands.mdx +++ b/docs/en/commands.mdx @@ -17,6 +17,19 @@ The mod adds quite a few useful commands, which can be accessed via two main com --- +## VFX + +Play a `.vfx` effect at a position or on an entity: + +```mcfunction +/he vfx ~ ~1 ~ project:sparks +/he vfx @s project:sparks +``` + +`project:sparks` refers to `hollowengine/assets/project/vfx/sparks.vfx`. See [Visual effects (VFX)](/docs/hollowengine/vfx) for creating the file and using the editor. + +--- + # Particles | Command | Description | diff --git a/docs/en/guide/index.mdx b/docs/en/guide/index.mdx index fe35e9532..b5d8aa7b8 100644 --- a/docs/en/guide/index.mdx +++ b/docs/en/guide/index.mdx @@ -12,11 +12,11 @@ order: 1 First, install the mod and its compiler. The latest version is always available on [GitHub](https://github.com/BMProjects-Development/HollowEngine/releases). Download both `.jar` files and place them in your `mods` folder. The compiler addon is only required during development. Once you export your project as a standalone mod, it will run without the compiler as long as HollowEngine itself is installed. -After installing the mod and launching the game, look for the gear icon in the upper-left corner of the screen. Click it to open the mod's main panel, which contains several tabs: +After installing the mod and launching the game, click the HollowEngine logo in the upper-left corner. It opens the IDE workspace with four menus: - File: Useful actions such as opening the mod folder and reloading client and server resources. - Windows: The engine's main tools, including project files, cutscenes, editors, and more. -- Tools: Additional utilities; currently, this section contains model transformation controls. +- Tools: Editor mode, transform controls, the UI profiler, and interface scale. - Help: Useful information such as links to the project community and documentation. ![HollowEngine IDE workspace](/hollowengine/pictures/ide/workspace.webp) @@ -25,7 +25,7 @@ For more information about the editor, see [Working with the IDE](/docs/hollowen ## Checking whether the compiler works -Once you enter a world, you can check whether the compiler is working. Open the Terminal panel and enable Kotlin script mode. +Once you enter a world, you can check whether the compiler is working. Open **Windows > Console**, switch to the **Logs** tab, and select Kotlin script mode in the input line. You can now use code to send a message to yourself in chat: ![First script](/hollowengine/pictures/guide/first-script.webp) diff --git a/docs/en/ide.mdx b/docs/en/ide.mdx index d378076e7..1c97d3148 100644 --- a/docs/en/ide.mdx +++ b/docs/en/ide.mdx @@ -11,14 +11,16 @@ order: 4 The HollowEngine logo in the upper-left corner controls the IDE overlay. Left-click it to expand or collapse the workspace. The expanded toolbar contains four menus: -- **File** - project folder and resource reload actions; +- **File** - saving, project settings, import and export, project folder, and resource reload actions; - **Windows** - Project, Asset Manager, Console, Cutscenes, editors, and other panels; -- **Tools** - model transformation and other context tools; +- **Tools** - editor mode, transform controls, UI profiler, and interface scale; - **Help** - documentation and community links. -Panels open as docked tabs. Drag a tab to rearrange the workspace, drop it near an edge to split the area, or drag separators to resize neighboring panels. `Ctrl + W` closes the focused tab. +Panels open as docked tabs. Drag a tab into a highlighted target to dock, split, or pin the panel to a side stripe; drag separators to resize panels. A pinned panel can collapse to a stripe button and expand again. Use **Windows > Side Bars** to toggle the stripes, or **Windows > Reset Window Layout** to restore the default arrangement. `Ctrl + W` closes the focused tab. -![IDE workspace and docking](/hollowengine/pictures/ide/workspace.webp) +The status bar at the bottom shows the open file or current object path and editor details. Click a path segment to reveal it in the project or open its tool window. + +![IDE workspace with Project, editor, and Console](/hollowengine/pictures/ide/workspace.webp) ## Project tree @@ -35,8 +37,6 @@ When the Project panel is focused, these shortcuts are available: | `Alt + Insert` | Create a file | | `Alt + Shift + Insert` | Create a folder | -![Project tree and context menu](/hollowengine/pictures/ide/project-tree.webp) - ## Creating scripts Right-clicking the `scripts` folder or any folder inside it shows the **New Script** item. Hover over it and pick a type: @@ -49,17 +49,26 @@ Right-clicking the `scripts` folder or any folder inside it shows the **New Scri | **Startup Script** | `.startup.kts` | an item registered under the file's name | | **Node Script** | `.node.kts` | start, stop, and once-a-second handlers | | **UI Script** | `.ui.kts` | a simple screen | +| **Mixin Script** | `.mixin.kts` | a script mixin starter | | **Dialogue** | `.story` | a dialogue with two answers | Then enter the file name. The extension can be omitted, the IDE adds it. The new file opens in the editor right away with a working example to start from. -![The new script menu](/hollowengine/pictures/ide/new-script-menu.webp) - The item is only offered inside `scripts`, because the engine loads scripts and dialogues from there only. +![Context menu for creating scripts](/hollowengine/pictures/ide/new-script-menu.webp) + ## Code editor -Opening `.kts`, `.story`, `.hss`, and other supported text files starts the built-in editor. Depending on the file type, it provides syntax highlighting, diagnostics, completion, signature help, inlay hints, and navigation. Diagnostics are shown in the editor and in a resizable problems panel. +Opening `.kts`, `.story`, `.hss`, and other supported text files starts the built-in editor. Depending on the file type, it provides syntax highlighting, diagnostics, completion, signature help, inlay hints, and navigation. Diagnostics appear in the editor and in the **Problems** tab of the **Console** window. Its **Logs** tab shows log output, filters by severity and text, and accepts commands. + +Opening a `.vfx` file starts a visual editor with a preview. The node tree appears in **Scene**, the selected node's settings in **Inspector**, and animation in **Timeline**. See [Visual effects (VFX)](/docs/hollowengine/vfx). + +![Kotlin script completion in the code editor](/hollowengine/pictures/ide/code-editor.webp) + +In Kotlin mode, the Console's **Logs** tab can run short code snippets and show their output in the log. + +![Running Kotlin code in the IDE Console](/hollowengine/pictures/ide/kotlin-console.webp) Useful editor shortcuts: @@ -73,8 +82,6 @@ Useful editor shortcuts: | `Ctrl + Alt + L` | Format the focused file | | `Ctrl + N` | Search across the project; selected editor text becomes the initial query | -![Completion and diagnostics in the code editor](/hollowengine/pictures/ide/code-editor.webp) - ## Reloading changes Saving a file writes it to the `hollowengine` directory. What must be reloaded depends on the file: @@ -99,7 +106,7 @@ Right-clicking the logo opens visibility options: The **Hide** action asks for confirmation and explains how to recover the toolbar. Select **Don't show again** only if you do not want this warning on later hides. -![Toolbar visibility menu and hide confirmation](/hollowengine/pictures/ide/toolbar-visibility.webp) +![Confirmation before hiding the HollowEngine toolbar](/hollowengine/pictures/ide/toolbar-visibility.webp) If the toolbar is already hidden, open `config/hollowengine.toml` and set: diff --git a/docs/en/index.mdx b/docs/en/index.mdx index 095bae229..74b7cf998 100644 --- a/docs/en/index.mdx +++ b/docs/en/index.mdx @@ -16,7 +16,7 @@ HollowEngine is a full-featured platform for creating content within Minecraft: - Internal IDE on top of the game client; - Kotlin scripts (`.kts`) with coroutines, access to the game world, and persistent script state; -- NPCs, 3D models, animation controllers, and highly customizable light sources; +- NPCs, 3D models, animation controllers, visual effects, and highly customizable light sources; ## Installation @@ -31,6 +31,8 @@ Addons can be placed either in `mods` beside HollowEngine or in `hollowengine/ad The documentation contains many different sections, and properly understanding how to create simple projects would otherwise require reading roughly **70% of the entire documentation**. To make getting started easier, see [Getting Started with HollowEngine](/docs/hollowengine/guide), which explains where to begin learning the engine. +For effects, see the [VFX editor](/docs/hollowengine/vfx); for project files and scripts, see [Working with the IDE](/docs/hollowengine/ide). + ## Work directory Virtually all user-generated content is stored in the `hollowengine` directory, which the mod creates in the game folder. Inside it, the most important files are: diff --git a/docs/en/project-export.mdx b/docs/en/project-export.mdx index 14480bcca..2d12af454 100644 --- a/docs/en/project-export.mdx +++ b/docs/en/project-export.mdx @@ -13,13 +13,13 @@ Starting with HollowEngine 2.3.2, a project can be built into a `.jar` archive t An exported project is still a HollowEngine addon. It will not start unless HollowEngine 2.3.2 or newer is installed. ::: -## Project toolbar +## Project actions -The **Project** panel provides three actions: +The three actions are available both as buttons in the **Project** panel and in the **File** menu: 1. **Project Settings** - metadata and dependencies for the future mod. This is also where you configure the dependent mods and add-ons that you can use in your scripts during development. -2. **Import Project** - restores a previously exported project, provided the source code was included in the archive. -3. **Export Project** - compiles scripts and builds the finished `.jar` archive. If necessary, you can disable the export of the project’s source code here; however, this will make it impossible to import it back later. +2. **Import a project** - restores a previously exported project, provided the source code was included in the archive. +3. **Export as an addon** - compiles scripts and builds the finished `.jar` archive. You can disable export of the project's source code here, but this prevents importing it back later. ![Settings, import, and export buttons in the Project panel](/hollowengine/pictures/project-export/actions.webp) @@ -45,7 +45,9 @@ Select **Save** after changing the settings. ## Exporting the project -Select **Export project**, then: +Click **Export as an addon** in the **Project** panel or choose **File > Export as an addon**, then: + +![Project export dialog](/hollowengine/pictures/project-export/export-dialog.webp) 1. Check the version of the resulting mod. 2. Choose whether to include script sources. @@ -80,7 +82,7 @@ Once HollowEngine 2.3.2 is released, the project can be published on CurseForge ## Importing a project -To continue working on a previously exported project, select **Import project** and choose its JAR file. +To continue working on a previously exported project, click **Import a project** in the **Project** panel or choose **File > Import a project**, then select its JAR file. ![Selecting a JAR to import](/hollowengine/pictures/project-export/import-dialog.webp) diff --git a/docs/en/scripting/ui/styles/hss-files.mdx b/docs/en/scripting/ui/styles/hss-files.mdx index bc5fbf4de..718071209 100644 --- a/docs/en/scripting/ui/styles/hss-files.mdx +++ b/docs/en/scripting/ui/styles/hss-files.mdx @@ -25,6 +25,27 @@ HSS is ideal for palettes, repeated geometry, transitions, and pseudo-states. Us Stylesheets live in files. Scripts import them by resource location, so the styling of a screen stays readable and reloadable on its own; there is no API for compiling a stylesheet out of a string inside a script. +## Imports and variables + +A stylesheet can import other HSS files, store values in `$name` variables, and reuse declaration sets with `@apply`: + +```css +@import "project:ui/styles/palette.hss"; + +$accent: #6AA9FF; +$card { + padding: 12px; + border-radius: 6px; +} + +.card { + @apply $card; + background: $accent; +} +``` + +Imported rules come before the current file's rules. Local variables and sets override imported names; each import is read once, including imports in a cycle. Variables can refer to other variables and be used inside sets. Unknown names and recursive substitutions produce an error where the value is used. The built-in HSS editor reports diagnostics for imports, variables, and `@apply`. + ## Selectors | Selector | Matches | diff --git a/docs/en/vfx.mdx b/docs/en/vfx.mdx new file mode 100644 index 000000000..9e79bc9f8 --- /dev/null +++ b/docs/en/vfx.mdx @@ -0,0 +1,51 @@ +--- +title: Visual effects (VFX) +order: 6 +--- + +

Visual effects (VFX)

+ +A VFX effect is stored in a `.vfx` file and built from a tree of nodes. One effect can combine particles, geometric surfaces, trails, beams, screen effects, sky effects, and camera shake. The built-in editor opens `.vfx` files as IDE documents. + +![VFX editor with node tree, preview, Inspector, and Timeline](/hollowengine/pictures/vfx/editor-overview.webp) + +## Creating and placing a file + +Create an empty `hollowengine/assets/project/vfx/sparks.vfx` file through **New File** in the **Project** panel's context menu or your file manager. An empty `.vfx` opens as a new effect; the editor writes its structure when you save it. + +Double-click the file in the project tree. In the **Scene** window, right-click the effect root and choose **Add Node**. Start with an **Emitter**: it is created with a child plane that draws its particles. Edit the selected node in the **Inspector**, and property animation keys in the **Timeline**. Open **Scene**, **Inspector**, and **Timeline** from the **Windows** menu if needed. + +The effect is available as `project:vfx/sparks.vfx`. Playback also accepts the short name `project:sparks`. After changing a resource, use **File > Reload Client Resources** or `F3 + T` to update it in-game. The editor automatically saves a changed `.vfx` after a short pause; `Ctrl + S` saves it immediately. + +## Effect structure + +| Node | Purpose | +| --- | --- | +| Group | Groups children under one transform. | +| Emitter | Spawns particles; child nodes draw each particle. | +| Plane, Cube, Sphere, Cylinder, Model | Draw surfaces or model geometry. | +| Trail, Beam | Draw a trail or beam. | +| Post Effect, Sky, Camera Shake | Control a screen effect, sky effect, or camera shake. | + +An emitter controls rate and burst, duration, spawn shape, speed, lifetime, and local or world simulation space. Optional modules add forces, noise, collisions, velocity changes, and UV animation. Child renderers can each have their own size, rotation, color, and material. + +The **Scene** window lets you add child nodes, rename, duplicate, disable, remove, and move them. Edit the selected node in the **Inspector**. Orbit the preview camera, zoom with the wheel, and use transform tools to position nodes. Preview controls play or restart the effect and toggle the floor and emitter shape. The Timeline stores property tracks and supports looping playback. + +## Values, curves, and materials + +A numeric field can hold a constant, a random value from a range, a curve, or an expression. A curve can sample particle lifetime progress, particle age, emitter age, effect time, or speed. For example, this can shrink a particle near the end of its life without keys on the overall Timeline. Use Timeline tracks to animate node properties over effect time. + +Expressions can read particle data (`p.age`, `p.speed`, `p.progress`), emitter data (`e.age`, `e.count`), camera distance (`n.camera_distance`), and values supplied to the running effect (`d.name`). Scripts send these values through the `VfxHandle`; a missing numeric value reads as `0`. A material controls its texture, lighting, and blend mode: `OPAQUE`, `BLEND`, `ADDITIVE`, or `MULTIPLY`. You can select a UV region within an atlas and use the UV animation module to advance its frames. + +## Playing an effect in-game + +The `/he vfx` command accepts a position or an entity and an effect name: + +```mcfunction +/he vfx ~ ~1 ~ project:sparks +/he vfx @s project:sparks +``` + +From Kotlin, use `Vfx.play(level, position, "project:sparks")` or `Vfx.play(entity, "project:sparks")`. Both return a `VfxHandle`: `stop()` stops emission, `stop(immediate = true)` clears the effect at once, and `moveTo(position)` moves a point-anchored effect. Entity-anchored effects follow their entity automatically, so `moveTo` has no effect on them. + +The effect name maps to a client resource path. If it does not play, check the path and IDE console messages after reloading resources. diff --git a/docs/ru/commands.mdx b/docs/ru/commands.mdx index 8095cab95..b695ff3d3 100644 --- a/docs/ru/commands.mdx +++ b/docs/ru/commands.mdx @@ -17,6 +17,19 @@ order: 3 --- +## VFX + +Эффекты из `.vfx` запускаются по позиции или на сущности: + +```mcfunction +/he vfx ~ ~1 ~ project:sparks +/he vfx @s project:sparks +``` + +`project:sparks` соответствует ресурсу `hollowengine/assets/project/vfx/sparks.vfx`. Подробнее о создании файла и редакторе написано в разделе [Визуальные эффекты (VFX)](/docs/hollowengine/vfx). + +--- + # Партиклы | Команда | Описание | diff --git a/docs/ru/guide/index.mdx b/docs/ru/guide/index.mdx index 37ba7c4d4..0c52af119 100644 --- a/docs/ru/guide/index.mdx +++ b/docs/ru/guide/index.mdx @@ -12,10 +12,10 @@ order: 1 Для начала установите сам мод и компилятор для него. Актуальная версия всегда есть на [GitHub](https://github.com/BMProjects-Development/HollowEngine/releases), вам необходимо скачать оба `.jar` файла и положить их в папку `mods`. Аддон на компилятор нужен только во время разработки, после экспорта вашего проекта в полноценный мод, он запустится и без компилятора, главное чтобы сам HollowEngine был в списке модов. -Скачав мод и запустив игру, обратите внимание на шестерёнку в левом верхнем углу экрана. Нажав на неё, вы откроете главную панель мода с несколькими вкладками: +Скачав мод и запустив игру, нажмите логотип HollowEngine в левом верхнем углу экрана. Он откроет рабочее пространство IDE с четырьмя меню: - Файл: Раздел с полезными функциями - открытие папки мода, перезагрузки клиентских и серверных ресурсов. - Окна: Раздел с разными окнами движка, здесь уже лежит основной функционал движка - файлы проекта, катсцены, редакторы и т.п. -- Инструменты: Раздел с вспомогательными функциями, сейчас там только управление трансформациями моделей. +- Инструменты: Режим редактора, трансформации, UI-профилировщик и масштаб интерфейса. - Помощь: Раздел с полезной информацией вроде ссылок на сообщество проекта или документацией. ![Рабочее пространство IDE HollowEngine](/hollowengine/pictures/ide/workspace.webp) @@ -24,7 +24,7 @@ order: 1 ## Проверяем, работает ли компилятор? -Зайдя в мир, можем проверить, работает ли компилятор. Для этого откройте панель Терминала и включите режим Kotlin-скриптов. +Зайдя в мир, можем проверить, работает ли компилятор. Для этого откройте **Окна > Консоль**, перейдите на вкладку **Логи** и включите режим Kotlin-скриптов в строке ввода. Теперь, можно отправить сообщение самому себе в чат через код: ![Первый скрипт](/hollowengine/pictures/guide/first-script.webp) diff --git a/docs/ru/ide.mdx b/docs/ru/ide.mdx index 01824326d..c859c620f 100644 --- a/docs/ru/ide.mdx +++ b/docs/ru/ide.mdx @@ -11,14 +11,16 @@ order: 4 Логотип HollowEngine в левом верхнем углу управляет оверлеем IDE. Левый клик разворачивает или сворачивает рабочее пространство. На раскрытой панели есть четыре меню: -- **Файл** - папка проекта и перезагрузка ресурсов; +- **Файл** - сохранение, настройки, импорт и экспорт проекта, папка проекта и перезагрузка ресурсов; - **Окна** - проект, менеджер ассетов, консоль, катсцены, редакторы и другие панели; -- **Инструменты** - трансформации моделей и другие контекстные инструменты; +- **Инструменты** - режим редактора, трансформации, UI-профилировщик и масштаб интерфейса; - **Помощь** - ссылки на документацию и сообщество. -Панели открываются как окна или вкладки в браузере. Перетащите вкладку, чтобы изменить её положение, либо отпустите её в нужной зоне для разделения области или тяните разделитель, чтобы изменить размер соседних панелей. `Ctrl + W` закрывает активную вкладку. +Панели открываются как вкладки в рабочем пространстве. Перетащите вкладку в подсвеченную область для докинга, разделения или закрепления панели на боковой полосе; тяните разделитель, чтобы изменить размер. Закреплённую панель можно свернуть до кнопки и снова развернуть. Полосы включаются через **Окна > Боковые полоски**, а исходную раскладку можно вернуть через **Окна > Сбросить расположение окон**. `Ctrl + W` закрывает активную вкладку. -![Рабочее пространство и докинг IDE](/hollowengine/pictures/ide/workspace.webp) +В нижней строке состояния отображаются путь к открытому файлу или текущему объекту и сведения о редакторе. Нажатие на сегмент пути открывает соответствующее место в проекте или окно инструмента. + +![Рабочее пространство IDE с проектом, редактором и консолью](/hollowengine/pictures/ide/workspace.webp) ## Дерево проекта @@ -35,31 +37,38 @@ order: 4 | `Alt + Insert` | Создать файл | | `Alt + Shift + Insert` | Создать папку | -![Дерево проекта и контекстное меню](/hollowengine/pictures/ide/project-tree.webp) - ## Создание скриптов Правый клик по папке `scripts` или любой папке внутри неё открывает пункт **New Script**. Наведите на него курсор и выберите тип: -| Пункт | Файл | Что внутри | -|--------------------------|---------------------------------------|---------------------------------------------------| -| **Script** | `.kts` | функция и её вызов | -| **Server Reload Script** | `.reload.kts` | приветствие игроку в чате при входе | -| **Client Reload Script** | `.reload.kts` с `@file:ClientSide` | надпись на HUD | -| **Startup Script** | `.startup.kts` | регистрация предмета с именем файла | -| **Node Script** | `.node.kts` | обработчики запуска, остановки и ежесекундного тика | -| **UI Script** | `.ui.kts` | простой экран | -| **Dialogue** | `.story` | диалог с двумя вариантами ответа | +| Пункт | Файл | Что внутри | +|--------------------------|------------------------------------|-----------------------------------------------------| +| **Script** | `.kts` | функция и её вызов | +| **Server Reload Script** | `.reload.kts` | приветствие игроку в чате при входе | +| **Client Reload Script** | `.reload.kts` с `@file:ClientSide` | надпись на HUD | +| **Startup Script** | `.startup.kts` | регистрация предмета с именем файла | +| **Node Script** | `.node.kts` | обработчики запуска, остановки и ежесекундного тика | +| **UI Script** | `.ui.kts` | простой экран | +| **Mixin Script** | `.mixin.kts` | шаблон скриптового миксина | +| **Dialogue** | `.story` | диалог с двумя вариантами ответа | Затем введите имя файла. Расширение можно не писать, IDE добавит его сама. Созданный файл сразу открывается в редакторе с рабочим примером, от которого удобно отталкиваться. -![Меню создания скрипта](/hollowengine/pictures/ide/new-script-menu.webp) - Пункт есть только внутри `scripts`: движок загружает скрипты и диалоги только оттуда. +![Контекстное меню создания скриптов](/hollowengine/pictures/ide/new-script-menu.webp) + ## Редактор кода -При открытии `.kts`, `.story`, `.hss` и других поддерживаемых текстовых файлов запускается встроенный редактор. В зависимости от типа файла он предоставляет подсветку синтаксиса, диагностику, автодополнение, справку по сигнатурам, inlay-подсказки и навигацию. Диагностика показывается в тексте и в отдельной панели проблем с изменяемым размером. +При открытии `.kts`, `.story`, `.hss` и других поддерживаемых текстовых файлов запускается встроенный редактор. В зависимости от типа файла он предоставляет подсветку синтаксиса, диагностику, автодополнение, справку по сигнатурам, inlay-подсказки и навигацию. Диагностика показывается в тексте и на вкладке **Проблемы** окна **Консоль**. Вкладка **Логи** этого же окна показывает журнал, позволяет фильтровать записи по уровню и тексту и выполнять команды. + +Для `.vfx` открывается визуальный редактор с предпросмотром. Дерево узлов находится в окне **Сцена**, параметры выбранного узла в **Инспекторе**, а анимация в **Таймлайне**. Подробности в статье [Визуальные эффекты (VFX)](/docs/hollowengine/vfx). + +![Автодополнение в редакторе Kotlin-скрипта](/hollowengine/pictures/ide/code-editor.webp) + +В режиме Kotlin на вкладке **Логи** консоль позволяет запускать короткие фрагменты кода и показывает их результат в журнале. + +![Запуск Kotlin-кода в консоли IDE](/hollowengine/pictures/ide/kotlin-console.webp) Полезные сочетания редактора: @@ -73,8 +82,6 @@ order: 4 | `Ctrl + Alt + L` | Форматировать активный файл | | `Ctrl + N` | Искать по всему проекту; выделенный текст станет начальным запросом | -![Автодополнение и диагностика в редакторе](/hollowengine/pictures/ide/code-editor.webp) - ## Применение изменений Сохранение записывает файл в папку `hollowengine`. Способ применения зависит от типа файла: @@ -97,9 +104,9 @@ order: 4 - **Скрыть** - отключить логотип и панель; - **Показывать только в чате** - отображать логотип, пока открыт чат. -При выборе **Скрыть** появляется подтверждение с инструкцией по восстановлению. Отмечайте **Больше не показывать**, только если не будете потом спрашивать в чате, как вернуть шестерёнку)) +При выборе **Скрыть** появляется подтверждение с инструкцией по восстановлению. Флажок **Больше не показывать** отключает это предупреждение при последующих скрытиях. -![Меню видимости и подтверждение скрытия](/hollowengine/pictures/ide/toolbar-visibility.webp) +![Подтверждение скрытия панели HollowEngine](/hollowengine/pictures/ide/toolbar-visibility.webp) Если панель уже скрыта, откройте `config/hollowengine.toml` и установите: diff --git a/docs/ru/index.mdx b/docs/ru/index.mdx index 1f0e515f3..1953e9f5a 100644 --- a/docs/ru/index.mdx +++ b/docs/ru/index.mdx @@ -15,7 +15,7 @@ HollowEngine это полноценная платформа для созда - Встроенная IDE поверх игрового клиента; - Полноценный Kotlin скриптинг (`.kts`) с поддержкой корутин, взаимодействием с игровым миром и сохранением состояния скриптов; -- NPC, 3D-модели, анимационные контроллеры, источники света с гибкой настройкой; +- NPC, 3D-модели, анимационные контроллеры, визуальные эффекты и источники света с гибкой настройкой; ## Установка @@ -30,6 +30,8 @@ HollowEngine поддерживает NeoForge и Fabric для Minecraft 1.21.1 В документации много разных разделов и чтобы разобраться, как создавать простые проекты, по-хорошему **нужно знать порядка 70% от всей документации**. Поэтому, чтобы облегчить вам работу, есть раздел [Знакомство с HollowEngine](/docs/hollowengine/guide), там описано, с чего можно начать знакомство с движком. +Для создания эффектов см. [редактор VFX](/docs/hollowengine/vfx), а для скриптов и файлов проекта - [работу с IDE](/docs/hollowengine/ide). + ## Рабочая папка Практически весь пользовательский контент живёт в директории `hollowengine`, которую мод создаёт в папке с игрой. Внутри неё важнее всего: diff --git a/docs/ru/project-export.mdx b/docs/ru/project-export.mdx index 34b66de74..c9c2f5be1 100644 --- a/docs/ru/project-export.mdx +++ b/docs/ru/project-export.mdx @@ -13,13 +13,13 @@ order: 5 Экспортированный проект остаётся аддоном HollowEngine. Без установленного HollowEngine версии 2.3.3 или новее он не запустится. ::: -## Панель проекта +## Действия проекта -На панели **Проект** появились три действия: +Три действия доступны как кнопки в панели **Проект**, так и в меню **Файл**: 1. **Настройки проекта** - метаданные и зависимости будущего мода. Там же настраиваются зависимые моды и аддоны, которые вы можете использовать в скриптах при разработке. -2. **Импорт проекта** - восстановление ранее экспортированного проекта, если в архив были включены исходники. -3. **Экспорт проекта** - компиляция скриптов и сборка готового `.jar` архив. При необходимости здесь можно отключить экспорт исходного кода проекта, тогда импортировать его обратно будет невозможно. +2. **Импортировать проект** - восстановление ранее экспортированного проекта, если в архив были включены исходники. +3. **Экспортировать как аддон** - компиляция скриптов и сборка готового `.jar`-архива. При необходимости здесь можно отключить экспорт исходного кода проекта, тогда импортировать его обратно будет невозможно. ![Кнопки настроек, импорта и экспорта на панели проекта](/hollowengine/pictures/project-export/actions.webp) @@ -45,7 +45,9 @@ order: 5 ## Экспорт проекта -Нажмите **Экспорт проекта**, затем: +Нажмите кнопку **Экспортировать как аддон** в панели **Проект** или выберите **Файл > Экспортировать как аддон**, затем: + +![Окно экспорта проекта](/hollowengine/pictures/project-export/export-dialog.webp) 1. Проверьте версию будущего мода. 2. Решите, нужно ли включать исходники скриптов. @@ -80,7 +82,7 @@ order: 5 ## Импорт проекта -Чтобы продолжить работу над ранее экспортированным проектом, нажмите **Импорт проекта** и выберите его JAR-файл. +Чтобы продолжить работу над ранее экспортированным проектом, нажмите кнопку **Импортировать проект** в панели **Проект** или выберите **Файл > Импортировать проект**, затем укажите JAR-файл. ![Выбор JAR для импорта](/hollowengine/pictures/project-export/import-dialog.webp) diff --git a/docs/ru/scripting/ui/styles/hss-files.mdx b/docs/ru/scripting/ui/styles/hss-files.mdx index e2c4dedd2..83d4bbae7 100644 --- a/docs/ru/scripting/ui/styles/hss-files.mdx +++ b/docs/ru/scripting/ui/styles/hss-files.mdx @@ -25,6 +25,27 @@ HSS хорошо подходит для палитр, повторяющейс Таблицы стилей живут в файлах: скрипт подключает их по resource location, поэтому оформление экрана остаётся читаемым и перезагружается отдельно от кода. Собрать таблицу стилей из строки прямо в скрипте больше нельзя. +## Импорты и переменные + +Стиль может подключать другие HSS-файлы, хранить значения в переменных `$name` и повторно использовать наборы деклараций через `@apply`: + +```css +@import "project:ui/styles/palette.hss"; + +$accent: #6AA9FF; +$card { + padding: 12px; + border-radius: 6px; +} + +.card { + @apply $card; + background: $accent; +} +``` + +Импорты читаются до правил текущего файла. Локальные переменные и наборы переопределяют одноимённые импортированные; каждый импорт загружается один раз, в том числе при циклических ссылках. Переменные можно использовать и внутри других переменных или наборов. Неизвестное имя и рекурсивная подстановка дают ошибку там, где значение используется. Встроенный редактор HSS показывает диагностику импортов, переменных и `@apply`. + ## Селекторы | Селектор | Что выбирает | diff --git a/docs/ru/vfx.mdx b/docs/ru/vfx.mdx new file mode 100644 index 000000000..fe37b04c1 --- /dev/null +++ b/docs/ru/vfx.mdx @@ -0,0 +1,52 @@ +--- +title: Визуальные эффекты (VFX) +order: 6 +--- + +

Визуальные эффекты (VFX)

+ +VFX-эффект хранится в файле `.vfx` и собирается из дерева узлов. Один эффект может сочетать частицы, геометрические поверхности, следы, лучи, экранные эффекты, небо и тряску камеры. Встроенный редактор открывает `.vfx` как отдельный документ IDE. + +![Редактор VFX: дерево узлов, предпросмотр, инспектор и таймлайн](/hollowengine/pictures/vfx/editor-overview.webp) + +## Создание и размещение файла + +Создайте пустой файл `hollowengine/assets/project/vfx/sparks.vfx` через пункт **New File** в контекстном меню панели **Проект** или в проводнике. Пустой `.vfx` открывается как новый эффект; редактор сам обновит его при изменении. + +Откройте файл двойным щелчком в дереве проекта. В окне **Сцена** щёлкните правой кнопкой по корню эффекта и выберите **Добавить узел**. Начните с **Emitter**: он создаётся с дочерней плоскостью, которая рисует его частицы. Настраивайте выбранный узел в **Инспекторе**, а ключи анимации в окне **Таймлайн**. Для работы нужны окна **Сцена**, **Инспектор** и **Таймлайн**; каждое можно открыть через меню **Окна**. + +Эффект доступен как ресурс `project:vfx/sparks.vfx`. При запуске можно также написать сокращённое имя `project:sparks`. После изменения ресурса используйте **Файл > Перезагрузить клиентские ресурсы** или `F3 + T`, чтобы обновить эффект в игре. + +## Из чего состоит эффект + +| Узел | Назначение | +|--------------------------------------|-------------------------------------------------------------------------------| +| Group | Объединяет несколько частей эффекта в группу и задаёт им общую трансформацию. | +| Emitter | Создаёт частицы. Дочерние узлы уже настраивают внеший вид этих частиц. | +| Plane, Cube, Sphere, Cylinder, Model | Рисуют поверхности или геометрию частицы. | +| Trail, Beam | Рисуют след или луч. | +| Post Effect, Sky, Camera Shake | Управляют экранным эффектом, небом или тряской камеры. | + +У эмиттера задаются частота и выброс, длительность, форма появления частиц, скорость, время жизни, локальное или мировое пространство симуляции. Дополнительные модули задают силу, шум, столкновения, изменение скорости и анимацию UV. Дочерние рендереры могут иметь разные размеры, поворот, цвет и материал. +Подробнее можно почитать наведя курсор на конкретный параметр в **Инспекторе**. + +В окне **Сцена** можно добавлять дочерние узлы, переименовывать, дублировать, отключать, удалять и перемещать их. Выбранный узел редактируется в **Инспекторе**; область предпросмотра позволяет вращать камеру, менять масштаб колёсиком и двигать узел инструментами трансформации. Кнопки предпросмотра управляют воспроизведением, сбросом времени, полом и отображением формы эмиттера. Таймлайн хранит дорожки свойств и поддерживает циклическое воспроизведение. + +## Значения, кривые и материалы + +Числовое поле может содержать константу, случайное значение из диапазона, кривую или выражение. Кривая может зависеть от её возраста, возраста эмиттера, времени всего эффекта или скорости. Это позволяет, например, уменьшать размер частицы к концу жизни без ключей на общем таймлайне. Таймлайн служит для анимации параметров самого узла во времени эффекта. + +Выражения читают данные частицы (`p.age`, `p.speed`, `p.progress`), эмиттера (`e.age`, `e.count`), расстояние до камеры (`n.camera_distance`) и значения, переданные запущенному эффекту (`d.name`). Данные передаются через `VfxHandle` из скрипта; отсутствующее числовое значение читается как `0`. Поля материала задают текстуру, освещение и режим смешивания. Для атласа можно указать UV-область, а модуль UV-анимации переключает её кадры. + +## Запуск в игре + +Команда `/he vfx` принимает позицию или сущность и имя эффекта: + +```mcfunction +/he vfx ~ ~1 ~ project:sparks +/he vfx @s project:sparks +``` + +Из Kotlin-кода эффект можно запустить через `Vfx.play(level, position, "project:sparks")` или `Vfx.play(entity, "project:sparks")`. Оба метода возвращают `VfxHandle`: `stop()` завершает испускание, `stop(immediate = true)` сразу удаляет эффект, а `moveTo(position)` переносит эффект, привязанный к точке. Для эффектов на сущности `moveTo` не действует: они следуют за ней автоматически. + +Имя эффекта соответствует пути в клиентских ресурсах. Если файл отсутствует или не разбирается, проверьте путь и сообщения консоли IDE после перезагрузки ресурсов. From 1cd23f49ad75bd7d02f9011e68b280dff40d64dc Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sat, 26 Sep 2026 10:21:49 +0300 Subject: [PATCH 14/25] Add sub-emitters and glow/softness rendering Adds sub-emitter support and a glow/soft-edge rendering pipeline. Key points: - Sub-emission API: VfxSubEmission, VfxParticleEvent, VfxSubEmitters runtime classes and VfxSubEvents; emitter can spawn from parent particle events and carry parent_random into children. - VfxEmitter updated to handle sub-emitter inputs, event queuing, spawning, and particle firing; tests added (VfxSubEmitterTest). - UI: editor fields for sub-emission, icon, and tooltips; language entries added. - Materials/shaders: per-material softness and glow fields; engine shaders/uniforms extended; include hollowengine_vfx.glsl for soft-edge calculation. - Glow pass: VfxGlow implements bloom-like pass (down/upsample shaders); renderers updated to draw glow pass and respect GlowPass uniform. - Misc: refactors (VfxEmitterShape, VfxScreenQuad), resource additions (example vfx, shader files, icons). --- docs/en/scripting/ui/particles.mdx | 4 +- .../client/ui/ide/files/vfx/VfxCurveDialog.kt | 2 +- .../ui/ide/files/vfx/VfxEmitterInspector.kt | 44 ++- .../client/ui/ide/files/vfx/VfxInspector.kt | 3 +- .../ui/ide/files/vfx/VfxSurfaceInspector.kt | 6 + .../client/ui/inspector/InspectorFields.kt | 10 +- .../hollowengine/client/vfx/VfxEmitter.kt | 184 +++++---- .../client/vfx/VfxEmitterShape.kt | 111 ++++++ .../hollowengine/client/vfx/VfxExpressions.kt | 7 +- .../client/vfx/VfxModuleRuntime.kt | 1 + .../hollowengine/client/vfx/VfxParticles.kt | 4 + .../hollowengine/client/vfx/VfxSamplers.kt | 2 + .../hollowengine/client/vfx/VfxSubEmitters.kt | 114 ++++++ .../client/vfx/render/VfxDrawList.kt | 18 +- .../client/vfx/render/VfxDraws.kt | 14 +- .../hollowengine/client/vfx/render/VfxGlow.kt | 191 ++++++++++ .../client/vfx/render/VfxMeshRenderer.kt | 28 +- .../client/vfx/render/VfxQuadPacker.kt | 22 +- .../client/vfx/render/VfxQuadRenderer.kt | 58 ++- .../client/vfx/render/VfxRenderSupport.kt | 20 + .../client/vfx/render/VfxRibbonRenderer.kt | 19 +- .../client/vfx/render/VfxScreenNodes.kt | 12 +- .../vfx/render/VfxShaderDeclarations.kt | 11 +- .../hollowengine/common/vfx/VfxEmitterSpec.kt | 26 ++ .../common/vfx/VfxMaterialSpec.kt | 2 + .../hollowengine/common/vfx/VfxValue.kt | 8 +- .../main/lang/en_us/hollowengine/gui/vfx.json | 29 +- .../main/lang/ru_ru/hollowengine/gui/vfx.json | 23 +- .../shaders/core/vfx/glow/downsample.fsh | 53 +++ .../shaders/core/vfx/glow/downsample.json | 12 + .../shaders/core/vfx/glow/upsample.fsh | 20 + .../shaders/core/vfx/glow/upsample.json | 12 + .../hollowengine/shaders/core/vfx_mesh.fsh | 18 +- .../hollowengine/shaders/core/vfx_mesh.json | 9 +- .../shaders/core/vfx_particle.fsh | 14 +- .../shaders/core/vfx_particle.json | 10 +- .../shaders/core/vfx_particle.vsh | 3 + .../hollowengine/shaders/core/vfx_ribbon.fsh | 18 +- .../hollowengine/shaders/core/vfx_ribbon.json | 9 +- .../textures/gui/icons/maximize.svg | 19 +- .../textures/gui/icons/minimize.svg | 19 +- .../textures/gui/icons/vfx/sub_emitter.svg | 9 + .../assets/hollowengine/vfx/fireworks.vfx | 354 ++++++++++++++++++ .../assets/hollowengine/vfx/sky_strike.vfx | 13 +- .../shaders/include/hollowengine_vfx.glsl | 15 + .../client/vfx/VfxSubEmitterTest.kt | 73 ++++ 46 files changed, 1472 insertions(+), 181 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitterShape.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitters.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGlow.kt create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.json create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sub_emitter.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/vfx/fireworks.vfx create mode 100644 runtime/src/main/resources/assets/minecraft/shaders/include/hollowengine_vfx.glsl create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitterTest.kt diff --git a/docs/en/scripting/ui/particles.mdx b/docs/en/scripting/ui/particles.mdx index a54829f87..fba980e43 100644 --- a/docs/en/scripting/ui/particles.mdx +++ b/docs/en/scripting/ui/particles.mdx @@ -70,9 +70,9 @@ thread. Do not retain a `UiParticle`: dead particles are pooled and reused. Vani tints are not inferred; set `color` in `spawn` for effects such as colored dust. Multiple emitters can share one system and its `maxParticles` budget (512 by default). -When full, births are dropped without a backlog; emitters claim capacity in declaration order. +When full, spawns are dropped without a backlog; emitters claim capacity in declaration order. `seed` makes randomness reproducible. Set `paused` to freeze the simulation or `emitting` -to false to stop new births while existing particles expire. Call `reset()` on the render +to false to stop new spawns while existing particles expire. Call `reset()` on the render thread to clear particles and timing and re-enable the configured initial burst. ## Lifecycle and rendering diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt index 3f4dff90c..812ede82f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxCurveDialog.kt @@ -80,7 +80,7 @@ private fun curveController(value: VfxValue.OverTime): TimelineController { } private fun domainOf(input: VfxCurveInput, curve: VfxCurve): Float = - if (input == VfxCurveInput.LIFETIME) 1f else (curve.keys.maxOfOrNull { it.time } ?: 1f).coerceAtLeast(1f) + if (input == VfxCurveInput.LIFETIME || input == VfxCurveInput.RANDOM || input == VfxCurveInput.PARENT_RANDOM) 1f else (curve.keys.maxOfOrNull { it.time } ?: 1f).coerceAtLeast(1f) private fun TimelineController.curve() = allProperties().single().curves.single() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt index 8b1e02557..6d944d5eb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxEmitterInspector.kt @@ -7,19 +7,38 @@ import ru.hollowhorizon.hollowengine.client.ui.inspector.Pills import ru.hollowhorizon.hollowengine.client.ui.inspector.ToggleRow import ru.hollowhorizon.hollowengine.common.vfx.VfxDirectionMode import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxParticleEvent import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty import ru.hollowhorizon.hollowengine.common.vfx.VfxShape import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace +import ru.hollowhorizon.hollowengine.common.vfx.VfxSubEmission /** * How many particles, where they are born, what they start with and how they move. How they look is * up to the renderers under the emitter, each for itself. + * + * An emitter [underEmitter] may spawn from the particles of that one instead; its own emission then + * does nothing but cap the count. */ @Composable -internal fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { +internal fun EmitterFields( + document: HollowIdeVfxDocument, + state: VfxEditorState, + emitter: VfxEmitterSpec, + underEmitter: Boolean, +) { + val sub = emitter.subEmission?.takeIf { underEmitter } + if (underEmitter) SubEmissionFields(document, state, emitter) + val emission = emitter.emission Folding(state, "emission", vfxText("section_emission"), VfxIcons.EMISSION) { + if (sub != null) { + VfxIntRow(vfxText("max_particles"), emission.maxParticles, vfxText("max_particles_hint"), min = 1, max = 20_000) { + document.replace(emitter.copy(emission = emission.copy(maxParticles = it))) + } + return@Folding + } VfxValueRow(vfxText("rate"), emission.rate, VfxProperty.RATE, vfxText("rate_hint")) { document.replace(emitter.copy(emission = emission.copy(rate = it))) } @@ -95,6 +114,29 @@ internal fun EmitterFields(document: HollowIdeVfxDocument, state: VfxEditorState } } +/** Whether and when the emitter spawns from the particles of the emitter it sits under. */ +@Composable +private fun SubEmissionFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { + val sub = emitter.subEmission + fun update(next: VfxSubEmission) = document.replace(emitter.copy(subEmission = next)) + + Folding(state, "sub_emission", vfxText("section_sub_emission"), VfxIcons.SUB_EMITTER) { + ToggleRow(vfxText("sub_enabled"), sub != null, hint = vfxText("sub_enabled_hint")) { on -> + document.replace(emitter.copy(subEmission = if (on) VfxSubEmission() else null)) + } + if (sub == null) return@Folding + + Pills(VfxParticleEvent.entries, sub.event, { vfxText("sub_event_${it.name.lowercase()}") }) { + update(sub.copy(event = it)) + } + val countHint = if (sub.event == VfxParticleEvent.ALIVE) "sub_count_alive_hint" else "sub_count_hint" + VfxValueRow(vfxText("sub_count"), sub.count, hint = vfxText(countHint)) { update(sub.copy(count = it)) } + VfxValueRow(vfxText("inherit_velocity"), sub.inheritVelocity, hint = vfxText("sub_inherit_velocity_hint")) { + update(sub.copy(inheritVelocity = it)) + } + } +} + /** The shape shows only what chosen kind reads. */ @Composable private fun ShapeFields(document: HollowIdeVfxDocument, state: VfxEditorState, emitter: VfxEmitterSpec) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt index a9838b171..30f6224d0 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxInspector.kt @@ -73,7 +73,7 @@ private fun NodeFields(document: HollowIdeVfxDocument, state: VfxEditorState, no } when (node) { - is VfxEmitterSpec -> EmitterFields(document, state, node) + is VfxEmitterSpec -> EmitterFields(document, state, node, underEmitter = document.effect.parentOf(node.id) is VfxEmitterSpec) is VfxPlaneSpec -> PlaneFields(document, state, node) is VfxMeshSpec -> MeshFields(document, state, node) is VfxModelSpec -> ModelFields(document, state, node) @@ -207,6 +207,7 @@ internal object VfxIcons { const val PARTICLE = ROOT + "particle.svg" const val SPAWN_ONCE = ROOT + "key.svg" const val EMISSION = ROOT + "emission.svg" + const val SUB_EMITTER = ROOT + "sub_emitter.svg" const val SHAPE = ROOT + "shape.svg" const val SPAWN = ROOT + "spawn.svg" const val MOTION = ROOT + "motion.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt index 4b3f8b1b8..18a3f3715 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt @@ -205,6 +205,12 @@ private fun MaterialFields(document: HollowIdeVfxDocument, state: VfxEditorState document.replace(surface.withSurface(tint = it)) } BlendPicker(material.blend) { update(material.copy(blend = it)) } + VfxNumberRow(vfxText("glow"), material.glow, vfxText("glow_hint"), min = 0f, max = 64f) { + update(material.copy(glow = it)) + } + VfxNumberRow(vfxText("softness"), material.softness, vfxText("softness_hint"), min = 0f, max = 16f) { + update(material.copy(softness = it)) + } UvRows(material.uv) { update(material.copy(uv = it)) } PillFlow(id = "vfx-material-switches") { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt index 01b15b2db..0e4e9553f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/inspector/InspectorFields.kt @@ -156,13 +156,19 @@ fun NumberRow( } @Composable -fun ToggleRow(label: String, checked: Boolean, switch: Boolean = false, onChange: (Boolean) -> Unit) { +fun ToggleRow( + label: String, + checked: Boolean, + switch: Boolean = false, + hint: String? = null, + onChange: (Boolean) -> Unit, +) { Row( tags = listOf("insp-check-row"), modifier = Modifier.input(hoverable = true, clickable = true).cursor(UiCursorShape.HAND).onClick { event -> if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onChange(!checked) event.consume() - }, + }.let { if (hint != null) it.tooltipOnHover(hint) else it }, ) { if (switch) { Text(label, tags = listOf("insp-check-label")) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt index 0d7c510e1..c5afc8920 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitter.kt @@ -5,20 +5,15 @@ import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f import ru.hollowhorizon.hollowengine.common.utils.math.QuatF import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f -import ru.hollowhorizon.hollowengine.common.vfx.VfxDirectionMode import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxParticleEvent import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty -import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind import ru.hollowhorizon.hollowengine.common.vfx.VfxSimulationSpace import ru.hollowhorizon.hollowengine.common.vfx.VfxValue import ru.hollowhorizon.hollowengine.common.vfx.VfxVec3Value import ru.hollowhorizon.hollowengine.common.vfx.modules.VfxUvAnimationSpec -import kotlin.math.PI import kotlin.math.ceil -import kotlin.math.cos -import kotlin.math.sin import kotlin.math.sqrt -import kotlin.math.tan import kotlin.random.Random /** @@ -43,14 +38,7 @@ class VfxEmitter( private var random = Random(seed) private val rate = scalar(VfxProperty.RATE, spec.emission.rate, 0f) - private val radius = scalar(VfxProperty.SHAPE_RADIUS, spec.shape.radius, 0f) - private val angle = scalar(VfxProperty.SHAPE_ANGLE, spec.shape.angle, 0f) - private val thickness = scalar(VfxProperty.SHAPE_THICKNESS, spec.shape.thickness, 1f) - private val extents = vector(VfxProperty.SHAPE_EXTENTS, spec.shape.extents, 0f) - - /** The surface a model shape spawns on; until it has loaded, particles start at the origin. */ - private val modelSurface = spec.shape.model.takeIf { spec.shape.kind == VfxShapeKind.MODEL && it.isNotBlank() } - ?.let(VfxModelSurfaces::request) + private val shape = VfxEmitterShape(spec.shape, node) private val lifetime = scalar(VfxProperty.LIFETIME, spec.spawn.lifetime, 1f) private val speed = scalar(VfxProperty.SPEED, spec.spawn.speed, 0f) @@ -68,6 +56,16 @@ class VfxEmitter( }) } + /** Set when this emitter spawns from the particles of the emitter it sits under. */ + private val subInput: VfxSubEmitterInput? = spec.subEmission?.let { sub -> + node.parent?.emitter?.let { source -> VfxSubEmitterInput(sub, source, node) } + } + + /** The sub-emitters directly under this emitter; its children exist only after it does. */ + private val subEmitters: List by lazy { + node.children.mapNotNull { child -> child.emitter?.subInput?.takeIf { it.source === this } } + } + /** What the renderers under this emitter give its particles, read while it simulates. */ private val looks = ArrayList() @@ -100,7 +98,11 @@ class VfxEmitter( /** Whether this emitter will ever produce anything again. */ val isFinished: Boolean - get() = (stopping || isExpired()) && particles.count == 0 + get() { + if (particles.count > 0) return false + val source = subInput?.source ?: return stopping || isExpired() + return stopping || source.isFinished + } override val isIdle: Boolean get() = particles.count == 0 @@ -137,6 +139,7 @@ class VfxEmitter( */ override fun restart() { particles.clear() + subInput?.events?.clear() random = Random(seed) context.rng = random context.variables.clear() @@ -172,6 +175,7 @@ class VfxEmitter( spawnScale.set(frame.scale) } } + subInput?.place(simToRender) } /** @@ -189,6 +193,20 @@ class VfxEmitter( private fun advance(dt: Float) { age += dt + val input = subInput + if (input != null) { + if (enabled && !stopping) spawnEvents(input) + input.events.clear() + } else { + advanceEmission(dt) + } + + fillEmitterContext() + modules.forEach { it.beginStep(this, dt) } + simulate(dt) + } + + private fun advanceEmission(dt: Float) { if (sleepLeft > 0f) { sleepLeft -= dt if (sleepLeft <= 0f) startLoop() @@ -201,10 +219,16 @@ class VfxEmitter( } if (enabled && !stopping && !isExpired() && sleepLeft <= 0f) emit(dt) + } - fillEmitterContext() - modules.forEach { it.beginStep(this, dt) } - simulate(dt) + /** Spawns what the emitter this one listens to handed over since the last step. */ + private fun spawnEvents(input: VfxSubEmitterInput) { + val events = input.events + for (event in 0 until events.size) { + repeat(events.count(event)) { + if (!spawn(input, event)) return + } + } } private fun startLoop() { @@ -233,15 +257,20 @@ class VfxEmitter( } } - /** Puts one particle into the world. Returns false when the emitter is full. */ - private fun spawn(): Boolean { + /** + * Puts one particle into the world. Returns false when the emitter is full. A sub-emitter spawns + * around [event] of [input] instead of around its own origin. + */ + private fun spawn(input: VfxSubEmitterInput? = null, event: Int = -1): Boolean { if (!instance.requestParticle()) return false val slot = particles.allocate() if (slot < 0) return false fillEmitterContext() + val events = input?.events context.particleRandom = random.nextFloat() + context.parentRandom = events?.random(event) ?: 0f context.particleIndex = born.toFloat() context.age = 0f context.progress = 0f @@ -250,7 +279,7 @@ class VfxEmitter( val life = lifetime.eval(context).coerceAtLeast(MIN_LIFETIME) context.lifetime = life - pickShapePoint(scratchPosition, scratchDirection) + shape.pick(scratchPosition, scratchDirection, context, random) offset.eval(context, scratchVector) scratchPosition.add(scratchVector) @@ -261,14 +290,26 @@ class VfxEmitter( scratchDirection.z * launch, ) - applySpawnSpace(scratchPosition, point = true) + applySpawnSpace(scratchPosition, point = events == null) applySpawnSpace(scratchDirection, point = false) + if (events != null) { + scratchPosition.set( + scratchPosition.x + events.x(event), + scratchPosition.y + events.y(event), + scratchPosition.z + events.z(event), + ) + scratchDirection.set( + scratchDirection.x + events.velocityX(event), + scratchDirection.y + events.velocityY(event), + scratchDirection.z + events.velocityZ(event), + ) + } particles.positionX[slot] = scratchPosition.x particles.positionY[slot] = scratchPosition.y particles.positionZ[slot] = scratchPosition.z - val inherit = inheritVelocity.eval(context) + val inherit = if (events == null) inheritVelocity.eval(context) else 0f particles.velocityX[slot] = scratchDirection.x + instance.velocityX * inherit particles.velocityY[slot] = scratchDirection.y + instance.velocityY * inherit particles.velocityZ[slot] = scratchDirection.z + instance.velocityZ * inherit @@ -277,6 +318,7 @@ class VfxEmitter( particles.lifetime[slot] = life particles.random[slot] = context.particleRandom particles.index[slot] = context.particleIndex + particles.parentRandom[slot] = context.parentRandom particles.frame[slot] = 0f looks.forEach { it.spawn(slot, context) } @@ -285,15 +327,34 @@ class VfxEmitter( born++ modules.forEach { it.onSpawn(this, slot) } + fire(VfxParticleEvent.SPAWN, slot, 0f) return true } + /** Hands the particle in [slot] to the sub-emitters that listen for [event]. */ + private fun fire(event: VfxParticleEvent, slot: Int, dt: Float) { + subEmitters.forEach { it.take(event, slot, dt) } + } + + /** Called by a module when the particle in [slot] hits a block. */ + fun particleCollided(slot: Int, dt: Float) { + if (subEmitters.isNotEmpty()) fire(VfxParticleEvent.COLLISION, slot, dt) + } + + private fun die(slot: Int, dt: Float) { + if (subEmitters.isNotEmpty()) { + fillParticleContext(slot) + fire(VfxParticleEvent.DEATH, slot, dt) + } + particles.kill(slot) + } + private fun simulate(dt: Float) { var slot = 0 while (slot < particles.count) { particles.age[slot] += dt if (particles.age[slot] >= particles.lifetime[slot]) { - particles.kill(slot) + die(slot, dt) continue } @@ -326,11 +387,12 @@ class VfxEmitter( modules.forEach { it.onMoved(this, slot, dt) } if (slot < particles.count && particles.age[slot] >= particles.lifetime[slot]) { - particles.kill(slot) + die(slot, dt) continue } looks.forEach { it.step(slot, context) } + if (subEmitters.isNotEmpty()) fire(VfxParticleEvent.ALIVE, slot, dt) if (instance.readsLight) particles.light[slot] = instance.lightAt(this, slot) slot++ @@ -366,6 +428,7 @@ class VfxEmitter( context.speed = sqrt(vx * vx + vy * vy + vz * vz) context.particleRandom = particles.random[slot] context.particleIndex = particles.index[slot] + context.parentRandom = particles.parentRandom[slot] } /** A particle position in effect space, which is what the world is read in. */ @@ -406,75 +469,6 @@ class VfxEmitter( if (point) vector.add(spawnOrigin) } - /** - * Picks a spawn point on the shape and the way the particle leaves it. - */ - private fun pickShapePoint(position: MutableVec3f, direction: MutableVec3f) { - val shape = spec.shape - position.set(Vec3f.ZERO) - direction.set(shape.direction) - - when (shape.kind) { - VfxShapeKind.POINT -> Unit - - VfxShapeKind.SPHERE -> { - randomDirection(direction) - val reach = radius.eval(context) * shellDepth(thickness.eval(context)) - position.set(direction.x * reach, direction.y * reach, direction.z * reach) - } - - VfxShapeKind.BOX -> { - extents.eval(context, scratchVector) - position.set( - (random.nextFloat() * 2f - 1f) * scratchVector.x, - (random.nextFloat() * 2f - 1f) * scratchVector.y, - (random.nextFloat() * 2f - 1f) * scratchVector.z, - ) - } - - VfxShapeKind.CONE -> { - val around = random.nextFloat() * TAU - val spread = tan(angle.eval(context).coerceIn(0f, 89f) * DEG_TO_RAD) * random.nextFloat() - val reach = radius.eval(context) * sqrt(random.nextFloat()) * shellDepth(thickness.eval(context)) - position.set(cos(around) * reach, 0f, sin(around) * reach) - direction.set(cos(around) * spread, 1f, sin(around) * spread).norm() - } - - VfxShapeKind.DISC -> { - val around = random.nextFloat() * TAU - val reach = radius.eval(context) * sqrt(random.nextFloat()) * shellDepth(thickness.eval(context)) - position.set(cos(around) * reach, 0f, sin(around) * reach) - direction.set(position).norm() - if (direction.sqrLength() < 1.0e-6f) direction.set(shape.direction) - } - - VfxShapeKind.LINE -> { - extents.eval(context, scratchVector) - val along = random.nextFloat() - position.set(scratchVector.x * along, scratchVector.y * along, scratchVector.z * along) - } - - VfxShapeKind.MODEL -> modelSurface?.surface?.sample(random, position, direction) - } - - when (shape.directionMode) { - VfxDirectionMode.FIXED -> direction.set(shape.direction) - VfxDirectionMode.RANDOM -> randomDirection(direction) - VfxDirectionMode.SHAPE -> Unit - } - if (direction.sqrLength() < 1.0e-6f) direction.set(Vec3f.Y_AXIS) else direction.norm() - } - - private fun randomDirection(into: MutableVec3f) { - val z = random.nextFloat() * 2f - 1f - val around = random.nextFloat() * TAU - val planar = sqrt((1f - z * z).coerceAtLeast(0f)) - into.set(cos(around) * planar, z, sin(around) * planar) - } - - private fun shellDepth(thickness: Float): Float = - if (thickness <= 0f) 1f else 1f - random.nextFloat() * thickness.coerceAtMost(1f) - fun noiseSeed(axis: Int): Int = seed + axis * 6151 private fun scalar( @@ -498,8 +492,6 @@ class VfxEmitter( private const val MIN_STEP = 1f / 240f private const val MAX_SUBSTEPS = 8 private const val MIN_LIFETIME = 0.01f - private const val TAU = (PI * 2.0).toFloat() - private const val DEG_TO_RAD = (PI / 180.0).toFloat() /** A ceiling on what one emitter may ask for, whatever the file says. */ const val MAX_PARTICLES_PER_EMITTER = 20_000 diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitterShape.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitterShape.kt new file mode 100644 index 000000000..4e84917e9 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxEmitterShape.kt @@ -0,0 +1,111 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxDirectionMode +import ru.hollowhorizon.hollowengine.common.vfx.VfxProperty +import ru.hollowhorizon.hollowengine.common.vfx.VfxShape +import ru.hollowhorizon.hollowengine.common.vfx.VfxShapeKind +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import kotlin.math.PI +import kotlin.math.cos +import kotlin.math.sin +import kotlin.math.sqrt +import kotlin.math.tan +import kotlin.random.Random + +/** + * Where on its shape an emitter puts a newborn particle, and which way it sends it, in node space. + */ +internal class VfxEmitterShape(private val shape: VfxShape, node: VfxNodeRuntime) { + private val radius = scalar(node, VfxProperty.SHAPE_RADIUS, shape.radius, 0f) + private val angle = scalar(node, VfxProperty.SHAPE_ANGLE, shape.angle, 0f) + private val thickness = scalar(node, VfxProperty.SHAPE_THICKNESS, shape.thickness, 1f) + private val extents = VfxSamplers.vec3( + shape.extents, node.expressions, 0f, VfxRangeMode.FRESH, + VfxProperty.SHAPE_EXTENTS.hashCode(), node.drive(VfxProperty.SHAPE_EXTENTS), + ) + + /** The surface a model shape spawns on; until it has loaded, particles start at the origin. */ + private val modelSurface = shape.model.takeIf { shape.kind == VfxShapeKind.MODEL && it.isNotBlank() } + ?.let(VfxModelSurfaces::request) + + private val scratch = MutableVec3f() + + /** Picks a spawn point on the shape and the way the particle leaves it. */ + fun pick(position: MutableVec3f, direction: MutableVec3f, context: VfxEvalContext, random: Random) { + position.set(Vec3f.ZERO) + direction.set(shape.direction) + + when (shape.kind) { + VfxShapeKind.POINT -> Unit + + VfxShapeKind.SPHERE -> { + randomDirection(direction, random) + val reach = radius.eval(context) * shellDepth(thickness.eval(context), random) + position.set(direction.x * reach, direction.y * reach, direction.z * reach) + } + + VfxShapeKind.BOX -> { + extents.eval(context, scratch) + position.set( + (random.nextFloat() * 2f - 1f) * scratch.x, + (random.nextFloat() * 2f - 1f) * scratch.y, + (random.nextFloat() * 2f - 1f) * scratch.z, + ) + } + + VfxShapeKind.CONE -> { + val around = random.nextFloat() * TAU + val spread = tan(angle.eval(context).coerceIn(0f, 89f) * DEG_TO_RAD) * random.nextFloat() + val reach = radius.eval(context) * sqrt(random.nextFloat()) * shellDepth(thickness.eval(context), random) + position.set(cos(around) * reach, 0f, sin(around) * reach) + direction.set(cos(around) * spread, 1f, sin(around) * spread).norm() + } + + VfxShapeKind.DISC -> { + val around = random.nextFloat() * TAU + val reach = radius.eval(context) * sqrt(random.nextFloat()) * shellDepth(thickness.eval(context), random) + position.set(cos(around) * reach, 0f, sin(around) * reach) + direction.set(position).norm() + if (direction.sqrLength() < 1.0e-6f) direction.set(shape.direction) + } + + VfxShapeKind.LINE -> { + extents.eval(context, scratch) + val along = random.nextFloat() + position.set(scratch.x * along, scratch.y * along, scratch.z * along) + } + + VfxShapeKind.MODEL -> modelSurface?.surface?.sample(random, position, direction) + } + + when (shape.directionMode) { + VfxDirectionMode.FIXED -> direction.set(shape.direction) + VfxDirectionMode.RANDOM -> randomDirection(direction, random) + VfxDirectionMode.SHAPE -> Unit + } + if (direction.sqrLength() < 1.0e-6f) direction.set(Vec3f.Y_AXIS) else direction.norm() + } + + private fun randomDirection(into: MutableVec3f, random: Random) { + val z = random.nextFloat() * 2f - 1f + val around = random.nextFloat() * TAU + val planar = sqrt((1f - z * z).coerceAtLeast(0f)) + into.set(cos(around) * planar, z, sin(around) * planar) + } + + private fun shellDepth(thickness: Float, random: Random): Float = + if (thickness <= 0f) 1f else 1f - random.nextFloat() * thickness.coerceAtMost(1f) + + private companion object { + const val TAU = (PI * 2.0).toFloat() + const val DEG_TO_RAD = (PI / 180.0).toFloat() + + fun scalar(node: VfxNodeRuntime, property: VfxProperty, value: VfxValue, default: Float) = + VfxSamplers.driven( + VfxSamplers.scalar(value, node.expressions, default, VfxRangeMode.FRESH, property.hashCode()), + node.drive(property), + ) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt index 12589ae41..8010cff3b 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxExpressions.kt @@ -34,9 +34,12 @@ class VfxEvalContext { /** A number fixed when the particle was born, for per-particle variation that does not flicker. */ var particleRandom: Float = 0f - /** The index of the particle in its emitter, which is also its birth order. */ + /** The index of the particle in its emitter, which is also its spawn order. */ var particleIndex: Float = 0f + /** The [particleRandom] of the particle a sub-emitter spawned this one from; 0 for any other. */ + var parentRandom: Float = 0f + var emitterAge: Float = 0f var emitterCount: Float = 0f var effectTime: Float = 0f @@ -70,6 +73,7 @@ class VfxEvalContext { speed = other.speed particleRandom = other.particleRandom particleIndex = other.particleIndex + parentRandom = other.parentRandom emitterAge = other.emitterAge emitterCount = other.emitterCount effectTime = other.effectTime @@ -94,6 +98,7 @@ val VfxDeclarations: Declarations = Declarations { float("speed") { it.speed } float("random") { it.particleRandom } float("index") { it.particleIndex } + float("parent_random") { it.parentRandom } } val emitter = struct("emitter") { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt index b2a2f3819..eeb5b39c0 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxModuleRuntime.kt @@ -222,6 +222,7 @@ private class VfxCollisionModule(private val spec: VfxCollisionSpec) : VfxModule val y = particles.positionY[slot] val z = particles.positionZ[slot] if (!isSolidAt(emitter, x, y, z, scratch)) return + emitter.particleCollided(slot, dt) if (spec.action == VfxCollisionAction.DIE) { particles.age[slot] = particles.lifetime[slot] diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt index a718e02a3..4674af6cd 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxParticles.kt @@ -27,6 +27,9 @@ class VfxParticles(val capacity: Int) { /** Spawn order within the emitter. */ val index = FloatArray(capacity) + /** The [random] of the particle a sub-emitter spawned this one from; 0 for any other. */ + val parentRandom = FloatArray(capacity) + /** The sprite-sheet frame, as a whole number held in a float. */ val frame = FloatArray(capacity) @@ -77,6 +80,7 @@ class VfxParticles(val capacity: Int) { lifetime[to] = lifetime[from] random[to] = random[from] index[to] = index[from] + parentRandom[to] = parentRandom[from] frame[to] = frame[from] light[to] = light[from] extra?.values?.forEach { System.arraycopy(it.data, from * it.stride, it.data, to * it.stride, it.stride) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt index df01c2ff4..669b799bf 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSamplers.kt @@ -171,6 +171,8 @@ object VfxSamplers { VfxCurveInput.EMITTER_AGE -> VfxFloatSampler { it.emitterAge } VfxCurveInput.EFFECT_TIME -> VfxFloatSampler { it.effectTime } VfxCurveInput.SPEED -> VfxFloatSampler { it.speed } + VfxCurveInput.RANDOM -> VfxFloatSampler { it.particleRandom } + VfxCurveInput.PARENT_RANDOM -> VfxFloatSampler { it.parentRandom } } /** Whether a value reads same for a particle every step. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitters.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitters.kt new file mode 100644 index 000000000..195de73cc --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitters.kt @@ -0,0 +1,114 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.common.utils.math.MutableMat4f +import ru.hollowhorizon.hollowengine.common.utils.math.MutableVec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxParticleEvent +import ru.hollowhorizon.hollowengine.common.vfx.VfxSubEmission + +/** + * Events a sub-emitter has been handed and not yet spawned from, already in the space it simulates + * in: where, with how much velocity to add, the random number of the particle that had the event, + * and how many particles to spawn. + */ +internal class VfxSubEvents { + var size: Int = 0 + private set + + private var data = FloatArray(STRIDE * 16) + + fun add(x: Float, y: Float, z: Float, vx: Float, vy: Float, vz: Float, random: Float, count: Int) { + if ((size + 1) * STRIDE > data.size) data = data.copyOf(data.size * 2) + val at = size * STRIDE + data[at] = x + data[at + 1] = y + data[at + 2] = z + data[at + 3] = vx + data[at + 4] = vy + data[at + 5] = vz + data[at + 6] = random + data[at + 7] = count.toFloat() + size++ + } + + fun x(event: Int) = data[event * STRIDE] + fun y(event: Int) = data[event * STRIDE + 1] + fun z(event: Int) = data[event * STRIDE + 2] + fun velocityX(event: Int) = data[event * STRIDE + 3] + fun velocityY(event: Int) = data[event * STRIDE + 4] + fun velocityZ(event: Int) = data[event * STRIDE + 5] + fun random(event: Int) = data[event * STRIDE + 6] + fun count(event: Int) = data[event * STRIDE + 7].toInt() + + fun clear() { + size = 0 + } + + private companion object { + const val STRIDE = 8 + } +} + +/** + * What makes an emitter a sub-emitter: the emitter it listens to, and the events it was handed. + */ +internal class VfxSubEmitterInput( + private val spec: VfxSubEmission, + val source: VfxEmitter, + node: VfxNodeRuntime, +) { + val events = VfxSubEvents() + + private val count = VfxSamplers.scalar(spec.count, node.expressions, 0f, VfxRangeMode.PER_PARTICLE, COUNT_SALT) + private val inheritVelocity = + VfxSamplers.scalar(spec.inheritVelocity, node.expressions, 0f, VfxRangeMode.PER_PARTICLE, VELOCITY_SALT) + + /** How many particles an [VfxParticleEvent.ALIVE] sub-emitter still owes each particle of [source]. */ + private val debtChannel = "sub:${node.spec.id}" + + /** The space [source] simulates in, to the one this emitter does; refreshed as the frames are placed. */ + private val sourceToOwn = MutableMat4f() + private val renderToOwn = MutableMat4f() + private val point = MutableVec3f() + private val velocity = MutableVec3f() + + fun place(ownSimToRender: MutableMat4f) { + ownSimToRender.invert(renderToOwn) + renderToOwn.mul(source.simToRender, sourceToOwn) + } + + /** A particle of [source] in [slot] had [event]; its context is filled for it. */ + fun take(event: VfxParticleEvent, slot: Int, dt: Float) { + val particles = source.particles + if (spec.event == VfxParticleEvent.ALIVE && event == VfxParticleEvent.SPAWN) { + particles.channel(debtChannel)[slot] = 0f + } + if (event != spec.event) return + + val context = source.context + val spawned = if (event == VfxParticleEvent.ALIVE) { + val debt = particles.channel(debtChannel) + debt[slot] += count.eval(context).coerceAtLeast(0f) * dt + debt[slot].toInt().also { debt[slot] -= it } + } else { + count.eval(context).coerceAtLeast(0f).toInt() + } + if (spawned <= 0) return + + point.set(particles.positionX[slot], particles.positionY[slot], particles.positionZ[slot]) + sourceToOwn.transform(point, 1f) + val inherit = inheritVelocity.eval(context) + velocity.set( + particles.velocityX[slot] * inherit, + particles.velocityY[slot] * inherit, + particles.velocityZ[slot] * inherit, + ) + sourceToOwn.transform(velocity, 0f) + + events.add(point.x, point.y, point.z, velocity.x, velocity.y, velocity.z, particles.random[slot], spawned) + } + + private companion object { + const val COUNT_SALT = 0x5b1 + const val VELOCITY_SALT = 0x5b2 + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt index ff56eca5f..a70915c87 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt @@ -120,10 +120,20 @@ class VfxDrawList { get() = quads.isEmpty() && meshes.isEmpty() && models.isEmpty() && ribbons.isEmpty() && posts.isEmpty() && skies.isEmpty() - /** Whether any surface is drawn by a shader of the author, which may read the scene textures. */ - val usesCustomShaders: Boolean - get() = quads.any { it.plane.material.shader != null } || meshes.any { it.spec.material.shader != null } || - ribbons.any { it.material.shader != null } + /** + * Whether anything reads the scene textures: a surface with a shader of the author, which may, + * or one with softness, which reads the depth. + */ + val readsScene: Boolean + get() = materials().any { it.shader != null || it.softness > 0f } + + /** Whether any surface glows, which is what the glow pass is drawn for. */ + val glows: Boolean + get() = materials().any { it.glow > 0f } + + private fun materials(): Sequence = + quads.asSequence().map { it.plane.material } + meshes.asSequence().map { it.spec.material } + + ribbons.asSequence().map { it.material } fun clear() { quads.clear() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt index 6c3fe787c..4605754b2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDraws.kt @@ -28,14 +28,24 @@ object VfxFrameRenderer { renderSurfaces(list, view, target) } - /** Everything drawn with the effect shaders: the sky, then meshes, ribbons and planes. */ + /** + * Everything drawn with the effect shaders: the sky, then meshes, ribbons and planes, then the glow + * of whatever glows, over all of them. + */ fun renderSurfaces(list: VfxDrawList, view: VfxView, target: RenderTarget) { - if (list.usesCustomShaders) VfxSceneTextures.capture(target) + if (list.readsScene) VfxSceneTextures.capture(target) VfxSkyRenderer.render(list.skies, view) VfxMeshRenderer.render(list.meshes, view) VfxRibbonRenderer.render(list.ribbons, view) VfxQuadRenderer.render(list.quads, view) + + if (list.glows && VfxGlow.begin(target)) { + VfxMeshRenderer.renderGlow(view) + VfxRibbonRenderer.render(list.ribbons, view, glow = true) + VfxQuadRenderer.renderGlow(view) + VfxGlow.finish(target) + } } fun renderModels(draws: List) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGlow.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGlow.kt new file mode 100644 index 000000000..939d8ade5 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGlow.kt @@ -0,0 +1,191 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.pipeline.RenderTarget +import com.mojang.blaze3d.platform.GlStateManager +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.Tesselator +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.renderer.ShaderInstance +import org.joml.Matrix4f +import org.joml.Vector3f +import org.lwjgl.opengl.GL33 +import ru.hollowhorizon.hollowengine.HollowEngine + +/** + * The glow of the frame: surfaces with a glow draw a second time into a float texture that shares the + * depth of the frame, so the scene hides it where it hides them, and that texture is blurred down a + * pyramid of halving levels and added over the frame. + */ +object VfxGlow { + private const val DOWNSAMPLE = "hollowengine:vfx/glow/downsample" + private const val UPSAMPLE = "hollowengine:vfx/glow/upsample" + + private const val MAX_LEVELS = 6 + private const val MIN_LEVEL_SIZE = 8 + + /** How much of the coarser level each finer one takes on the way up; more spreads the glow wider. */ + private const val SCATTER = 0.7f + + /** The world and the editor preview draw into targets of different sizes in one frame; both stay. */ + private const val KEPT_CHAINS = 3 + + private val chains = object : LinkedHashMap(4, 0.75f, true) { + override fun removeEldestEntry(eldest: MutableMap.MutableEntry): Boolean = + (size > KEPT_CHAINS).also { if (it) eldest.value.delete() } + } + + private var current: GlowChain? = null + private var warned = false + + /** + * Binds the glow surface for [frame], cleared and over its depth. Returns false when that cannot + * be done, and [frame] is bound again. + */ + fun begin(frame: RenderTarget): Boolean { + val chain = chains.getOrPut(frame.width.toLong() shl 32 or frame.height.toLong()) { + GlowChain(frame.width, frame.height) + } + chain.base.bind() + GL33.glFramebufferTexture2D( + GL33.GL_FRAMEBUFFER, GL33.GL_DEPTH_ATTACHMENT, GL33.GL_TEXTURE_2D, frame.depthTextureId, 0, + ) + if (GL33.glCheckFramebufferStatus(GL33.GL_FRAMEBUFFER) != GL33.GL_FRAMEBUFFER_COMPLETE) { + if (!warned) HollowEngine.LOGGER.warn("Effect glow is off: the frame depth cannot be shared") + warned = true + detachDepth() + frame.bindWrite(true) + return false + } + GL33.glClearBufferfv(GL33.GL_COLOR, 0, floatArrayOf(0f, 0f, 0f, 0f)) + current = chain + return true + } + + /** Blurs what was drawn since [begin] and adds it over [frame], which is bound afterward. */ + fun finish(frame: RenderTarget) { + val chain = current ?: return + current = null + chain.base.bind() + detachDepth() + + val down = VfxShaders.get(DOWNSAMPLE, DefaultVertexFormat.POSITION_TEX) + val up = VfxShaders.get(UPSAMPLE, DefaultVertexFormat.POSITION_TEX) + if (down == null || up == null) { + frame.bindWrite(true) + return + } + + RenderSystem.disableDepthTest() + RenderSystem.depthMask(false) + RenderSystem.disableCull() + try { + RenderSystem.disableBlend() + var source = chain.base + chain.levels.forEachIndexed { index, level -> + level.bind() + VfxScreenQuad.draw(down) { shader -> + shader.setSampler("Source", source.texture) + shader.safeGetUniform("SourceTexel").set(1f / source.width, 1f / source.height) + shader.safeGetUniform("FirstPass").set(if (index == 0) 1f else 0f) + } + source = level + } + + RenderSystem.enableBlend() + GL33.glBlendColor(0f, 0f, 0f, SCATTER) + RenderSystem.blendFunc( + GlStateManager.SourceFactor.CONSTANT_ALPHA, GlStateManager.DestFactor.ONE_MINUS_CONSTANT_ALPHA, + ) + for (index in chain.levels.lastIndex downTo 1) { + chain.levels[index - 1].bind() + upsample(up, chain.levels[index]) + } + GL33.glBlendColor(0f, 0f, 0f, 0f) + + frame.bindWrite(true) + RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE) + upsample(up, chain.levels.firstOrNull() ?: chain.base) + } finally { + VfxMaterialStates.restore() + } + } + + private fun upsample(shader: ShaderInstance, source: GlowSurface) { + VfxScreenQuad.draw(shader) { bound -> + bound.setSampler("Source", source.texture) + bound.safeGetUniform("SourceTexel").set(1f / source.width, 1f / source.height) + bound.safeGetUniform("Strength").set(1f) + } + } + + /** The depth belongs to the frame, which may be resized or deleted while this is not looking. */ + private fun detachDepth() { + GL33.glFramebufferTexture2D(GL33.GL_FRAMEBUFFER, GL33.GL_DEPTH_ATTACHMENT, GL33.GL_TEXTURE_2D, 0, 0) + } + + /** The full-size surface and the halving levels under it, for one size of frame. */ + private class GlowChain(width: Int, height: Int) { + val base = GlowSurface(width, height) + val levels: List = buildList { + var levelWidth = width / 2 + var levelHeight = height / 2 + while (size < MAX_LEVELS && levelWidth >= MIN_LEVEL_SIZE && levelHeight >= MIN_LEVEL_SIZE) { + add(GlowSurface(levelWidth, levelHeight)) + levelWidth /= 2 + levelHeight /= 2 + } + } + + fun delete() { + base.delete() + levels.forEach(GlowSurface::delete) + } + } + + /** A half-float color texture and the framebuffer that draws into it. */ + private class GlowSurface(val width: Int, val height: Int) { + val texture: Int = GlStateManager._genTexture() + private val framebuffer: Int = GlStateManager.glGenFramebuffers() + + init { + GlStateManager._bindTexture(texture) + GlStateManager._texImage2D( + GL33.GL_TEXTURE_2D, 0, GL33.GL_RGBA16F, width, height, 0, GL33.GL_RGBA, GL33.GL_FLOAT, null, + ) + GlStateManager._texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_MIN_FILTER, GL33.GL_LINEAR) + GlStateManager._texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_MAG_FILTER, GL33.GL_LINEAR) + GlStateManager._texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_S, GL33.GL_CLAMP_TO_EDGE) + GlStateManager._texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_T, GL33.GL_CLAMP_TO_EDGE) + GlStateManager._glBindFramebuffer(GL33.GL_FRAMEBUFFER, framebuffer) + GlStateManager._glFramebufferTexture2D( + GL33.GL_FRAMEBUFFER, GL33.GL_COLOR_ATTACHMENT0, GL33.GL_TEXTURE_2D, texture, 0, + ) + } + + fun bind() { + GlStateManager._glBindFramebuffer(GL33.GL_FRAMEBUFFER, framebuffer) + RenderSystem.viewport(0, 0, width, height) + } + + fun delete() { + GlStateManager._deleteTexture(texture) + GlStateManager._glDeleteFramebuffers(framebuffer) + } + } +} + +/** A quad over the whole target, for the passes that work on a picture rather than on geometry. */ +internal object VfxScreenQuad { + private val SCREEN = VfxView(Matrix4f(), Matrix4f(), Vector3f(1f, 0f, 0f), Vector3f(0f, 1f, 0f), Vector3f()) + + fun draw(shader: ShaderInstance, prepare: (ShaderInstance) -> Unit) { + val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) + builder.addVertex(-1f, -1f, 0f).setUv(0f, 0f) + builder.addVertex(1f, -1f, 0f).setUv(1f, 0f) + builder.addVertex(1f, 1f, 0f).setUv(1f, 1f) + builder.addVertex(-1f, 1f, 0f).setUv(0f, 1f) + val mesh = builder.build() ?: return + SCREEN.drawImmediate(mesh, shader, prepare) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt index 0caad00ae..b302811c2 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt @@ -47,6 +47,9 @@ object VfxMeshRenderer { private var upload: FloatBuffer = BufferUtils.createFloatBuffer(STRIDE * 64) private val batches = LinkedHashMap, Batch>() + + /** The batches of the last [render], in the order they were drawn; the glow pass draws them again. */ + private var drawn: List = emptyList() private val matrix = Matrix4f() private val rotation = Quaternionf() @@ -65,13 +68,22 @@ object VfxMeshRenderer { } fun render(draws: List, view: VfxView) { + drawn = emptyList() if (draws.isEmpty()) return val total = pack(draws, view) if (total == 0) return val order = batches.values.filter { !it.sorted } + batches.values.filter { it.sorted }.sortedByDescending { it.depth } - drawInstanced(order, view, total) + drawn = order + uploadInstances(total) + drawInstanced(order, view, glow = false) + } + + /** Draws the glow of the batches that have one, out of the instances [render] uploaded this frame. */ + fun renderGlow(view: VfxView) { + val glowing = drawn.filter { it.key.glow > 0f } + if (glowing.isNotEmpty()) drawInstanced(glowing, view, glow = true) } private fun pack(draws: List, view: VfxView): Int { @@ -179,15 +191,18 @@ object VfxMeshRenderer { items.forEachIndexed { index, (_, data) -> System.arraycopy(data, 0, packed, (start + index) * STRIDE, STRIDE) } } - private fun drawInstanced(order: List, view: VfxView, total: Int) { + private fun drawInstanced(order: List, view: VfxView, glow: Boolean) { val engine = ModShaders.VFX_MESH ?: return val previousVao = GL33.glGetInteger(GL33.GL_VERTEX_ARRAY_BINDING) val previousBuffer = GL33.glGetInteger(GL33.GL_ELEMENT_ARRAY_BUFFER_BINDING) - uploadInstances(total) try { GL33.glDepthFunc(GL33.GL_LEQUAL) order.forEach { batch -> - val shader = batch.key.shader?.let { VfxShaders.get(it, DefaultVertexFormat.POSITION_TEX) } ?: engine + val shader = if (glow) { + VfxMaterialStates.glowShader(batch.key.shader, engine, DefaultVertexFormat.POSITION_TEX) ?: return@forEach + } else { + batch.key.shader?.let { VfxShaders.get(it, DefaultVertexFormat.POSITION_TEX) } ?: engine + } val mesh = gpuMesh(batch.primitive) shader.setDefaultUniforms( VertexFormat.Mode.TRIANGLES, view.modelView, view.projection, Minecraft.getInstance().window @@ -195,9 +210,12 @@ object VfxMeshRenderer { VfxMaterialStates.bindCommonSamplers(shader, VfxMaterialStates.texture(batch.key.texture)) shader.safeGetUniform("Shaded").set(if (batch.shaded) 1f else 0f) shader.safeGetUniform("BlendMode").set(VfxQuadPacker.blendMode(batch.draws.first().spec.material.blend)) + shader.safeGetUniform("Softness").set(batch.key.softness) + shader.safeGetUniform("Glow").set(batch.key.glow) + shader.safeGetUniform("GlowPass").set(if (glow) 1f else 0f) if (shader !== engine) batch.draws.first().uniforms?.apply(shader) shader.apply() - VfxMaterialStates.apply(batch.key, premultiplied = false) + if (glow) VfxMaterialStates.applyGlow(batch.key) else VfxMaterialStates.apply(batch.key, premultiplied = false) RenderSystem.glBindVertexArray(vaoFor(shader, batch.primitive, mesh)) instanceBuffer?.bind() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt index fe1173671..9eadcb9ac 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt @@ -38,7 +38,9 @@ internal enum class VfxBatchBlend { /** * What decides whether two draws can share a draw call. * - * A draw with a shader of its own also carries uniforms of its own, so [owner] keeps it apart. + * A draw with a shader of its own also carries uniforms of its own, so [owner] keeps it apart. Planes + * of the engine program carry softness and glow per particle, so only the other draws are split by + * them. */ internal data class VfxBatchKey( val texture: String, @@ -48,18 +50,23 @@ internal data class VfxBatchKey( val depthWrite: Boolean, val shader: String? = null, val owner: Any? = null, + val softness: Float = 0f, + val glow: Float = 0f, ) { companion object { fun of(material: VfxMaterialSpec, mixed: Boolean, owner: Any?): VfxBatchKey { val custom = material.shader != null + val perParticle = mixed && !custom return VfxBatchKey( texture = material.texture, - blend = VfxBatchBlend.of(material.blend, mixed && !custom), + blend = VfxBatchBlend.of(material.blend, perParticle), cull = material.cull, depthTest = material.depthTest, depthWrite = material.depthWrite, shader = material.shader, owner = if (custom) owner else null, + softness = if (perParticle) 0f else material.softness, + glow = if (perParticle) 0f else material.glow, ) } } @@ -79,6 +86,9 @@ internal class VfxQuadBatch(val key: VfxBatchKey) { /** The uniforms of the one draw a batch with a shader of its own holds. */ val uniforms: VfxUniformValues? get() = draws.firstOrNull()?.uniforms + + /** Whether anything in the batch glows, which is what draws it again in the glow pass. */ + val glows: Boolean get() = draws.any { it.plane.material.glow > 0f } } /** @@ -100,6 +110,8 @@ internal class VfxQuadPacker { /** Packs [draws] as seen from [view]; returns how many particles there are in total. */ fun pack(draws: List, view: VfxView): Int { byKey.clear() + batches.clear() + if (draws.isEmpty()) return 0 draws.forEach { draw -> val key = VfxBatchKey.of(draw.plane.material, mixed = true, owner = draw) byKey.getOrPut(key) { VfxQuadBatch(key) }.draws += draw @@ -235,6 +247,8 @@ internal class VfxQuadPacker { out[base + 17] = (light and 0xFFFF).toFloat() out[base + 18] = (light shr 16 and 0xFFFF).toFloat() out[base + 19] = blendMode(plane.material.blend) + out[base + 20] = plane.material.softness + out[base + 21] = plane.material.glow } private fun ensureCapacity(count: Int) { @@ -247,8 +261,8 @@ internal class VfxQuadPacker { } companion object { - /** Floats per particle: center, right edge, up edge, color, uv window, light, blend mode. */ - const val STRIDE = 20 + /** Floats per particle: center, right edge, up edge, color, uv window, light, blend mode, softness, glow. */ + const val STRIDE = 22 /** The blend mode as the particle shader reads it: 0 alpha, 1 additive, 2 opaque, 3 multiply. */ fun blendMode(blend: VfxBlend): Float = when (blend) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt index 7c2c147ac..316a5abb6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt @@ -48,45 +48,70 @@ object VfxQuadRenderer { /** Draws everything in [draws] as seen from [view]. */ fun render(draws: List, view: VfxView) { - if (draws.isEmpty()) return - val total = packer.pack(draws, view) if (total == 0) return draw(total, view) } + /** + * Draws the glow of the batches that have one, out of the instances [render] uploaded this frame. + */ + fun renderGlow(view: VfxView) { + val engine = ModShaders.VFX_PARTICLE ?: return + val glowing = packer.batches.filter { it.glows } + if (glowing.isEmpty()) return + withInstanceState(upload = 0) { + GL33.glDepthFunc(GL33.GL_LEQUAL) + glowing.forEach { batch -> + val shader = VfxMaterialStates.glowShader(batch.key.shader, engine, DefaultVertexFormat.POSITION_TEX) + ?: return@forEach + drawBatch(shader, engine, batch, view, glow = true) + } + } + } + /** * The engine program draws every batch but the ones whose material names a shader of its own; * those get theirs, falling back to the engine program when it failed to load. */ private fun draw(total: Int, view: VfxView) { val engine = ModShaders.VFX_PARTICLE ?: return - withInstanceState(total) { + withInstanceState(upload = total) { GL33.glDepthFunc(GL33.GL_LEQUAL) packer.batches.forEach { batch -> val shader = batch.key.shader?.let { VfxShaders.get(it, DefaultVertexFormat.POSITION_TEX) } ?: engine - RenderSystem.setShader { shader } - shader.setDefaultUniforms( - VertexFormat.Mode.TRIANGLES, view.modelView, view.projection, Minecraft.getInstance().window - ) - VfxMaterialStates.bindCommonSamplers(shader, VfxMaterialStates.texture(batch.key.texture)) - if (shader !== engine) batch.uniforms?.apply(shader) - shader.apply() - VfxMaterialStates.apply(batch.key, premultiplied = shader === engine) - drawBatch(shader, batch) - shader.clear() + drawBatch(shader, engine, batch, view, glow = false) } } } - private inline fun withInstanceState(total: Int, body: () -> Unit) { + private fun drawBatch(shader: ShaderInstance, engine: ShaderInstance, batch: VfxQuadBatch, view: VfxView, glow: Boolean) { + RenderSystem.setShader { shader } + shader.setDefaultUniforms( + VertexFormat.Mode.TRIANGLES, view.modelView, view.projection, Minecraft.getInstance().window + ) + VfxMaterialStates.bindCommonSamplers(shader, VfxMaterialStates.texture(batch.key.texture)) + if (shader !== engine) batch.uniforms?.apply(shader) + shader.safeGetUniform("GlowPass").set(if (glow) 1f else 0f) + shader.apply() + if (glow) { + VfxMaterialStates.applyGlow(batch.key) + } else { + VfxMaterialStates.apply(batch.key, premultiplied = shader === engine) + } + drawInstances(shader, batch) + shader.clear() + } + + /** Runs [body] with the quad buffers bound, after uploading [upload] instances when there are any. */ + private inline fun withInstanceState(upload: Int, body: () -> Unit) { val previousVao = GL33.glGetInteger(GL33.GL_VERTEX_ARRAY_BINDING) val previousBuffer = GL33.glGetInteger(GL33.GL_ELEMENT_ARRAY_BUFFER_BINDING) val previousTexture = GL33.glGetInteger(GL33.GL_ACTIVE_TEXTURE) ensureBuffers() - uploadInstances(total) + if (upload > 0) uploadInstances(upload) try { body() } finally { @@ -98,7 +123,7 @@ object VfxQuadRenderer { } } - private fun drawBatch(shader: ShaderInstance, batch: VfxQuadBatch) { + private fun drawInstances(shader: ShaderInstance, batch: VfxQuadBatch) { RenderSystem.glBindVertexArray(vaoFor(shader)) instanceBuffer?.bind() pointInstances(shader, batch.first.toLong() * STRIDE_BYTES) @@ -167,6 +192,7 @@ object VfxQuadRenderer { bindFloats(shader, "InstanceUv", 4, STRIDE_BYTES, base + 13L * Float.SIZE_BYTES) bindFloats(shader, "InstanceLight", 2, STRIDE_BYTES, base + 17L * Float.SIZE_BYTES) bindFloats(shader, "InstanceBlend", 1, STRIDE_BYTES, base + 19L * Float.SIZE_BYTES) + bindFloats(shader, "InstanceMaterial", 2, STRIDE_BYTES, base + 20L * Float.SIZE_BYTES) } private fun bindFloats( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt index 5abdefb31..2a2cc4a68 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt @@ -27,6 +27,26 @@ internal object VfxMaterialStates { RenderSystem.depthMask(key.depthWrite) } + /** What a surface draws its glow with: added up, tested against the frame depth, never written to it. */ + fun applyGlow(key: VfxBatchKey) { + RenderSystem.enableBlend() + RenderSystem.blendEquation(GL33.GL_FUNC_ADD) + RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE) + if (key.cull) RenderSystem.enableCull() else RenderSystem.disableCull() + if (key.depthTest) RenderSystem.enableDepthTest() else RenderSystem.disableDepthTest() + RenderSystem.depthMask(false) + } + + /** + * The program a surface draws its glow with: the engine's, or a shader of the author that + * declares `GlowPass` and so knows what to write in it; null when there is none. + */ + fun glowShader(custom: String?, engine: ShaderInstance, format: VertexFormat): ShaderInstance? { + custom ?: return engine + if (VfxShaderDeclarations.of(custom)?.drawsGlow != true) return null + return VfxShaders.get(custom, format) + } + fun restore() { RenderSystem.depthMask(true) RenderSystem.enableDepthTest() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt index 3373846b7..bc4149e2d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt @@ -19,7 +19,11 @@ import kotlin.math.sqrt object VfxRibbonRenderer { private val side = FloatArray(3) - fun render(draws: List, view: VfxView) { + /** + * Draws [draws] as seen from [view]; with [glow], only the glow of the ones that have one, which + * builds their strips again, since the pass comes after the frame has moved on to other surfaces. + */ + fun render(draws: List, view: VfxView, glow: Boolean = false) { if (draws.isEmpty()) return val engine = ModShaders.VFX_RIBBON ?: return @@ -28,7 +32,12 @@ object VfxRibbonRenderer { ordered.forEach { draw -> val material = draw.material - val shader = material.shader?.let { VfxShaders.get(it, DefaultVertexFormat.PARTICLE) } ?: engine + if (glow && material.glow <= 0f) return@forEach + val shader = if (glow) { + VfxMaterialStates.glowShader(material.shader, engine, DefaultVertexFormat.PARTICLE) ?: return@forEach + } else { + material.shader?.let { VfxShaders.get(it, DefaultVertexFormat.PARTICLE) } ?: engine + } val texture = VfxMaterialStates.texture(material.texture) val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE) @@ -42,10 +51,14 @@ object VfxRibbonRenderer { RenderSystem.texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_S, GL33.GL_REPEAT) RenderSystem.texParameter(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_T, GL33.GL_REPEAT) } - VfxMaterialStates.apply(VfxBatchKey.of(material, mixed = false, owner = draw), premultiplied = false) + val key = VfxBatchKey.of(material, mixed = false, owner = draw) + if (glow) VfxMaterialStates.applyGlow(key) else VfxMaterialStates.apply(key, premultiplied = false) view.drawImmediate(mesh, shader) { bound -> VfxMaterialStates.bindCommonSamplers(bound, texture) bound.safeGetUniform("BlendMode").set(VfxQuadPacker.blendMode(material.blend)) + bound.safeGetUniform("Softness").set(material.softness) + bound.safeGetUniform("Glow").set(material.glow) + bound.safeGetUniform("GlowPass").set(if (glow) 1f else 0f) if (bound !== engine) draw.uniforms?.apply(bound) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt index 2804a77b8..002f8b203 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxScreenNodes.kt @@ -141,14 +141,7 @@ object VfxPostProcessor { val shader = VfxShaders.get(post.shader, DefaultVertexFormat.POSITION_TEX) ?: return@forEach VfxSceneTextures.capture(target) - val builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) - builder.addVertex(-1f, -1f, 0f).setUv(0f, 0f) - builder.addVertex(1f, -1f, 0f).setUv(1f, 0f) - builder.addVertex(1f, 1f, 0f).setUv(1f, 1f) - builder.addVertex(-1f, 1f, 0f).setUv(0f, 1f) - val mesh = builder.build() ?: return@forEach - - SCREEN.drawImmediate(mesh, shader) { bound -> + VfxScreenQuad.draw(shader) { bound -> VfxSceneTextures.bind(bound) bound.safeGetUniform("ScreenSize").set(target.width.toFloat(), target.height.toFloat()) post.uniforms.apply(bound) @@ -162,7 +155,4 @@ object VfxPostProcessor { RenderSystem.enableCull() } } - - /** Identity matrices: the quad is already in clip space. */ - private val SCREEN = VfxView(Matrix4f(), Matrix4f(), Vector3f(1f, 0f, 0f), Vector3f(0f, 1f, 0f), Vector3f()) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt index 1f0a9575e..cae8efe29 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt @@ -33,7 +33,12 @@ class VfxShaderUniform(val name: String, val type: String, val count: Int, val d * What a core shader json declares, minus what the engine fills in itself: the uniforms and the * samplers an effect author gives values to. */ -class VfxShaderDeclaration(val uniforms: List, val samplers: List) { +class VfxShaderDeclaration( + val uniforms: List, + val samplers: List, + /** Whether the shader declares `GlowPass`, and so draws the glow of its surface itself. */ + val drawsGlow: Boolean = false, +) { fun uniform(name: String): VfxShaderUniform? = uniforms.firstOrNull { it.name == name } /** @@ -51,6 +56,7 @@ class VfxShaderDeclaration(val uniforms: List, val samplers: L "ModelViewMat", "ProjMat", "IViewRotMat", "TextureMat", "ColorModulator", "Light0_Direction", "Light1_Direction", "FogStart", "FogEnd", "FogColor", "FogShape", "LineWidth", "GameTime", "ScreenSize", "GlintAlpha", "ChunkOffset", "Shaded", "BlendMode", "SkyCenter", "NodeOffset", "EffectTime", + "Softness", "Glow", "GlowPass", ) /** The material texture, the light map and the scene copies. */ @@ -68,7 +74,8 @@ class VfxShaderDeclaration(val uniforms: List, val samplers: L val samplers = json.getAsJsonArray("samplers")?.mapNotNull { element -> element.asJsonObject.get("name")?.asString?.takeIf { it !in ENGINE_SAMPLERS } }.orEmpty() - return VfxShaderDeclaration(uniforms, samplers) + val drawsGlow = json.getAsJsonArray("uniforms")?.any { it.asJsonObject.get("name")?.asString == "GlowPass" } == true + return VfxShaderDeclaration(uniforms, samplers, drawsGlow) } } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt index 7519c60f6..c2e44d30d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxEmitterSpec.kt @@ -106,6 +106,30 @@ data class VfxMotion( fun expressions(): List = gravity.sources() + drag.sources() } +/** What happens to a particle that a sub-emitter reacts to. */ +@Serializable +enum class VfxParticleEvent { + SPAWN, + + /** Of age, or of a collision that kills it. */ + DEATH, + + /** Touching a block. */ + COLLISION, + + /** All the while it lives; the count is then per second. */ + ALIVE, +} + +@Serializable +data class VfxSubEmission( + val event: VfxParticleEvent = VfxParticleEvent.DEATH, + val count: VfxValue = VfxValue.Const(12f), + val inheritVelocity: VfxValue = VfxValue.ZERO, +) { + fun expressions(): List = count.sources() + inheritVelocity.sources() +} + /** * Makes particles and moves them. It draws nothing itself: the renderers directly under it do, one * each per particle. @@ -126,6 +150,7 @@ data class VfxEmitterSpec( val spawn: VfxSpawn = VfxSpawn(), val motion: VfxMotion = VfxMotion(), val modules: List = emptyList(), + val subEmission: VfxSubEmission? = null, /** The longest step the simulation may take for this emitter, in seconds. */ val maxStep: Float = DEFAULT_MAX_STEP, ) : VfxNodeSpec() { @@ -145,6 +170,7 @@ data class VfxEmitterSpec( addAll(spawn.expressions()) addAll(motion.expressions()) modules.forEach { addAll(it.expressions()) } + subEmission?.let { addAll(it.expressions()) } } override fun animatables(): List = buildList { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt index 14146e104..132838bc1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxMaterialSpec.kt @@ -62,6 +62,8 @@ data class VfxMaterialSpec( val depthTest: Boolean = true, val depthWrite: Boolean = false, val uv: VfxUvRect = VfxUvRect.FULL, + val softness: Float = 0f, + val glow: Float = 0f, /** `namespace:path` of `assets/namespace/shaders/core/path.json`; null for the engine's own. */ val shader: String? = null, val uniforms: List = emptyList(), diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt index f13eee176..c58eb3bfb 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/vfx/VfxValue.kt @@ -52,7 +52,7 @@ sealed interface VfxValue { @Serializable enum class VfxCurveInput { /** - * Age over lifetime, 0 at birth and 1 as the particle dies. + * Age over lifetime, 0 at spawn and 1 as the particle dies. */ LIFETIME, @@ -67,6 +67,12 @@ enum class VfxCurveInput { /** Speed in blocks per second, for "faster means bigger" curves. */ SPEED, + + /** The particle's own random number, 0 to 1: a pick along the curve that holds for its whole life. */ + RANDOM, + + /** The random number of the particle a sub-emitter spawned this one from; 0 elsewhere. */ + PARENT_RANDOM, } /** How the segment starting at a key reaches the next one; mirrors the timeline editor modes. */ diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json index 04b8415d5..b74623c60 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json @@ -34,7 +34,8 @@ "section_emission": "Emission", "section_space": "Space and step", "section_shape": "Shape", - "section_spawn": "At birth", + "section_spawn": "At spawn", + "section_sub_emission": "Sub-emitter", "section_particle": "Particle", "section_mesh": "Mesh", "section_trail": "Trail", @@ -115,7 +116,7 @@ "size_hint": "In blocks. A curve, or an expression on p.progress, changes it over the particle life.", "spin": "Spin", "spin_hint": "Angles in degrees. A camera-facing billboard only uses Z.", - "color": "Colour", + "color": "Color", "color_hint": "A gradient is read over the lifetime unless another source is picked.", "gravity": "Gravity", @@ -149,7 +150,7 @@ "facing_axis_hint": "In the space of the particles: the emitter for local particles, the world for world ones.", "tint": "Tint", - "tint_hint": "Multiplies the colour. On a particle it multiplies the particle colour; on a trail or beam a gradient runs from head to tail.", + "tint_hint": "Multiplies the color. On a particle it multiplies the particle color; on a trail or beam a gradient runs from head to tail.", "segments": "Segments", "caps": "Closed ends", "width": "Width", @@ -174,9 +175,9 @@ "uv_scroll_hint": "Texture lengths per second the texture slides from start to end.", "shader": "Core shader", - "shader_plane_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth.", - "shader_mesh_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth.", - "shader_ribbon_hint": "namespace:path of shaders/core/path.json. The vanilla particle format: Position, UV0, Color, UV2. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth.", + "shader_plane_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight, InstanceBlend, InstanceMaterial (soft edge, glow). Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. #moj_import gives hollowengine_soft_fade.", + "shader_mesh_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. Uniforms Softness and Glow hold the material values; #moj_import gives hollowengine_soft_fade.", + "shader_ribbon_hint": "namespace:path of shaders/core/path.json. The vanilla particle format: Position, UV0, Color, UV2. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. Uniforms Softness and Glow hold the material values; #moj_import gives hollowengine_soft_fade.", "shader_sky_hint": "namespace:path of shaders/core/path.json, drawn on the far plane: only the sky shows it, everything in front stays over it. Vertex shader hollowengine:vfx/sky/sky hands the fragment skyDirection, the view ray. The engine sets SkyCenter (direction to this node), NodeOffset (this node relative to the camera, in blocks) and EffectTime (seconds).", "shader_post_hint": "namespace:path of shaders/core/path.json, drawn over the whole screen. Attributes: Position, UV0. Samplers: SceneColor, SceneDepth. ScreenSize is the size of the frame.", "shader_missing": "No such shader: the json is looked for in assets/namespace/shaders/core/path.json.", @@ -222,6 +223,22 @@ "source_emitter_age": "Emitter age, s", "source_effect_time": "Effect time, s", "source_speed": "Speed", + "source_random": "Random per particle", + "source_parent_random": "Parent random", + "sub_enabled": "Spawn from the particles above", + "sub_enabled_hint": "Instead of emitting on its own, the emitter spawns where a particle of the emitter it sits under is, whenever that particle has the event below. Its shape is laid around that point. Fireworks: a death event on the rockets. Every particle born here keeps the random number of the particle it came from as p.parent_random (and the Parent random source), so its color can match that particle.", + "sub_event_spawn": "Spawn", + "sub_event_death": "Death", + "sub_event_collision": "Collision", + "sub_event_alive": "While alive", + "sub_count": "Count", + "sub_count_hint": "Particles per event, read for the particle that had it: p. is that particle.", + "sub_count_alive_hint": "Particles per second of the life of each particle above: p. is that particle.", + "sub_inherit_velocity_hint": "How much of the velocity of the particle above the new ones keep, 0 to 1.", + "glow": "Glow", + "glow_hint": "Light the surface gives off around itself: its color times this spills over the frame as a soft glow, and nothing in front of it lets it through. Above 1 reads as brighter than white. A shader of your own glows only if its json declares GlowPass: it is 1 in the glow pass, and Glow holds this value.", + "softness": "Soft edge", + "softness_hint": "Blocks over which the surface fades as it nears what stands behind it, so it does not cut a hard line into a block or the ground. 0 keeps the edge hard.", "color_solid": "Solid", "color_gradient": "Gradient", diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json index b86ac0e93..0055b67b2 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json @@ -35,6 +35,7 @@ "section_space": "Пространство и шаг", "section_shape": "Форма", "section_spawn": "При рождении", + "section_sub_emission": "Саб-эмиттер", "section_particle": "Партикл", "section_mesh": "Меш", "section_trail": "Шлейф", @@ -174,9 +175,9 @@ "uv_scroll_hint": "Сколько длин текстуры в секунду она проезжает от начала к концу.", "shader": "Core-шейдер", - "shader_plane_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth.", - "shader_mesh_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth.", - "shader_ribbon_hint": "namespace:path для shaders/core/path.json. Ванильный формат партиклов: Position, UV0, Color, UV2. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth.", + "shader_plane_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight, InstanceBlend, InstanceMaterial (мягкий край, свечение). Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. #moj_import даёт hollowengine_soft_fade.", + "shader_mesh_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. Uniform'ы Softness и Glow хранят значения материала; #moj_import даёт hollowengine_soft_fade.", + "shader_ribbon_hint": "namespace:path для shaders/core/path.json. Ванильный формат партиклов: Position, UV0, Color, UV2. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. Uniform'ы Softness и Glow хранят значения материала; #moj_import даёт hollowengine_soft_fade.", "shader_sky_hint": "namespace:path для shaders/core/path.json, рисуется на дальней плоскости: виден только на небе, всё, что ближе, остаётся поверх. Вершинный шейдер hollowengine:vfx/sky/sky передаёт фрагменту skyDirection - луч взгляда. Движок задаёт SkyCenter (направление на этот узел), NodeOffset (узел относительно камеры, в блоках) и EffectTime (секунды).", "shader_post_hint": "namespace:path для shaders/core/path.json, рисуется на весь экран. Атрибуты: Position, UV0. Сэмплеры: SceneColor, SceneDepth. ScreenSize — размер кадра.", "shader_missing": "Такого шейдера нет: json ищется в assets/namespace/shaders/core/path.json.", @@ -222,6 +223,22 @@ "source_emitter_age": "Возраст эмиттера, с", "source_effect_time": "Время эффекта, с", "source_speed": "Скорость", + "source_random": "Случайно для партикла", + "source_parent_random": "Случайное родителя", + "sub_enabled": "Рождать из партиклов выше", + "sub_enabled_hint": "Вместо собственного испускания эмиттер рождает партиклы там, где находится партикл эмиттера, внутри которого он лежит. Он срабатывает каждый раз, когда с ним происходит событие ниже. Форма эмиттера строится вокруг этой точки. Например, чтобы сделать Фейерверк сначала создаются ракеты и когда у них срабатывает событие «Смерть», спавнятся уже вспышки. Каждый партикл, рождённый здесь, хранит случайное число партикла, из которого он появился, как p.parent_random (и источник «Случайное родителя») - так можно сделать его цвет, как у родителя.", + "sub_event_spawn": "Рождение", + "sub_event_death": "Смерть", + "sub_event_collision": "Столкновение", + "sub_event_alive": "Пока жив", + "sub_count": "Количество", + "sub_count_hint": "Партиклов на одно событие; считается для партикла, с которым оно произошло: p. - это он.", + "sub_count_alive_hint": "Партиклов в секунду жизни каждого партикла выше: p. - это он.", + "sub_inherit_velocity_hint": "Какую долю скорости партикла выше сохраняют новые, от 0 до 1.", + "glow": "Свечение", + "glow_hint": "Свет, который поверхность излучает вокруг себя: её цвет, умноженный на это число, расходится по кадру мягким ореолом, и всё, что стоит перед ней, его перекрывает. Больше 1 - ярче белого. Свой шейдер светится, только если его json объявляет GlowPass: в проходе свечения он равен 1, а Glow хранит это значение.", + "softness": "Мягкий край", + "softness_hint": "На скольких блоках поверхность растворяется, подходя к тому, что стоит за ней, чтобы не резать блок или землю жёсткой линией. 0 - край жёсткий.", "color_solid": "Один цвет", "color_gradient": "Градиент", diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.fsh new file mode 100644 index 000000000..f7ba3264f --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.fsh @@ -0,0 +1,53 @@ +#version 150 + +uniform sampler2D Source; +uniform vec2 SourceTexel; +uniform float FirstPass; + +in vec2 texCoord; + +out vec4 fragColor; + +vec3 tap(float x, float y) { + return texture(Source, texCoord + vec2(x, y) * SourceTexel).rgb; +} + +float karis(vec3 color) { + return 1.0 / (1.0 + max(max(color.r, color.g), color.b)); +} + +void main() { + vec3 a = tap(-2.0, 2.0); + vec3 b = tap(0.0, 2.0); + vec3 c = tap(2.0, 2.0); + vec3 d = tap(-2.0, 0.0); + vec3 e = tap(0.0, 0.0); + vec3 f = tap(2.0, 0.0); + vec3 g = tap(-2.0, -2.0); + vec3 h = tap(0.0, -2.0); + vec3 i = tap(2.0, -2.0); + vec3 j = tap(-1.0, 1.0); + vec3 k = tap(1.0, 1.0); + vec3 l = tap(-1.0, -1.0); + vec3 m = tap(1.0, -1.0); + + vec3 inner = (j + k + l + m) * 0.25; + vec3 topLeft = (a + b + d + e) * 0.25; + vec3 topRight = (b + c + e + f) * 0.25; + vec3 bottomLeft = (d + e + g + h) * 0.25; + vec3 bottomRight = (e + f + h + i) * 0.25; + + vec3 color; + if (FirstPass > 0.5) { + float wInner = 0.5 * karis(inner); + float wTopLeft = 0.125 * karis(topLeft); + float wTopRight = 0.125 * karis(topRight); + float wBottomLeft = 0.125 * karis(bottomLeft); + float wBottomRight = 0.125 * karis(bottomRight); + color = (inner * wInner + topLeft * wTopLeft + topRight * wTopRight + bottomLeft * wBottomLeft + + bottomRight * wBottomRight) / (wInner + wTopLeft + wTopRight + wBottomLeft + wBottomRight); + } else { + color = inner * 0.5 + (topLeft + topRight + bottomLeft + bottomRight) * 0.125; + } + fragColor = vec4(color, 1.0); +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.json new file mode 100644 index 000000000..79472dee0 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/downsample.json @@ -0,0 +1,12 @@ +{ + "vertex": "hollowengine:vfx/post/screen", + "fragment": "hollowengine:vfx/glow/downsample", + "attributes": [ "Position", "UV0" ], + "samplers": [ + { "name": "Source" } + ], + "uniforms": [ + { "name": "SourceTexel", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "FirstPass", "type": "float", "count": 1, "values": [ 0.0 ] } + ] +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.fsh new file mode 100644 index 000000000..204607626 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.fsh @@ -0,0 +1,20 @@ +#version 150 + +uniform sampler2D Source; +uniform vec2 SourceTexel; +uniform float Strength; + +in vec2 texCoord; + +out vec4 fragColor; + +vec3 tap(float x, float y) { + return texture(Source, texCoord + vec2(x, y) * SourceTexel).rgb; +} + +void main() { + vec3 color = tap(0.0, 0.0) * 4.0 + + (tap(-1.0, 0.0) + tap(1.0, 0.0) + tap(0.0, -1.0) + tap(0.0, 1.0)) * 2.0 + + tap(-1.0, -1.0) + tap(1.0, -1.0) + tap(-1.0, 1.0) + tap(1.0, 1.0); + fragColor = vec4(color / 16.0 * Strength, 0.0); +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.json new file mode 100644 index 000000000..a6bbc5a49 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx/glow/upsample.json @@ -0,0 +1,12 @@ +{ + "vertex": "hollowengine:vfx/post/screen", + "fragment": "hollowengine:vfx/glow/upsample", + "attributes": [ "Position", "UV0" ], + "samplers": [ + { "name": "Source" } + ], + "uniforms": [ + { "name": "SourceTexel", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "Strength", "type": "float", "count": 1, "values": [ 1.0 ] } + ] +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.fsh index a79e15470..59aa75244 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.fsh +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.fsh @@ -1,13 +1,20 @@ #version 150 #moj_import +#moj_import uniform sampler2D Sampler0; +uniform sampler2D SceneDepth; +uniform mat4 ProjMat; uniform vec4 ColorModulator; uniform float FogStart; uniform float FogEnd; uniform float BlendMode; +uniform float Softness; +uniform float Glow; +uniform float GlowPass; +uniform vec2 ScreenSize; in vec4 vertexColor; in vec2 texCoord0; @@ -26,6 +33,13 @@ void main() { discard; } - color.a *= linear_fog_fade(vertexDistance, FogStart, FogEnd); - fragColor = color; + color.a *= linear_fog_fade(vertexDistance, FogStart, FogEnd) + * hollowengine_soft_fade(SceneDepth, ScreenSize, ProjMat, Softness); + + if (GlowPass > 0.5) { + if (mode == 3 || Glow <= 0.0) discard; + fragColor = vec4(color.rgb * color.a * Glow, 0.0); + } else { + fragColor = color; + } } diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json index c7420f584..8a80f0fd1 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_mesh.json @@ -20,7 +20,8 @@ ], "samplers": [ { "name": "Sampler0" }, - { "name": "Sampler2" } + { "name": "Sampler2" }, + { "name": "SceneDepth" } ], "uniforms": [ { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, @@ -30,6 +31,10 @@ { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }, { "name": "Shaded", "type": "float", "count": 1, "values": [ 0.0 ] }, - { "name": "BlendMode", "type": "float", "count": 1, "values": [ 0.0 ] } + { "name": "BlendMode", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Softness", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Glow", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "GlowPass", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "ScreenSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } ] } diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh index ff3348828..1cce9dca6 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.fsh @@ -1,18 +1,24 @@ #version 150 #moj_import +#moj_import uniform sampler2D Sampler0; +uniform sampler2D SceneDepth; +uniform mat4 ProjMat; uniform vec4 ColorModulator; uniform float FogStart; uniform float FogEnd; uniform float AlphaCutoff; +uniform vec2 ScreenSize; +uniform float GlowPass; in vec4 vertexColor; in vec2 texCoord0; in float vertexDistance; flat in int blendMode; +flat in vec2 material; out vec4 fragColor; @@ -26,9 +32,13 @@ void main() { discard; } - float strength = color.a * linear_fog_fade(vertexDistance, FogStart, FogEnd); + float strength = color.a * linear_fog_fade(vertexDistance, FogStart, FogEnd) + * hollowengine_soft_fade(SceneDepth, ScreenSize, ProjMat, material.x); - if (blendMode == 3) { + if (GlowPass > 0.5) { + if (blendMode == 3 || material.y <= 0.0) discard; + fragColor = vec4(color.rgb * strength * material.y, 0.0); + } else if (blendMode == 3) { fragColor = vec4(mix(vec3(1.0), color.rgb, strength), 1.0); } else if (blendMode == 1) { fragColor = vec4(color.rgb * strength, 0.0); diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json index c1e947db7..c339d1251 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.json @@ -15,11 +15,13 @@ "InstanceColor", "InstanceUv", "InstanceLight", - "InstanceBlend" + "InstanceBlend", + "InstanceMaterial" ], "samplers": [ { "name": "Sampler0" }, - { "name": "Sampler2" } + { "name": "Sampler2" }, + { "name": "SceneDepth" } ], "uniforms": [ { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, @@ -28,6 +30,8 @@ { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }, - { "name": "AlphaCutoff", "type": "float", "count": 1, "values": [ 0.01 ] } + { "name": "AlphaCutoff", "type": "float", "count": 1, "values": [ 0.01 ] }, + { "name": "ScreenSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "GlowPass", "type": "float", "count": 1, "values": [ 0.0 ] } ] } diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh index caa221220..186dbd9f3 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_particle.vsh @@ -10,6 +10,7 @@ in vec4 InstanceColor; in vec4 InstanceUv; in vec2 InstanceLight; in float InstanceBlend; +in vec2 InstanceMaterial; uniform sampler2D Sampler2; @@ -21,6 +22,7 @@ out vec4 vertexColor; out vec2 texCoord0; out float vertexDistance; flat out int blendMode; +flat out vec2 material; float view_fog_distance(vec3 viewPos, int fogShape) { if (fogShape == 0) { @@ -38,4 +40,5 @@ void main() { vertexColor = InstanceColor * texelFetch(Sampler2, ivec2(InstanceLight) / 16, 0); texCoord0 = InstanceUv.xy + UV0 * InstanceUv.zw; blendMode = int(InstanceBlend + 0.5); + material = InstanceMaterial; } diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh index a79e15470..59aa75244 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.fsh @@ -1,13 +1,20 @@ #version 150 #moj_import +#moj_import uniform sampler2D Sampler0; +uniform sampler2D SceneDepth; +uniform mat4 ProjMat; uniform vec4 ColorModulator; uniform float FogStart; uniform float FogEnd; uniform float BlendMode; +uniform float Softness; +uniform float Glow; +uniform float GlowPass; +uniform vec2 ScreenSize; in vec4 vertexColor; in vec2 texCoord0; @@ -26,6 +33,13 @@ void main() { discard; } - color.a *= linear_fog_fade(vertexDistance, FogStart, FogEnd); - fragColor = color; + color.a *= linear_fog_fade(vertexDistance, FogStart, FogEnd) + * hollowengine_soft_fade(SceneDepth, ScreenSize, ProjMat, Softness); + + if (GlowPass > 0.5) { + if (mode == 3 || Glow <= 0.0) discard; + fragColor = vec4(color.rgb * color.a * Glow, 0.0); + } else { + fragColor = color; + } } diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json index bb00720d4..f4b93d995 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json +++ b/runtime/src/main/resources/assets/hollowengine/shaders/core/vfx_ribbon.json @@ -14,7 +14,8 @@ ], "samplers": [ { "name": "Sampler0" }, - { "name": "Sampler2" } + { "name": "Sampler2" }, + { "name": "SceneDepth" } ], "uniforms": [ { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, @@ -23,6 +24,10 @@ { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }, - { "name": "BlendMode", "type": "float", "count": 1, "values": [ 0.0 ] } + { "name": "BlendMode", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Softness", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Glow", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "GlowPass", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "ScreenSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } ] } diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg index 5130d87e0..e14b6b671 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/maximize.svg @@ -1,3 +1,16 @@ - - - + + + + + + \ No newline at end of file diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg index a71659992..839866849 100644 --- a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/minimize.svg @@ -1,3 +1,16 @@ - - - + + + + + + \ No newline at end of file diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sub_emitter.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sub_emitter.svg new file mode 100644 index 000000000..598d22285 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/vfx/sub_emitter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/fireworks.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/fireworks.vfx new file mode 100644 index 000000000..be85c8dc7 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/vfx/fireworks.vfx @@ -0,0 +1,354 @@ +{ + "nodes": [ + { + "type": "hollowengine:vfx/emitter", + "id": "rockets", + "name": "Rockets", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "rocket-head", + "name": "Head", + "material": { + "blend": "ADDITIVE", + "glow": 3.0 + }, + "particle": { + "color": { + "type": "channels", + "r": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.random)" + }, + "g": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.random - 120)" + }, + "b": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.random - 240)" + }, + "a": { + "type": "expr", + "source": "1" + } + } + } + }, + { + "type": "hollowengine:vfx/trail", + "id": "rocket-trail", + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE", + "glow": 1.5 + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.08 + }, + { + "time": 1.0 + } + ] + } + }, + "lifetime": 0.35, + "particle": { + "color": { + "type": "channels", + "r": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.random)" + }, + "g": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.random - 120)" + }, + "b": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.random - 240)" + }, + "a": { + "type": "expr", + "source": "1" + } + } + } + }, + { + "type": "hollowengine:vfx/emitter", + "id": "burst", + "name": "Burst", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "spark", + "name": "Spark", + "material": { + "blend": "ADDITIVE", + "glow": 2.5 + }, + "particle": { + "size": { + "x": { + "type": "const", + "value": 0.14 + }, + "y": { + "type": "const", + "value": 0.14 + }, + "z": { + "type": "const", + "value": 0.14 + } + }, + "color": { + "type": "channels", + "r": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.parent_random)" + }, + "g": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.parent_random - 120)" + }, + "b": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.parent_random - 240)" + }, + "a": { + "type": "expr", + "source": "1 - p.progress * p.progress" + } + } + } + }, + { + "type": "hollowengine:vfx/trail", + "id": "spark-trail", + "name": "Spark Trail", + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE", + "glow": 1.0 + }, + "width": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.05 + }, + { + "time": 1.0 + } + ] + } + }, + "lifetime": 0.25, + "maxPoints": 12, + "particle": { + "color": { + "type": "channels", + "r": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.parent_random)" + }, + "g": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.parent_random - 120)" + }, + "b": { + "type": "expr", + "source": "0.5 + 0.5 * cos(360 * p.parent_random - 240)" + }, + "a": { + "type": "expr", + "source": "1 - p.progress" + } + } + } + } + ], + "emission": { + "maxParticles": 2000 + }, + "shape": { + "kind": "SPHERE", + "radius": { + "type": "const", + "value": 0.1 + }, + "thickness": { + "type": "const" + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.2, + "to": 1.9 + }, + "speed": { + "type": "range", + "from": 6.0, + "to": 9.0 + } + }, + "motion": { + "gravity": { + "type": "const", + "value": 2.5 + }, + "drag": { + "type": "const", + "value": 1.3 + } + }, + "subEmission": { + "count": { + "type": "const", + "value": 110.0 + }, + "inheritVelocity": { + "type": "const", + "value": 0.15 + } + } + }, + { + "type": "hollowengine:vfx/emitter", + "id": "launch-smoke", + "name": "Launch Smoke", + "children": [ + { + "type": "hollowengine:vfx/plane", + "id": "smoke", + "name": "Smoke", + "material": { + "softness": 0.8 + }, + "particle": { + "size": { + "x": { + "type": "curve", + "curve": { + "keys": [ + { + "value": 0.6 + }, + { + "time": 1.0, + "value": 1.8 + } + ] + } + } + }, + "color": { + "type": "channels", + "r": { + "type": "const", + "value": 0.55 + }, + "g": { + "type": "const", + "value": 0.55 + }, + "b": { + "type": "const", + "value": 0.6 + }, + "a": { + "type": "expr", + "source": "0.35 * (1 - p.progress)" + } + } + } + } + ], + "emission": { + "maxParticles": 128 + }, + "shape": { + "kind": "DISC", + "radius": { + "type": "const", + "value": 0.4 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.5, + "to": 2.5 + }, + "speed": { + "type": "range", + "from": 0.3, + "to": 0.8 + } + }, + "motion": { + "drag": { + "type": "const", + "value": 0.6 + } + }, + "subEmission": { + "event": "SPAWN", + "count": { + "type": "const", + "value": 6.0 + } + } + } + ], + "emission": { + "rate": { + "type": "const", + "value": 1.2 + }, + "duration": 0.0, + "maxParticles": 16 + }, + "shape": { + "kind": "CONE", + "radius": { + "type": "const", + "value": 0.3 + }, + "angle": { + "type": "const", + "value": 10.0 + } + }, + "spawn": { + "lifetime": { + "type": "range", + "from": 1.1, + "to": 1.5 + }, + "speed": { + "type": "range", + "from": 15.0, + "to": 19.0 + } + }, + "motion": { + "gravity": { + "type": "const", + "value": 6.0 + } + } + } + ], + "timeline": { + "duration": 6.0 + } +} diff --git a/runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx b/runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx index 405eb50bc..79784b336 100644 --- a/runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx +++ b/runtime/src/main/resources/assets/hollowengine/vfx/sky_strike.vfx @@ -4,6 +4,11 @@ "type": "hollowengine:vfx/beam", "id": "pillar", "name": "Pillar", + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE", + "glow": 2.5 + }, "tint": { "type": "solid", "color": { @@ -32,6 +37,11 @@ "type": "hollowengine:vfx/beam", "id": "pillar-core", "name": "Pillar Core", + "material": { + "texture": "hollowengine:textures/particle/white.png", + "blend": "ADDITIVE", + "glow": 1.5 + }, "end": [ 0.0, 200.0, @@ -56,7 +66,8 @@ }, "material": { "texture": "hollowengine:textures/particle/white.png", - "blend": "ADDITIVE" + "blend": "ADDITIVE", + "glow": 3.0 }, "tint": { "type": "solid", diff --git a/runtime/src/main/resources/assets/minecraft/shaders/include/hollowengine_vfx.glsl b/runtime/src/main/resources/assets/minecraft/shaders/include/hollowengine_vfx.glsl new file mode 100644 index 000000000..2492c707a --- /dev/null +++ b/runtime/src/main/resources/assets/minecraft/shaders/include/hollowengine_vfx.glsl @@ -0,0 +1,15 @@ +// What the effect shaders share. A shader of an effect author imports it the same way: +// #moj_import + +// Distance from the eye along the view axis for a depth-buffer value, under the projection proj. +float hollowengine_view_depth(mat4 proj, float depth) { + return proj[3][2] / (depth * 2.0 - 1.0 + proj[2][2]); +} + +// 0 where the fragment touches the scene behind it, 1 once it is softness blocks in front of it. +float hollowengine_soft_fade(sampler2D sceneDepth, vec2 screenSize, mat4 proj, float softness) { + if (softness <= 0.0) return 1.0; + float scene = hollowengine_view_depth(proj, texture(sceneDepth, gl_FragCoord.xy / screenSize).r); + float own = hollowengine_view_depth(proj, gl_FragCoord.z); + return clamp((scene - own) / softness, 0.0, 1.0); +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitterTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitterTest.kt new file mode 100644 index 000000000..bc75c3c3f --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/VfxSubEmitterTest.kt @@ -0,0 +1,73 @@ +package ru.hollowhorizon.hollowengine.client.vfx + +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import ru.hollowhorizon.hollowengine.common.vfx.VfxEffect +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmission +import ru.hollowhorizon.hollowengine.common.vfx.VfxEmitterSpec +import ru.hollowhorizon.hollowengine.common.vfx.VfxParticleEvent +import ru.hollowhorizon.hollowengine.common.vfx.VfxSpawn +import ru.hollowhorizon.hollowengine.common.vfx.VfxSubEmission +import ru.hollowhorizon.hollowengine.common.vfx.VfxTransform +import ru.hollowhorizon.hollowengine.common.vfx.VfxValue +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class VfxSubEmitterTest { + private fun effect(event: VfxParticleEvent, count: Float) = VfxEffect( + nodes = listOf( + VfxEmitterSpec( + id = "rockets", + transform = VfxTransform(position = Vec3f(2f, 0f, 0f)), + emission = VfxEmission(rate = VfxValue.ZERO, burst = 4, duration = 5f, loop = false), + spawn = VfxSpawn(lifetime = VfxValue.Const(0.1f), speed = VfxValue.ZERO), + children = listOf( + VfxEmitterSpec( + id = "sparks", + // A sub-emitter spawns where the particle is, not at its own place. + transform = VfxTransform(position = Vec3f(0f, 5f, 0f)), + emission = VfxEmission(rate = VfxValue.Const(100f), burst = 50), + spawn = VfxSpawn(lifetime = VfxValue.Const(5f), speed = VfxValue.ZERO), + subEmission = VfxSubEmission(event = event, count = VfxValue.Const(count)), + ) + ), + ) + ), + ) + + private fun VfxInstance.run(seconds: Float) { + repeat((seconds * 60f).toInt()) { update(1f / 60f) } + } + + @Test + fun `every dying particle spawns its count where it died, and nothing else is emitted`() { + val instance = VfxInstance(effect(VfxParticleEvent.DEATH, 3f), "test") + instance.update(1f / 60f) + val (rockets, sparks) = instance.emitters + val rocketRandoms = rockets.particles.random.take(rockets.particles.count).toSet() + instance.run(0.5f) + + assertEquals(0, rockets.particles.count) + assertEquals(12, sparks.particles.count) + for (slot in 0 until sparks.particles.count) { + assertEquals(2f, sparks.particles.positionX[slot], 1e-4f) + assertEquals(0f, sparks.particles.positionY[slot], 1e-4f) + } + val parents = sparks.particles.parentRandom.take(sparks.particles.count) + assertEquals(rocketRandoms, parents.toSet()) + assertTrue(parents.groupingBy { it }.eachCount().values.all { it == 3 }) + } + + @Test + fun `a living particle spawns its count per second`() { + val alive = effect(VfxParticleEvent.ALIVE, 60f).let { effect -> + val rockets = effect.nodes.single() as VfxEmitterSpec + effect.copy(nodes = listOf(rockets.copy(spawn = rockets.spawn.copy(lifetime = VfxValue.Const(1f))))) + } + val instance = VfxInstance(alive, "test") + instance.run(0.5f) + + val sparks = instance.emitters[1].particles.count + assertTrue(sparks in 116..124, "4 particles for half a second at 60 per second, got $sparks") + } +} From 08b11530b20be818d792c6369710b45ceb75891c Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sat, 26 Sep 2026 10:30:44 +0300 Subject: [PATCH 15/25] Clarify VFX sub-emitter and glow docs --- docs/en/vfx.mdx | 14 ++++++++++++ docs/ru/vfx.mdx | 17 ++++++++++++-- .../main/lang/en_us/hollowengine/gui/vfx.json | 20 ++++++++--------- .../main/lang/ru_ru/hollowengine/gui/vfx.json | 22 +++++++++---------- 4 files changed, 50 insertions(+), 23 deletions(-) diff --git a/docs/en/vfx.mdx b/docs/en/vfx.mdx index 9e79bc9f8..f8ad3139b 100644 --- a/docs/en/vfx.mdx +++ b/docs/en/vfx.mdx @@ -37,6 +37,20 @@ A numeric field can hold a constant, a random value from a range, a curve, or an Expressions can read particle data (`p.age`, `p.speed`, `p.progress`), emitter data (`e.age`, `e.count`), camera distance (`n.camera_distance`), and values supplied to the running effect (`d.name`). Scripts send these values through the `VfxHandle`; a missing numeric value reads as `0`. A material controls its texture, lighting, and blend mode: `OPAQUE`, `BLEND`, `ADDITIVE`, or `MULTIPLY`. You can select a UV region within an atlas and use the UV animation module to advance its frames. +## Sub-emitters + +Place an **Emitter** directly inside another emitter and enable **Spawn from parent particles** under **Sub-emitter**. The child emitter spawns particles when a parent particle triggers the selected event instead of using its own rate and burst. Its spawn shape is centered on the event. **Limit** remains available under **Emission** to cap the number of living particles. + +The events are **Spawn**, **Death**, **Collision**, and **While alive**. For the first three, **Count** is the number of particles per event; for **While alive**, it is the number per second for each parent particle. **Collision** requires collision handling on the parent emitter. **Inertia** adds the selected fraction of the parent's velocity to new particles. + +For a firework, create a rocket emitter, nest a burst emitter inside it, and select **Death** for the burst. In **Count** and **Inertia** expressions, `p.` refers to the parent particle that triggered the event. Its random number is available to spawned particles as `p.parent_random` or the **Parent random** curve source, allowing the rocket and burst to share a color. + +## Soft particles and glow + +On a **Plane**, **Cube**, **Sphere**, **Cylinder**, **Model**, **Trail**, or **Beam** material, **Soft intersection** sets the distance in blocks over which the surface fades near scene geometry. This avoids a hard edge where a particle intersects the ground or a block. `0` disables the fade. + +**Glow** adds a blurred halo in the surface's color, respecting scene depth. `0` disables it; higher values strengthen the halo. **Additive** blending changes the surface itself and does not enable the glow pass on its own. You can use both settings together. The glow contribution is not clamped to 1 in its `RGBA16F` buffer. A custom shader participates in the glow pass only if it declares `GlowPass` and uses the `Glow` value; it must also implement soft intersections itself. + ## Playing an effect in-game The `/he vfx` command accepts a position or an entity and an effect name: diff --git a/docs/ru/vfx.mdx b/docs/ru/vfx.mdx index fe37b04c1..8aba8b9a1 100644 --- a/docs/ru/vfx.mdx +++ b/docs/ru/vfx.mdx @@ -27,8 +27,7 @@ VFX-эффект хранится в файле `.vfx` и собирается | Trail, Beam | Рисуют след или луч. | | Post Effect, Sky, Camera Shake | Управляют экранным эффектом, небом или тряской камеры. | -У эмиттера задаются частота и выброс, длительность, форма появления частиц, скорость, время жизни, локальное или мировое пространство симуляции. Дополнительные модули задают силу, шум, столкновения, изменение скорости и анимацию UV. Дочерние рендереры могут иметь разные размеры, поворот, цвет и материал. -Подробнее можно почитать наведя курсор на конкретный параметр в **Инспекторе**. +У эмиттера задаются частота и выброс, длительность, форма появления частиц, скорость, время жизни, локальное или мировое пространство симуляции. Дополнительные модули задают силу, шум, столкновения, изменение скорости и анимацию UV. Дочерние рендереры могут иметь разные размеры, поворот, цвет и материал. Описание отдельного параметра появляется при наведении курсора в **Инспекторе**. В окне **Сцена** можно добавлять дочерние узлы, переименовывать, дублировать, отключать, удалять и перемещать их. Выбранный узел редактируется в **Инспекторе**; область предпросмотра позволяет вращать камеру, менять масштаб колёсиком и двигать узел инструментами трансформации. Кнопки предпросмотра управляют воспроизведением, сбросом времени, полом и отображением формы эмиттера. Таймлайн хранит дорожки свойств и поддерживает циклическое воспроизведение. @@ -38,6 +37,20 @@ VFX-эффект хранится в файле `.vfx` и собирается Выражения читают данные частицы (`p.age`, `p.speed`, `p.progress`), эмиттера (`e.age`, `e.count`), расстояние до камеры (`n.camera_distance`) и значения, переданные запущенному эффекту (`d.name`). Данные передаются через `VfxHandle` из скрипта; отсутствующее числовое значение читается как `0`. Поля материала задают текстуру, освещение и режим смешивания. Для атласа можно указать UV-область, а модуль UV-анимации переключает её кадры. +## Субэмиттеры + +Поместите один **Emitter** непосредственно внутрь другого и включите **Рождать от частиц родителя** в разделе **Саб-эмиттер**. Дочерний эмиттер будет создавать частицы при выбранном событии родительской частицы вместо собственной частоты и выброса. Его форма появления частиц располагается вокруг места события. В разделе **Испускание** у него остаётся параметр **Предел**, ограничивающий число одновременно живущих частиц. + +Доступны события **Рождение**, **Смерть**, **Столкновение** и **Пока жив**. Для первых трёх **Количество** задаёт число частиц на событие; для **Пока жив** - число частиц в секунду на каждую родительскую частицу. Событие **Столкновение** требует настроенных столкновений у родительского эмиттера. **Инерция** добавляет дочерним частицам указанную долю скорости родителя. + +Например, для фейерверка создайте эмиттер ракет, поместите внутрь него эмиттер вспышек и выберите для вспышек событие **Смерть**. В выражениях полей **Количество** и **Инерция** `p.` относится к родительской частице, вызвавшей событие. В рождённых частицах её случайное число доступно как `p.parent_random` или источник кривой **Случайное число родителя**: так можно согласовать цвет ракеты и вспышки. + +## Мягкие частицы и свечение + +В материале **Plane**, **Cube**, **Sphere**, **Cylinder**, **Model**, **Trail** или **Beam** параметр **Мягкое пересечение** задаёт расстояние в блоках, на котором поверхность плавно исчезает рядом с геометрией сцены. Это помогает избежать резкой границы там, где частица пересекает землю или блок. Значение `0` отключает смягчение. + +**Свечение** создаёт размытый ореол цвета поверхности с учётом глубины сцены. Значение `0` его отключает; увеличение значения усиливает ореол. Аддитивное смешивание меняет цвет самой поверхности и само по себе не включает проход свечения. Оба параметра можно использовать вместе. Вклад в проход свечения не ограничивается единицей: для него используется буфер `RGBA16F`. Для собственного шейдера проход свечения доступен, только если он объявляет `GlowPass` и использует значение `Glow`; мягкое пересечение такой шейдер тоже должен реализовать сам. + ## Запуск в игре Команда `/he vfx` принимает позицию или сущность и имя эффекта: diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json index b74623c60..380d7aa12 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json @@ -128,11 +128,11 @@ "blend": "Blending", "blend_opaque": "Opaque", "blend_blend": "Alpha", - "blend_additive": "Glow", + "blend_additive": "Additive", "blend_multiply": "Darken", "blend_opaque_hint": "Covers whatever is behind. Alpha only cuts holes.", "blend_blend_hint": "Ordinary transparency: smoke, dust, clouds. Sorted by depth.", - "blend_additive_hint": "Adds light: fire, sparks, magic. Bright on dark and nearly invisible on light.", + "blend_additive_hint": "Adds the surface color to the frame: useful for fire and sparks. It does not create a halo by itself; set Glow on the material for that.", "blend_multiply_hint": "Multiplies what is behind: shadows, stains, soot.", "lit_by_world": "Lit by the world", "cull": "Hide the back face", @@ -225,20 +225,20 @@ "source_speed": "Speed", "source_random": "Random per particle", "source_parent_random": "Parent random", - "sub_enabled": "Spawn from the particles above", - "sub_enabled_hint": "Instead of emitting on its own, the emitter spawns where a particle of the emitter it sits under is, whenever that particle has the event below. Its shape is laid around that point. Fireworks: a death event on the rockets. Every particle born here keeps the random number of the particle it came from as p.parent_random (and the Parent random source), so its color can match that particle.", + "sub_enabled": "Spawn from parent particles", + "sub_enabled_hint": "Spawn particles when a particle of the parent emitter triggers the selected event, instead of using this emitter's own rate. The spawn shape is centered on the event. For example, rocket deaths can trigger firework bursts. The parent particle's random number is available as p.parent_random and the Parent random source.", "sub_event_spawn": "Spawn", "sub_event_death": "Death", "sub_event_collision": "Collision", "sub_event_alive": "While alive", "sub_count": "Count", - "sub_count_hint": "Particles per event, read for the particle that had it: p. is that particle.", - "sub_count_alive_hint": "Particles per second of the life of each particle above: p. is that particle.", - "sub_inherit_velocity_hint": "How much of the velocity of the particle above the new ones keep, 0 to 1.", + "sub_count_hint": "Particles per event. In an expression, p. refers to the parent particle that triggered it.", + "sub_count_alive_hint": "Particles per second for each living parent particle. In an expression, p. refers to that particle.", + "sub_inherit_velocity_hint": "Fraction of the parent particle's velocity passed to new particles, from 0 to 1.", "glow": "Glow", - "glow_hint": "Light the surface gives off around itself: its color times this spills over the frame as a soft glow, and nothing in front of it lets it through. Above 1 reads as brighter than white. A shader of your own glows only if its json declares GlowPass: it is 1 in the glow pass, and Glow holds this value.", - "softness": "Soft edge", - "softness_hint": "Blocks over which the surface fades as it nears what stands behind it, so it does not cut a hard line into a block or the ground. 0 keeps the edge hard.", + "glow_hint": "Strength of the halo around the surface. Its color is blurred and added over the frame using scene depth. 0 disables glow; values above 1 are not clamped in the glow pass. A custom shader must declare GlowPass and use the Glow value.", + "softness": "Soft intersection", + "softness_hint": "Distance in blocks over which the surface fades as it approaches scene geometry. 0 disables the fade. A custom shader must apply this value itself.", "color_solid": "Solid", "color_gradient": "Gradient", diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json index 0055b67b2..a8222e158 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json @@ -128,11 +128,11 @@ "blend": "Наложение", "blend_opaque": "Без смешивания", "blend_blend": "Прозрачность", - "blend_additive": "Свечение", + "blend_additive": "Аддитивное смешивание", "blend_multiply": "Затемнение", "blend_opaque_hint": "Закрывает всё позади. Альфа только вырезает дырки.", "blend_blend_hint": "Обычная прозрачность: дым, пыль, облака. Сортируется по глубине.", - "blend_additive_hint": "Добавляет свет: огонь, искры, магия. Ярко на тёмном и почти не видно на светлом.", + "blend_additive_hint": "Добавляет цвет поверхности к кадру: подходит для огня и искр. Само по себе не создаёт ореол; для него задайте Свечение в материале.", "blend_multiply_hint": "Умножает то, что позади: тени, пятна, копоть.", "lit_by_world": "Освещается миром", "cull": "Скрывать обратную сторону", @@ -224,21 +224,21 @@ "source_effect_time": "Время эффекта, с", "source_speed": "Скорость", "source_random": "Случайно для партикла", - "source_parent_random": "Случайное родителя", - "sub_enabled": "Рождать из партиклов выше", - "sub_enabled_hint": "Вместо собственного испускания эмиттер рождает партиклы там, где находится партикл эмиттера, внутри которого он лежит. Он срабатывает каждый раз, когда с ним происходит событие ниже. Форма эмиттера строится вокруг этой точки. Например, чтобы сделать Фейерверк сначала создаются ракеты и когда у них срабатывает событие «Смерть», спавнятся уже вспышки. Каждый партикл, рождённый здесь, хранит случайное число партикла, из которого он появился, как p.parent_random (и источник «Случайное родителя») - так можно сделать его цвет, как у родителя.", + "source_parent_random": "Случайное число родителя", + "sub_enabled": "Рождать от частиц родителя", + "sub_enabled_hint": "Эмиттер создаёт частицы при выбранном событии у частиц родительского эмиттера, а не по собственной частоте. Его форма строится вокруг места события. Например, вспышки фейерверка можно создавать при гибели ракет. Случайное число родительской частицы доступно через p.parent_random и источник «Случайное число родителя».", "sub_event_spawn": "Рождение", "sub_event_death": "Смерть", "sub_event_collision": "Столкновение", "sub_event_alive": "Пока жив", "sub_count": "Количество", - "sub_count_hint": "Партиклов на одно событие; считается для партикла, с которым оно произошло: p. - это он.", - "sub_count_alive_hint": "Партиклов в секунду жизни каждого партикла выше: p. - это он.", - "sub_inherit_velocity_hint": "Какую долю скорости партикла выше сохраняют новые, от 0 до 1.", + "sub_count_hint": "Частиц на одно событие. В выражении p. обозначает родительскую частицу, вызвавшую событие.", + "sub_count_alive_hint": "Частиц в секунду для каждой живой родительской частицы. В выражении p. обозначает эту частицу.", + "sub_inherit_velocity_hint": "Доля скорости родительской частицы, передаваемая новым частицам: от 0 до 1.", "glow": "Свечение", - "glow_hint": "Свет, который поверхность излучает вокруг себя: её цвет, умноженный на это число, расходится по кадру мягким ореолом, и всё, что стоит перед ней, его перекрывает. Больше 1 - ярче белого. Свой шейдер светится, только если его json объявляет GlowPass: в проходе свечения он равен 1, а Glow хранит это значение.", - "softness": "Мягкий край", - "softness_hint": "На скольких блоках поверхность растворяется, подходя к тому, что стоит за ней, чтобы не резать блок или землю жёсткой линией. 0 - край жёсткий.", + "glow_hint": "Сила ореола вокруг поверхности. Её цвет размывается и добавляется поверх кадра с учётом глубины сцены. 0 отключает свечение; значения больше 1 усиливают его без ограничения единицей в проходе свечения. Пользовательский шейдер должен объявлять GlowPass и использовать значение Glow.", + "softness": "Мягкое пересечение", + "softness_hint": "Расстояние в блоках, на котором поверхность плавно исчезает при приближении к геометрии сцены. 0 отключает смягчение. Пользовательский шейдер должен сам применять это значение.", "color_solid": "Один цвет", "color_gradient": "Градиент", From 4e0fe0bc9e6bed564edd31609414727634b81d2e Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sat, 26 Sep 2026 11:23:43 +0300 Subject: [PATCH 16/25] Add reusable graph canvas and animator scene UI --- .../client/ui/graph/GraphCanvas.kt | 339 +++++ .../client/ui/graph/GraphGeometry.kt | 152 +++ .../hollowengine/client/ui/graph/GraphNode.kt | 90 ++ .../client/ui/graph/GraphViewState.kt | 118 ++ .../client/ui/ide/IdeSceneHost.kt | 96 +- .../ide/files/animator/AnimatorGraphCanvas.kt | 1104 +++++------------ .../ide/files/animator/AnimatorSceneTree.kt | 144 +++ .../ui/ide/files/animator/AnimatorWidgets.kt | 19 - .../files/animator/HollowIdeAnimatorEditor.kt | 247 +--- .../hollowengine/gui/animator_editor.json | 11 +- .../en_us/hollowengine/gui/ide/windows.json | 3 +- .../hollowengine/gui/animator_editor.json | 11 +- .../ru_ru/hollowengine/gui/ide/windows.json | 3 +- .../ui/styles/animator-editor.hss | 117 +- .../assets/hollowengine/ui/styles/graph.hss | 73 ++ .../assets/hollowengine/ui/styles/ide.hss | 36 + .../client/ui/TransformedLayerTest.kt | 43 + .../client/ui/graph/GraphViewStateTest.kt | 26 + .../ui/BundledStylesheetDiagnosticsTest.kt | 1 + 19 files changed, 1460 insertions(+), 1173 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewState.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorSceneTree.kt create mode 100644 runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/TransformedLayerTest.kt create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewStateTest.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt new file mode 100644 index 000000000..36341ccd6 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt @@ -0,0 +1,339 @@ +package ru.hollowhorizon.hollowengine.client.ui.graph + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.withFrameNanos +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.ui.Box +import ru.hollowhorizon.hollowengine.client.ui.Column +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.UiAlign +import ru.hollowhorizon.hollowengine.client.ui.UiBoxMode +import ru.hollowhorizon.hollowengine.client.ui.UiCanvasDrawScope +import ru.hollowhorizon.hollowengine.client.ui.UiColor +import ru.hollowhorizon.hollowengine.client.ui.UiDrawStyle +import ru.hollowhorizon.hollowengine.client.ui.UiEvent +import ru.hollowhorizon.hollowengine.client.ui.alignItems +import ru.hollowhorizon.hollowengine.client.ui.background +import ru.hollowhorizon.hollowengine.client.ui.clip +import ru.hollowhorizon.hollowengine.client.ui.drawBehind +import ru.hollowhorizon.hollowengine.client.ui.focus +import ru.hollowhorizon.hollowengine.client.ui.input +import ru.hollowhorizon.hollowengine.client.ui.inputTransparent +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.onClick +import ru.hollowhorizon.hollowengine.client.ui.onDrag +import ru.hollowhorizon.hollowengine.client.ui.onExit +import ru.hollowhorizon.hollowengine.client.ui.onHover +import ru.hollowhorizon.hollowengine.client.ui.onKeyInput +import ru.hollowhorizon.hollowengine.client.ui.onPlaced +import ru.hollowhorizon.hollowengine.client.ui.onPress +import ru.hollowhorizon.hollowengine.client.ui.onRelease +import ru.hollowhorizon.hollowengine.client.ui.onScroll +import ru.hollowhorizon.hollowengine.client.ui.padding +import ru.hollowhorizon.hollowengine.client.ui.percent +import ru.hollowhorizon.hollowengine.client.ui.pivot +import ru.hollowhorizon.hollowengine.client.ui.position +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.scale +import ru.hollowhorizon.hollowengine.client.ui.shape.GenericShape +import ru.hollowhorizon.hollowengine.client.ui.size +import ru.hollowhorizon.hollowengine.client.ui.style +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint +import ru.hollowhorizon.hollowengine.client.ui.transition +import ru.hollowhorizon.hollowengine.client.ui.translate +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiKeyInput +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover +import kotlin.math.atan2 +import kotlin.math.cos +import kotlin.math.sin + +const val GraphStylesheet = "hollowengine:ui/styles/graph.hss" + +/** The colors the canvas draws itself; everything built out of nodes takes its look from [GraphStylesheet]. */ +object GraphColors { + val Grid = UiColor(1f, 1f, 1f, 0.04f) + val Edge = UiColor(0.60f, 0.64f, 0.72f) + val EdgeHover = UiColor(0.82f, 0.86f, 0.94f) + val EdgeSelected = UiColor(0.37f, 0.62f, 0.98f) + val Link = UiColor(0.37f, 0.62f, 0.98f) +} + +/** Where the pointer is, in every space a handler of the graph may want it in. */ +data class GraphPointer( + val screenX: Float, + val screenY: Float, + val canvasX: Float, + val canvasY: Float, + val graphX: Float, + val graphY: Float, + val modifiers: Int = 0, +) { + val control: Boolean get() = modifiers and GLFW.GLFW_MOD_CONTROL != 0 + val shift: Boolean get() = modifiers and GLFW.GLFW_MOD_SHIFT != 0 +} + +/** A link of the graph as the canvas draws it under the nodes. [key] is what a click on it reports. */ +class GraphEdge( + val key: Any, + val curve: GraphCurve, + val color: UiColor = GraphColors.Edge, + val arrow: Boolean = false, + val selected: Boolean = false, +) + +/** A link being dragged out and not yet dropped, in canvas space. */ +data class GraphLinkPreview( + val fromX: Float, + val fromY: Float, + val toX: Float, + val toY: Float, + val color: UiColor = GraphColors.Link, +) + +/** A node as the minimap marks it, in graph space. */ +data class GraphMiniMapItem( + val rect: GraphRect, + val color: UiColor, + val tooltip: String? = null, +) + +/** + * A pannable, zoomable canvas for a node graph: a grid, the links between nodes, and the nodes. + */ +@Composable +fun GraphCanvas( + id: String, + view: GraphViewState, + modifier: Modifier = Modifier, + edges: List = emptyList(), + link: GraphLinkPreview? = null, + minimap: List = emptyList(), + onBackgroundClick: (GraphPointer) -> Unit = {}, + onEdgeClick: (Any) -> Unit = {}, + onContextMenu: (GraphPointer, edge: Any?) -> Unit = { _, _ -> }, + onRelease: () -> Unit = {}, + onKey: (UiKeyInput) -> Boolean = { false }, + overlay: @Composable () -> Unit = {}, + nodes: @Composable () -> Unit, +) { + var canvas by remember { mutableStateOf(UiRect.Zero) } + var hovered by remember { mutableStateOf(null) } + val grabbedAt = remember { floatArrayOf(0f, 0f) } + + LaunchedEffect(view) { + while (true) { + withFrameNanos(view::advance) + } + } + + fun pointer(event: UiEvent) = GraphPointer( + screenX = event.x, + screenY = event.y, + canvasX = event.localX, + canvasY = event.localY, + graphX = view.toGraphX(event.localX), + graphY = view.toGraphY(event.localY), + modifiers = event.modifiers, + ) + + fun edgeAt(x: Float, y: Float): Any? = + GraphCurves.nearest(edges.map { it.key to it.curve }, x, y, EDGE_HIT_RADIUS) + + Box( + id = id, + mode = UiBoxMode.STACK, + tags = listOf("graph-canvas"), + modifier = modifier + .style(GraphStylesheet) + .clip(true) + .onPlaced { canvas = it } + .input(hoverable = true, clickable = true, draggable = true) + .drawBehind(GraphDrawKey(view.zoom, view.panX, view.panY, edges, link, hovered)) { + drawGrid(view) + edges.sortedBy { it.selected }.forEach { edge -> + val color = when { + edge.selected -> GraphColors.EdgeSelected + edge.key == hovered -> GraphColors.EdgeHover + else -> edge.color + } + drawCurve(edge.curve, view.zoom, color, edge.arrow) + } + link?.let { drawSegment(it.fromX, it.fromY, it.toX, it.toY, it.color, 1.5f) } + } + .onHover { event -> + val edge = edgeAt(event.localX, event.localY) + if (edge != hovered) hovered = edge + } + .onExit { hovered = null } + .focus() + .onKeyInput { input -> + when { + onKey(input) -> input.consume() + input.key == GLFW.GLFW_KEY_F -> { + view.reset() + input.consume() + } + } + } + .onScroll { event -> + view.zoomBy(if (event.rawScrollY > 0f) ZOOM_STEP else 1f / ZOOM_STEP, event.localX, event.localY) + event.consume() + } + .onPress { event -> + grabbedAt[0] = event.localX + grabbedAt[1] = event.localY + view.grab(event.localX, event.localY) + event.consume() + } + .onDrag { event -> + view.dragTo(grabbedAt[0] + event.dragTotalX, grabbedAt[1] + event.dragTotalY) + event.consume() + } + .onRelease { event -> + onRelease() + event.consume() + } + .onClick { event -> + val edge = edgeAt(event.localX, event.localY) + when { + event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT -> onContextMenu(pointer(event), edge) + edge != null -> onEdgeClick(edge) + else -> onBackgroundClick(pointer(event)) + } + event.consume() + }, + ) { + Box( + mode = UiBoxMode.STACK, + modifier = Modifier + .position(0.px, 0.px) + .size(100.percent, 100.percent) + .pivot(0.px, 0.px) + .translate(view.panX, view.panY) + .scale(view.zoom) + .transition(), + ) { + nodes() + } + + if (minimap.isNotEmpty()) { + Column( + modifier = Modifier.size(100.percent, 100.percent).padding(8.px).inputTransparent() + .alignItems(horizontal = UiAlign.END, vertical = UiAlign.END), + ) { + GraphMiniMap(minimap) { x, y -> view.centerOn(x, y, canvas.width, canvas.height) } + } + } + overlay() + } +} + +/** + * Every node of the graph at a glance; a click on one brings it to the middle of the canvas. + */ +@Composable +private fun GraphMiniMap(items: List, onJumpTo: (Float, Float) -> Unit) { + val minX = items.minOf { it.rect.x } + val maxX = items.maxOf { it.rect.x + it.rect.width } + val minY = items.minOf { it.rect.y } + val maxY = items.maxOf { it.rect.y + it.rect.height } + val scale = minOf( + (MINIMAP_WIDTH - 8f) / (maxX - minX).coerceAtLeast(1f), + (MINIMAP_HEIGHT - 8f) / (maxY - minY).coerceAtLeast(1f), + ) + + Box( + mode = UiBoxMode.STACK, + tags = listOf("graph-minimap"), + modifier = Modifier.size(MINIMAP_WIDTH.px, MINIMAP_HEIGHT.px), + ) { + items.forEachIndexed { index, item -> + Box( + id = "graph-minimap-$index", + tags = listOf("graph-minimap-mark"), + modifier = Modifier + .position((4f + (item.rect.x - minX) * scale).px, (4f + (item.rect.y - minY) * scale).px) + .size((item.rect.width * scale).coerceAtLeast(4f).px, (item.rect.height * scale).coerceAtLeast(3f).px) + .background(item.color) + .input(hoverable = true, clickable = true) + .let { if (item.tooltip != null) it.tooltipOnHover(item.tooltip) else it } + .onPress { event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onJumpTo(item.rect.centerX, item.rect.centerY) + event.consume() + }, + ) + } + } +} + +/** A line of the grid every [GRID_STEP] graph units, while they are far enough apart to be worth it. */ +private fun UiCanvasDrawScope.drawGrid(view: GraphViewState) { + val paint = UiPaint.Color(GraphColors.Grid) + val step = GRID_STEP * view.zoom + if (step < 4f) return + + var x = view.panX.mod(step) + while (x < size.width) { + drawRect(UiRect(x, 0f, 1f, size.height), paint) + x += step + } + var y = view.panY.mod(step) + while (y < size.height) { + drawRect(UiRect(0f, y, size.width, 1f), paint) + y += step + } +} + +/** Draws a curve segment by segment, each clipped to the canvas, and an arrowhead at its end. */ +private fun UiCanvasDrawScope.drawCurve(curve: GraphCurve, zoom: Float, color: UiColor, arrow: Boolean) { + val points = curve.points + val width = (1.5f * zoom).coerceIn(1f, 3f) + for (index in 0 until curve.pointCount - 1) { + drawSegment(points[index * 2], points[index * 2 + 1], points[index * 2 + 2], points[index * 2 + 3], color, width) + } + if (!arrow || curve.pointCount < 2) return + + val head = ARROW_SIZE * zoom + val last = points.size - 2 + val angle = atan2(points[last + 1] - points[last - 1], points[last] - points[last - 2]) + val tipX = points[last] + val tipY = points[last + 1] + drawSegment(tipX, tipY, tipX - head * cos(angle - ARROW_SPREAD), tipY - head * sin(angle - ARROW_SPREAD), color, width) + drawSegment(tipX, tipY, tipX - head * cos(angle + ARROW_SPREAD), tipY - head * sin(angle + ARROW_SPREAD), color, width) +} + +/** Lines are clipped here because a stroke drawn behind a node is not bounded by the node's clip. */ +private fun UiCanvasDrawScope.drawSegment(x1: Float, y1: Float, x2: Float, y2: Float, color: UiColor, width: Float) { + val clipped = clipSegment(x1, y1, x2, y2, size.width, size.height) ?: return + val shape = GenericShape { + moveTo(clipped[0], clipped[1]) + lineTo(clipped[2], clipped[3]) + } + drawShape(shape, bounds, UiPaint.Color(color), UiDrawStyle.Stroke(width)) +} + +private data class GraphDrawKey( + val zoom: Float, + val panX: Float, + val panY: Float, + val edges: List, + val link: GraphLinkPreview?, + val hovered: Any?, +) + +/** How far apart the lines of the grid are, in graph units. */ +const val GRID_STEP = 32f + +/** How big an arrowhead is at zoom 1; a link that ends in one stops this short of its node. */ +const val ARROW_SIZE = 9f + +private const val ARROW_SPREAD = 0.5f +private const val EDGE_HIT_RADIUS = 6f +private const val ZOOM_STEP = 1.18f +private const val MINIMAP_WIDTH = 120f +private const val MINIMAP_HEIGHT = 78f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt new file mode 100644 index 000000000..d62144545 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt @@ -0,0 +1,152 @@ +package ru.hollowhorizon.hollowengine.client.ui.graph + +import kotlin.math.abs +import kotlin.math.hypot + +/** A rectangle of the graph or of the canvas, whichever space it was made in. */ +data class GraphRect(val x: Float, val y: Float, val width: Float, val height: Float) { + val centerX get() = x + width / 2f + val centerY get() = y + height / 2f + + fun contains(px: Float, py: Float): Boolean = px >= x && px <= x + width && py >= y && py <= y + height + + /** This rectangle of the graph as it lies on the canvas. */ + fun toCanvas(view: GraphViewState) = + GraphRect(view.toCanvasX(x), view.toCanvasY(y), width * view.zoom, height * view.zoom) +} + +/** A connection as a sampled curve in canvas space: what gets drawn, clicked and labeled. */ +class GraphCurve(val points: FloatArray) { + val pointCount: Int get() = points.size / 2 + + /** A point [fraction] of the way along the curve. */ + fun pointAt(fraction: Float): FloatArray { + val last = pointCount - 1 + val step = (fraction.coerceIn(0f, 1f) * last).toInt().coerceIn(0, last) + return floatArrayOf(points[step * 2], points[step * 2 + 1]) + } + + fun distanceTo(x: Float, y: Float): Float = (0 until pointCount - 1).minOfOrNull { index -> + distanceToSegment( + x, y, + points[index * 2], points[index * 2 + 1], + points[index * 2 + 2], points[index * 2 + 3], + ) + } ?: Float.MAX_VALUE + + override fun equals(other: Any?) = other is GraphCurve && points.contentEquals(other.points) + override fun hashCode() = points.contentHashCode() +} + +/** How the two kinds of graph link their nodes. */ +object GraphCurves { + private const val SAMPLES = 32 + private const val MIN_BOW = 26f + private const val MAX_BOW = 220f + + /** + * A link from a side of [from] into a side of [to]. + */ + fun betweenBoxes(from: GraphRect, to: GraphRect, offset: Float = 0f, gap: Float = 0f): GraphCurve { + val horizontal = abs(to.centerX - from.centerX) >= abs(to.centerY - from.centerY) + val start = from.sidePoint(towards = to, horizontal = horizontal, along = offset, gap = 0f) + val end = to.sidePoint(towards = from, horizontal = horizontal, along = offset, gap = gap) + + val reach = if (horizontal) abs(end[0] - start[0]) else abs(end[1] - start[1]) + val bow = (reach * 0.6f).coerceIn(MIN_BOW, MAX_BOW) + return bezier( + start[0], start[1], + start[0] + if (horizontal) bow * start[2] else 0f, start[1] + if (horizontal) 0f else bow * start[3], + end[0] + if (horizontal) bow * end[2] else 0f, end[1] + if (horizontal) 0f else bow * end[3], + end[0], end[1], + ) + } + + /** + * A link from an output pin to an input pin. + */ + fun betweenPins(fromX: Float, fromY: Float, toX: Float, toY: Float, zoom: Float): GraphCurve { + val bow = (abs(toX - fromX) * 0.5f).coerceIn(MIN_BOW * zoom, MAX_BOW * zoom) + return bezier(fromX, fromY, fromX + bow, fromY, toX - bow, toY, toX, toY) + } + + /** The key of the curve closest to ([x], [y]) within [radius], if any is. */ + fun nearest(curves: List>, x: Float, y: Float, radius: Float): K? = + curves.map { (key, curve) -> key to curve.distanceTo(x, y) } + .filter { it.second <= radius } + .minByOrNull { it.second }?.first + + private fun bezier( + x0: Float, y0: Float, + x1: Float, y1: Float, + x2: Float, y2: Float, + x3: Float, y3: Float, + ): GraphCurve { + val points = FloatArray((SAMPLES + 1) * 2) + for (step in 0..SAMPLES) { + val t = step / SAMPLES.toFloat() + val inverse = 1f - t + val a = inverse * inverse * inverse + val b = 3f * inverse * inverse * t + val c = 3f * inverse * t * t + val d = t * t * t + points[step * 2] = a * x0 + b * x1 + c * x2 + d * x3 + points[step * 2 + 1] = a * y0 + b * y1 + c * y2 + d * y3 + } + return GraphCurve(points) + } + + /** Where a link attaches to this box: x, y, then the direction it leaves in. */ + private fun GraphRect.sidePoint(towards: GraphRect, horizontal: Boolean, along: Float, gap: Float): FloatArray = + if (horizontal) { + val right = towards.centerX >= centerX + floatArrayOf( + if (right) x + width + gap else x - gap, + (centerY + along).coerceIn(y + 4f, y + height - 4f), + if (right) 1f else -1f, + 0f, + ) + } else { + val below = towards.centerY >= centerY + floatArrayOf( + (centerX + along).coerceIn(x + 4f, x + width - 4f), + if (below) y + height + gap else y - gap, + 0f, + if (below) 1f else -1f, + ) + } +} + +internal fun distanceToSegment(x: Float, y: Float, x1: Float, y1: Float, x2: Float, y2: Float): Float { + val dx = x2 - x1 + val dy = y2 - y1 + val lengthSquared = dx * dx + dy * dy + if (lengthSquared == 0f) return hypot(x - x1, y - y1) + val t = (((x - x1) * dx + (y - y1) * dy) / lengthSquared).coerceIn(0f, 1f) + return hypot(x - (x1 + t * dx), y - (y1 + t * dy)) +} + +/** The part of the segment inside a [width] by [height] box at the origin, or null when none is. */ +internal fun clipSegment(x1: Float, y1: Float, x2: Float, y2: Float, width: Float, height: Float): FloatArray? { + val dx = x2 - x1 + val dy = y2 - y1 + var enter = 0f + var exit = 1f + + val checks = arrayOf(-dx to x1, dx to (width - x1), -dy to y1, dy to (height - y1)) + checks.forEach { (p, q) -> + if (p == 0f) { + if (q < 0f) return null + } else { + val r = q / p + if (p < 0f) { + if (r > exit) return null + if (r > enter) enter = r + } else { + if (r < enter) return null + if (r < exit) exit = r + } + } + } + return floatArrayOf(x1 + enter * dx, y1 + enter * dy, x1 + exit * dx, y1 + exit * dy) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt new file mode 100644 index 000000000..d87e10921 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt @@ -0,0 +1,90 @@ +package ru.hollowhorizon.hollowengine.client.ui.graph + +import androidx.compose.runtime.Composable +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.ui.Column +import ru.hollowhorizon.hollowengine.client.ui.HollowUiContent +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.UiEvent +import ru.hollowhorizon.hollowengine.client.ui.UiLength +import ru.hollowhorizon.hollowengine.client.ui.input +import ru.hollowhorizon.hollowengine.client.ui.onDrag +import ru.hollowhorizon.hollowengine.client.ui.onPress +import ru.hollowhorizon.hollowengine.client.ui.onRelease +import ru.hollowhorizon.hollowengine.client.ui.position +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.size + +/** + * A press, drag or release on a node: how far the pointer has gone since the press, in graph units, + * and where it is on the canvas, for handlers that follow it, such as a link being drawn out. + */ +data class GraphNodeGesture( + val graphDeltaX: Float, + val graphDeltaY: Float, + val canvasX: Float, + val canvasY: Float, + val modifiers: Int, +) { + val control: Boolean get() = modifiers and GLFW.GLFW_MOD_CONTROL != 0 + val shift: Boolean get() = modifiers and GLFW.GLFW_MOD_SHIFT != 0 +} + +/** + * One node of a graph, placed at ([x], [y]) in graph units inside [GraphCanvas]. Its look comes from + * the `graph-node` tag and whatever [tags] the owner adds; `selected` is added for [selected]. + */ +@Composable +fun GraphNode( + id: String, + canvasId: String, + view: GraphViewState, + x: Float, + y: Float, + width: Float, + height: Float? = null, + selected: Boolean = false, + tags: List = emptyList(), + onPress: (GraphNodeGesture) -> Unit = {}, + onDrag: (GraphNodeGesture) -> Unit = {}, + onRelease: () -> Unit = {}, + onContextMenu: (screenX: Float, screenY: Float) -> Unit = { _, _ -> }, + content: HollowUiContent, +) { + fun gesture(event: UiEvent): GraphNodeGesture { + val canvas = event.ancestorLocalPositions[canvasId] + return GraphNodeGesture( + graphDeltaX = event.dragTotalX / view.zoom, + graphDeltaY = event.dragTotalY / view.zoom, + canvasX = canvas?.x ?: 0f, + canvasY = canvas?.y ?: 0f, + modifiers = event.modifiers, + ) + } + + Column( + id = id, + tags = listOf("graph-node") + tags + if (selected) listOf("selected") else emptyList(), + modifier = Modifier + .position(x.px, y.px) + .size(width.px, height?.px ?: UiLength.Auto) + .input(hoverable = true, clickable = true, draggable = true) + .onPress { event -> + when (event.button) { + GLFW.GLFW_MOUSE_BUTTON_RIGHT -> onContextMenu(event.x, event.y) + GLFW.GLFW_MOUSE_BUTTON_LEFT -> onPress(gesture(event)) + else -> return@onPress + } + event.consume() + } + .onDrag { event -> + onDrag(gesture(event)) + event.consume() + } + .onRelease { event -> + onRelease() + event.consume() + }, + content = content, + ) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewState.kt new file mode 100644 index 000000000..b956785cd --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewState.kt @@ -0,0 +1,118 @@ +package ru.hollowhorizon.hollowengine.client.ui.graph + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import kotlin.math.abs + +/** + * Pan and zoom of one graph: a point of the graph lands on the canvas at `point * zoom + pan`. + * + * Zoom follows a spring toward where the wheel asked it to be, anchored at the point under the cursor, + * so that point stays put while the rest grows around it. It runs off [advance], once a frame. + * + * A pan grabs the graph point under the pointer and keeps it there; that point becomes the anchor, so + * a zoom still easing in keeps easing around the hand rather than fighting it. + */ +class GraphViewState( + private val homeX: Float = 60f, + private val homeY: Float = 60f, + private val minZoom: Float = 0.3f, + private val maxZoom: Float = 2.5f, +) { + var panX by mutableStateOf(homeX) + var panY by mutableStateOf(homeY) + var zoom by mutableStateOf(1f) + private set + + private var targetZoom = 1f + private var velocity = 0f + private var anchorCanvasX = 0f + private var anchorCanvasY = 0f + private var anchorGraphX = 0f + private var anchorGraphY = 0f + private var anchored = false + private var lastFrame = 0L + + fun toCanvasX(x: Float) = x * zoom + panX + fun toCanvasY(y: Float) = y * zoom + panY + fun toGraphX(x: Float) = (x - panX) / zoom + fun toGraphY(y: Float) = (y - panY) / zoom + + /** Zooms by [step] times, keeping the graph point under ([aroundX], [aroundY]) of the canvas in place. */ + fun zoomBy(step: Float, aroundX: Float, aroundY: Float) { + anchorCanvasX = aroundX + anchorCanvasY = aroundY + anchorGraphX = toGraphX(aroundX) + anchorGraphY = toGraphY(aroundY) + anchored = true + targetZoom = (targetZoom * step).coerceIn(minZoom, maxZoom) + } + + /** Takes hold of the graph point under ([canvasX], [canvasY]); [dragTo] then moves it. */ + fun grab(canvasX: Float, canvasY: Float) { + anchorGraphX = toGraphX(canvasX) + anchorGraphY = toGraphY(canvasY) + anchorCanvasX = canvasX + anchorCanvasY = canvasY + anchored = true + } + + /** Puts the grabbed point under ([canvasX], [canvasY]) at whatever zoom the view is at right now. */ + fun dragTo(canvasX: Float, canvasY: Float) { + anchorCanvasX = canvasX + anchorCanvasY = canvasY + reanchor() + } + + /** Back to where a new view starts. */ + fun reset() { + targetZoom = 1f + velocity = 0f + anchored = false + panX = homeX + panY = homeY + zoom = 1f + } + + /** Puts the graph point ([x], [y]) in the middle of a canvas [width] by [height]. */ + fun centerOn(x: Float, y: Float, width: Float, height: Float) { + anchored = false + panX = width / 2f - x * zoom + panY = height / 2f - y * zoom + } + + /** One step of the spring; returns whether anything is still moving. */ + fun advance(frameNanos: Long): Boolean { + val previous = lastFrame + lastFrame = frameNanos + if (previous == 0L) return false + + val delta = targetZoom - zoom + if (abs(delta) < 0.0005f && abs(velocity) < 0.0005f) { + if (zoom != targetZoom) { + zoom = targetZoom + reanchor() + } + velocity = 0f + return false + } + + val dt = ((frameNanos - previous) / 1_000_000_000f).coerceIn(0f, 0.05f) + velocity += (delta * STIFFNESS - velocity * DAMPING) * dt + zoom += velocity * dt + reanchor() + return true + } + + private fun reanchor() { + if (!anchored) return + panX = anchorCanvasX - anchorGraphX * zoom + panY = anchorCanvasY - anchorGraphY * zoom + } + + private companion object { + const val STIFFNESS = 260f + const val DAMPING = 30f + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt index 02bf15d13..54119c390 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/IdeSceneHost.kt @@ -83,7 +83,7 @@ internal fun SceneDock() { Column(tags = listOf("ide-panel", "scene-panel"), modifier = Modifier.size(100.percent, 100.percent)) { if (target == null) { - Text("hollowengine.gui.ide.windows.scene_empty".lang, tags = listOf("scene-hint")) + SceneEmptyState("hollowengine.gui.ide.windows.scene_empty".lang, addHint = false) return@Column } @@ -92,47 +92,51 @@ internal fun SceneDock() { menu = if (items.isEmpty()) null else SceneMenu(event.x, event.y, items) } val move = target.onMove + val empty = target.items.isEmpty() - UiTreeView( - items = target.items, - onToggle = { item -> target.onToggle(item.id) }, - onSelect = { item, event -> - if (event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { - if (!item.selected) target.onSelect(item.id) - openMenu(item.id, event) - return@UiTreeView - } - menu = null - target.onSelect(item.id.takeUnless { item.selected && event.isCtrlDown() }) - }, - onBackgroundClick = { - menu = null - target.onSelect(null) - }, - onBackgroundContextMenu = { event -> openMenu(null, event) }, - fillRowWidth = true, - dragItem = if (move == null) null else { item -> - UiDragItem(payload = SceneDrag(target.id, item.id), icon = item.icon, label = item.label) - }, - onDrop = if (move == null) null else { item, dragged -> - val drag = dragged.payload as? SceneDrag - drag != null && move(drag.item, item.id) - }, - canDrop = { item, dragged -> - val drag = dragged.payload as? SceneDrag - drag != null && drag.scene == target.id && drag.item != item.id && target.canMove(drag.item, item.id) - }, - modifier = Modifier.size(100.percent, 0.px).grow(1f).onKeyInput { input -> - if (input.key == GLFW.GLFW_KEY_ESCAPE && target.items.any { it.selected }) { + Box(mode = UiBoxMode.STACK, modifier = Modifier.size(100.percent, 0.px).grow(1f)) { + UiTreeView( + items = target.items, + onToggle = { item -> target.onToggle(item.id) }, + onSelect = { item, event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + if (!item.selected) target.onSelect(item.id) + openMenu(item.id, event) + return@UiTreeView + } + menu = null + target.onSelect(item.id.takeUnless { item.selected && event.isCtrlDown() }) + }, + onBackgroundClick = { + menu = null target.onSelect(null) - input.consume() - return@onKeyInput - } - if (target.onKey?.invoke(input) == true) input.consume() - }, - ) + }, + onBackgroundContextMenu = { event -> openMenu(null, event) }, + fillRowWidth = true, + dragItem = if (move == null) null else { item -> + UiDragItem(payload = SceneDrag(target.id, item.id), icon = item.icon, label = item.label) + }, + onDrop = if (move == null) null else { item, dragged -> + val drag = dragged.payload as? SceneDrag + drag != null && move(drag.item, item.id) + }, + canDrop = { item, dragged -> + val drag = dragged.payload as? SceneDrag + drag != null && drag.scene == target.id && drag.item != item.id && target.canMove(drag.item, item.id) + }, + modifier = Modifier.size(100.percent, 100.percent).onKeyInput { input -> + if (input.key == GLFW.GLFW_KEY_ESCAPE && target.items.any { it.selected }) { + target.onSelect(null) + input.consume() + return@onKeyInput + } + if (target.onKey?.invoke(input) == true) input.consume() + }, + ) + if (empty) SceneEmptyState(target.hint.orEmpty(), addHint = target.menu != null) + } - target.hint?.let { Text(it, tags = listOf("scene-hint")) } + if (!empty) target.hint?.let { Text(it, tags = listOf("scene-hint")) } menu?.let { open -> ContextMenu( @@ -147,3 +151,17 @@ internal fun SceneDock() { } private class SceneMenu(val x: Float, val y: Float, val items: List) + +/** What the scene window says when there is nothing in it, framed like the inspector says it. */ +@Composable +private fun SceneEmptyState(message: String, addHint: Boolean) { + Column(tags = listOf("scene-empty"), modifier = Modifier.inputTransparent()) { + Column(tags = listOf("scene-empty-state")) { + Image(SceneEmptyIcon, tags = listOf("scene-empty-icon")) + if (message.isNotEmpty()) Text(message, tags = listOf("scene-empty-text")) + if (addHint) Text("hollowengine.gui.ide.windows.scene_add_hint".lang, tags = listOf("scene-empty-hint")) + } + } +} + +private const val SceneEmptyIcon = "hollowengine:textures/gui/icons/layers.svg" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorGraphCanvas.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorGraphCanvas.kt index 1daa27493..7134be107 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorGraphCanvas.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorGraphCanvas.kt @@ -1,35 +1,65 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.animator -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import org.lwjgl.glfw.GLFW -import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.Image +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.Row +import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.UiAlign +import ru.hollowhorizon.hollowengine.client.ui.UiLength +import ru.hollowhorizon.hollowengine.client.ui.alignItems +import ru.hollowhorizon.hollowengine.client.ui.gap +import ru.hollowhorizon.hollowengine.client.ui.graph.ARROW_SIZE +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphCanvas +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphCurves +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphEdge +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphLinkPreview +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphMiniMapItem +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphNode +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphRect +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphViewState +import ru.hollowhorizon.hollowengine.client.ui.grow import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeAnimatorDocument +import ru.hollowhorizon.hollowengine.client.ui.input import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect -import ru.hollowhorizon.hollowengine.client.ui.shape.GenericShape -import ru.hollowhorizon.hollowengine.client.ui.style.UiGradientStop -import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint -import ru.hollowhorizon.hollowengine.client.ui.style.UiShadow -import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow +import ru.hollowhorizon.hollowengine.client.ui.onClick +import ru.hollowhorizon.hollowengine.client.ui.percent +import ru.hollowhorizon.hollowengine.client.ui.position +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.size import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem -import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover -import ru.hollowhorizon.hollowengine.common.models.* -import kotlin.math.* +import ru.hollowhorizon.hollowengine.common.models.ANY_STATE +import ru.hollowhorizon.hollowengine.common.models.AnimationControllerLayerSpec +import ru.hollowhorizon.hollowengine.common.models.AnimationControllerStateSpec +import ru.hollowhorizon.hollowengine.common.models.AnimationControllerTransitionSpec +import ru.hollowhorizon.hollowengine.common.models.AnimationPlayMode +import ru.hollowhorizon.hollowengine.common.models.Animator +import ru.hollowhorizon.hollowengine.common.models.AnimatorStateTypes +import ru.hollowhorizon.hollowengine.common.models.ClipStateSpec +import ru.hollowhorizon.hollowengine.common.models.GraphPoint +import ru.hollowhorizon.hollowengine.common.models.nodeAt +import ru.hollowhorizon.hollowengine.common.models.nodeLayout +import ru.hollowhorizon.hollowengine.common.models.withAnyStateAt +import ru.hollowhorizon.hollowengine.common.models.withEntryState +import ru.hollowhorizon.hollowengine.common.models.withNodeAt +import ru.hollowhorizon.hollowengine.common.models.withState +import ru.hollowhorizon.hollowengine.common.models.withStateAsAnyState +import ru.hollowhorizon.hollowengine.common.models.withTransition +import ru.hollowhorizon.hollowengine.common.models.withoutAnyState +import ru.hollowhorizon.hollowengine.common.models.withoutState +import ru.hollowhorizon.hollowengine.common.models.withoutTransitionAt internal const val AnimatorCanvasId = "animator-canvas" private const val NodeHeight = 46f private const val NodeMinWidth = 96f private const val NodeMaxWidth = 260f -private const val GridStep = 32f -private const val ArrowSize = 9f -private const val CurveBow = 26f -private const val ParallelOffset = 9f -private const val EdgeSamples = 32 -private const val EdgeHitRadius = 6f -private const val MiniMapWidth = 120f -private const val MiniMapHeight = 78f -private const val MinZoom = 0.45f -private const val MaxZoom = 2.0f +private const val ParallelOffset = 14f private const val PlayIcon = "hollowengine:textures/gui/icons/play.svg" private const val StateIcon = "hollowengine:textures/gui/icons/state.svg" private const val AnyStateIcon = "hollowengine:textures/gui/icons/any_state.svg" @@ -37,526 +67,195 @@ private const val ResetIcon = "hollowengine:textures/gui/icons/reload.svg" internal const val MaximizeIcon = "hollowengine:textures/gui/icons/maximize.svg" internal const val MinimizeIcon = "hollowengine:textures/gui/icons/minimize.svg" -/** - * Pan and zoom of one graph. - */ -class AnimatorCanvasState { - var panX by mutableStateOf(60f) - var panY by mutableStateOf(60f) - var zoom by mutableStateOf(1f) - private set - - private var targetZoom = 1f - private var velocity = 0f - private var anchorScreenX = 0f - private var anchorScreenY = 0f - private var anchorGraphX = 0f - private var anchorGraphY = 0f - private var lastFrame = 0L - - fun toScreenX(x: Float) = x * zoom + panX - fun toScreenY(y: Float) = y * zoom + panY - fun toGraphX(x: Float) = (x - panX) / zoom - fun toGraphY(y: Float) = (y - panY) / zoom - - fun zoomBy(step: Float, aroundX: Float, aroundY: Float) { - anchorScreenX = aroundX - anchorScreenY = aroundY - anchorGraphX = toGraphX(aroundX) - anchorGraphY = toGraphY(aroundY) - targetZoom = (targetZoom * step).coerceIn(MinZoom, MaxZoom) - } - - fun reset() { - targetZoom = 1f - velocity = 0f - panX = 60f - panY = 60f - zoom = 1f - } - - /** One step of the spring; returns whether anything is still moving. */ - fun advance(frameNanos: Long): Boolean { - val previous = lastFrame - lastFrame = frameNanos - if (previous == 0L) return false - - val delta = targetZoom - zoom - if (abs(delta) < 0.0005f && abs(velocity) < 0.0005f) { - if (zoom != targetZoom) { - zoom = targetZoom - reanchor() - } - velocity = 0f - return false - } - - val dt = ((frameNanos - previous) / 1_000_000_000f).coerceIn(0f, 0.05f) - velocity += (delta * STIFFNESS - velocity * DAMPING) * dt - zoom += velocity * dt - reanchor() - return true - } - - private fun reanchor() { - if (anchorScreenX == 0f && anchorScreenY == 0f) return - panX = anchorScreenX - anchorGraphX * zoom - panY = anchorScreenY - anchorGraphY * zoom - } - - private companion object { - const val STIFFNESS = 260f - const val DAMPING = 30f - } -} - -/** A state as it sits on screen right now. */ -private data class NodeBox(val id: String, val x: Float, val y: Float, val width: Float, val height: Float) { - val centerX get() = x + width / 2f - val centerY get() = y + height / 2f +/** Where a right click landed: on a state, on a transition, or on the empty canvas. */ +private sealed interface CanvasMenuTarget { + data class State(val stateId: String) : CanvasMenuTarget + data class Transition(val index: Int) : CanvasMenuTarget + data object Empty : CanvasMenuTarget } -/** A transition as a sampled curve, which is what gets drawn, clicked and labeled. */ -private data class EdgeCurve(val index: Int, val points: FloatArray) { - /** - * A point along the curve. - */ - fun pointAt(fraction: Float): FloatArray { - val samples = points.size / 2 - 1 - val step = (fraction.coerceIn(0f, 1f) * samples).toInt().coerceIn(0, samples) - return floatArrayOf(points[step * 2], points[step * 2 + 1]) - } - - val labelPoint: FloatArray get() = pointAt(0.42f + (index % 3) * 0.11f) +private data class CanvasMenu(val target: CanvasMenuTarget, val screenX: Float, val screenY: Float, val at: GraphPoint) - override fun equals(other: Any?) = other is EdgeCurve && index == other.index && points.contentEquals(other.points) - override fun hashCode() = 31 * index + points.contentHashCode() -} +/** A link being drawn out of a state with Ctrl held, toward the pointer. */ +private data class PendingLink(val from: String, val canvasX: Float, val canvasY: Float) /** - * State machine of controller layer, as a graph. + * The state machine of a controller layer, as a graph: states are nodes, transitions are arrows, and a + * Ctrl-drag from one state to another adds a transition. */ @Composable internal fun AnimatorGraphCanvas( document: HollowIdeAnimatorDocument, layerId: String, + controller: AnimationControllerLayerSpec, selection: AnimatorSelection, - view: AnimatorCanvasState, - chrome: CanvasChrome, + view: GraphViewState, onSelect: (AnimatorSelection) -> Unit, modifier: Modifier, ) { val animator = document.animator - val controller = animator.controller(layerId) - var canvasSize by remember { mutableStateOf(UiRect.Zero) } + var canvas by remember { mutableStateOf(UiRect.Zero) } + var menu by remember(layerId) { mutableStateOf(null) } + var link by remember(layerId) { mutableStateOf(null) } + val dragOrigin = remember(layerId) { floatArrayOf(0f, 0f) } - if (controller == null) { - Box( - mode = UiBoxMode.STACK, - modifier = modifier.background(AnimatorColors.Canvas).onPlaced { canvasSize = it }) { - Text( - animatorText("pick_controller"), - modifier = Modifier.padding(12.px).fontSize(11f).foreground(AnimatorColors.Muted), - ) - CanvasChromeButtons(chrome, null) - } - return + val positions = animator.nodeLayout(layerId) + anyStatePosition(animator, layerId, controller) + val boxes = positions.mapValues { (stateId, point) -> + GraphRect(point.x, point.y, nodeWidth(stateId, controller.state(stateId).subtitle()), NodeHeight) } - - LaunchedEffect(view) { - while (true) { - withFrameNanos(view::advance) + val onCanvas = boxes.mapValues { (_, box) -> box.toCanvas(view) } + val transitionCurves = controller.transitionCurves(onCanvas, view.zoom) + + /** Ends a link being drawn: a transition to the state it was dropped on, or nothing. */ + fun finishLink() { + val drawn = link ?: return + link = null + val target = onCanvas.entries.firstOrNull { it.value.contains(drawn.canvasX, drawn.canvasY) }?.key + if (target != null && target != drawn.from && target != ANY_STATE) { + document.edit { it.withTransition(layerId, AnimationControllerTransitionSpec(from = drawn.from, to = target)) } } } - val positions = animator.nodeLayout(layerId) + anyStatePosition(animator, layerId, controller) - var measured by remember(layerId) { mutableStateOf(emptyMap()) } - val boxes = positions.map { (stateId, point) -> - val state = controller.states.firstOrNull { it.id == stateId } - val size = measured[stateId] - NodeBox( - id = stateId, - x = view.toScreenX(point.x), - y = view.toScreenY(point.y), - width = size?.width ?: (nodeWidth(stateId, state.subtitle()) * view.zoom), - height = size?.height ?: (NodeHeight * view.zoom), - ) - } - val boxById = boxes.associateBy { it.id } - val edges = controller.edgeCurves(boxById) - - var dragging by remember(layerId) { mutableStateOf(null) } - var dragOrigin by remember(layerId) { mutableStateOf(GraphPoint()) } - var linkingFrom by remember(layerId) { mutableStateOf(null) } - var linkX by remember(layerId) { mutableStateOf(0f) } - var linkY by remember(layerId) { mutableStateOf(0f) } - var menu by remember(layerId) { mutableStateOf(null) } - var hoveredEdge by remember(layerId) { mutableStateOf(null) } - - Box( + val pending = link + GraphCanvas( id = AnimatorCanvasId, - mode = UiBoxMode.STACK, - modifier = modifier - .background(AnimatorColors.Canvas) - .clip(true) - .onPlaced { canvasSize = it } - .input(hoverable = true, clickable = true, draggable = true) - .drawBehind( - GraphKey( - view.zoom, - view.panX, - view.panY, - document.revision, - selection, - linkingFrom, - linkX, - linkY, - hoveredEdge - ) - ) { - drawGrid(view) - edges.sortedBy { selection == AnimatorSelection.Transition(layerId, it.index) }.forEach { edge -> - val color = when { - selection == AnimatorSelection.Transition(layerId, edge.index) -> AnimatorColors.EdgeSelected - edge.index == hoveredEdge -> AnimatorColors.EdgeHover - else -> AnimatorColors.Edge - } - drawCurve(edge.points, view.zoom, color) - } - linkingFrom?.let { from -> - val box = boxById[from] ?: return@let - drawLine(box.centerX, box.centerY, linkX, linkY, AnimatorColors.Accent) - } - } - .onHover { event -> - val edge = edges.nearest(event.localX, event.localY) - if (edge?.index != hoveredEdge) hoveredEdge = edge?.index - } - .onExit { hoveredEdge = null } - .focus() - .onKeyInput { input -> - when { - input.key == GLFW.GLFW_KEY_DELETE -> { - when (selection) { - is AnimatorSelection.State -> - if (selection.stateId == ANY_STATE) { - document.edit { it.withoutAnyState(layerId) } - } else { - document.edit { it.withoutState(layerId, selection.stateId) } - } - - is AnimatorSelection.Transition -> - document.edit { it.withoutTransitionAt(layerId, selection.index) } - - else -> return@onKeyInput - } - onSelect(AnimatorSelection.Layer(layerId)) - input.consume() - } - - input.key == GLFW.GLFW_KEY_ESCAPE -> { - onSelect(AnimatorSelection.None) - input.consume() - } - - input.key == GLFW.GLFW_KEY_F -> { - view.reset() - input.consume() - } - - input.key == GLFW.GLFW_KEY_E -> { - val target = selection as? AnimatorSelection.State ?: return@onKeyInput - document.edit { it.withEntryState(layerId, target.stateId) } - input.consume() - } - - input.key == GLFW.GLFW_KEY_INSERT || (input.control && input.key == GLFW.GLFW_KEY_N) -> { - val id = freeStateId(controller) - document.edit { - it.withState( - layerId, - ClipStateSpec(id = id, animation = id), - at = GraphPoint( - view.toGraphX(canvasSize.width / 2f), - view.toGraphY(canvasSize.height / 2f) - ), - ) - } - onSelect(AnimatorSelection.State(layerId, id)) - input.consume() - } - } - } - .onScroll { event -> - view.zoomBy(if (event.rawScrollY > 0f) 1.18f else 1f / 1.18f, event.localX, event.localY) - event.consume() + view = view, + modifier = modifier, + edges = transitionCurves.map { (index, curve) -> + GraphEdge(index, curve, arrow = true, selected = selection == AnimatorSelection.Transition(layerId, index)) + }, + link = pending?.let { from -> + val box = onCanvas[from.from] ?: return@let null + GraphLinkPreview(box.centerX, box.centerY, from.canvasX, from.canvasY) + }, + minimap = boxes.map { (stateId, box) -> + GraphMiniMapItem( + rect = box, + color = when { + selection == AnimatorSelection.State(layerId, stateId) -> AnimatorColors.NodeSelected + stateId == ANY_STATE -> AnimatorColors.AnyState + else -> AnimatorColors.Edge + }, + tooltip = if (stateId == ANY_STATE) animatorText("any_state_node") else stateId, + ) + }, + onBackgroundClick = { onSelect(AnimatorSelection.None) }, + onRelease = ::finishLink, + onEdgeClick = { index -> onSelect(AnimatorSelection.Transition(layerId, index as Int)) }, + onContextMenu = { pointer, edge -> + val target = (edge as? Int)?.let(CanvasMenuTarget::Transition) ?: CanvasMenuTarget.Empty + menu = CanvasMenu(target, pointer.screenX, pointer.screenY, GraphPoint(pointer.graphX, pointer.graphY)) + }, + onKey = { input -> + handleKey(document, layerId, controller, selection, onSelect, input.key, input.control) { + GraphPoint(view.toGraphX(canvas.width / 2f), view.toGraphY(canvas.height / 2f)) } - .onDrag { event -> - view.panX += event.deltaX - view.panY += event.deltaY - event.consume() + }, + overlay = { + Row(modifier = Modifier.position(6.px, 6.px).gap(4.px)) { + AnimatorIconButton(ResetIcon, animatorText("reset_view"), size = 11f) { view.reset() } } - .onClick { event -> - when { - event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT -> { - menu = CanvasMenu( - target = boxes.firstOrNull { it.contains(event.localX, event.localY) }?.id - ?: edges.nearest(event.localX, event.localY)?.let { EdgeTarget(it.index) }, - screenX = event.x, - screenY = event.y, - graphX = view.toGraphX(event.localX), - graphY = view.toGraphY(event.localY), - ) - } - - else -> { - val edge = edges.nearest(event.localX, event.localY) - onSelect( - if (edge != null) AnimatorSelection.Transition(layerId, edge.index) - else AnimatorSelection.None - ) - } - } - event.consume() - }, + }, ) { - edges.sortedBy { selection == AnimatorSelection.Transition(layerId, it.index) }.forEach { edge -> - val label = edge.labelPoint + transitionCurves.forEach { (index, curve) -> + // The two links of a pair run side by side in opposite directions, so a label a third of + // the way along each sits near its own start and the two never land on each other. + val transition = controller.transitions[index] + val paired = controller.transitions.any { it.from == transition.to && it.to == transition.from } + val label = curve.pointAt(if (paired) 0.3f else 0.5f) TransitionLabel( - transition = controller.transitions[edge.index], - selected = selection == AnimatorSelection.Transition(layerId, edge.index), - zoom = view.zoom, - x = label[0], - y = label[1], - onSelect = { onSelect(AnimatorSelection.Transition(layerId, edge.index)) }, + transition = transition, + selected = selection == AnimatorSelection.Transition(layerId, index), + x = view.toGraphX(label[0]), + y = view.toGraphY(label[1]), + onSelect = { onSelect(AnimatorSelection.Transition(layerId, index)) }, ) } - boxes.forEach { box -> - val state = controller.states.firstOrNull { it.id == box.id } - StateNode( - box = box, - subtitle = state.subtitle(), - playMode = (state as? ClipStateSpec)?.playMode, - isEntry = controller.entryState == box.id, - selected = selection == AnimatorSelection.State(layerId, box.id), - zoom = view.zoom, - onSelect = { onSelect(AnimatorSelection.State(layerId, box.id)) }, - onPressed = { linking -> - if (linking) { - linkingFrom = box.id - linkX = box.centerX - linkY = box.centerY + boxes.forEach { (stateId, box) -> + val state = controller.state(stateId) + val anyState = stateId == ANY_STATE + GraphNode( + id = "animator-state-$stateId", + canvasId = AnimatorCanvasId, + view = view, + x = box.x, + y = box.y, + width = box.width, + height = box.height, + selected = selection == AnimatorSelection.State(layerId, stateId), + tags = listOfNotNull( + "animator-state", + "any-state".takeIf { anyState }, + "entry".takeIf { controller.entryState == stateId }, + ), + onPress = { gesture -> + onSelect(AnimatorSelection.State(layerId, stateId)) + if (gesture.control) { + link = PendingLink(stateId, onCanvas.getValue(stateId).centerX, onCanvas.getValue(stateId).centerY) } else { - dragging = box.id - dragOrigin = positions[box.id] ?: GraphPoint() + dragOrigin[0] = box.x + dragOrigin[1] = box.y } }, - onDragged = { event -> - val from = linkingFrom - if (from != null) { - val local = event.ancestorLocalPositions[AnimatorCanvasId] - if (local != null) { - linkX = local.x - linkY = local.y - } - return@StateNode - } - if (dragging != box.id) return@StateNode - document.edit { - it.withNodeAt( - layerId, - box.id, - GraphPoint( - dragOrigin.x + event.dragTotalX / view.zoom, - dragOrigin.y + event.dragTotalY / view.zoom, - ), - ) - } - }, - onReleased = { - val from = linkingFrom - if (from != null) { - val target = boxes.firstOrNull { it.contains(linkX, linkY) }?.id - if (target != null && target != from && target != ANY_STATE) { - document.edit { - it.withTransition(layerId, AnimationControllerTransitionSpec(from = from, to = target)) - } + onDrag = { gesture -> + if (link != null) { + link = link?.copy(canvasX = gesture.canvasX, canvasY = gesture.canvasY) + } else { + document.edit { + it.withNodeAt( + layerId, + stateId, + GraphPoint(dragOrigin[0] + gesture.graphDeltaX, dragOrigin[1] + gesture.graphDeltaY), + ) } } - linkingFrom = null - dragging = null }, + onRelease = ::finishLink, onContextMenu = { screenX, screenY -> - menu = CanvasMenu(box.id, screenX, screenY, 0f, 0f) + onSelect(AnimatorSelection.State(layerId, stateId)) + menu = CanvasMenu(CanvasMenuTarget.State(stateId), screenX, screenY, GraphPoint(box.x, box.y)) }, - onMeasured = { rect -> - if (measured[box.id]?.width != rect.width || measured[box.id]?.height != rect.height) { - measured = measured + (box.id to rect) - } - }, - ) - } - - Column( - modifier = Modifier.size(100.percent, 100.percent).padding(8.px).inputTransparent() - .alignItems(horizontal = UiAlign.END, vertical = UiAlign.END), - ) { - MiniMap( - positions = positions, - selected = (selection as? AnimatorSelection.State)?.stateId, - modifier = Modifier, - ) { point -> - view.panX = canvasSize.width / 2f - point.x * view.zoom - view.panY = canvasSize.height / 2f - point.y * view.zoom + ) { + StateNodeContent( + stateId = stateId, + subtitle = state.subtitle(), + playMode = (state as? ClipStateSpec)?.playMode, + isEntry = controller.entryState == stateId, + ) } } - CanvasChromeButtons(chrome, view) } - CanvasContextMenu( - menu = menu, - controller = controller, - layerId = layerId, - document = document, - view = view, - onSelect = onSelect, - onDismiss = { menu = null }, - ) + menu?.let { open -> + CanvasContextMenu(open, controller, layerId, document, view, onSelect) { menu = null } + } } +/** The name on top with the entry mark beside it, and under it what the state plays and how. */ @Composable -private fun StateNode( - box: NodeBox, - subtitle: String?, - playMode: AnimationPlayMode?, - isEntry: Boolean, - selected: Boolean, - zoom: Float, - onSelect: () -> Unit, - onPressed: (linking: Boolean) -> Unit, - onDragged: (UiEvent) -> Unit, - onReleased: () -> Unit, - onMeasured: (UiRect) -> Unit, - onContextMenu: (Float, Float) -> Unit, -) { - val anyState = box.id == ANY_STATE - val accent = when { - selected -> AnimatorColors.NodeSelected - anyState -> AnimatorColors.AnyState - isEntry -> AnimatorColors.NodeEntry - else -> AnimatorColors.Border +private fun StateNodeContent(stateId: String, subtitle: String?, playMode: AnimationPlayMode?, isEntry: Boolean) { + val anyState = stateId == ANY_STATE + Row(tags = listOf("animator-state-row"), modifier = Modifier.size(100.percent).alignItems(vertical = UiAlign.CENTER)) { + Image(if (anyState) AnyStateIcon else StateIcon, tags = listOf("animator-state-icon")) + Text( + if (anyState) animatorText("any_state_node") else stateId, + tags = listOf("graph-node-title"), + modifier = Modifier.size(0.px, UiLength.Auto).grow(1f), + ) + if (isEntry) Image(PlayIcon, tags = listOf("animator-entry-badge")) } - - Column( - tags = listOf("animator-node"), - modifier = Modifier - .position(box.x.px, box.y.px) - .size((nodeWidth(box.id, subtitle) * zoom).px) - .background( - 145f, - listOf( - UiGradientStop(0f, AnimatorColors.NodeTop.mixedWith(accent)), - UiGradientStop(1f, AnimatorColors.NodeBottom), - ), - ) - .border(if (selected) 2.px else 1.px, accent, 5f) - .shadow(UiShadow(offset = UiVec3(0f, 2f), blur = 9f, color = AnimatorColors.NodeShadow)) - .padding((5f * zoom).px) - .gap((2f * zoom).px) - .input(hoverable = true, clickable = true, draggable = true) - .onPlaced(onMeasured) - .onPress { event -> - if (event.button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { - onSelect() - onContextMenu(event.x, event.y) - event.consume() - return@onPress - } - if (event.button != GLFW.GLFW_MOUSE_BUTTON_LEFT) return@onPress - onSelect() - onPressed(event.modifiers and GLFW.GLFW_MOD_CONTROL != 0) - event.consume() - } - .onDrag { event -> - onDragged(event) - event.consume() - } - .onRelease { event -> - onReleased() - event.consume() - }, - ) { - Row(modifier = Modifier.size(100.percent).gap((4f * zoom).px).alignItems(vertical = UiAlign.CENTER)) { - Image( - if (anyState) AnyStateIcon else StateIcon, - modifier = Modifier.size((9f * zoom).px, (9f * zoom).px), - ) - NodeLine( - if (anyState) "Any State" else box.id, - 10f * zoom, - if (anyState) AnimatorColors.AnyState else AnimatorColors.Text, - ) - } - if (!anyState) { - NodeLine(subtitle.orEmpty(), 8f * zoom, AnimatorColors.Muted) - Row(modifier = Modifier.size(100.percent).gap((3f * zoom).px).alignItems(vertical = UiAlign.CENTER)) { - playMode?.let { PlayModeChip(it, zoom) } - Box(modifier = Modifier.size(0.px, 1.px).grow(1f)) - if (isEntry) EntryBadge(zoom) - } - } + if (anyState) return + Row(tags = listOf("animator-state-row"), modifier = Modifier.size(100.percent).alignItems(vertical = UiAlign.CENTER)) { + Text(subtitle.orEmpty(), tags = listOf("graph-node-subtitle"), modifier = Modifier.size(0.px, UiLength.Auto).grow(1f)) + playMode?.let { Text(it.name.lowercase(), tags = listOf("animator-play-mode")) } } } -/** The playback mode, as a chip: on its own line it reads as the tail of a wrapped animation name. */ -@Composable -private fun PlayModeChip(playMode: AnimationPlayMode, zoom: Float) { - Text( - playMode.name.lowercase(), - modifier = Modifier - .background(AnimatorColors.Chip) - .border(1.px, AnimatorColors.Border, 3f) - .borderRadius(3f) - .padding((4f * zoom).px, (1f * zoom).px) - .fontSize(7f * zoom) - .foreground(AnimatorColors.ChipText) - .textWrap(false), - ) -} - -/** Marks the state a controller starts in, in the corner where it cannot be hidden by the selection border. */ -@Composable -private fun EntryBadge(zoom: Float) { - Image( - PlayIcon, - modifier = Modifier - .size((13f * zoom).px, (13f * zoom).px) - .background(AnimatorColors.Panel) - .border(1.px, AnimatorColors.NodeEntry, 3f) - .borderRadius(3f) - .padding((2f * zoom).px), - ) -} - -@Composable -private fun NodeLine(text: String, fontSize: Float, color: UiColor) { - Text( - text, - modifier = Modifier - .size(100.percent) - .fontSize(fontSize) - .foreground(color) - .textWrap(false) - .textOverflow(UiTextOverflow.DOTS), - ) -} - @Composable private fun TransitionLabel( transition: AnimationControllerTransitionSpec, selected: Boolean, - zoom: Float, x: Float, y: Float, onSelect: () -> Unit, @@ -564,11 +263,9 @@ private fun TransitionLabel( val label = transition.condition.source.ifBlank { animatorText("always") } Text( if (label.length > 20) label.take(19) + "…" else label, - tags = listOf("animator-edge-label") + if (selected) listOf("selected") else emptyList(), + tags = listOfNotNull("graph-link-label", "selected".takeIf { selected }), modifier = Modifier - .position((x - 24f * zoom).px, (y - 7f * zoom).px) - .fontSize(8f * zoom) - .foreground(if (selected) AnimatorColors.EdgeSelected else AnimatorColors.Muted) + .position((x - 24f).px, (y - 7f).px) .input(hoverable = true, clickable = true) .onClick { event -> if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onSelect() @@ -577,357 +274,142 @@ private fun TransitionLabel( ) } -/** - * Handles the graph shows for the surrounding panels. - */ -internal data class CanvasChrome( - val layersFolded: Boolean, - val foldLayers: @Composable () -> Unit, -) +/** The keys the graph answers besides the canvas's own: delete, drop the selection, entry, a new state. */ +private fun handleKey( + document: HollowIdeAnimatorDocument, + layerId: String, + controller: AnimationControllerLayerSpec, + selection: AnimatorSelection, + onSelect: (AnimatorSelection) -> Unit, + key: Int, + control: Boolean, + middle: () -> GraphPoint, +): Boolean { + when { + key == GLFW.GLFW_KEY_DELETE -> { + when (selection) { + is AnimatorSelection.State -> document.edit { + if (selection.stateId == ANY_STATE) it.withoutAnyState(layerId) else it.withoutState(layerId, selection.stateId) + } -/** - * Handles that fold the panels, and one that puts the view back. - */ -@Composable -private fun CanvasChromeButtons(chrome: CanvasChrome, view: AnimatorCanvasState?) { - Row(modifier = Modifier.position(6.px, 6.px).gap(4.px)) { - chrome.foldLayers() - if (view != null) { - AnimatorIconButton(ResetIcon, animatorText("reset_view"), size = 11f) { view.reset() } + is AnimatorSelection.Transition -> document.edit { it.withoutTransitionAt(layerId, selection.index) } + else -> return false + } + onSelect(AnimatorSelection.Layer(layerId)) } - } -} -@Composable -private fun MiniMap( - positions: Map, - selected: String?, - modifier: Modifier, - onJumpTo: (GraphPoint) -> Unit, -) { - if (positions.isEmpty()) return + key == GLFW.GLFW_KEY_ESCAPE -> onSelect(AnimatorSelection.None) - val minX = positions.values.minOf { it.x } - val maxX = positions.values.maxOf { it.x } + NodeMinWidth - val minY = positions.values.minOf { it.y } - val maxY = positions.values.maxOf { it.y } + NodeHeight - val scale = minOf( - (MiniMapWidth - 8f) / (maxX - minX).coerceAtLeast(1f), - (MiniMapHeight - 8f) / (maxY - minY).coerceAtLeast(1f), - ) + key == GLFW.GLFW_KEY_E -> { + val target = selection as? AnimatorSelection.State ?: return false + document.edit { it.withEntryState(layerId, target.stateId) } + } - Box( - mode = UiBoxMode.STACK, - modifier = modifier - .size(MiniMapWidth.px, MiniMapHeight.px) - .background(AnimatorColors.Panel) - .border(1.px, AnimatorColors.Border, 4f) - .borderRadius(4f), - ) { - positions.forEach { (stateId, point) -> - MiniMapMark( - stateId = stateId, - selected = stateId == selected, - x = 4f + (point.x - minX) * scale, - y = 4f + (point.y - minY) * scale, - width = (NodeMinWidth * scale).coerceAtLeast(4f), - height = (NodeHeight * scale).coerceAtLeast(3f), - onClick = { onJumpTo(point) }, - ) + key == GLFW.GLFW_KEY_INSERT || control && key == GLFW.GLFW_KEY_N -> { + val id = freeStateId(controller) + document.edit { it.withState(layerId, ClipStateSpec(id = id, animation = id), at = middle()) } + onSelect(AnimatorSelection.State(layerId, id)) } + + else -> return false } + return true } -@Composable -private fun MiniMapMark( - stateId: String, - selected: Boolean, - x: Float, - y: Float, - width: Float, - height: Float, - onClick: () -> Unit, -) { - Box( - tags = listOf("animator-minimap-mark"), - modifier = Modifier - .position(x.px, y.px) - .size(width.px, height.px) - .background( - when { - selected -> AnimatorColors.NodeSelected - stateId == ANY_STATE -> AnimatorColors.AnyState - else -> AnimatorColors.Edge - } - ) - .input(hoverable = true, clickable = true) - .tooltipOnHover(if (stateId == ANY_STATE) animatorText("any_state_node") else stateId) - .onPress { event -> - if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onClick() - event.consume() - }, - ) -} - -private data class EdgeTarget(val index: Int) - -private data class CanvasMenu( - val target: Any?, - val screenX: Float, - val screenY: Float, - val graphX: Float, - val graphY: Float, -) - @Composable private fun CanvasContextMenu( - menu: CanvasMenu?, + menu: CanvasMenu, controller: AnimationControllerLayerSpec, layerId: String, document: HollowIdeAnimatorDocument, - view: AnimatorCanvasState, + view: GraphViewState, onSelect: (AnimatorSelection) -> Unit, onDismiss: () -> Unit, ) { - if (menu == null) return - ContextMenu( id = "animator-canvas-context", anchorBounds = UiRect(menu.screenX, menu.screenY, 0f, 0f), - items = buildList { - when (val target = menu.target) { - ANY_STATE -> add(UiDropdownItem(animatorText("delete_any_state")) { - document.edit { it.withoutAnyState(layerId) } - onSelect(AnimatorSelection.Layer(layerId)) - }) - - is String -> { - add(UiDropdownItem(animatorText("make_entry")) { - document.edit { it.withEntryState(layerId, target) } - }) - add(UiDropdownItem(animatorText("make_any_state")) { - document.edit { it.withStateAsAnyState(layerId, target) } - onSelect(AnimatorSelection.State(layerId, ANY_STATE)) - }) - add(UiDropdownItem(animatorText("delete_state")) { - document.edit { it.withoutState(layerId, target) } - onSelect(AnimatorSelection.Layer(layerId)) - }) - } - - is EdgeTarget -> add(UiDropdownItem(animatorText("delete_transition")) { - document.edit { it.withoutTransitionAt(layerId, target.index) } - onSelect(AnimatorSelection.Layer(layerId)) - }) - - else -> { - val kinds = AnimatorStateTypes.all.filter { it.createDefault != null } - kinds.forEach { type -> - val create = type.createDefault ?: return@forEach - val label = if (kinds.size == 1) animatorText("add_state") - else "${animatorText("add_state")}: ${type.title()}" - - add(UiDropdownItem(label) { - val id = freeStateId(controller) - document.edit { - it.withState(layerId, create(id), at = GraphPoint(menu.graphX, menu.graphY)) - } - onSelect(AnimatorSelection.State(layerId, id)) - }) - } - if (ANY_STATE !in document.animator.nodeLayout(layerId).keys && - controller.transitions.none { it.from == ANY_STATE } - ) { - add(UiDropdownItem(animatorText("add_any_state")) { - document.edit { it.withAnyStateAt(layerId, GraphPoint(menu.graphX, menu.graphY)) } - onSelect(AnimatorSelection.State(layerId, ANY_STATE)) - }) - } - add(UiDropdownItem(animatorText("reset_view")) { view.reset() }) - } - } + items = when (val target = menu.target) { + is CanvasMenuTarget.State -> stateMenu(document, layerId, target.stateId, onSelect) + is CanvasMenuTarget.Transition -> listOf(UiDropdownItem(animatorText("delete_transition")) { + document.edit { it.withoutTransitionAt(layerId, target.index) } + onSelect(AnimatorSelection.Layer(layerId)) + }) + + CanvasMenuTarget.Empty -> addStateItems(document, layerId, controller, menu.at, onSelect) + + UiDropdownItem(animatorText("reset_view")) { view.reset() } }, onExpandedChange = { if (!it) onDismiss() }, ) } -private fun UiCanvasDrawScope.drawGrid(view: AnimatorCanvasState) { - val paint = UiPaint.Color(AnimatorColors.Grid) - val step = GridStep * view.zoom - if (step < 4f) return - - var x = view.panX.mod(step) - while (x < size.width) { - drawRect(UiRect(x, 0f, 1f, size.height), paint) - x += step - } - var y = view.panY.mod(step) - while (y < size.height) { - drawRect(UiRect(0f, y, size.width, 1f), paint) - y += step - } -} - -/** - * Draws a sampled curve, arrowhead included, with every segment clipped to the canvas. - */ -private fun UiCanvasDrawScope.drawCurve(points: FloatArray, zoom: Float, color: UiColor) { - val width = (1.5f * zoom).coerceIn(1f, 3f) - for (index in 0 until points.size / 2 - 1) { - drawLine(points[index * 2], points[index * 2 + 1], points[index * 2 + 2], points[index * 2 + 3], color, width) +/** What can be done to one state; the scene window offers the same. */ +internal fun stateMenu( + document: HollowIdeAnimatorDocument, + layerId: String, + stateId: String, + onSelect: (AnimatorSelection) -> Unit, +): List { + if (stateId == ANY_STATE) { + return listOf(UiDropdownItem(animatorText("delete_any_state")) { + document.edit { it.withoutAnyState(layerId) } + onSelect(AnimatorSelection.Layer(layerId)) + }) } - - val head = ArrowSize * zoom - val last = points.size - 2 - val angle = atan2(points[last + 1] - points[last - 1], points[last] - points[last - 2]) - val tipX = points[last] - val tipY = points[last + 1] - drawLine(tipX, tipY, tipX - head * cos(angle - ARROW_SPREAD), tipY - head * sin(angle - ARROW_SPREAD), color, width) - drawLine(tipX, tipY, tipX - head * cos(angle + ARROW_SPREAD), tipY - head * sin(angle + ARROW_SPREAD), color, width) + return listOf( + UiDropdownItem(animatorText("make_entry")) { document.edit { it.withEntryState(layerId, stateId) } }, + UiDropdownItem(animatorText("make_any_state")) { + document.edit { it.withStateAsAnyState(layerId, stateId) } + onSelect(AnimatorSelection.State(layerId, ANY_STATE)) + }, + UiDropdownItem(animatorText("delete_state")) { + document.edit { it.withoutState(layerId, stateId) } + onSelect(AnimatorSelection.Layer(layerId)) + }, + ) } -private fun UiCanvasDrawScope.drawLine( - x1: Float, - y1: Float, - x2: Float, - y2: Float, - color: UiColor, - width: Float = 1.5f, -) { - val clipped = clipToBounds(x1, y1, x2, y2, size.width, size.height) ?: return - val shape = GenericShape { - moveTo(clipped[0], clipped[1]) - lineTo(clipped[2], clipped[3]) +/** One item per kind of state that can be made, placed at [at], and the Any State node while there is none. */ +internal fun addStateItems( + document: HollowIdeAnimatorDocument, + layerId: String, + controller: AnimationControllerLayerSpec, + at: GraphPoint, + onSelect: (AnimatorSelection) -> Unit, +): List = buildList { + val kinds = AnimatorStateTypes.all.filter { it.createDefault != null } + kinds.forEach { type -> + val create = type.createDefault ?: return@forEach + val label = if (kinds.size == 1) animatorText("add_state") else "${animatorText("add_state")}: ${type.title()}" + add(UiDropdownItem(label) { + val id = freeStateId(controller) + document.edit { it.withState(layerId, create(id), at = at) } + onSelect(AnimatorSelection.State(layerId, id)) + }) } - drawShape(shape, bounds, UiPaint.Color(color), UiDrawStyle.Stroke(width)) -} - -private fun clipToBounds( - x1: Float, - y1: Float, - x2: Float, - y2: Float, - width: Float, - height: Float, -): FloatArray? { - val dx = x2 - x1 - val dy = y2 - y1 - var enter = 0f - var exit = 1f - - val checks = arrayOf(-dx to (x1 - 0f), dx to (width - x1), -dy to (y1 - 0f), dy to (height - y1)) - checks.forEach { (p, q) -> - if (p == 0f) { - if (q < 0f) return null - } else { - val r = q / p - if (p < 0f) { - if (r > exit) return null - if (r > enter) enter = r - } else { - if (r < enter) return null - if (r < exit) exit = r - } - } + if (ANY_STATE !in document.animator.nodeLayout(layerId).keys && controller.transitions.none { it.from == ANY_STATE }) { + add(UiDropdownItem(animatorText("add_any_state")) { + document.edit { it.withAnyStateAt(layerId, at) } + onSelect(AnimatorSelection.State(layerId, ANY_STATE)) + }) } - - return floatArrayOf(x1 + enter * dx, y1 + enter * dy, x1 + exit * dx, y1 + exit * dy) } -private fun AnimationControllerLayerSpec.edgeCurves(boxes: Map): List = +/** Every transition between two placed states, as a curve on the canvas, keyed by its index. */ +private fun AnimationControllerLayerSpec.transitionCurves(boxes: Map, zoom: Float) = transitions.mapIndexedNotNull { index, transition -> val from = boxes[transition.from] ?: return@mapIndexedNotNull null val to = boxes[transition.to] ?: return@mapIndexedNotNull null - if (from.id == to.id) return@mapIndexedNotNull null + if (transition.from == transition.to) return@mapIndexedNotNull null val twoWay = transitions.any { it.from == transition.to && it.to == transition.from } val side = if (twoWay && transition.from > transition.to) -1f else 1f - EdgeCurve(index, curveBetween(from, to, side, twoWay)) + val offset = if (twoWay) ParallelOffset * zoom * side else 0f + index to GraphCurves.betweenBoxes(from, to, offset, gap = ARROW_SIZE * zoom * 0.5f) } -/** - * A link the way node editors draw one: out of a side, in through a side, eased in and out. - */ -private fun curveBetween(from: NodeBox, to: NodeBox, side: Float, twoWay: Boolean): FloatArray { - val horizontal = abs(to.centerX - from.centerX) >= abs(to.centerY - from.centerY) - val offset = if (twoWay) ParallelOffset * side else 0f - - val start = from.sidePoint(towards = to, horizontal = horizontal, along = offset) - val end = to.sidePoint(towards = from, horizontal = horizontal, along = offset, gap = ArrowSize * 0.5f) - - val reach = if (horizontal) { - (abs(end[0] - start[0]) * 0.6f).coerceIn(CurveBow, 220f) - } else { - (abs(end[1] - start[1]) * 0.6f).coerceIn(CurveBow, 220f) - } - val startHandleX = start[0] + if (horizontal) reach * start[2] else 0f - val startHandleY = start[1] + if (horizontal) 0f else reach * start[3] - val endHandleX = end[0] + if (horizontal) reach * end[2] else 0f - val endHandleY = end[1] + if (horizontal) 0f else reach * end[3] - - val points = FloatArray((EdgeSamples + 1) * 2) - for (step in 0..EdgeSamples) { - val t = step / EdgeSamples.toFloat() - val inverse = 1f - t - val a = inverse * inverse * inverse - val b = 3f * inverse * inverse * t - val c = 3f * inverse * t * t - val d = t * t * t - points[step * 2] = a * start[0] + b * startHandleX + c * endHandleX + d * end[0] - points[step * 2 + 1] = a * start[1] + b * startHandleY + c * endHandleY + d * end[1] - } - return points -} - -/** - * Where a link attaches to this box, and which way it leaves. - */ -private fun NodeBox.sidePoint( - towards: NodeBox, - horizontal: Boolean, - along: Float, - gap: Float = 0f, -): FloatArray = if (horizontal) { - val right = towards.centerX >= centerX - floatArrayOf( - if (right) x + width + gap else x - gap, - (centerY + along).coerceIn(y + 4f, y + height - 4f), - if (right) 1f else -1f, - 0f, - ) -} else { - val below = towards.centerY >= centerY - floatArrayOf( - (centerX + along).coerceIn(x + 4f, x + width - 4f), - if (below) y + height + gap else y - gap, - 0f, - if (below) 1f else -1f, - ) -} - -private fun List.nearest(x: Float, y: Float): EdgeCurve? = - mapNotNull { edge -> - val distance = (0 until edge.points.size / 2 - 1).minOfOrNull { index -> - distanceToSegment( - x, y, - edge.points[index * 2], edge.points[index * 2 + 1], - edge.points[index * 2 + 2], edge.points[index * 2 + 3], - ) - } ?: Float.MAX_VALUE - if (distance <= EdgeHitRadius) edge to distance else null - }.minByOrNull { it.second }?.first - -private fun distanceToSegment(x: Float, y: Float, x1: Float, y1: Float, x2: Float, y2: Float): Float { - val dx = x2 - x1 - val dy = y2 - y1 - val lengthSquared = dx * dx + dy * dy - if (lengthSquared == 0f) return hypot(x - x1, y - y1) - val t = (((x - x1) * dx + (y - y1) * dy) / lengthSquared).coerceIn(0f, 1f) - return hypot(x - (x1 + t * dx), y - (y1 + t * dy)) -} - -private fun NodeBox.contains(x: Float, y: Float): Boolean = - x >= this.x && x <= this.x + width && y >= this.y && y <= this.y + height +private fun AnimationControllerLayerSpec.state(stateId: String): AnimationControllerStateSpec? = + states.firstOrNull { it.id == stateId } private fun AnimationControllerStateSpec?.subtitle(): String? = when (this) { null -> null @@ -956,17 +438,3 @@ internal fun freeStateId(controller: AnimationControllerLayerSpec): String { while ("state_$index" in taken) index++ return "state_$index" } - -private data class GraphKey( - val zoom: Float, - val panX: Float, - val panY: Float, - val revision: Int, - val selection: AnimatorSelection, - val linkingFrom: String?, - val linkX: Float, - val linkY: Float, - val hoveredEdge: Int?, -) - -private const val ARROW_SPREAD = 0.5f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorSceneTree.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorSceneTree.kt new file mode 100644 index 000000000..a0db22cd5 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorSceneTree.kt @@ -0,0 +1,144 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.animator + +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.ui.ide.SceneTarget +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeAnimatorDocument +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiKeyInput +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTreeItem +import ru.hollowhorizon.hollowengine.common.models.ANY_STATE +import ru.hollowhorizon.hollowengine.common.models.AnimatorLayerTypes +import ru.hollowhorizon.hollowengine.common.models.GraphPoint +import ru.hollowhorizon.hollowengine.common.models.controller +import ru.hollowhorizon.hollowengine.common.models.nodeAt +import ru.hollowhorizon.hollowengine.common.models.withLayer +import ru.hollowhorizon.hollowengine.common.models.withoutAnyState +import ru.hollowhorizon.hollowengine.common.models.withoutLayer +import ru.hollowhorizon.hollowengine.common.models.withoutState + +private const val LayerIcon = "hollowengine:textures/gui/icons/layers.svg" +private const val StateIcon = "hollowengine:textures/gui/icons/state.svg" +private const val AnyStateIcon = "hollowengine:textures/gui/icons/any_state.svg" + +/** Tree row ids: a layer, and a state under it, which is only unique together with its layer. */ +private const val LayerRow = "layer:" +private const val StateRow = "state:" + +private fun layerRow(layerId: String) = LayerRow + layerId +private fun stateRow(layerId: String, stateId: String) = "$StateRow$layerId/$stateId" + +/** The row a tree id stands for, as the selection it makes. */ +private fun selectionOf(row: String): AnimatorSelection? = when { + row.startsWith(LayerRow) -> AnimatorSelection.Layer(row.removePrefix(LayerRow)) + row.startsWith(StateRow) -> row.removePrefix(StateRow).split('/', limit = 2) + .takeIf { it.size == 2 }?.let { (layer, state) -> AnimatorSelection.State(layer, state) } + + else -> null +} + +internal fun animatorSceneTarget( + document: HollowIdeAnimatorDocument, + selection: AnimatorSelection, + expanded: Collection, + onToggleLayer: (String) -> Unit, + onSelect: (AnimatorSelection) -> Unit, +) = SceneTarget( + id = "animator-layers", + items = buildList { + document.animator.layers.forEach { layer -> + val controller = document.animator.controller(layer.id) + val states = controller?.states?.map { it.id }.orEmpty() + + listOfNotNull(ANY_STATE.takeIf { document.animator.nodeAt(layer.id, ANY_STATE) != null }) + add( + UiTreeItem( + id = layerRow(layer.id), + label = "${layer.id} · ${layer.kindName()}", + depth = 0, + payload = layer, + icon = LayerIcon, + hasChildren = states.isNotEmpty(), + expanded = layer.id in expanded, + selected = selection == AnimatorSelection.Layer(layer.id), + ) + ) + if (layer.id !in expanded) return@forEach + states.forEach { stateId -> + add( + UiTreeItem( + id = stateRow(layer.id, stateId), + label = if (stateId == ANY_STATE) animatorText("any_state_node") else stateId, + depth = 1, + payload = null, + icon = if (stateId == ANY_STATE) AnyStateIcon else StateIcon, + selected = selection == AnimatorSelection.State(layer.id, stateId), + ) + ) + } + } + }, + onSelect = { row -> onSelect(row?.let(::selectionOf) ?: AnimatorSelection.None) }, + onToggle = { row -> if (row.startsWith(LayerRow)) onToggleLayer(row.removePrefix(LayerRow)) }, + hint = animatorText("no_layers").takeIf { document.animator.layers.isEmpty() }, + menu = { row -> sceneMenu(document, row?.let(::selectionOf), onSelect) }, + onKey = { input -> handleSceneKey(document, selection, onSelect, input) }, +) + +/** What a right click offers: adding a layer anywhere, and what can be done to the row under it. */ +private fun sceneMenu( + document: HollowIdeAnimatorDocument, + target: AnimatorSelection?, + onSelect: (AnimatorSelection) -> Unit, +): List { + val addLayer = UiDropdownItem( + animatorText("add_layer"), + children = AnimatorLayerTypes.all.mapNotNull { type -> + val createDefault = type.createDefault ?: return@mapNotNull null + UiDropdownItem(type.title()) { + val id = freeLayerId(document.animator, type.id.substringAfterLast('/')) + document.edit { it.withLayer(createDefault().withCommon(id = id)) } + onSelect(AnimatorSelection.Layer(id)) + } + }, + ) + return when (target) { + is AnimatorSelection.Layer -> buildList { + add(addLayer) + document.animator.controller(target.layerId)?.let { controller -> + addAll(addStateItems(document, target.layerId, controller, GraphPoint(), onSelect)) + } + add(UiDropdownItem(animatorText("delete_layer"), separatorBefore = true) { + document.edit { it.withoutLayer(target.layerId) } + onSelect(AnimatorSelection.None) + }) + } + + is AnimatorSelection.State -> stateMenu(document, target.layerId, target.stateId, onSelect) + else -> listOf(addLayer) + } +} + +private fun handleSceneKey( + document: HollowIdeAnimatorDocument, + selection: AnimatorSelection, + onSelect: (AnimatorSelection) -> Unit, + input: UiKeyInput, +): Boolean { + if (input.key != GLFW.GLFW_KEY_DELETE) return false + when (selection) { + is AnimatorSelection.Layer -> { + document.edit { it.withoutLayer(selection.layerId) } + onSelect(AnimatorSelection.None) + } + + is AnimatorSelection.State -> { + document.edit { + if (selection.stateId == ANY_STATE) it.withoutAnyState(selection.layerId) + else it.withoutState(selection.layerId, selection.stateId) + } + onSelect(AnimatorSelection.Layer(selection.layerId)) + } + + else -> return false + } + return true +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt index 4a1d46a08..fa0351fe1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/AnimatorWidgets.kt @@ -8,25 +8,6 @@ import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover internal const val AnimatorStylesheet = "hollowengine:ui/styles/animator-editor.hss" -@Composable -internal fun AnimatorButton( - label: String, - modifier: Modifier = Modifier, - color: UiColor = AnimatorColors.Text, - onClick: () -> Unit, -) { - Box( - mode = UiBoxMode.STACK, - tags = listOf("animator-button"), - modifier = modifier.input(hoverable = true, clickable = true).onClick { event -> - if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onClick() - event.consume() - }, - ) { - Text(label, tags = listOf("animator-button-label"), modifier = Modifier.foreground(color)) - } -} - @Composable internal fun AnimatorIconButton( icon: String, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt index 99bd76258..a6c8506af 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt @@ -1,48 +1,48 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.animator -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.delay -import org.lwjgl.glfw.GLFW -import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.Column +import ru.hollowhorizon.hollowengine.client.ui.Modifier +import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.focusScope +import ru.hollowhorizon.hollowengine.client.ui.gap +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphViewState import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeOpenFile +import ru.hollowhorizon.hollowengine.client.ui.ide.PublishScene import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeAnimatorDocument import ru.hollowhorizon.hollowengine.client.ui.inspector.PublishInspector -import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect -import ru.hollowhorizon.hollowengine.client.ui.style.UiTextOverflow -import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu -import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem -import ru.hollowhorizon.hollowengine.common.models.* -import kotlin.time.Duration.Companion.milliseconds +import ru.hollowhorizon.hollowengine.client.ui.padding +import ru.hollowhorizon.hollowengine.client.ui.percent +import ru.hollowhorizon.hollowengine.client.ui.px +import ru.hollowhorizon.hollowengine.client.ui.size +import ru.hollowhorizon.hollowengine.client.ui.style +import ru.hollowhorizon.hollowengine.common.models.Animator +import ru.hollowhorizon.hollowengine.common.models.controller private const val AutoSaveDelayMillis = 900L -private const val LayerListWidth = 190f - -private const val MinPanelWidth = 150f -private const val MaxPanelWidth = 420f /** * The editor for a `.animator` file. * - * The stack of layers on the left, and what the selected layer is: a graph for a controller, nothing but - * parameters for a clip. A layer with no states has no graph to show, so it does not get an empty one. + * The stack of layers lives in the scene window, with the states of each controller under it; the + * editor itself is the graph of the layer being worked on. A clip layer has no states, so it has no + * graph, and the inspector is all there is to it. */ @Composable internal fun HollowIdeAnimatorEditor(file: HollowIdeOpenFile) { val document = file.document as HollowIdeAnimatorDocument - val view = remember(document) { AnimatorCanvasState() } + val view = remember(document) { GraphViewState() } var selection by remember(document) { mutableStateOf(AnimatorSelection.None) } var openLayer by remember(document) { mutableStateOf(document.animator.layers.firstOrNull()?.id) } - var layersFolded by remember(document) { mutableStateOf(false) } - - var layersSize by remember(document) { mutableStateOf(LayerListWidth) } - val layersWidth = remember(document) { SpringFloat(LayerListWidth) } - layersWidth.target = if (layersFolded) 0f else layersSize - - LaunchedEffect(document) { - while (true) { - withFrameNanos { frame -> layersWidth.advance(frame) } - } - } + val expanded = remember(document) { mutableStateListOf().apply { addAll(document.animator.layers.map { it.id }) } } LaunchedEffect(document.revision) { file.updateDirty(document.isModified) @@ -53,11 +53,15 @@ internal fun HollowIdeAnimatorEditor(file: HollowIdeOpenFile) { val layers = document.animator.layers val current = openLayer?.takeIf { id -> layers.any { it.id == id } } ?: layers.firstOrNull()?.id - val graphed = current?.let { document.animator.controller(it) } != null fun retarget(next: AnimatorSelection) { selection = next - (next as? AnimatorSelection.Layer)?.let { openLayer = it.layerId } + when (next) { + is AnimatorSelection.Layer -> openLayer = next.layerId + is AnimatorSelection.State -> openLayer = next.layerId + is AnimatorSelection.Transition -> openLayer = next.layerId + AnimatorSelection.None -> Unit + } } val shown = if (selection != AnimatorSelection.None) selection @@ -65,194 +69,35 @@ internal fun HollowIdeAnimatorEditor(file: HollowIdeOpenFile) { PublishInspector(source = "animator-${file.path}", key = shown) { animatorInspectorTarget(document, shown, ::retarget) } - - val foldButton: @Composable () -> Unit = { - AnimatorIconButton( - icon = if (layersFolded) MaximizeIcon else MinimizeIcon, - tooltip = if (layersFolded) animatorText("show_layers") else animatorText("hide_layers"), - size = 11f, - ) { layersFolded = !layersFolded } + PublishScene(source = "animator-${file.path}", key = SceneKey(document.revision, shown, expanded.toList())) { + animatorSceneTarget(document, shown, expanded, { layerId -> if (!expanded.remove(layerId)) expanded += layerId }, ::retarget) } - Row( - modifier = Modifier.size(100.percent, 100.percent) - .style(AnimatorStylesheet) - .background(AnimatorColors.Canvas) - .focusScope(), + val controller = current?.let { document.animator.controller(it) } + Column( + modifier = Modifier.size(100.percent, 100.percent).style(AnimatorStylesheet).focusScope(), ) { - Box(mode = UiBoxMode.STACK, modifier = Modifier.size(layersWidth.value.px, 100.percent).clip(true)) { - LayerList( - document = document, - openLayer = current, - selection = selection, - onOpen = { id -> - openLayer = id - selection = AnimatorSelection.Layer(id) - }, - modifier = Modifier.size(layersSize.px, 100.percent), - ) - } - - if (!layersFolded) { - Splitter(layersSize) { next -> - layersSize = next.coerceIn(MinPanelWidth, MaxPanelWidth) - layersWidth.snapTo(layersSize) - } - } - - if (graphed) { + if (current != null && controller != null) { AnimatorGraphCanvas( document = document, layerId = current, + controller = controller, selection = selection, view = view, - chrome = CanvasChrome(layersFolded = layersFolded, foldLayers = foldButton), onSelect = ::retarget, - modifier = Modifier.size(0.px, 100.percent).grow(1f), + modifier = Modifier.size(100.percent, 100.percent), ) } else { - Column(modifier = Modifier.size(0.px, 100.percent).grow(1f).padding(10.px).gap(6.px)) { - Row(modifier = Modifier.size(100.percent).gap(6.px).alignItems(vertical = UiAlign.CENTER)) { - foldButton() - Text( - current ?: animatorText("no_layers"), - modifier = Modifier.fontSize(11f).foreground(AnimatorColors.Text), - ) - } - Text( - animatorText("no_graph"), - modifier = Modifier.fontSize(9f).foreground(AnimatorColors.Muted), - ) + Column(tags = listOf("animator-empty"), modifier = Modifier.padding(10.px).gap(6.px)) { + Text(current ?: animatorText("no_layers"), tags = listOf("animator-empty-title")) + Text(animatorText(if (current == null) "no_layers_hint" else "no_graph"), tags = listOf("animator-empty-hint")) } } } } -/** - * Drag to give a panel more or less room. - */ -@Composable -private fun Splitter(width: Float, onResize: (Float) -> Unit) { - val start = remember { floatArrayOf(width) } - Box( - tags = listOf("animator-splitter"), - modifier = Modifier - .input(hoverable = true, draggable = true) - .onPress { start[0] = width } - .onDrag { event -> - onResize(start[0] + event.dragTotalX) - event.consume() - }, - ) -} - -@Composable -private fun LayerList( - document: HollowIdeAnimatorDocument, - openLayer: String?, - selection: AnimatorSelection, - onOpen: (String) -> Unit, - modifier: Modifier, -) { - var addButton by remember { mutableStateOf(UiRect.Zero) } - var addMenuOpen by remember { mutableStateOf(false) } - - Column( - modifier = modifier - .background(AnimatorColors.Panel) - .border(1.px, AnimatorColors.Border) - .padding(8.px) - .gap(4.px), - ) { - Text(animatorText("layers"), modifier = Modifier.fontSize(11f).foreground(AnimatorColors.Muted)) - - Column(modifier = Modifier.size(100.percent, 0.px).grow(1f).gap(3.px).scrollable(horizontal = false)) { - document.animator.layers.forEach { layer -> - LayerRow( - layer = layer, - open = layer.id == openLayer, - selected = selection == AnimatorSelection.Layer(layer.id), - onOpen = { onOpen(layer.id) }, - onDelete = { document.edit { it.withoutLayer(layer.id) } }, - ) - } - - AnimatorButton( - animatorText("add_layer"), - modifier = Modifier.size(100.percent, 24.px).onPlaced { addButton = it }, - ) { - addMenuOpen = true - } - } - } - - if (addMenuOpen) { - ContextMenu( - id = "animator-add-layer", - anchorBounds = addButton, - items = AnimatorLayerTypes.all.mapNotNull { type -> - val createDefault = type.createDefault ?: return@mapNotNull null - UiDropdownItem(type.title()) { - val id = freeLayerId(document.animator, type.id.substringAfterLast('/')) - document.edit { it.withLayer(createDefault().withCommon(id = id)) } - onOpen(id) - } - }, - onExpandedChange = { if (!it) addMenuOpen = false }, - ) - } -} - -@Composable -private fun LayerRow( - layer: AnimatorLayerSpec, - open: Boolean, - selected: Boolean, - onOpen: () -> Unit, - onDelete: () -> Unit, -) { - Row( - tags = listOf("animator-layer-row") + - (if (open) listOf("open") else emptyList()) + - (if (selected) listOf("selected") else emptyList()), - modifier = Modifier - .input(hoverable = true, clickable = true) - .onPress { event -> - if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onOpen() - event.consume() - }, - ) { - Column(modifier = Modifier.size(0.px, 100.percent).grow(1f).clip(true)) { - Text( - layer.id, - modifier = Modifier.size(100.percent).fontSize(9f).foreground(AnimatorColors.Text) - .textWrap(false).textOverflow(UiTextOverflow.DOTS), - ) - Text( - "${layer.kindName()} · ${layer.priority}", - modifier = Modifier.size(100.percent).fontSize(8f).foreground(AnimatorColors.Muted) - .textWrap(false).textOverflow(UiTextOverflow.DOTS), - ) - } - DeleteHandle(onDelete) - } -} - -@Composable -private fun DeleteHandle(onDelete: () -> Unit) { - Box( - mode = UiBoxMode.STACK, - tags = listOf("animator-delete"), - modifier = Modifier - .input(hoverable = true, clickable = true) - .onPress { event -> - if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onDelete() - event.consume() - }, - ) { - Text("×", tags = listOf("animator-delete-label")) - } -} +/** What the scene tree is built from; a new one of these rebuilds it. */ +private data class SceneKey(val revision: Int, val selection: AnimatorSelection, val expanded: List) internal fun freeLayerId(animator: Animator, prefix: String): String { val taken = animator.layers.map { it.id }.toSet() diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/animator_editor.json b/runtime/src/main/lang/en_us/hollowengine/gui/animator_editor.json index eb948e7f3..73bbcadca 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/animator_editor.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/animator_editor.json @@ -1,18 +1,13 @@ { - "layers": "Layers", - "layers_empty": "Empty. Add a layer below.", - "add_layer": "+ Add", + "add_layer": "Add layer", "kind_controller": "Controller", "kind_clip": "Clip", "kind_procedural": "Procedural", - "show_layers": "Show layers", - "hide_layers": "Hide layers", "reset_view": "Reset view", "parameters": "Parameters", "no_graph": "This layer has no graph; its parameters are in the inspector.", "no_layers": "No layers", "nothing_selected": "Nothing selected", - "pick_controller": "Select a controller layer", "layer_removed": "Layer removed", "state_removed": "State removed", "transition_removed": "Transition removed", @@ -61,5 +56,7 @@ "exit_time": "Exit time", "condition": "Condition", "any_state": "any state", - "always": "always" + "always": "always", + "delete_layer": "Delete layer", + "no_layers_hint": "Layers live in the Scene window: right-click there to add one." } diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/ide/windows.json b/runtime/src/main/lang/en_us/hollowengine/gui/ide/windows.json index 79fc86640..be43a2b62 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/ide/windows.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/ide/windows.json @@ -4,5 +4,6 @@ "scene_empty": "Open something with a hierarchy to see it here.", "inspector": "Inspector", "game_viewport": "Game View", - "game_viewport.detached": "The game is only shown while this panel is docked" + "game_viewport.detached": "The game is only shown while this panel is docked", + "scene_add_hint": "Right-click to add one." } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/animator_editor.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/animator_editor.json index 040043572..7f2538ca7 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/animator_editor.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/animator_editor.json @@ -1,18 +1,13 @@ { - "layers": "Слои", - "layers_empty": "Пусто. Добавьте слой ниже.", - "add_layer": "+ Добавить", + "add_layer": "Добавить слой", "kind_controller": "Контроллер", "kind_clip": "Клип", "kind_procedural": "Процедурный", - "show_layers": "Показать слои", - "hide_layers": "Скрыть слои", "reset_view": "Сбросить вид", "parameters": "Параметры", "no_graph": "У этого слоя нет графа, его параметры в инспекторе.", "no_layers": "Слоёв нет", "nothing_selected": "Ничего не выбрано", - "pick_controller": "Выберите слой-контроллер", "layer_removed": "Слой удалён", "state_removed": "Состояние удалено", "transition_removed": "Переход удалён", @@ -61,5 +56,7 @@ "exit_time": "Время завершения", "condition": "Условие", "any_state": "любое состояние", - "always": "всегда" + "always": "всегда", + "delete_layer": "Удалить слой", + "no_layers_hint": "Слои находятся в окне «Сцена»: добавьте слой через правый клик там." } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/windows.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/windows.json index 029efb8bd..9fd067ccd 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/windows.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/ide/windows.json @@ -4,5 +4,6 @@ "scene_empty": "Откройте то, у чего есть иерархия, и она появится здесь.", "inspector": "Инспектор", "game_viewport": "Окно игры", - "game_viewport.detached": "Игра отображается только в прикреплённом режиме" + "game_viewport.detached": "Игра отображается только в прикреплённом режиме", + "scene_add_hint": "Нажмите ПКМ, чтобы добавить." } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss index d45344e8f..1eba549be 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/animator-editor.hss @@ -12,18 +12,6 @@ transition: background 250ms ease-out, border-color 250ms ease-out; } -.animator-button:hover { - background: $bg-pressed; - border-color: $border-strong; -} - -.animator-button-label { - font-size: 9px; - foreground: $text-strong; - text-wrap: false; - text-overflow: dots; -} - .animator-icon-button { padding: 3px; background: transparent; @@ -79,95 +67,64 @@ text-wrap: false; } -.animator-layer-row { - size: 100% 30px; - align-items: center; - gap: 4px; - padding: 4px; - background: $bg-field; - border: 1px alpha($white, 0.1); - border-radius: $radius-small; - cursor: hand; - transition: background 250ms ease-out, border-color 250ms ease-out; -} - -.animator-layer-row:hover { - background: $bg-hover; -} - -.animator-layer-row.open { - background: $row-selected; -} - -.animator-layer-row.selected { - border-color: $accent; -} - -.animator-delete { - size: 18px 18px; - align-items: center; +/* A state of a controller graph; the frame is the graph node's. */ +.animator-state { + padding: 6px 8px; + gap: 5px; justify-content: center; - border-radius: $radius-small; - background: transparent; - cursor: hand; - transition: background 250ms ease-out; } -.animator-delete:hover { - background: $danger; +.animator-state.entry { + border-color: $success; } -.animator-delete-label { - font-size: 11px; - foreground: $danger; - transition: foreground 250ms ease-out; +.animator-state.any-state { + border-color: #9E85EB; } -.animator-delete:hover .animator-delete-label { - foreground: $text-strong; -} - -.animator-splitter { - size: 4px 100%; - background: alpha($white, 0.1); - cursor: resize-horizontal; - transition: background 250ms ease-out; +/* After the kinds: a selected entry state reads as selected. */ +.animator-state.selected { + border-color: $accent; } -.animator-splitter:hover { - background: $accent; +.animator-state-row { + gap: 5px; } -.animator-node { - border-radius: $radius; - cursor: hand; - transition: border-color 250ms ease-out; +.animator-state-icon { + size: 10px 10px; + tint: $text-soft; } -.animator-node:hover { - border-color: $text; +.animator-state.any-state .animator-state-icon { + tint: #9E85EB; } -.animator-minimap-mark { - border-radius: 2px; - cursor: hand; - transition: background 250ms ease-out; +.animator-state.any-state .graph-node-title { + foreground: #9E85EB; } -.animator-edge-label { - padding: 3px; +.animator-play-mode { + padding: 1px 4px; + font-size: 7px; + foreground: $text-soft; background: $bg-field; - border: 1px alpha($white, 0.1); + border: 1px $border; border-radius: $radius-small; - cursor: hand; - transition: background 250ms ease-out, border-color 250ms ease-out; + text-wrap: false; } -.animator-edge-label:hover { - background: $bg-hover; - border-color: $text; +.animator-entry-badge { + size: 10px 10px; + tint: $success; } -.animator-edge-label.selected { - border-color: $accent; +.animator-empty-title { + font-size: $font-size-title; + foreground: $text; +} + +.animator-empty-hint { + font-size: $font-size; + foreground: $text-muted; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss new file mode 100644 index 000000000..4dc02d2ad --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss @@ -0,0 +1,73 @@ +@import "hollowengine:ui/styles/theme.hss"; + +/* A node graph: the canvas, its nodes and the minimap. Editors add tags to nodes for their own kinds. */ + +.graph-canvas { + background: $bg-window; + font-family: $font; + font-size: $font-size; +} + +.graph-node { + background: linear-gradient(180deg, $bg-hover, $bg-panel); + border: 1px $border; + border-radius: $radius; + shadow: 0px 2px 9px 0px $shadow; + cursor: hand; + transition: border-color 250ms ease-out; +} + +.graph-node:hover { + border-color: $border-strong; +} + +.graph-node.selected { + border-color: $accent; + shadow: 0px 0px 5px 0px alpha($accent, 0.22); +} + +.graph-node-title { + font-size: $font-size; + foreground: $text-strong; + text-wrap: false; + text-overflow: dots; +} + +.graph-node-subtitle { + font-size: $font-size-small; + foreground: $text-muted; + text-wrap: false; + text-overflow: dots; +} + +.graph-minimap { + background: alpha($bg-panel, 0.92); + border: 1px $border; + border-radius: $radius; +} + +.graph-minimap-mark { + border-radius: 2px; + cursor: hand; +} + +.graph-link-label { + padding: 2px 4px; + font-size: $font-size-small; + foreground: $text-muted; + background: $bg-field; + border: 1px $border; + border-radius: $radius-small; + cursor: hand; + transition: background 250ms ease-out, border-color 250ms ease-out; +} + +.graph-link-label:hover { + background: $bg-hover; + border-color: $border-strong; +} + +.graph-link-label.selected { + foreground: $text-strong; + border-color: $accent; +} diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss index 0d7c8dc90..53b09ee3c 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/ide.hss @@ -1128,3 +1128,39 @@ foreground: $text-faint; font-size: $font-size-small; } + +/* The scene window with nothing in it: the same dashed frame the inspector uses, in the middle. */ +.scene-empty { + size: 100% 100%; + padding: 12px; + align-items: center center; +} + +.scene-empty-state { + size: 100% fit; + padding: 22px 12px 18px 12px; + gap: 8px; + align-items: center start; + border: 1px $divider; + border-dash: 5px 4px; + border-radius: $radius-large; +} + +.scene-empty-icon { + size: 22px 22px; + tint: $text-muted; +} + +.scene-empty-text { + size: 100% fit; + text-align: center; + foreground: $text-muted; + font-size: $font-size; +} + +.scene-empty-hint { + size: 100% fit; + text-align: center; + foreground: $text-faint; + font-size: $font-size-small; +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/TransformedLayerTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/TransformedLayerTest.kt new file mode 100644 index 000000000..08f83a3b4 --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/TransformedLayerTest.kt @@ -0,0 +1,43 @@ +package ru.hollowhorizon.hollowengine.client.ui + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshots.Snapshot +import kotlin.test.Test +import kotlin.test.assertEquals + +/** + * Nodes ease a change of their transform by default. A layer that follows the pointer, such as the + * world of a graph canvas, opts out, and its children must then be where it moved them on the very + * next frame, both drawn and hit there. + */ +class TransformedLayerTest { + @Test + fun `children of a layer without transitions follow its move and scale on the next frame`() { + var pan by mutableStateOf(0f) + var zoom by mutableStateOf(1f) + HollowUiSurface().use { surface -> + surface.setContent { + Box(mode = UiBoxMode.STACK, modifier = Modifier.size(400.px, 400.px)) { + Box( + mode = UiBoxMode.STACK, + modifier = Modifier.position(0.px, 0.px).size(100.percent, 100.percent) + .pivot(0.px, 0.px).translate(pan, pan).scale(zoom).transition(), + ) { + Box(id = "node", modifier = Modifier.position(10.px, 10.px).size(20.px, 20.px).input(clickable = true)) + } + } + } + surface.frame(400f, 400f, 0f, 0f, 0L) + + pan = 100f + zoom = 2f + Snapshot.sendApplyNotifications() + val frame = surface.frame(400f, 400f, 0f, 0f, 16L) + + // From 100 + 2 * 10 = 120 to 100 + 2 * 30 = 160. + assertEquals("node", frame.hitTest(150f, 150f)?.node?.id) + } + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewStateTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewStateTest.kt new file mode 100644 index 000000000..7a87689a7 --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/graph/GraphViewStateTest.kt @@ -0,0 +1,26 @@ +package ru.hollowhorizon.hollowengine.client.ui.graph + +import kotlin.test.Test +import kotlin.test.assertEquals + +class GraphViewStateTest { + @Test + fun `a grabbed point stays under the pointer while a zoom is still easing in`() { + val view = GraphViewState() + view.zoomBy(2f, aroundX = 300f, aroundY = 200f) + view.advance(1L) + view.advance(16_000_001L) + + view.grab(100f, 100f) + val grabbedX = view.toGraphX(100f) + val grabbedY = view.toGraphY(100f) + var frame = 16_000_001L + repeat(20) { step -> + view.dragTo(100f + step * 5f, 100f + step * 3f) + frame += 16_000_000L + view.advance(frame) + assertEquals(grabbedX, view.toGraphX(100f + step * 5f), 1e-3f) + assertEquals(grabbedY, view.toGraphY(100f + step * 3f), 1e-3f) + } + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt index aa37091d1..ae8fbb6f9 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt @@ -13,6 +13,7 @@ class BundledStylesheetDiagnosticsTest { "asset-manager.hss", "docking.hss", "entity-editor.hss", + "graph.hss", "ide.hss", "image-editor.hss", "inspector.hss", From 8656e79702ffdd4992000356a7cde93724ede6af Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sat, 26 Sep 2026 18:33:55 +0300 Subject: [PATCH 17/25] Add shader graph editor and material shaders --- .../client/shadergraph/ShaderExpression.kt | 349 +++++++++++++++ .../client/shadergraph/ShaderGraph.kt | 108 +++++ .../client/shadergraph/ShaderGraphCompiler.kt | 417 ++++++++++++++++++ .../client/shadergraph/ShaderGraphEdits.kt | 125 ++++++ .../client/shadergraph/ShaderGraphPrograms.kt | 89 ++++ .../shadergraph/ShaderGraphTemplates.kt | 125 ++++++ .../client/shadergraph/ShaderLibrary.kt | 280 ++++++++++++ .../client/shadergraph/ShaderMathNodes.kt | 298 +++++++++++++ .../client/shadergraph/ShaderNodeLibrary.kt | 214 +++++++++ .../client/shadergraph/ShaderNodeType.kt | 283 ++++++++++++ .../client/shadergraph/ShaderTypes.kt | 142 ++++++ .../client/ui/HollowUiInputController.kt | 68 ++- .../hollowengine/client/ui/HollowUiRuntime.kt | 31 ++ .../hollowengine/client/ui/HollowUiSurface.kt | 1 + .../hollowengine/client/ui/UiCompose.kt | 7 + .../client/ui/UiRenderCommands.kt | 2 +- .../client/ui/graph/GraphCanvas.kt | 42 +- .../client/ui/graph/GraphGeometry.kt | 9 + .../hollowengine/client/ui/graph/GraphNode.kt | 11 +- .../ui/ide/HollowIdeBuiltinFileTypes.kt | 11 + .../client/ui/ide/HollowIdeOverlay.kt | 2 + .../ui/ide/files/HollowIdeAnimatorDocument.kt | 6 + .../ide/files/HollowIdeShaderGraphDocument.kt | 138 ++++++ .../files/animator/HollowIdeAnimatorEditor.kt | 2 +- .../shadergraph/ShaderExpressionEditing.kt | 73 +++ .../files/shadergraph/ShaderGraphEditor.kt | 407 +++++++++++++++++ .../files/shadergraph/ShaderGraphFields.kt | 129 ++++++ .../files/shadergraph/ShaderGraphInspector.kt | 185 ++++++++ .../files/shadergraph/ShaderGraphLayout.kt | 121 +++++ .../ide/files/shadergraph/ShaderGraphMenus.kt | 90 ++++ .../files/shadergraph/ShaderGraphNodeView.kt | 170 +++++++ .../files/shadergraph/ShaderGraphPreviews.kt | 253 +++++++++++ .../ide/files/shadergraph/ShaderGraphState.kt | 40 ++ .../shadergraph/ShaderGraphValueFields.kt | 201 +++++++++ .../files/shadergraph/ShaderPreviewMeshes.kt | 114 +++++ .../ui/ide/files/vfx/VfxPreviewRenderer.kt | 39 +- .../ui/ide/files/vfx/VfxShaderInspector.kt | 29 +- .../ui/ide/files/vfx/VfxSurfaceInspector.kt | 2 +- .../client/ui/render/UiOffscreen.kt | 39 ++ .../hollowengine/client/utils/IconHelper.kt | 1 + .../client/vfx/render/VfxDrawList.kt | 2 +- .../client/vfx/render/VfxGraphMaterials.kt | 161 +++++++ .../client/vfx/render/VfxMeshRenderer.kt | 5 +- .../client/vfx/render/VfxQuadPacker.kt | 13 +- .../client/vfx/render/VfxQuadRenderer.kt | 6 +- .../client/vfx/render/VfxRenderSupport.kt | 20 +- .../client/vfx/render/VfxRibbonRenderer.kt | 9 +- .../vfx/render/VfxShaderDeclarations.kt | 20 +- .../client/vfx/render/VfxUniforms.kt | 15 +- .../en_us/hollowengine/gui/shadergraph.json | 122 +++++ .../main/lang/en_us/hollowengine/gui/vfx.json | 7 +- .../ru_ru/hollowengine/gui/shadergraph.json | 122 +++++ .../main/lang/ru_ru/hollowengine/gui/vfx.json | 7 +- .../hollowengine/shaders/graph/mesh.vsh | 81 ++++ .../hollowengine/shaders/graph/particle.fsh | 98 ++++ .../hollowengine/shaders/graph/particle.vsh | 78 ++++ .../hollowengine/shaders/graph/preview.fsh | 83 ++++ .../hollowengine/shaders/graph/preview.vsh | 25 ++ .../hollowengine/shaders/graph/ribbon.vsh | 70 +++ .../hollowengine/shaders/graph/surface.fsh | 96 ++++ .../textures/gui/icons/files/shader.svg | 5 + .../assets/hollowengine/ui/styles/graph.hss | 12 + .../hollowengine/ui/styles/shader-graph.hss | 200 +++++++++ .../HollowIdeFileTypeRegistryTest.kt | 2 + .../shadergraph/ShaderExpressionTest.kt | 72 +++ .../shadergraph/ShaderGraphCompilerTest.kt | 166 +++++++ .../shadergraph/ShaderGraphEditsTest.kt | 59 +++ .../ui/render/TransformedClipCullingTest.kt | 15 + .../vfx/render/VfxGraphMaterialsTest.kt | 37 ++ .../ui/BundledStylesheetDiagnosticsTest.kt | 1 + 70 files changed, 6135 insertions(+), 127 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraph.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEdits.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphPrograms.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderMathNodes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderTypes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeShaderGraphDocument.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphFields.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphLayout.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphMenus.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphNodeView.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphValueFields.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderPreviewMeshes.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiOffscreen.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterials.kt create mode 100644 runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json create mode 100644 runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/graph/mesh.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/graph/ribbon.vsh create mode 100644 runtime/src/main/resources/assets/hollowengine/shaders/graph/surface.fsh create mode 100644 runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/shader.svg create mode 100644 runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpressionTest.kt create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEditsTest.kt create mode 100644 runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterialsTest.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt new file mode 100644 index 000000000..601cee2e4 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt @@ -0,0 +1,349 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +/** What can be wrong with the text of an expression node; each has a text under `expression.`. */ +enum class ShaderExpressionProblem { + EMPTY, UNEXPECTED_CHARACTER, UNEXPECTED_TOKEN, EXPECTED_VALUE, UNCLOSED, UNKNOWN_FUNCTION, RESERVED_NAME, +} + +class ShaderExpressionError(val problem: ShaderExpressionProblem, val start: Int, val end: Int, val detail: String = "") + +enum class ShaderTokenKind { + NUMBER, + + /** A name that becomes a pin of the node. */ + VARIABLE, + + /** A name that stands for a number, such as `PI`. */ + CONSTANT, FUNCTION, + + /** What follows a dot: a swizzle such as `xy`. */ + MEMBER, OPERATOR, END, +} + +class ShaderToken(val kind: ShaderTokenKind, val text: String, val start: Int, val end: Int) + +/** + * The text of an expression node: one GLSL expression over names of its own choosing, such as + * `(sin(x) + 1) / 2`. Every free name becomes an input of the node, and the expression is its output. + */ +class ShaderExpression private constructor( + val source: String, + val tokens: List, + val error: ShaderExpressionError?, +) { + /** The names that become pins, in the order they first appear. */ + val variables: List = tokens.filter { it.kind == ShaderTokenKind.VARIABLE }.map { it.text }.distinct() + + /** The GLSL of the expression with each name read through [codeOf], or null when the text is not valid. */ + fun glsl(codeOf: (String) -> String): String? { + if (error != null) return null + return buildString { + tokens.forEach { token -> + when (token.kind) { + ShaderTokenKind.VARIABLE -> append('(').append(codeOf(token.text)).append(')') + ShaderTokenKind.CONSTANT -> append(Constants.getValue(token.text)) + ShaderTokenKind.NUMBER -> append(floatLiteral(token.text)) + ShaderTokenKind.OPERATOR -> when (token.text) { + ".", "(", ")" -> append(token.text) + "," -> append(", ") + else -> append(' ').append(token.text).append(' ') + } + + ShaderTokenKind.END -> Unit + else -> append(token.text) + } + } + }.trim() + } + + /** + * How many components the expression has, one to four, given how many each name has through + * [widthOf]; null when the text is not valid or that cannot be told. + */ + fun width(widthOf: (String) -> Int?): Int? { + if (error != null) return null + val parser = Parser(tokens, widthOf) + parser.run() + return parser.width.takeIf { it in 1..4 } + } + + companion object { + /** The functions an expression can call, with their parameters, for completion. */ + val Functions: Map = linkedMapOf( + "sin" to "(x)", "cos" to "(x)", "tan" to "(x)", "asin" to "(x)", "acos" to "(x)", "atan" to "(y, x)", + "sinh" to "(x)", "cosh" to "(x)", "tanh" to "(x)", "radians" to "(degrees)", "degrees" to "(radians)", + "pow" to "(x, y)", "exp" to "(x)", "log" to "(x)", "exp2" to "(x)", "log2" to "(x)", "sqrt" to "(x)", + "inversesqrt" to "(x)", "abs" to "(x)", "sign" to "(x)", "floor" to "(x)", "ceil" to "(x)", + "round" to "(x)", "trunc" to "(x)", "fract" to "(x)", "mod" to "(x, y)", "min" to "(x, y)", + "max" to "(x, y)", "clamp" to "(x, min, max)", "mix" to "(a, b, t)", "step" to "(edge, x)", + "smoothstep" to "(edge0, edge1, x)", "length" to "(v)", "distance" to "(a, b)", "dot" to "(a, b)", + "cross" to "(a, b)", "normalize" to "(v)", "reflect" to "(i, n)", "refract" to "(i, n, eta)", + "float" to "(x)", "vec2" to "(x, y)", "vec3" to "(x, y, z)", "vec4" to "(x, y, z, w)", + "dFdx" to "(x)", "dFdy" to "(x)", "fwidth" to "(x)", + ) + + /** Names that read as numbers. */ + val Constants: Map = linkedMapOf( + "PI" to "3.14159265", + "TAU" to "6.28318531", + "E" to "2.71828183", + "true" to "true", + "false" to "false", + ) + + private val Reserved = setOf( + "if", "else", "for", "while", "do", "return", "break", "continue", "discard", "struct", "const", + "uniform", "in", "out", "inout", "int", "uint", "bool", "mat2", "mat3", "mat4", "sampler2D", "void", + ) + + private val TwoCharOperators = setOf("<=", ">=", "==", "!=", "&&", "||") + private const val OneCharOperators = "+-*/<>!?:.()," + + fun parse(source: String): ShaderExpression { + val lexed = lex(source) + val tokens = lexed.first + val error = lexed.second ?: check(source, tokens) ?: Parser(tokens).run() + return ShaderExpression(source, tokens, error) + } + + private fun lex(source: String): Pair, ShaderExpressionError?> { + val tokens = ArrayList() + var at = 0 + while (at < source.length) { + val char = source[at] + val pair = if (at + 1 < source.length) source.substring(at, at + 2) else "" + when { + char.isWhitespace() -> at++ + char.isDigit() || char == '.' && source.getOrNull(at + 1)?.isDigit() == true -> { + val end = numberEnd(source, at) + tokens += ShaderToken(ShaderTokenKind.NUMBER, source.substring(at, end), at, end) + at = end + } + + char.isLetter() || char == '_' -> { + var end = at + while (end < source.length && (source[end].isLetterOrDigit() || source[end] == '_')) end++ + val name = source.substring(at, end) + tokens += ShaderToken(nameKind(source, name, tokens.lastOrNull(), end), name, at, end) + at = end + } + + pair in TwoCharOperators -> { + tokens += ShaderToken(ShaderTokenKind.OPERATOR, pair, at, at + 2) + at += 2 + } + + char in OneCharOperators -> { + tokens += ShaderToken(ShaderTokenKind.OPERATOR, char.toString(), at, at + 1) + at++ + } + + else -> return tokens to ShaderExpressionError( + ShaderExpressionProblem.UNEXPECTED_CHARACTER, + at, + at + 1, + char.toString() + ) + } + } + tokens += ShaderToken(ShaderTokenKind.END, "", source.length, source.length) + return tokens to null + } + + private fun numberEnd(source: String, start: Int): Int { + var end = start + while (end < source.length && source[end].isDigit()) end++ + if (end < source.length && source[end] == '.') { + end++ + while (end < source.length && source[end].isDigit()) end++ + } + if (end < source.length && (source[end] == 'e' || source[end] == 'E')) { + var exponent = end + 1 + if (exponent < source.length && (source[exponent] == '+' || source[exponent] == '-')) exponent++ + if (exponent < source.length && source[exponent].isDigit()) { + while (exponent < source.length && source[exponent].isDigit()) exponent++ + end = exponent + } + } + return end + } + + /** A name after a dot is a member, one before a parenthesis a call, a known one a constant, anything else a pin. */ + private fun nameKind(source: String, name: String, previous: ShaderToken?, end: Int): ShaderTokenKind = when { + previous?.kind == ShaderTokenKind.OPERATOR && previous.text == "." -> ShaderTokenKind.MEMBER + source.substring(end).trimStart().startsWith("(") -> ShaderTokenKind.FUNCTION + name in Constants -> ShaderTokenKind.CONSTANT + else -> ShaderTokenKind.VARIABLE + } + + private fun check(source: String, tokens: List): ShaderExpressionError? { + if (source.isBlank()) return ShaderExpressionError(ShaderExpressionProblem.EMPTY, 0, source.length) + tokens.forEach { token -> + when (token.kind) { + ShaderTokenKind.FUNCTION -> if (token.text !in Functions) { + return ShaderExpressionError( + ShaderExpressionProblem.UNKNOWN_FUNCTION, + token.start, + token.end, + token.text + ) + } + + ShaderTokenKind.VARIABLE -> if (isReserved(token.text)) { + return ShaderExpressionError( + ShaderExpressionProblem.RESERVED_NAME, + token.start, + token.end, + token.text + ) + } + + else -> Unit + } + } + return null + } + + private fun isReserved(name: String): Boolean = + name in Reserved || name in Functions || name.startsWith("gl_") || name.startsWith("sg_") || name.startsWith( + "p_" + ) || "__" in name + + /** GLSL takes `2` as an int; every number is written as a float so it mixes with the rest. */ + private fun floatLiteral(text: String): String = when { + '.' in text || 'e' in text || 'E' in text -> text + else -> "$text.0" + } + } +} + +private class Parser(private val tokens: List, private val widthOf: (String) -> Int? = { null }) { + private var at = 0 + + var width: Int = UNKNOWN + private set + + private class Failure(val error: ShaderExpressionError) : RuntimeException(null, null, false, false) + + fun run(): ShaderExpressionError? = try { + width = expression() + if (peek().kind != ShaderTokenKind.END) fail(ShaderExpressionProblem.UNEXPECTED_TOKEN) + null + } catch (failure: Failure) { + failure.error + } + + private fun peek(): ShaderToken = tokens[at] + private fun isOperator(text: String): Boolean = peek().kind == ShaderTokenKind.OPERATOR && peek().text == text + + private fun fail(problem: ShaderExpressionProblem): Nothing { + val token = peek() + throw Failure(ShaderExpressionError(problem, token.start, token.end.coerceAtLeast(token.start), token.text)) + } + + private fun expect(text: String) { + if (isOperator(text)) { + at++ + return + } + fail(if (peek().kind == ShaderTokenKind.END) ShaderExpressionProblem.UNCLOSED else ShaderExpressionProblem.UNEXPECTED_TOKEN) + } + + private fun expression(): Int { + val condition = level(0) + if (!isOperator("?")) return condition + at++ + val whenTrue = expression() + expect(":") + return widest(whenTrue, expression()) + } + + private fun level(index: Int): Int { + if (index == Levels.size) return unary() + var width = level(index + 1) + while (peek().kind == ShaderTokenKind.OPERATOR && peek().text in Levels[index]) { + val operator = peek().text + at++ + val right = level(index + 1) + width = if (operator in Arithmetic) widest(width, right) else 1 + } + return width + } + + private fun unary(): Int { + if (isOperator("-") || isOperator("+")) { + at++ + return unary() + } + if (isOperator("!")) { + at++ + unary() + return 1 + } + var width = primary() + while (isOperator(".")) { + at++ + val member = peek() + if (member.kind != ShaderTokenKind.MEMBER) fail(ShaderExpressionProblem.UNEXPECTED_TOKEN) + at++ + width = member.text.length.takeIf { it in 1..4 } ?: UNKNOWN + } + return width + } + + private fun primary(): Int { + val token = peek() + return when { + token.kind == ShaderTokenKind.NUMBER || token.kind == ShaderTokenKind.CONSTANT -> { + at++ + 1 + } + + token.kind == ShaderTokenKind.VARIABLE -> { + at++ + widthOf(token.text) ?: UNKNOWN + } + + token.kind == ShaderTokenKind.FUNCTION -> { + at++ + expect("(") + val arguments = ArrayList() + if (!isOperator(")")) { + arguments += expression() + while (isOperator(",")) { + at++ + arguments += expression() + } + } + expect(")") + resultWidth(token.text, arguments) + } + + isOperator("(") -> { + at++ + expression().also { expect(")") } + } + + else -> fail(ShaderExpressionProblem.EXPECTED_VALUE) + } + } + + private fun resultWidth(function: String, arguments: List): Int = when (function) { + "length", "distance", "dot", "float" -> 1 + "vec2" -> 2 + "vec3", "cross" -> 3 + "vec4" -> 4 + else -> arguments.fold(1, ::widest) + } + + private fun widest(a: Int, b: Int): Int = if (a == UNKNOWN || b == UNKNOWN) UNKNOWN else maxOf(a, b) + + companion object { + const val UNKNOWN = -1 + + private val Levels = listOf( + setOf("||"), setOf("&&"), setOf("==", "!="), setOf("<", ">", "<=", ">="), setOf("+", "-"), setOf("*", "/"), + ) + private val Arithmetic = setOf("+", "-", "*", "/") + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraph.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraph.kt new file mode 100644 index 000000000..124235045 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraph.kt @@ -0,0 +1,108 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json + +/** What a graph shades, which decides its output node and what the engine hands it. */ +@Serializable +enum class ShaderTarget { + /** The surface of a particle, a mesh or a ribbon of an effect. */ + SURFACE, +} + +/** + * One node of a graph: its kind, where it sits on the canvas, the values its unconnected inputs take + * and the choices it offers, such as which property a property node reads. + */ +@Serializable +data class ShaderGraphNode( + val id: String, + val type: String, + val x: Float = 0f, + val y: Float = 0f, + val values: Map> = emptyMap(), + val options: Map = emptyMap(), + val preview: Boolean? = null, +) + +/** What the previews of the editor draw a graph on. */ +@Serializable +enum class ShaderPreviewMesh { + QUAD, SPHERE, CUBE, +} + +/** + * How the editor previews a graph. It is kept with the graph so it opens the way it was left, but + * nothing outside the editor reads it. + */ +@Serializable +data class ShaderGraphPreview( + val mesh: ShaderPreviewMesh = ShaderPreviewMesh.SPHERE, + val rotate: Boolean = true, + val texture: String = DEFAULT_TEXTURE, +) { + companion object { + const val DEFAULT_TEXTURE = "hollowengine:textures/particle/circle.png" + } +} + +/** A link from an output of one node to an input of another. */ +@Serializable +data class ShaderGraphLink( + val from: String, + val output: String, + val to: String, + val input: String, +) + +/** + * A value the graph leaves to whoever uses it: each material that names the graph sets its own. It + * reaches the shader as a uniform, or a sampler for a texture, under [name]. + */ +@Serializable +data class ShaderGraphProperty( + val name: String, + val type: ShaderType = ShaderType.FLOAT, + val default: List = emptyList(), + val texture: String = "", +) + +/** + * A shader as a graph: one file for both the vertex and the fragment stage. The compiler splits it + * by what each output of the output node needs. It is stored as a `.material`, since that is what an + * effect names: a surface with its properties. + */ +@Serializable +data class ShaderGraph( + val version: Int = CURRENT_VERSION, + val target: ShaderTarget = ShaderTarget.SURFACE, + val nodes: List = emptyList(), + val links: List = emptyList(), + val properties: List = emptyList(), + val preview: ShaderGraphPreview = ShaderGraphPreview(), +) { + fun node(id: String): ShaderGraphNode? = nodes.firstOrNull { it.id == id } + + fun linkInto(node: String, input: String): ShaderGraphLink? = links.lastOrNull { it.to == node && it.input == input } + + fun property(name: String): ShaderGraphProperty? = properties.firstOrNull { it.name == name } + + companion object { + const val CURRENT_VERSION = 1 + const val EXTENSION = ".material" + } +} + +/** How a graph is stored: JSON, with what equals the defaults left out. */ +object ShaderGraphFormat { + private val json = Json { + prettyPrint = true + encodeDefaults = false + ignoreUnknownKeys = true + } + + fun read(text: String): ShaderGraph = + if (text.isBlank()) ShaderGraph() else json.decodeFromString(ShaderGraph.serializer(), text) + + fun write(graph: ShaderGraph): String = json.encodeToString(ShaderGraph.serializer(), graph) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt new file mode 100644 index 000000000..e407e78dc --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt @@ -0,0 +1,417 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +/** What can be wrong with a graph, for the editor to point at. */ +enum class ShaderProblem { + UNKNOWN_NODE, + UNKNOWN_PIN, + NO_OUTPUT_NODE, + SECOND_OUTPUT_NODE, + CYCLE, + TYPE_MISMATCH, + UNRESOLVED_TYPE, + FRAGMENT_ONLY_IN_VERTEX, + UNAVAILABLE_INPUT, + INVALID_EXPRESSION, + GLSL_ERROR, +} + +/** A problem, the node it is on, what it is about, and for some problems which of their kinds it is. */ +data class ShaderDiagnostic( + val problem: ShaderProblem, + val node: String? = null, + val detail: String = "", + val reason: String? = null, +) + +/** The GLSL of one stage: statements in order, each declaring the variables of one node's outputs. */ +class ShaderStageCode(val statements: List) { + val text: String get() = statements.joinToString("\n") +} + +/** + * A graph compiled for one place it runs: the code of each stage, what each input of the output node + * is, and everything the shader around it has to declare. + */ +class ShaderGraphCode( + val libraries: List, + val properties: List, + val vertex: ShaderStageCode, + val fragment: ShaderStageCode, + val outputs: Map, + val linkedOutputs: Set, + val inputs: Set, + val diagnostics: List, + val types: ShaderGraphTypes, +) + +/** A value typed on a node that the preview program reads from `PreviewValues[index]`. */ +class ShaderValueSlot(val node: String, val pin: String, val width: Int) + +/** + * The whole graph as one fragment program, for the previews: every node is computed, and the uniform + * `PreviewNode` picks whose value is drawn, as [previewIndex] numbers them. + */ +class ShaderPreviewCode( + val libraries: List, + val properties: List, + val statements: ShaderStageCode, + val statementNodes: List, + val previewIndex: Map, + val spatial: Set, + val values: List, + val selection: String, + val diagnostics: List, +) + +/** The type every pin of a graph resolved to, for the editor to color links and check new ones. */ +class ShaderGraphTypes(private val outputs: Map, ShaderType>, private val inputs: Map, ShaderType>) { + fun output(node: String, pin: String): ShaderType? = outputs[node to pin] + fun input(node: String, pin: String): ShaderType? = inputs[node to pin] +} + +/** + * Turns a graph into GLSL. + * + * Nodes are pure: each output is one expression over the inputs, written to a variable of its own. + * A node runs in the vertex stage when an input of the output node listed as a vertex input depends + * on it, and in the fragment stage when any other does; a node both depend on is computed in both. + */ +object ShaderGraphCompiler { + /** Compiles [graph] for a place that offers [available] of the engine inputs. */ + fun compile(graph: ShaderGraph, available: Set = ShaderInput.entries.toSet()): ShaderGraphCode { + val resolved = ResolvedGraph(graph, values = null) + val diagnostics = resolved.diagnostics + val master = resolved.master + if (master == null) { + return ShaderGraphCode( + emptyList(), graph.properties, ShaderStageCode(emptyList()), ShaderStageCode(emptyList()), + emptyMap(), emptySet(), emptySet(), diagnostics, resolved.types(), + ) + } + + val masterType = resolved.typeOf(master) + val masterInputs = masterType.inputs(master) + val vertexOutputs = masterType.master?.vertexInputs.orEmpty() + val linked = masterInputs.filter { graph.linkInto(master.id, it.name) != null }.map { it.name }.toSet() + val vertexRoots = linked.filter { it in vertexOutputs }.mapNotNull { graph.linkInto(master.id, it)?.from } + val fragmentRoots = linked.filter { it !in vertexOutputs }.mapNotNull { graph.linkInto(master.id, it)?.from } + + val vertex = resolved.emit(resolved.reachableFrom(vertexRoots), vertex = true) + val fragment = resolved.emit(resolved.reachableFrom(fragmentRoots), vertex = false) + val used = vertex.inputs + fragment.inputs + (used - available).forEach { diagnostics += ShaderDiagnostic(ShaderProblem.UNAVAILABLE_INPUT, detail = it.name) } + + val outputs = masterInputs.associate { pin -> + pin.name to resolved.inputCode(master, pin, vertex = pin.name in vertexOutputs, sink = ArrayList()) + } + return ShaderGraphCode( + libraries = ShaderLibrary.ordered(vertex.libraries + fragment.libraries), + properties = graph.properties, + vertex = ShaderStageCode(vertex.statements), + fragment = ShaderStageCode(fragment.statements), + outputs = outputs, + linkedOutputs = linked, + inputs = used, + diagnostics = diagnostics.distinct(), + types = resolved.types(), + ) + } + + /** Compiles every node of [graph] into one program the previews share. */ + fun compilePreview(graph: ShaderGraph): ShaderPreviewCode { + val values = PreviewValues() + val resolved = ResolvedGraph(graph, values) + val nodes = resolved.order.filter { resolved.typeOf(it).master == null } + val emitted = resolved.emit(nodes, vertex = false) + + val previewIndex = LinkedHashMap() + val branches = ArrayList() + nodes.filter { resolved.typeOf(it).showsPreview(it) }.forEach { node -> + val output = resolved.typeOf(node).outputs.first() + val value = when (resolved.outputType(node, output)) { + ShaderType.TEXTURE -> "texture(${resolved.variable(node, output)}, ${ShaderInput.UV.glsl})" + else -> resolved.variable(node, output) + } + previewIndex[node.id] = previewIndex.size + branches += "if (PreviewNode == ${previewIndex.getValue(node.id)}) fragColor = sg_show($value);" + } + resolved.master?.takeIf { resolved.typeOf(it).showsPreview(it) }?.let { master -> + val code = resolved.typeOf(master).inputs(master).associate { pin -> + pin.name to resolved.inputCode(master, pin, vertex = false, sink = ArrayList()) + } + previewIndex[master.id] = previewIndex.size + branches += "if (PreviewNode == ${previewIndex.getValue(master.id)}) fragColor = sg_surface(" + + "${code[SurfaceOutputs.COLOR] ?: "vec3(1.0)"}, ${code[SurfaceOutputs.ALPHA] ?: "1.0"}, " + + "${code[SurfaceOutputs.EMISSION] ?: "vec3(0.0)"}, ${code[SurfaceOutputs.ALPHA_CLIP] ?: "0.0"});" + } + + return ShaderPreviewCode( + libraries = ShaderLibrary.ordered(emitted.libraries), + properties = graph.properties, + statements = ShaderStageCode(emitted.statements), + statementNodes = emitted.owners, + previewIndex = previewIndex, + spatial = resolved.spatial(), + values = values.slots, + selection = "fragColor = vec4(0.0);\n" + branches.joinToString("\n"), + diagnostics = resolved.diagnostics.distinct(), + ) + } +} + +/** The values of a preview program, each given a slot of the uniform array as the code reads it. */ +private class PreviewValues { + val slots = ArrayList() + private val taken = HashMap, Int>() + + /** What reads the value of [pin] of [node], or null once the array is full and the value has to be a literal. */ + fun read(node: String, pin: String, type: ShaderType): String? { + val index = taken.getOrPut(node to pin) { + if (slots.size >= LIMIT) return null + slots += ShaderValueSlot(node, pin, type.width) + slots.size - 1 + } + return when (type.width) { + 1 -> "PreviewValues[$index].x" + 2 -> "PreviewValues[$index].xy" + 3 -> "PreviewValues[$index].xyz" + else -> "PreviewValues[$index]" + } + } + + private companion object { + /** Well under the 256 vectors of uniforms a fragment stage is sure to have. */ + const val LIMIT = 192 + } +} + +/** The code of some nodes in one stage, and what it needs from around it. */ +private class EmittedStage( + val statements: List, + val owners: List, + val libraries: Set, + val inputs: Set, +) + +/** + * A graph with every node's kind looked up, the links checked, the nodes in dependency order and the + * type of every pin worked out. With [values], typed values are read from the preview uniforms. + */ +private class ResolvedGraph(private val graph: ShaderGraph, private val values: PreviewValues?) { + val diagnostics = ArrayList() + private val kinds = LinkedHashMap() + private val indices = HashMap() + private val outputTypes = HashMap, ShaderType>() + private val inputTypes = HashMap, ShaderType>() + private val dynamics = HashMap() + + val order: List + private val ordered: Set + val master: ShaderGraphNode? + + init { + graph.nodes.forEachIndexed { index, node -> + val kind = ShaderNodeTypes.of(node.type) + if (kind == null) { + diagnostics += ShaderDiagnostic(ShaderProblem.UNKNOWN_NODE, node.id, node.type) + } else { + kinds[node.id] = kind + indices[node.id] = index + kind.problem(node)?.let { diagnostics += it } + } + } + graph.links.forEach { link -> + val from = kinds[link.from] + val to = graph.node(link.to)?.let { node -> kinds[node.id]?.let { node to it } } + if (from != null && from.output(link.output) == null) { + diagnostics += ShaderDiagnostic(ShaderProblem.UNKNOWN_PIN, link.from, link.output) + } + if (to != null && to.second.input(to.first, link.input) == null) { + diagnostics += ShaderDiagnostic(ShaderProblem.UNKNOWN_PIN, link.to, link.input) + } + } + + val masters = graph.nodes.filter { kinds[it.id]?.master?.target == graph.target } + master = masters.firstOrNull() + if (masters.isEmpty()) diagnostics += ShaderDiagnostic(ShaderProblem.NO_OUTPUT_NODE) + masters.drop(1).forEach { diagnostics += ShaderDiagnostic(ShaderProblem.SECOND_OUTPUT_NODE, it.id) } + + order = sortByDependencies() + ordered = order.map { it.id }.toSet() + order.forEach(::resolveTypes) + } + + fun typeOf(node: ShaderGraphNode): ShaderNodeType = kinds.getValue(node.id) + + fun outputType(node: ShaderGraphNode, output: ShaderOutputSpec): ShaderType = + outputTypes[node.id to output.name] ?: ShaderType.FLOAT + + /** + * What the rest of the graph reads for an output: its variable, or for a texture the sampler it + * names, since GLSL cannot hold a sampler in a local. A texture output reads no inputs. + */ + fun variable(node: ShaderGraphNode, output: ShaderOutputSpec): String { + if (outputType(node, output) == ShaderType.TEXTURE) { + val context = ShaderEmitContext(graph, node, ShaderType.FLOAT, ShaderType.TEXTURE, false, emptyMap(), emptyMap(), typeOf(node)) + return output.expression(context) + } + return "sg_${indices.getValue(node.id)}_${output.name.filter { it.isLetterOrDigit() }}" + } + + fun types() = ShaderGraphTypes(outputTypes.toMap(), inputTypes.toMap()) + + /** The link into [pin] of [node], when the node has that pin and it comes from an output of a usable node. */ + private fun source(node: ShaderGraphNode, pin: String): Pair? { + val link = graph.linkInto(node.id, pin) ?: return null + if (typeOf(node).input(node, pin) == null) return null + val from = graph.node(link.from) ?: return null + val output = kinds[from.id]?.output(link.output) ?: return null + if (from.id !in ordered) return null + return from to output + } + + private fun sortByDependencies(): List { + val done = LinkedHashSet() + val path = ArrayList() + val cyclic = HashSet() + fun visit(node: ShaderGraphNode) { + if (node.id in done) return + val onPath = path.indexOf(node.id) + if (onPath >= 0) { + cyclic += path.subList(onPath, path.size) + return + } + path += node.id + graph.links.filter { it.to == node.id }.forEach { link -> + graph.node(link.from)?.takeIf { it.id in kinds }?.let(::visit) + } + path.removeAt(path.lastIndex) + done += node.id + } + graph.nodes.filter { it.id in kinds }.forEach(::visit) + cyclic.forEach { diagnostics += ShaderDiagnostic(ShaderProblem.CYCLE, it) } + return done.filter { it !in cyclic }.mapNotNull(graph::node) + } + + private fun resolveTypes(node: ShaderGraphNode) { + val kind = typeOf(node) + val pins = kind.codeInputs(node) + val incoming = pins.associateWith { pin -> + source(node, pin.name)?.let { (from, output) -> outputType(from, output) } + ?: pin.fallback?.type + ?: pin.type.fixed + ?: ShaderType.ofWidth(values(node, pin).size.coerceIn(1, 4)) + } + val widest = pins.filter { it.type == ShaderPinType.DYNAMIC } + .mapNotNull { pin -> incoming.getValue(pin).takeIf { it.isVector }?.width } + .maxOrNull() ?: 1 + val dynamic = ShaderType.ofWidth(widest) + dynamics[node.id] = dynamic + + pins.forEach { pin -> + inputTypes[node.id to pin.name] = pin.type.fixed ?: if (pin.type == ShaderPinType.ANY) incoming.getValue(pin) else dynamic + } + kind.outputs.forEach { output -> + val declared = if (output.typeOf != null) output.typeOf.invoke(ShaderTypeContext(graph, node, typesOf(node))) else output.type + val type = when { + declared == null -> ShaderType.FLOAT.also { + diagnostics += ShaderDiagnostic(ShaderProblem.UNRESOLVED_TYPE, node.id, output.name) + } + + else -> declared.fixed ?: dynamic + } + outputTypes[node.id to output.name] = type + } + } + + private fun typesOf(node: ShaderGraphNode): Map = + typeOf(node).codeInputs(node).associate { it.name to (inputTypes[node.id to it.name] ?: ShaderType.FLOAT) } + + private fun values(node: ShaderGraphNode, pin: ShaderPinSpec): List = + node.values[pin.name]?.takeIf { it.isNotEmpty() } ?: pin.default.ifEmpty { listOf(0f) } + + fun reachableFrom(roots: List): List { + val reached = HashSet() + val stack = ArrayDeque(roots) + while (stack.isNotEmpty()) { + val id = stack.removeLast() + if (!reached.add(id)) continue + graph.links.filter { it.to == id }.forEach { stack += it.from } + } + return order.filter { it.id in reached && typeOf(it).master == null } + } + + /** + * The nodes that read the shape of what they are drawn on, the normal, the view or the position, + * themselves or through what they are linked to; the output node always does. + */ + fun spatial(): Set { + val shaped = setOf(ShaderInput.NORMAL, ShaderInput.VIEW_DIRECTION, ShaderInput.POSITION, ShaderInput.OBJECT_POSITION) + val result = HashSet() + order.forEach { node -> + val kind = typeOf(node) + val own = kind.master != null || kind.reads.any { it in shaped } || kind.inputs(node).any { pin -> + pin.fallback in shaped && source(node, pin.name) == null + } + val inherited = kind.inputs(node).any { pin -> source(node, pin.name)?.first?.id in result } + if (own || inherited) result += node.id + } + return result + } + + /** + * The GLSL an input of [node] reads: the output linked to it, read as the pin's type, the engine + * input it falls back on, or the value typed on the node. What it uses from the engine goes to [sink]. + */ + fun inputCode(node: ShaderGraphNode, pin: ShaderPinSpec, vertex: Boolean, sink: MutableCollection): String { + val type = inputTypes[node.id to pin.name] ?: pin.type.fixed ?: ShaderType.FLOAT + source(node, pin.name)?.let { (from, output) -> + val fromType = outputType(from, output) + coerce(variable(from, output), fromType, type)?.let { return it } + diagnostics += ShaderDiagnostic(ShaderProblem.TYPE_MISMATCH, node.id, "${pin.name}: $fromType -> $type") + } + pin.fallback?.let { input -> + coerce(input.glsl, input.type, type)?.let { code -> + sink += input + if (vertex && input.fragmentOnly) { + diagnostics += ShaderDiagnostic(ShaderProblem.FRAGMENT_ONLY_IN_VERTEX, node.id, input.name) + } + return code + } + } + if (type == ShaderType.TEXTURE) { + sink += ShaderInput.MAIN_TEXTURE + return ShaderInput.MAIN_TEXTURE.glsl + } + return values?.read(node.id, pin.name, type) ?: shaderLiteral(type, values(node, pin)) + } + + /** The statements of [nodes] for one stage, in their order. */ + fun emit(nodes: List, vertex: Boolean): EmittedStage { + val statements = ArrayList() + val owners = ArrayList() + val libraries = LinkedHashSet() + val inputs = LinkedHashSet() + nodes.forEach { node -> + val kind = typeOf(node) + if (vertex && (kind.fragmentOnly || kind.reads.any { it.fragmentOnly })) { + diagnostics += ShaderDiagnostic(ShaderProblem.FRAGMENT_ONLY_IN_VERTEX, node.id, kind.id) + } + libraries += kind.libraries + inputs += kind.reads + val code = kind.codeInputs(node).associate { pin -> pin.name to inputCode(node, pin, vertex, inputs) } + val written = LinkedHashMap() + kind.outputs.forEach { output -> + val type = outputType(node, output) + val name = variable(node, output) + if (type != ShaderType.TEXTURE) { + val context = ShaderEmitContext(graph, node, dynamics.getValue(node.id), type, vertex, code, written, kind) + statements += "${type.glsl} $name = ${output.expression(context)};" + owners += node.id + } + written[output.name] = name + } + } + return EmittedStage(statements, owners, libraries, inputs) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEdits.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEdits.kt new file mode 100644 index 000000000..4f7294c63 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEdits.kt @@ -0,0 +1,125 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +/** An id no node of the graph has yet, readable, since it shows up in the file. */ +fun ShaderGraph.freeNodeId(type: String): String { + val base = type.substringAfterLast('/').ifBlank { "node" } + var index = 1 + while (nodes.any { it.id == "${base}_$index" }) index++ + return "${base}_$index" +} + +fun ShaderGraph.withNode(node: ShaderGraphNode): ShaderGraph = copy(nodes = nodes + node) + +/** Without the node and every link into or out of it. */ +fun ShaderGraph.withoutNode(id: String): ShaderGraph = copy( + nodes = nodes.filterNot { it.id == id }, + links = links.filterNot { it.from == id || it.to == id }, +) + +/** Without the nodes of [ids] and every link into or out of them. */ +fun ShaderGraph.withoutNodes(ids: Set): ShaderGraph = copy( + nodes = nodes.filterNot { it.id in ids }, + links = links.filterNot { it.from in ids || it.to in ids }, +) + +fun ShaderGraph.withNodeAt(id: String, x: Float, y: Float): ShaderGraph = + mapNode(id) { it.copy(x = x, y = y) } + +/** With each node of [positions] moved to where it says. */ +fun ShaderGraph.withNodesAt(positions: Map>): ShaderGraph = copy( + nodes = nodes.map { node -> positions[node.id]?.let { (x, y) -> node.copy(x = x, y = y) } ?: node }, +) + +/** + * Copies of the nodes of [ids] next to them, with their values and options and the links between + * them, but none of the links that reach outside. Returns the ids of the copies too. + */ +fun ShaderGraph.withDuplicates(ids: Set, offset: Float = 30f): Pair> { + var graph = this + val renamed = LinkedHashMap() + nodes.filter { it.id in ids }.forEach { node -> + val copy = node.copy(id = graph.freeNodeId(node.type), x = node.x + offset, y = node.y + offset) + renamed[node.id] = copy.id + graph = graph.withNode(copy) + } + val copiedLinks = links.filter { it.from in renamed && it.to in renamed } + .map { it.copy(from = renamed.getValue(it.from), to = renamed.getValue(it.to)) } + return graph.copy(links = graph.links + copiedLinks) to renamed.values.toList() +} + +/** + * With a link from [output] of [from] into [input] of [to]. An input takes one link, so whatever was + * linked into it before is dropped; a link that would close a loop is not made. + */ +fun ShaderGraph.withLink(from: String, output: String, to: String, input: String): ShaderGraph { + if (from == to || dependsOn(from, to)) return this + return copy(links = links.filterNot { it.to == to && it.input == input } + ShaderGraphLink(from, output, to, input)) +} + +fun ShaderGraph.withoutLinkInto(node: String, input: String): ShaderGraph = + copy(links = links.filterNot { it.to == node && it.input == input }) + +fun ShaderGraph.withoutLinkAt(index: Int): ShaderGraph = + if (index !in links.indices) this else copy(links = links.filterIndexed { at, _ -> at != index }) + +/** With [values] for the unconnected input [input] of the node. */ +fun ShaderGraph.withValue(node: String, input: String, values: List): ShaderGraph = + mapNode(node) { it.copy(values = it.values + (input to values)) } + +/** + * With [option] of the node set to [value]. A node whose pins follow its options, such as a shape or + * an expression, may lose a pin that way, and the links into a pin it lost go with it. + */ +fun ShaderGraph.withOption(node: String, option: String, value: String): ShaderGraph { + val changed = mapNode(node) { it.copy(options = it.options + (option to value)) } + val updated = changed.node(node) ?: return changed + val kind = ShaderNodeTypes.of(updated.type) ?: return changed + val pins = kind.inputs(updated).map { it.name }.toSet() + return changed.copy(links = changed.links.filterNot { it.to == node && it.input !in pins }) +} + +fun ShaderGraph.withPreview(node: String, shown: Boolean): ShaderGraph = mapNode(node) { it.copy(preview = shown) } + +fun ShaderGraph.withPreviewSettings(settings: ShaderGraphPreview): ShaderGraph = copy(preview = settings) + +/** An id no property has yet: `Property`, `Property2` and so on. */ +fun ShaderGraph.freePropertyName(base: String = "Property"): String { + if (properties.none { it.name == base }) return base + var index = 2 + while (properties.any { it.name == "$base$index" }) index++ + return "$base$index" +} + +fun ShaderGraph.withProperty(property: ShaderGraphProperty): ShaderGraph = + copy(properties = properties.filterNot { it.name == property.name } + property) + +/** With the property named [name] replaced by [property], and its nodes following a rename. */ +fun ShaderGraph.withPropertyChanged(name: String, property: ShaderGraphProperty): ShaderGraph { + if (property.name != name && properties.any { it.name == property.name }) return this + val renamed = nodes.map { node -> + if (node.type == ShaderNodeLibrary.PROPERTY && node.options["property"] == name) { + node.copy(options = node.options + ("property" to property.name)) + } else { + node + } + } + return copy(properties = properties.map { if (it.name == name) property else it }, nodes = renamed) +} + +fun ShaderGraph.withoutProperty(name: String): ShaderGraph = copy(properties = properties.filterNot { it.name == name }) + +/** Whether [node] reads, however far back, from [other]. */ +fun ShaderGraph.dependsOn(node: String, other: String): Boolean { + val seen = HashSet() + val stack = ArrayDeque(listOf(node)) + while (stack.isNotEmpty()) { + val current = stack.removeLast() + if (current == other) return true + if (!seen.add(current)) continue + links.filter { it.to == current }.forEach { stack += it.from } + } + return false +} + +private fun ShaderGraph.mapNode(id: String, change: (ShaderGraphNode) -> ShaderGraphNode) = + copy(nodes = nodes.map { if (it.id == id) change(it) else it }) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphPrograms.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphPrograms.kt new file mode 100644 index 000000000..1dfb9d538 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphPrograms.kt @@ -0,0 +1,89 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import com.mojang.blaze3d.vertex.VertexFormat +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.buildJsonArray +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.put +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.ShaderInstance +import net.minecraft.resources.ResourceLocation +import net.minecraft.server.packs.resources.Resource +import net.minecraft.server.packs.resources.ResourceProvider +import ru.hollowhorizon.hollowengine.HollowEngine +import java.io.ByteArrayInputStream +import java.util.Optional + +/** A uniform a program json declares: its GLSL type as the json names it, and its starting values. */ +class ShaderGraphUniform(val name: String, val type: String, val values: List) + +/** + * Shader programs made out of generated source rather than files. The program and its sources live + * under `minecraft:shaders/core/hollowengine_graph/`, served from memory; everything they import or + * name besides that, such as a shared vertex shader, comes from the resource packs as usual. + */ +object ShaderGraphPrograms { + private const val FOLDER = "hollowengine_graph" + + /** + * A program named [name], out of [json] and its generated stages, keyed by extension (`vsh`, `fsh`); + * a failure carries what the driver said. + */ + fun create(name: String, json: String, stages: Map, format: VertexFormat): Result { + val resources = Minecraft.getInstance().resourceManager + val pack = Minecraft.getInstance().vanillaPackResources + val files = buildMap { + put("shaders/core/$FOLDER/$name.json", json) + stages.forEach { (extension, source) -> put("shaders/core/$FOLDER/$name.$extension", source) } + } + val provider = ResourceProvider { wanted -> + val text = files[wanted.path].takeIf { wanted.namespace == ResourceLocation.DEFAULT_NAMESPACE } + if (text != null) { + Optional.of(Resource(pack) { ByteArrayInputStream(text.toByteArray()) }) + } else { + resources.getResource(wanted) + } + } + return runCatching { ShaderInstance(provider, "$FOLDER/$name", format) }.onFailure { e -> + HollowEngine.LOGGER.warn("Could not build the shader graph program {}: {}", name, e.message) + } + } + + /** What a stage of [name] is called inside a program json. */ + fun stage(name: String): String = "$FOLDER/$name" + + /** A program json: the stages it names, its attributes, samplers and uniforms. */ + fun json( + vertex: String, + fragment: String, + attributes: List, + samplers: List, + uniforms: List, + ): String = buildJsonObject { + put("vertex", vertex) + put("fragment", fragment) + put("attributes", JsonArray(attributes.map(::JsonPrimitive))) + put("samplers", buildJsonArray { samplers.forEach { add(buildJsonObject { put("name", it) }) } }) + put("uniforms", buildJsonArray { + uniforms.forEach { uniform -> + add(buildJsonObject { + put("name", uniform.name) + put("type", uniform.type) + put("count", uniform.values.size) + put("values", JsonArray(uniform.values.map(::JsonPrimitive))) + }) + } + }) + }.toString() + + /** The uniform or sampler each property of a graph becomes. */ + fun propertyUniforms(properties: List): List = + properties.filter { it.type.isVector }.map { property -> + val defaults = (0 until property.type.width).map { property.default.getOrElse(it) { property.default.lastOrNull() ?: 0f } } + ShaderGraphUniform(propertyUniform(property.name), "float", defaults) + } + + fun propertySamplers(properties: List): List = + properties.filter { it.type == ShaderType.TEXTURE }.map { propertyUniform(it.name) } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt new file mode 100644 index 000000000..c541eb1b5 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt @@ -0,0 +1,125 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +/** The two stages of a compiled graph, ready for a shader program. */ +class ShaderGraphSources(val vertex: String, val fragment: String) + +/** + * A shader a graph is compiled into: GLSL of the engine with marked places where the graph's code + * goes, and the engine inputs it defines for the graph. + */ +class ShaderGraphTemplate( + val name: String, + private val vertexPath: String?, + private val fragmentPath: String, + val available: Set, +) { + val vertexSource: String? by lazy { vertexPath?.let(::readTemplate) } + val fragmentSource: String by lazy { readTemplate(fragmentPath) } +} + +/** + * The templates the engine has, and how a compiled graph is put into one. + * + * Markers in a template: `//#uniforms` for the properties, `//#functions` for what the nodes share, + * `//#vertex` and `//#fragment` for each stage's code with the output node's inputs written to + * `sg_out_*`, and `//#preview` for the preview program. + */ +object ShaderGraphTemplates { + private const val ROOT = "/assets/hollowengine/shaders/graph/" + + /** Particle quads, drawn with the instance attributes of the engine particle program. */ + val PARTICLE = ShaderGraphTemplate( + name = "particle", + vertexPath = ROOT + "particle.vsh", + fragmentPath = ROOT + "particle.fsh", + available = ShaderInput.entries.toSet(), + ) + + /** The built-in meshes, drawn with the instance attributes of the engine mesh program. */ + val MESH = ShaderGraphTemplate( + name = "mesh", + vertexPath = ROOT + "mesh.vsh", + fragmentPath = ROOT + "surface.fsh", + available = ShaderInput.entries.toSet(), + ) + + /** Trails and beams, built on the CPU in the vanilla particle format. */ + val RIBBON = ShaderGraphTemplate( + name = "ribbon", + vertexPath = ROOT + "ribbon.vsh", + fragmentPath = ROOT + "surface.fsh", + available = ShaderInput.entries.toSet(), + ) + + /** The previews of the editor: a quad over a small target per node. */ + val PREVIEW = ShaderGraphTemplate( + name = "preview", + vertexPath = ROOT + "preview.vsh", + fragmentPath = ROOT + "preview.fsh", + available = ShaderInput.entries.toSet(), + ) + + /** [code] of a surface graph put into [template]. */ + fun surface(code: ShaderGraphCode, template: ShaderGraphTemplate): ShaderGraphSources { + val vertexSource = requireNotNull(template.vertexSource) { "${template.name} has no vertex stage" } + val vertex = buildString { + appendLine(code.vertex.text) + if (SurfaceOutputs.VERTEX_OFFSET in code.linkedOutputs) { + append("sg_out_vertex_offset = ${code.outputs.getValue(SurfaceOutputs.VERTEX_OFFSET)};") + } + } + val fragment = buildString { + appendLine(code.fragment.text) + appendLine("sg_out_color = ${code.outputs.getValue(SurfaceOutputs.COLOR)};") + appendLine("sg_out_alpha = ${code.outputs.getValue(SurfaceOutputs.ALPHA)};") + appendLine("sg_out_alpha_clip = ${code.outputs.getValue(SurfaceOutputs.ALPHA_CLIP)};") + if (SurfaceOutputs.EMISSION in code.linkedOutputs) { + appendLine("sg_out_emission = ${code.outputs.getValue(SurfaceOutputs.EMISSION)};") + append("sg_has_emission = true;") + } + } + return ShaderGraphSources( + vertex = fill(vertexSource, code.properties, code.libraries, "//#vertex" to vertex), + fragment = fill(template.fragmentSource, code.properties, code.libraries, "//#fragment" to fragment), + ) + } + + /** The fragment stage of the preview program of a graph; its vertex stage is [ShaderGraphTemplate.vertexSource] of [PREVIEW]. */ + fun preview(code: ShaderPreviewCode): String = fill( + PREVIEW.fragmentSource, + code.properties, + code.libraries, + "//#preview" to code.statements.text + "\n" + code.selection, + extraUniforms = if (code.values.isEmpty()) "" else "uniform vec4 PreviewValues[${code.values.size}];", + ) + + /** + * The line of [source], a preview program [preview] made out of [code], each statement of the graph + * starts on, counted from 1 as GLSL compilers report them. + */ + fun previewStatementLines(source: String, code: ShaderPreviewCode): Int? { + val first = code.statements.statements.firstOrNull() ?: return null + val at = source.indexOf(" $first").takeIf { it >= 0 } ?: return null + return source.substring(0, at).count { it == '\n' } + 1 + } + + private fun fill( + source: String, + properties: List, + libraries: List, + body: Pair, + extraUniforms: String = "", + ): String = source + .replace( + "//#uniforms", + (properties.map { "uniform ${it.type.glsl} ${propertyUniform(it.name)};" } + extraUniforms) + .filter { it.isNotEmpty() } + .joinToString("\n"), + ) + .replace("//#functions", libraries.joinToString("\n") { it.code.trimIndent() }) + .replace(body.first, body.second.prependIndent(" ")) +} + +private fun readTemplate(path: String): String = + ShaderGraphTemplates::class.java.getResourceAsStream(path)?.use { it.reader().readText() } + ?: error("The shader graph template is missing: $path") diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt new file mode 100644 index 000000000..d8594c176 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt @@ -0,0 +1,280 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +/** + * GLSL functions nodes share. A shader gets each one it needs once, after the ones it depends on. + */ +enum class ShaderLibrary(val code: String, vararg val requires: ShaderLibrary) { + HASH( + """ + float sg_hash12(vec2 p) { + vec3 p3 = fract(vec3(p.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return fract((p3.x + p3.y) * p3.z); + } + + vec2 sg_hash22(vec2 p) { + vec3 p3 = fract(vec3(p.xyx) * vec3(0.1031, 0.1030, 0.0973)); + p3 += dot(p3, p3.yzx + 33.33); + return fract((p3.xx + p3.yz) * p3.zy); + } + """ + ), + + VALUE_NOISE( + """ + float sg_value_noise(vec2 p) { + vec2 i = floor(p); + vec2 f = fract(p); + f = f * f * (3.0 - 2.0 * f); + return mix( + mix(sg_hash12(i), sg_hash12(i + vec2(1.0, 0.0)), f.x), + mix(sg_hash12(i + vec2(0.0, 1.0)), sg_hash12(i + vec2(1.0, 1.0)), f.x), + f.y + ); + } + """, + HASH, + ), + + GRADIENT_NOISE( + """ + float sg_gradient_noise(vec2 p) { + vec2 i = floor(p); + vec2 f = fract(p); + vec2 u = f * f * (3.0 - 2.0 * f); + float a = dot(sg_hash22(i) * 2.0 - 1.0, f); + float b = dot(sg_hash22(i + vec2(1.0, 0.0)) * 2.0 - 1.0, f - vec2(1.0, 0.0)); + float c = dot(sg_hash22(i + vec2(0.0, 1.0)) * 2.0 - 1.0, f - vec2(0.0, 1.0)); + float d = dot(sg_hash22(i + vec2(1.0, 1.0)) * 2.0 - 1.0, f - vec2(1.0, 1.0)); + return mix(mix(a, b, u.x), mix(c, d, u.x), u.y) * 0.5 + 0.5; + } + """, + HASH, + ), + + FBM( + """ + float sg_fbm(vec2 p, float octaves, float roughness) { + float sum = 0.0; + float amplitude = 0.5; + float total = 0.0; + for (int octave = 0; octave < 8; octave++) { + if (float(octave) >= octaves) break; + sum += amplitude * sg_gradient_noise(p); + total += amplitude; + p = p * 2.03 + 17.1; + amplitude *= roughness; + } + return total > 0.0 ? sum / total : 0.0; + } + """, + GRADIENT_NOISE, + ), + + VORONOI( + """ + vec2 sg_voronoi(vec2 p, float jitter) { + vec2 cell = floor(p); + vec2 local = fract(p); + float nearest = 8.0; + float id = 0.0; + for (int y = -1; y <= 1; y++) { + for (int x = -1; x <= 1; x++) { + vec2 neighbor = vec2(float(x), float(y)); + vec2 point = neighbor + sg_hash22(cell + neighbor) * jitter; + float gap = length(point - local); + if (gap < nearest) { + nearest = gap; + id = sg_hash12(cell + neighbor); + } + } + } + return vec2(nearest, id); + } + """, + HASH, + ), + + HASH3( + """ + float sg_hash13(vec3 p3) { + p3 = fract(p3 * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return fract((p3.x + p3.y) * p3.z); + } + + vec3 sg_hash33(vec3 p3) { + p3 = fract(p3 * vec3(0.1031, 0.1030, 0.0973)); + p3 += dot(p3, p3.yxz + 33.33); + return fract((p3.xxy + p3.yxx) * p3.zyx); + } + """ + ), + + VALUE_NOISE3( + """ + float sg_value_noise3(vec3 p) { + vec3 i = floor(p); + vec3 f = fract(p); + f = f * f * (3.0 - 2.0 * f); + return mix( + mix( + mix(sg_hash13(i), sg_hash13(i + vec3(1.0, 0.0, 0.0)), f.x), + mix(sg_hash13(i + vec3(0.0, 1.0, 0.0)), sg_hash13(i + vec3(1.0, 1.0, 0.0)), f.x), + f.y + ), + mix( + mix(sg_hash13(i + vec3(0.0, 0.0, 1.0)), sg_hash13(i + vec3(1.0, 0.0, 1.0)), f.x), + mix(sg_hash13(i + vec3(0.0, 1.0, 1.0)), sg_hash13(i + vec3(1.0, 1.0, 1.0)), f.x), + f.y + ), + f.z + ); + } + """, + HASH3, + ), + + GRADIENT_NOISE3( + """ + float sg_gradient_corner3(vec3 cell, vec3 local, vec3 corner) { + return dot(sg_hash33(cell + corner) * 2.0 - 1.0, local - corner); + } + + float sg_gradient_noise3(vec3 p) { + vec3 i = floor(p); + vec3 f = fract(p); + vec3 u = f * f * (3.0 - 2.0 * f); + return mix( + mix( + mix(sg_gradient_corner3(i, f, vec3(0.0, 0.0, 0.0)), sg_gradient_corner3(i, f, vec3(1.0, 0.0, 0.0)), u.x), + mix(sg_gradient_corner3(i, f, vec3(0.0, 1.0, 0.0)), sg_gradient_corner3(i, f, vec3(1.0, 1.0, 0.0)), u.x), + u.y + ), + mix( + mix(sg_gradient_corner3(i, f, vec3(0.0, 0.0, 1.0)), sg_gradient_corner3(i, f, vec3(1.0, 0.0, 1.0)), u.x), + mix(sg_gradient_corner3(i, f, vec3(0.0, 1.0, 1.0)), sg_gradient_corner3(i, f, vec3(1.0, 1.0, 1.0)), u.x), + u.y + ), + u.z + ) * 0.5 + 0.5; + } + """, + HASH3, + ), + + FBM3( + """ + float sg_fbm3(vec3 p, float octaves, float roughness) { + float sum = 0.0; + float amplitude = 0.5; + float total = 0.0; + for (int octave = 0; octave < 8; octave++) { + if (float(octave) >= octaves) break; + sum += amplitude * sg_gradient_noise3(p); + total += amplitude; + p = p * 2.03 + 17.1; + amplitude *= roughness; + } + return total > 0.0 ? sum / total : 0.0; + } + """, + GRADIENT_NOISE3, + ), + + VORONOI3( + """ + vec2 sg_voronoi3(vec3 p, float jitter) { + vec3 cell = floor(p); + vec3 local = fract(p); + float nearest = 8.0; + float id = 0.0; + for (int z = -1; z <= 1; z++) { + for (int y = -1; y <= 1; y++) { + for (int x = -1; x <= 1; x++) { + vec3 neighbor = vec3(float(x), float(y), float(z)); + vec3 point = neighbor + sg_hash33(cell + neighbor) * jitter; + float gap = length(point - local); + if (gap < nearest) { + nearest = gap; + id = sg_hash13(cell + neighbor); + } + } + } + } + return vec2(nearest, id); + } + """, + HASH3, + ), + + ROTATE( + """ + vec2 sg_rotate(vec2 uv, vec2 center, float degrees) { + float angle = radians(degrees); + float s = sin(angle); + float c = cos(angle); + vec2 p = uv - center; + return vec2(p.x * c - p.y * s, p.x * s + p.y * c) + center; + } + """ + ), + + POLAR( + """ + vec2 sg_polar(vec2 uv, vec2 center) { + vec2 p = uv - center; + return vec2(length(p) * 2.0, atan(p.y, p.x) / 6.28318530718 + 0.5); + } + """ + ), + + /** + * Signed distances to shapes centered on the surface, negative inside. `p` runs from -1 to 1 + * across the surface and `size` is the half extent of the shape in the same units. + */ + SHAPES( + """ + float sg_shape_ellipse(vec2 p, vec2 size) { + return (length(p / size) - 1.0) * min(size.x, size.y); + } + + float sg_shape_rectangle(vec2 p, vec2 size, float radius) { + float r = clamp(radius, 0.0, 1.0) * min(size.x, size.y); + vec2 d = abs(p) - size + r; + return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0) - r; + } + + float sg_shape_polygon(vec2 p, vec2 size, float sides) { + float n = max(floor(sides), 3.0); + float half_angle = 3.14159265 / n; + vec2 q = p / size; + float angle = mod(atan(q.x, q.y) + half_angle, 2.0 * half_angle) - half_angle; + return (length(q) * cos(angle) - cos(half_angle)) * min(size.x, size.y); + } + + float sg_shape_ring(vec2 p, vec2 size, float thickness) { + return abs(sg_shape_ellipse(p, size)) - thickness * 0.5; + } + + float sg_shape_mask(float distance, float softness) { + float m = clamp(-distance / max(softness, 0.0001), 0.0, 1.0); + return m * m * (3.0 - 2.0 * m); + } + """ + ); + + companion object { + /** [libraries] and everything they need, each once, dependencies first. */ + fun ordered(libraries: Collection): List { + val out = LinkedHashSet() + fun visit(library: ShaderLibrary) { + if (library in out) return + library.requires.forEach(::visit) + out += library + } + libraries.sortedBy { it.ordinal }.forEach(::visit) + return out.toList() + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderMathNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderMathNodes.kt new file mode 100644 index 000000000..37a3926ba --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderMathNodes.kt @@ -0,0 +1,298 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderNodeCategory.* +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinType.* + +/** Arithmetic, vectors and patterns: the nodes that compute rather than read. */ +internal object ShaderMathNodes { + const val EXPRESSION = "hollowengine:math/expression" + const val SHAPE = "hollowengine:procedural/shape" + + /** What a new expression node computes. */ + const val DEFAULT_EXPRESSION = "a * b" + + val all: List by lazy { math() + vector() + procedural() } + + private fun math() = listOf( + binary("add", "arithmetic", 0f, 0f) { a, b -> "$a + $b" }, + binary("subtract", "arithmetic", 0f, 0f) { a, b -> "$a - $b" }, + binary("multiply", "arithmetic", 1f, 1f) { a, b -> "$a * $b" }, + binary("divide", "arithmetic", 1f, 1f) { a, b -> "$a / $b" }, + binary("power", "arithmetic", 1f, 2f) { a, b -> "pow($a, $b)" }, + unary("square_root", "arithmetic") { "sqrt($it)" }, + unary("one_minus", "arithmetic") { "1.0 - $it" }, + unary("negate", "arithmetic") { "-$it" }, + unary("absolute", "arithmetic") { "abs($it)" }, + + binary("minimum", "range", 0f, 0f) { a, b -> "min($a, $b)" }, + binary("maximum", "range", 0f, 0f) { a, b -> "max($a, $b)" }, + binary("modulo", "range", 0f, 1f) { a, b -> "mod($a, $b)" }, + shaderNode("hollowengine:math/clamp", MATH) { + group("range") + val value = input("In", 0f) + val min = input("Min", 0f) + val max = input("Max", 1f) + output("Out") { "clamp(${value.code}, ${min.code}, ${max.code})" } + }, + unary("saturate", "range") { "clamp($it, 0.0, 1.0)" }, + unary("floor", "range") { "floor($it)" }, + unary("fraction", "range") { "fract($it)" }, + shaderNode("hollowengine:math/remap", MATH) { + group("range") + val value = input("In", 0.5f) + val inMin = input("In Min", 0f) + val inMax = input("In Max", 1f) + val outMin = input("Out Min", 0f) + val outMax = input("Out Max", 1f) + output("Out") { + "${outMin.code} + (${value.code} - ${inMin.code}) * (${outMax.code} - ${outMin.code}) / (${inMax.code} - ${inMin.code})" + } + }, + + shaderNode("hollowengine:math/lerp", MATH) { + group("interpolation") + val a = input("A", 0f) + val b = input("B", 1f) + val t = input("T", 0.5f) + output("Out") { "mix(${a.code}, ${b.code}, ${t.code})" } + }, + shaderNode("hollowengine:math/step", MATH) { + group("interpolation") + val edge = input("Edge", 0.5f) + val value = input("In", 0f) + output("Out") { "step(${edge.code}, ${value.code})" } + }, + shaderNode("hollowengine:math/smoothstep", MATH) { + group("interpolation") + val from = input("Edge 1", 0f) + val to = input("Edge 2", 1f) + val value = input("In", 0.5f) + output("Out") { "smoothstep(${from.code}, ${to.code}, ${value.code})" } + }, + + unary("sine", "trigonometry") { "sin($it)" }, + unary("cosine", "trigonometry") { "cos($it)" }, + + expression(), + ) + + /** + * GLSL typed on the node: every free name of the text is a pin, so `(sin(x) + 1) / 2` is a node + * with an input `x`. A pin named like an engine input, such as `uv` or `time`, reads that input + * while nothing is linked to it. + */ + private fun expression() = shaderNode(EXPRESSION, MATH) { + group("expression") + expression("expression", DEFAULT_EXPRESSION) + option("type", "auto", "float", "vec2", "vec3", "vec4") + pins { node -> + ShaderExpression.parse(node.options["expression"] ?: DEFAULT_EXPRESSION).variables.map { name -> + ShaderPinSpec(name, ShaderPinType.ANY, listOf(0f), ShaderInput.forExpression(name)) + } + } + check { node -> + ShaderExpression.parse(node.options["expression"] ?: DEFAULT_EXPRESSION).error?.let { error -> + ShaderDiagnostic( + ShaderProblem.INVALID_EXPRESSION, + node.id, + error.detail, + reason = error.problem.name.lowercase() + ) + } + } + // Left on auto, the type is read off the text: `length(v)` is a number, `v * 2` as wide as `v`. + output("Out", typeOf = { + when (node.options["type"]) { + "float" -> FLOAT + "vec2" -> VEC2 + "vec3" -> VEC3 + "vec4" -> VEC4 + else -> ShaderExpression.parse(node.options["expression"] ?: DEFAULT_EXPRESSION) + .width { name -> input(name)?.width }?.let { ShaderPinType.of(ShaderType.ofWidth(it)) } ?: FLOAT + } + }) { + ShaderExpression.parse(option("expression")).glsl(::input) ?: shaderLiteral(outputType, listOf(0f)) + } + } + + private fun vector() = listOf( + shaderNode("hollowengine:vector/length", VECTOR) { + group("measure") + val value = input("In", 0f) + output("Out", FLOAT) { "length(${value.code})" } + }, + shaderNode("hollowengine:vector/distance", VECTOR) { + group("measure") + val a = input("A", 0f) + val b = input("B", 0f) + output("Out", FLOAT) { "distance(${a.code}, ${b.code})" } + }, + shaderNode("hollowengine:vector/dot", VECTOR) { + group("measure") + val a = input("A", 0f) + val b = input("B", 0f) + output("Out", FLOAT) { "dot(${a.code}, ${b.code})" } + }, + shaderNode("hollowengine:vector/cross", VECTOR) { + group("measure") + val a = input("A", 1f, 0f, 0f, type = VEC3) + val b = input("B", 0f, 1f, 0f, type = VEC3) + output("Out", VEC3) { "cross(${a.code}, ${b.code})" } + }, + shaderNode("hollowengine:vector/normalize", VECTOR) { + group("measure") + val value = input("In", 0f, 1f, 0f) + output("Out") { "normalize(${value.code})" } + }, + shaderNode("hollowengine:vector/split", VECTOR) { + group("channels") + noPreview() + val value = input("In", 0f, 0f, 0f, 0f, type = VEC4) + output("R", FLOAT) { "${value.code}.x" } + output("G", FLOAT) { "${value.code}.y" } + output("B", FLOAT) { "${value.code}.z" } + output("A", FLOAT) { "${value.code}.w" } + }, + shaderNode("hollowengine:vector/combine", VECTOR) { + group("channels") + val r = input("R", 0f, type = FLOAT) + val g = input("G", 0f, type = FLOAT) + val b = input("B", 0f, type = FLOAT) + val a = input("A", 1f, type = FLOAT) + output("RGBA", VEC4) { "vec4(${r.code}, ${g.code}, ${b.code}, ${a.code})" } + output("RGB", VEC3) { "${output("RGBA")}.rgb" } + output("RG", VEC2) { "${output("RGBA")}.rg" } + }, + shaderNode("hollowengine:vector/swizzle", VECTOR) { + group("channels") + text("mask", default = "xyz") + val value = input("In", 0f, 0f, 0f, 0f, type = VEC4) + output("Out", { ShaderPinType.of(ShaderType.ofWidth(swizzleMask(node.options["mask"] ?: "xyz").length)) }) { + "${value.code}.${swizzleMask(option("mask"))}" + } + }, + ) + + private fun procedural() = listOf( + noise("value_noise", ShaderLibrary.VALUE_NOISE, ShaderLibrary.VALUE_NOISE3, "sg_value_noise"), + noise("gradient_noise", ShaderLibrary.GRADIENT_NOISE, ShaderLibrary.GRADIENT_NOISE3, "sg_gradient_noise"), + shaderNode("hollowengine:procedural/fbm", PROCEDURAL) { + group("noise") + uses(ShaderLibrary.FBM, ShaderLibrary.FBM3) + val uv = input("UV", fallback = ShaderInput.UV) + val scale = input("Scale", 4f, type = FLOAT) + val octaves = input("Octaves", 4f, type = FLOAT) + val roughness = input("Roughness", 0.5f, type = FLOAT) + output("Out", FLOAT) { noiseCall("sg_fbm", dynamic, uv.code, scale.code, octaves.code, roughness.code) } + }, + shaderNode("hollowengine:procedural/voronoi", PROCEDURAL) { + group("noise") + uses(ShaderLibrary.VORONOI, ShaderLibrary.VORONOI3) + val uv = input("UV", fallback = ShaderInput.UV) + val scale = input("Scale", 5f, type = FLOAT) + val jitter = input("Jitter", 1f, type = FLOAT) + output("Distance", FLOAT) { noiseCall("sg_voronoi", dynamic, uv.code, scale.code, jitter.code) + ".x" } + output("Cell", FLOAT) { noiseCall("sg_voronoi", dynamic, uv.code, scale.code, jitter.code) + ".y" } + }, + shape(), + shaderNode("hollowengine:procedural/fresnel", PROCEDURAL) { + group("lighting") + val normal = input("Normal", type = VEC3, fallback = ShaderInput.NORMAL) + val view = input("View", type = VEC3, fallback = ShaderInput.VIEW_DIRECTION) + val power = input("Power", 5f, type = FLOAT) + output("Out", FLOAT) { + "pow(1.0 - clamp(abs(dot(normalize(${normal.code}), normalize(${view.code}))), 0.0, 1.0), ${power.code})" + } + }, + ) + + /** + * A shape centered on the surface: a circle for a particle, a long rectangle for a beam. Width and + * height are fractions of the surface; the inputs a shape does not use are not there. + */ + private fun shape() = shaderNode(SHAPE, PROCEDURAL) { + group("shape") + uses(ShaderLibrary.SHAPES) + option("shape", "ellipse", "rectangle", "polygon", "ring") + fun shapeIs(vararg names: String): (ShaderGraphNode) -> Boolean = + { node -> (node.options["shape"] ?: "ellipse") in names } + + val uv = input("UV", type = VEC2, fallback = ShaderInput.UV) + val width = input("Width", 1f, type = FLOAT) + val height = input("Height", 1f, type = FLOAT) + val roundness = input("Roundness", 0f, type = FLOAT, shownFor = shapeIs("rectangle")) + val sides = input("Sides", 6f, type = FLOAT, shownFor = shapeIs("polygon")) + val thickness = input("Thickness", 0.1f, type = FLOAT, shownFor = shapeIs("ring")) + val softness = input("Softness", 0.02f, type = FLOAT) + output("Distance", FLOAT) { + val p = "(${uv.code} * 2.0 - 1.0)" + val size = "vec2(${width.code}, ${height.code})" + when (option("shape")) { + "rectangle" -> "sg_shape_rectangle($p, $size, ${roundness.code})" + "polygon" -> "sg_shape_polygon($p, $size, ${sides.code})" + "ring" -> "sg_shape_ring($p, $size, ${thickness.code})" + else -> "sg_shape_ellipse($p, $size)" + } + } + output("Mask", FLOAT) { "sg_shape_mask(${output("Distance")}, ${softness.code})" } + } + + private fun binary(name: String, group: String, a: Float, b: Float, expression: (String, String) -> String) = + shaderNode("hollowengine:math/$name", MATH) { + group(group) + val left = input("A", a) + val right = input("B", b) + output("Out") { expression(left.code, right.code) } + } + + private fun unary(name: String, group: String, expression: (String) -> String) = + shaderNode("hollowengine:math/$name", MATH) { + group(group) + val value = input("In", 0f) + output("Out") { expression("(${value.code})") } + } + + /** A noise over a UV, or over a position in 3D, whichever its coordinates are. */ + private fun noise(name: String, flat: ShaderLibrary, solid: ShaderLibrary, function: String) = + shaderNode("hollowengine:procedural/$name", PROCEDURAL) { + group("noise") + uses(flat, solid) + val uv = input("UV", fallback = ShaderInput.UV) + val scale = input("Scale", 8f, type = FLOAT) + output("Out", FLOAT) { noiseCall(function, dynamic, uv.code, scale.code) } + } + + /** + * A call of a noise [function] on [coordinates] of [type]: its 3D version, suffixed `3`, for a + * position, the 2D one for a UV; a number is read as a UV along x. + */ + private fun noiseCall( + function: String, + type: ShaderType, + coordinates: String, + scale: String, + vararg rest: String, + ): String { + val tail = rest.joinToString("") { ", $it" } + return when (type.width) { + 1 -> "$function(vec2($coordinates, 0.0) * $scale$tail)" + 2 -> "$function($coordinates * $scale$tail)" + 3 -> "${function}3($coordinates * $scale$tail)" + else -> "${function}3(($coordinates).xyz * $scale$tail)" + } + } +} + +/** A swizzle mask as GLSL takes it: one to four of `xyzw`, in `rgba` too; anything else reads `x`. */ +internal fun swizzleMask(mask: String?): String { + val normalized = mask.orEmpty().lowercase().map { char -> + when (char) { + 'r' -> 'x' + 'g' -> 'y' + 'b' -> 'z' + 'a' -> 'w' + else -> char + } + }.joinToString("") + return normalized.takeIf { it.length in 1..4 && it.all { char -> char in "xyzw" } } ?: "x" +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt new file mode 100644 index 000000000..b1edcce49 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt @@ -0,0 +1,214 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderNodeCategory.* +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderNodeCategory.TEXTURE +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinType.FLOAT +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinType.VEC2 +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinType.VEC3 +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinType.VEC4 + +/** The kinds of node the engine ships, in the order the add menu lists them. */ +object ShaderNodeLibrary { + const val SURFACE_OUTPUT = "hollowengine:output/surface" + const val PROPERTY = "hollowengine:input/property" + const val EXPRESSION = ShaderMathNodes.EXPRESSION + + val all: List by lazy { inputs() + uv() + texture() + output() + ShaderMathNodes.all } + + /** + * What a new surface graph starts as: the material texture times the particle color, which is what + * a material without a graph draws, so a new graph changes nothing until it is edited. + */ + fun defaultSurface() = ShaderGraph( + nodes = listOf( + ShaderGraphNode("texture", "hollowengine:texture/sample", x = -520f, y = -40f), + ShaderGraphNode("color", "hollowengine:input/vertex_color", x = -520f, y = 190f), + ShaderGraphNode("tint", "hollowengine:math/multiply", x = -300f, y = 0f), + ShaderGraphNode("alpha", "hollowengine:vector/split", x = -300f, y = 190f), + ShaderGraphNode("output", SURFACE_OUTPUT, x = -60f, y = 0f), + ), + links = listOf( + ShaderGraphLink("texture", "RGBA", "tint", "A"), + ShaderGraphLink("color", "RGBA", "tint", "B"), + ShaderGraphLink("tint", "Out", "output", SurfaceOutputs.COLOR), + ShaderGraphLink("tint", "Out", "alpha", "In"), + ShaderGraphLink("alpha", "A", "output", SurfaceOutputs.ALPHA), + ), + ) + + private fun inputs() = listOf( + engineInput("uv", ShaderInput.UV, "UV"), + engineInput("texture_uv", ShaderInput.TEXTURE_UV, "UV"), + engineInput("position", ShaderInput.POSITION, "Position"), + engineInput("object_position", ShaderInput.OBJECT_POSITION, "Position"), + engineInput("normal", ShaderInput.NORMAL, "Normal"), + engineInput("view_direction", ShaderInput.VIEW_DIRECTION, "Direction"), + engineInput("screen_uv", ShaderInput.SCREEN_UV, "UV"), + + shaderNode("hollowengine:input/vertex_color", INPUT) { + group("surface") + noPreview() + reads(ShaderInput.COLOR) + output("RGBA", VEC4) { ShaderInput.COLOR.glsl } + output("RGB", VEC3) { "${ShaderInput.COLOR.glsl}.rgb" } + output("A", FLOAT) { "${ShaderInput.COLOR.glsl}.a" } + }, + + shaderNode("hollowengine:input/time", INPUT) { + group("time") + noPreview() + reads(ShaderInput.TIME) + output("Time", FLOAT) { ShaderInput.TIME.glsl } + output("Sine", FLOAT) { "sin(${ShaderInput.TIME.glsl})" } + }, + + shaderNode("hollowengine:input/scene_depth", INPUT) { + group("scene") + noPreview() + reads(ShaderInput.SCENE_DEPTH, ShaderInput.FRAGMENT_DEPTH) + fragmentOnly() + output("Scene", FLOAT) { ShaderInput.SCENE_DEPTH.glsl } + output("Fragment", FLOAT) { ShaderInput.FRAGMENT_DEPTH.glsl } + output("Difference", FLOAT) { "${output("Scene")} - ${output("Fragment")}" } + }, + + shaderNode("hollowengine:input/scene_color", INPUT) { + group("scene") + noPreview() + reads(ShaderInput.SCENE_COLOR) + fragmentOnly() + val uv = input("UV", type = VEC2, fallback = ShaderInput.SCREEN_UV) + output("RGB", VEC3) { "${ShaderInput.SCENE_COLOR.glsl}(${uv.code})" } + }, + + constant("float", FLOAT, 0f), + constant("vector2", VEC2, 0f, 0f), + constant("vector3", VEC3, 0f, 0f, 0f), + constant("vector4", VEC4, 0f, 0f, 0f, 0f), + shaderNode("hollowengine:input/color", INPUT) { + group("value") + noPreview() + val color = input("Color", 1f, 1f, 1f, 1f, type = VEC4, color = true) + output("RGBA", VEC4) { color.code } + output("RGB", VEC3) { "${output("RGBA")}.rgb" } + }, + shaderNode(PROPERTY, INPUT) { + group("value") + noPreview() + property("property") + output("Out", { graph.property(node.options["property"].orEmpty())?.type?.let(ShaderPinType::of) }) { + propertyUniform(option("property")) + } + }, + shaderNode("hollowengine:input/main_texture", INPUT) { + group("value") + reads(ShaderInput.MAIN_TEXTURE) + output("Texture", ShaderPinType.TEXTURE) { ShaderInput.MAIN_TEXTURE.glsl } + }, + ) + + private fun uv() = listOf( + shaderNode("hollowengine:uv/tiling_offset", UV) { + val uv = input("UV", type = VEC2, fallback = ShaderInput.UV) + val tiling = input("Tiling", 1f, 1f, type = VEC2) + val offset = input("Offset", 0f, 0f, type = VEC2) + output("Out", VEC2) { "${uv.code} * ${tiling.code} + ${offset.code}" } + }, + shaderNode("hollowengine:uv/rotate", UV) { + uses(ShaderLibrary.ROTATE) + val uv = input("UV", type = VEC2, fallback = ShaderInput.UV) + val center = input("Center", 0.5f, 0.5f, type = VEC2) + val degrees = input("Degrees", 0f, type = FLOAT) + output("Out", VEC2) { "sg_rotate(${uv.code}, ${center.code}, ${degrees.code})" } + }, + shaderNode("hollowengine:uv/polar", UV) { + uses(ShaderLibrary.POLAR) + val uv = input("UV", type = VEC2, fallback = ShaderInput.UV) + val center = input("Center", 0.5f, 0.5f, type = VEC2) + output("Out", VEC2) { "sg_polar(${uv.code}, ${center.code})" } + }, + shaderNode("hollowengine:uv/scroll", UV) { + reads(ShaderInput.TIME) + val uv = input("UV", type = VEC2, fallback = ShaderInput.UV) + val speed = input("Speed", 0f, 0.5f, type = VEC2) + output("Out", VEC2) { "${uv.code} + ${speed.code} * ${ShaderInput.TIME.glsl}" } + }, + ) + + private fun texture() = listOf( + shaderNode("hollowengine:texture/sample", TEXTURE) { + toggle("flip_x") + toggle("flip_y") + reads(ShaderInput.FRAME_UV) + val texture = input("Texture", type = ShaderPinType.TEXTURE, fallback = ShaderInput.MAIN_TEXTURE) + val uv = input("UV", type = VEC2, fallback = ShaderInput.TEXTURE_UV) + output("RGBA", VEC4) { + val at = sampledUv(uv.code, uv.linked, toggle("flip_x"), toggle("flip_y")) + if (vertex) "textureLod(${texture.code}, $at, 0.0)" else "texture(${texture.code}, $at)" + } + output("RGB", VEC3) { "${output("RGBA")}.rgb" } + output("A", FLOAT) { "${output("RGBA")}.a" } + }, + ) + + /** + * Where a sample reads: [uv] as it is, or turned over. With nothing linked the surface UV is turned + * over and then mapped into the texture, so a flipbook frame turns over in place. + */ + private fun sampledUv(uv: String, linked: Boolean, flipX: Boolean, flipY: Boolean): String { + if (!flipX && !flipY) return uv + fun flip(of: String): String { + val x = if (flipX) "1.0 - $of.x" else "$of.x" + val y = if (flipY) "1.0 - $of.y" else "$of.y" + return "vec2($x, $y)" + } + return if (linked) flip("($uv)") else "${ShaderInput.FRAME_UV.glsl}(${flip(ShaderInput.UV.glsl)})" + } + + private fun output() = listOf( + shaderNode(SURFACE_OUTPUT, OUTPUT) { + master(ShaderTarget.SURFACE, SurfaceOutputs.VERTEX_OFFSET) + input(SurfaceOutputs.COLOR, 1f, 1f, 1f, type = VEC3, color = true) + input(SurfaceOutputs.ALPHA, 1f, type = FLOAT) + input(SurfaceOutputs.EMISSION, 0f, 0f, 0f, type = VEC3, color = true) + input(SurfaceOutputs.ALPHA_CLIP, 0f, type = FLOAT) + input(SurfaceOutputs.VERTEX_OFFSET, 0f, 0f, 0f, type = VEC3) + }, + ) + + /** A node that hands out one thing the engine gives every graph. */ + private fun engineInput(name: String, input: ShaderInput, output: String) = + shaderNode("hollowengine:input/$name", INPUT) { + group("surface") + reads(input) + if (input.fragmentOnly) fragmentOnly() + output(output, ShaderPinType.of(input.type)) { input.glsl } + } + + /** A value typed in on the node itself: an input with nothing to link, passed straight out. */ + private fun constant(name: String, type: ShaderPinType, vararg default: Float) = + shaderNode("hollowengine:input/$name", INPUT) { + group("value") + noPreview() + val value = input("Value", *default, type = type) + output("Out", type) { value.code } + } +} + +/** The inputs of the surface output node, which the templates read back by these names. */ +object SurfaceOutputs { + const val COLOR = "Color" + const val ALPHA = "Alpha" + + /** What glows in the glow pass; left unlinked, the color does, as with a material that has no graph. */ + const val EMISSION = "Emission" + + /** Fragments with less alpha than this are dropped. */ + const val ALPHA_CLIP = "Alpha Clip" + + /** Blocks the vertex moves by, in the space of the view. */ + const val VERTEX_OFFSET = "Vertex Offset" +} + +/** The uniform a property reads, named so it cannot clash with anything of the engine's. */ +fun propertyUniform(property: String): String = "p_" + property.filter { it.isLetterOrDigit() || it == '_' } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt new file mode 100644 index 000000000..5451f24e4 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt @@ -0,0 +1,283 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionHandle +import ru.hollowhorizon.hollowengine.api.extensions.ExtensionPoints +import ru.hollowhorizon.hollowengine.common.utils.rl + +/** Where a kind of node shows up in the add menu. */ +enum class ShaderNodeCategory { + INPUT, MATH, VECTOR, UV, TEXTURE, PROCEDURAL, OUTPUT, +} + +/** An input of a kind of node: what it takes, and what it is when nothing is linked to it. */ +class ShaderPinSpec( + val name: String, + val type: ShaderPinType, + val default: List, + val fallback: ShaderInput? = null, + val shownFor: ((ShaderGraphNode) -> Boolean)? = null, + val color: Boolean = false, +) + +/** + * What the type of an output can be worked out from: the node as placed, in its graph, and the types + * its inputs resolved to. + */ +class ShaderTypeContext internal constructor( + val graph: ShaderGraph, + val node: ShaderGraphNode, + private val inputs: Map, +) { + fun input(name: String): ShaderType? = inputs[name] +} + +/** + * An output of a kind of node. Its type is [type], or what [typeOf] says for the node as placed, + * which is how a property node takes the type of its property; [typeOf] giving null means the type + * cannot be worked out. + */ +class ShaderOutputSpec( + val name: String, + val type: ShaderPinType, + val typeOf: (ShaderTypeContext.() -> ShaderPinType?)?, + val expression: ShaderEmitContext.() -> String, +) + +/** How a choice a node offers is edited. */ +enum class ShaderOptionKind { + /** One of [ShaderOptionSpec.values]. */ + CHOICE, + + /** On or off, stored as `true` and `false`. */ + TOGGLE, + + /** Free text. */ + TEXT, + + /** GLSL, as the expression node takes it. */ + EXPRESSION, + + /** One of the properties of the graph. */ + PROPERTY, +} + +/** A choice a node offers besides its inputs. */ +class ShaderOptionSpec(val name: String, val kind: ShaderOptionKind, val values: List, val default: String) { + val titleKey: String get() = "hollowengine.gui.shadergraph.option.$name" + + fun valueKey(value: String): String = "hollowengine.gui.shadergraph.option.$name.$value" +} + +/** What makes a kind of node the output of a graph: which target, and which of its inputs feed the vertex stage. */ +class ShaderMasterSpec(val target: ShaderTarget, val vertexInputs: Set) + +/** + * One kind of node: its pins and options, and the GLSL each output is. Kinds are made with + * [shaderNode] and live in [ShaderNodeTypes], so an addon can add its own. + */ +class ShaderNodeType( + val id: String, + val category: ShaderNodeCategory, + val group: String, + private val declaredInputs: List, + private val pinsOf: ((ShaderGraphNode) -> List)?, + val outputs: List, + val options: List, + val reads: Set, + val libraries: Set, + val fragmentOnly: Boolean, + val master: ShaderMasterSpec?, + val previewByDefault: Boolean, + private val check: ((ShaderGraphNode) -> ShaderDiagnostic?)?, +) { + val titleKey: String get() = "hollowengine.gui.shadergraph.node.${id.substringAfter(':').replace('/', '.')}" + + val prototype: ShaderGraphNode get() = ShaderGraphNode("", id) + + fun inputs(node: ShaderGraphNode): List = + pinsOf?.invoke(node) ?: declaredInputs.filter { it.shownFor?.invoke(node) != false } + + fun codeInputs(node: ShaderGraphNode): List = pinsOf?.invoke(node) ?: declaredInputs + + fun input(node: ShaderGraphNode, name: String): ShaderPinSpec? = inputs(node).firstOrNull { it.name == name } + + fun output(name: String): ShaderOutputSpec? = outputs.firstOrNull { it.name == name } + fun option(name: String): ShaderOptionSpec? = options.firstOrNull { it.name == name } + + fun problem(node: ShaderGraphNode): ShaderDiagnostic? = check?.invoke(node) + + fun showsPreview(node: ShaderGraphNode): Boolean = + (outputs.isNotEmpty() || master != null) && (node.preview ?: previewByDefault) +} + +/** + * What an output expression is written against: the GLSL of each input, already of the type the pin + * resolved to, the node's options, and the variables of the node's earlier outputs. + */ +class ShaderEmitContext internal constructor( + val graph: ShaderGraph, + val node: ShaderGraphNode, + val dynamic: ShaderType, + val outputType: ShaderType, + val vertex: Boolean, + private val inputCode: Map, + private val outputVariables: Map, + private val kind: ShaderNodeType, +) { + /** The GLSL of this input. */ + val ShaderPinSpec.code: String get() = inputCode.getValue(name) + + /** The GLSL of the input named [name]. */ + fun input(name: String): String = inputCode.getValue(name) + + /** Whether something is linked into this input, rather than it taking its value or its fallback. */ + val ShaderPinSpec.linked: Boolean get() = graph.linkInto(node.id, name) != null && kind.inputs(node).any { it.name == name } + + /** The variable an earlier output of this node was written to. */ + fun output(name: String): String = outputVariables.getValue(name) + + fun option(name: String): String = node.options[name] ?: kind.option(name)?.default.orEmpty() + + fun toggle(name: String): Boolean = option(name) == "true" +} + +/** Builds a kind of node; see [shaderNode]. */ +class ShaderNodeBuilder internal constructor(private val id: String, private val category: ShaderNodeCategory) { + private val inputs = ArrayList() + private val outputs = ArrayList() + private val options = ArrayList() + private val reads = LinkedHashSet() + private val libraries = LinkedHashSet() + private var group = "" + private var pinsOf: ((ShaderGraphNode) -> List)? = null + private var check: ((ShaderGraphNode) -> ShaderDiagnostic?)? = null + private var fragmentOnly = false + private var preview = true + private var master: ShaderMasterSpec? = null + + fun input( + name: String, + vararg default: Float, + type: ShaderPinType = ShaderPinType.DYNAMIC, + fallback: ShaderInput? = null, + shownFor: ((ShaderGraphNode) -> Boolean)? = null, + color: Boolean = false, + ): ShaderPinSpec = ShaderPinSpec(name, type, default.toList(), fallback, shownFor, color).also { inputs += it } + + /** Works the inputs out of the node itself, in place of the ones declared with [input]. */ + fun pins(of: (ShaderGraphNode) -> List) { + pinsOf = of + } + + fun output(name: String, type: ShaderPinType = ShaderPinType.DYNAMIC, expression: ShaderEmitContext.() -> String) { + outputs += ShaderOutputSpec(name, type, null, expression) + } + + /** An output whose type depends on how the node is set up rather than on its inputs. */ + fun output( + name: String, + typeOf: ShaderTypeContext.() -> ShaderPinType?, + expression: ShaderEmitContext.() -> String, + ) { + outputs += ShaderOutputSpec(name, ShaderPinType.DYNAMIC, typeOf, expression) + } + + fun option(name: String, vararg values: String, default: String = values.firstOrNull().orEmpty()) { + options += ShaderOptionSpec(name, ShaderOptionKind.CHOICE, values.toList(), default) + } + + fun toggle(name: String, default: Boolean = false) { + options += ShaderOptionSpec(name, ShaderOptionKind.TOGGLE, listOf("false", "true"), default.toString()) + } + + fun text(name: String, default: String = "") { + options += ShaderOptionSpec(name, ShaderOptionKind.TEXT, emptyList(), default) + } + + fun expression(name: String, default: String) { + options += ShaderOptionSpec(name, ShaderOptionKind.EXPRESSION, emptyList(), default) + } + + fun property(name: String) { + options += ShaderOptionSpec(name, ShaderOptionKind.PROPERTY, emptyList(), "") + } + + /** Reports what is wrong with a node as it is set up; see [ShaderNodeType.problem]. */ + fun check(problem: (ShaderGraphNode) -> ShaderDiagnostic?) { + check = problem + } + + fun group(name: String) { + group = name + } + + /** New nodes of this kind start with their preview off. */ + fun noPreview() { + preview = false + } + + fun reads(vararg inputs: ShaderInput) { + reads += inputs + } + + fun uses(vararg library: ShaderLibrary) { + libraries += library + } + + fun fragmentOnly() { + fragmentOnly = true + } + + fun master(target: ShaderTarget, vararg vertexInputs: String) { + master = ShaderMasterSpec(target, vertexInputs.toSet()) + } + + internal fun build() = ShaderNodeType( + id = id, + category = category, + group = group, + declaredInputs = inputs.toList(), + pinsOf = pinsOf, + outputs = outputs.toList(), + options = options.toList(), + reads = reads.toSet(), + libraries = libraries.toSet(), + fragmentOnly = fragmentOnly, + master = master, + previewByDefault = preview, + check = check, + ) +} + +/** + * A kind of node, declared the way it reads: + * + * ``` + * shaderNode("hollowengine:math/multiply", ShaderNodeCategory.MATH) { + * val a = input("A", 1f) + * val b = input("B", 1f) + * output("Out") { "${a.code} * ${b.code}" } + * } + * ``` + */ +fun shaderNode(id: String, category: ShaderNodeCategory, build: ShaderNodeBuilder.() -> Unit): ShaderNodeType = + ShaderNodeBuilder(id, category).apply(build).build() + +/** Every kind of node a graph can use. */ +object ShaderNodeTypes { + val point = ExtensionPoints.create("hollowengine:shadergraph/node_types".rl) + + init { + ShaderNodeLibrary.all.forEach(::register) + } + + fun register(type: ShaderNodeType): ExtensionHandle = point.register(type.id.rl, type) + + /** Every kind, in the order they were registered, which is the order the add menu lists them in. */ + val all: List get() = point.extensions + + fun of(id: String): ShaderNodeType? = all.firstOrNull { it.id == id } + + /** The output node kind of [target]. */ + fun master(target: ShaderTarget): ShaderNodeType? = all.firstOrNull { it.master?.target == target } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderTypes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderTypes.kt new file mode 100644 index 000000000..deea15294 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderTypes.kt @@ -0,0 +1,142 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import kotlinx.serialization.Serializable + +/** A value that flows along a link of a shader graph. */ +@Serializable +enum class ShaderType(val glsl: String, val width: Int) { + FLOAT("float", 1), VEC2("vec2", 2), VEC3("vec3", 3), VEC4("vec4", 4), + + /** A texture to sample; it only ever connects to another texture pin. */ + TEXTURE("sampler2D", 0); + + val isVector: Boolean get() = width > 0 + + companion object { + fun ofWidth(width: Int): ShaderType = when (width) { + 1 -> FLOAT + 2 -> VEC2 + 3 -> VEC3 + else -> VEC4 + } + } +} + +/** + * The type a pin is declared with: a fixed one; [DYNAMIC], where every dynamic pin of the node takes + * the widest vector any of them is given; or [ANY], which keeps whatever vector it is given as it is. + */ +enum class ShaderPinType(val fixed: ShaderType?) { + FLOAT(ShaderType.FLOAT), VEC2(ShaderType.VEC2), VEC3(ShaderType.VEC3), VEC4(ShaderType.VEC4), TEXTURE(ShaderType.TEXTURE), DYNAMIC( + null + ), + ANY(null); + + /** Whether a value of [type] can be linked into a pin of this type. */ + fun accepts(type: ShaderType): Boolean = when (fixed) { + null -> type.isVector + else -> coerce("", type, fixed) != null + } + + companion object { + fun of(type: ShaderType): ShaderPinType = entries.first { it.fixed == type } + } +} + +/** + * [expression] of type [from] read as [to]: a number spreads over every component, a vector is cut + * down or padded (with 0, and 1 for alpha). Null when there is no such reading, which is anything to + * or from a texture. + */ +fun coerce(expression: String, from: ShaderType, to: ShaderType): String? { + if (from == to) return expression + if (!from.isVector || !to.isVector) return null + return when { + from == ShaderType.FLOAT -> "${to.glsl}($expression)" + to == ShaderType.FLOAT -> "($expression).x" + to.width < from.width -> "($expression).${"xyzw".take(to.width)}" + to == ShaderType.VEC4 && from == ShaderType.VEC3 -> "vec4($expression, 1.0)" + to == ShaderType.VEC4 -> "vec4($expression, 0.0, 1.0)" + else -> "vec3($expression, 0.0)" + } +} + +/** A GLSL literal of [type] out of [values], missing components taken from the last one given. */ +fun shaderLiteral(type: ShaderType, values: List): String { + val components = (0 until type.width).map { values.getOrElse(it) { values.lastOrNull() ?: 0f } } + if (type == ShaderType.FLOAT) return glslFloat(components.first()) + if (components.distinct().size == 1) return "${type.glsl}(${glslFloat(components.first())})" + return "${type.glsl}(${components.joinToString(", ") { glslFloat(it) }})" +} + +/** A float as GLSL reads it: always with a point, never with a locale's comma. */ +fun glslFloat(value: Float): String { + if (value.isNaN() || value.isInfinite()) return "0.0" + val text = value.toString() + return if ('.' in text || 'E' in text || 'e' in text) text else "$text.0" +} + +/** + * What the engine hands a graph wherever it runs: each template declares the ones it can offer and + * defines them under these names before the graph's code. The functions among them read the scene + * where there is one and stand in for it where there is not, as in a node preview. + */ +enum class ShaderInput( + val glsl: String, + val type: ShaderType, + val fragmentOnly: Boolean = false, + val expressionName: String? = null, +) { + /** 0 to 1 across the surface, whatever part of the texture it shows. */ + UV("sg_uv", ShaderType.VEC2, expressionName = "uv"), + + /** The part of the material texture the surface shows, flipbook frame included. */ + TEXTURE_UV("sg_texture_uv", ShaderType.VEC2), + + /** + * A function from a UV across the surface to the texture UV that shows it, flipbook frame + * included; `sg_frame_uv(sg_uv)` is [TEXTURE_UV]. + */ + FRAME_UV("sg_frame_uv", ShaderType.VEC2), + + /** The particle color, tint and light already multiplied in. */ + COLOR("sg_color", ShaderType.VEC4, expressionName = "color"), + + /** Seconds; in game they run on as long as the game does, in the editor from when it opened. */ + TIME("sg_time", ShaderType.FLOAT, expressionName = "time"), + + /** Where the point is, relative to the camera, in blocks. */ + POSITION("sg_position", ShaderType.VEC3, expressionName = "position"), + + /** + * Where the point is on the object itself, -1 to 1 across it: a particle, a built-in mesh, the mesh + * of a preview. + */ + OBJECT_POSITION("sg_object_position", ShaderType.VEC3, expressionName = "local"), NORMAL( + "sg_normal", + ShaderType.VEC3, + expressionName = "normal" + ), + + /** From the point toward the eye, unit length. */ + VIEW_DIRECTION("sg_view_direction", ShaderType.VEC3, expressionName = "view"), + + /** Where on the screen the fragment is, 0 to 1. */ + SCREEN_UV("sg_screen_uv", ShaderType.VEC2, fragmentOnly = true), + + /** The texture the material names. */ + MAIN_TEXTURE("Sampler0", ShaderType.TEXTURE), + + /** Blocks from the eye to whatever the frame had drawn behind this fragment. */ + SCENE_DEPTH("sg_scene_depth()", ShaderType.FLOAT, fragmentOnly = true), + + /** Blocks from the eye to this fragment. */ + FRAGMENT_DEPTH("sg_fragment_depth()", ShaderType.FLOAT, fragmentOnly = true), + + /** A function of a screen UV: the frame as it was before the effect drew. */ + SCENE_COLOR("sg_scene_color", ShaderType.VEC3, fragmentOnly = true); + + companion object { + fun forExpression(name: String): ShaderInput? = entries.firstOrNull { it.expressionName == name } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt index c79c3507e..35ee1a5f8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiInputController.kt @@ -16,9 +16,6 @@ class HollowUiInputController { private var dragMoved = false - // Focus is per scope (root, each popup, each dock window): every scope independently owns one - // focused `focusable` target, so a popup and a text field stay focused at the same time. The - // active scope is the one that last gained focus - Tab cycles within it. private val focusByScope = LinkedHashMap() private val hoverChain = HashSet() private val runtimeStack = ArrayDeque() @@ -68,20 +65,12 @@ class HollowUiInputController { } } - fun isHovered(id: String): Boolean = hoveredNode?.id == id - fun prepareRoot(root: UiNode, closing: Boolean = false) { remapTrackedNodes(root) applyRuntimeStates(root, closing) } - /** - * Re-binds interaction tracking (hover/active/focus/drag) to the current tree by id. - * Compose may replace a node instance across a recomposition while keeping its id; without - * this, the stale instance would fail identity checks and the node would lose its hover/ - * active/focus state for a frame — visibly resetting transitions (e.g. a hover animation - * snapping back on click) and dropping press→release on re-parented nodes. - */ + /** Re-binds interaction tracking (hover/active/focus/drag) to the current tree by id.*/ private fun remapTrackedNodes(root: UiNode) { val hovered = hoveredNode val active = activeNode @@ -126,8 +115,7 @@ class HollowUiInputController { draggingNode = remap(dragging) activeScope = remap(scope)?.takeIf { inTree(it) } if (focusByScope.isNotEmpty()) { - fun relocate(node: UiNode): UiNode? = - node.id?.let { firstById[it] } ?: node.takeIf { it in present } + fun relocate(node: UiNode): UiNode? = node.id?.let { firstById[it] } ?: node.takeIf { it in present } val remappedFocus = focusByScope.entries.mapNotNull { (focusScope, target) -> val s = relocate(focusScope) ?: return@mapNotNull null @@ -155,12 +143,9 @@ class HollowUiInputController { if (previousNode === hoveredNode) return false - previousNode - ?.takeIf { it in frame.nodes } + previousNode?.takeIf { it in frame.nodes } ?.let { dispatch(frame.pointerEvent(UiEventKind.EXIT, it, mouseX, mouseY)) } - hoveredNode - ?.takeIf { it in frame.nodes } - ?.let { + hoveredNode?.takeIf { it in frame.nodes }?.let { dispatch(frame.pointerEvent(UiEventKind.ENTER, it, mouseX, mouseY)) } return true @@ -227,6 +212,7 @@ class HollowUiInputController { localY = hit.localY, width = layoutNode.rect.width, height = layoutNode.rect.height, + ancestorLocalPositions = frame.ancestorLocalPositions(hit.node, mouseX, mouseY), ) val pressHandled = dispatch(press) @@ -325,26 +311,26 @@ class HollowUiInputController { ): UiInputResult { var received = false fun dispatch(node: UiNode): Boolean { - val event = - UiEvent( - kind = UiEventKind.RELEASE, - node = node, - frame = frame, - button = button, - modifiers = modifiers, - x = mouseX, - y = mouseY, - released = true - ) + val event = UiEvent( + kind = UiEventKind.RELEASE, + node = node, + frame = frame, + button = button, + modifiers = modifiers, + x = mouseX, + y = mouseY, + released = true + ) received = dispatch(event) || received return event.consumed } - val handled = (frame.hitTest(mouseX, mouseY)?.node - ?: activeNode?.takeIf { it in frame.nodes })?.let { dispatch(it) } ?: false + val handled = + (frame.hitTest(mouseX, mouseY)?.node ?: activeNode?.takeIf { it in frame.nodes })?.let { dispatch(it) } + ?: false val releaseNode = draggingNode?.takeIf { it in frame.nodes } - if(!handled) releaseNode?.let { node -> dispatch(node) } + if (!handled) releaseNode?.let { node -> dispatch(node) } if (releaseNode != null && !dragMoved) { val hit = frame.hitTest(mouseX, mouseY)?.takeIf { it.node == releaseNode } dispatchClick( @@ -379,8 +365,6 @@ class HollowUiInputController { return UiInputResult(true, node, node.id, changed = true) } - fun hasScrollbarDrag(): Boolean = scrollbarDrag != null - fun charTyped( frame: HollowUiFrame, codePoint: Char, @@ -400,11 +384,11 @@ class HollowUiInputController { /** * The nodes that currently receive key/char events, most-in-front first. Multi-focus: every open - * focus scope (always active — the root, popups, dock windows) plus each scope's focused target. - * Higher layer (popups/overlays) gets first refusal. + * focus scope plus each scope's focused target. */ private fun focusTargets(frame: HollowUiFrame): List { val set = LinkedHashSet() + primaryFocus()?.takeIf { it in frame.nodes }?.let { set += it } focusByScope.values.forEach { if (it in frame.nodes) set += it } frame.nodes.forEach { if (it.resolvedSnapshot.focusScope) set += it } val ordered = set.sortedByDescending { it.resolvedSnapshot.layer } @@ -559,15 +543,15 @@ class HollowUiInputController { private fun isAltPressed(): Boolean { val window = Minecraft.getInstance()?.window?.window ?: return false - return GLFW.glfwGetKey(window, GLFW.GLFW_KEY_LEFT_ALT) == GLFW.GLFW_PRESS || - GLFW.glfwGetKey(window, GLFW.GLFW_KEY_RIGHT_ALT) == GLFW.GLFW_PRESS + return GLFW.glfwGetKey(window, GLFW.GLFW_KEY_LEFT_ALT) == GLFW.GLFW_PRESS || GLFW.glfwGetKey( + window, + GLFW.GLFW_KEY_RIGHT_ALT + ) == GLFW.GLFW_PRESS } internal fun focusedScrollableNode(frame: HollowUiFrame): UiNode? { return focusByScope.values.firstOrNull { - it in frame.layout.nodes && - it.resolvedSnapshot.scrollable && - frame.layout[it].scrollRange.hasScrollableAxis() + it in frame.layout.nodes && it.resolvedSnapshot.scrollable && frame.layout[it].scrollRange.hasScrollableAxis() } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt index 9fa7321b6..f71280eed 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt @@ -16,6 +16,7 @@ import java.util.* private const val ScrollTargetRangeEpsilon = 0.5f private const val WheelNotchPixels = 32f +private const val PendingFocusFrames = 10 data class HollowUiFrame( val root: UiNode, @@ -186,6 +187,10 @@ class HollowUiRuntime( var lastFrame: HollowUiFrame? = null private set + @Volatile + private var pendingFocus: String? = null + private var pendingFocusFrames = 0 + val mouseX: Float get() = input.x val mouseY: Float get() = input.y val focusedKey get() = input.focusedKey @@ -231,6 +236,7 @@ class HollowUiRuntime( input.dispatchHover(frame, mouseX, mouseY, ::dispatchUiEvent) if (profile != null) profile.inputNanos += System.nanoTime() - inputStartedAt lastFrame = frame + applyPendingFocus(frame) return frame } @@ -380,11 +386,15 @@ class HollowUiRuntime( horizontalModifier: Boolean, ): UiEvent { val delta = scrollWheelDelta(frame.layout[node].scrollRange, input.scrollX, input.scrollY, horizontalModifier) + val local = frame.layout[node].inputTransform.inverse()?.transform(input.mouseX, input.mouseY, 0f) return UiEvent( kind = UiEventKind.SCROLL, node = node, + frame = frame, x = input.mouseX, y = input.mouseY, + localX = local?.x ?: 0f, + localY = local?.y ?: 0f, scrollX = delta.x, scrollY = delta.y, rawScrollX = input.scrollX, @@ -557,6 +567,27 @@ class HollowUiRuntime( lastLayoutKey = null } + /** + * Focuses the node with [id] on the first frame that has it, or never if none does within a few + * frames; for content that is only now being composed, such as a field swapped in for a label. + */ + fun requestFocus(id: String) { + pendingFocusFrames = 0 + pendingFocus = id + } + + private fun applyPendingFocus(frame: HollowUiFrame) { + val id = pendingFocus ?: return + when { + frame.nodeByIdentifier(id) != null -> { + pendingFocus = null + input.focus(frame, id, ::dispatchUiEvent) + } + + ++pendingFocusFrames > PendingFocusFrames -> pendingFocus = null + } + } + fun focus(editorKey: String) { input.focus(lastFrame ?: return, editorKey, ::dispatchUiEvent) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiSurface.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiSurface.kt index c25a0be11..d1e45c374 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiSurface.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiSurface.kt @@ -44,6 +44,7 @@ class HollowUiSurface( LocalPointer provides pointer, LocalOverlayManager provides overlayManager, LocalUiViewport provides viewport, + LocalUiFocusRequester provides UiFocusRequester(runtime::requestFocus), ) { content() OverlayHost() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt index 56cced8b1..6498ab656 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiCompose.kt @@ -30,6 +30,13 @@ val LocalUiFrameTimeNanos = staticCompositionLocalOf { 0L } val LocalUiViewport = compositionLocalOf { UiRect.Zero } val LocalStylesheets = staticCompositionLocalOf> { emptyList() } +/** Focuses a node by its id once it is on screen; see [HollowUiRuntime.requestFocus]. */ +fun interface UiFocusRequester { + fun request(id: String) +} + +val LocalUiFocusRequester = staticCompositionLocalOf { UiFocusRequester {} } + private fun Modifier?.styleReferences(): List = when (this) { null -> emptyList() is CompositeModifier -> flatten().filterIsInstance().map { it.reference } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiRenderCommands.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiRenderCommands.kt index 64e471016..601d37c0c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiRenderCommands.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/UiRenderCommands.kt @@ -479,7 +479,7 @@ class UiCommandRenderer { val childClip = when { !pushedClip -> activeClip - activeClip == null -> layoutNode.content.takeIf { it.hasVisibleArea() } + activeClip == null || !layoutBoundsMatchVisualBounds -> layoutNode.content.takeIf { it.hasVisibleArea() } else -> activeClip.visibleIntersection(layoutNode.content) } if (!pushedClip || childClip != null) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt index 36341ccd6..e358d5f0d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphCanvas.kt @@ -86,13 +86,17 @@ class GraphEdge( val selected: Boolean = false, ) -/** A link being dragged out and not yet dropped, in canvas space. */ +/** + * A link being dragged out and not yet dropped, in canvas space: a straight line, or [curve] when the + * owner shapes it like the links it draws. + */ data class GraphLinkPreview( val fromX: Float, val fromY: Float, val toX: Float, val toY: Float, val color: UiColor = GraphColors.Link, + val curve: GraphCurve? = null, ) /** A node as the minimap marks it, in graph space. */ @@ -117,13 +121,16 @@ fun GraphCanvas( onEdgeClick: (Any) -> Unit = {}, onContextMenu: (GraphPointer, edge: Any?) -> Unit = { _, _ -> }, onRelease: () -> Unit = {}, + onSelectArea: ((area: GraphRect, modifiers: Int) -> Unit)? = null, onKey: (UiKeyInput) -> Boolean = { false }, overlay: @Composable () -> Unit = {}, nodes: @Composable () -> Unit, ) { var canvas by remember { mutableStateOf(UiRect.Zero) } var hovered by remember { mutableStateOf(null) } + var marquee by remember { mutableStateOf(null) } val grabbedAt = remember { floatArrayOf(0f, 0f) } + val selecting = remember { booleanArrayOf(false) } LaunchedEffect(view) { while (true) { @@ -163,7 +170,11 @@ fun GraphCanvas( } drawCurve(edge.curve, view.zoom, color, edge.arrow) } - link?.let { drawSegment(it.fromX, it.fromY, it.toX, it.toY, it.color, 1.5f) } + link?.let { pending -> + val curve = pending.curve + if (curve != null) drawCurve(curve, view.zoom, pending.color, arrow = false) + else drawSegment(pending.fromX, pending.fromY, pending.toX, pending.toY, pending.color, 1.5f) + } } .onHover { event -> val edge = edgeAt(event.localX, event.localY) @@ -187,14 +198,30 @@ fun GraphCanvas( .onPress { event -> grabbedAt[0] = event.localX grabbedAt[1] = event.localY - view.grab(event.localX, event.localY) + selecting[0] = onSelectArea != null && event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT + if (!selecting[0]) view.grab(event.localX, event.localY) event.consume() } .onDrag { event -> - view.dragTo(grabbedAt[0] + event.dragTotalX, grabbedAt[1] + event.dragTotalY) + val x = grabbedAt[0] + event.dragTotalX + val y = grabbedAt[1] + event.dragTotalY + if (selecting[0]) { + marquee = GraphRect.between(grabbedAt[0], grabbedAt[1], x, y) + } else { + view.dragTo(x, y) + } event.consume() } .onRelease { event -> + marquee?.let { area -> + marquee = null + val covered = GraphRect.between( + view.toGraphX(area.x), view.toGraphY(area.y), + view.toGraphX(area.x + area.width), view.toGraphY(area.y + area.height), + ) + onSelectArea?.invoke(covered, event.modifiers) + } + selecting[0] = false onRelease() event.consume() } @@ -221,6 +248,13 @@ fun GraphCanvas( nodes() } + marquee?.let { area -> + Box( + tags = listOf("graph-marquee"), + modifier = Modifier.position(area.x.px, area.y.px).size(area.width.px, area.height.px).inputTransparent(), + ) + } + if (minimap.isNotEmpty()) { Column( modifier = Modifier.size(100.percent, 100.percent).padding(8.px).inputTransparent() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt index d62144545..fff987b06 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphGeometry.kt @@ -10,9 +10,18 @@ data class GraphRect(val x: Float, val y: Float, val width: Float, val height: F fun contains(px: Float, py: Float): Boolean = px >= x && px <= x + width && py >= y && py <= y + height + fun intersects(other: GraphRect): Boolean = + x < other.x + other.width && other.x < x + width && y < other.y + other.height && other.y < y + height + /** This rectangle of the graph as it lies on the canvas. */ fun toCanvas(view: GraphViewState) = GraphRect(view.toCanvasX(x), view.toCanvasY(y), width * view.zoom, height * view.zoom) + + companion object { + /** The rectangle two corners span, in whichever order they came. */ + fun between(x1: Float, y1: Float, x2: Float, y2: Float) = + GraphRect(minOf(x1, x2), minOf(y1, y2), abs(x2 - x1), abs(y2 - y1)) + } } /** A connection as a sampled curve in canvas space: what gets drawn, clicked and labeled. */ diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt index d87e10921..31facb13c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/graph/GraphNode.kt @@ -1,6 +1,7 @@ package ru.hollowhorizon.hollowengine.client.ui.graph import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import org.lwjgl.glfw.GLFW import ru.hollowhorizon.hollowengine.client.ui.Column import ru.hollowhorizon.hollowengine.client.ui.HollowUiContent @@ -62,6 +63,7 @@ fun GraphNode( ) } + val held = remember { booleanArrayOf(false) } Column( id = id, tags = listOf("graph-node") + tags + if (selected) listOf("selected") else emptyList(), @@ -72,16 +74,23 @@ fun GraphNode( .onPress { event -> when (event.button) { GLFW.GLFW_MOUSE_BUTTON_RIGHT -> onContextMenu(event.x, event.y) - GLFW.GLFW_MOUSE_BUTTON_LEFT -> onPress(gesture(event)) + GLFW.GLFW_MOUSE_BUTTON_LEFT -> { + held[0] = true + onPress(gesture(event)) + } + else -> return@onPress } event.consume() } .onDrag { event -> + if (!held[0] || event.button != GLFW.GLFW_MOUSE_BUTTON_LEFT) return@onDrag onDrag(gesture(event)) event.consume() } .onRelease { event -> + if (!held[0]) return@onRelease + held[0] = false onRelease() event.consume() }, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt index b0837f036..116034924 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeBuiltinFileTypes.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.client.ui.ide import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeAnimatorDocument import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeImageDocument import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeRigDocument +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeShaderGraphDocument import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeSoundsDocument import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeVfxDocument @@ -16,8 +17,18 @@ internal fun HollowIdeFileTypeRegistry.registerBuiltinFileTypes( animatorEditor: HollowIdeFileEditor, rigEditor: HollowIdeFileEditor, vfxEditor: HollowIdeFileEditor, + shaderGraphEditor: HollowIdeFileEditor, textEditor: HollowIdeFileEditor, ) { + register( + HollowIdeFileType.extensions( + id = "material", + extensions = listOf(".material"), + priority = 285, + loader = { _, bytes -> HollowIdeShaderGraphDocument(bytes) }, + editor = shaderGraphEditor, + ), + ) register( HollowIdeFileType.extensions( id = "vfx", diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt index 0edd399a3..2fb91f5d0 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt @@ -10,6 +10,7 @@ import org.lwjgl.opengl.GL30 import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.docking.* import ru.hollowhorizon.hollowengine.client.ui.ide.asset.* +import ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph.ShaderGraphEditor import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeImageEditor import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeSoundsEditor import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.HollowIdeAnimatorEditor @@ -98,6 +99,7 @@ object HollowIdeOverlay { animatorEditor = { file -> HollowIdeAnimatorEditor(file) }, rigEditor = { file -> RigEditorPanel(file) }, vfxEditor = { file -> VfxEditorPanel(file) }, + shaderGraphEditor = { file -> ShaderGraphEditor(file) }, textEditor = { file -> FileEditor(file) }, ) registerAssetFileTypes( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeAnimatorDocument.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeAnimatorDocument.kt index 706e59603..850e17349 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeAnimatorDocument.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeAnimatorDocument.kt @@ -29,6 +29,12 @@ class HollowIdeAnimatorDocument(bytes: ByteArray) : HollowIdeFileDocument { var revision by mutableStateOf(0) private set + /** What the editor keeps while the file stays open, such as where the view was, across tab switches. */ + private var editorState: Any? = null + + @Suppress("UNCHECKED_CAST") + fun editorState(create: () -> T): T = (editorState as? T) ?: create().also { editorState = it } + fun edit(change: (Animator) -> Animator) { val next = change(animator) if (next == animator) return diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeShaderGraphDocument.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeShaderGraphDocument.kt new file mode 100644 index 000000000..1eb63a991 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/HollowIdeShaderGraphDocument.kt @@ -0,0 +1,138 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraph +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraphFormat +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderNodeLibrary +import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeFileDocument + +/** + * An open `.material` file: a shader graph. An empty file reads as the default surface graph, so a file made from + * the project tree opens as something that already draws. + */ +class HollowIdeShaderGraphDocument(bytes: ByteArray) : HollowIdeFileDocument { + var graph by mutableStateOf(ShaderGraph()) + private set + + /** What went wrong reading the file, or null when it read fine. */ + var error by mutableStateOf(null) + private set + + private var original: String = "" + + override val readOnly: Boolean get() = error != null + + var isModified by mutableStateOf(false) + private set + + var revision by mutableStateOf(0) + private set + + private val undoStack = ArrayDeque() + private val redoStack = ArrayDeque() + + /** The graph as it was when a gesture started; the whole gesture becomes one step back. */ + private var gestureStart: ShaderGraph? = null + + var canUndo by mutableStateOf(false) + private set + var canRedo by mutableStateOf(false) + private set + + /** What the editor keeps while the file stays open, such as where the view was, across tab switches. */ + private var editorState: Any? = null + + init { + load(bytes) + } + + @Suppress("UNCHECKED_CAST") + fun editorState(create: () -> T): T = (editorState as? T) ?: create().also { editorState = it } + + fun edit(change: (ShaderGraph) -> ShaderGraph) { + if (readOnly) return + val next = change(graph) + if (next == graph) return + if (gestureStart == null) remember(graph) + apply(next) + } + + /** Starts a gesture, such as dragging a node, that should go back in one step. */ + fun beginGesture() { + if (gestureStart == null) gestureStart = graph + } + + fun endGesture() { + val start = gestureStart ?: return + gestureStart = null + if (start != graph) remember(start) + } + + fun undo(): Boolean { + val previous = undoStack.removeLastOrNull() ?: return false + redoStack.addLast(graph) + apply(previous) + return true + } + + fun redo(): Boolean { + val next = redoStack.removeLastOrNull() ?: return false + undoStack.addLast(graph) + apply(next) + return true + } + + private fun remember(state: ShaderGraph) { + undoStack.addLast(state) + while (undoStack.size > HISTORY_LIMIT) undoStack.removeFirst() + redoStack.clear() + refreshHistoryState() + } + + private fun apply(next: ShaderGraph) { + graph = next + isModified = true + revision++ + refreshHistoryState() + } + + private fun refreshHistoryState() { + canUndo = undoStack.isNotEmpty() + canRedo = redoStack.isNotEmpty() + } + + override fun encode(): ByteArray = if (readOnly) original.toByteArray() else ShaderGraphFormat.write(graph).toByteArray() + + override fun reload(bytes: ByteArray) { + if (!readOnly && bytes.toString(Charsets.UTF_8) == ShaderGraphFormat.write(graph)) return + undoStack.clear() + redoStack.clear() + refreshHistoryState() + load(bytes) + isModified = false + revision++ + } + + override fun markSaved() { + isModified = false + } + + private fun load(bytes: ByteArray) { + original = bytes.toString(Charsets.UTF_8) + try { + graph = if (original.isBlank()) ShaderNodeLibrary.defaultSurface() else ShaderGraphFormat.read(original) + error = null + } catch (e: Exception) { + graph = ShaderGraph() + error = e.message ?: e::class.simpleName + HollowEngine.LOGGER.warn("Could not read shader graph: {}", error) + } + } + + private companion object { + const val HISTORY_LIMIT = 100 + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt index a6c8506af..0365a281d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/animator/HollowIdeAnimatorEditor.kt @@ -39,7 +39,7 @@ private const val AutoSaveDelayMillis = 900L @Composable internal fun HollowIdeAnimatorEditor(file: HollowIdeOpenFile) { val document = file.document as HollowIdeAnimatorDocument - val view = remember(document) { GraphViewState() } + val view = remember(document) { document.editorState { GraphViewState() } } var selection by remember(document) { mutableStateOf(AnimatorSelection.None) } var openLayer by remember(document) { mutableStateOf(document.animator.layers.firstOrNull()?.id) } val expanded = remember(document) { mutableStateListOf().apply { addAll(document.animator.layers.map { it.id }) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt new file mode 100644 index 000000000..ed1d4101d --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt @@ -0,0 +1,73 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderExpression +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderExpressionError +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderInput +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderTokenKind +import ru.hollowhorizon.hollowengine.client.ui.widgets.* + +/** + * What a field needs to edit the text of an expression node: the token colors every expression field + * of the editor uses, the functions and names it can complete, and what is wrong with the text. + */ +internal object ShaderExpressionEditing { + val highlighter = UiSyntaxHighlighter { text -> + ShaderExpression.parse(text).tokens.mapNotNull { token -> + val color = when (token.kind) { + ShaderTokenKind.NUMBER -> ExpressionTokenColors.Number + ShaderTokenKind.VARIABLE -> ExpressionTokenColors.Name + ShaderTokenKind.CONSTANT -> ExpressionTokenColors.Number + ShaderTokenKind.FUNCTION -> ExpressionTokenColors.Keyword + ShaderTokenKind.MEMBER -> ExpressionTokenColors.String + ShaderTokenKind.OPERATOR -> ExpressionTokenColors.Operator + ShaderTokenKind.END -> return@mapNotNull null + } + UiTextHighlight(token.start, token.end, UiInlineStyle().withColor(color)) + } + } + + val completions = UiCompletionContributor { context -> + val before = context.text.take(context.caret.coerceIn(0, context.text.length)) + val prefix = before.takeLastWhile { it.isLetterOrDigit() || it == '_' } + if (before.dropLast(prefix.length).endsWith('.')) { + return@UiCompletionContributor Swizzles.filter { it.startsWith(prefix) } + .map { UiTextCompletion(label = it) } + } + val names = ShaderExpression.parse(context.text).variables.filter { it != prefix } + val candidates = ShaderExpression.Functions.map { (name, parameters) -> + UiTextCompletion(label = name, insertText = "$name()", detail = parameters, caretOffset = name.length + 1) + } + ShaderExpression.Constants.keys.map { + UiTextCompletion( + label = it, + tail = "const" + ) + } + ShaderInput.entries.mapNotNull { input -> + input.expressionName?.let { + UiTextCompletion( + label = it, + tail = input.type.glsl + ) + } + } + names.map { UiTextCompletion(label = it, tail = "pin") } + candidates.distinctBy { it.label }.filter { prefix.isEmpty() || it.label.startsWith(prefix, ignoreCase = true) } + } + + fun diagnostics(text: String): List { + val error = ShaderExpression.parse(text).error ?: return emptyList() + if (text.isEmpty()) return emptyList() + val start = error.start.coerceIn(0, text.length - 1) + val end = error.end.coerceIn(start + 1, text.length) + return listOf(UiTextDiagnostic(start, end, describe(error))) + } + + fun describe(error: ShaderExpressionError): String = + expressionProblemText(error.problem.name.lowercase(), error.detail) + + private val Swizzles = listOf("x", "y", "z", "w", "xy", "xyz", "rgb", "rgba", "a") +} + +/** What a problem of an expression says, in words, with what it is about. */ +internal fun expressionProblemText(reason: String, detail: String): String { + val text = graphText("expression.$reason") + return if (detail.isBlank()) text else "$text: $detail" +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt new file mode 100644 index 000000000..79004924f --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt @@ -0,0 +1,407 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import androidx.compose.runtime.* +import com.mojang.blaze3d.systems.RenderSystem +import kotlinx.coroutines.delay +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.shadergraph.* +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.graph.* +import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeOpenFile +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeShaderGraphDocument +import ru.hollowhorizon.hollowengine.client.ui.inspector.PublishInspector +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.widgets.ContextMenu +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiKeyInput +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.client.vfx.render.VfxGraphMaterials +import kotlin.math.hypot +import kotlin.time.Duration.Companion.milliseconds + +internal const val ShaderGraphStylesheet = "hollowengine:ui/styles/shader-graph.hss" +private const val AutoSaveDelayMillis = 900L + +/** + * Editor of material file: nodes with pins on a canvas, links drawn from pin to pin, and + * what each node computes drawn right on it. + */ +@Composable +internal fun ShaderGraphEditor(file: HollowIdeOpenFile) { + val document = file.document as HollowIdeShaderGraphDocument + val state = remember(document) { document.editorState { ShaderGraphEditorState() } } + val view = state.view + val previews = remember(document) { ShaderGraphPreviews() } + DisposableEffect(previews) { onDispose { RenderSystem.recordRenderCall(previews::release) } } + + var link by remember(document) { mutableStateOf(null) } + var menu by remember(document) { mutableStateOf(null) } + var insertInto by remember(document) { mutableStateOf(null) } + var previewError by remember(document) { mutableStateOf(null) } + val dragOrigins = remember(document) { HashMap>() } + + LaunchedEffect(document.revision) { + file.updateDirty(document.isModified) + if (!document.isModified) return@LaunchedEffect + delay(AutoSaveDelayMillis.milliseconds) + if (document.isModified) file.save() + } + LaunchedEffect(document, document.isModified) { + if (document.isModified) return@LaunchedEffect + val location = VfxGraphMaterials.locationOf(file.path) + RenderSystem.recordRenderCall { VfxGraphMaterials.changed(location) } + } + LaunchedEffect(previews) { + while (true) { + withFrameNanos { } + val error = previews.error + if (error != previewError) previewError = error + } + } + + val graph = document.graph + val code = remember(document.revision) { ShaderGraphCompiler.compile(graph) } + val diagnostics = code.diagnostics + listOfNotNull(previewError) + val problems = diagnostics.filter { it.node != null }.groupBy { it.node!! } + previews.show(graph, document.revision) + + val selection = state.selection + PublishInspector(source = "shadergraph-${file.path}", key = Triple(selection, document.revision, previewError)) { + shaderGraphInspectorTarget(document, selection, diagnostics) + } + + val boxes = LinkedHashMap() + graph.nodes.forEach { node -> + ShaderNodeTypes.of(node.type)?.let { boxes[node.id] = ShaderNodeLayout.of(graph, node, it, code.types) } + } + val pins = boxes.values.flatMap { it.pins } + val curves = graph.links.mapIndexedNotNull { index, each -> + val from = pins.firstOrNull { it.node == each.from && it.output && it.name == each.output } + ?: return@mapIndexedNotNull null + val to = pins.firstOrNull { it.node == each.to && !it.output && it.name == each.input } + ?: return@mapIndexedNotNull null + index to GraphCurves.betweenPins( + view.toCanvasX(from.x), view.toCanvasY(from.y), view.toCanvasX(to.x), view.toCanvasY(to.y), view.zoom + ) + } + + fun select(next: ShaderGraphSelection) { + state.selection = next + } + + fun pinAt(x: Float, y: Float, outputs: Boolean): ShaderPin? = + pins.filter { it.output == outputs }.map { it to hypot(view.toCanvasX(it.x) - x, view.toCanvasY(it.y) - y) } + .filter { it.second <= PIN_REACH * view.zoom.coerceAtLeast(1f) }.minByOrNull { it.second }?.first + + fun nodeAt(x: Float, y: Float): ShaderNodeBox? = boxes.values.lastOrNull { it.rect.toCanvas(view).contains(x, y) } + + /** A node of [kind] added at ([x], [y]) of the graph and selected. */ + fun addNode(kind: ShaderNodeType, x: Float, y: Float): ShaderGraphNode { + val node = ShaderGraphNode(document.graph.freeNodeId(kind.id), kind.id, x, y) + document.edit { it.withNode(node) } + select(ShaderGraphSelection.of(node.id)) + return node + } + + /** + * A link dropped on nothing: the add menu, showing only what can take the link, and the node + * picked from it placed where the link was dropped and linked. + */ + fun offerNodeFor(pending: PendingLink) { + val graphX = view.toGraphX(pending.x) + val graphY = view.toGraphY(pending.y) + val items = if (pending.fromOutput) { + val carried = code.types.output(pending.node, pending.pin) ?: ShaderType.FLOAT + addNodeItems({ it.inputFor(carried) != null }) { kind -> + val node = addNode(kind, graphX, graphY - ShaderNodeLayout.HEADER) + kind.inputFor(carried, node) + ?.let { pin -> document.edit { it.withLink(pending.node, pending.pin, node.id, pin.name) } } + } + } else { + val into = + graph.node(pending.node)?.let { node -> ShaderNodeTypes.of(node.type)?.input(node, pending.pin)?.type } + ?: return + addNodeItems({ it.outputFor(into) != null }) { kind -> + val node = addNode(kind, graphX - ShaderNodeLayout.WIDTH, graphY - ShaderNodeLayout.HEADER) + kind.outputFor(into) + ?.let { output -> document.edit { it.withLink(node.id, output.name, pending.node, pending.pin) } } + } + } + menu = GraphMenu(pending.screenX, pending.screenY, items) + } + + /** + * Ends a link being drawn: dropped on a pin, it links to it; on a node, to the first of its pins + * that takes it; on nothing, it offers the nodes that could. + */ + fun finishLink() { + val pending = link ?: return + link = null + val pin = pinAt(pending.x, pending.y, outputs = !pending.fromOutput) + val node = nodeAt(pending.x, pending.y)?.takeIf { it.node.id != pending.node } + when { + pin != null -> document.edit { + if (pending.fromOutput) it.withLink(pending.node, pending.pin, pin.node, pin.name) + else it.withLink(pin.node, pin.name, pending.node, pending.pin) + } + + node != null && pending.fromOutput -> { + val carried = code.types.output(pending.node, pending.pin) ?: ShaderType.FLOAT + val free = node.kind.inputs(node.node).filter { graph.linkInto(node.node.id, it.name) == null } + val target = + free.firstOrNull { it.type.fixed == carried } ?: free.firstOrNull { it.type.accepts(carried) } + if (target != null) document.edit { it.withLink(pending.node, pending.pin, node.node.id, target.name) } + } + + node == null -> offerNodeFor(pending) + } + document.endGesture() + } + + /** Puts [nodeId] into the link at [index]: whatever fed the link feeds the node, and the node feeds where the link went. */ + fun insert(index: Int, nodeId: String) { + val current = document.graph + val target = current.links.getOrNull(index) ?: return + val node = current.node(nodeId) ?: return + val kind = ShaderNodeTypes.of(node.type) ?: return + val input = kind.inputFor(code.types.output(target.from, target.output) ?: ShaderType.FLOAT, node) ?: return + val into = current.node(target.to)?.let { ShaderNodeTypes.of(it.type)?.input(it, target.input)?.type } ?: return + val output = kind.outputFor(into) ?: return + document.edit { + it.withoutLinkAt(index).withLink(target.from, target.output, nodeId, input.name) + .withLink(nodeId, output.name, target.to, target.input) + } + } + + /** Ends a drag of nodes: one dropped on a link goes into it, and the whole drag is one step back. */ + fun finishDrag() { + if (dragOrigins.isEmpty()) return + insertInto?.let { index -> dragOrigins.keys.singleOrNull()?.let { insert(index, it) } } + insertInto = null + dragOrigins.clear() + document.endGesture() + } + + fun deleteSelection() { + val index = selection.link + if (index != null) { + document.edit { it.withoutLinkAt(index) } + } else { + val removable = selection.nodes.filter { boxes[it]?.kind?.master == null }.toSet() + if (removable.isEmpty()) return + document.edit { it.withoutNodes(removable) } + } + select(ShaderGraphSelection.None) + } + + fun duplicateSelection() { + val copied = selection.nodes.filter { boxes[it]?.kind?.master == null }.toSet() + if (copied.isEmpty()) return + val (next, copies) = document.graph.withDuplicates(copied) + document.edit { next } + select(ShaderGraphSelection(copies.toSet())) + } + + fun handleKey(input: UiKeyInput): Boolean { + when { + input.key == GLFW.GLFW_KEY_DELETE -> deleteSelection() + input.control && input.key == GLFW.GLFW_KEY_D -> duplicateSelection() + input.control && input.key == GLFW.GLFW_KEY_A -> select(ShaderGraphSelection(boxes.keys.toSet())) + input.control && input.key == GLFW.GLFW_KEY_Z && !input.shift -> document.undo() + input.control && (input.key == GLFW.GLFW_KEY_Y || input.shift && input.key == GLFW.GLFW_KEY_Z) -> document.redo() + input.key == GLFW.GLFW_KEY_ESCAPE -> if (link != null) { + link = null + document.endGesture() + } else { + select(ShaderGraphSelection.None) + } + + else -> return false + } + return true + } + + val actions = object : ShaderNodeActions { + override fun pressNode(node: String, gesture: GraphNodeGesture) { + menu = null + when { + gesture.shift || gesture.control -> { + val nodes = if (node in selection) selection.nodes - node else selection.nodes + node + select(ShaderGraphSelection(nodes)) + } + + node !in selection -> select(ShaderGraphSelection.of(node)) + } + dragOrigins.clear() + state.selection.nodes.forEach { id -> document.graph.node(id)?.let { dragOrigins[id] = it.x to it.y } } + document.beginGesture() + } + + override fun dragNode(node: String, gesture: GraphNodeGesture) { + if (link != null || dragOrigins.isEmpty()) return + document.edit { graph -> + graph.withNodesAt(dragOrigins.mapValues { (_, at) -> at.first + gesture.graphDeltaX to at.second + gesture.graphDeltaY }) + } + val lone = dragOrigins.keys.singleOrNull() + ?.takeIf { id -> document.graph.links.none { it.from == id || it.to == id } } + insertInto = lone?.let { GraphCurves.nearest(curves, gesture.canvasX, gesture.canvasY, INSERT_REACH) } + } + + override fun releaseNode(node: String) = finishDrag() + + override fun nodeMenu(node: String, screenX: Float, screenY: Float) { + if (node !in selection) select(ShaderGraphSelection.of(node)) + val box = boxes[node] ?: return + menu = GraphMenu( + screenX, screenY, + nodeItems( + box.node, box.kind, + onPreview = { shown -> document.edit { it.withPreview(node, shown) } }, + onDuplicate = ::duplicateSelection, + onDelete = ::deleteSelection, + ), + ) + } + + override fun pressPin(pin: ShaderPin, screenX: Float, screenY: Float) { + menu = null + document.beginGesture() + val x = view.toCanvasX(pin.x) + val y = view.toCanvasY(pin.y) + val existing = if (pin.output) null else graph.linkInto(pin.node, pin.name) + link = when { + pin.output -> PendingLink(pin.node, pin.name, true, x, y, screenX, screenY) + existing != null -> { + document.edit { it.withoutLinkInto(pin.node, pin.name) } + PendingLink(existing.from, existing.output, true, x, y, screenX, screenY) + } + + else -> PendingLink(pin.node, pin.name, false, x, y, screenX, screenY) + } + } + + override fun dragPin(canvasX: Float, canvasY: Float, screenX: Float, screenY: Float) { + link = link?.copy(x = canvasX, y = canvasY, screenX = screenX, screenY = screenY) + } + + override fun releasePin() = finishLink() + + override fun setValue(node: String, pin: String, values: List) = + document.edit { it.withValue(node, pin, values) } + + override fun setOption(node: String, option: String, value: String) = + document.edit { it.withOption(node, option, value) } + + override fun openMenu(screenX: Float, screenY: Float, items: List) { + menu = GraphMenu(screenX, screenY, items) + } + + override fun beginGesture() = document.beginGesture() + override fun endGesture() = document.endGesture() + } + + Box( + mode = UiBoxMode.STACK, + modifier = Modifier.size(100.percent, 100.percent).style(ShaderGraphStylesheet).focusScope() + .drawBehind(key = previews) { drawGl { previews.render() } }, + ) { + GraphCanvas( + id = ShaderGraphCanvasId, + view = view, + modifier = Modifier.size(100.percent, 100.percent), + edges = curves.map { (index, curve) -> + val each = graph.links[index] + GraphEdge( + key = index, + curve = curve, + color = code.types.output(each.from, each.output)?.color() ?: GraphLinkColor, + selected = selection.link == index || insertInto == index, + ) + }, + link = link?.let { pending -> + val pin = + pins.firstOrNull { it.node == pending.node && it.name == pending.pin && it.output == pending.fromOutput } + ?: return@let null + val fromX = view.toCanvasX(pin.x) + val fromY = view.toCanvasY(pin.y) + val type = if (pending.fromOutput) code.types.output(pin.node, pin.name) else code.types.input( + pin.node, pin.name + ) + val curve = + if (pending.fromOutput) GraphCurves.betweenPins(fromX, fromY, pending.x, pending.y, view.zoom) + else GraphCurves.betweenPins(pending.x, pending.y, fromX, fromY, view.zoom) + GraphLinkPreview(fromX, fromY, pending.x, pending.y, type?.color() ?: GraphLinkColor, curve) + }, + minimap = boxes.values.map { box -> + GraphMiniMapItem( + box.rect, if (box.node.id in selection) GraphSelectedColor else GraphLinkColor, box.kind.title() + ) + }, + onBackgroundClick = { + menu = null + select(ShaderGraphSelection.None) + }, + onEdgeClick = { index -> select(ShaderGraphSelection.ofLink(index as Int)) }, + onContextMenu = { pointer, edge -> + menu = if (edge is Int) { + select(ShaderGraphSelection.ofLink(edge)) + GraphMenu( + pointer.screenX, + pointer.screenY, + listOf(UiDropdownItem(graphText("delete_link"), shortcut = "Del") { + document.edit { it.withoutLinkAt(edge) } + select(ShaderGraphSelection.None) + }) + ) + } else { + GraphMenu( + pointer.screenX, + pointer.screenY, + addNodeItems { kind -> addNode(kind, pointer.graphX, pointer.graphY) }) + } + }, + onRelease = { + finishLink() + finishDrag() + }, + onSelectArea = { area, modifiers -> + val covered = boxes.values.filter { it.rect.intersects(area) }.map { it.node.id }.toSet() + val additive = modifiers and (GLFW.GLFW_MOD_SHIFT or GLFW.GLFW_MOD_CONTROL) != 0 + select(ShaderGraphSelection(if (additive) selection.nodes + covered else covered)) + }, + onKey = ::handleKey, + ) { + boxes.values.sortedBy { it.node.id in selection }.forEach { box -> + key(box.node.id) { + ShaderNodeView( + graph = graph, + box = box, + types = code.types, + view = view, + selected = box.node.id in selection, + problem = problems[box.node.id]?.joinToString("\n") { problemText(it) }, + previews = previews, + actions = actions, + ) + } + } + } + + menu?.let { open -> + ContextMenu( + id = "shader-graph-menu", + anchorBounds = UiRect(open.x, open.y, 0f, 0f), + items = open.items, + onExpandedChange = { if (!it) menu = null }, + ) + } + } +} + +internal fun graphText(name: String): String = "hollowengine.gui.shadergraph.$name".lang + +/** How far from a pin, in canvas pixels at zoom 1, a link can be dropped and still land on it. */ +private const val PIN_REACH = 12f + +/** How close to a link, in canvas pixels, a lone node has to be dragged to go into it. */ +private const val INSERT_REACH = 10f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphFields.kt new file mode 100644 index 000000000..e970300ab --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphFields.kt @@ -0,0 +1,129 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import androidx.compose.runtime.Composable +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraph +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraphNode +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderOptionKind +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderOptionSpec +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownMark + +/** What the fields of a node change, and the menus they open; the editor answers them. */ +internal interface ShaderFieldActions { + fun setValue(node: String, pin: String, values: List) + fun setOption(node: String, option: String, value: String) + fun openMenu(screenX: Float, screenY: Float, items: List) + fun beginGesture() + fun endGesture() +} + +/** One choice of a node, edited in place: a menu of values, a box to tick, or text. */ +@Composable +internal fun OptionField( + graph: ShaderGraph, + node: ShaderGraphNode, + option: ShaderOptionSpec, + actions: ShaderFieldActions, +) { + val current = node.options[option.name] ?: option.default + val id = "sg-option-${node.id}-${option.name}" + when (option.kind) { + ShaderOptionKind.TOGGLE -> Row( + tags = listOf("sg-toggle"), + modifier = Modifier.size(0.px, UiLength.Auto).grow(1f).alignItems(vertical = UiAlign.CENTER) + .input(hoverable = true, clickable = true).onClick { event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) actions.setOption( + node.id, + option.name, + (current != "true").toString() + ) + event.consume() + }, + ) { + Checkbox( + checked = current == "true", + id = "$id-box", + tags = listOf("sg-checkbox"), + onCheckedChange = { checked -> actions.setOption(node.id, option.name, checked.toString()) }, + ) + Text(optionTitle(option), tags = listOf("sg-pin-label")) + } + + ShaderOptionKind.CHOICE -> { + Text( + optionTitle(option), + tags = listOf("sg-pin-label"), + modifier = Modifier.size(0.px, UiLength.Auto).grow(1f) + ) + Chip(id, optionValueTitle(option, current)) { x, y -> + actions.openMenu(x, y, choiceItems(option, current) { actions.setOption(node.id, option.name, it) }) + } + } + + ShaderOptionKind.PROPERTY -> { + val names = graph.properties.map { it.name } + Chip(id, current.ifEmpty { graphText("pick_property") }) { x, y -> + val items = if (names.isEmpty()) { + listOf(UiDropdownItem(graphText("no_properties"), enabled = false)) + } else { + names.map { name -> + UiDropdownItem(name, mark = UiDropdownMark.RADIO, checked = name == current) { + actions.setOption(node.id, option.name, name) + } + } + } + actions.openMenu(x, y, items) + } + } + + ShaderOptionKind.TEXT -> { + Text( + optionTitle(option), + tags = listOf("sg-pin-label"), + modifier = Modifier.size(0.px, UiLength.Auto).grow(1f) + ) + TextField( + value = current, + id = id, + fontSize = 8f, + tags = listOf("sg-field"), + modifier = Modifier.size(FieldsWidth.px, FieldHeight.px), + onChange = { actions.setOption(node.id, option.name, it) }, + ) + } + + ShaderOptionKind.EXPRESSION -> TextField( + value = current, + id = id, + fontSize = 9f, + syntaxHighlighter = ShaderExpressionEditing.highlighter, + completionContributor = ShaderExpressionEditing.completions, + diagnostics = ShaderExpressionEditing.diagnostics(current), + tags = listOf("sg-field", "sg-expression"), + modifier = Modifier.size(0.px, ExpressionHeight.px).grow(1f), + onChange = { actions.setOption(node.id, option.name, it) }, + ) + } +} + +/** What a choice is set to, which opens its menu where it was pressed. */ +@Composable +private fun Chip(id: String, text: String, onOpen: (Float, Float) -> Unit) { + Text( + text, + id = id, + tags = listOf("sg-chip"), + modifier = Modifier.size(FieldsWidth.px, UiLength.Auto).input(hoverable = true, clickable = true) + .onPress { event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT) onOpen(event.x, event.y) + event.consume() + }, + ) +} + +/** How wide the fields of a row are together; the name takes what is left. */ +internal const val FieldsWidth = 100f +internal const val FieldHeight = 14f +private const val ExpressionHeight = 18f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt new file mode 100644 index 000000000..d25039766 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt @@ -0,0 +1,185 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import androidx.compose.runtime.Composable +import ru.hollowhorizon.hollowengine.client.shadergraph.* +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.ide.files.HollowIdeShaderGraphDocument +import ru.hollowhorizon.hollowengine.client.ui.inspector.* +import ru.hollowhorizon.hollowengine.client.utils.lang + +private const val GraphIcon = "hollowengine:textures/gui/icons/files/shader.svg" +private const val RemoveIcon = "hollowengine:textures/gui/icons/remove.svg" + +/** What the inspector shows for [selection]: the one node selected, or the graph with its properties, preview and problems. */ +internal fun shaderGraphInspectorTarget( + document: HollowIdeShaderGraphDocument, + selection: ShaderGraphSelection, + problems: List, +): InspectorTarget { + val node = selection.single?.let(document.graph::node) + val kind = node?.let { ShaderNodeTypes.of(it.type) } + if (node != null && kind != null) { + return InspectorTarget( + id = "shadergraph-node-${node.id}", title = kind.title(), subtitle = node.id, icon = GraphIcon + ) { + NodeFields(document, node, kind) + } + } + return InspectorTarget(id = "shadergraph", title = graphText("graph"), icon = GraphIcon) { + GraphFields(document, problems) + } +} + +@Composable +private fun NodeFields(document: HollowIdeShaderGraphDocument, node: ShaderGraphNode, kind: ShaderNodeType) { + if (kind.options.isNotEmpty()) { + Section(graphText("options")) { + kind.options.forEach { option -> + val current = node.options[option.name] ?: option.default + fun set(value: String) = document.edit { it.withOption(node.id, option.name, value) } + val id = "sg-inspector-option-${node.id}-${option.name}" + when (option.kind) { + ShaderOptionKind.CHOICE -> { + Label(optionTitle(option)) + Pills(option.values, current, { optionValueTitle(option, it) }, ::set) + } + + ShaderOptionKind.TOGGLE -> ToggleRow(optionTitle(option), current == "true") { set(it.toString()) } + ShaderOptionKind.TEXT -> TextRow(optionTitle(option), current, id = id, onChange = ::set) + ShaderOptionKind.EXPRESSION -> TextRow( + optionTitle(option), + current, + id = id, + completions = ShaderExpressionEditing.completions, + highlighter = ShaderExpressionEditing.highlighter, + diagnostics = ShaderExpressionEditing.diagnostics(current), + onChange = ::set, + ) + + ShaderOptionKind.PROPERTY -> { + Label(optionTitle(option)) + val names = document.graph.properties.map { it.name } + if (names.isEmpty()) Hint(graphText("no_properties")) else Pills(names, current, { it }, ::set) + } + } + } + } + } + val unlinked = kind.inputs(node).filter { pin -> + document.graph.linkInto( + node.id, pin.name + ) == null && pin.fallback == null && pin.type.fixed != ShaderType.TEXTURE + } + if (unlinked.isNotEmpty()) { + Section(graphText("inputs")) { + unlinked.forEach { pin -> ValueRow(document, node, pin) } + } + } + ToggleRow(graphText("show_preview"), kind.showsPreview(node)) { shown -> + document.edit { + it.withPreview( + node.id, shown + ) + } + } +} + +/** One number per component of what an unlinked input holds. */ +@Composable +private fun ValueRow(document: HollowIdeShaderGraphDocument, node: ShaderGraphNode, pin: ShaderPinSpec) { + val values = node.values[pin.name]?.takeIf { it.isNotEmpty() } ?: pin.default.ifEmpty { listOf(0f) } + val width = pin.type.fixed?.width ?: values.size.coerceIn(1, 4) + Label(pin.name) + Row(tags = listOf("insp-input-row")) { + repeat(width) { component -> + NumberInput( + path = "sg-value-${node.id}-${pin.name}-$component", + value = values.getOrElse(component) { values.last() }.toDouble(), + whole = false, + modifier = Modifier.size(0.px).grow(1f), + ) { typed -> + val next = (0 until width).map { values.getOrElse(it) { values.last() } }.toMutableList() + next[component] = typed.toFloat() + document.edit { it.withValue(node.id, pin.name, next) } + } + } + } +} + +@Composable +private fun GraphFields(document: HollowIdeShaderGraphDocument, problems: List) { + val preview = document.graph.preview + Section(graphText("preview")) { + Label(graphText("preview_mesh")) + Pills(ShaderPreviewMesh.entries, preview.mesh, { graphText("mesh.${it.name.lowercase()}") }) { mesh -> + document.edit { it.withPreviewSettings(preview.copy(mesh = mesh)) } + } + ToggleRow(graphText("preview_rotate"), preview.rotate) { rotate -> + document.edit { it.withPreviewSettings(preview.copy(rotate = rotate)) } + } + TextRow(graphText("preview_texture"), preview.texture, id = "sg-preview-texture") { texture -> + document.edit { it.withPreviewSettings(preview.copy(texture = texture)) } + } + } + Section(graphText("properties")) { + document.graph.properties.forEachIndexed { index, property -> PropertyFields(document, index, property) } + InspectorButton(graphText("add_property")) { + document.edit { it.withProperty(ShaderGraphProperty(it.freePropertyName(), ShaderType.FLOAT, listOf(0f))) } + } + } + Section(graphText("problems")) { + if (problems.isEmpty()) Hint(graphText("no_problems")) + problems.forEach { problem -> Hint(listOfNotNull(problem.node, problemText(problem)).joinToString(": ")) } + } +} + +/** + * The fields of one property. They are named after its place in the list rather than after the + * property, so renaming it keeps the field being typed in. + */ +@Composable +private fun PropertyFields(document: HollowIdeShaderGraphDocument, index: Int, property: ShaderGraphProperty) { + fun change(next: ShaderGraphProperty) = document.edit { it.withPropertyChanged(property.name, next) } + Row(tags = listOf("insp-input-row")) { + Row(modifier = Modifier.size(0.px).grow(1f)) { + NameRow("", property.name, id = "sg-property-$index") { name -> change(property.copy(name = name)) } + } + InspectorIconButton(RemoveIcon, graphText("remove_property"), tags = listOf("insp-inline-icon", "danger")) { + document.edit { it.withoutProperty(property.name) } + } + } + Pills(ShaderType.entries, property.type, { it.glsl }) { type -> change(property.copy(type = type)) } + if (property.type == ShaderType.TEXTURE) { + TextRow(graphText("texture"), property.texture, id = "sg-property-texture-$index") { texture -> + change(property.copy(texture = texture)) + } + } else { + Row(tags = listOf("insp-input-row")) { + repeat(property.type.width) { component -> + val values = property.default.ifEmpty { listOf(0f) } + NumberInput( + path = "sg-property-$index-$component", + value = values.getOrElse(component) { values.last() }.toDouble(), + whole = false, + modifier = Modifier.size(0.px).grow(1f), + ) { typed -> + val next = + (0 until property.type.width).map { values.getOrElse(it) { values.last() } }.toMutableList() + next[component] = typed.toFloat() + change(property.copy(default = next)) + } + } + } + } +} + +/** What a problem of the compiler says, in words. */ +internal fun problemText(diagnostic: ShaderDiagnostic): String { + val text = "hollowengine.gui.shadergraph.problem.${diagnostic.problem.name.lowercase()}".lang + return when { + diagnostic.reason != null -> "$text: ${expressionProblemText(diagnostic.reason, diagnostic.detail)}" + diagnostic.problem == ShaderProblem.GLSL_ERROR -> "$text\n${diagnostic.detail}" + diagnostic.detail.isBlank() -> text + else -> "$text (${diagnostic.detail})" + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphLayout.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphLayout.kt new file mode 100644 index 000000000..b72422d86 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphLayout.kt @@ -0,0 +1,121 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import ru.hollowhorizon.hollowengine.client.shadergraph.* +import ru.hollowhorizon.hollowengine.client.ui.UiColor +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphRect + +/** One pin of a placed node, where it sits in graph units. */ +internal data class ShaderPin(val node: String, val name: String, val output: Boolean, val x: Float, val y: Float) + +/** What a row of a node shows. */ +internal sealed interface ShaderNodeRow { + val top: Float + val height: Float + + data class Output(val name: String, override val top: Float) : ShaderNodeRow { + override val height get() = ShaderNodeLayout.ROW + } + + data class Option( + val name: String, + val kind: ShaderOptionKind, + override val top: Float, + override val height: Float, + ) : ShaderNodeRow + + /** An input that takes a link, or what it falls back to, or a texture: its name, and no field. */ + data class Input(val pin: ShaderPinSpec, override val top: Float) : ShaderNodeRow { + override val height get() = ShaderNodeLayout.ROW + } + + /** An input with nothing linked to it: its name and a field per component of its value. */ + data class Value(val pin: ShaderPinSpec, val components: Int, override val top: Float) : ShaderNodeRow { + override val height get() = ShaderNodeLayout.ROW + } +} + +/** Where everything of one node sits, in graph units from the corner of the node. */ +internal class ShaderNodeBox( + val node: ShaderGraphNode, + val kind: ShaderNodeType, + val width: Float, + val height: Float, + val rows: List, + val preview: Float, + val previewTop: Float, +) { + val rect: GraphRect get() = GraphRect(node.x, node.y, width, height) + + val pins: List + get() = rows.mapNotNull { row -> + val y = node.y + row.top + row.height / 2f + when (row) { + is ShaderNodeRow.Output -> ShaderPin(node.id, row.name, true, node.x + width, y) + is ShaderNodeRow.Input -> ShaderPin(node.id, row.pin.name, false, node.x, y) + is ShaderNodeRow.Value -> ShaderPin(node.id, row.pin.name, false, node.x, y) + is ShaderNodeRow.Option -> null + } + } +} + +internal object ShaderNodeLayout { + const val WIDTH = 176f + const val OUTPUT_WIDTH = 196f + const val HEADER = 22f + const val ROW = 18f + const val OPTION_ROW = 20f + const val EXPRESSION_ROW = 24f + const val PADDING = 5f + const val PREVIEW = 116f + const val OUTPUT_PREVIEW = 176f + const val PIN = 10f + + fun of(graph: ShaderGraph, node: ShaderGraphNode, kind: ShaderNodeType, types: ShaderGraphTypes): ShaderNodeBox { + val width = if (kind.master != null) OUTPUT_WIDTH else WIDTH + val rows = ArrayList() + var y = HEADER + PADDING + kind.outputs.forEach { output -> + rows += ShaderNodeRow.Output(output.name, y) + y += ROW + } + kind.options.forEach { option -> + val height = if (option.kind == ShaderOptionKind.EXPRESSION) EXPRESSION_ROW else OPTION_ROW + rows += ShaderNodeRow.Option(option.name, option.kind, y, height) + y += height + } + kind.inputs(node).forEach { pin -> + val linked = graph.linkInto(node.id, pin.name) != null + rows += if (linked || pin.fallback != null || pin.type.fixed == ShaderType.TEXTURE) { + ShaderNodeRow.Input(pin, y) + } else { + ShaderNodeRow.Value(pin, components(node, pin, types), y) + } + y += ROW + } + y += PADDING + val preview = if (kind.showsPreview(node)) (if (kind.master != null) OUTPUT_PREVIEW else PREVIEW) else 0f + val previewTop = y + if (preview > 0f) y += preview + PADDING + return ShaderNodeBox(node, kind, width, y, rows, preview, previewTop) + } + + private fun components(node: ShaderGraphNode, pin: ShaderPinSpec, types: ShaderGraphTypes): Int { + pin.type.fixed?.let { return it.width } + val stored = node.values[pin.name]?.size ?: pin.default.size + val resolved = types.input(node.id, pin.name)?.width ?: 1 + return maxOf(stored, resolved).coerceIn(1, 4) + } +} + +internal fun ShaderType.color(): UiColor = when (this) { + ShaderType.FLOAT -> UiColor(0.62f, 0.66f, 0.74f) + ShaderType.VEC2 -> UiColor(0.47f, 0.80f, 0.56f) + ShaderType.VEC3 -> UiColor(0.96f, 0.82f, 0.38f) + ShaderType.VEC4 -> UiColor(0.90f, 0.52f, 0.78f) + ShaderType.TEXTURE -> UiColor(0.95f, 0.55f, 0.35f) +} + +internal val GraphLinkColor = UiColor(0.60f, 0.64f, 0.72f) +internal val GraphSelectedColor = UiColor(0.43f, 0.61f, 0.86f) + +internal fun ShaderType.tag(): String = "sg-type-${name.lowercase()}" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphMenus.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphMenus.kt new file mode 100644 index 000000000..b4eef9d09 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphMenus.kt @@ -0,0 +1,90 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import ru.hollowhorizon.hollowengine.client.shadergraph.* +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownItem +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiDropdownMark +import ru.hollowhorizon.hollowengine.client.utils.lang + +/** A context menu the editor has open, where it was opened on the screen. */ +internal data class GraphMenu(val x: Float, val y: Float, val items: List) + +/** + * The add menu: a submenu per category, in the order the kinds were registered, with the kinds of one + * group together and a line between groups. + */ +internal fun addNodeItems( + accepts: (ShaderNodeType) -> Boolean = { true }, + onPick: (ShaderNodeType) -> Unit, +): List = ShaderNodeCategory.entries.filter { it != ShaderNodeCategory.OUTPUT }.mapNotNull { category -> + val kinds = ShaderNodeTypes.all.filter { it.category == category && it.master == null && accepts(it) } + if (kinds.isEmpty()) return@mapNotNull null + UiDropdownItem( + graphText("category.${category.name.lowercase()}"), + children = kinds.mapIndexed { index, kind -> + UiDropdownItem(kind.title(), separatorBefore = index > 0 && kind.group != kinds[index - 1].group) { + onPick( + kind + ) + } + }, + ) +} + +/** What the menu of a node offers: its preview, and unless it is the output, a copy and removal. */ +internal fun nodeItems( + node: ShaderGraphNode, + kind: ShaderNodeType, + onPreview: (Boolean) -> Unit, + onDuplicate: () -> Unit, + onDelete: () -> Unit, +): List = buildList { + val shown = kind.showsPreview(node) + add( + UiDropdownItem( + graphText("show_preview"), + mark = UiDropdownMark.CHECKBOX, + checked = shown + ) { onPreview(!shown) }) + if (kind.master != null) return@buildList + add(UiDropdownItem(graphText("duplicate"), shortcut = "Ctrl+D", separatorBefore = true, onClick = onDuplicate)) + add(UiDropdownItem(graphText("delete_node"), shortcut = "Del", onClick = onDelete)) +} + +/** The values of a choice, each marked when it is the current one. */ +internal fun choiceItems(option: ShaderOptionSpec, current: String, onPick: (String) -> Unit): List = + option.values.map { value -> + UiDropdownItem( + optionValueTitle(option, value), + mark = UiDropdownMark.RADIO, + checked = value == current + ) { onPick(value) } + } + +/** The first input of a node of this kind a value of [type] can be linked into, one of that very type first. */ +internal fun ShaderNodeType.inputFor(type: ShaderType, node: ShaderGraphNode = prototype): ShaderPinSpec? { + val pins = inputs(node) + return pins.firstOrNull { it.type.fixed == type } ?: pins.firstOrNull { it.type.accepts(type) } +} + +/** The first output of this kind that can be linked into a pin of [pin]. */ +internal fun ShaderNodeType.outputFor(pin: ShaderPinType): ShaderOutputSpec? = outputs.firstOrNull { output -> + output.type.fixed?.let(pin::accepts) ?: (output.typeOf != null || pin != ShaderPinType.TEXTURE) +} + +/** The translated name of an option, or the option made readable. */ +internal fun optionTitle(option: ShaderOptionSpec): String = + option.titleKey.lang.takeIf { it != option.titleKey } ?: readable(option.name) + +internal fun optionValueTitle(option: ShaderOptionSpec, value: String): String { + val key = option.valueKey(value) + return key.lang.takeIf { it != key } ?: readable(value) +} + +private fun readable(name: String): String = name.replace('_', ' ').replaceFirstChar { it.uppercase() } + +/** The translated title of a kind, or its id made readable when nothing translates it. */ +internal fun ShaderNodeType.title(): String { + val translated = titleKey.lang + if (translated != titleKey) return translated + return readable(id.substringAfterLast('/')) +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphNodeView.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphNodeView.kt new file mode 100644 index 000000000..b40ce6a10 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphNodeView.kt @@ -0,0 +1,170 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraph +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraphTypes +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderType +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphNode +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphNodeGesture +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphViewState +import ru.hollowhorizon.hollowengine.client.ui.widgets.tooltipOnHover + +internal const val ShaderGraphCanvasId = "shader-graph-canvas" + +/** What a node and its pins do when pressed and dragged. */ +internal interface ShaderNodeActions : ShaderFieldActions { + fun pressNode(node: String, gesture: GraphNodeGesture) + fun dragNode(node: String, gesture: GraphNodeGesture) + fun releaseNode(node: String) + fun nodeMenu(node: String, screenX: Float, screenY: Float) + fun pressPin(pin: ShaderPin, screenX: Float, screenY: Float) + fun dragPin(canvasX: Float, canvasY: Float, screenX: Float, screenY: Float) + fun releasePin() +} + +/** + * One node on the canvas, laid out as [box] says: the title, a row per output, option and input, the + * preview, and the pins on its edges. + */ +@Composable +internal fun ShaderNodeView( + graph: ShaderGraph, + box: ShaderNodeBox, + types: ShaderGraphTypes, + view: GraphViewState, + selected: Boolean, + problem: String?, + previews: ShaderGraphPreviews, + actions: ShaderNodeActions, +) { + val node = box.node + val kind = box.kind + GraphNode( + id = "sg-node-${node.id}", + canvasId = ShaderGraphCanvasId, + view = view, + x = node.x, + y = node.y, + width = box.width, + height = box.height, + selected = selected, + tags = listOfNotNull("sg-node", "sg-${kind.category.name.lowercase()}", "error".takeIf { problem != null }), + onPress = { actions.pressNode(node.id, it) }, + onDrag = { actions.dragNode(node.id, it) }, + onRelease = { actions.releaseNode(node.id) }, + onContextMenu = { x, y -> actions.nodeMenu(node.id, x, y) }, + ) { + Box(mode = UiBoxMode.STACK, modifier = Modifier.size(100.percent, 100.percent)) { + Row( + tags = listOf("sg-node-head"), + modifier = Modifier.position(HeaderInset.px, HeaderInset.px) + .size((box.width - HeaderInset * 2).px, (ShaderNodeLayout.HEADER - HeaderInset).px) + .alignItems(vertical = UiAlign.CENTER) + .let { if (problem != null) it.tooltipOnHover(problem) else it }, + ) { + Text( + kind.title(), + tags = listOf("graph-node-title"), + modifier = Modifier.size(0.px, UiLength.Auto).grow(1f) + ) + } + box.rows.forEach { row -> NodeRow(graph, box, row, types, actions) } + if (box.preview > 0f) { + Box( + tags = listOf("sg-node-preview"), + modifier = Modifier.position(((box.width - box.preview) / 2f).px, box.previewTop.px) + .size(box.preview.px, box.preview.px) + .drawBehind(key = node.id) { drawTexture(bounds, { previews.texture(node.id) }, flipY = true) }, + ) + } + box.pins.forEach { pin -> + val type = if (pin.output) types.output(pin.node, pin.name) else types.input(pin.node, pin.name) + val connected = graph.links.any { + if (pin.output) it.from == pin.node && it.output == pin.name else it.to == pin.node && it.input == pin.name + } + ShaderPinView(pin, node.x, node.y, type, connected, actions) + } + } + } +} + +@Composable +private fun NodeRow( + graph: ShaderGraph, + box: ShaderNodeBox, + row: ShaderNodeRow, + types: ShaderGraphTypes, + actions: ShaderNodeActions, +) { + val node = box.node + Row( + tags = listOf("sg-node-row"), + modifier = Modifier.position(0.px, row.top.px).size(box.width.px, row.height.px).padding(RowPadding.px, 0.px) + .alignItems(vertical = UiAlign.CENTER), + ) { + when (row) { + is ShaderNodeRow.Output -> { + Box(modifier = Modifier.size(0.px, 1.px).grow(1f)) + Text(row.name, tags = listOf("sg-pin-label", "output")) + } + + is ShaderNodeRow.Input -> { + Text(row.pin.name, tags = listOf("sg-pin-label")) + val reads = row.pin.fallback?.takeIf { graph.linkInto(node.id, row.pin.name) == null } + if (reads != null) Text(reads.name.lowercase(), tags = listOf("sg-pin-hint")) + } + + is ShaderNodeRow.Value -> { + val values = + node.values[row.pin.name]?.takeIf { it.isNotEmpty() } ?: row.pin.default.ifEmpty { listOf(0f) } + ValueFields(node, row.pin, values, row.components, actions) + } + + is ShaderNodeRow.Option -> box.kind.option(row.name) + ?.let { option -> OptionField(graph, node, option, actions) } + } + } +} + +/** A pin on the edge of its node, in the color of what it carries, filled once something is linked. */ +@Composable +private fun ShaderPinView( + pin: ShaderPin, + nodeX: Float, + nodeY: Float, + type: ShaderType?, + connected: Boolean, + actions: ShaderNodeActions, +) { + val half = ShaderNodeLayout.PIN / 2f + val held = remember { booleanArrayOf(false) } + fun canvas(event: UiEvent) = event.ancestorLocalPositions[ShaderGraphCanvasId] + Box( + id = "sg-pin-${pin.node}-${if (pin.output) "out" else "in"}-${pin.name}", + tags = listOfNotNull("sg-pin", type?.tag(), "connected".takeIf { connected }), + modifier = Modifier.position((pin.x - nodeX - half).px, (pin.y - nodeY - half).px) + .size(ShaderNodeLayout.PIN.px, ShaderNodeLayout.PIN.px) + .input(hoverable = true, clickable = true, draggable = true).onPress { event -> + if (event.button != GLFW.GLFW_MOUSE_BUTTON_LEFT) return@onPress + held[0] = true + actions.pressPin(pin, event.x, event.y) + event.consume() + }.onDrag { event -> + if (!held[0]) return@onDrag + canvas(event)?.let { actions.dragPin(it.x, it.y, event.x, event.y) } + event.consume() + }.onRelease { event -> + if (!held[0]) return@onRelease + held[0] = false + actions.releasePin() + event.consume() + }, + ) +} + +/** How far the title bar sits inside the frame of the node, which its corners follow. */ +private const val HeaderInset = 2f +private const val RowPadding = 8f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt new file mode 100644 index 000000000..05da8b9c2 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt @@ -0,0 +1,253 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import com.mojang.blaze3d.pipeline.TextureTarget +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.VertexBuffer +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.ShaderInstance +import org.joml.Matrix4f +import org.lwjgl.opengl.GL20 +import org.lwjgl.opengl.GL33 +import org.lwjgl.system.MemoryStack +import ru.hollowhorizon.hollowengine.client.shadergraph.* +import ru.hollowhorizon.hollowengine.client.ui.render.withCullStatePreserved +import ru.hollowhorizon.hollowengine.client.ui.render.withOwnRenderTarget +import ru.hollowhorizon.hollowengine.common.utils.rl +import java.util.concurrent.atomic.AtomicInteger + +/** + * What every node computes, drawn into a small texture per node. + * + * The whole graph is one program: a uniform picks whose value a draw shows, so an edit compiles once + * however many nodes there are, and a value typed on a node is a uniform too, so changing it compiles + * nothing. A node that reads the shape of what it is on, and the output node, are drawn on the mesh + * the graph picked; the rest on a flat quad. + */ +internal class ShaderGraphPreviews { + private class Frame(val graph: ShaderGraph, val revision: Int) + + @Volatile + private var latest: Frame? = null + + /** Why the program did not build, for the editor to show; set on the render thread. */ + @Volatile + var error: ShaderDiagnostic? = null + private set + + private val name = "preview_${Counter.incrementAndGet()}" + private val meshes = ShaderPreviewMeshes() + private val started = System.nanoTime() + private var program: ShaderInstance? = null + private var programSource: String? = null + private var code: ShaderPreviewCode? = null + private var drawnRevision = -1 + private var animated = false + private val targets = HashMap() + + /** Called from composition with the graph as it is now. */ + fun show(graph: ShaderGraph, revision: Int) { + if (latest?.revision != revision) latest = Frame(graph, revision) + } + + /** The texture of [node]'s preview, or 0 while there is none; read while the UI draws. */ + fun texture(node: String): Int = targets[node]?.colorTextureId ?: 0 + + /** Draws what changed; runs on the render thread, inside a UI draw. */ + fun render() { + val frame = latest ?: return + val changed = frame.revision != drawnRevision + if (!changed && !animated) return + drawnRevision = frame.revision + if (changed) rebuild(frame.graph) + val shader = program ?: return + val compiled = code ?: return + + val blend = GL33.glIsEnabled(GL33.GL_BLEND) + val depth = GL33.glIsEnabled(GL33.GL_DEPTH_TEST) + withOwnRenderTarget { + withCullStatePreserved { + RenderSystem.disableBlend() + RenderSystem.disableDepthTest() + val master = frame.graph.nodes.firstOrNull { ShaderNodeTypes.of(it.type)?.master != null }?.id + compiled.previewIndex.forEach { (node, index) -> + val pixels = if (node == master) OUTPUT_PIXELS else PIXELS + val target = target(node, pixels) + target.setClearColor(0f, 0f, 0f, 0f) + target.clear(Minecraft.ON_OSX) + target.bindWrite(true) + val mesh = frame.graph.preview.mesh.takeIf { node in compiled.spatial } ?: ShaderPreviewMesh.QUAD + draw(shader, frame.graph, compiled, mesh, index, pixels) + } + } + } + if (depth) RenderSystem.enableDepthTest() + if (blend) RenderSystem.enableBlend() + } + + private fun target(node: String, pixels: Int): TextureTarget { + val existing = targets[node] + if (existing != null && existing.width == pixels) return existing + existing?.destroyBuffers() + return TextureTarget(pixels, pixels, false, Minecraft.ON_OSX).also { targets[node] = it } + } + + private fun draw( + shader: ShaderInstance, + graph: ShaderGraph, + compiled: ShaderPreviewCode, + mesh: ShaderPreviewMesh, + index: Int, + pixels: Int, + ) { + val seconds = (System.nanoTime() - started) / 1_000_000_000f + val flat = mesh == ShaderPreviewMesh.QUAD + val (modelView, projection) = if (flat) Matrix4f() to Matrix4f() else camera( + seconds, + graph.preview.rotate, + mesh + ) + if (flat) RenderSystem.disableCull() else RenderSystem.enableCull() + + val buffer = meshes.of(mesh) + buffer.bind() + shader.setDefaultUniforms(VertexFormat.Mode.TRIANGLES, modelView, projection, Minecraft.getInstance().window) + shader.safeGetUniform("PreviewNode").set(index) + shader.safeGetUniform("PreviewTime").set(seconds) + shader.safeGetUniform("PreviewFlat").set(if (flat) 1f else 0f) + shader.safeGetUniform("PreviewPixels").set(pixels.toFloat()) + shader.setSampler("Sampler0", textureAt(graph.preview.texture)) + graph.properties.forEach { property -> + if (property.type == ShaderType.TEXTURE) { + if (property.texture.isNotBlank()) shader.setSampler( + propertyUniform(property.name), + textureAt(property.texture) + ) + } else { + val values = FloatArray(property.type.width) { + property.default.getOrElse(it) { + property.default.lastOrNull() ?: 0f + } + } + shader.safeGetUniform(propertyUniform(property.name)).set(values) + } + } + shader.apply() + uploadValues(shader, graph, compiled.values) + buffer.draw() + shader.clear() + VertexBuffer.unbind() + } + + /** The values typed on the nodes, read from the graph as it is now; the program only knows their slots. */ + private fun uploadValues(shader: ShaderInstance, graph: ShaderGraph, slots: List) { + if (slots.isEmpty()) return + val location = GL20.glGetUniformLocation(shader.id, "PreviewValues") + if (location < 0) return + MemoryStack.stackPush().use { stack -> + val buffer = stack.mallocFloat(slots.size * 4) + slots.forEach { slot -> + val node = graph.node(slot.node) + val pin = node?.let { + ShaderNodeTypes.of(it.type)?.codeInputs(it)?.firstOrNull { pin -> pin.name == slot.pin } + } + val values = + node?.values?.get(slot.pin)?.takeIf { it.isNotEmpty() } ?: pin?.default?.ifEmpty { null } ?: listOf( + 0f + ) + repeat(4) { component -> buffer.put(values.getOrElse(component) { values.last() }) } + } + buffer.flip() + GL20.glUniform4fv(location, buffer) + } + } + + /** A camera a little above the mesh, turning around it while [rotate] is on, with a cube made small enough to fit. */ + private fun camera(seconds: Float, rotate: Boolean, mesh: ShaderPreviewMesh): Pair { + val angle = if (rotate) seconds * TURN_SPEED else RESTING_ANGLE + val size = if (mesh == ShaderPreviewMesh.CUBE) CUBE_SIZE else 1f + val modelView = Matrix4f().translate(0f, 0f, -CAMERA_DISTANCE).rotateX(CAMERA_TILT).rotateY(angle).scale(size) + val projection = Matrix4f().perspective(Math.toRadians(FIELD_OF_VIEW).toFloat(), 1f, 0.1f, 20f) + return modelView to projection + } + + private fun rebuild(graph: ShaderGraph) { + val compiled = ShaderGraphCompiler.compilePreview(graph) + val source = ShaderGraphTemplates.preview(compiled) + code = compiled + animated = + ShaderInput.TIME.glsl in compiled.statements.text || graph.preview.rotate && graph.preview.mesh != ShaderPreviewMesh.QUAD && compiled.spatial.any { it in compiled.previewIndex } + (targets.keys - compiled.previewIndex.keys).forEach { targets.remove(it)?.destroyBuffers() } + if (source == programSource) return + + program?.close() + program = null + programSource = source + val stage = "${name}_${Integer.toHexString(source.hashCode())}" + val built = ShaderGraphPrograms.create( + name = stage, + json = ShaderGraphPrograms.json( + vertex = ShaderGraphPrograms.stage(stage), + fragment = ShaderGraphPrograms.stage(stage), + attributes = listOf("Position", "Color", "UV0", "UV1", "UV2", "Normal"), + samplers = listOf("Sampler0") + ShaderGraphPrograms.propertySamplers(graph.properties), + uniforms = listOf( + ShaderGraphUniform("ModelViewMat", "matrix4x4", IDENTITY), + ShaderGraphUniform("ProjMat", "matrix4x4", IDENTITY), + ShaderGraphUniform("PreviewNode", "int", listOf(0f)), + ShaderGraphUniform("PreviewTime", "float", listOf(0f)), + ShaderGraphUniform("PreviewFlat", "float", listOf(1f)), + ShaderGraphUniform("PreviewPixels", "float", listOf(PIXELS.toFloat())), + ) + ShaderGraphPrograms.propertyUniforms(graph.properties), + ), + stages = mapOf("vsh" to requireNotNull(ShaderGraphTemplates.PREVIEW.vertexSource), "fsh" to source), + format = meshes.format, + ) + program = built.getOrNull() + error = built.exceptionOrNull()?.let { diagnose(it.message.orEmpty(), source, compiled) } + } + + /** + * What the driver said, pinned to the node whose statement it points at when it names a line of + * the graph's code, which drivers write as `0(12)` or `0:12`. + */ + private fun diagnose(message: String, source: String, compiled: ShaderPreviewCode): ShaderDiagnostic { + val first = ShaderGraphTemplates.previewStatementLines(source, compiled) + val line = ErrorLine.find(message)?.groupValues?.get(1)?.toIntOrNull() + val node = if (first != null && line != null) compiled.statementNodes.getOrNull(line - first) else null + val text = + message.lineSequence().firstOrNull { "error" in it.lowercase() && ErrorLine.containsMatchIn(it) }?.trim() + ?: message + return ShaderDiagnostic(ShaderProblem.GLSL_ERROR, node, text.take(ERROR_LENGTH)) + } + + /** Frees the program, the meshes and the textures; GL objects, so on the render thread. */ + fun release() { + program?.close() + program = null + programSource = null + drawnRevision = -1 + meshes.release() + targets.values.forEach(TextureTarget::destroyBuffers) + targets.clear() + } + + private fun textureAt(location: String): Int = Minecraft.getInstance().textureManager.getTexture(location.rl).id + + private companion object { + const val PIXELS = 128 + const val OUTPUT_PIXELS = 192 + const val TURN_SPEED = 0.6f + const val RESTING_ANGLE = 0.6f + const val CAMERA_DISTANCE = 3.4f + const val CAMERA_TILT = 0.35f + const val CUBE_SIZE = 0.72f + const val FIELD_OF_VIEW = 34.0 + const val ERROR_LENGTH = 400 + val IDENTITY = listOf(1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f) + val ErrorLine = Regex("""\b0[(:](\d+)""") + + /** Programs are cached by name, so every editor gets names of its own. */ + val Counter = AtomicInteger() + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt new file mode 100644 index 000000000..575016efe --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt @@ -0,0 +1,40 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import ru.hollowhorizon.hollowengine.client.ui.graph.GraphViewState + +/** What is selected: some nodes, or one link, by its position among the links. */ +internal data class ShaderGraphSelection(val nodes: Set = emptySet(), val link: Int? = null) { + val single: String? get() = nodes.singleOrNull() + + operator fun contains(node: String): Boolean = node in nodes + + companion object { + val None = ShaderGraphSelection() + + fun of(node: String) = ShaderGraphSelection(setOf(node)) + fun ofLink(index: Int) = ShaderGraphSelection(link = index) + } +} + +/** What editor of one file keeps while file stays open: view and selection. */ +internal class ShaderGraphEditorState { + val view = GraphViewState() + var selection by mutableStateOf(ShaderGraphSelection.None) +} + +/** + * A link being drawn from a pin toward pointer: where pointer is on canvas and screen, + * and where menu opens if it is dropped on nothing. + */ +internal data class PendingLink( + val node: String, + val pin: String, + val fromOutput: Boolean, + val x: Float, + val y: Float, + val screenX: Float, + val screenY: Float, +) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphValueFields.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphValueFields.kt new file mode 100644 index 000000000..b1e2a051f --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphValueFields.kt @@ -0,0 +1,201 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import androidx.compose.runtime.* +import org.lwjgl.glfw.GLFW +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraphNode +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinSpec +import ru.hollowhorizon.hollowengine.client.ui.* +import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import ru.hollowhorizon.hollowengine.client.ui.style.UiPaint +import ru.hollowhorizon.hollowengine.client.ui.widgets.ColorPicker +import ru.hollowhorizon.hollowengine.client.ui.widgets.UiTextInputFilter +import java.util.* +import kotlin.math.abs +import kotlin.math.roundToInt +import kotlin.math.sign + +/** + * The value of an unlinked input: its name, then a field per component, or for a color a swatch that + * opens a picker. + */ +@Composable +internal fun ValueFields( + node: ShaderGraphNode, + pin: ShaderPinSpec, + values: List, + components: Int, + actions: ShaderFieldActions, +) { + val shown = (0 until components).map { values.getOrElse(it) { values.lastOrNull() ?: 0f } } + fun set(component: Int, value: Float) = + actions.setValue(node.id, pin.name, shown.toMutableList().also { it[component] = value }) + + Text(pin.name, tags = listOf("sg-pin-label"), modifier = Modifier.size(0.px, UiLength.Auto).grow(1f)) + if (pin.color && components >= 3) { + ColorSwatch("sg-color-${node.id}-${pin.name}", shown, actions) { actions.setValue(node.id, pin.name, it) } + return + } + Row(tags = listOf("sg-fields"), modifier = Modifier.size(FieldsWidth.px, UiLength.Auto)) { + shown.forEachIndexed { component, value -> + NumberField("sg-field-${node.id}-${pin.name}-$component", value, actions) { set(component, it) } + } + } +} + +/** + * A number shown as text that a drag sideways changes, by a hundredth per pixel, a thousandth with + * Shift and a tenth with Ctrl, as one step back. A click without a drag types into it instead; while + * it is typed into, the wheel steps it by a tenth, a hundredth with Shift and one with Ctrl. + * Without [gestures], a drag leaves the steps back to whoever holds one open around the field. + */ +@Composable +internal fun NumberField( + id: String, + value: Float, + actions: ShaderFieldActions, + gestures: Boolean = true, + onChange: (Float) -> Unit, +) { + var editing by remember(id) { mutableStateOf(false) } + val focus = LocalUiFocusRequester.current + val start = remember(id) { floatArrayOf(0f) } + // Whether the left button went down here, and whether it has moved since. + val gesture = remember(id) { booleanArrayOf(false, false) } + + if (editing) { + TypedNumber("$id-edit", value, onChange) { editing = false } + return + } + Text( + formatValue(value), + id = id, + tags = listOf("sg-field", "sg-number"), + modifier = Modifier.size(0.px, FieldHeight.px).grow(1f) + .input(hoverable = true, clickable = true, draggable = true).onPress { event -> + if (event.button != GLFW.GLFW_MOUSE_BUTTON_LEFT) return@onPress + gesture[0] = true + gesture[1] = false + start[0] = value + if (gestures) actions.beginGesture() + event.consume() + }.onDrag { event -> + if (!gesture[0]) return@onDrag + if (abs(event.dragTotalX) >= DRAG_THRESHOLD) gesture[1] = true + if (gesture[1]) onChange(rounded(start[0] + event.dragTotalX * step(event.modifiers, DRAG_STEP))) + event.consume() + }.onRelease { event -> + if (!gesture[0]) return@onRelease + gesture[0] = false + if (gestures) actions.endGesture() + if (!gesture[1]) { + editing = true + focus.request("$id-edit") + } + event.consume() + }, + ) +} + +/** The field a number is typed into; it goes back to text on Enter, on Escape and when it loses focus. */ +@Composable +private fun TypedNumber(id: String, value: Float, onChange: (Float) -> Unit, onDone: () -> Unit) { + var draft by remember(id) { mutableStateOf(formatValue(value)) } + TextField( + value = draft, + id = id, + filter = UiTextInputFilter.DECIMAL, + fontSize = 8f, + tags = listOf("sg-field"), + modifier = Modifier.size(0.px, FieldHeight.px).grow(1f).onUnfocus { onDone() }.onKeyInput { input -> + if (input.key == GLFW.GLFW_KEY_ENTER || input.key == GLFW.GLFW_KEY_KP_ENTER || input.key == GLFW.GLFW_KEY_ESCAPE) { + onDone() + input.consume() + } + }.onScroll { event -> + val next = rounded( + (draft.toFloatOrNull() ?: value) + sign(event.rawScrollY) * step( + event.modifiers, + WHEEL_STEP + ) + ) + draft = formatValue(next) + onChange(next) + event.consume() + }, + onChange = { text -> + draft = text + text.toFloatOrNull()?.let(onChange) + }, + ) +} + +/** + * A color as a swatch; a press opens a picker, with a field per channel under it for values past 1, + * such as a bright emission. Everything done while the picker is open is one step back. + */ +@Composable +private fun ColorSwatch(id: String, values: List, actions: ShaderFieldActions, onChange: (List) -> Unit) { + var anchor by remember(id) { mutableStateOf(null) } + val color = UiColor(values[0], values[1], values[2], values.getOrElse(3) { 1f }) + Box( + id = id, + tags = listOf("sg-swatch"), + modifier = Modifier.size(FieldsWidth.px, FieldHeight.px) + .drawBehind(key = color) { drawRect(bounds, UiPaint.Color(color.clamped()), radius = 2f) } + .input(hoverable = true, clickable = true).onPress { event -> + if (event.button == GLFW.GLFW_MOUSE_BUTTON_LEFT && anchor == null) { + actions.beginGesture() + anchor = UiRect(event.x, event.y, 0f, 0f) + } + event.consume() + }, + ) + val open = anchor ?: return + Popup( + anchorBounds = open, + id = "$id-popup", + tags = listOf("sg-color-popup"), + onDismiss = { + anchor = null + actions.endGesture() + }, + ) { + Column(tags = listOf("sg-color-popup-body")) { + ColorPicker( + value = color.clamped(), + showAlpha = values.size == 4, + onValueChange = { picked -> + onChange( + listOf(picked.red, picked.green, picked.blue, picked.alpha).take(values.size).map(::rounded) + ) + }, + ) + Row(tags = listOf("sg-fields")) { + values.forEachIndexed { channel, value -> + NumberField("$id-channel-$channel", value, actions, gestures = false) { typed -> + onChange(values.toMutableList().also { it[channel] = typed }) + } + } + } + } + } +} + +private fun UiColor.clamped() = + UiColor(red.coerceIn(0f, 1f), green.coerceIn(0f, 1f), blue.coerceIn(0f, 1f), alpha.coerceIn(0f, 1f)) + +private fun step(modifiers: Int, base: Float): Float = when { + modifiers and GLFW.GLFW_MOD_SHIFT != 0 -> base / 10f + modifiers and GLFW.GLFW_MOD_CONTROL != 0 -> base * 10f + else -> base +} + +internal fun formatValue(value: Float): String = + if (value == value.toInt().toFloat()) value.toInt().toString() else "%.3f".format(Locale.ROOT, value).trimEnd('0') + +private fun rounded(value: Float): Float = (value * 1000f).roundToInt() / 1000f + +/** Pixels a press has to move before it counts as a drag rather than a click. */ +private const val DRAG_THRESHOLD = 2f +private const val DRAG_STEP = 0.01f +private const val WHEEL_STEP = 0.1f diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderPreviewMeshes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderPreviewMeshes.kt new file mode 100644 index 000000000..955cae684 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderPreviewMeshes.kt @@ -0,0 +1,114 @@ +package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph + +import com.mojang.blaze3d.vertex.BufferBuilder +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.Tesselator +import com.mojang.blaze3d.vertex.VertexBuffer +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.renderer.texture.OverlayTexture +import org.joml.Vector3f +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPreviewMesh +import kotlin.math.PI +import kotlin.math.cos +import kotlin.math.sin + +/** + * What the previews are drawn on, uploaded once and kept for as long as the editor is open. Every + * mesh faces outward counterclockwise, so with back faces culled a convex one needs no depth buffer. + */ +internal class ShaderPreviewMeshes { + private val meshes = HashMap() + + /** The vertex format of every mesh; the preview program binds its attributes by these names. */ + val format: VertexFormat get() = DefaultVertexFormat.NEW_ENTITY + + fun of(mesh: ShaderPreviewMesh): VertexBuffer = meshes.getOrPut(mesh) { + val builder = Tesselator.getInstance().begin(VertexFormat.Mode.TRIANGLES, format) + when (mesh) { + ShaderPreviewMesh.QUAD -> quad(builder) + ShaderPreviewMesh.SPHERE -> sphere(builder) + ShaderPreviewMesh.CUBE -> cube(builder) + } + VertexBuffer(VertexBuffer.Usage.STATIC).apply { + bind() + upload(builder.buildOrThrow()) + VertexBuffer.unbind() + } + } + + fun release() { + meshes.values.forEach(VertexBuffer::close) + meshes.clear() + } + + /** The whole target, from -1 to 1, facing the camera; drawn without matrices. */ + private fun quad(builder: BufferBuilder) { + val normal = Vector3f(0f, 0f, 1f) + face(builder, Vector3f(0f, 0f, 0f), Vector3f(1f, 0f, 0f), Vector3f(0f, 1f, 0f), normal) + } + + /** A unit sphere, the seam at the back; u goes around it, v from the bottom to the top. */ + private fun sphere(builder: BufferBuilder) { + fun point(stack: Int, slice: Int): Vector3f { + val theta = PI * stack / STACKS + val phi = 2 * PI * slice / SLICES + return Vector3f((sin(theta) * sin(phi)).toFloat(), cos(theta).toFloat(), (sin(theta) * cos(phi)).toFloat()) + } + fun vertex(stack: Int, slice: Int) { + val p = point(stack, slice) + val u = slice.toFloat() / SLICES + val v = 1f - stack.toFloat() / STACKS + builder.addVertex(p.x, p.y, p.z, WHITE, u, v, OverlayTexture.NO_OVERLAY, FULL_BRIGHT, p.x, p.y, p.z) + } + for (stack in 0 until STACKS) { + for (slice in 0 until SLICES) { + vertex(stack, slice) + vertex(stack + 1, slice) + vertex(stack + 1, slice + 1) + vertex(stack, slice) + vertex(stack + 1, slice + 1) + vertex(stack, slice + 1) + } + } + } + + /** + * A cube from -1 to 1, with the whole of the UV square on each face; like every mesh here it spans + * -1 to 1, which is what the position in the object reads, and the camera sizes it to fit. + */ + private fun cube(builder: BufferBuilder) { + listOf( + Triple(Vector3f(0f, 0f, 1f), Vector3f(1f, 0f, 0f), Vector3f(0f, 1f, 0f)), + Triple(Vector3f(0f, 0f, -1f), Vector3f(-1f, 0f, 0f), Vector3f(0f, 1f, 0f)), + Triple(Vector3f(1f, 0f, 0f), Vector3f(0f, 0f, -1f), Vector3f(0f, 1f, 0f)), + Triple(Vector3f(-1f, 0f, 0f), Vector3f(0f, 0f, 1f), Vector3f(0f, 1f, 0f)), + Triple(Vector3f(0f, 1f, 0f), Vector3f(1f, 0f, 0f), Vector3f(0f, 0f, -1f)), + Triple(Vector3f(0f, -1f, 0f), Vector3f(1f, 0f, 0f), Vector3f(0f, 0f, 1f)), + ).forEach { (normal, right, up) -> + face(builder, normal, right, up, normal) + } + } + + /** Two triangles around [center], [right] and [up] from it to the edges, counterclockwise seen from [normal]. */ + private fun face(builder: BufferBuilder, center: Vector3f, right: Vector3f, up: Vector3f, normal: Vector3f) { + fun corner(u: Float, v: Float) { + val x = center.x + right.x * (u * 2f - 1f) + up.x * (v * 2f - 1f) + val y = center.y + right.y * (u * 2f - 1f) + up.y * (v * 2f - 1f) + val z = center.z + right.z * (u * 2f - 1f) + up.z * (v * 2f - 1f) + builder.addVertex(x, y, z, WHITE, u, v, OverlayTexture.NO_OVERLAY, FULL_BRIGHT, normal.x, normal.y, normal.z) + } + corner(0f, 0f) + corner(1f, 0f) + corner(1f, 1f) + corner(0f, 0f) + corner(1f, 1f) + corner(0f, 1f) + } + + private companion object { + const val STACKS = 24 + const val SLICES = 48 + const val WHITE = -1 + const val FULL_BRIGHT = 0xF000F0 + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt index 6ee7800ef..d2ca38b5f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxPreviewRenderer.kt @@ -17,9 +17,7 @@ import org.lwjgl.opengl.GL33 import ru.hollowhorizon.hollowengine.client.render.DebugLines import ru.hollowhorizon.hollowengine.client.ui.ide.files.animator.AnimatorColors import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect -import ru.hollowhorizon.hollowengine.client.ui.render.disableScissor -import ru.hollowhorizon.hollowengine.client.ui.render.uiBlendWritesAlpha -import ru.hollowhorizon.hollowengine.client.ui.render.uiWriteAlpha +import ru.hollowhorizon.hollowengine.client.ui.render.withOwnRenderTarget import ru.hollowhorizon.hollowengine.client.vfx.VfxInstance import ru.hollowhorizon.hollowengine.client.vfx.render.VfxDrawList import ru.hollowhorizon.hollowengine.client.vfx.render.VfxFrameRenderer @@ -47,7 +45,7 @@ internal class VfxPreviewRenderer { val size = pixelSize(rect, stack) ?: return var texture = 0 - withOwnTarget { + withOwnRenderTarget { val offscreen = targetOf(size.first, size.second) texture = offscreen.colorTextureId offscreen.setClearColor(Background.red, Background.green, Background.blue, 1f) @@ -89,39 +87,6 @@ internal class VfxPreviewRenderer { blit(texture, rect, stack) } - /** - * Runs [draw] with the state the panel was drawing in set aside and put back afterwards. - */ - private inline fun withOwnTarget(draw: () -> Unit) { - val read = GL33.glGetInteger(GL33.GL_READ_FRAMEBUFFER_BINDING) - val write = GL33.glGetInteger(GL33.GL_DRAW_FRAMEBUFFER_BINDING) - val viewport = IntArray(4).also { GL33.glGetIntegerv(GL33.GL_VIEWPORT, it) } - val scissorBox = IntArray(4).also { GL33.glGetIntegerv(GL33.GL_SCISSOR_BOX, it) } - val scissor = GL33.glIsEnabled(GL33.GL_SCISSOR_TEST) - val clearColor = FloatArray(4).also { GL33.glGetFloatv(GL33.GL_COLOR_CLEAR_VALUE, it) } - val alpha = uiBlendWritesAlpha - val projection = Matrix4f(RenderSystem.getProjectionMatrix()) - val sorting = RenderSystem.getVertexSorting() - val modelView = RenderSystem.getModelViewStack() - modelView.pushMatrix() - try { - disableScissor() - RenderSystem.colorMask(true, true, true, true) - draw() - } finally { - RenderSystem.setProjectionMatrix(projection, sorting) - modelView.popMatrix() - RenderSystem.applyModelViewMatrix() - GL33.glBindFramebuffer(GL33.GL_READ_FRAMEBUFFER, read) - GL33.glBindFramebuffer(GL33.GL_DRAW_FRAMEBUFFER, write) - RenderSystem.viewport(viewport[0], viewport[1], viewport[2], viewport[3]) - GL33.glScissor(scissorBox[0], scissorBox[1], scissorBox[2], scissorBox[3]) - if (scissor) GL33.glEnable(GL33.GL_SCISSOR_TEST) - GL33.glClearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]) - uiWriteAlpha(alpha) - } - } - fun close() { target?.destroyBuffers() target = null diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt index a0a6d24f8..6a9f5fe3f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxShaderInspector.kt @@ -2,6 +2,7 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.vfx import androidx.compose.runtime.Composable import net.minecraft.client.Minecraft +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraph import ru.hollowhorizon.hollowengine.client.ui.Modifier import ru.hollowhorizon.hollowengine.client.ui.Row import ru.hollowhorizon.hollowengine.client.ui.Text @@ -76,29 +77,45 @@ internal fun CameraShakeFields(document: HollowIdeVfxDocument, state: VfxEditorS * the geometry hands the shader, so it lives in the tooltip of the label. */ @Composable -internal fun VfxShaderRow(shader: String?, hint: String, id: String, onChange: (String?) -> Unit) { +internal fun VfxShaderRow( + shader: String?, + hint: String, + id: String, + materials: Boolean = false, + onChange: (String?) -> Unit, +) { VfxAssetRow( - label = vfxText("shader"), + label = vfxText(if (materials) "surface_shader" else "shader"), value = shader.orEmpty(), hint = hint, id = id, - candidates = { VfxShaderAssets.list() }, + candidates = { VfxShaderAssets.list(materials) }, exists = VfxShaderAssets::exists, placeholder = vfxText("shader_placeholder"), ) { typed -> onChange(typed.trim().ifBlank { null }) } } -/** The core shaders the loaded packs offer an effect, named the way a material names them. */ +/** + * What the loaded packs offer an effect to draw with, named the way a material names them. + */ internal object VfxShaderAssets { private const val Root = "shaders/core/" + private const val Materials = "materials" - fun list(): List { + /** The core shaders, and before them with [materials] the material graphs, which only surfaces draw with. */ + fun list(materials: Boolean): List { val manager = Minecraft.getInstance().resourceManager ?: return emptyList() return runCatching { - manager.listResources(Root.trimEnd('/')) { it.path.endsWith(".json") }.keys + val graphs = if (materials) { + manager.listResources(Materials) { it.path.endsWith(ShaderGraph.EXTENSION) }.keys.map { it.toString() }.sorted() + } else { + emptyList() + } + val shaders = manager.listResources(Root.trimEnd('/')) { it.path.endsWith(".json") }.keys .filter { it.namespace != "minecraft" } .map { "${it.namespace}:${it.path.removePrefix(Root).removeSuffix(".json")}" } .sorted() + graphs + shaders }.getOrDefault(emptyList()) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt index 18a3f3715..442a730a1 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/vfx/VfxSurfaceInspector.kt @@ -234,7 +234,7 @@ private fun MaterialFields(document: HollowIdeVfxDocument, state: VfxEditorState is VfxPlaneSpec -> "shader_plane_hint" else -> "shader_ribbon_hint" } - VfxShaderRow(material.shader, vfxText(attributes), "vfx-material-shader") { shader -> + VfxShaderRow(material.shader, vfxText(attributes), "vfx-material-shader", materials = true) { shader -> update(material.copy(shader = shader, uniforms = alignUniforms(shader, material.uniforms))) } VfxShaderFields( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiOffscreen.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiOffscreen.kt new file mode 100644 index 000000000..670c599e5 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/render/UiOffscreen.kt @@ -0,0 +1,39 @@ +package ru.hollowhorizon.hollowengine.client.ui.render + +import com.mojang.blaze3d.systems.RenderSystem +import org.joml.Matrix4f +import org.lwjgl.opengl.GL33 + +/** + * Runs [draw], which renders into a target of its own from inside a UI draw, with UI-state was + * drawing in set aside and put back afterward. + */ +internal inline fun withOwnRenderTarget(draw: () -> Unit) { + val read = GL33.glGetInteger(GL33.GL_READ_FRAMEBUFFER_BINDING) + val write = GL33.glGetInteger(GL33.GL_DRAW_FRAMEBUFFER_BINDING) + val viewport = IntArray(4).also { GL33.glGetIntegerv(GL33.GL_VIEWPORT, it) } + val scissorBox = IntArray(4).also { GL33.glGetIntegerv(GL33.GL_SCISSOR_BOX, it) } + val scissor = GL33.glIsEnabled(GL33.GL_SCISSOR_TEST) + val clearColor = FloatArray(4).also { GL33.glGetFloatv(GL33.GL_COLOR_CLEAR_VALUE, it) } + val alpha = uiBlendWritesAlpha + val projection = Matrix4f(RenderSystem.getProjectionMatrix()) + val sorting = RenderSystem.getVertexSorting() + val modelView = RenderSystem.getModelViewStack() + modelView.pushMatrix() + try { + disableScissor() + RenderSystem.colorMask(true, true, true, true) + draw() + } finally { + RenderSystem.setProjectionMatrix(projection, sorting) + modelView.popMatrix() + RenderSystem.applyModelViewMatrix() + GL33.glBindFramebuffer(GL33.GL_READ_FRAMEBUFFER, read) + GL33.glBindFramebuffer(GL33.GL_DRAW_FRAMEBUFFER, write) + RenderSystem.viewport(viewport[0], viewport[1], viewport[2], viewport[3]) + GL33.glScissor(scissorBox[0], scissorBox[1], scissorBox[2], scissorBox[3]) + if (scissor) GL33.glEnable(GL33.GL_SCISSOR_TEST) + GL33.glClearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]) + uiWriteAlpha(alpha) + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt index e4eee6d5c..27d526b4a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/utils/IconHelper.kt @@ -53,6 +53,7 @@ object IconHelper { listOf(".mixin.kts") to "script_mixin", listOf(".kts", ".kt") to "script", listOf(".vfx") to "effect", + listOf(".material") to "shader", listOf(".animator") to "animator", listOf(".rig") to "rig", listOf(".story") to "story", diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt index a70915c87..c315c7bd9 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxDrawList.kt @@ -129,7 +129,7 @@ class VfxDrawList { /** Whether any surface glows, which is what the glow pass is drawn for. */ val glows: Boolean - get() = materials().any { it.glow > 0f } + get() = materials().any { it.effectiveGlow() > 0f } private fun materials(): Sequence = quads.asSequence().map { it.plane.material } + meshes.asSequence().map { it.spec.material } + diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterials.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterials.kt new file mode 100644 index 000000000..81b835cd4 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterials.kt @@ -0,0 +1,161 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.ShaderInstance +import net.minecraft.resources.ResourceLocation +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.client.shadergraph.* +import java.util.* +import java.util.concurrent.atomic.AtomicInteger + +/** + * Kinds of surface an effect draws, each with the vertex layout its programs read and the + * template a material graph is put into for it. + */ +enum class VfxSurface(val format: VertexFormat, internal val template: ShaderGraphTemplate) { + /** Billboards and other planes, one instanced quad per particle. */ + PLANE(DefaultVertexFormat.POSITION_TEX, ShaderGraphTemplates.PARTICLE), + + /** The built-in meshes, instanced. */ + MESH(DefaultVertexFormat.POSITION_TEX, ShaderGraphTemplates.MESH), + + /** Trails and beams, built every frame in the vanilla particle format. */ + RIBBON(DefaultVertexFormat.PARTICLE, ShaderGraphTemplates.RIBBON), +} + +/** + * Materials made in the shader graph editor, as effects use them: a material names one by its + * location, `namespace:materials/fire.material`, where it would name a core shader. + */ +object VfxGraphMaterials { + private class Loaded(val graph: ShaderGraph?, val code: ShaderGraphCode?) { + val programs = EnumMap(VfxSurface::class.java) + } + + private val loaded = HashMap() + + /** Programs are cached by the names of their stages, so every build gets names of its own. */ + private val builds = AtomicInteger() + + fun isGraph(location: String?): Boolean = location?.endsWith(ShaderGraph.EXTENSION) == true + + /** The graph at [location] as the packs have it now, or null when there is none or it does not read. */ + fun read(location: String): ShaderGraph? { + val id = ResourceLocation.tryParse(location) ?: return null + val resource = Minecraft.getInstance().resourceManager.getResource(id).orElse(null) ?: return null + return runCatching { + resource.openAsReader().use { ShaderGraphFormat.read(it.readText()) } + }.onFailure { HollowEngine.LOGGER.warn("Could not read the material {}: {}", location, it.message) }.getOrNull() + } + + /** What an effect gives values to: a uniform per number or vector property, a sampler per texture. */ + fun declaration(graph: ShaderGraph): VfxShaderDeclaration { + val textures = graph.properties.filter { it.type == ShaderType.TEXTURE } + val uniforms = graph.properties.filter { it.type.isVector }.map { property -> + val defaults = FloatArray(property.type.width) { + property.default.getOrElse(it) { + property.default.lastOrNull() ?: 0f + } + } + VfxShaderUniform(property.name, "float", property.type.width, defaults) + } + return VfxShaderDeclaration( + uniforms = uniforms, + samplers = textures.map { it.name }, + drawsGlow = true, + glslNames = graph.properties.associate { it.name to propertyUniform(it.name) }, + samplerDefaults = textures.filter { it.texture.isNotBlank() }.associate { it.name to it.texture }, + ) + } + + /** The program [surface] draws the material at [location] with, or null when it cannot be built. */ + fun program(location: String, surface: VfxSurface): ShaderInstance? { + val entry = loaded(location) + return entry.programs.getOrPut(surface) { + val graph = entry.graph ?: return@getOrPut null + val code = entry.code ?: return@getOrPut null + build(location, graph, code, surface) + } + } + + /** Whether the material links anything into its emission, which glows even with glow of effect left at 0. */ + fun emits(location: String?): Boolean { + if (location == null || !isGraph(location)) return false + return loaded(location).code?.linkedOutputs?.contains(SurfaceOutputs.EMISSION) == true + } + + /** Material at [location] was saved: it is read and built again next time it is drawn. */ + fun changed(location: String) { + loaded.remove(location)?.programs?.values?.forEach { it?.close() } + VfxShaderDeclarations.invalidate(location) + VfxQuadRenderer.invalidate() + VfxMeshRenderer.invalidate() + } + + /** Where an IDE file of a material, `assets//`, is found in the packs. */ + fun locationOf(path: String): String = path.substringAfter("assets/").replaceFirst("/", ":") + + fun clear() { + loaded.values.forEach { entry -> entry.programs.values.forEach { it?.close() } } + loaded.clear() + } + + private fun loaded(location: String): Loaded = loaded.getOrPut(location) { + val graph = read(location) + Loaded(graph, graph?.let(ShaderGraphCompiler::compile)) + } + + private fun build( + location: String, + graph: ShaderGraph, + code: ShaderGraphCode, + surface: VfxSurface, + ): ShaderInstance? { + val sources = ShaderGraphTemplates.surface(code, surface.template) + val name = + "vfx_${location.lowercase().replace(Unsafe, "_")}_${surface.name.lowercase()}_${builds.incrementAndGet()}" + val stage = ShaderGraphPrograms.stage(name) + val json = ShaderGraphPrograms.json( + vertex = stage, + fragment = stage, + attributes = surface.format.elementAttributeNames, + samplers = listOf( + "Sampler0", "Sampler2", "SceneDepth", "SceneColor" + ) + ShaderGraphPrograms.propertySamplers(graph.properties), + uniforms = uniforms(surface) + ShaderGraphPrograms.propertyUniforms(graph.properties), + ) + return ShaderGraphPrograms.create( + name, json, mapOf("vsh" to sources.vertex, "fsh" to sources.fragment), surface.format + ).getOrNull() + } + + /** What the renderer of [surface] sets on its programs, as the engine's own program for it declares. */ + private fun uniforms(surface: VfxSurface): List { + val common = listOf( + ShaderGraphUniform("ModelViewMat", "matrix4x4", Identity), + ShaderGraphUniform("ProjMat", "matrix4x4", Identity), + ShaderGraphUniform("ColorModulator", "float", listOf(1f, 1f, 1f, 1f)), + ShaderGraphUniform("FogStart", "float", listOf(0f)), + ShaderGraphUniform("FogEnd", "float", listOf(1f)), + ShaderGraphUniform("FogShape", "int", listOf(0f)), + ShaderGraphUniform("GameTime", "float", listOf(0f)), + ShaderGraphUniform("ScreenSize", "float", listOf(1f, 1f)), + ShaderGraphUniform("GlowPass", "float", listOf(0f)), + ) + val perDraw = listOf( + ShaderGraphUniform("BlendMode", "float", listOf(0f)), + ShaderGraphUniform("Softness", "float", listOf(0f)), + ShaderGraphUniform("Glow", "float", listOf(0f)), + ) + return common + when (surface) { + VfxSurface.PLANE -> listOf(ShaderGraphUniform("AlphaCutoff", "float", listOf(0.01f))) + VfxSurface.MESH -> perDraw + ShaderGraphUniform("Shaded", "float", listOf(0f)) + VfxSurface.RIBBON -> perDraw + } + } + + private val Identity = listOf(1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f) + private val Unsafe = Regex("[^a-z0-9_]") +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt index b302811c2..8fce12591 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxMeshRenderer.kt @@ -2,7 +2,6 @@ package ru.hollowhorizon.hollowengine.client.vfx.render import com.mojang.blaze3d.platform.GlStateManager import com.mojang.blaze3d.systems.RenderSystem -import com.mojang.blaze3d.vertex.DefaultVertexFormat import com.mojang.blaze3d.vertex.VertexFormat import net.minecraft.client.Minecraft import net.minecraft.client.renderer.ShaderInstance @@ -199,9 +198,9 @@ object VfxMeshRenderer { GL33.glDepthFunc(GL33.GL_LEQUAL) order.forEach { batch -> val shader = if (glow) { - VfxMaterialStates.glowShader(batch.key.shader, engine, DefaultVertexFormat.POSITION_TEX) ?: return@forEach + VfxMaterialStates.glowShader(batch.key.shader, engine, VfxSurface.MESH) ?: return@forEach } else { - batch.key.shader?.let { VfxShaders.get(it, DefaultVertexFormat.POSITION_TEX) } ?: engine + batch.key.shader?.let { VfxShaders.surface(it, VfxSurface.MESH) } ?: engine } val mesh = gpuMesh(batch.primitive) shader.setDefaultUniforms( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt index 9eadcb9ac..ee1889c96 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadPacker.kt @@ -56,7 +56,7 @@ internal data class VfxBatchKey( companion object { fun of(material: VfxMaterialSpec, mixed: Boolean, owner: Any?): VfxBatchKey { val custom = material.shader != null - val perParticle = mixed && !custom + val perParticle = mixed && (!custom || VfxGraphMaterials.isGraph(material.shader)) return VfxBatchKey( texture = material.texture, blend = VfxBatchBlend.of(material.blend, perParticle), @@ -66,7 +66,7 @@ internal data class VfxBatchKey( shader = material.shader, owner = if (custom) owner else null, softness = if (perParticle) 0f else material.softness, - glow = if (perParticle) 0f else material.glow, + glow = if (perParticle) 0f else material.effectiveGlow(), ) } } @@ -88,7 +88,7 @@ internal class VfxQuadBatch(val key: VfxBatchKey) { val uniforms: VfxUniformValues? get() = draws.firstOrNull()?.uniforms /** Whether anything in the batch glows, which is what draws it again in the glow pass. */ - val glows: Boolean get() = draws.any { it.plane.material.glow > 0f } + val glows: Boolean get() = draws.any { it.plane.material.effectiveGlow() > 0f } } /** @@ -145,8 +145,9 @@ internal class VfxQuadPacker { var depthSum = 0f batch.draws.forEach { draw -> + val glow = draw.plane.material.effectiveGlow() for (slot in 0 until draw.batch.particles.count) { - write(target, offset, draw, slot, view) + write(target, offset, draw, slot, glow, view) if (sorted) { val index = offset / STRIDE val depth = distanceSquared(target, offset, view) @@ -183,7 +184,7 @@ internal class VfxQuadPacker { return dx * dx + dy * dy + dz * dz } - private fun write(out: FloatArray, base: Int, draw: VfxQuadDraw, slot: Int, view: VfxView) { + private fun write(out: FloatArray, base: Int, draw: VfxQuadDraw, slot: Int, glow: Float, view: VfxView) { val plane = draw.plane val batch = draw.batch val particles = batch.particles @@ -248,7 +249,7 @@ internal class VfxQuadPacker { out[base + 18] = (light shr 16 and 0xFFFF).toFloat() out[base + 19] = blendMode(plane.material.blend) out[base + 20] = plane.material.softness - out[base + 21] = plane.material.glow + out[base + 21] = glow } private fun ensureCapacity(count: Int) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt index 316a5abb6..b4f097a68 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxQuadRenderer.kt @@ -63,7 +63,7 @@ object VfxQuadRenderer { withInstanceState(upload = 0) { GL33.glDepthFunc(GL33.GL_LEQUAL) glowing.forEach { batch -> - val shader = VfxMaterialStates.glowShader(batch.key.shader, engine, DefaultVertexFormat.POSITION_TEX) + val shader = VfxMaterialStates.glowShader(batch.key.shader, engine, VfxSurface.PLANE) ?: return@forEach drawBatch(shader, engine, batch, view, glow = true) } @@ -80,7 +80,7 @@ object VfxQuadRenderer { GL33.glDepthFunc(GL33.GL_LEQUAL) packer.batches.forEach { batch -> - val shader = batch.key.shader?.let { VfxShaders.get(it, DefaultVertexFormat.POSITION_TEX) } ?: engine + val shader = batch.key.shader?.let { VfxShaders.surface(it, VfxSurface.PLANE) } ?: engine drawBatch(shader, engine, batch, view, glow = false) } } @@ -98,7 +98,7 @@ object VfxQuadRenderer { if (glow) { VfxMaterialStates.applyGlow(batch.key) } else { - VfxMaterialStates.apply(batch.key, premultiplied = shader === engine) + VfxMaterialStates.apply(batch.key, premultiplied = shader === engine || VfxGraphMaterials.isGraph(batch.key.shader)) } drawInstances(shader, batch) shader.clear() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt index 2a2cc4a68..093429e9e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRenderSupport.kt @@ -15,6 +15,7 @@ import org.lwjgl.opengl.GL33 import ru.hollowhorizon.hollowengine.HollowEngine import ru.hollowhorizon.hollowengine.client.models.internal.manager.HollowModelManager import ru.hollowhorizon.hollowengine.common.utils.rl +import ru.hollowhorizon.hollowengine.common.vfx.VfxMaterialSpec /** * The blend, depth and culling state a batch of surfaces is drawn with. @@ -41,10 +42,10 @@ internal object VfxMaterialStates { * The program a surface draws its glow with: the engine's, or a shader of the author that * declares `GlowPass` and so knows what to write in it; null when there is none. */ - fun glowShader(custom: String?, engine: ShaderInstance, format: VertexFormat): ShaderInstance? { + fun glowShader(custom: String?, engine: ShaderInstance, surface: VfxSurface): ShaderInstance? { custom ?: return engine if (VfxShaderDeclarations.of(custom)?.drawsGlow != true) return null - return VfxShaders.get(custom, format) + return VfxShaders.surface(custom, surface) } fun restore() { @@ -98,6 +99,16 @@ internal object VfxMaterialStates { } } +/** + * How much a material glows: what the effect set, or once for a material graph that has an emission + * when the effect set nothing, since the emission is there to glow. + */ +internal fun VfxMaterialSpec.effectiveGlow(): Float = when { + glow > 0f -> glow + VfxGraphMaterials.emits(shader) -> 1f + else -> 0f +} + /** * The core shaders effects name in their materials and post effects, loaded on first use. */ @@ -108,10 +119,15 @@ object VfxShaders { load(location, format) } + /** What [surface] draws with when its material names [location]: a core shader, or a material graph. */ + fun surface(location: String, surface: VfxSurface): ShaderInstance? = + if (VfxGraphMaterials.isGraph(location)) VfxGraphMaterials.program(location, surface) else get(location, surface.format) + /** Resource packs changed: every shader is read again the next time it is drawn. */ fun clear() { loaded.values.filterNotNull().forEach(ShaderInstance::close) loaded.clear() + VfxGraphMaterials.clear() VfxShaderDeclarations.clear() VfxQuadRenderer.invalidate() VfxMeshRenderer.invalidate() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt index bc4149e2d..9bf212a7a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxRibbonRenderer.kt @@ -32,11 +32,12 @@ object VfxRibbonRenderer { ordered.forEach { draw -> val material = draw.material - if (glow && material.glow <= 0f) return@forEach + val glowAmount = material.effectiveGlow() + if (glow && glowAmount <= 0f) return@forEach val shader = if (glow) { - VfxMaterialStates.glowShader(material.shader, engine, DefaultVertexFormat.PARTICLE) ?: return@forEach + VfxMaterialStates.glowShader(material.shader, engine, VfxSurface.RIBBON) ?: return@forEach } else { - material.shader?.let { VfxShaders.get(it, DefaultVertexFormat.PARTICLE) } ?: engine + material.shader?.let { VfxShaders.surface(it, VfxSurface.RIBBON) } ?: engine } val texture = VfxMaterialStates.texture(material.texture) @@ -57,7 +58,7 @@ object VfxRibbonRenderer { VfxMaterialStates.bindCommonSamplers(bound, texture) bound.safeGetUniform("BlendMode").set(VfxQuadPacker.blendMode(material.blend)) bound.safeGetUniform("Softness").set(material.softness) - bound.safeGetUniform("Glow").set(material.glow) + bound.safeGetUniform("Glow").set(glowAmount) bound.safeGetUniform("GlowPass").set(if (glow) 1f else 0f) if (bound !== engine) draw.uniforms?.apply(bound) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt index cae8efe29..8c4dabde0 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxShaderDeclarations.kt @@ -38,9 +38,16 @@ class VfxShaderDeclaration( val samplers: List, /** Whether the shader declares `GlowPass`, and so draws the glow of its surface itself. */ val drawsGlow: Boolean = false, + /** What a uniform or sampler is called in the GLSL, where that is not its own name. */ + private val glslNames: Map = emptyMap(), + /** The texture a sampler shows until the effect names one. */ + val samplerDefaults: Map = emptyMap(), ) { fun uniform(name: String): VfxShaderUniform? = uniforms.firstOrNull { it.name == name } + /** What [name] is called in the GLSL: a material graph names its properties `p_` there. */ + fun glslName(name: String): String = glslNames[name] ?: name + /** * The uniforms of [authored] brought in line with this shader: one per declared uniform, the * authored value where it has the right shape and the json default everywhere else. @@ -81,9 +88,9 @@ class VfxShaderDeclaration( } /** - * The declarations of the shaders effects name, read from their json once. The editor lays out its - * fields from them, and a draw resets what it does not set to the json defaults, so one node never - * inherits the uniforms another node left in the same shader. + * The declarations of the shaders effects name, read from their json once, or for a material graph + * from its properties. The editor lays out its fields from them, and a draw resets what it does not set + * to the defaults, so one node never inherits the uniforms another node left in the same shader. */ object VfxShaderDeclarations { private val read = HashMap() @@ -95,7 +102,14 @@ object VfxShaderDeclarations { @Synchronized fun clear() = read.clear() + /** Forgets [location], which changed, so it is read again. */ + @Synchronized + fun invalidate(location: String) { + read.remove(location) + } + private fun load(location: String): VfxShaderDeclaration? { + if (VfxGraphMaterials.isGraph(location)) return VfxGraphMaterials.read(location)?.let(VfxGraphMaterials::declaration) val id = ResourceLocation.tryParse(location) ?: return null val file = ResourceLocation.fromNamespaceAndPath(id.namespace, "shaders/core/${id.path}.json") val resource = Minecraft.getInstance().resourceManager.getResource(file).orElse(null) ?: return null diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt index a71675df3..bc318cd24 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/vfx/render/VfxUniforms.kt @@ -28,16 +28,18 @@ class VfxUniformValues( ) { /** * Sets every uniform the shader declares for the author: to what this draw evaluated, or to the - * json default, since the shader still holds whatever the previous draw with it left there. + * default, since the shader still holds whatever the previous draw with it left there. A sampler + * the effect names no texture for shows the default texture of its declaration, if it has one. */ fun apply(program: ShaderInstance) { val declaration = VfxShaderDeclarations.of(shader) declaration?.uniforms?.forEach { uniform -> val index = names.indexOf(uniform.name) + val glsl = declaration.glslName(uniform.name) if (index >= 0) { - set(program, uniform.name, uniform.isInt, index * 4, values) + set(program, glsl, uniform.isInt, index * 4, values) } else { - set(program, uniform.name, uniform.isInt, 0, uniform.defaults.copyOf(4)) + set(program, glsl, uniform.isInt, 0, uniform.defaults.copyOf(4)) } } names.forEachIndexed { index, name -> @@ -45,9 +47,10 @@ class VfxUniformValues( } val textures = Minecraft.getInstance().textureManager - samplers.forEach { sampler -> - if (sampler.name.isBlank() || sampler.texture.isBlank()) return@forEach - program.setSampler(sampler.name, textures.getTexture(sampler.texture.rl).id) + val named = samplers.filter { it.name.isNotBlank() && it.texture.isNotBlank() }.associate { it.name to it.texture } + (declaration?.samplerDefaults.orEmpty() + named).forEach { (name, texture) -> + if (texture.isBlank()) return@forEach + program.setSampler(declaration?.glslName(name) ?: name, textures.getTexture(texture.rl).id) } } diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json b/runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json new file mode 100644 index 000000000..4317e85a8 --- /dev/null +++ b/runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json @@ -0,0 +1,122 @@ +{ + "graph": "Material", + "category.input": "Input", + "category.math": "Math", + "category.vector": "Vector", + "category.uv": "UV", + "category.texture": "Texture", + "category.procedural": "Procedural", + "preview": "Preview", + "show_preview": "Show preview", + "preview_mesh": "Shown on", + "preview_rotate": "Turn the mesh", + "preview_texture": "Main texture in previews", + "mesh.quad": "Quad", + "mesh.sphere": "Sphere", + "mesh.cube": "Cube", + "pick_property": "Pick…", + "option.property": "Property", + "option.mask": "Mask", + "option.flip_x": "Flip horizontally", + "option.flip_y": "Flip vertically", + "option.expression": "Expression", + "option.type": "Type", + "option.type.auto": "From the expression", + "option.shape": "Shape", + "option.shape.ellipse": "Ellipse", + "option.shape.rectangle": "Rectangle", + "option.shape.polygon": "Polygon", + "option.shape.ring": "Ring", + "expression.empty": "The expression is empty", + "expression.unexpected_character": "This character is not allowed here", + "expression.unexpected_token": "Unexpected", + "expression.expected_value": "A value was expected", + "expression.unclosed": "A parenthesis is not closed", + "expression.unknown_function": "No such function", + "expression.reserved_name": "This name is taken by GLSL or the engine", + "duplicate": "Duplicate", + "delete_node": "Delete node", + "delete_link": "Delete link", + "inputs": "Inputs", + "options": "Options", + "property": "Property", + "no_properties": "The graph has no properties yet: add one with nothing selected.", + "properties": "Properties", + "add_property": "Add property", + "remove_property": "Remove property", + "texture": "Texture", + "problems": "Problems", + "no_problems": "The graph compiles.", + "problem.unknown_node": "Unknown node", + "problem.unknown_pin": "Unknown pin", + "problem.no_output_node": "The graph has no output node", + "problem.second_output_node": "Only the first output node is used", + "problem.cycle": "The node is on a loop and is left out", + "problem.type_mismatch": "This link cannot carry that type", + "problem.unresolved_type": "The type of this output is unknown; pick a property", + "problem.fragment_only_in_vertex": "Only works per pixel, but the vertex offset needs it", + "problem.unavailable_input": "Not available here", + "problem.invalid_expression": "The expression is wrong", + "problem.glsl_error": "The shader did not compile", + "node.input.uv": "UV", + "node.input.texture_uv": "Texture UV", + "node.input.position": "Position", + "node.input.object_position": "Local Position", + "node.input.normal": "Normal", + "node.input.view_direction": "View Direction", + "node.input.screen_uv": "Screen UV", + "node.input.vertex_color": "Particle Color", + "node.input.time": "Time", + "node.input.scene_depth": "Scene Depth", + "node.input.scene_color": "Scene Color", + "node.input.main_texture": "Main Texture", + "node.input.property": "Property", + "node.input.float": "Float", + "node.input.vector2": "Vector 2", + "node.input.vector3": "Vector 3", + "node.input.vector4": "Vector 4", + "node.input.color": "Color", + "node.math.add": "Add", + "node.math.subtract": "Subtract", + "node.math.multiply": "Multiply", + "node.math.divide": "Divide", + "node.math.power": "Power", + "node.math.minimum": "Minimum", + "node.math.maximum": "Maximum", + "node.math.one_minus": "One Minus", + "node.math.negate": "Negate", + "node.math.absolute": "Absolute", + "node.math.fraction": "Fraction", + "node.math.floor": "Floor", + "node.math.sine": "Sine", + "node.math.cosine": "Cosine", + "node.math.square_root": "Square Root", + "node.math.saturate": "Saturate", + "node.math.clamp": "Clamp", + "node.math.lerp": "Lerp", + "node.math.step": "Step", + "node.math.smoothstep": "Smoothstep", + "node.math.remap": "Remap", + "node.math.modulo": "Modulo", + "node.math.expression": "Expression", + "node.vector.length": "Length", + "node.vector.normalize": "Normalize", + "node.vector.dot": "Dot Product", + "node.vector.distance": "Distance", + "node.vector.cross": "Cross Product", + "node.vector.split": "Split", + "node.vector.combine": "Combine", + "node.vector.swizzle": "Swizzle", + "node.uv.tiling_offset": "Tiling and Offset", + "node.uv.rotate": "Rotate", + "node.uv.polar": "Polar Coordinates", + "node.uv.scroll": "Scroll", + "node.texture.sample": "Sample Texture", + "node.procedural.value_noise": "Value Noise", + "node.procedural.gradient_noise": "Gradient Noise", + "node.procedural.fbm": "Fractal Noise", + "node.procedural.voronoi": "Voronoi", + "node.procedural.shape": "Shape", + "node.procedural.fresnel": "Fresnel", + "node.output.surface": "Surface Output" +} diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json index 380d7aa12..ebd284684 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/vfx.json @@ -175,9 +175,10 @@ "uv_scroll_hint": "Texture lengths per second the texture slides from start to end.", "shader": "Core shader", - "shader_plane_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight, InstanceBlend, InstanceMaterial (soft edge, glow). Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. #moj_import gives hollowengine_soft_fade.", - "shader_mesh_hint": "namespace:path of shaders/core/path.json. Attributes: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. Uniforms Softness and Glow hold the material values; #moj_import gives hollowengine_soft_fade.", - "shader_ribbon_hint": "namespace:path of shaders/core/path.json. The vanilla particle format: Position, UV0, Color, UV2. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. Uniforms Softness and Glow hold the material values; #moj_import gives hollowengine_soft_fade.", + "surface_shader": "Material or shader", + "shader_plane_hint": "A material from the graph editor, namespace:materials/name.material, whose properties show up below; or a core shader, namespace:path of shaders/core/path.json. Attributes: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight, InstanceBlend, InstanceMaterial (soft edge, glow). Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. #moj_import gives hollowengine_soft_fade.", + "shader_mesh_hint": "A material from the graph editor, namespace:materials/name.material, whose properties show up below; or a core shader, namespace:path of shaders/core/path.json. Attributes: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. Uniforms Softness and Glow hold the material values; #moj_import gives hollowengine_soft_fade.", + "shader_ribbon_hint": "A material from the graph editor, namespace:materials/name.material, whose properties show up below; or a core shader, namespace:path of shaders/core/path.json. The vanilla particle format: Position, UV0, Color, UV2. Samplers: Sampler0, Sampler2, SceneColor, SceneDepth. Uniforms Softness and Glow hold the material values; #moj_import gives hollowengine_soft_fade.", "shader_sky_hint": "namespace:path of shaders/core/path.json, drawn on the far plane: only the sky shows it, everything in front stays over it. Vertex shader hollowengine:vfx/sky/sky hands the fragment skyDirection, the view ray. The engine sets SkyCenter (direction to this node), NodeOffset (this node relative to the camera, in blocks) and EffectTime (seconds).", "shader_post_hint": "namespace:path of shaders/core/path.json, drawn over the whole screen. Attributes: Position, UV0. Samplers: SceneColor, SceneDepth. ScreenSize is the size of the frame.", "shader_missing": "No such shader: the json is looked for in assets/namespace/shaders/core/path.json.", diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json new file mode 100644 index 000000000..fd0aa9189 --- /dev/null +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json @@ -0,0 +1,122 @@ +{ + "graph": "Материал", + "category.input": "Входы", + "category.math": "Математика", + "category.vector": "Векторы", + "category.uv": "UV", + "category.texture": "Текстуры", + "category.procedural": "Процедурные", + "preview": "Превью", + "show_preview": "Показывать превью", + "preview_mesh": "Показывать на", + "preview_rotate": "Вращать меш", + "preview_texture": "Основная текстура в превью", + "mesh.quad": "Квад", + "mesh.sphere": "Сфера", + "mesh.cube": "Куб", + "pick_property": "Выбрать…", + "option.property": "Свойство", + "option.mask": "Маска", + "option.flip_x": "Отразить по горизонтали", + "option.flip_y": "Отразить по вертикали", + "option.expression": "Выражение", + "option.type": "Тип", + "option.type.auto": "По выражению", + "option.shape": "Фигура", + "option.shape.ellipse": "Эллипс", + "option.shape.rectangle": "Прямоугольник", + "option.shape.polygon": "Многоугольник", + "option.shape.ring": "Кольцо", + "expression.empty": "Выражение пустое", + "expression.unexpected_character": "Здесь недопустим символ", + "expression.unexpected_token": "Не ожидалось", + "expression.expected_value": "Ожидалось значение", + "expression.unclosed": "Не закрыта скобка", + "expression.unknown_function": "Нет такой функции", + "expression.reserved_name": "Это имя занято GLSL или движком", + "duplicate": "Дублировать", + "delete_node": "Удалить узел", + "delete_link": "Удалить связь", + "inputs": "Входы", + "options": "Параметры", + "property": "Свойство", + "no_properties": "У графа пока нет свойств: добавьте их, сняв выделение.", + "properties": "Свойства", + "add_property": "Добавить свойство", + "remove_property": "Удалить свойство", + "texture": "Текстура", + "problems": "Проблемы", + "no_problems": "Граф компилируется.", + "problem.unknown_node": "Неизвестный узел", + "problem.unknown_pin": "Неизвестный пин", + "problem.no_output_node": "У графа нет выходного узла", + "problem.second_output_node": "Используется только первый выходной узел", + "problem.cycle": "Узел стоит в цикле и пропущен", + "problem.type_mismatch": "Эта связь не может передать такой тип", + "problem.unresolved_type": "Тип выхода неизвестен: выберите свойство", + "problem.fragment_only_in_vertex": "Работает только попиксельно, а нужен смещению вершин", + "problem.unavailable_input": "Здесь недоступно", + "problem.invalid_expression": "Ошибка в выражении", + "problem.glsl_error": "Шейдер не скомпилировался", + "node.input.uv": "UV", + "node.input.texture_uv": "UV текстуры", + "node.input.position": "Позиция", + "node.input.object_position": "Позиция в объекте", + "node.input.normal": "Нормаль", + "node.input.view_direction": "Направление взгляда", + "node.input.screen_uv": "UV экрана", + "node.input.vertex_color": "Цвет партикла", + "node.input.time": "Время", + "node.input.scene_depth": "Глубина сцены", + "node.input.scene_color": "Цвет сцены", + "node.input.main_texture": "Основная текстура", + "node.input.property": "Свойство", + "node.input.float": "Число", + "node.input.vector2": "Вектор 2", + "node.input.vector3": "Вектор 3", + "node.input.vector4": "Вектор 4", + "node.input.color": "Цвет", + "node.math.add": "Сложить", + "node.math.subtract": "Вычесть", + "node.math.multiply": "Умножить", + "node.math.divide": "Разделить", + "node.math.power": "Степень", + "node.math.minimum": "Минимум", + "node.math.maximum": "Максимум", + "node.math.one_minus": "Один минус", + "node.math.negate": "Отрицание", + "node.math.absolute": "Модуль", + "node.math.fraction": "Дробная часть", + "node.math.floor": "Округление вниз", + "node.math.sine": "Синус", + "node.math.cosine": "Косинус", + "node.math.square_root": "Квадратный корень", + "node.math.saturate": "Ограничить 0–1", + "node.math.clamp": "Ограничить", + "node.math.lerp": "Интерполяция", + "node.math.step": "Порог", + "node.math.smoothstep": "Плавный порог", + "node.math.remap": "Перевод диапазона", + "node.math.modulo": "Остаток", + "node.math.expression": "Выражение", + "node.vector.length": "Длина", + "node.vector.normalize": "Нормализовать", + "node.vector.dot": "Скалярное произведение", + "node.vector.distance": "Расстояние", + "node.vector.cross": "Векторное произведение", + "node.vector.split": "Разбить", + "node.vector.combine": "Собрать", + "node.vector.swizzle": "Перестановка", + "node.uv.tiling_offset": "Повтор и сдвиг", + "node.uv.rotate": "Поворот", + "node.uv.polar": "Полярные координаты", + "node.uv.scroll": "Прокрутка", + "node.texture.sample": "Выборка текстуры", + "node.procedural.value_noise": "Шум значений", + "node.procedural.gradient_noise": "Градиентный шум", + "node.procedural.fbm": "Фрактальный шум", + "node.procedural.voronoi": "Вороной", + "node.procedural.shape": "Фигура", + "node.procedural.fresnel": "Френель", + "node.output.surface": "Выход поверхности" +} diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json index a8222e158..27ac5b191 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/vfx.json @@ -175,9 +175,10 @@ "uv_scroll_hint": "Сколько длин текстуры в секунду она проезжает от начала к концу.", "shader": "Core-шейдер", - "shader_plane_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight, InstanceBlend, InstanceMaterial (мягкий край, свечение). Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. #moj_import даёт hollowengine_soft_fade.", - "shader_mesh_hint": "namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. Uniform'ы Softness и Glow хранят значения материала; #moj_import даёт hollowengine_soft_fade.", - "shader_ribbon_hint": "namespace:path для shaders/core/path.json. Ванильный формат партиклов: Position, UV0, Color, UV2. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. Uniform'ы Softness и Glow хранят значения материала; #moj_import даёт hollowengine_soft_fade.", + "surface_shader": "Материал или шейдер", + "shader_plane_hint": "Материал из редактора графов, namespace:materials/имя.material, его свойства появятся ниже; или core-шейдер, namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, InstanceCenter, InstanceRight, InstanceUp, InstanceColor, InstanceUv, InstanceLight, InstanceBlend, InstanceMaterial (мягкий край, свечение). Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. #moj_import даёт hollowengine_soft_fade.", + "shader_mesh_hint": "Материал из редактора графов, namespace:materials/имя.material, его свойства появятся ниже; или core-шейдер, namespace:path для shaders/core/path.json. Атрибуты: Position, UV0, Normal, InstanceX, InstanceY, InstanceZ, InstanceOrigin, InstanceColor, InstanceUv, InstanceLight. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. Uniform'ы Softness и Glow хранят значения материала; #moj_import даёт hollowengine_soft_fade.", + "shader_ribbon_hint": "Материал из редактора графов, namespace:materials/имя.material, его свойства появятся ниже; или core-шейдер, namespace:path для shaders/core/path.json. Ванильный формат партиклов: Position, UV0, Color, UV2. Сэмплеры: Sampler0, Sampler2, SceneColor, SceneDepth. Uniform'ы Softness и Glow хранят значения материала; #moj_import даёт hollowengine_soft_fade.", "shader_sky_hint": "namespace:path для shaders/core/path.json, рисуется на дальней плоскости: виден только на небе, всё, что ближе, остаётся поверх. Вершинный шейдер hollowengine:vfx/sky/sky передаёт фрагменту skyDirection - луч взгляда. Движок задаёт SkyCenter (направление на этот узел), NodeOffset (узел относительно камеры, в блоках) и EffectTime (секунды).", "shader_post_hint": "namespace:path для shaders/core/path.json, рисуется на весь экран. Атрибуты: Position, UV0. Сэмплеры: SceneColor, SceneDepth. ScreenSize — размер кадра.", "shader_missing": "Такого шейдера нет: json ищется в assets/namespace/shaders/core/path.json.", diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/mesh.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/mesh.vsh new file mode 100644 index 000000000..c0c3510c9 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/mesh.vsh @@ -0,0 +1,81 @@ +#version 150 + +// The vertex half of a graph drawn on the built-in meshes: the instance attributes of the engine's +// mesh program, the engine inputs a graph reads, then the graph's vertex code. + +in vec3 Position; +in vec2 UV0; +in vec3 Normal; + +in vec3 InstanceX; +in vec3 InstanceY; +in vec3 InstanceZ; +in vec3 InstanceOrigin; +in vec4 InstanceColor; +in vec4 InstanceUv; +in vec2 InstanceLight; + +uniform sampler2D Sampler0; +uniform sampler2D Sampler2; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform int FogShape; +uniform float Shaded; +uniform float GameTime; +//#uniforms + +out vec4 vertexColor; +out vec2 texCoord0; +out vec2 localUv; +out vec3 worldPosition; +out vec3 faceNormal; +out vec3 objectPosition; +out float vertexDistance; +flat out vec3 eyePosition; +flat out vec4 frameWindow; + +vec2 sg_frame_uv(vec2 uv) { + return InstanceUv.xy + uv * InstanceUv.zw; +} + +//#functions + +float view_fog_distance(vec3 viewPos, int fogShape) { + if (fogShape == 0) { + return length(viewPos); + } + return max(length(viewPos.xz), abs(viewPos.y)); +} + +void main() { + vec3 eye = (inverse(ModelViewMat) * vec4(0.0, 0.0, 0.0, 1.0)).xyz; + mat3 basis = mat3(InstanceX, InstanceY, InstanceZ); + vec3 sg_position = InstanceOrigin + basis * Position; + // The built-in meshes span -0.5 to 0.5; the graph sees -1 to 1, as on a particle and in the previews. + vec3 sg_object_position = Position * 2.0; + vec3 sg_normal = normalize(basis * Normal); + vec2 sg_uv = UV0; + vec2 sg_texture_uv = sg_frame_uv(UV0); + float shade = mix(1.0, 0.72 + 0.28 * (sg_normal.y * 0.5 + 0.5), Shaded); + vec4 light = texelFetch(Sampler2, ivec2(InstanceLight) / 16, 0); + vec4 sg_color = InstanceColor * vec4(light.rgb * shade, light.a); + float sg_time = GameTime * 1200.0; + vec3 sg_view_direction = normalize(eye - sg_position); + vec3 sg_out_vertex_offset = vec3(0.0); + + //#vertex + + vec3 position = sg_position + sg_out_vertex_offset; + vec4 viewPos = ModelViewMat * vec4(position, 1.0); + gl_Position = ProjMat * viewPos; + vertexDistance = view_fog_distance(viewPos.xyz, FogShape); + vertexColor = sg_color; + texCoord0 = sg_texture_uv; + localUv = UV0; + worldPosition = position; + faceNormal = sg_normal; + objectPosition = sg_object_position; + eyePosition = eye; + frameWindow = InstanceUv; +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.fsh new file mode 100644 index 000000000..2afb9a25e --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.fsh @@ -0,0 +1,98 @@ +#version 150 + +// The fragment half of a graph drawn on particle quads. After the graph has said what the surface +// is, this is the engine's particle program: blend modes, fog, the soft edge and the glow pass. + +#moj_import +#moj_import + +uniform sampler2D Sampler0; +uniform sampler2D SceneDepth; +uniform sampler2D SceneColor; + +uniform mat4 ProjMat; +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform float AlphaCutoff; +uniform vec2 ScreenSize; +uniform float GlowPass; +uniform float GameTime; +//#uniforms + +in vec4 vertexColor; +in vec2 texCoord0; +in vec2 localUv; +in vec3 worldPosition; +in vec3 faceNormal; +in float vertexDistance; +flat in vec3 eyePosition; +flat in int blendMode; +// Softness in blocks, then glow. +flat in vec2 material; +// Where the flipbook frame of this particle sits in the texture: corner, then size. +flat in vec4 frameWindow; + +out vec4 fragColor; + +float sg_scene_depth() { + return hollowengine_view_depth(ProjMat, texture(SceneDepth, gl_FragCoord.xy / ScreenSize).r); +} + +float sg_fragment_depth() { + return hollowengine_view_depth(ProjMat, gl_FragCoord.z); +} + +vec3 sg_scene_color(vec2 uv) { + return texture(SceneColor, uv).rgb; +} + +vec2 sg_frame_uv(vec2 uv) { + return frameWindow.xy + uv * frameWindow.zw; +} + +//#functions + +void main() { + vec2 sg_uv = localUv; + vec3 sg_object_position = vec3(sg_uv * 2.0 - 1.0, 0.0); + vec2 sg_texture_uv = texCoord0; + vec4 sg_color = vertexColor * ColorModulator; + float sg_time = GameTime * 1200.0; + vec3 sg_position = worldPosition; + vec3 sg_normal = normalize(faceNormal); + vec3 sg_view_direction = normalize(eyePosition - worldPosition); + vec2 sg_screen_uv = gl_FragCoord.xy / ScreenSize; + + vec3 sg_out_color = vec3(1.0); + float sg_out_alpha = 1.0; + vec3 sg_out_emission = vec3(0.0); + float sg_out_alpha_clip = 0.0; + bool sg_has_emission = false; + + //#fragment + + vec4 color = vec4(sg_out_color, sg_out_alpha); + if (color.a < sg_out_alpha_clip) discard; + if (blendMode == 2) { + if (color.a < 0.5) discard; + color.a = 1.0; + } else if (color.a < AlphaCutoff) { + discard; + } + + float strength = color.a * linear_fog_fade(vertexDistance, FogStart, FogEnd) + * hollowengine_soft_fade(SceneDepth, ScreenSize, ProjMat, material.x); + + if (GlowPass > 0.5) { + if (blendMode == 3 || material.y <= 0.0) discard; + vec3 glow = sg_has_emission ? sg_out_emission : color.rgb; + fragColor = vec4(glow * strength * material.y, 0.0); + } else if (blendMode == 3) { + fragColor = vec4(mix(vec3(1.0), color.rgb, strength), 1.0); + } else if (blendMode == 1) { + fragColor = vec4(color.rgb * strength, 0.0); + } else { + fragColor = vec4(color.rgb * strength, strength); + } +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.vsh new file mode 100644 index 000000000..26518a1d6 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/particle.vsh @@ -0,0 +1,78 @@ +#version 150 + +// The vertex half of a graph drawn on particle quads: the instance attributes of the engine's +// particle program, the engine inputs a graph reads, then the graph's vertex code. + +in vec3 Position; +in vec2 UV0; + +in vec3 InstanceCenter; +in vec3 InstanceRight; +in vec3 InstanceUp; +in vec4 InstanceColor; +in vec4 InstanceUv; +in vec2 InstanceLight; +in float InstanceBlend; +in vec2 InstanceMaterial; + +uniform sampler2D Sampler0; +uniform sampler2D Sampler2; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform int FogShape; +uniform float GameTime; +//#uniforms + +out vec4 vertexColor; +out vec2 texCoord0; +out vec2 localUv; +out vec3 worldPosition; +out vec3 faceNormal; +out float vertexDistance; +flat out vec3 eyePosition; +flat out int blendMode; +flat out vec2 material; +flat out vec4 frameWindow; + +vec2 sg_frame_uv(vec2 uv) { + return InstanceUv.xy + uv * InstanceUv.zw; +} + +//#functions + +float view_fog_distance(vec3 viewPos, int fogShape) { + if (fogShape == 0) { + return length(viewPos); + } + return max(length(viewPos.xz), abs(viewPos.y)); +} + +void main() { + vec3 eye = (inverse(ModelViewMat) * vec4(0.0, 0.0, 0.0, 1.0)).xyz; + vec3 sg_position = InstanceCenter + InstanceRight * Position.x + InstanceUp * Position.y; + vec2 sg_uv = UV0; + vec3 sg_object_position = vec3(sg_uv * 2.0 - 1.0, 0.0); + vec2 sg_texture_uv = InstanceUv.xy + UV0 * InstanceUv.zw; + vec4 sg_color = InstanceColor * texelFetch(Sampler2, ivec2(InstanceLight) / 16, 0); + float sg_time = GameTime * 1200.0; + vec3 sg_normal = normalize(cross(InstanceRight, InstanceUp)); + vec3 sg_view_direction = normalize(eye - sg_position); + vec3 sg_out_vertex_offset = vec3(0.0); + + //#vertex + + vec3 position = sg_position + sg_out_vertex_offset; + vec4 viewPos = ModelViewMat * vec4(position, 1.0); + gl_Position = ProjMat * viewPos; + vertexDistance = view_fog_distance(viewPos.xyz, FogShape); + vertexColor = sg_color; + texCoord0 = sg_texture_uv; + localUv = UV0; + worldPosition = position; + faceNormal = sg_normal; + eyePosition = eye; + blendMode = int(InstanceBlend + 0.5); + material = InstanceMaterial; + frameWindow = InstanceUv; +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh new file mode 100644 index 000000000..79ee39fab --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh @@ -0,0 +1,83 @@ +#version 150 + +// Every node of a graph in one program: PreviewNode picks whose value this draw shows. There is no +// scene here, so the functions that read one stand in with something that still shows a change. +// Whatever has alpha is shown over a checkerboard, so what is see-through looks it. + +uniform sampler2D Sampler0; +uniform int PreviewNode; +uniform float PreviewTime; +// 1 on the flat quad, where the view looks straight at the surface. +uniform float PreviewFlat; +// The side of the target, in pixels. +uniform float PreviewPixels; +//#uniforms + +in vec2 texCoord; +in vec3 viewPosition; +in vec3 viewNormal; +in vec3 objectPosition; + +out vec4 fragColor; + +float sg_scene_depth() { + return 8.0; +} + +float sg_fragment_depth() { + return 4.0 + texCoord.y * 4.0; +} + +vec3 sg_scene_color(vec2 uv) { + vec2 cell = floor(uv * 8.0); + return mix(vec3(0.16), vec3(0.3), mod(cell.x + cell.y, 2.0)); +} + +vec2 sg_frame_uv(vec2 uv) { + return uv; +} + +vec3 sg_checker() { + vec2 cell = floor(gl_FragCoord.xy / 8.0); + return mix(vec3(0.17), vec3(0.24), mod(cell.x + cell.y, 2.0)); +} + +vec4 sg_show(float value) { + return vec4(vec3(value), 1.0); +} + +vec4 sg_show(vec2 value) { + return vec4(value, 0.0, 1.0); +} + +vec4 sg_show(vec3 value) { + return vec4(value, 1.0); +} + +vec4 sg_show(vec4 value) { + return vec4(mix(sg_checker(), value.rgb, clamp(value.a, 0.0, 1.0)), 1.0); +} + +// In game emission reaches the frame through the glow pass, blurred; there is no blur here, so it is +// added where the surface is, as much as the surface is there. +vec4 sg_surface(vec3 color, float alpha, vec3 emission, float clip) { + if (alpha < clip) discard; + float coverage = clamp(alpha, 0.0, 1.0); + return vec4(mix(sg_checker(), color, coverage) + emission * coverage, 1.0); +} + +//#functions + +void main() { + vec2 sg_uv = texCoord; + vec2 sg_texture_uv = texCoord; + vec4 sg_color = vec4(1.0); + float sg_time = PreviewTime; + vec3 sg_position = viewPosition; + vec3 sg_object_position = objectPosition; + vec3 sg_normal = normalize(viewNormal); + vec3 sg_view_direction = PreviewFlat > 0.5 ? vec3(0.0, 0.0, 1.0) : normalize(-viewPosition); + vec2 sg_screen_uv = gl_FragCoord.xy / PreviewPixels; + + //#preview +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh new file mode 100644 index 000000000..24e1cab09 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh @@ -0,0 +1,25 @@ +#version 150 + +// The previews of a graph: a flat quad over the whole target, or a mesh seen by a small camera. The +// graph's vertex code is not run here; the previews show what each node computes per pixel. + +in vec3 Position; +in vec2 UV0; +in vec3 Normal; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; + +out vec2 texCoord; +out vec3 viewPosition; +out vec3 viewNormal; +out vec3 objectPosition; + +void main() { + vec4 viewPos = ModelViewMat * vec4(Position, 1.0); + gl_Position = ProjMat * viewPos; + texCoord = UV0; + viewPosition = viewPos.xyz; + viewNormal = mat3(ModelViewMat) * Normal; + objectPosition = Position; +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/ribbon.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/ribbon.vsh new file mode 100644 index 000000000..20712b80c --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/ribbon.vsh @@ -0,0 +1,70 @@ +#version 150 + +// The vertex half of a graph drawn on trails and beams: the vanilla particle format the ribbons are +// built in, the engine inputs a graph reads, then the graph's vertex code. A ribbon has no frame of +// its own in the texture and faces the camera, so its normal is the direction toward the eye. + +in vec3 Position; +in vec2 UV0; +in vec4 Color; +in ivec2 UV2; + +uniform sampler2D Sampler0; +uniform sampler2D Sampler2; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform int FogShape; +uniform float GameTime; +//#uniforms + +out vec4 vertexColor; +out vec2 texCoord0; +out vec2 localUv; +out vec3 worldPosition; +out vec3 faceNormal; +out vec3 objectPosition; +out float vertexDistance; +flat out vec3 eyePosition; +flat out vec4 frameWindow; + +vec2 sg_frame_uv(vec2 uv) { + return uv; +} + +//#functions + +float view_fog_distance(vec3 viewPos, int fogShape) { + if (fogShape == 0) { + return length(viewPos); + } + return max(length(viewPos.xz), abs(viewPos.y)); +} + +void main() { + vec3 eye = (inverse(ModelViewMat) * vec4(0.0, 0.0, 0.0, 1.0)).xyz; + vec3 sg_position = Position; + vec2 sg_uv = UV0; + vec2 sg_texture_uv = UV0; + vec3 sg_object_position = vec3(UV0 * 2.0 - 1.0, 0.0); + vec4 sg_color = Color * texelFetch(Sampler2, UV2 / 16, 0); + float sg_time = GameTime * 1200.0; + vec3 sg_view_direction = normalize(eye - sg_position); + vec3 sg_normal = sg_view_direction; + vec3 sg_out_vertex_offset = vec3(0.0); + + //#vertex + + vec3 position = sg_position + sg_out_vertex_offset; + vec4 viewPos = ModelViewMat * vec4(position, 1.0); + gl_Position = ProjMat * viewPos; + vertexDistance = view_fog_distance(viewPos.xyz, FogShape); + vertexColor = sg_color; + texCoord0 = sg_texture_uv; + localUv = UV0; + worldPosition = position; + faceNormal = sg_normal; + objectPosition = sg_object_position; + eyePosition = eye; + frameWindow = vec4(0.0, 0.0, 1.0, 1.0); +} diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/surface.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/surface.fsh new file mode 100644 index 000000000..cbdd6c724 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/surface.fsh @@ -0,0 +1,96 @@ +#version 150 + +// The fragment half of a graph drawn on meshes, trails and beams. After the graph has said what the +// surface is, this is the engine's mesh and ribbon program: one blend mode per draw, straight alpha, +// fog, the soft edge and the glow pass, which the emission feeds when the graph has one. + +#moj_import +#moj_import + +uniform sampler2D Sampler0; +uniform sampler2D SceneDepth; +uniform sampler2D SceneColor; + +uniform mat4 ProjMat; +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform float BlendMode; +uniform float Softness; +uniform float Glow; +uniform float GlowPass; +uniform vec2 ScreenSize; +uniform float GameTime; +//#uniforms + +in vec4 vertexColor; +in vec2 texCoord0; +in vec2 localUv; +in vec3 worldPosition; +in vec3 faceNormal; +in vec3 objectPosition; +in float vertexDistance; +flat in vec3 eyePosition; +// Where the flipbook frame sits in the texture: corner, then size. +flat in vec4 frameWindow; + +out vec4 fragColor; + +float sg_scene_depth() { + return hollowengine_view_depth(ProjMat, texture(SceneDepth, gl_FragCoord.xy / ScreenSize).r); +} + +float sg_fragment_depth() { + return hollowengine_view_depth(ProjMat, gl_FragCoord.z); +} + +vec3 sg_scene_color(vec2 uv) { + return texture(SceneColor, uv).rgb; +} + +vec2 sg_frame_uv(vec2 uv) { + return frameWindow.xy + uv * frameWindow.zw; +} + +//#functions + +void main() { + vec2 sg_uv = localUv; + vec2 sg_texture_uv = texCoord0; + vec3 sg_object_position = objectPosition; + vec4 sg_color = vertexColor * ColorModulator; + float sg_time = GameTime * 1200.0; + vec3 sg_position = worldPosition; + vec3 sg_normal = normalize(faceNormal); + vec3 sg_view_direction = normalize(eyePosition - worldPosition); + vec2 sg_screen_uv = gl_FragCoord.xy / ScreenSize; + + vec3 sg_out_color = vec3(1.0); + float sg_out_alpha = 1.0; + vec3 sg_out_emission = vec3(0.0); + float sg_out_alpha_clip = 0.0; + bool sg_has_emission = false; + + //#fragment + + vec4 color = vec4(sg_out_color, sg_out_alpha); + int mode = int(BlendMode + 0.5); + if (color.a < sg_out_alpha_clip) discard; + if (mode == 2) { + if (color.a < 0.5) discard; + color.a = 1.0; + } else if (color.a < 0.01) { + discard; + } + + color.a *= linear_fog_fade(vertexDistance, FogStart, FogEnd) + * hollowengine_soft_fade(SceneDepth, ScreenSize, ProjMat, Softness); + + if (GlowPass > 0.5) { + if (mode == 3 || Glow <= 0.0) discard; + vec3 glow = sg_has_emission ? sg_out_emission : color.rgb; + fragColor = vec4(glow * color.a * Glow, 0.0); + } else { + fragColor = color; + } +} diff --git a/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/shader.svg b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/shader.svg new file mode 100644 index 000000000..50d332ce2 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/textures/gui/icons/files/shader.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss index 4dc02d2ad..eecfed209 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/graph.hss @@ -47,8 +47,20 @@ } .graph-minimap-mark { + border: 1px alpha($text-strong, 0); border-radius: 2px; cursor: hand; + transition: border-color 150ms ease-out; +} + +.graph-minimap-mark:hover { + border-color: $text-strong; +} + +.graph-marquee { + background: alpha($accent, 0.08); + border: 1px alpha($accent, 0.7); + border-radius: $radius-small; } .graph-link-label { diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss new file mode 100644 index 000000000..47f2e070b --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss @@ -0,0 +1,200 @@ +@import "hollowengine:ui/styles/theme.hss"; + +/* The shader graph editor: nodes with a title bar in the color of their category, pins in the color + of what they carry, filled once something is linked to them, and fields to edit values in place. + The title bar sits 2px inside the frame, so its corners are the frame's less those 2px. */ + +$category-input: #5B8FE0; +$category-math: #7C83F0; +$category-vector: #E0B347; +$category-uv: #4FC48B; +$category-texture: #F07D3A; +$category-procedural: #B072E8; +$category-output: #E5566A; + +.graph-node.sg-node { + background: $bg-panel; + border: 1px $border; + border-radius: $radius-large; + shadow: 0px 3px 10px 0px $shadow; +} + +.graph-node.sg-node:hover { + border-color: $border-strong; +} + +.graph-node.sg-node.selected { + border-color: $accent; + shadow: 0px 0px 5px 0px alpha($accent, 0.22); +} + +.graph-node.sg-node.error { + border-color: $danger; +} + +.sg-node-head { + padding: 0px 6px; + background: alpha($category-math, 0.34); + border-radius: $radius; +} + +.sg-input .sg-node-head { background: alpha($category-input, 0.34); } +.sg-vector .sg-node-head { background: alpha($category-vector, 0.3); } +.sg-uv .sg-node-head { background: alpha($category-uv, 0.3); } +.sg-texture .sg-node-head { background: alpha($category-texture, 0.32); } +.sg-procedural .sg-node-head { background: alpha($category-procedural, 0.34); } +.sg-output .sg-node-head { background: alpha($category-output, 0.36); } + +.sg-node-row { + gap: 4px; +} + +.sg-pin-label { + font-size: $font-size-small; + foreground: $text-soft; + text-wrap: false; + text-overflow: dots; +} + +.sg-pin-label.output { + foreground: $text; +} + +/* What an unlinked input reads instead of a value, such as the UV. */ +.sg-pin-hint { + font-size: $font-size-small; + foreground: $text-faint; + text-wrap: false; +} + +/* The name of a value, which a drag along changes it by. */ +.sg-scrub { + cursor: ew-resize; + transition: foreground 110ms ease-out; +} + +.sg-scrub:hover { + foreground: $text-strong; +} + +.sg-fields { + gap: 2px; +} + +.sg-field { + padding: 1px 3px; + background: $bg-window; + border: 1px $divider; + border-radius: $radius-small; + foreground: $text; + font-family: $font; + font-size: $font-size-small; + caret-color: $caret; + selection-color: $selection; + text-shadow: none; + transition: border 110ms ease-out; +} + +.sg-field:hover { + border-color: $border; +} + +.sg-field:focus { + border-color: $accent; +} + +.sg-expression { + font-size: $font-size; + padding: 2px 4px; +} + +/* What a choice is set to; a press opens its values. */ +.sg-chip { + padding: 2px 5px; + background: $bg-window; + border: 1px $divider; + border-radius: $radius-small; + foreground: $text; + font-size: $font-size-small; + text-wrap: false; + text-overflow: dots; + cursor: hand; + transition: border 110ms ease-out, background 110ms ease-out; +} + +.sg-chip:hover { + background: $bg-hover; + border-color: $border; +} + +.sg-toggle { + gap: 5px; + cursor: hand; +} + +.sg-checkbox { + size: 10px 10px; + checkbox-active: $accent; + checkbox-mark: $white; +} + +.sg-node-preview { + background: $bg-window; + border-radius: $radius-small; +} + +.sg-pin { + background: $bg-panel; + border: 2px $text-muted; + border-radius: 5px; + cursor: hand; + transition: background 150ms ease-out; +} + +.sg-pin:hover { + background: $text-strong; +} + +.sg-pin.sg-type-float { border-color: #9EA8BD; } +.sg-pin.sg-type-vec2 { border-color: #78CC8F; } +.sg-pin.sg-type-vec3 { border-color: #F5D161; } +.sg-pin.sg-type-vec4 { border-color: #E685C7; } +.sg-pin.sg-type-texture { border-color: #F28C59; } + +.sg-pin.connected.sg-type-float { background: #9EA8BD; } +.sg-pin.connected.sg-type-vec2 { background: #78CC8F; } +.sg-pin.connected.sg-type-vec3 { background: #F5D161; } +.sg-pin.connected.sg-type-vec4 { background: #E685C7; } +.sg-pin.connected.sg-type-texture { background: #F28C59; } + +/* A number: dragged sideways it changes, clicked it is typed into. */ +.sg-number { + cursor: ew-resize; + text-wrap: false; + text-overflow: dots; +} + +.sg-swatch { + border: 1px $divider; + border-radius: $radius-small; + cursor: hand; + transition: border 110ms ease-out; +} + +.sg-swatch:hover { + border-color: $border-strong; +} + +.sg-color-popup { + padding: 8px; + background: $bg-raised; + border: 1px $border; + border-radius: $radius; + shadow: 1px 1px 3px 0px $shadow; + font-family: $font; + font-size: $font-size; +} + +.sg-color-popup-body { + gap: 6px; +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt index 479b650e4..64aaef5bb 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/gui/scripting/HollowIdeFileTypeRegistryTest.kt @@ -77,6 +77,7 @@ class HollowIdeFileTypeRegistryTest { animatorEditor = {}, rigEditor = {}, vfxEditor = {}, + shaderGraphEditor = {}, textEditor = {}, ) } @@ -88,6 +89,7 @@ class HollowIdeFileTypeRegistryTest { assertEquals("animator", registry.find("assets/demo/models/player.animator", byteArrayOf())?.id) assertEquals("rig", registry.find("assets/demo/models/player.glb.rig", byteArrayOf())?.id) assertEquals("vfx", registry.find("assets/demo/vfx/flame.vfx", byteArrayOf())?.id) + assertEquals("material", registry.find("assets/demo/materials/fire.material", byteArrayOf())?.id) assertEquals("text", registry.find("assets/demo/other.json", "{}".toByteArray())?.id) assertEquals("text", registry.find("scripts/example.kts", "println(1)".toByteArray())?.id) assertNull(registry.find("unknown.bin", ByteArray(64) { 0 })) diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpressionTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpressionTest.kt new file mode 100644 index 000000000..fdac6634f --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpressionTest.kt @@ -0,0 +1,72 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNotNull +import kotlin.test.assertNull +import kotlin.test.assertTrue + +class ShaderExpressionTest { + @Test + fun `free names become pins, and the text reads them as floats`() { + val expression = ShaderExpression.parse("(sin(x) + 1) / 2 * a.x + PI") + + assertNull(expression.error) + assertEquals(listOf("x", "a"), expression.variables) + assertEquals("(sin((X)) + 1.0) / 2.0 * (A).x + 3.14159265", expression.glsl { it.uppercase() }) + } + + @Test + fun `nothing but an expression gets through`() { + listOf("a; discard", "a = 1", "{ a }", "a // b", "#define a", "a /* b */").forEach { text -> + assertNotNull(ShaderExpression.parse(text).error, text) + } + assertEquals(ShaderExpressionProblem.UNKNOWN_FUNCTION, ShaderExpression.parse("texture(a, b)").error?.problem) + assertEquals(ShaderExpressionProblem.RESERVED_NAME, ShaderExpression.parse("gl_FragCoord.x").error?.problem) + assertEquals(ShaderExpressionProblem.UNCLOSED, ShaderExpression.parse("sin(a").error?.problem) + assertEquals(ShaderExpressionProblem.EXPECTED_VALUE, ShaderExpression.parse("a * ").error?.problem) + // Spaced apart, the two minuses never read as a decrement. + assertFalse("--" in ShaderExpression.parse("a - -b").glsl { "1.0" }.orEmpty()) + } + + @Test + fun `an expression node has a pin per name, and a pin named like an engine input reads it`() { + val node = ShaderGraphNode("e", ShaderNodeLibrary.EXPRESSION, options = mapOf("expression" to "uv.x * k")) + val graph = ShaderGraph( + nodes = listOf(node, ShaderGraphNode("out", ShaderNodeLibrary.SURFACE_OUTPUT)), + links = listOf(ShaderGraphLink("e", "Out", "out", SurfaceOutputs.ALPHA)), + ) + val code = ShaderGraphCompiler.compile(graph) + + assertEquals(listOf("uv", "k"), ShaderNodeTypes.of(node.type)!!.inputs(node).map { it.name }) + assertEquals(emptyList(), code.diagnostics) + assertTrue(code.fragment.text.contains("(sg_uv).x * (0.0)"), code.fragment.text) + } + + @Test + fun `the type of an expression is read off its text`() { + val widths = mapOf("v" to 3, "k" to 1) + fun width(text: String) = ShaderExpression.parse(text).width { widths[it] } + + assertEquals(3, width("v * k + 1")) + assertEquals(1, width("length(v) * k")) + assertEquals(2, width("v.xy")) + assertEquals(4, width("vec4(v, k)")) + assertEquals(1, width("k > 0.5 ? 1.0 : 0.0")) + assertNull(width("v * unknown")) + } + + @Test + fun `a wrong expression is reported on its node and compiles to zero`() { + val node = ShaderGraphNode("e", ShaderNodeLibrary.EXPRESSION, options = mapOf("expression" to "sin(", "type" to "vec3")) + val graph = ShaderGraph( + nodes = listOf(node, ShaderGraphNode("out", ShaderNodeLibrary.SURFACE_OUTPUT)), + links = listOf(ShaderGraphLink("e", "Out", "out", SurfaceOutputs.COLOR)), + ) + val code = ShaderGraphCompiler.compile(graph) + + assertEquals(ShaderProblem.INVALID_EXPRESSION, code.diagnostics.single().problem) + assertTrue(code.fragment.text.contains("vec3 sg_0_Out = vec3(0.0);"), code.fragment.text) + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt new file mode 100644 index 000000000..de9ba27c3 --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt @@ -0,0 +1,166 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class ShaderGraphCompilerTest { + private val output = ShaderGraphNode("out", ShaderNodeLibrary.SURFACE_OUTPUT) + + private fun graph(vararg nodes: ShaderGraphNode, links: List) = + ShaderGraph(nodes = nodes.toList() + output, links = links) + + @Test + fun `the default graph draws what a material without one draws`() { + val code = ShaderGraphCompiler.compile(ShaderNodeLibrary.defaultSurface()) + + assertEquals(emptyList(), code.diagnostics) + assertTrue(code.fragment.text.contains("texture(Sampler0, sg_texture_uv)")) + assertTrue(code.fragment.text.contains("vec4 sg_1_RGBA = sg_color;"), code.fragment.text) + // A vec4 into the vec3 color is cut down to its first three components. + assertTrue(code.outputs.getValue(SurfaceOutputs.COLOR).endsWith(".xyz")) + assertTrue(code.vertex.statements.isEmpty()) + } + + @Test + fun `a dynamic node takes the widest input and spreads a number over it`() { + val graph = graph( + ShaderGraphNode("v", "hollowengine:input/vector3", values = mapOf("Value" to listOf(1f, 2f, 3f))), + ShaderGraphNode("m", "hollowengine:math/multiply", values = mapOf("B" to listOf(0.5f))), + links = listOf(ShaderGraphLink("v", "Out", "m", "A"), ShaderGraphLink("m", "Out", "out", SurfaceOutputs.COLOR)), + ) + val code = ShaderGraphCompiler.compile(graph) + + assertEquals(ShaderType.VEC3, code.types.output("m", "Out")) + assertTrue(code.fragment.text.contains("vec3 sg_1_Out = sg_0_Out * vec3(0.5);"), code.fragment.text) + } + + @Test + fun `what only the vertex offset needs runs per vertex only`() { + val graph = graph( + ShaderGraphNode("time", "hollowengine:input/time"), + ShaderGraphNode("wave", "hollowengine:math/sine"), + links = listOf( + ShaderGraphLink("time", "Time", "wave", "In"), + ShaderGraphLink("wave", "Out", "out", SurfaceOutputs.VERTEX_OFFSET), + ), + ) + val code = ShaderGraphCompiler.compile(graph) + + assertTrue(code.vertex.text.contains("sin(")) + assertFalse(code.fragment.text.contains("sin(")) + assertEquals("vec3(sg_1_Out)", code.outputs.getValue(SurfaceOutputs.VERTEX_OFFSET)) + } + + @Test + fun `reading the scene per vertex is reported`() { + val graph = graph( + ShaderGraphNode("depth", "hollowengine:input/scene_depth"), + links = listOf(ShaderGraphLink("depth", "Difference", "out", SurfaceOutputs.VERTEX_OFFSET)), + ) + val problems = ShaderGraphCompiler.compile(graph).diagnostics.map { it.problem } + + assertTrue(ShaderProblem.FRAGMENT_ONLY_IN_VERTEX in problems) + } + + @Test + fun `a cycle is reported and its nodes are left out`() { + val graph = graph( + ShaderGraphNode("a", "hollowengine:math/add"), + ShaderGraphNode("b", "hollowengine:math/add"), + links = listOf( + ShaderGraphLink("a", "Out", "b", "A"), + ShaderGraphLink("b", "Out", "a", "A"), + ShaderGraphLink("b", "Out", "out", SurfaceOutputs.ALPHA), + ), + ) + val code = ShaderGraphCompiler.compile(graph) + + assertEquals(setOf("a", "b"), code.diagnostics.filter { it.problem == ShaderProblem.CYCLE }.map { it.node }.toSet()) + assertEquals("1.0", code.outputs.getValue(SurfaceOutputs.ALPHA)) + } + + @Test + fun `a texture property is sampled by its uniform`() { + val graph = ShaderGraph( + nodes = listOf( + ShaderGraphNode("noise", ShaderNodeLibrary.PROPERTY, options = mapOf("property" to "Noise")), + ShaderGraphNode("sample", "hollowengine:texture/sample"), + output, + ), + links = listOf( + ShaderGraphLink("noise", "Out", "sample", "Texture"), + ShaderGraphLink("sample", "RGB", "out", SurfaceOutputs.COLOR), + ), + properties = listOf(ShaderGraphProperty("Noise", ShaderType.TEXTURE)), + ) + val code = ShaderGraphCompiler.compile(graph) + + assertEquals(emptyList(), code.diagnostics) + assertTrue(code.fragment.text.contains("texture(p_Noise, sg_texture_uv)"), code.fragment.text) + assertTrue(ShaderGraphTemplates.surface(code, ShaderGraphTemplates.PARTICLE).fragment.contains("uniform sampler2D p_Noise;")) + } + + @Test + fun `the preview program numbers the nodes that show a preview, the output last`() { + val preview = ShaderGraphCompiler.compilePreview(ShaderNodeLibrary.defaultSurface()) + + // The particle color and the split start with their previews off. + assertEquals(listOf("texture", "tint", "output"), preview.previewIndex.keys.toList()) + assertTrue(preview.selection.contains("PreviewNode == 2) fragColor = sg_surface("), preview.selection) + assertTrue(ShaderGraphTemplates.preview(preview).contains("uniform int PreviewNode;")) + } + + @Test + fun `a value typed on a node is a uniform of the preview, so changing it changes no code`() { + val graph = graph( + ShaderGraphNode("m", "hollowengine:math/multiply", values = mapOf("B" to listOf(0.5f))), + links = listOf(ShaderGraphLink("m", "Out", "out", SurfaceOutputs.ALPHA)), + ) + val preview = ShaderGraphCompiler.compilePreview(graph) + val changed = ShaderGraphCompiler.compilePreview(graph.withValue("m", "B", listOf(0.75f))) + + assertTrue(preview.statements.text.contains("PreviewValues["), preview.statements.text) + assertEquals(ShaderGraphTemplates.preview(preview), ShaderGraphTemplates.preview(changed)) + assertTrue(ShaderGraphTemplates.preview(preview).contains("uniform vec4 PreviewValues[${preview.values.size}];")) + } + + @Test + fun `only what reads the normal, the view or the position is previewed on the mesh`() { + val graph = graph( + ShaderGraphNode("fresnel", "hollowengine:procedural/fresnel"), + ShaderGraphNode("tint", "hollowengine:math/multiply"), + ShaderGraphNode("noise", "hollowengine:procedural/value_noise"), + links = listOf(ShaderGraphLink("fresnel", "Out", "tint", "A"), ShaderGraphLink("noise", "Out", "tint", "B")), + ) + + assertEquals(setOf("fresnel", "tint", "out"), ShaderGraphCompiler.compilePreview(graph).spatial) + } + + @Test + fun `a noise over a position is the 3D one`() { + val graph = graph( + ShaderGraphNode("local", "hollowengine:input/object_position"), + ShaderGraphNode("flat", "hollowengine:procedural/gradient_noise"), + ShaderGraphNode("solid", "hollowengine:procedural/gradient_noise"), + ShaderGraphNode("sum", "hollowengine:math/add"), + links = listOf( + ShaderGraphLink("local", "Position", "solid", "UV"), + ShaderGraphLink("flat", "Out", "sum", "A"), + ShaderGraphLink("solid", "Out", "sum", "B"), + ShaderGraphLink("sum", "Out", "out", SurfaceOutputs.ALPHA), + ), + ) + val code = ShaderGraphCompiler.compile(graph).fragment.text + + assertTrue(code.contains("sg_gradient_noise(sg_uv * 8.0)"), code) + assertTrue(code.contains("sg_gradient_noise3(sg_0_Position * 8.0)"), code) + } + + @Test + fun `a graph survives a round trip`() { + val graph = ShaderNodeLibrary.defaultSurface().copy(properties = listOf(ShaderGraphProperty("Speed", default = listOf(2f)))) + assertEquals(graph, ShaderGraphFormat.read(ShaderGraphFormat.write(graph))) + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEditsTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEditsTest.kt new file mode 100644 index 000000000..4ab7c1c76 --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphEditsTest.kt @@ -0,0 +1,59 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class ShaderGraphEditsTest { + private val graph = ShaderGraph( + nodes = listOf( + ShaderGraphNode("a", "hollowengine:math/add"), + ShaderGraphNode("b", "hollowengine:math/add"), + ShaderGraphNode("c", "hollowengine:math/add"), + ), + ) + + @Test + fun `an input takes one link, and a link that would close a loop is not made`() { + val linked = graph.withLink("a", "Out", "c", "A").withLink("b", "Out", "c", "A") + assertEquals(listOf(ShaderGraphLink("b", "Out", "c", "A")), linked.links) + + // b feeds c, c feeds a; a feeding b would close the loop. + val chained = linked.withLink("c", "Out", "a", "A") + assertEquals(2, chained.links.size) + assertEquals(chained, chained.withLink("a", "Out", "b", "A")) + } + + @Test + fun `a shape has the pins of the shape it is, and a link into a pin it loses goes`() { + val shape = ShaderGraphNode("s", "hollowengine:procedural/shape", options = mapOf("shape" to "polygon")) + val withLink = graph.withNode(shape).withLink("a", "Out", "s", "Sides") + val kind = ShaderNodeTypes.of(shape.type)!! + + assertTrue("Sides" in kind.inputs(shape).map { it.name }) + val ring = withLink.withOption("s", "shape", "ring") + assertEquals(listOf("UV", "Width", "Height", "Thickness", "Softness"), kind.inputs(ring.node("s")!!).map { it.name }) + assertTrue(ring.links.none { it.to == "s" }) + } + + @Test + fun `duplicating nodes keeps the links between them and drops the ones that reach outside`() { + val linked = graph.withLink("a", "Out", "b", "A").withLink("b", "Out", "c", "A") + val (copied, ids) = linked.withDuplicates(setOf("a", "b")) + + assertEquals(2, ids.size) + assertEquals(listOf(ShaderGraphLink(ids[0], "Out", ids[1], "A")), copied.links - linked.links.toSet()) + } + + @Test + fun `renaming a property renames what its nodes read`() { + val withProperty = graph + .withProperty(ShaderGraphProperty("Speed")) + .withNode(ShaderGraphNode("p", ShaderNodeLibrary.PROPERTY, options = mapOf("property" to "Speed"))) + + val renamed = withProperty.withPropertyChanged("Speed", ShaderGraphProperty("Rate")) + + assertEquals(listOf("Rate"), renamed.properties.map { it.name }) + assertEquals("Rate", renamed.node("p")?.options?.get("property")) + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/TransformedClipCullingTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/TransformedClipCullingTest.kt index f0f246a21..1af3e7eb3 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/TransformedClipCullingTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/ui/render/TransformedClipCullingTest.kt @@ -28,6 +28,21 @@ class TransformedClipCullingTest { assertTrue(textCommands(translateX = -100f).isNotEmpty()) } + @Test + fun `a clipped box moved into the clip by an ancestor transform keeps its text`() { + val text = SpanNode("4") + val field = BoxNode(modifiers = listOf(Modifier.position((-150).px, 0.px).size(40.px, 20.px).clip())) + .also { it.children.add(text) } + val world = BoxNode(modifiers = listOf(Modifier.position(0.px, 0.px).size(100.px, 20.px).translate(x = 200f))) + .also { it.children.add(field) } + val root = BoxNode(modifiers = listOf(Modifier.size(100.px, 20.px).clip())).also { it.children.add(world) } + + val frame = HollowUiRuntime().frame(root, 100f, 20f, -1f, -1f, 0L) + val texts = UiCommandRenderer().collect(frame.root, frame.layout).filterIsInstance() + + assertTrue(texts.isNotEmpty()) + } + @Test fun `untransformed child outside clip remains culled`() { assertFalse(textCommands(translateX = null).isNotEmpty()) diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterialsTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterialsTest.kt new file mode 100644 index 000000000..109b0e25d --- /dev/null +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/vfx/render/VfxGraphMaterialsTest.kt @@ -0,0 +1,37 @@ +package ru.hollowhorizon.hollowengine.client.vfx.render + +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraph +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderGraphProperty +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderType +import ru.hollowhorizon.hollowengine.common.vfx.VfxUniformValue +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class VfxGraphMaterialsTest { + @Test + fun `the properties of a material are what an effect gives values to, under their own names`() { + val graph = ShaderGraph( + properties = listOf( + ShaderGraphProperty("Speed", ShaderType.FLOAT, listOf(2f)), + ShaderGraphProperty("Tint", ShaderType.VEC4, listOf(1f, 0.5f, 0f, 1f)), + ShaderGraphProperty("Noise", ShaderType.TEXTURE, texture = "hollowengine:textures/noise.png"), + ), + ) + val declaration = VfxGraphMaterials.declaration(graph) + + assertEquals(listOf("Speed", "Tint"), declaration.uniforms.map { it.name }) + assertTrue(declaration.uniform("Tint")!!.defaultValue() is VfxUniformValue.Color) + assertEquals(listOf("Noise"), declaration.samplers) + assertEquals("p_Speed", declaration.glslName("Speed")) + assertEquals("hollowengine:textures/noise.png", declaration.samplerDefaults["Noise"]) + assertTrue(declaration.drawsGlow) + } + + @Test + fun `a material is told from a core shader by its extension`() { + assertTrue(VfxGraphMaterials.isGraph("hollowengine:materials/energy_orb.material")) + assertEquals(false, VfxGraphMaterials.isGraph("hollowengine:vfx/distortion")) + assertEquals("hollowengine:materials/orb.material", VfxGraphMaterials.locationOf("assets/hollowengine/materials/orb.material")) + } +} diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt index ae8fbb6f9..b1c1cf7b5 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/common/scripting/ide/ui/BundledStylesheetDiagnosticsTest.kt @@ -19,6 +19,7 @@ class BundledStylesheetDiagnosticsTest { "inspector.hss", "model-editor.hss", "notifications.hss", + "shader-graph.hss", "sounds-editor.hss", "theme.hss", "timeline.hss", From d8cc593d87e2fa02c07ecabe057dccc5c3f028d9 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sat, 26 Sep 2026 18:52:55 +0300 Subject: [PATCH 18/25] Fix shader graph reload and UI transforms --- .../hollowengine/client/HollowCoreClient.kt | 2 + .../client/shadergraph/ShaderExpression.kt | 16 +++-- .../client/shadergraph/ShaderNodeType.kt | 64 ++++++++++++++++++- .../hollowengine/client/ui/HollowUiRuntime.kt | 3 + .../shadergraph/ShaderExpressionEditing.kt | 3 +- .../files/shadergraph/ShaderGraphEditor.kt | 5 +- .../files/shadergraph/ShaderGraphInspector.kt | 22 ++++--- .../ide/files/shadergraph/ShaderGraphState.kt | 4 ++ .../client/ui/scroll/UiScrollHandle.kt | 18 ++++++ .../widgets/UiEditableTextFieldCodeInsight.kt | 24 +++---- .../UiEditableTextFieldCompletionPopup.kt | 14 ++-- .../ui/widgets/UiEditableTextFieldQuickFix.kt | 3 +- 12 files changed, 141 insertions(+), 37 deletions(-) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt index da3c00323..abc8925bd 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/HollowCoreClient.kt @@ -24,6 +24,7 @@ import ru.hollowhorizon.hollowengine.common.events.registry.RegisterResourcePack import ru.hollowhorizon.hollowengine.common.events.tick.TickEvent import ru.hollowhorizon.hollowengine.common.registry.ModEntities import ru.hollowhorizon.hollowengine.common.utils.ModList +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderNodeReloadListener @ClientOnly object HollowCoreClient { @@ -37,6 +38,7 @@ object HollowCoreClient { fun onRegisterReloadListener(event: RegisterReloadListenersEvent.Client) { event.register(HollowModelManager) event.register(BedrockParticles) + event.register(ShaderNodeReloadListener) event.register(VfxAssets) event.register(UiPathTileResources) event.register(UiFontResources) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt index 601cee2e4..7efffe7ba 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderExpression.kt @@ -14,7 +14,9 @@ enum class ShaderTokenKind { VARIABLE, /** A name that stands for a number, such as `PI`. */ - CONSTANT, FUNCTION, + CONSTANT, + + BOOLEAN, FUNCTION, /** What follows a dot: a swizzle such as `xy`. */ MEMBER, OPERATOR, END, @@ -82,15 +84,16 @@ class ShaderExpression private constructor( "dFdx" to "(x)", "dFdy" to "(x)", "fwidth" to "(x)", ) - /** Names that read as numbers. */ + /** Names that read as numbers, and the number each is written as. */ val Constants: Map = linkedMapOf( "PI" to "3.14159265", "TAU" to "6.28318531", "E" to "2.71828183", - "true" to "true", - "false" to "false", ) + /** The literals of GLSL that look like names; without them here they would become pins. */ + val Booleans = setOf("true", "false") + private val Reserved = setOf( "if", "else", "for", "while", "do", "return", "break", "continue", "discard", "struct", "const", "uniform", "in", "out", "inout", "int", "uint", "bool", "mat2", "mat3", "mat4", "sampler2D", "void", @@ -173,6 +176,7 @@ class ShaderExpression private constructor( previous?.kind == ShaderTokenKind.OPERATOR && previous.text == "." -> ShaderTokenKind.MEMBER source.substring(end).trimStart().startsWith("(") -> ShaderTokenKind.FUNCTION name in Constants -> ShaderTokenKind.CONSTANT + name in Booleans -> ShaderTokenKind.BOOLEAN else -> ShaderTokenKind.VARIABLE } @@ -294,7 +298,7 @@ private class Parser(private val tokens: List, private val widthOf: private fun primary(): Int { val token = peek() return when { - token.kind == ShaderTokenKind.NUMBER || token.kind == ShaderTokenKind.CONSTANT -> { + token.kind in Literals -> { at++ 1 } @@ -339,6 +343,8 @@ private class Parser(private val tokens: List, private val widthOf: private fun widest(a: Int, b: Int): Int = if (a == UNKNOWN || b == UNKNOWN) UNKNOWN else maxOf(a, b) companion object { + private val Literals = setOf(ShaderTokenKind.NUMBER, ShaderTokenKind.CONSTANT, ShaderTokenKind.BOOLEAN) + const val UNKNOWN = -1 private val Levels = listOf( diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt index 5451f24e4..645ee4335 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt @@ -1,7 +1,14 @@ package ru.hollowhorizon.hollowengine.client.shadergraph +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import net.minecraft.server.packs.resources.ResourceManager +import net.minecraft.server.packs.resources.ResourceManagerReloadListener import ru.hollowhorizon.hollowengine.api.extensions.ExtensionHandle import ru.hollowhorizon.hollowengine.api.extensions.ExtensionPoints +import ru.hollowhorizon.hollowengine.common.events.ClientEvent +import ru.hollowhorizon.hollowengine.common.events.factory.EventHandler import ru.hollowhorizon.hollowengine.common.utils.rl /** Where a kind of node shows up in the add menu. */ @@ -263,10 +270,20 @@ class ShaderNodeBuilder internal constructor(private val id: String, private val fun shaderNode(id: String, category: ShaderNodeCategory, build: ShaderNodeBuilder.() -> Unit): ShaderNodeType = ShaderNodeBuilder(id, category).apply(build).build() -/** Every kind of node a graph can use. */ +/** + * Every kind of node a graph can use: the engine's, the ones addons register once, and the ones + * [RegisterShaderNodesEvent] brings on every resource reload. + */ object ShaderNodeTypes { val point = ExtensionPoints.create("hollowengine:shadergraph/node_types".rl) + /** What the last [RegisterShaderNodesEvent] registered, taken back on the next. */ + private var reloaded: List = emptyList() + + /** Bumped on every reload, so an open editor compiles its graph again against the kinds there are now. */ + var revision by mutableStateOf(0) + private set + init { ShaderNodeLibrary.all.forEach(::register) } @@ -280,4 +297,49 @@ object ShaderNodeTypes { /** The output node kind of [target]. */ fun master(target: ShaderTarget): ShaderNodeType? = all.firstOrNull { it.master?.target == target } + + /** + * Takes back what the previous reload registered and asks again. The engine's kinds go in first, + * so one a script replaced last time is back if the script no longer replaces it. + */ + fun reload() { + reloaded.forEach(ExtensionHandle::close) + ShaderNodeLibrary.all.forEach(::register) + val event = RegisterShaderNodesEvent.post(RegisterShaderNodesEvent()) + reloaded = event.types.map(::register) + revision++ + } +} + +/** + * Fires on every resource reload of the client: where a `reload.kts` or an addon adds kinds of node + * to the shader graph. What it registered on the previous reload is taken back first, so a script + * that stops registering a kind loses it, and one that registers the id of an engine kind replaces it. + * + * ``` + * @SubscribeEvent + * fun nodes(event: RegisterShaderNodesEvent) { + * event.register("mymod:math/double", ShaderNodeCategory.MATH) { + * val value = input("In", 1f) + * output("Out") { "${value.code} * 2.0" } + * } + * } + * ``` + */ +class RegisterShaderNodesEvent : ClientEvent { + internal val types = ArrayList() + + fun register(type: ShaderNodeType) { + types += type + } + + fun register(id: String, category: ShaderNodeCategory, build: ShaderNodeBuilder.() -> Unit) = + register(shaderNode(id, category, build)) + + companion object : EventHandler() +} + +/** Asks for the kinds of node again whenever the client reloads its resources. */ +object ShaderNodeReloadListener : ResourceManagerReloadListener { + override fun onResourceManagerReload(resourceManager: ResourceManager) = ShaderNodeTypes.reload() } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt index f71280eed..129644a48 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/HollowUiRuntime.kt @@ -421,6 +421,9 @@ class HollowUiRuntime( val handle = node.scrollHandle() ?: continue handle.viewport = layoutNode.content handle.range = layoutNode.scrollRange + handle.screenTransform = layoutNode.inputTransform + handle.contentOffsetX = layoutNode.content.x - layoutNode.rect.x + handle.contentOffsetY = layoutNode.content.y - layoutNode.rect.y } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt index ed1d4101d..034bed200 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderExpressionEditing.kt @@ -17,6 +17,7 @@ internal object ShaderExpressionEditing { ShaderTokenKind.NUMBER -> ExpressionTokenColors.Number ShaderTokenKind.VARIABLE -> ExpressionTokenColors.Name ShaderTokenKind.CONSTANT -> ExpressionTokenColors.Number + ShaderTokenKind.BOOLEAN -> ExpressionTokenColors.Keyword ShaderTokenKind.FUNCTION -> ExpressionTokenColors.Keyword ShaderTokenKind.MEMBER -> ExpressionTokenColors.String ShaderTokenKind.OPERATOR -> ExpressionTokenColors.Operator @@ -36,7 +37,7 @@ internal object ShaderExpressionEditing { val names = ShaderExpression.parse(context.text).variables.filter { it != prefix } val candidates = ShaderExpression.Functions.map { (name, parameters) -> UiTextCompletion(label = name, insertText = "$name()", detail = parameters, caretOffset = name.length + 1) - } + ShaderExpression.Constants.keys.map { + } + (ShaderExpression.Constants.keys + ShaderExpression.Booleans).map { UiTextCompletion( label = it, tail = "const" diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt index 79004924f..1bf6c6f2e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt @@ -66,8 +66,9 @@ internal fun ShaderGraphEditor(file: HollowIdeOpenFile) { previews.show(graph, document.revision) val selection = state.selection - PublishInspector(source = "shadergraph-${file.path}", key = Triple(selection, document.revision, previewError)) { - shaderGraphInspectorTarget(document, selection, diagnostics) + SideEffect { state.diagnostics = diagnostics } + PublishInspector(source = "shadergraph-${file.path}", key = selection) { + shaderGraphInspectorTarget(document, selection, state) } val boxes = LinkedHashMap() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt index d25039766..eeba46b53 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphInspector.kt @@ -10,23 +10,29 @@ import ru.hollowhorizon.hollowengine.client.utils.lang private const val GraphIcon = "hollowengine:textures/gui/icons/files/shader.svg" private const val RemoveIcon = "hollowengine:textures/gui/icons/remove.svg" -/** What the inspector shows for [selection]: the one node selected, or the graph with its properties, preview and problems. */ +/** + * What the inspector shows for [selection]: the one node selected, or the graph with its properties, + * preview and problems. The inspector keeps a target for as long as its id stays the same, so what it + * shows is read from the document and from [state] as it draws, not taken when the target is made. + */ internal fun shaderGraphInspectorTarget( document: HollowIdeShaderGraphDocument, selection: ShaderGraphSelection, - problems: List, + state: ShaderGraphEditorState, ): InspectorTarget { - val node = selection.single?.let(document.graph::node) - val kind = node?.let { ShaderNodeTypes.of(it.type) } - if (node != null && kind != null) { + val selected = selection.single?.let(document.graph::node) + val selectedKind = selected?.let { ShaderNodeTypes.of(it.type) } + if (selected != null && selectedKind != null) { return InspectorTarget( - id = "shadergraph-node-${node.id}", title = kind.title(), subtitle = node.id, icon = GraphIcon + id = "shadergraph-node-${selected.id}", title = selectedKind.title(), subtitle = selected.id, icon = GraphIcon ) { - NodeFields(document, node, kind) + val node = document.graph.node(selected.id) + val kind = node?.let { ShaderNodeTypes.of(it.type) } + if (node != null && kind != null) NodeFields(document, node, kind) } } return InspectorTarget(id = "shadergraph", title = graphText("graph"), icon = GraphIcon) { - GraphFields(document, problems) + GraphFields(document, state.diagnostics) } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt index 575016efe..68281bc62 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphState.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.files.shadergraph import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderDiagnostic import ru.hollowhorizon.hollowengine.client.ui.graph.GraphViewState /** What is selected: some nodes, or one link, by its position among the links. */ @@ -23,6 +24,9 @@ internal data class ShaderGraphSelection(val nodes: Set = emptySet(), va internal class ShaderGraphEditorState { val view = GraphViewState() var selection by mutableStateOf(ShaderGraphSelection.None) + + /** What is wrong with the graph as it last compiled, for the inspector to list. */ + var diagnostics by mutableStateOf(emptyList()) } /** diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollHandle.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollHandle.kt index 2c1361104..5f213f258 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollHandle.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/scroll/UiScrollHandle.kt @@ -1,7 +1,10 @@ package ru.hollowhorizon.hollowengine.client.ui.scroll import androidx.compose.runtime.* +import ru.hollowhorizon.hollowengine.client.ui.UiMatrix4 +import ru.hollowhorizon.hollowengine.client.ui.UiVec3 import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect +import kotlin.math.hypot /** * The scroll position of one scroll container. @@ -16,6 +19,21 @@ class UiScrollHandle { var viewport: UiRect by mutableStateOf(UiRect.Zero) internal set + /** From the container to the screen, through every transform above it; see [toScreen]. */ + internal var screenTransform: UiMatrix4 = UiMatrix4.identity() + internal var contentOffsetX = 0f + internal var contentOffsetY = 0f + + fun toScreen(x: Float, y: Float): UiVec3 = screenTransform.transform(contentOffsetX + x, contentOffsetY + y) + + /** How many screen pixels one unit of the content spans, which a transform above can change. */ + val screenScale: Float + get() { + val origin = toScreen(0f, 0f) + val unit = toScreen(1f, 0f) + return hypot(unit.x - origin.x, unit.y - origin.y).takeIf { it > 0f } ?: 1f + } + /** How far each axis can still travel: the content size minus the viewport, never negative. */ var range: UiScrollOffset by mutableStateOf(UiScrollOffset.Zero) internal set diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt index 32f51c860..33e5430da 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCodeInsight.kt @@ -142,14 +142,9 @@ private fun EditableFieldSignatureHelpPopup( visible: Boolean, ) { val anchor = layout.caretAt(help.anchor) - val viewport = scrollState.viewport + val at = scrollState.toScreen(contentOffsetX + anchor.x - scrollState.offsetX, anchor.y - scrollState.offsetY) Popup( - anchorBounds = UiRect( - viewport.x + contentOffsetX + anchor.x - scrollState.offsetX, - viewport.y + anchor.y - scrollState.offsetY, - 0f, - layout.fontSize, - ), + anchorBounds = UiRect(at.x, at.y, 0f, layout.fontSize * scrollState.screenScale), alignment = UiPopupAlignment( anchorVertical = UiAlign.START, popupVertical = UiAlign.END, @@ -158,7 +153,7 @@ private fun EditableFieldSignatureHelpPopup( id = "editable-text-field-signature-help", visible = visible, tags = listOf("ide-code-insight-popup", "ide-signature-help"), - modifier = codeInsightPopupModifier(layout, viewport), + modifier = codeInsightPopupModifier(layout, scrollState.viewport), dismissOnOutside = false, ) { Column(modifier = Modifier.size(UiLength.Fit, UiLength.Fit).gap(3.px)) { @@ -191,21 +186,22 @@ private fun EditableFieldHoverPopup( contentOffsetX: Float, visible: Boolean, ) { - val viewport = scrollState.viewport val start = layout.caretAt(info.start) val end = layout.caretAt(info.end) + val at = scrollState.toScreen(contentOffsetX + start.x - scrollState.offsetX, start.y - scrollState.offsetY) + val scale = scrollState.screenScale Popup( anchorBounds = UiRect( - viewport.x + contentOffsetX + start.x - scrollState.offsetX, - viewport.y + start.y - scrollState.offsetY, - (end.x - start.x).coerceAtLeast(layout.fontSize), - layout.fontSize, + at.x, + at.y, + (end.x - start.x).coerceAtLeast(layout.fontSize) * scale, + layout.fontSize * scale, ), alignment = UiPopupAlignment.BelowStart.copy(offsetY = CodeInsightPopupGap), id = "editable-text-field-hover-info", visible = visible, tags = listOf("ide-code-insight-popup", "ide-hover-info"), - modifier = codeInsightPopupModifier(layout, viewport), + modifier = codeInsightPopupModifier(layout, scrollState.viewport), dismissOnOutside = false, ) { Column(modifier = Modifier.size(UiLength.Fit, UiLength.Fit).gap(5.px)) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt index 1b9ebb341..902721e88 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldCompletionPopup.kt @@ -38,6 +38,7 @@ internal fun editableFieldCompletionGeometry( viewportHeight: Float, caretOffsetX: Float = 0f, caretOffsetY: Float = 0f, + scale: Float = 1f, ): EditableFieldCompletionGeometry? { if (items.isEmpty() || viewportWidth <= 0f || viewportHeight <= 0f) return null val fontSize = layout.fontSize @@ -53,9 +54,9 @@ internal fun editableFieldCompletionGeometry( val rowHeight = (textHeight + CompletionPopupRowVerticalChrome).coerceAtLeast(14f) val footerHeight = (textHeight + CompletionPopupFooterVerticalChrome).coerceAtLeast(rowHeight) val caret = layout.caretAt(anchor) - val caretX = caretOffsetX + caret.x - scrollX - val caretY = caretOffsetY + caret.y - scrollY - val belowY = caretY + textHeight + CompletionPopupAnchorGap + val caretX = caretOffsetX + (caret.x - scrollX) * scale + val caretY = caretOffsetY + (caret.y - scrollY) * scale + val belowY = caretY + textHeight * scale + CompletionPopupAnchorGap val belowSpace = viewportHeight - belowY - CompletionPopupViewportMargin val aboveSpace = caretY - CompletionPopupAnchorGap - CompletionPopupViewportMargin val minimumHeight = popupMinimumHeight(rowHeight, footerHeight) @@ -146,6 +147,8 @@ internal fun EditableFieldCompletionPopup( val items = completion.items val field = scrollState.viewport val surface = LocalUiViewport.current.takeIf { it.width > 0f && it.height > 0f } ?: field + val scale = scrollState.screenScale + val origin = scrollState.toScreen(0f, 0f) val geometry = editableFieldCompletionGeometry( layout = layout, anchor = completion.anchor, @@ -154,8 +157,9 @@ internal fun EditableFieldCompletionPopup( scrollY = scrollState.offsetY, viewportWidth = surface.width, viewportHeight = surface.height, - caretOffsetX = contentOffsetX + field.x - surface.x, - caretOffsetY = field.y - surface.y, + caretOffsetX = contentOffsetX * scale + origin.x - surface.x, + caretOffsetY = origin.y - surface.y, + scale = scale, ) ?: return val listScroll = rememberScrollState() diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldQuickFix.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldQuickFix.kt index c9c45c05a..8bc2aef18 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldQuickFix.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/widgets/UiEditableTextFieldQuickFix.kt @@ -162,8 +162,9 @@ internal fun EditableFieldQuickFixPopup( val y = (caret.y - scrollState.offsetY + fontSize + QuickFixAnchorGap) .coerceAtMost((viewport.height - QuickFixViewportMargin).coerceAtLeast(0f)) + val at = scrollState.toScreen(x, y) Popup( - anchorBounds = UiRect(viewport.x + x, viewport.y + y, 0f, 0f), + anchorBounds = UiRect(at.x, at.y, 0f, 0f), alignment = UiPopupAlignment(anchorVertical = UiAlign.START), id = "editable-text-field-quick-fix", tags = listOf("editable-text-field-quick-fix-popup", "ide-quick-fix-popup"), From 90655f4d691a0dc468e02a22cedcbebdf3b56069 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sat, 26 Sep 2026 20:16:51 +0300 Subject: [PATCH 19/25] Shader graph preview and normal nodes --- .../client/shadergraph/ShaderGraphCompiler.kt | 59 +++++++++++++++-- .../shadergraph/ShaderGraphTemplates.kt | 24 +++++-- .../client/shadergraph/ShaderLibrary.kt | 25 +++++++ .../client/shadergraph/ShaderNodeLibrary.kt | 3 +- .../client/shadergraph/ShaderNodeType.kt | 22 ++++++- .../client/shadergraph/ShaderNormalNodes.kt | 66 +++++++++++++++++++ .../client/ui/ide/HollowIdeOverlay.kt | 7 +- .../client/ui/ide/HollowIdeShortcutsDialog.kt | 4 +- .../files/shadergraph/ShaderGraphEditor.kt | 5 +- .../files/shadergraph/ShaderGraphPreviews.kt | 41 ++++++------ .../en_us/hollowengine/gui/shadergraph.json | 5 ++ .../ru_ru/hollowengine/gui/shadergraph.json | 5 ++ .../hollowengine/shaders/graph/preview.fsh | 23 +++++-- .../hollowengine/shaders/graph/preview.vsh | 42 +++++++++--- .../hollowengine/ui/styles/shader-graph.hss | 2 + .../shadergraph/ShaderGraphCompilerTest.kt | 35 ++++++++++ 16 files changed, 318 insertions(+), 50 deletions(-) create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNormalNodes.kt diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt index e407e78dc..aed206caa 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompiler.kt @@ -33,7 +33,9 @@ class ShaderStageCode(val statements: List) { * is, and everything the shader around it has to declare. */ class ShaderGraphCode( - val libraries: List, + /** The shared functions each stage calls; a fragment-only one, such as a derivative, never goes in the vertex stage. */ + val vertexLibraries: List, + val fragmentLibraries: List, val properties: List, val vertex: ShaderStageCode, val fragment: ShaderStageCode, @@ -53,6 +55,10 @@ class ShaderValueSlot(val node: String, val pin: String, val width: Int) */ class ShaderPreviewCode( val libraries: List, + val vertexLibraries: List, + val vertex: ShaderStageCode, + val vertexSelection: String, + val displaced: Set, val properties: List, val statements: ShaderStageCode, val statementNodes: List, @@ -84,7 +90,7 @@ object ShaderGraphCompiler { val master = resolved.master if (master == null) { return ShaderGraphCode( - emptyList(), graph.properties, ShaderStageCode(emptyList()), ShaderStageCode(emptyList()), + emptyList(), emptyList(), graph.properties, ShaderStageCode(emptyList()), ShaderStageCode(emptyList()), emptyMap(), emptySet(), emptySet(), diagnostics, resolved.types(), ) } @@ -105,7 +111,8 @@ object ShaderGraphCompiler { pin.name to resolved.inputCode(master, pin, vertex = pin.name in vertexOutputs, sink = ArrayList()) } return ShaderGraphCode( - libraries = ShaderLibrary.ordered(vertex.libraries + fragment.libraries), + vertexLibraries = ShaderLibrary.ordered(vertex.libraries), + fragmentLibraries = ShaderLibrary.ordered(fragment.libraries), properties = graph.properties, vertex = ShaderStageCode(vertex.statements), fragment = ShaderStageCode(fragment.statements), @@ -133,7 +140,14 @@ object ShaderGraphCompiler { else -> resolved.variable(node, output) } previewIndex[node.id] = previewIndex.size - branches += "if (PreviewNode == ${previewIndex.getValue(node.id)}) fragColor = sg_show($value);" + val shown = when (resolved.typeOf(node).previewStyle) { + ShaderPreviewStyle.DISPLACEMENT -> "sg_show_shape()" + ShaderPreviewStyle.SIGNED -> coerce(value, resolved.outputType(node, output), ShaderType.VEC3) + ?.let { "sg_show_signed($it)" } ?: "sg_show($value)" + + ShaderPreviewStyle.VALUE -> "sg_show($value)" + } + branches += "if (PreviewNode == ${previewIndex.getValue(node.id)}) fragColor = $shown;" } resolved.master?.takeIf { resolved.typeOf(it).showsPreview(it) }?.let { master -> val code = resolved.typeOf(master).inputs(master).associate { pin -> @@ -145,8 +159,15 @@ object ShaderGraphCompiler { "${code[SurfaceOutputs.EMISSION] ?: "vec3(0.0)"}, ${code[SurfaceOutputs.ALPHA_CLIP] ?: "0.0"});" } + val moved = previewOffsets(graph, resolved, previewIndex) + val movedNodes = moved.flatMap { it.nodes }.map { it.id }.toSet() + val vertex = resolved.emit(resolved.order.filter { it.id in movedNodes }, vertex = true) return ShaderPreviewCode( libraries = ShaderLibrary.ordered(emitted.libraries), + vertexLibraries = ShaderLibrary.ordered(vertex.libraries), + vertex = ShaderStageCode(vertex.statements), + vertexSelection = moved.joinToString("\n") { "if (PreviewNode == ${it.index}) sg_out_vertex_offset = ${it.offset};" }, + displaced = moved.map { it.node }.toSet(), properties = graph.properties, statements = ShaderStageCode(emitted.statements), statementNodes = emitted.owners, @@ -159,6 +180,29 @@ object ShaderGraphCompiler { } } +private class PreviewOffset(val node: String, val index: Int, val offset: String, val nodes: List) + +private fun previewOffsets(graph: ShaderGraph, resolved: ResolvedGraph, previewIndex: Map): List { + val offsets = ArrayList() + resolved.master?.let { master -> + val index = previewIndex[master.id] ?: return@let + val link = graph.linkInto(master.id, SurfaceOutputs.VERTEX_OFFSET) ?: return@let + val pin = resolved.typeOf(master).input(master, SurfaceOutputs.VERTEX_OFFSET) ?: return@let + val nodes = resolved.reachableFrom(listOf(link.from)) + if (nodes.none(resolved::needsFragment)) { + offsets += PreviewOffset(master.id, index, resolved.inputCode(master, pin, vertex = true, sink = ArrayList()), nodes) + } + } + resolved.order.filter { resolved.typeOf(it).previewStyle == ShaderPreviewStyle.DISPLACEMENT }.forEach { node -> + val index = previewIndex[node.id] ?: return@forEach + val output = resolved.typeOf(node).outputs.first() + val offset = coerce(resolved.variable(node, output), resolved.outputType(node, output), ShaderType.VEC3) ?: return@forEach + val nodes = resolved.reachableFrom(listOf(node.id)) + if (nodes.none(resolved::needsFragment)) offsets += PreviewOffset(node.id, index, offset, nodes) + } + return offsets +} + /** The values of a preview program, each given a slot of the uniform array as the code reads it. */ private class PreviewValues { val slots = ArrayList() @@ -330,6 +374,13 @@ private class ResolvedGraph(private val graph: ShaderGraph, private val values: private fun values(node: ShaderGraphNode, pin: ShaderPinSpec): List = node.values[pin.name]?.takeIf { it.isNotEmpty() } ?: pin.default.ifEmpty { listOf(0f) } + /** Whether [node] can only run per fragment: it, or an engine input it falls back on, reads the scene or a derivative. */ + fun needsFragment(node: ShaderGraphNode): Boolean { + val kind = typeOf(node) + return kind.fragmentOnly || kind.reads.any { it.fragmentOnly } || + kind.inputs(node).any { pin -> pin.fallback?.fragmentOnly == true && source(node, pin.name) == null } + } + fun reachableFrom(roots: List): List { val reached = HashSet() val stack = ArrayDeque(roots) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt index c541eb1b5..8b70b22c8 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphTemplates.kt @@ -79,20 +79,36 @@ object ShaderGraphTemplates { } } return ShaderGraphSources( - vertex = fill(vertexSource, code.properties, code.libraries, "//#vertex" to vertex), - fragment = fill(template.fragmentSource, code.properties, code.libraries, "//#fragment" to fragment), + vertex = fill(vertexSource, code.properties, code.vertexLibraries, "//#vertex" to vertex), + fragment = fill(template.fragmentSource, code.properties, code.fragmentLibraries, "//#fragment" to fragment), ) } - /** The fragment stage of the preview program of a graph; its vertex stage is [ShaderGraphTemplate.vertexSource] of [PREVIEW]. */ + /** The fragment stage of the preview program of a graph. */ fun preview(code: ShaderPreviewCode): String = fill( PREVIEW.fragmentSource, code.properties, code.libraries, "//#preview" to code.statements.text + "\n" + code.selection, - extraUniforms = if (code.values.isEmpty()) "" else "uniform vec4 PreviewValues[${code.values.size}];", + extraUniforms = previewValues(code), ) + /** The vertex stage of the preview program of a graph: the offsets of the previews that move the mesh. */ + fun previewVertex(code: ShaderPreviewCode): String { + val body = if (code.displaced.isEmpty()) "" else code.vertex.text + "\n" + code.vertexSelection + return fill( + requireNotNull(PREVIEW.vertexSource), + code.properties, + code.vertexLibraries, + "//#vertex" to body, + extraUniforms = previewValues(code), + ) + } + + /** The array the values typed on nodes are uploaded into; both stages declare it alike, so they share it. */ + private fun previewValues(code: ShaderPreviewCode): String = + if (code.values.isEmpty()) "" else "uniform vec4 PreviewValues[${code.values.size}];" + /** * The line of [source], a preview program [preview] made out of [code], each statement of the graph * starts on, counted from 1 as GLSL compilers report them. diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt index d8594c176..2682cdc9d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderLibrary.kt @@ -229,6 +229,31 @@ enum class ShaderLibrary(val code: String, vararg val requires: ShaderLibrary) { """ ), + /** + * Normals worked out per pixel from how things change between neighboring pixels, so they only + * run in a fragment stage. + */ + NORMALS( + """ + vec3 sg_bump(vec3 normal, vec3 position, float height, float strength) { + vec3 dpdx = dFdx(position); + vec3 dpdy = dFdy(position); + float dhdx = dFdx(height); + float dhdy = dFdy(height); + vec3 r1 = cross(dpdy, normal); + vec3 r2 = cross(normal, dpdx); + float det = dot(dpdx, r1); + vec3 gradient = sign(det) * (dhdx * r1 + dhdy * r2); + return normalize(abs(det) * normal - strength * gradient); + } + + vec3 sg_surface_normal(vec3 position, vec3 view) { + vec3 normal = normalize(cross(dFdx(position), dFdy(position))); + return dot(normal, view) < 0.0 ? -normal : normal; + } + """ + ), + /** * Signed distances to shapes centered on the surface, negative inside. `p` runs from -1 to 1 * across the surface and `size` is the half extent of the shape in the same units. diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt index b1edcce49..019d6260a 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeLibrary.kt @@ -13,7 +13,7 @@ object ShaderNodeLibrary { const val PROPERTY = "hollowengine:input/property" const val EXPRESSION = ShaderMathNodes.EXPRESSION - val all: List by lazy { inputs() + uv() + texture() + output() + ShaderMathNodes.all } + val all: List by lazy { inputs() + uv() + texture() + output() + ShaderMathNodes.all + ShaderNormalNodes.all } /** * What a new surface graph starts as: the material texture times the particle color, which is what @@ -182,6 +182,7 @@ object ShaderNodeLibrary { group("surface") reads(input) if (input.fragmentOnly) fragmentOnly() + if (input == ShaderInput.NORMAL || input == ShaderInput.VIEW_DIRECTION) preview(ShaderPreviewStyle.SIGNED) output(output, ShaderPinType.of(input.type)) { input.glsl } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt index 645ee4335..7056fbb0d 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNodeType.kt @@ -11,9 +11,21 @@ import ru.hollowhorizon.hollowengine.common.events.ClientEvent import ru.hollowhorizon.hollowengine.common.events.factory.EventHandler import ru.hollowhorizon.hollowengine.common.utils.rl +/** How a preview shows the first output of a node. */ +enum class ShaderPreviewStyle { + /** As a color: a number is gray, a vector its components. */ + VALUE, + + /** A direction, whose components run from -1 to 1, shown `* 0.5 + 0.5`, as a normal map is. */ + SIGNED, + + /** An offset: the mesh moved by it, shaded, since a few hundredths of a block show as black. */ + DISPLACEMENT, +} + /** Where a kind of node shows up in the add menu. */ enum class ShaderNodeCategory { - INPUT, MATH, VECTOR, UV, TEXTURE, PROCEDURAL, OUTPUT, + INPUT, MATH, VECTOR, NORMAL, UV, TEXTURE, PROCEDURAL, OUTPUT, } /** An input of a kind of node: what it takes, and what it is when nothing is linked to it. */ @@ -95,6 +107,7 @@ class ShaderNodeType( val fragmentOnly: Boolean, val master: ShaderMasterSpec?, val previewByDefault: Boolean, + val previewStyle: ShaderPreviewStyle, private val check: ((ShaderGraphNode) -> ShaderDiagnostic?)?, ) { val titleKey: String get() = "hollowengine.gui.shadergraph.node.${id.substringAfter(':').replace('/', '.')}" @@ -160,6 +173,7 @@ class ShaderNodeBuilder internal constructor(private val id: String, private val private var check: ((ShaderGraphNode) -> ShaderDiagnostic?)? = null private var fragmentOnly = false private var preview = true + private var previewStyle = ShaderPreviewStyle.VALUE private var master: ShaderMasterSpec? = null fun input( @@ -223,6 +237,11 @@ class ShaderNodeBuilder internal constructor(private val id: String, private val preview = false } + /** How the preview shows what the node computes, when a plain color says little. */ + fun preview(style: ShaderPreviewStyle) { + previewStyle = style + } + fun reads(vararg inputs: ShaderInput) { reads += inputs } @@ -252,6 +271,7 @@ class ShaderNodeBuilder internal constructor(private val id: String, private val fragmentOnly = fragmentOnly, master = master, previewByDefault = preview, + previewStyle = previewStyle, check = check, ) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNormalNodes.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNormalNodes.kt new file mode 100644 index 000000000..4e67a511d --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderNormalNodes.kt @@ -0,0 +1,66 @@ +package ru.hollowhorizon.hollowengine.client.shadergraph + +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderNodeCategory.NORMAL +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinType.FLOAT +import ru.hollowhorizon.hollowengine.client.shadergraph.ShaderPinType.VEC3 + +/** + * Normals, moving the surface, and light that shows both. Normals and positions are in the axes of + * the world, the position relative to the camera, in game and in the previews alike. + */ +internal object ShaderNormalNodes { + val all: List by lazy { listOf(offset(), bump(), surfaceNormal(), lambert()) } + + /** How far to move a vertex along its normal: link it into the vertex offset of the output. */ + private fun offset() = shaderNode("hollowengine:normal/offset", NORMAL) { + group("displace") + preview(ShaderPreviewStyle.DISPLACEMENT) + val amount = input("Amount", 0.1f, type = FLOAT) + val normal = input("Normal", type = VEC3, fallback = ShaderInput.NORMAL) + output("Offset", VEC3) { "normalize(${normal.code}) * ${amount.code}" } + } + + /** + * The normal tilted by how [Height] changes across the surface: fine detail a mesh does not have, + * such as ripples, for a fresnel or light to pick up. Strength is how many blocks a height of one is. + */ + private fun bump() = shaderNode("hollowengine:normal/bump", NORMAL) { + group("normals") + preview(ShaderPreviewStyle.SIGNED) + uses(ShaderLibrary.NORMALS) + fragmentOnly() + val height = input("Height", 0f, type = FLOAT) + val strength = input("Strength", 0.1f, type = FLOAT) + val normal = input("Normal", type = VEC3, fallback = ShaderInput.NORMAL) + val position = input("Position", type = VEC3, fallback = ShaderInput.POSITION) + output("Normal", VEC3) { "sg_bump(normalize(${normal.code}), ${position.code}, ${height.code}, ${strength.code})" } + } + + /** + * The normal of the surface as it is drawn, worked out from the position: after a vertex offset + * has moved it, which the normal of the mesh knows nothing about. Faceted, one per triangle. + */ + private fun surfaceNormal() = shaderNode("hollowengine:normal/surface", NORMAL) { + group("normals") + preview(ShaderPreviewStyle.SIGNED) + uses(ShaderLibrary.NORMALS) + fragmentOnly() + val position = input("Position", type = VEC3, fallback = ShaderInput.POSITION) + val view = input("View", type = VEC3, fallback = ShaderInput.VIEW_DIRECTION) + output("Normal", VEC3) { "sg_surface_normal(${position.code}, ${view.code})" } + } + + /** + * How much light a surface facing [Normal] gets from [Direction], 0 to 1; Wrap lets it reach + * around the unlit side, as it does through something soft. + */ + private fun lambert() = shaderNode("hollowengine:normal/lambert", NORMAL) { + group("light") + val normal = input("Normal", type = VEC3, fallback = ShaderInput.NORMAL) + val direction = input("Direction", 0.4f, 1f, 0.3f, type = VEC3) + val wrap = input("Wrap", 0f, type = FLOAT) + output("Light", FLOAT) { + "clamp((dot(normalize(${normal.code}), normalize(${direction.code})) + ${wrap.code}) / (1.0 + ${wrap.code}), 0.0, 1.0)" + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt index 2fb91f5d0..ff4651830 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeOverlay.kt @@ -1276,12 +1276,11 @@ object HollowIdeOverlay { } private fun handleStripeShortcut(key: Int, modifiers: Int): Boolean { - if (modifiers and (GLFW.GLFW_MOD_CONTROL or GLFW.GLFW_MOD_SHIFT or GLFW.GLFW_MOD_SUPER) != 0) return false + if (modifiers and GLFW.GLFW_MOD_ALT == 0) return false + if (modifiers and (GLFW.GLFW_MOD_CONTROL or GLFW.GLFW_MOD_SUPER) != 0) return false val index = key - GLFW.GLFW_KEY_1 if (index < 0 || index >= StripeShortcutCount) return false - val alt = modifiers and GLFW.GLFW_MOD_ALT != 0 - if (!alt && surface.runtime.isAnyFocused) return false - val side = if (alt) DockSide.RIGHT else DockSide.LEFT + val side = if (modifiers and GLFW.GLFW_MOD_SHIFT != 0) DockSide.RIGHT else DockSide.LEFT val pinned = dock.pinnedOn(side).getOrNull(index) ?: return false dock.togglePinned(pinned.item.id) return true diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeShortcutsDialog.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeShortcutsDialog.kt index b65ff5b63..66af66674 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeShortcutsDialog.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeShortcutsDialog.kt @@ -30,8 +30,8 @@ private val ShortcutGroups = listOf( "Ctrl+N" to "$LANG.search", "Ctrl+W" to "$LANG.close_tab", "Ctrl+S" to "$LANG.save", - "1 - 9" to "$LANG.stripe_left", - "Alt+1 - 9" to "$LANG.stripe_right", + "Alt+1 - 9" to "$LANG.stripe_left", + "Alt+Shift+1 - 9" to "$LANG.stripe_right", "F3+T" to "$LANG.reload_client", ), ), diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt index 1bf6c6f2e..220c2265e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphEditor.kt @@ -60,10 +60,11 @@ internal fun ShaderGraphEditor(file: HollowIdeOpenFile) { } val graph = document.graph - val code = remember(document.revision) { ShaderGraphCompiler.compile(graph) } + val kinds = ShaderNodeTypes.revision + val code = remember(document.revision, kinds) { ShaderGraphCompiler.compile(graph) } val diagnostics = code.diagnostics + listOfNotNull(previewError) val problems = diagnostics.filter { it.node != null }.groupBy { it.node!! } - previews.show(graph, document.revision) + previews.show(graph, document.revision to kinds) val selection = state.selection SideEffect { state.diagnostics = diagnostics } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt index 05da8b9c2..b20f5cb11 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/files/shadergraph/ShaderGraphPreviews.kt @@ -25,7 +25,8 @@ import java.util.concurrent.atomic.AtomicInteger * the graph picked; the rest on a flat quad. */ internal class ShaderGraphPreviews { - private class Frame(val graph: ShaderGraph, val revision: Int) + /** A graph to draw, and what tells one version of it from the next. */ + private class Frame(val graph: ShaderGraph, val revision: Any) @Volatile private var latest: Frame? = null @@ -41,12 +42,12 @@ internal class ShaderGraphPreviews { private var program: ShaderInstance? = null private var programSource: String? = null private var code: ShaderPreviewCode? = null - private var drawnRevision = -1 + private var drawnRevision: Any? = null private var animated = false private val targets = HashMap() /** Called from composition with the graph as it is now. */ - fun show(graph: ShaderGraph, revision: Int) { + fun show(graph: ShaderGraph, revision: Any) { if (latest?.revision != revision) latest = Frame(graph, revision) } @@ -102,16 +103,13 @@ internal class ShaderGraphPreviews { ) { val seconds = (System.nanoTime() - started) / 1_000_000_000f val flat = mesh == ShaderPreviewMesh.QUAD - val (modelView, projection) = if (flat) Matrix4f() to Matrix4f() else camera( - seconds, - graph.preview.rotate, - mesh - ) + val camera = if (flat) PreviewCamera(Matrix4f(), Matrix4f(), Matrix4f()) else camera(seconds, graph.preview.rotate, mesh) if (flat) RenderSystem.disableCull() else RenderSystem.enableCull() val buffer = meshes.of(mesh) buffer.bind() - shader.setDefaultUniforms(VertexFormat.Mode.TRIANGLES, modelView, projection, Minecraft.getInstance().window) + shader.setDefaultUniforms(VertexFormat.Mode.TRIANGLES, camera.view, camera.projection, Minecraft.getInstance().window) + shader.safeGetUniform("PreviewModel").set(camera.model) shader.safeGetUniform("PreviewNode").set(index) shader.safeGetUniform("PreviewTime").set(seconds) shader.safeGetUniform("PreviewFlat").set(if (flat) 1f else 0f) @@ -162,28 +160,32 @@ internal class ShaderGraphPreviews { } } - /** A camera a little above the mesh, turning around it while [rotate] is on, with a cube made small enough to fit. */ - private fun camera(seconds: Float, rotate: Boolean, mesh: ShaderPreviewMesh): Pair { + /** Where the mesh is in the world, and the camera that looks at it. */ + private class PreviewCamera(val model: Matrix4f, val view: Matrix4f, val projection: Matrix4f) + + private fun camera(seconds: Float, rotate: Boolean, mesh: ShaderPreviewMesh): PreviewCamera { val angle = if (rotate) seconds * TURN_SPEED else RESTING_ANGLE val size = if (mesh == ShaderPreviewMesh.CUBE) CUBE_SIZE else 1f - val modelView = Matrix4f().translate(0f, 0f, -CAMERA_DISTANCE).rotateX(CAMERA_TILT).rotateY(angle).scale(size) + val model = Matrix4f().rotateY(angle).scale(size) + val view = Matrix4f().translate(0f, 0f, -CAMERA_DISTANCE).rotateX(CAMERA_TILT) val projection = Matrix4f().perspective(Math.toRadians(FIELD_OF_VIEW).toFloat(), 1f, 0.1f, 20f) - return modelView to projection + return PreviewCamera(model, view, projection) } private fun rebuild(graph: ShaderGraph) { val compiled = ShaderGraphCompiler.compilePreview(graph) val source = ShaderGraphTemplates.preview(compiled) + val vertexSource = ShaderGraphTemplates.previewVertex(compiled) code = compiled animated = - ShaderInput.TIME.glsl in compiled.statements.text || graph.preview.rotate && graph.preview.mesh != ShaderPreviewMesh.QUAD && compiled.spatial.any { it in compiled.previewIndex } + ShaderInput.TIME.glsl in compiled.statements.text || ShaderInput.TIME.glsl in compiled.vertex.text || graph.preview.rotate && graph.preview.mesh != ShaderPreviewMesh.QUAD && compiled.spatial.any { it in compiled.previewIndex } (targets.keys - compiled.previewIndex.keys).forEach { targets.remove(it)?.destroyBuffers() } - if (source == programSource) return + if (vertexSource + source == programSource) return program?.close() program = null - programSource = source - val stage = "${name}_${Integer.toHexString(source.hashCode())}" + programSource = vertexSource + source + val stage = "${name}_${Integer.toHexString((vertexSource + source).hashCode())}" val built = ShaderGraphPrograms.create( name = stage, json = ShaderGraphPrograms.json( @@ -194,13 +196,14 @@ internal class ShaderGraphPreviews { uniforms = listOf( ShaderGraphUniform("ModelViewMat", "matrix4x4", IDENTITY), ShaderGraphUniform("ProjMat", "matrix4x4", IDENTITY), + ShaderGraphUniform("PreviewModel", "matrix4x4", IDENTITY), ShaderGraphUniform("PreviewNode", "int", listOf(0f)), ShaderGraphUniform("PreviewTime", "float", listOf(0f)), ShaderGraphUniform("PreviewFlat", "float", listOf(1f)), ShaderGraphUniform("PreviewPixels", "float", listOf(PIXELS.toFloat())), ) + ShaderGraphPrograms.propertyUniforms(graph.properties), ), - stages = mapOf("vsh" to requireNotNull(ShaderGraphTemplates.PREVIEW.vertexSource), "fsh" to source), + stages = mapOf("vsh" to vertexSource, "fsh" to source), format = meshes.format, ) program = built.getOrNull() @@ -226,7 +229,7 @@ internal class ShaderGraphPreviews { program?.close() program = null programSource = null - drawnRevision = -1 + drawnRevision = null meshes.release() targets.values.forEach(TextureTarget::destroyBuffers) targets.clear() diff --git a/runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json b/runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json index 4317e85a8..7e675406f 100644 --- a/runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json +++ b/runtime/src/main/lang/en_us/hollowengine/gui/shadergraph.json @@ -3,6 +3,7 @@ "category.input": "Input", "category.math": "Math", "category.vector": "Vector", + "category.normal": "Normals", "category.uv": "UV", "category.texture": "Texture", "category.procedural": "Procedural", @@ -117,6 +118,10 @@ "node.procedural.fbm": "Fractal Noise", "node.procedural.voronoi": "Voronoi", "node.procedural.shape": "Shape", + "node.normal.offset": "Offset Along Normal", + "node.normal.bump": "Bump", + "node.normal.surface": "Surface Normal", + "node.normal.lambert": "Lambert Light", "node.procedural.fresnel": "Fresnel", "node.output.surface": "Surface Output" } diff --git a/runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json b/runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json index fd0aa9189..22084b017 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/gui/shadergraph.json @@ -3,6 +3,7 @@ "category.input": "Входы", "category.math": "Математика", "category.vector": "Векторы", + "category.normal": "Нормали", "category.uv": "UV", "category.texture": "Текстуры", "category.procedural": "Процедурные", @@ -117,6 +118,10 @@ "node.procedural.fbm": "Фрактальный шум", "node.procedural.voronoi": "Вороной", "node.procedural.shape": "Фигура", + "node.normal.offset": "Смещение по нормали", + "node.normal.bump": "Рельеф", + "node.normal.surface": "Нормаль поверхности", + "node.normal.lambert": "Освещение по Ламберту", "node.procedural.fresnel": "Френель", "node.output.surface": "Выход поверхности" } diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh index 79ee39fab..df38e78ab 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.fsh @@ -14,8 +14,8 @@ uniform float PreviewPixels; //#uniforms in vec2 texCoord; -in vec3 viewPosition; -in vec3 viewNormal; +in vec3 relativePosition; +in vec3 worldNormal; in vec3 objectPosition; out vec4 fragColor; @@ -54,6 +54,19 @@ vec4 sg_show(vec3 value) { return vec4(value, 1.0); } +// A direction, -1 to 1 on each axis, as a normal map shows one. +vec4 sg_show_signed(vec3 value) { + return vec4(value * 0.5 + 0.5, 1.0); +} + +// The mesh as an offset moved it, lit from above so its shape shows. +vec4 sg_show_shape() { + vec3 normal = normalize(cross(dFdx(relativePosition), dFdy(relativePosition))); + if (dot(normal, relativePosition) > 0.0) normal = -normal; + float light = 0.35 + 0.65 * clamp(dot(normal, normalize(vec3(0.4, 1.0, 0.3))), 0.0, 1.0); + return vec4(vec3(light), 1.0); +} + vec4 sg_show(vec4 value) { return vec4(mix(sg_checker(), value.rgb, clamp(value.a, 0.0, 1.0)), 1.0); } @@ -73,10 +86,10 @@ void main() { vec2 sg_texture_uv = texCoord; vec4 sg_color = vec4(1.0); float sg_time = PreviewTime; - vec3 sg_position = viewPosition; + vec3 sg_position = relativePosition; vec3 sg_object_position = objectPosition; - vec3 sg_normal = normalize(viewNormal); - vec3 sg_view_direction = PreviewFlat > 0.5 ? vec3(0.0, 0.0, 1.0) : normalize(-viewPosition); + vec3 sg_normal = normalize(worldNormal); + vec3 sg_view_direction = PreviewFlat > 0.5 ? vec3(0.0, 0.0, 1.0) : normalize(-relativePosition); vec2 sg_screen_uv = gl_FragCoord.xy / PreviewPixels; //#preview diff --git a/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh index 24e1cab09..9c93d2321 100644 --- a/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh +++ b/runtime/src/main/resources/assets/hollowengine/shaders/graph/preview.vsh @@ -1,7 +1,9 @@ #version 150 -// The previews of a graph: a flat quad over the whole target, or a mesh seen by a small camera. The -// graph's vertex code is not run here; the previews show what each node computes per pixel. +// The previews of a graph: a flat quad over the whole target, or a mesh turned by PreviewModel and +// seen by a small camera. Positions and normals are in the axes of the world, the position relative +// to the camera, as in game. The graph's vertex code runs for the previews that move the mesh: the +// output node's, by its vertex offset, and an offset node's, by what it computes. in vec3 Position; in vec2 UV0; @@ -9,17 +11,41 @@ in vec3 Normal; uniform mat4 ModelViewMat; uniform mat4 ProjMat; +uniform mat4 PreviewModel; +uniform float PreviewTime; +uniform int PreviewNode; +//#uniforms out vec2 texCoord; -out vec3 viewPosition; -out vec3 viewNormal; +out vec3 relativePosition; +out vec3 worldNormal; out vec3 objectPosition; +vec2 sg_frame_uv(vec2 uv) { + return uv; +} + +//#functions + void main() { - vec4 viewPos = ModelViewMat * vec4(Position, 1.0); - gl_Position = ProjMat * viewPos; + vec3 eye = (inverse(ModelViewMat) * vec4(0.0, 0.0, 0.0, 1.0)).xyz; + vec3 world = (PreviewModel * vec4(Position, 1.0)).xyz; + vec2 sg_uv = UV0; + vec2 sg_texture_uv = UV0; + vec3 sg_object_position = Position; + vec3 sg_normal = normalize(mat3(PreviewModel) * Normal); + vec3 sg_position = world - eye; + vec3 sg_view_direction = normalize(eye - world); + vec4 sg_color = vec4(1.0); + float sg_time = PreviewTime; + vec3 sg_out_vertex_offset = vec3(0.0); + + //#vertex + + vec3 moved = world + sg_out_vertex_offset; + gl_Position = ProjMat * ModelViewMat * vec4(moved, 1.0); texCoord = UV0; - viewPosition = viewPos.xyz; - viewNormal = mat3(ModelViewMat) * Normal; + relativePosition = moved - eye; + worldNormal = sg_normal; objectPosition = Position; } diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss index 47f2e070b..fa8b4e663 100644 --- a/runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/shader-graph.hss @@ -10,6 +10,7 @@ $category-vector: #E0B347; $category-uv: #4FC48B; $category-texture: #F07D3A; $category-procedural: #B072E8; +$category-normal: #4FB8C9; $category-output: #E5566A; .graph-node.sg-node { @@ -43,6 +44,7 @@ $category-output: #E5566A; .sg-uv .sg-node-head { background: alpha($category-uv, 0.3); } .sg-texture .sg-node-head { background: alpha($category-texture, 0.32); } .sg-procedural .sg-node-head { background: alpha($category-procedural, 0.34); } +.sg-normal .sg-node-head { background: alpha($category-normal, 0.32); } .sg-output .sg-node-head { background: alpha($category-output, 0.36); } .sg-node-row { diff --git a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt index de9ba27c3..50d17b33e 100644 --- a/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt +++ b/runtime/src/test/kotlin/ru/hollowhorizon/hollowengine/client/shadergraph/ShaderGraphCompilerTest.kt @@ -158,6 +158,41 @@ class ShaderGraphCompilerTest { assertTrue(code.contains("sg_gradient_noise3(sg_0_Position * 8.0)"), code) } + @Test + fun `each stage gets only the functions it calls, so a derivative never reaches the vertex stage`() { + val graph = graph( + ShaderGraphNode("noise", "hollowengine:procedural/gradient_noise"), + ShaderGraphNode("heave", "hollowengine:normal/offset"), + ShaderGraphNode("bump", "hollowengine:normal/bump"), + ShaderGraphNode("light", "hollowengine:normal/lambert"), + links = listOf( + ShaderGraphLink("noise", "Out", "heave", "Amount"), + ShaderGraphLink("heave", "Offset", "out", SurfaceOutputs.VERTEX_OFFSET), + ShaderGraphLink("noise", "Out", "bump", "Height"), + ShaderGraphLink("bump", "Normal", "light", "Normal"), + ShaderGraphLink("light", "Light", "out", SurfaceOutputs.ALPHA), + ), + ) + val code = ShaderGraphCompiler.compile(graph) + + assertTrue(ShaderLibrary.NORMALS in code.fragmentLibraries) + assertFalse(ShaderLibrary.NORMALS in code.vertexLibraries) + assertTrue(ShaderLibrary.GRADIENT_NOISE in code.vertexLibraries) + } + + @Test + fun `the output and every offset node move the mesh in their previews, unless the offset needs a fragment`() { + fun displaced(kind: String, output: String) = ShaderGraphCompiler.compilePreview( + graph( + ShaderGraphNode("from", kind), + links = listOf(ShaderGraphLink("from", output, "out", SurfaceOutputs.VERTEX_OFFSET)), + ) + ).displaced + + assertEquals(setOf("from", "out"), displaced("hollowengine:normal/offset", "Offset")) + assertEquals(emptySet(), displaced("hollowengine:normal/surface", "Normal")) + } + @Test fun `a graph survives a round trip`() { val graph = ShaderNodeLibrary.defaultSurface().copy(properties = listOf(ShaderGraphProperty("Speed", default = listOf(2f)))) From e0e00508f2a9b5dd18b23a30bf22d9d909c5f0dc Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sun, 27 Sep 2026 11:48:34 +0300 Subject: [PATCH 20/25] Add MCP addon, symbol search & snippet runner Introduce a new MCP addon (addons/mcp) providing an embedded MCP server, agent tools (scripts, docs, screenshots, commands), client helpers and tests. Add symbol search and symbol source support to the scripting analyzer (new SymbolSearch.kt, tests) and expose search/symbolSource APIs. Implement snippet compilation/execution refactor (SnippetRunner, ServerConsoleScript) and ConsoleScripts.evaluate. Add frame/render hooks (LevelRendered event, RuntimeBridge, mixin) and FrameCapture + HollowWaitScreen for screenshots. Fix diagnostics line/column conversion and config file-watcher registrations. Move model info command logic to ModelInfo and add related command/localization updates. --- .../common/compiler/CompiledScript.kt | 1 + .../common/compiler/ScriptingCompiler.kt | 16 +- .../ide/session/ScriptingAnalyzerImpl.kt | 18 ++ .../session/completion/CompletionsProvider.kt | 2 +- .../session/definition/DefinitionProvider.kt | 34 ++-- .../ide/session/symbols/SymbolSearch.kt | 187 ++++++++++++++++++ .../src/test/kotlin/SymbolLookupTest.kt | 64 ++++++ addons/mcp/build.gradle.kts | 37 ++++ .../hollowengine/addons/mcp/AgentClient.kt | 35 ++++ .../hollowengine/addons/mcp/HollowMcpAddon.kt | 86 ++++++++ .../hollowengine/addons/mcp/McpCommand.kt | 119 +++++++++++ .../hollowengine/addons/mcp/McpConfig.kt | 34 ++++ .../addons/mcp/McpInstructions.kt | 45 +++++ .../hollowengine/addons/mcp/McpServer.kt | 104 ++++++++++ .../hollowengine/addons/mcp/McpTool.kt | 87 ++++++++ .../addons/mcp/client/Clipboard.kt | 9 + .../addons/mcp/client/FrameCapture.kt | 98 +++++++++ .../addons/mcp/client/ScreenshotTool.kt | 99 ++++++++++ .../addons/mcp/docs/DocsLibrary.kt | 137 +++++++++++++ .../addons/mcp/tools/CodeTools.kt | 151 ++++++++++++++ .../addons/mcp/tools/CommandTool.kt | 90 +++++++++ .../addons/mcp/tools/DocsTools.kt | 68 +++++++ .../addons/mcp/tools/ServerAccess.kt | 27 +++ .../addons/mcp/tools/SnippetTool.kt | 100 ++++++++++ .../main/resources/META-INF/plugin.properties | 7 + .../assets/hollowengine-mcp/lang/en_us.json | 18 ++ .../assets/hollowengine-mcp/lang/ru_ru.json | 18 ++ .../hollowengine-mcp/instructions.md | 50 +++++ addons/mcp/src/test/kotlin/DocsLibraryTest.kt | 69 +++++++ addons/mcp/src/test/kotlin/McpServerTest.kt | 83 ++++++++ .../mixins/client/GameRendererMixin.java | 7 + .../bootstrap/runtime/RuntimeBridge.java | 2 + .../bootstrap/RuntimeBridgeEntrypoint.kt | 4 + .../client/scripting/ConsoleScript.kt | 56 ++---- .../timeline/cutscene/CutsceneCameraSystem.kt | 19 +- .../client/ui/screen/HollowWaitScreen.kt | 29 +++ .../common/commands/HollowEngineCommands.kt | 62 +----- .../hollowengine/common/commands/ModelInfo.kt | 58 ++++++ .../hollowengine/common/config/Config.kt | 13 +- .../events/client/render/RenderTickEvent.kt | 5 + .../npcs/NpcAnimationTransitionPacket.kt | 26 ++- .../scripting/DefaultScriptDefinitions.kt | 22 +++ .../compiling/KotlinCompiledScriptJar.kt | 5 +- .../scripting/console/ServerConsoleScript.kt | 75 +++++++ .../common/scripting/console/SnippetRunner.kt | 79 ++++++++ .../common/scripting/ide/ScriptingAnalyzer.kt | 21 ++ .../lang/en_us/hollowengine/commands.json | 5 +- .../lang/ru_ru/hollowengine/commands.json | 5 +- .../hollowengine/ui/styles/wait-screen.hss | 24 +++ 49 files changed, 2266 insertions(+), 144 deletions(-) create mode 100644 addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/symbols/SymbolSearch.kt create mode 100644 addons/compiler/src/test/kotlin/SymbolLookupTest.kt create mode 100644 addons/mcp/build.gradle.kts create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/AgentClient.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/HollowMcpAddon.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpCommand.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpConfig.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpInstructions.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpServer.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpTool.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/Clipboard.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/FrameCapture.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/ScreenshotTool.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/docs/DocsLibrary.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CodeTools.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CommandTool.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/DocsTools.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/ServerAccess.kt create mode 100644 addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/SnippetTool.kt create mode 100644 addons/mcp/src/main/resources/META-INF/plugin.properties create mode 100644 addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/en_us.json create mode 100644 addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/ru_ru.json create mode 100644 addons/mcp/src/main/resources/hollowengine-mcp/instructions.md create mode 100644 addons/mcp/src/test/kotlin/DocsLibraryTest.kt create mode 100644 addons/mcp/src/test/kotlin/McpServerTest.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowWaitScreen.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/ModelInfo.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/ServerConsoleScript.kt create mode 100644 runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/SnippetRunner.kt create mode 100644 runtime/src/main/resources/assets/hollowengine/ui/styles/wait-screen.hss diff --git a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/CompiledScript.kt b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/CompiledScript.kt index b4a0af0a6..16ecdd190 100644 --- a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/CompiledScript.kt +++ b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/CompiledScript.kt @@ -3,6 +3,7 @@ package ru.hollowhorizon.hollowengine.common.compiler import ru.hollowhorizon.hollowengine.common.scripting.compiling.CompiledScript import ru.hollowhorizon.hollowengine.common.scripting.compiling.HollowEngineScriptEvaluator import ru.hollowhorizon.hollowengine.common.scripting.compiling.ScriptResult +import ru.hollowhorizon.hollowengine.common.scripting.compiling.convert import ru.hollowhorizon.hollowengine.common.scripting.compiling.isClientSideScript import ru.hollowhorizon.hollowengine.common.scripting.ide.ScriptEvaluationException import kotlin.reflect.KClass diff --git a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/ScriptingCompiler.kt b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/ScriptingCompiler.kt index c1ea79f30..220e6d661 100644 --- a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/ScriptingCompiler.kt +++ b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/compiler/ScriptingCompiler.kt @@ -8,6 +8,7 @@ import ru.hollowhorizon.hollowengine.common.scripting.cache.ScriptFingerprint import ru.hollowhorizon.hollowengine.common.scripting.compiling.CompiledScript import ru.hollowhorizon.hollowengine.common.scripting.compiling.ScriptCompilationContext import ru.hollowhorizon.hollowengine.common.scripting.compiling.ScriptingCompiler +import ru.hollowhorizon.hollowengine.common.scripting.compiling.convert import ru.hollowhorizon.hollowengine.common.scripting.deobf.mappings.RemappingClasspath import ru.hollowhorizon.hollowengine.common.scripting.ide.* import ru.hollowhorizon.hollowengine.common.scripting.mixins.MixinSpecLayout @@ -146,18 +147,3 @@ fun List.getDefinitionFor(name: String): Sc ) } } - -fun ScriptDiagnostic.convert(): Diagnostic { - return Diagnostic(this.location?.let { - Range( - Position(it.start.line, it.start.col), - Position(it.end?.line ?: it.start.line, it.end?.col ?: it.start.col) - ) - } ?: Range(Position(-1, -1), Position(-1, -1)), when (this.severity) { - ScriptDiagnostic.Severity.DEBUG -> Severity.DEBUG - ScriptDiagnostic.Severity.INFO -> Severity.INFO - ScriptDiagnostic.Severity.WARNING -> Severity.WARNING - ScriptDiagnostic.Severity.ERROR -> Severity.ERROR - ScriptDiagnostic.Severity.FATAL -> Severity.FATAL - }, this.message) -} diff --git a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/ScriptingAnalyzerImpl.kt b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/ScriptingAnalyzerImpl.kt index 0cb1298b4..acf9c8909 100644 --- a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/ScriptingAnalyzerImpl.kt +++ b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/ScriptingAnalyzerImpl.kt @@ -23,6 +23,9 @@ import ru.hollowhorizon.hollowengine.common.ide.session.insight.findSignatureHel import ru.hollowhorizon.hollowengine.common.ide.session.modules.KaRekotLibraryModule import ru.hollowhorizon.hollowengine.common.ide.session.modules.KaScriptModule import ru.hollowhorizon.hollowengine.common.scripting.ide.* +import ru.hollowhorizon.hollowengine.common.ide.session.symbols.searchSymbols +import ru.hollowhorizon.hollowengine.common.ide.session.symbols.symbolSource +import ru.hollowhorizon.hollowengine.common.scripting.source.SandboxScriptSource import ru.hollowhorizon.hollowengine.common.scripting.source.ScriptImports import ru.hollowhorizon.hollowengine.common.scripting.source.ScriptRegistry import java.io.File @@ -303,6 +306,21 @@ class ScriptingAnalyzerImpl( val file = getOrCreateFile(name, text) return collectImportDiagnostics(name, file) + diagnosticCode(file) } + + @Synchronized + override fun searchSymbols(query: String, limit: Int): List { + return searchSymbols(getOrCreateFile(SymbolLookupScript, ""), query, limit) + } + + @Synchronized + override fun symbolSource(qualifiedName: String): DefinitionLocation? { + return symbolSource(getOrCreateFile(SymbolLookupScript, ""), qualifiedName) + } + + private companion object { + /** An empty sandbox script, so name lookups see the classpath the project's own scripts compile against. */ + val SymbolLookupScript = "${SandboxScriptSource.SCRIPTS_DIRECTORY}/.symbol-lookup.kts" + } } private fun removeFromPsiManager(file: KtFile) { diff --git a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/completion/CompletionsProvider.kt b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/completion/CompletionsProvider.kt index 1fa8902db..9484dd17d 100644 --- a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/completion/CompletionsProvider.kt +++ b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/completion/CompletionsProvider.kt @@ -395,7 +395,7 @@ private fun CompletionItemsCollector.completeScopeContext(file: KtFile, element: } context(session: KaSession) -private fun getKotlinDeclarationsFromIndex(ktFile: KtFile, filter: (Name) -> Boolean): Sequence { +internal fun getKotlinDeclarationsFromIndex(ktFile: KtFile, filter: (Name) -> Boolean): Sequence { with(session) { val factory = KotlinDeclarationProviderFactory.getInstance(ktFile.project) val declarationProvider = factory.createDeclarationProvider(analysisScope, useSiteModule) diff --git a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/definition/DefinitionProvider.kt b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/definition/DefinitionProvider.kt index f3548bd75..aa27766fc 100644 --- a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/definition/DefinitionProvider.kt +++ b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/definition/DefinitionProvider.kt @@ -54,7 +54,7 @@ private fun List.pickDefinitionSymbol(): KaDeclarationSymbol? { ?: firstNotNullOfOrNull { it as? KaDeclarationSymbol } } -private fun ScriptingAnalyzerImpl.definitionForSymbol(symbol: KaDeclarationSymbol): DefinitionLocation? { +internal fun ScriptingAnalyzerImpl.definitionForSymbol(symbol: KaDeclarationSymbol): DefinitionLocation? { val targetPsi = symbol.psi runCatching { targetPsi?.toDefinitionLocation()?.let { return it } @@ -174,7 +174,7 @@ private object CfrDefinitionDecompiler { if (!classPath.endsWith(".class") || "!/" !in classPath) return null val key = classPath val text = cache.getOrPut(key) { - decompileClass(classPath) ?: return null + decompileClass(classFile) ?: return null } return DefinitionLocation( path = "decompiled/${classPath.substringAfterLast("!/").removeSuffix(".class")}.java", @@ -184,25 +184,21 @@ private object CfrDefinitionDecompiler { ) } - private fun decompileClass(classPath: String): String? { - val jarPath = classPath.substringBefore("!/") - val entryName = classPath.substringAfter("!/") + /** + * Copies [classFile] and its nested classes out of whatever file system holds them, a jar or the + * JDK's module image, into a directory CFR can read, and decompiles the outer class there. + */ + private fun decompileClass(classFile: VirtualFile): String? { + val entryName = classFile.path.substringAfterLast("!/") + val outerClass = classFile.nameWithoutExtension.substringBefore('$') + val siblings = classFile.parent?.children.orEmpty() + .filter { it.extension == "class" && it.nameWithoutExtension.substringBefore('$') == outerClass } val tempRoot = Files.createTempDirectory("hollowengine-cfr-") return try { - JarFile(File(jarPath)).use { jar -> - val outerClassPrefix = entryName.removeSuffix(".class").substringBefore('$') - jar.entries().asSequence() - .filter { !it.isDirectory && it.name.endsWith(".class") && it.name.removeSuffix(".class").substringBefore('$') == outerClassPrefix } - .forEach { entry -> - val target = tempRoot.resolve(entry.name) - Files.createDirectories(target.parent) - jar.getInputStream(entry).use { input -> - Files.copy(input, target) - } - } - } - val targetClass = tempRoot.resolve(entryName) - CfrSourceDecompiler.decompile(targetClass.absolutePathString()) + val packageDirectory = tempRoot.resolve(entryName).parent + Files.createDirectories(packageDirectory) + siblings.forEach { sibling -> Files.write(packageDirectory.resolve(sibling.name), sibling.contentsToByteArray()) } + CfrSourceDecompiler.decompile(tempRoot.resolve(entryName).absolutePathString()) } finally { tempRoot.toFile().deleteRecursively() } diff --git a/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/symbols/SymbolSearch.kt b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/symbols/SymbolSearch.kt new file mode 100644 index 000000000..4c9d83b16 --- /dev/null +++ b/addons/compiler/src/main/java/ru/hollowhorizon/hollowengine/common/ide/session/symbols/SymbolSearch.kt @@ -0,0 +1,187 @@ +package ru.hollowhorizon.hollowengine.common.ide.session.symbols + +import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.analyze +import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KaTypeRendererForSource +import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KaClassLikeSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KaDeclarationSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KaFunctionSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KaPropertySymbol +import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolVisibility +import org.jetbrains.kotlin.analysis.api.symbols.markers.KaTypeParameterOwnerSymbol +import org.jetbrains.kotlin.analysis.api.types.KaType +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.types.Variance +import ru.hollowhorizon.hollowengine.common.ide.session.ScriptingAnalyzerImpl +import ru.hollowhorizon.hollowengine.common.ide.session.completion.getKotlinDeclarationsFromIndex +import ru.hollowhorizon.hollowengine.common.ide.session.definition.definitionForSymbol +import ru.hollowhorizon.hollowengine.common.ide.session.index.JavaClassNameIndex +import ru.hollowhorizon.hollowengine.common.scripting.ide.DefinitionLocation +import ru.hollowhorizon.hollowengine.common.scripting.ide.SymbolKind +import ru.hollowhorizon.hollowengine.common.scripting.ide.SymbolMatch + +/** + * Classes from the class-file index and Kotlin top-level declarations from the declaration index, both + * seen from [file], ranked by how closely their simple name matches the query. + */ +internal fun ScriptingAnalyzerImpl.searchSymbols(file: KtFile, query: String, limit: Int): List { + val pattern = SymbolQuery.parse(query) ?: return emptyList() + val found = LinkedHashMap() + + fun offer(rank: Int, match: SymbolMatch) { + val key = match.qualifiedName + match.signature + val existing = found[key] + if (existing == null || rank < existing.rank) found[key] = RankedMatch(rank, match) + } + + analyze(file) { + getKotlinDeclarationsFromIndex(file) { name -> pattern.rank(name) != null }.forEach { symbol -> + val match = symbolMatch(symbol) ?: return@forEach + if (!pattern.qualifies(match.qualifiedName)) return@forEach + val rank = pattern.rank(match.qualifiedName.substringAfterLast('.')) ?: return@forEach + offer(rank, match) + } + } + + JavaClassNameIndex.getInstance(project).classes({ name -> pattern.rank(name) != null }).forEach { javaClass -> + if (javaClass.name.asString().first().isDigit() || !pattern.qualifies(javaClass.fqName)) return@forEach + val rank = pattern.rank(javaClass.name) ?: return@forEach + val kind = if (javaClass.isAnnotation) SymbolKind.ANNOTATION else SymbolKind.CLASS + offer(rank, SymbolMatch(kind, javaClass.fqName)) + } + + return found.values + .sortedWith( + compareBy { it.rank } + .thenBy { originOrder(it.match.qualifiedName) } + .thenBy { it.match.kind } + .thenBy { it.match.qualifiedName.length } + .thenBy { it.match.qualifiedName }, + ) + .take(limit) + .map(RankedMatch::match) +} + +/** + * The declaration [qualifiedName] names: a class (nested ones spelled with dots), a member of one, or a + * top-level function or property. Overloads resolve to the first one declared. + */ +internal fun ScriptingAnalyzerImpl.symbolSource(file: KtFile, qualifiedName: String): DefinitionLocation? { + val fqName = runCatching { FqName(qualifiedName.trim()) }.getOrNull() ?: return null + if (fqName.isRoot) return null + val symbol = analyze(file) { + findClassNamed(fqName) + ?: findMember(fqName) + ?: findTopLevelCallables(fqName.parent(), fqName.shortName()).firstOrNull() + } ?: return null + return definitionForSymbol(symbol) +} + +private class RankedMatch(val rank: Int, val match: SymbolMatch) + +/** Among equally close names, the game's and the engine's come first and the JDK's internals last. */ +private fun originOrder(qualifiedName: String): Int = when { + PREFERRED_PACKAGES.any(qualifiedName::startsWith) -> 0 + INTERNAL_PACKAGES.any(qualifiedName::startsWith) -> 2 + else -> 1 +} + +private val PREFERRED_PACKAGES = listOf("net.minecraft.", "com.mojang.", "ru.hollowhorizon.") +private val INTERNAL_PACKAGES = listOf("sun.", "com.sun.", "jdk.", "org.w3c.", "org.xml.", "javax.swing.", "java.awt.") + +/** A query split into the simple name to match and the part of the qualifier it was written with. */ +private class SymbolQuery(private val name: String, private val qualifier: String) { + /** Lower is closer; null when [simpleName] does not match at all. */ + fun rank(simpleName: Name): Int? = rank(simpleName.asString()) + + fun rank(simpleName: String): Int? = when { + simpleName == name -> 0 + simpleName.equals(name, ignoreCase = true) -> 1 + simpleName.startsWith(name, ignoreCase = true) -> 2 + simpleName.contains(name, ignoreCase = true) -> 3 + else -> null + } + + fun qualifies(qualifiedName: String): Boolean = + qualifier.isEmpty() || qualifiedName.substringBeforeLast('.', "").contains(qualifier, ignoreCase = true) + + companion object { + fun parse(query: String): SymbolQuery? { + val trimmed = query.trim().trim('.') + val name = trimmed.substringAfterLast('.') + if (name.isEmpty()) return null + return SymbolQuery(name, trimmed.substringBeforeLast('.', "")) + } + } +} + +/** Null for what a script cannot reach: anything not public, and local or anonymous declarations. */ +context(session: KaSession) +private fun symbolMatch(symbol: KaDeclarationSymbol): SymbolMatch? = with(session) { + if (symbol.visibility != KaSymbolVisibility.PUBLIC) return null + when (symbol) { + is KaClassLikeSymbol -> SymbolMatch(SymbolKind.CLASS, symbol.classId?.asFqNameString() ?: return null) + is KaCallableSymbol -> SymbolMatch( + kind = if (symbol is KaFunctionSymbol) SymbolKind.FUNCTION else SymbolKind.PROPERTY, + qualifiedName = symbol.callableId?.asSingleFqName()?.asString() ?: return null, + signature = signature(symbol), + ) + else -> null + } +} + +/** + * A one-line declaration with its receiver and type parameters, and `= …` after every parameter that + * has a default, which is what tells a caller which arguments it can leave out. + */ +context(session: KaSession) +private fun signature(symbol: KaCallableSymbol): String = with(session) { + fun render(type: KaType) = type.render(KaTypeRendererForSource.WITH_SHORT_NAMES, Variance.INVARIANT) + buildString { + append( + when (symbol) { + is KaFunctionSymbol -> "fun " + is KaPropertySymbol -> if (symbol.isVal) "val " else "var " + else -> "" + } + ) + val typeParameters = (symbol as? KaTypeParameterOwnerSymbol)?.typeParameters.orEmpty() + if (typeParameters.isNotEmpty()) { + append(typeParameters.joinToString(", ", "<", "> ") { it.name.asString() }) + } + symbol.receiverParameter?.let { receiver -> append(render(receiver.returnType)).append('.') } + append(symbol.callableId?.callableName?.asString().orEmpty()) + if (symbol is KaFunctionSymbol) { + append(symbol.valueParameters.joinToString(", ", "(", ")") { parameter -> + val vararg = if (parameter.isVararg) "vararg " else "" + val default = if (parameter.hasDefaultValue) " = …" else "" + "$vararg${parameter.name.asString()}: ${render(parameter.returnType)}$default" + }) + } + append(": ").append(render(symbol.returnType)) + } +} + +/** Tries every split of [fqName] into package and class, the longest package first. */ +context(session: KaSession) +private fun findClassNamed(fqName: FqName): KaClassSymbol? = with(session) { + val segments = fqName.pathSegments() + for (packageSize in segments.size - 1 downTo 0) { + val packageFqName = FqName.fromSegments(segments.take(packageSize).map(Name::asString)) + val relativeName = FqName.fromSegments(segments.drop(packageSize).map(Name::asString)) + findClass(ClassId(packageFqName, relativeName, isLocal = false))?.let { return it } + } + null +} + +context(session: KaSession) +private fun findMember(fqName: FqName): KaDeclarationSymbol? = with(session) { + val owner = findClassNamed(fqName.parent()) ?: return null + val scope = owner.combinedDeclaredMemberScope + scope.callables(fqName.shortName()).firstOrNull() ?: scope.classifiers(fqName.shortName()).firstOrNull() +} diff --git a/addons/compiler/src/test/kotlin/SymbolLookupTest.kt b/addons/compiler/src/test/kotlin/SymbolLookupTest.kt new file mode 100644 index 000000000..bf5899b8e --- /dev/null +++ b/addons/compiler/src/test/kotlin/SymbolLookupTest.kt @@ -0,0 +1,64 @@ +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance +import ru.hollowhorizon.hollowengine.common.ScriptingEnvironmentImpl +import ru.hollowhorizon.hollowengine.common.scripting.ScriptClassProvider +import ru.hollowhorizon.hollowengine.common.scripting.deobf.mappings.Mappings +import ru.hollowhorizon.hollowengine.common.scripting.ide.SymbolKind +import java.io.File +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertNull +import kotlin.test.assertTrue + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class SymbolLookupTest { + private val fixture = AnalysisEnvironmentTestFixture { + ScriptingEnvironmentImpl( + javaHome = File(System.getProperty("java.home")), + classpath = System.getProperty("java.class.path").split(File.pathSeparator) + .filter(String::isNotBlank).map(::File).filter(File::exists).distinctBy { it.absoluteFile.normalize() }, + scriptTypes = listOf(ScriptClassProvider("kts", "kotlin.Any")), + mappings = Mappings.EMPTY, + ) + } + + private val analyzer get() = fixture.environment.analyzer + + @BeforeAll + fun startEnvironment() = fixture.start() + + @AfterAll + fun closeEnvironment() = fixture.close() + + @Test + fun `an exact name ranks before names that only contain it`() { + val matches = analyzer.searchSymbols("ScriptClassProvider", 20) + assertEquals("ru.hollowhorizon.hollowengine.common.scripting.ScriptClassProvider", matches.first().qualifiedName) + assertEquals(SymbolKind.CLASS, matches.first().kind) + } + + @Test + fun `extension functions show their receiver and which parameters have defaults`() { + val match = analyzer.searchSymbols("collections.joinToString", 20) + .first { it.kind == SymbolKind.FUNCTION && it.qualifiedName == "kotlin.collections.joinToString" } + assertTrue(".joinToString(separator: CharSequence = …" in match.signature, match.signature) + } + + @Test + fun `a qualifier narrows the search to matching packages`() { + val matches = analyzer.searchSymbols("util.ArrayList", 50) + assertTrue(matches.isNotEmpty()) + assertTrue(matches.all { "util" in it.qualifiedName.substringBeforeLast('.') }, matches.toString()) + } + + @Test + fun `sources resolve classes, nested classes, members and top-level functions`() { + val member = assertNotNull(analyzer.symbolSource("java.util.ArrayList.trimToSize")) + assertTrue(member.text!!.startsWith("trimToSize", member.offset), member.path) + assertNotNull(analyzer.symbolSource("java.util.Map.Entry")) + assertNotNull(analyzer.symbolSource("kotlin.collections.joinToString")) + assertNull(analyzer.symbolSource("no.such.Thing")) + } +} diff --git a/addons/mcp/build.gradle.kts b/addons/mcp/build.gradle.kts new file mode 100644 index 000000000..bbb0d461a --- /dev/null +++ b/addons/mcp/build.gradle.kts @@ -0,0 +1,37 @@ +base { + archivesName.set("HollowEngineMcp") +} + +val mcpSdkVersion = "0.15.0" +val ktorVersion = "3.5.1" + +dependencies { + add("addonLibraries", "io.modelcontextprotocol:kotlin-sdk-server:$mcpSdkVersion") + add("addonLibraries", "io.ktor:ktor-server-cio:$ktorVersion") +} + +val docsDirectory = rootProject.layout.projectDirectory.dir("docs/en") +val docsPageList = tasks.register("docsPageList") { + val pages = docsDirectory + val output = layout.buildDirectory.file("generated/docs/pages.txt") + inputs.dir(pages) + outputs.file(output) + doLast { + val root = pages.asFile + val paths = root.walkTopDown() + .filter { it.isFile && it.extension == "mdx" } + .map { it.relativeTo(root).invariantSeparatorsPath } + .sorted() + output.get().asFile.writeText(paths.joinToString("\n")) + } +} + +tasks.named("processResources") { + from(docsDirectory) { + into("hollowengine-mcp/docs") + include("**/*.mdx") + } + from(docsPageList) { + into("hollowengine-mcp/docs") + } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/AgentClient.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/AgentClient.kt new file mode 100644 index 000000000..d76b81f90 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/AgentClient.kt @@ -0,0 +1,35 @@ +package ru.hollowhorizon.hollowengine.addons.mcp + +/** The agents `/he mcp` can copy a connection for; each spells the same address and token its own way. */ +internal enum class AgentClient(val id: String, val title: String, val color: Int, val hint: String) { + CLAUDE_CODE("claude", "Claude Code", 0xD97757, "A terminal command that adds this server to Claude Code") { + override fun connection(url: String, token: String) = + "claude mcp add --transport http hollowengine $url --header \"Authorization: Bearer $token\"" + }, + CODEX("codex", "Codex", 0x10A37F, "A block for ~/.codex/config.toml") { + override fun connection(url: String, token: String) = """ + [mcp_servers.hollowengine] + url = "$url" + http_headers = { "Authorization" = "Bearer $token" } + """.trimIndent() + }, + JSON("json", "JSON", 0xE5C07B, "An mcpServers entry for Cursor and other clients that read one") { + override fun connection(url: String, token: String) = """ + { + "mcpServers": { + "hollowengine": { + "url": "$url", + "headers": { "Authorization": "Bearer $token" } + } + } + } + """.trimIndent() + }, + TOKEN("token", "Token", 0x8F9BAD, "The access token alone") { + override fun connection(url: String, token: String) = token + }; + + abstract fun connection(url: String, token: String): String + + val hintKey: String get() = "hollowengine_mcp.command.hint.$id" +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/HollowMcpAddon.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/HollowMcpAddon.kt new file mode 100644 index 000000000..2e9833aa4 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/HollowMcpAddon.kt @@ -0,0 +1,86 @@ +package ru.hollowhorizon.hollowengine.addons.mcp + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import net.minecraft.network.chat.Component +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.addons.mcp.client.screenshotTool +import ru.hollowhorizon.hollowengine.addons.mcp.docs.DocsLibrary +import ru.hollowhorizon.hollowengine.addons.mcp.tools.codeTools +import ru.hollowhorizon.hollowengine.addons.mcp.tools.docsTools +import ru.hollowhorizon.hollowengine.addons.mcp.tools.runCommandTool +import ru.hollowhorizon.hollowengine.addons.mcp.tools.runSnippetTool +import ru.hollowhorizon.hollowengine.common.addons.HollowAddonContext +import ru.hollowhorizon.hollowengine.common.addons.HollowAddonEntrypoint +import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent +import ru.hollowhorizon.hollowengine.common.events.registry.RegisterCommandsEvent +import ru.hollowhorizon.hollowengine.common.utils.isPhysicalClient + +class HollowMcpAddon : HollowAddonEntrypoint { + @Volatile + private var server: McpServer? = null + + /** Why the server is not running, when it is not. */ + @Volatile + private var status: Component = Component.translatableWithFallback( + "hollowengine_mcp.command.status.starting", "The MCP server has not started yet", + ) + + private val command = McpCommand(server = { server }, status = { status }) + + override suspend fun load(context: HollowAddonContext, scope: CoroutineScope) { + McpConfig.initialize() + if (!McpConfig.enabled) { + status = Component.translatableWithFallback( + "hollowengine_mcp.command.status.disabled", + "The server is off: set enabled = true in config/hollowengine-mcp.toml and restart the game", + ) + HollowEngine.LOGGER.info("The MCP server is off in config/hollowengine-mcp.toml") + return + } + + val docs = DocsLibrary.load(context.classLoader, DOCS_ROOT) + val tools = buildList { + add(runCommandTool()) + add(runSnippetTool()) + addAll(codeTools()) + addAll(docsTools(docs)) + if (isPhysicalClient) add(screenshotTool()) + } + val instructions = McpInstructions(context.classLoader) + val mcp = McpServer(context.descriptor.version, tools, instructions::render) + val port = McpConfig.port + val started = withContext(Dispatchers.IO) { + runCatching { mcp.start(port, McpConfig.ensureToken(), context.classLoader) } + } + started.onFailure { error -> + status = Component.translatableWithFallback( + "hollowengine_mcp.command.status.port_taken", + "Port %s is taken; pick another in config/hollowengine-mcp.toml and restart the game", + port, + ) + HollowEngine.LOGGER.error("The MCP server could not listen on port {}", port, error) + return + } + server = mcp + HollowEngine.LOGGER.info("MCP server listening on {}; /he mcp copies the connection for an agent", mcp.url) + } + + override suspend fun unload(context: HollowAddonContext) { + withContext(Dispatchers.IO) { server?.stop() } + server = null + } + + @SubscribeEvent(-1) + fun registerCommands(event: RegisterCommandsEvent) { + val root = requireNotNull(event.dispatcher.root.getChild("hollowengine")) { + "The HollowEngine root command must be registered before addon commands" + } + command.register(root) + } + + private companion object { + const val DOCS_ROOT = "hollowengine-mcp/docs" + } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpCommand.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpCommand.kt new file mode 100644 index 000000000..158a66a64 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpCommand.kt @@ -0,0 +1,119 @@ +package ru.hollowhorizon.hollowengine.addons.mcp + +import com.mojang.brigadier.tree.CommandNode +import net.minecraft.ChatFormatting +import net.minecraft.commands.CommandSourceStack +import net.minecraft.commands.Commands +import net.minecraft.network.chat.ClickEvent +import net.minecraft.network.chat.Component +import net.minecraft.network.chat.HoverEvent +import net.minecraft.network.chat.MutableComponent +import ru.hollowhorizon.hollowengine.addons.mcp.client.copyToClipboard +import ru.hollowhorizon.hollowengine.common.utils.isPhysicalClient + +/** + * `/he mcp` shows whether the server runs and offers the connection for each [AgentClient]; + * `/he mcp copy ` puts it on the clipboard. The connection carries the token, so it never + * appears in chat or in the log: only the host of a local world can copy it, straight into this + * game's clipboard, since the server listens on this computer alone. + */ +internal class McpCommand(private val server: () -> McpServer?, private val status: () -> Component) { + fun register(root: CommandNode) { + val copy = Commands.literal("copy") + AgentClient.entries.forEach { client -> + copy.then(Commands.literal(client.id).executes { context -> copy(context.source, client) }) + } + val command = Commands.literal("mcp") + .requires { source -> isHost(source) || source.hasPermission(4) } + .executes { context -> show(context.source) } + .then(copy) + root.addChild(command.build()) + } + + private fun show(source: CommandSourceStack): Int { + val mcp = server() + val url = mcp?.url + val rows = buildList { + add(title(running = url != null, url)) + when { + url == null -> add(status().copy().withStyle(ChatFormatting.GRAY)) + isHost(source) -> { + add(text("copy", "Copy the connection for your agent:").withStyle(ChatFormatting.GRAY)) + add(buttons()) + } + else -> add( + text( + "elsewhere", + "Agents connect on the machine this game runs on, with the token from config/hollowengine-mcp.toml", + ).withStyle(ChatFormatting.GRAY) + ) + } + } + source.sendSystemMessage(panel(rows)) + return if (url != null) 1 else 0 + } + + private fun copy(source: CommandSourceStack, client: AgentClient): Int { + if (!isHost(source)) { + source.sendFailure(text("host_only", "Only the host of a local world can copy the connection: agents reach it on this computer alone")) + return 0 + } + val url = server()?.url ?: return 0.also { source.sendFailure(status()) } + copyToClipboard(client.connection(url, McpConfig.token)) + source.player?.displayClientMessage( + text("copied", "Copied the connection for %s", client.title).withStyle(ChatFormatting.GREEN), + true, + ) + return 1 + } + + /** Whether [source] is the player hosting this very game's world, whose clipboard is this computer's. */ + private fun isHost(source: CommandSourceStack): Boolean { + if (!isPhysicalClient) return false + val player = source.player ?: return false + return source.server.isSingleplayerOwner(player.gameProfile) + } + + private fun title(running: Boolean, url: String?): MutableComponent { + val state = if (running) text("running", "running") else text("stopped", "stopped") + return Component.literal("HollowEngine MCP").withStyle(ChatFormatting.BOLD, ChatFormatting.WHITE) + .append(Component.literal(" ● ").withStyle(if (running) ChatFormatting.GREEN else ChatFormatting.RED)) + .append(state.withStyle(if (running) ChatFormatting.GREEN else ChatFormatting.RED)) + .apply { if (url != null) append(Component.literal(" $url").withStyle(ChatFormatting.DARK_GRAY)) } + } + + private fun buttons(): MutableComponent { + val row = Component.empty() + AgentClient.entries.forEachIndexed { index, client -> + if (index > 0) row.append(Component.literal(" ")) + val hint = Component.translatableWithFallback(client.hintKey, client.hint) + .append(Component.literal("\n")) + .append(text("hint_token", "Carries the access token").withStyle(ChatFormatting.DARK_GRAY)) + row.append( + Component.literal("[ ${client.title} ]").withStyle { style -> + style.withColor(client.color).withBold(true) + .withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND, "/hollowengine mcp copy ${client.id}")) + .withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, hint)) + } + ) + } + return row + } + + /** Rows set off from the rest of the chat by an accent bar down their left edge. */ + private fun panel(rows: List): Component { + val panel = Component.empty() + rows.forEachIndexed { index, row -> + if (index > 0) panel.append(Component.literal("\n")) + panel.append(Component.literal("▍ ").withColor(ACCENT)).append(row) + } + return panel + } + + private fun text(key: String, fallback: String, vararg args: Any): MutableComponent = + Component.translatableWithFallback("hollowengine_mcp.command.$key", fallback, *args) + + private companion object { + const val ACCENT = 0x4C86E0 + } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpConfig.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpConfig.kt new file mode 100644 index 000000000..d5311b880 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpConfig.kt @@ -0,0 +1,34 @@ +package ru.hollowhorizon.hollowengine.addons.mcp + +import ru.hollowhorizon.hollowengine.common.config.Config +import ru.hollowhorizon.hollowengine.common.config.ConfigName +import ru.hollowhorizon.hollowengine.common.config.PropertyComment +import ru.hollowhorizon.hollowengine.common.config.PropertyName +import ru.hollowhorizon.hollowengine.common.utils.isPhysicalClient +import java.security.SecureRandom +import java.util.Base64 + +@ConfigName("hollowengine-mcp") +object McpConfig : Config() { + @PropertyComment("Starts the MCP server coding agents connect to. Off by default on dedicated servers") + @PropertyName("enabled") + var enabled by property(isPhysicalClient) + + @PropertyComment("Port the server listens on. It only ever binds to 127.0.0.1") + @PropertyName("port") + var port by property(25590) + + @PropertyComment("Agents send it as 'Authorization: Bearer '. Generated when empty; clear it to issue a new one") + @PropertyName("token") + var token by property("") + + /** The token, generated and saved on the first start. */ + fun ensureToken(): String { + token.takeIf(String::isNotBlank)?.let { return it } + val bytes = ByteArray(24).also(SecureRandom()::nextBytes) + return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes).also { generated -> + token = generated + save(force = true) + } + } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpInstructions.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpInstructions.kt new file mode 100644 index 000000000..8eb2905e1 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpInstructions.kt @@ -0,0 +1,45 @@ +package ru.hollowhorizon.hollowengine.addons.mcp + +import ru.hollowhorizon.hollowengine.addons.mcp.tools.ServerAccess +import ru.hollowhorizon.hollowengine.common.files.DirectoryManager +import ru.hollowhorizon.hollowengine.common.scripting.ScriptingEnvironment +import ru.hollowhorizon.hollowengine.common.utils.isPhysicalClient + +const val COMPILER_MISSING = "The Kotlin compiler addon is not installed in this game, so Kotlin code can be " + + "neither analyzed nor compiled. Ask the user to put the HollowEngineCompiler jar from the same " + + "HollowEngine release into the mods folder (or hollowengine/addons) and restart the game." + +/** + * What an agent reads when it connects: the working guide shipped as `instructions.md` next to the + * docs, with this game's paths filled in, followed by the game as it is right now. + */ +internal class McpInstructions(classLoader: ClassLoader) { + private val guide = classLoader.getResourceAsStream(GUIDE)?.bufferedReader()?.use { it.readText() } + ?.replace("{scripts}", DirectoryManager.HOLLOW_ENGINE.resolve("scripts").toString()) + ?.replace("{log}", DirectoryManager.HOLLOW_ENGINE.resolveSibling("logs").resolve("latest.log").toString()) + ?.trimEnd() + .orEmpty() + + fun render(): String = buildString { + appendLine(guide) + appendLine() + appendLine("## Right now") + appendLine() + appendLine("This is ${sideDescription()}.") + if (!ScriptingEnvironment.isAvailable()) appendLine(COMPILER_MISSING) + }.trimEnd() + + private fun sideDescription(): String { + val server = ServerAccess.current() + return when { + !isPhysicalClient -> "a dedicated server" + server != null -> "a game client with a local world open; screenshot is available" + else -> "a game client in the menu or on a remote server, so only client-side tools and snippets " + + "work until a local world is opened; screenshot is available" + } + } + + private companion object { + const val GUIDE = "hollowengine-mcp/instructions.md" + } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpServer.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpServer.kt new file mode 100644 index 000000000..66fd01a9d --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpServer.kt @@ -0,0 +1,104 @@ +package ru.hollowhorizon.hollowengine.addons.mcp + +import io.ktor.http.HttpHeaders +import io.ktor.http.HttpStatusCode +import io.ktor.server.application.Application +import io.ktor.server.application.ApplicationCallPipeline +import io.ktor.server.application.call +import io.ktor.server.cio.CIO +import io.ktor.server.cio.CIOApplicationEngine +import io.ktor.server.engine.EmbeddedServer +import io.ktor.server.engine.embeddedServer +import io.ktor.server.response.respondText +import io.modelcontextprotocol.kotlin.sdk.server.Server +import io.modelcontextprotocol.kotlin.sdk.server.ServerOptions +import io.modelcontextprotocol.kotlin.sdk.server.mcpStreamableHttp +import io.modelcontextprotocol.kotlin.sdk.types.Implementation +import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities +import io.modelcontextprotocol.kotlin.sdk.types.ToolAnnotations +import kotlinx.coroutines.CancellationException +import ru.hollowhorizon.hollowengine.HollowEngine +import java.security.MessageDigest + +/** + * The HTTP endpoint agents connect to. Every agent connection opens its own MCP session, and all of + * them share [toolset]; [instructions] is asked again for each session, so it reports the game as it is + * when the agent connects. + */ +class McpServer( + private val version: String, + private val toolset: List, + private val instructions: () -> String, +) { + private var engine: EmbeddedServer? = null + private var boundPort = 0 + + /** Where agents connect, or null while the server is not running. */ + val url: String? get() = engine?.let { "http://$HOST:$boundPort$PATH" } + + /** Binds [port] on the loopback interface; throws when the port is taken. */ + fun start(port: Int, token: String, classLoader: ClassLoader) { + val server = embeddedServer(CIO, host = HOST, port = port) { + requireToken(token) + mcpStreamableHttp(path = PATH) { createSession() } + } + val thread = Thread.currentThread() + val previous = thread.contextClassLoader + thread.contextClassLoader = classLoader + try { + server.start(wait = false) + } finally { + thread.contextClassLoader = previous + } + engine = server + boundPort = port + } + + fun stop() { + engine?.stop(gracePeriodMillis = 200, timeoutMillis = 2_000) + engine = null + } + + private fun createSession(): Server = Server( + serverInfo = Implementation(name = "hollowengine", version = version, title = "HollowEngine"), + options = ServerOptions(capabilities = ServerCapabilities(tools = ServerCapabilities.Tools(listChanged = false))), + instructionsProvider = instructions, + ) { + toolset.forEach { tool -> + addTool( + name = tool.name, + description = tool.description, + inputSchema = tool.schema, + toolAnnotations = ToolAnnotations(readOnlyHint = tool.readOnly, destructiveHint = false), + ) { request -> runTool(tool, ToolArguments(request.arguments)) } + } + } + + private suspend fun runTool(tool: McpTool, arguments: ToolArguments) = try { + tool.handler(arguments) + } catch (error: CancellationException) { + throw error + } catch (error: ToolInputException) { + errorResult(error.message.orEmpty()) + } catch (error: Exception) { + HollowEngine.LOGGER.error("MCP tool '{}' failed", tool.name, error) + errorResult("${tool.name} failed: ${error.message ?: error::class.simpleName}") + } + + /** Answers 401 to any request without the token. The comparison takes the same time for any input. */ + private fun Application.requireToken(token: String) { + val expected = "Bearer $token".toByteArray() + intercept(ApplicationCallPipeline.Plugins) { + val presented = call.request.headers[HttpHeaders.Authorization]?.toByteArray() + if (presented == null || !MessageDigest.isEqual(presented, expected)) { + call.respondText("Missing or wrong bearer token", status = HttpStatusCode.Unauthorized) + finish() + } + } + } + + companion object { + const val HOST = "127.0.0.1" + const val PATH = "/mcp" + } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpTool.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpTool.kt new file mode 100644 index 000000000..56960099f --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/McpTool.kt @@ -0,0 +1,87 @@ +package ru.hollowhorizon.hollowengine.addons.mcp + +import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult +import io.modelcontextprotocol.kotlin.sdk.types.ContentBlock +import io.modelcontextprotocol.kotlin.sdk.types.TextContent +import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.booleanOrNull +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.doubleOrNull +import kotlinx.serialization.json.intOrNull +import kotlinx.serialization.json.put +import kotlinx.serialization.json.putJsonArray + +/** A tool agents can call. [readOnly] tools only look at the game and never change it. */ +class McpTool( + val name: String, + val description: String, + val parameters: List, + val readOnly: Boolean, + val handler: suspend (ToolArguments) -> CallToolResult, +) { + val schema: ToolSchema + get() = ToolSchema( + properties = buildJsonObject { + parameters.forEach { parameter -> put(parameter.name, parameter.schema()) } + }, + required = parameters.filter(ToolParameter::required).map(ToolParameter::name), + ) +} + +enum class ParameterType(val jsonName: String) { STRING("string"), INTEGER("integer"), NUMBER("number"), BOOLEAN("boolean") } + +class ToolParameter( + val name: String, + val type: ParameterType, + val description: String, + val required: Boolean = false, + val allowed: List = emptyList(), +) { + fun schema(): JsonObject = buildJsonObject { + put("type", type.jsonName) + put("description", description) + if (allowed.isNotEmpty()) putJsonArray("enum") { allowed.forEach { add(JsonPrimitive(it)) } } + } +} + +/** Thrown for arguments the agent got wrong; it is answered as a tool error rather than logged. */ +class ToolInputException(message: String) : RuntimeException(message) + +class ToolArguments(private val json: JsonObject?) { + fun string(name: String): String = optionalString(name) ?: throw ToolInputException("'$name' is required") + + fun optionalString(name: String): String? = primitive(name)?.content?.takeIf { it.isNotEmpty() } + + fun int(name: String, default: Int): Int { + val value = primitive(name) ?: return default + return value.intOrNull ?: throw ToolInputException("'$name' must be an integer") + } + + fun optionalDouble(name: String): Double? { + val value = primitive(name) ?: return null + return value.doubleOrNull ?: throw ToolInputException("'$name' must be a number") + } + + fun boolean(name: String, default: Boolean): Boolean { + val value = primitive(name) ?: return default + return value.booleanOrNull ?: throw ToolInputException("'$name' must be true or false") + } + + private fun primitive(name: String): JsonPrimitive? = json?.get(name) as? JsonPrimitive +} + +fun textResult(text: String): CallToolResult = CallToolResult(content = listOf(TextContent(text))) + +fun errorResult(text: String): CallToolResult = CallToolResult(content = listOf(TextContent(text)), isError = true) + +fun contentResult(content: List): CallToolResult = CallToolResult(content = content) + +/** Cuts [text] to [limit] characters, saying how much was left out, so one answer cannot flood the agent. */ +fun truncate(text: String, limit: Int = OUTPUT_LIMIT): String { + if (text.length <= limit) return text + return text.take(limit) + "\n… ${text.length - limit} more characters cut" +} + +const val OUTPUT_LIMIT = 20_000 diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/Clipboard.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/Clipboard.kt new file mode 100644 index 000000000..6075704ea --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/Clipboard.kt @@ -0,0 +1,9 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.client + +import net.minecraft.client.Minecraft + +/** Puts [text] on the clipboard through this game's own window, on the render thread that owns it. */ +internal fun copyToClipboard(text: String) { + val minecraft = Minecraft.getInstance() + minecraft.execute { minecraft.keyboardHandler.clipboard = text } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/FrameCapture.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/FrameCapture.kt new file mode 100644 index 000000000..dc55c3b9c --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/FrameCapture.kt @@ -0,0 +1,98 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.client + +import com.mojang.blaze3d.platform.NativeImage +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.withContext +import kotlinx.coroutines.withTimeoutOrNull +import net.minecraft.client.Minecraft +import net.minecraft.client.Screenshot +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CameraPose +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CutsceneCameraSystem +import ru.hollowhorizon.hollowengine.client.ui.screen.HollowWaitScreen +import ru.hollowhorizon.hollowengine.client.utils.lang +import ru.hollowhorizon.hollowengine.common.coroutines.dispatcher +import ru.hollowhorizon.hollowengine.common.events.ClientOnly +import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent +import ru.hollowhorizon.hollowengine.common.events.client.render.RenderItemInHandEvent +import ru.hollowhorizon.hollowengine.common.events.client.render.RenderTickEvent +import kotlin.time.Duration.Companion.seconds + +/** + * Takes one frame out of the game's own render loop. A frame of the whole screen is read once it is + * finished; a frame of the world alone is read after the level is drawn and before the GUI is. + */ +@ClientOnly +object FrameCapture { + private class Request(val worldOnly: Boolean, val waitForSections: Boolean) { + val image = CompletableDeferred() + var frames = 0 + var settledFrames = 0 + val startedAt = System.currentTimeMillis() + } + + /** The capture being waited for. Touched only on the render thread. */ + private var pending: Request? = null + + /** + * Captures the next suitable frame; [pose] moves the camera there first and implies [worldOnly]. + * Null when no frame was drawn in time, as happens while the window is minimized. + */ + suspend fun capture(worldOnly: Boolean, pose: CameraPose?): NativeImage? { + val minecraft = Minecraft.getInstance() + return withContext(minecraft.dispatcher) { + check(pending == null) { "Another capture is in progress" } + if ((worldOnly || pose != null) && minecraft.level == null) error("No world is open, so there is nothing to capture but the menu") + val request = Request(worldOnly = worldOnly || pose != null, waitForSections = pose != null) + val previousScreen = minecraft.screen + val waitScreen = pose?.let { + HollowWaitScreen(WAIT_HEADING.lang, WAIT_MESSAGE.lang).also(minecraft::setScreen) + } + CutsceneCameraSystem.heldPose = pose + pending = request + try { + withTimeoutOrNull(CAPTURE_TIMEOUT) { request.image.await() } + } finally { + pending = null + CutsceneCameraSystem.heldPose = null + if (waitScreen != null && minecraft.screen === waitScreen) minecraft.setScreen(previousScreen) + } + } + } + + @SubscribeEvent + fun onLevelRendered(event: RenderTickEvent.LevelRendered) { + val request = pending?.takeIf { it.worldOnly } ?: return + request.frames++ + if (request.waitForSections && !sectionsSettled(event.minecraft, request)) return + complete(request, event.minecraft) + } + + /** A picture of the world alone leaves out the hand too, which is drawn with the level. */ + @SubscribeEvent + fun onRenderHand(event: RenderItemInHandEvent) { + if (pending?.worldOnly == true) event.isCanceled = true + } + + @SubscribeEvent + fun onBlit(event: RenderTickEvent.Blit) { + val request = pending?.takeIf { !it.worldOnly } ?: return + complete(request, event.minecraft) + } + + private fun sectionsSettled(minecraft: Minecraft, request: Request): Boolean { + if (System.currentTimeMillis() - request.startedAt >= SETTLE_LIMIT_MILLIS) return true + request.settledFrames = if (minecraft.levelRenderer.hasRenderedAllSections()) request.settledFrames + 1 else 0 + return request.frames >= MIN_SETTLE_FRAMES && request.settledFrames >= 2 + } + + private fun complete(request: Request, minecraft: Minecraft) { + pending = null + request.image.complete(Screenshot.takeScreenshot(minecraft.mainRenderTarget)) + } + + private const val WAIT_HEADING = "hollowengine_mcp.wait.heading" + private const val WAIT_MESSAGE = "hollowengine_mcp.wait.message" + private const val MIN_SETTLE_FRAMES = 8 + private const val SETTLE_LIMIT_MILLIS = 5_000L + private val CAPTURE_TIMEOUT = 10.seconds +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/ScreenshotTool.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/ScreenshotTool.kt new file mode 100644 index 000000000..0bd1c65f6 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/client/ScreenshotTool.kt @@ -0,0 +1,99 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.client + +import com.mojang.blaze3d.platform.NativeImage +import io.modelcontextprotocol.kotlin.sdk.types.ImageContent +import io.modelcontextprotocol.kotlin.sdk.types.TextContent +import net.minecraft.client.Minecraft +import ru.hollowhorizon.hollowengine.addons.mcp.McpTool +import ru.hollowhorizon.hollowengine.addons.mcp.ParameterType +import ru.hollowhorizon.hollowengine.addons.mcp.ToolArguments +import ru.hollowhorizon.hollowengine.addons.mcp.ToolInputException +import ru.hollowhorizon.hollowengine.addons.mcp.ToolParameter +import ru.hollowhorizon.hollowengine.addons.mcp.contentResult +import ru.hollowhorizon.hollowengine.addons.mcp.errorResult +import ru.hollowhorizon.hollowengine.client.ui.ide.timeline.cutscene.CameraPose +import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f +import java.util.Base64 +import java.util.Locale +import kotlin.math.atan2 +import kotlin.math.sqrt + +internal fun screenshotTool() = McpTool( + name = "screenshot", + description = """ + Takes a picture of the game. By default it is what the player sees, HUD and open screens + included; world_only leaves out the GUI and the hand. Given a camera position (x, y, z) it + shows the world from there instead, facing yaw/pitch or towards look_at_x/y/z: the player sees + a short wait screen meanwhile, and only what is loaded around the player can appear. Angles + are the F3 ones: yaw 0 faces south (+Z), 90 west, 180 north, -90 east; pitch -90 is up, 90 down. + A still frame cannot show whether an animation plays; check clip names with `he model entity` + instead. Pictures cost a lot of context, so take them only for what needs one. + """.trimIndent(), + parameters = listOf( + ToolParameter("world_only", ParameterType.BOOLEAN, "Leave out the HUD, any open screen and the hand"), + ToolParameter("x", ParameterType.NUMBER, "Camera position X"), + ToolParameter("y", ParameterType.NUMBER, "Camera position Y"), + ToolParameter("z", ParameterType.NUMBER, "Camera position Z"), + ToolParameter("yaw", ParameterType.NUMBER, "Camera yaw in degrees"), + ToolParameter("pitch", ParameterType.NUMBER, "Camera pitch in degrees"), + ToolParameter("look_at_x", ParameterType.NUMBER, "Point to face, instead of yaw and pitch"), + ToolParameter("look_at_y", ParameterType.NUMBER, "Point to face, instead of yaw and pitch"), + ToolParameter("look_at_z", ParameterType.NUMBER, "Point to face, instead of yaw and pitch"), + ToolParameter("fov", ParameterType.NUMBER, "Vertical field of view in degrees; the player's by default"), + ToolParameter("max_width", ParameterType.INTEGER, "Widest picture to return, $DEFAULT_WIDTH by default"), + ), + readOnly = true, +) { arguments -> + val pose = cameraPose(arguments) + val maxWidth = arguments.int("max_width", DEFAULT_WIDTH).coerceIn(MIN_WIDTH, MAX_WIDTH) + val image = FrameCapture.capture(arguments.boolean("world_only", false), pose) + ?: return@McpTool errorResult("No frame was drawn within 10 seconds; the game window may be minimized") + val encoded = image.use { encode(it, maxWidth) } + val caption = buildString { + append("${encoded.width}x${encoded.height}") + pose?.let { append(", camera at %.1f %.1f %.1f, yaw %.1f, pitch %.1f".format(Locale.ROOT, it.position.x, it.position.y, it.position.z, it.yaw, it.pitch)) } + } + contentResult(listOf(ImageContent(Base64.getEncoder().encodeToString(encoded.png), "image/png"), TextContent(caption))) +} + +private fun cameraPose(arguments: ToolArguments): CameraPose? { + val x = arguments.optionalDouble("x") + val y = arguments.optionalDouble("y") + val z = arguments.optionalDouble("z") + if (x == null && y == null && z == null) return null + if (x == null || y == null || z == null) throw ToolInputException("A camera position needs all of x, y and z") + + val lookAt = listOf("look_at_x", "look_at_y", "look_at_z").map(arguments::optionalDouble) + val (yaw, pitch) = if (lookAt.all { it != null }) { + val dx = lookAt[0]!! - x + val dy = lookAt[1]!! - y + val dz = lookAt[2]!! - z + Math.toDegrees(atan2(-dx, dz)) to Math.toDegrees(atan2(-dy, sqrt(dx * dx + dz * dz))) + } else { + (arguments.optionalDouble("yaw") ?: 0.0) to (arguments.optionalDouble("pitch") ?: 0.0) + } + val fov = arguments.optionalDouble("fov")?.toFloat() ?: Minecraft.getInstance().options.fov().get().toFloat() + return CameraPose( + position = Vec3f(x.toFloat(), y.toFloat(), z.toFloat()), + rotation = Vec3f(pitch.toFloat().coerceIn(-90f, 90f), yaw.toFloat(), 0f), + fov = fov.coerceIn(MIN_FOV, MAX_FOV), + ) +} + +private class EncodedImage(val png: ByteArray, val width: Int, val height: Int) + +/** Scales [image] down to [maxWidth] when it is wider, and writes it as PNG. */ +private fun encode(image: NativeImage, maxWidth: Int): EncodedImage { + if (image.width <= maxWidth) return EncodedImage(image.asByteArray(), image.width, image.height) + val height = (image.height.toLong() * maxWidth / image.width).toInt().coerceAtLeast(1) + return NativeImage(maxWidth, height, false).use { scaled -> + image.resizeSubRectTo(0, 0, image.width, image.height, scaled) + EncodedImage(scaled.asByteArray(), maxWidth, height) + } +} + +private const val DEFAULT_WIDTH = 1280 +private const val MIN_WIDTH = 64 +private const val MAX_WIDTH = 3840 +private const val MIN_FOV = 1f +private const val MAX_FOV = 170f diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/docs/DocsLibrary.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/docs/DocsLibrary.kt new file mode 100644 index 000000000..0ee7b2db4 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/docs/DocsLibrary.kt @@ -0,0 +1,137 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.docs + +/** + * The engine's English guides, shipped inside the addon. A page is addressed by its path without the + * extension ("scripting/node/states"); an `index` page also answers to its folder ("scripting/node"). + */ +class DocsLibrary(val pages: List) { + private val byId = pages.associateBy(DocsPage::id) + + fun page(id: String): DocsPage? { + val normalized = id.trim().removePrefix("/").removePrefix(SITE_PREFIX).removeSuffix(".mdx").trimEnd('/') + return byId[normalized] ?: byId["$normalized/index"] ?: byId[normalized.removeSuffix("/index")] + } + + /** Sections holding every word of [query], best first: a word in a heading weighs more than in text. */ + fun search(query: String, limit: Int): List { + val words = query.lowercase().split(WORD_SEPARATORS).filter(String::isNotBlank).distinct() + if (words.isEmpty()) return emptyList() + return pages.asSequence() + .flatMap { page -> page.sections.asSequence().map { section -> page to section } } + .mapNotNull { (page, section) -> + val heading = (page.title + " " + section.heading).lowercase() + val body = section.text.lowercase() + if (words.any { it !in heading && it !in body }) return@mapNotNull null + val score = words.sumOf { word -> (if (word in heading) HEADING_WEIGHT else 0) + body.occurrences(word).coerceAtMost(MAX_COUNTED) } + DocsHit(page, section, score, section.text.lines().firstOrNull { line -> words.any { it in line.lowercase() } }?.trim().orEmpty()) + } + .sortedByDescending(DocsHit::score) + .take(limit) + .toList() + } + + companion object { + /** How the pages link to each other on the site; stripped so a link reads as a page id. */ + const val SITE_PREFIX = "docs/hollowengine/" + + private val WORD_SEPARATORS = Regex("[^\\p{L}\\p{N}_.]+") + private const val HEADING_WEIGHT = 10 + private const val MAX_COUNTED = 5 + + private fun String.occurrences(word: String): Int { + var count = 0 + var from = indexOf(word) + while (from >= 0) { + count++ + from = indexOf(word, from + word.length) + } + return count + } + + /** Reads the pages listed in `pages.txt` next to them in the addon's resources. */ + fun load(classLoader: ClassLoader, root: String): DocsLibrary { + val listing = classLoader.getResourceAsStream("$root/pages.txt")?.bufferedReader()?.use { it.readLines() }.orEmpty() + val pages = listing.filter(String::isNotBlank).mapNotNull { path -> + val text = classLoader.getResourceAsStream("$root/$path")?.bufferedReader()?.use { it.readText() } + ?: return@mapNotNull null + DocsPage.parse(path.removeSuffix(".mdx"), text) + } + return DocsLibrary(pages) + } + } +} + +class DocsHit(val page: DocsPage, val section: DocsSection, val score: Int, val excerpt: String) + +/** One `#`-heading and the text under it, up to the next heading of any level. */ +class DocsSection(val heading: String, val anchor: String, val level: Int, val text: String) + +class DocsPage(val id: String, val title: String, val order: Int, val sections: List) { + val text: String get() = sections.joinToString("\n\n") { section -> section.render() } + + /** [anchor]'s section together with the deeper sections nested under it. */ + fun section(anchor: String): String? { + val start = sections.indexOfFirst { it.anchor == anchor.removePrefix("#") } + if (start < 0) return null + val level = sections[start].level + val end = (start + 1 until sections.size).firstOrNull { sections[it].level <= level } ?: sections.size + return sections.subList(start, end).joinToString("\n\n") { it.render() } + } + + private fun DocsSection.render(): String = + if (level == 0) text else "${"#".repeat(level)} $heading\n$text" + + companion object { + private val HEADING = Regex("^(#{1,6})\\s+(.+?)\\s*#*$") + private val IMAGE = Regex("^!\\[[^]]*]\\([^)]*\\)\\s*$") + private val SITE_LINK = Regex("]\\(/${Regex.escape(DocsLibrary.SITE_PREFIX)}") + + fun parse(id: String, source: String): DocsPage { + val (frontMatter, body) = splitFrontMatter(source.replace("\r\n", "\n")) + val sections = ArrayList() + var heading = "" + var level = 0 + val text = StringBuilder() + var inCode = false + + fun flush() { + val content = text.toString().trim() + if (level > 0 || content.isNotEmpty()) sections += DocsSection(heading, anchorOf(heading), level, content) + text.clear() + } + + for (line in body.lines()) { + if (line.trimStart().startsWith("```")) inCode = !inCode + val match = if (inCode) null else HEADING.matchEntire(line) + when { + match != null -> { + flush() + level = match.groupValues[1].length + heading = match.groupValues[2] + } + !inCode && (IMAGE.matches(line) || line.startsWith("import ") || line.startsWith("export ")) -> Unit + else -> text.appendLine(line.replace(SITE_LINK, "](")) + } + } + flush() + + val title = frontMatter["title"] ?: sections.firstOrNull { it.level == 1 }?.heading ?: id + return DocsPage(id, title, frontMatter["order"]?.toIntOrNull() ?: Int.MAX_VALUE, sections) + } + + private fun splitFrontMatter(source: String): Pair, String> { + if (!source.startsWith("---\n")) return emptyMap() to source + val end = source.indexOf("\n---", startIndex = 4) + if (end < 0) return emptyMap() to source + val values = source.substring(4, end).lines().mapNotNull { line -> + val key = line.substringBefore(':', "").trim() + if (key.isEmpty()) null else key to line.substringAfter(':').trim().trim('"', '\'') + }.toMap() + return values to source.substring(end + 4).trimStart('\n') + } + + /** The anchor a heading gets on the site: lowercase, spaces to dashes, punctuation dropped. */ + fun anchorOf(heading: String): String = + heading.lowercase().replace(Regex("[^\\p{L}\\p{N} _-]"), "").trim().replace(Regex("\\s+"), "-") + } +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CodeTools.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CodeTools.kt new file mode 100644 index 000000000..b379a43b8 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CodeTools.kt @@ -0,0 +1,151 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.tools + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import ru.hollowhorizon.hollowengine.addons.mcp.COMPILER_MISSING +import ru.hollowhorizon.hollowengine.addons.mcp.McpTool +import ru.hollowhorizon.hollowengine.addons.mcp.ParameterType +import ru.hollowhorizon.hollowengine.addons.mcp.ToolInputException +import ru.hollowhorizon.hollowengine.addons.mcp.ToolParameter +import ru.hollowhorizon.hollowengine.addons.mcp.errorResult +import ru.hollowhorizon.hollowengine.addons.mcp.textResult +import ru.hollowhorizon.hollowengine.addons.mcp.truncate +import ru.hollowhorizon.hollowengine.common.scripting.ScriptingEnvironment +import ru.hollowhorizon.hollowengine.common.scripting.ide.Diagnostic +import ru.hollowhorizon.hollowengine.common.scripting.ide.ScriptingAnalyzer +import ru.hollowhorizon.hollowengine.common.scripting.ide.Severity +import ru.hollowhorizon.hollowengine.common.scripting.source.ScriptRegistry +import java.io.File + +internal fun codeTools(): List = listOf(scriptDiagnosticsTool(), symbolSearchTool(), symbolSourceTool()) + +private fun scriptDiagnosticsTool() = McpTool( + name = "script_diagnostics", + description = """ + Errors and warnings the in-game Kotlin analyzer reports for a script, against the classpath the + game really compiles it with (Minecraft in Mojang names, loaded mods, addons). It compiles and + runs nothing, so it is the quick check after editing a script. Pass `text` to check a version + that is not saved yet. Positions are 1-based line:column. + """.trimIndent(), + parameters = listOf( + ToolParameter( + "path", ParameterType.STRING, + "Script path as commands spell it: 'scripts/folder/name.node.kts' for the project's own scripts " + + "(the hollowengine/scripts folder), 'namespace:path' for an addon's", + required = true, + ), + ToolParameter("text", ParameterType.STRING, "Script source to check instead of the saved file"), + ), + readOnly = true, +) { arguments -> + val analyzer = analyzerOrNull() ?: return@McpTool errorResult(COMPILER_MISSING) + val path = arguments.string("path") + if (!path.endsWith(".kts")) throw ToolInputException("Only Kotlin scripts (.kts) are analyzed") + val display = ScriptRegistry.display(ScriptRegistry.parse(path)) + val text = arguments.optionalString("text") ?: readScript(path) + val diagnostics = withContext(Dispatchers.IO) { analyzer.diagnostic(display, text) } + .filter { it.severity >= Severity.WARNING } + textResult(truncate(describe(display, text, diagnostics))) +} + +private fun symbolSearchTool() = McpTool( + name = "symbol_search", + description = """ + Finds classes and Kotlin top-level functions and properties (extension functions included) on the + script classpath by name: Minecraft in Mojang names, the engine's scripting API, mods and addons. + The query is a simple name or part of one, optionally qualified by part of its package + ('entity.Entity', 'npcs.spawn'). Closest matches come first. Read one with symbol_source. + """.trimIndent(), + parameters = listOf( + ToolParameter("query", ParameterType.STRING, "Name or part of a name", required = true), + ToolParameter("limit", ParameterType.INTEGER, "Most results to return, $DEFAULT_SEARCH_LIMIT by default"), + ), + readOnly = true, +) { arguments -> + val analyzer = analyzerOrNull() ?: return@McpTool errorResult(COMPILER_MISSING) + val query = arguments.string("query") + val limit = arguments.int("limit", DEFAULT_SEARCH_LIMIT).coerceIn(1, MAX_SEARCH_LIMIT) + val matches = withContext(Dispatchers.IO) { analyzer.searchSymbols(query, limit) } + if (matches.isEmpty()) return@McpTool textResult("Nothing on the script classpath matches '$query'") + textResult(matches.joinToString("\n") { match -> + val kind = match.kind.name.lowercase() + if (match.signature.isEmpty()) "$kind ${match.qualifiedName}" else "$kind ${match.qualifiedName}: ${match.signature}" + }) +} + +private fun symbolSourceTool() = McpTool( + name = "symbol_source", + description = """ + Source of a class, member or top-level declaration by qualified name, from the library's sources jar + when there is one and decompiled otherwise (Minecraft decompiles in Mojang names). Nested classes + are spelled Outer.Inner, members Class.member; overloads show the first one. Long files come a + window at a time: by default the lines around the declaration, and `line`/`lines` page further. + """.trimIndent(), + parameters = listOf( + ToolParameter("name", ParameterType.STRING, "Qualified name, e.g. net.minecraft.world.entity.Entity.tick", required = true), + ToolParameter("line", ParameterType.INTEGER, "First line to show, 1-based"), + ToolParameter("lines", ParameterType.INTEGER, "How many lines to show, $DEFAULT_SOURCE_LINES by default"), + ), + readOnly = true, +) { arguments -> + val analyzer = analyzerOrNull() ?: return@McpTool errorResult(COMPILER_MISSING) + val name = arguments.string("name") + val location = withContext(Dispatchers.IO) { analyzer.symbolSource(name) } + ?: return@McpTool errorResult( + "Nothing on the script classpath is named '$name'. Find the exact name with symbol_search; " + + "nested classes are spelled Outer.Inner" + ) + val text = location.text + ?: return@McpTool textResult("'$name' is declared in the project's own file ${location.path}; read it there") + + val lines = text.lines() + val declarationLine = text.substring(0, location.offset.coerceIn(0, text.length)).count { it == '\n' } + 1 + val count = arguments.int("lines", DEFAULT_SOURCE_LINES).coerceIn(1, MAX_SOURCE_LINES) + val first = arguments.int("line", (declarationLine - LINES_BEFORE_DECLARATION).coerceAtLeast(1)).coerceIn(1, lines.size) + val last = (first + count - 1).coerceAtMost(lines.size) + val origin = if (location.path.startsWith("decompiled/")) "decompiled" else "source" + val body = (first..last).joinToString("\n") { number -> "%6d %s".format(number, lines[number - 1]) } + textResult( + truncate( + "// ${location.path} ($origin), lines $first-$last of ${lines.size}; '$name' is at line $declarationLine\n$body", + limit = MAX_SOURCE_CHARACTERS, + ) + ) +} + +private fun analyzerOrNull(): ScriptingAnalyzer? = ScriptingEnvironment.currentOrNull()?.analyzer + +private fun readScript(path: String): String { + val file = ScriptRegistry.artifacts(path)?.sourceFile?.takeIf(File::isFile) + ?: throw ToolInputException("There is no script source at '$path'") + return file.readText() +} + +private fun describe(path: String, text: String, diagnostics: List): String { + val errors = diagnostics.count { it.severity.isError() } + val warnings = diagnostics.size - errors + if (diagnostics.isEmpty()) return "$path: no errors or warnings" + val lines = text.lines() + return buildString { + appendLine("$path: $errors errors, $warnings warnings") + diagnostics.sortedWith(compareBy({ it.range.start.line }, { it.range.start.column })).take(MAX_DIAGNOSTICS).forEach { diagnostic -> + val start = diagnostic.range.start + val severity = if (diagnostic.severity.isError()) "error" else "warning" + if (start.line < 0) { + appendLine("$severity: ${diagnostic.message}") + return@forEach + } + appendLine("$severity ${start.line + 1}:${start.column + 1}: ${diagnostic.message}") + lines.getOrNull(start.line)?.let { source -> appendLine(" | ${source.trimEnd()}") } + } + if (diagnostics.size > MAX_DIAGNOSTICS) appendLine("… ${diagnostics.size - MAX_DIAGNOSTICS} more") + }.trimEnd() +} + +private const val DEFAULT_SEARCH_LIMIT = 30 +private const val MAX_SEARCH_LIMIT = 200 +private const val DEFAULT_SOURCE_LINES = 200 +private const val MAX_SOURCE_LINES = 1_000 +private const val MAX_SOURCE_CHARACTERS = 80_000 +private const val LINES_BEFORE_DECLARATION = 10 +private const val MAX_DIAGNOSTICS = 100 diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CommandTool.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CommandTool.kt new file mode 100644 index 000000000..4952478d5 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/CommandTool.kt @@ -0,0 +1,90 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.tools + +import com.mojang.brigadier.ParseResults +import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult +import kotlinx.coroutines.withContext +import net.minecraft.commands.CommandResultCallback +import net.minecraft.commands.CommandSource +import net.minecraft.commands.CommandSourceStack +import net.minecraft.network.chat.Component +import net.minecraft.server.MinecraftServer +import ru.hollowhorizon.hollowengine.HollowEngine +import ru.hollowhorizon.hollowengine.addons.mcp.McpTool +import ru.hollowhorizon.hollowengine.addons.mcp.ParameterType +import ru.hollowhorizon.hollowengine.addons.mcp.ToolParameter +import ru.hollowhorizon.hollowengine.addons.mcp.errorResult +import ru.hollowhorizon.hollowengine.addons.mcp.textResult +import ru.hollowhorizon.hollowengine.addons.mcp.truncate +import ru.hollowhorizon.hollowengine.common.coroutines.dispatcher + +internal fun runCommandTool() = McpTool( + name = "run_command", + description = """ + Runs a command on this game's server and returns the feedback it printed, which would otherwise go + to chat. In a singleplayer or LAN world it runs as the host player, with the host's rights and + position; on a dedicated server, as the server console. + HollowEngine's own commands live under /hollowengine (alias /he), e.g. `he scripting compile`, + `he scripting run `, `reload`. `help hollowengine` lists them; a command that does not + parse is answered with the usage of the part that did. + """.trimIndent(), + parameters = listOf( + ToolParameter("command", ParameterType.STRING, "The command, with or without the leading slash", required = true), + ), + readOnly = false, +) { arguments -> + val server = ServerAccess.current() ?: return@McpTool errorResult(ServerAccess.NO_SERVER) + withContext(server.dispatcher) { runCommand(server, arguments.string("command").trim().removePrefix("/")) } +} + +private fun runCommand(server: MinecraftServer, command: String): CallToolResult { + val source = if (server.isDedicatedServer) server.createCommandSourceStack() + else ServerAccess.host(server)?.createCommandSourceStack() + ?: return errorResult("The host player has not joined the world yet") + + val output = CapturedFeedback() + var outcome: Pair? = null + val stack = source.withSource(output).withCallback(CommandResultCallback { success, result -> outcome = success to result }) + val dispatcher = server.commands.dispatcher + val parse = dispatcher.parse(command, stack) + HollowEngine.LOGGER.info("MCP agent runs /{}", command) + server.commands.performCommand(parse, command) + + val failedToParse = parse.reader.canRead() || parse.exceptions.isNotEmpty() + val report = buildString { + output.lines.forEach(::appendLine) + outcome?.let { (success, result) -> appendLine(if (success) "(result: $result)" else "(the command failed)") } + if (output.lines.isEmpty() && outcome == null && !failedToParse) appendLine("(no feedback)") + if (failedToParse) usage(parse, stack)?.let { usage -> + appendLine("Usage:") + usage.forEach { appendLine(" /$it") } + } + }.trimEnd() + val failed = failedToParse || outcome?.first == false + return if (failed) errorResult(truncate(report)) else textResult(truncate(report)) +} + +/** What can follow the longest part of [parse] that did parse, or null when not even the command name did. */ +private fun usage(parse: ParseResults, stack: CommandSourceStack): List? { + val context = runCatching { parse.context.findSuggestionContext(parse.reader.cursor) }.getOrNull() ?: return null + val dispatcher = stack.server.commands.dispatcher + if (context.parent === dispatcher.root) return null + val prefix = parse.reader.string.substring(0, context.startPos).trimEnd() + return dispatcher.getSmartUsage(context.parent, stack).values.take(MAX_USAGE_LINES).map { "$prefix $it" } +} + +/** A command source that keeps the feedback a command sends instead of showing it to anyone. */ +private class CapturedFeedback : CommandSource { + val lines = ArrayList() + + override fun sendSystemMessage(component: Component) { + lines += component.string + } + + override fun acceptsSuccess(): Boolean = true + + override fun acceptsFailure(): Boolean = true + + override fun shouldInformAdmins(): Boolean = false +} + +private const val MAX_USAGE_LINES = 30 diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/DocsTools.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/DocsTools.kt new file mode 100644 index 000000000..6ff5d2d3d --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/DocsTools.kt @@ -0,0 +1,68 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.tools + +import ru.hollowhorizon.hollowengine.addons.mcp.McpTool +import ru.hollowhorizon.hollowengine.addons.mcp.ParameterType +import ru.hollowhorizon.hollowengine.addons.mcp.ToolParameter +import ru.hollowhorizon.hollowengine.addons.mcp.docs.DocsLibrary +import ru.hollowhorizon.hollowengine.addons.mcp.docs.DocsPage +import ru.hollowhorizon.hollowengine.addons.mcp.errorResult +import ru.hollowhorizon.hollowengine.addons.mcp.textResult +import ru.hollowhorizon.hollowengine.addons.mcp.truncate + +internal fun docsTools(docs: DocsLibrary): List = listOf(docsSearchTool(docs), docsReadTool(docs)) + +private fun docsSearchTool(docs: DocsLibrary) = McpTool( + name = "docs_search", + description = """ + Searches HollowEngine's guides (script types, node scripts, NPCs, dialogues, UI, models, + animations, cutscenes, the IDE…) for sections holding every word of the query. Answers + page#section ids to open with docs_read. + """.trimIndent(), + parameters = listOf( + ToolParameter("query", ParameterType.STRING, "Words to look for", required = true), + ToolParameter("limit", ParameterType.INTEGER, "Most sections to return, $DEFAULT_HITS by default"), + ), + readOnly = true, +) { arguments -> + val query = arguments.string("query") + val hits = docs.search(query, arguments.int("limit", DEFAULT_HITS).coerceIn(1, MAX_HITS)) + if (hits.isEmpty()) return@McpTool textResult("No section mentions every word of '$query'. Try fewer or other words, or docs_read without a page for the contents") + textResult(hits.joinToString("\n") { hit -> + val place = if (hit.section.anchor.isEmpty()) hit.page.id else "${hit.page.id}#${hit.section.anchor}" + val heading = listOf(hit.page.title, hit.section.heading).filter(String::isNotBlank).distinct().joinToString(" › ") + "$place — $heading: ${hit.excerpt.take(EXCERPT_LENGTH)}" + }) +} + +private fun docsReadTool(docs: DocsLibrary) = McpTool( + name = "docs_read", + description = """ + Reads a HollowEngine guide page, or one section of it with its subsections. Without a page it + lists every page. Links inside pages point at other page ids. + """.trimIndent(), + parameters = listOf( + ToolParameter("page", ParameterType.STRING, "Page id such as 'scripting/node/states'; may carry '#section'"), + ToolParameter("section", ParameterType.STRING, "Section anchor, as docs_search gives it after '#'"), + ), + readOnly = true, +) { arguments -> + val requested = arguments.optionalString("page") ?: return@McpTool textResult(contents(docs)) + val page = docs.page(requested.substringBefore('#')) + ?: return@McpTool errorResult("There is no page '$requested'. docs_read without a page lists them") + val anchor = arguments.optionalString("section") ?: requested.substringAfter('#', "").takeIf(String::isNotEmpty) + val text = if (anchor == null) page.text else page.section(anchor) + ?: return@McpTool errorResult("'${page.id}' has no section '$anchor'. Its sections: ${page.sections.map { it.anchor }.filter(String::isNotEmpty).joinToString()}") + textResult(truncate("# ${page.title} (${page.id})\n\n$text", limit = MAX_PAGE_CHARACTERS)) +} + +private fun contents(docs: DocsLibrary): String { + if (docs.pages.isEmpty()) return "This build of the addon carries no guides" + return docs.pages + .sortedWith(compareBy { it.id.substringBeforeLast('/', "") }.thenBy { it.order }.thenBy { it.id }) + .joinToString("\n") { page -> "${page.id} — ${page.title}" } +} + +private const val DEFAULT_HITS = 10 +private const val MAX_HITS = 50 +private const val EXCERPT_LENGTH = 160 +private const val MAX_PAGE_CHARACTERS = 60_000 diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/ServerAccess.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/ServerAccess.kt new file mode 100644 index 000000000..1b1c794df --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/ServerAccess.kt @@ -0,0 +1,27 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.tools + +import net.minecraft.server.MinecraftServer +import net.minecraft.server.level.ServerPlayer +import ru.hollowhorizon.hollowengine.common.utils.currentServerOrNull + +/** + * The logical server of this game process and what the agent may do on it. A dedicated server trusts + * the agent like its own console; in a singleplayer or LAN world the agent has the host's rights. + */ +internal object ServerAccess { + const val NO_SERVER = "No world is open in this game process, so there is no server to act on. " + + "A client connected to a remote server cannot reach that server's commands or code from here." + + const val NO_CHEATS = "The host of this world has no operator rights (cheats are off), so server code " + + "cannot run here. Enable cheats (Open to LAN → Allow Commands) or use the client side." + + fun current(): MinecraftServer? = currentServerOrNull()?.takeIf(MinecraftServer::isRunning) + + /** The player hosting a singleplayer or LAN world. Call on the server thread. */ + fun host(server: MinecraftServer): ServerPlayer? = + server.playerList.players.firstOrNull { server.isSingleplayerOwner(it.gameProfile) } + + /** Whether server snippets may run on [server]. Call on the server thread. */ + fun mayRunCode(server: MinecraftServer): Boolean = + server.isDedicatedServer || host(server)?.hasPermissions(2) == true +} diff --git a/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/SnippetTool.kt b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/SnippetTool.kt new file mode 100644 index 000000000..6b0a16cb8 --- /dev/null +++ b/addons/mcp/src/main/java/ru/hollowhorizon/hollowengine/addons/mcp/tools/SnippetTool.kt @@ -0,0 +1,100 @@ +package ru.hollowhorizon.hollowengine.addons.mcp.tools + +import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult +import kotlinx.coroutines.withContext +import ru.hollowhorizon.hollowengine.addons.mcp.COMPILER_MISSING +import ru.hollowhorizon.hollowengine.addons.mcp.McpTool +import ru.hollowhorizon.hollowengine.addons.mcp.ParameterType +import ru.hollowhorizon.hollowengine.addons.mcp.ToolInputException +import ru.hollowhorizon.hollowengine.addons.mcp.ToolParameter +import ru.hollowhorizon.hollowengine.addons.mcp.errorResult +import ru.hollowhorizon.hollowengine.addons.mcp.textResult +import ru.hollowhorizon.hollowengine.addons.mcp.truncate +import ru.hollowhorizon.hollowengine.client.scripting.ConsoleScripts +import ru.hollowhorizon.hollowengine.common.coroutines.dispatcher +import ru.hollowhorizon.hollowengine.common.scripting.ScriptingEnvironment +import ru.hollowhorizon.hollowengine.common.scripting.console.ServerConsoleScripts +import ru.hollowhorizon.hollowengine.common.scripting.console.SnippetRun +import ru.hollowhorizon.hollowengine.common.scripting.ide.ScriptCompilationException +import ru.hollowhorizon.hollowengine.common.utils.isPhysicalClient + +internal fun runSnippetTool() = McpTool( + name = "run_snippet", + description = """ + Compiles and runs a Kotlin snippet inside the game, like the IDE console, and returns the lines it + printed with println() and the value of its last expression. Use it to inspect live game state or + to try an API before writing it into a script. It is not how features are built: what a snippet + does is gone after a restart, so behavior the user asked for goes into a script file. + side=server runs on the server thread with `server`, `overworld`, `players` and `player` (the + host, or the only player) in scope. It needs an open world where the agent may run code: a + dedicated server, or a local world whose host has cheats on. + side=client runs on the render thread with `minecraft`, `player`, `level` and `server` (the + integrated one, touch it via server?.execute { }) in scope; it also works in the main menu. + Without side: server when allowed, client otherwise. Coroutines started with launch { } keep + running after the snippet returns; what they print only reaches the game log. + Common Minecraft types are imported already; add other imports as lines at the top. + """.trimIndent(), + parameters = listOf( + ToolParameter("code", ParameterType.STRING, "Kotlin statements; the last expression is the result", required = true), + ToolParameter("side", ParameterType.STRING, "Where to run it", allowed = listOf(SERVER, CLIENT)), + ), + readOnly = false, +) { arguments -> + val code = arguments.string("code") + if (!ScriptingEnvironment.isAvailable()) return@McpTool errorResult(COMPILER_MISSING) + when (resolveSide(arguments.optionalString("side"))) { + SERVER -> { + val server = ServerAccess.current() ?: return@McpTool errorResult(ServerAccess.NO_SERVER) + report(SERVER, ServerConsoleScripts.evaluate(server, code)) + } + else -> report(CLIENT, ConsoleScripts.evaluate(code)) + } +} + +private suspend fun resolveSide(requested: String?): String { + val server = ServerAccess.current() + val serverAllowed = server != null && withContext(server.dispatcher) { ServerAccess.mayRunCode(server) } + return when (requested) { + SERVER -> when { + server == null -> throw ToolInputException(ServerAccess.NO_SERVER) + !serverAllowed -> throw ToolInputException(ServerAccess.NO_CHEATS) + else -> SERVER + } + CLIENT -> if (isPhysicalClient) CLIENT else throw ToolInputException("This is a dedicated server; it has no client side") + null -> if (serverAllowed || !isPhysicalClient) SERVER else CLIENT + else -> throw ToolInputException("'side' must be '$SERVER' or '$CLIENT'") + } +} + +private fun report(side: String, run: SnippetRun): CallToolResult { + val error = run.result.exceptionOrNull() + val text = buildString { + appendLine("Ran on the $side.") + if (run.output.isNotEmpty()) { + appendLine("Printed:") + run.output.forEach(::appendLine) + } + run.result.onSuccess { result -> + if (result.hasValue) appendLine("Result: ${runCatching { result.value.toString() }.getOrElse { "" }}") + } + when (error) { + null -> Unit + is ScriptCompilationException -> { + appendLine("Did not compile:") + error.reports.filter { it.severity.isError() }.forEach { report -> + val start = report.range.start + appendLine(if (start.line < 0) report.message else "${start.line + 1}:${start.column + 1}: ${report.message}") + } + } + else -> { + appendLine("Threw:") + append(error.stackTraceToString().lineSequence().take(MAX_TRACE_LINES).joinToString("\n")) + } + } + }.trimEnd() + return if (error == null) textResult(truncate(text)) else errorResult(truncate(text)) +} + +private const val SERVER = "server" +private const val CLIENT = "client" +private const val MAX_TRACE_LINES = 40 diff --git a/addons/mcp/src/main/resources/META-INF/plugin.properties b/addons/mcp/src/main/resources/META-INF/plugin.properties new file mode 100644 index 000000000..3b5e362ba --- /dev/null +++ b/addons/mcp/src/main/resources/META-INF/plugin.properties @@ -0,0 +1,7 @@ +id=hollowengine-mcp +name=HollowEngine MCP +version=${version} +entry=ru.hollowhorizon.hollowengine.addons.mcp.HollowMcpAddon +environment=common +description=Model Context Protocol server that lets coding agents work with scripts inside the running game +authors=HollowHorizon diff --git a/addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/en_us.json b/addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/en_us.json new file mode 100644 index 000000000..fbccd0761 --- /dev/null +++ b/addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/en_us.json @@ -0,0 +1,18 @@ +{ + "hollowengine_mcp.wait.heading": "An agent is looking at the world", + "hollowengine_mcp.wait.message": "The camera comes back in a moment", + "hollowengine_mcp.command.running": "running", + "hollowengine_mcp.command.stopped": "stopped", + "hollowengine_mcp.command.copy": "Copy the connection for your agent:", + "hollowengine_mcp.command.elsewhere": "Agents connect on the machine this game runs on, with the token from config/hollowengine-mcp.toml", + "hollowengine_mcp.command.host_only": "Only the host of a local world can copy the connection: agents reach it on this computer alone", + "hollowengine_mcp.command.copied": "Copied the connection for %s", + "hollowengine_mcp.command.hint_token": "Carries the access token", + "hollowengine_mcp.command.hint.claude": "A terminal command that adds this server to Claude Code", + "hollowengine_mcp.command.hint.codex": "A block for ~/.codex/config.toml", + "hollowengine_mcp.command.hint.json": "An mcpServers entry for Cursor and other clients that read one", + "hollowengine_mcp.command.hint.token": "The access token alone", + "hollowengine_mcp.command.status.starting": "The MCP server has not started yet", + "hollowengine_mcp.command.status.disabled": "The server is off: set enabled = true in config/hollowengine-mcp.toml and restart the game", + "hollowengine_mcp.command.status.port_taken": "Port %s is taken; pick another in config/hollowengine-mcp.toml and restart the game" +} diff --git a/addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/ru_ru.json b/addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/ru_ru.json new file mode 100644 index 000000000..bce9b0296 --- /dev/null +++ b/addons/mcp/src/main/resources/assets/hollowengine-mcp/lang/ru_ru.json @@ -0,0 +1,18 @@ +{ + "hollowengine_mcp.wait.heading": "Агент осматривает мир", + "hollowengine_mcp.wait.message": "Камера вернётся через мгновение", + "hollowengine_mcp.command.running": "работает", + "hollowengine_mcp.command.stopped": "остановлен", + "hollowengine_mcp.command.copy": "Скопировать подключение для агента:", + "hollowengine_mcp.command.elsewhere": "Агенты подключаются на той машине, где запущена игра, с токеном из config/hollowengine-mcp.toml", + "hollowengine_mcp.command.host_only": "Скопировать подключение может только хост локального мира: агенты подключаются только на этом компьютере", + "hollowengine_mcp.command.copied": "Подключение для %s скопировано", + "hollowengine_mcp.command.hint_token": "Содержит токен доступа", + "hollowengine_mcp.command.hint.claude": "Команда для терминала, добавляющая сервер в Claude Code", + "hollowengine_mcp.command.hint.codex": "Блок для ~/.codex/config.toml", + "hollowengine_mcp.command.hint.json": "Запись mcpServers для Cursor и других клиентов", + "hollowengine_mcp.command.hint.token": "Только токен доступа", + "hollowengine_mcp.command.status.starting": "MCP-сервер ещё не запущен", + "hollowengine_mcp.command.status.disabled": "Сервер выключен: поставьте enabled = true в config/hollowengine-mcp.toml и перезапустите игру", + "hollowengine_mcp.command.status.port_taken": "Порт %s занят: выберите другой в config/hollowengine-mcp.toml и перезапустите игру" +} diff --git a/addons/mcp/src/main/resources/hollowengine-mcp/instructions.md b/addons/mcp/src/main/resources/hollowengine-mcp/instructions.md new file mode 100644 index 000000000..eb882a809 --- /dev/null +++ b/addons/mcp/src/main/resources/hollowengine-mcp/instructions.md @@ -0,0 +1,50 @@ +HollowEngine is a Minecraft 1.21.1 mod whose content is written as Kotlin scripts. These tools act inside the running game this server belongs to. + +## Build features as script files, not snippets + +Whatever the user asks the game to do (a behavior, a reaction, an NPC, an item, a screen) belongs in a script file under {scripts}. A file survives restarts, the user can read and change it, and it is what they asked for. `run_snippet` is for looking at live state and trying an API out; what it does is gone after a restart. Never deliver a feature as a snippet, and do not leave coroutines from snippets running in the background. + +Pick the script type first (`docs_read scripting` compares them): +- Behavior of one entity, such as an NPC reacting to players: a node script `*.node.kts` with `@file:Attach()`, attached with `he scripting attach `. It is saved together with the entity. Read `scripting/node`, `scripting/node/editor` and `scripting/npc/actions`. Its shape: + +```kotlin +@file:Attach(NpcEntity::class) + +import ru.hollowhorizon.hollowengine.common.entities.NpcEntity + +val approachDistance by editor.property("Approach distance", min = 1.0, max = 12.0) { 4 } +val greeting by editor.property("Greeting animation") { "hello" } +var greeted = false + +onUpdate(every = 5.ticks) { + val npc = this@NpcEntity + val player = npc.level().players().filter { it.isAlive }.minByOrNull { it.distanceTo(npc) } ?: return@onUpdate + val distance = npc.distanceTo(player) + if (distance <= approachDistance && !greeted) { + npc.startLookingAt(player.position()) + npc.startAnimation(greeting) + greeted = true + } else if (distance >= approachDistance * 2) { + greeted = false + } +} +``` +- Logic for the whole world: a server node started with `he scripting run `, or event handlers in a `*.reload.kts`, which `reload` restarts. +- Items, blocks and anything else Minecraft only accepts at startup: `*.startup.kts`, applied after a game restart. +- A one-off action, like placing an NPC for a scene: a plain `*.kts` run with `he scripting run `, or a command. + +## Work in this loop + +1. Read the guide page for the area (`docs_search`, `docs_read`) and look the API up with `symbol_search` and `symbol_source` instead of guessing: the engine's API is mostly extension functions, and its parameters with defaults show `= …`. +2. Write the file on disk. Script paths are spelled `scripts/...` by commands and tools; addons' scripts are `namespace:path`. +3. Run `script_diagnostics` until it reports no errors. +4. Start it through `run_command` (`he scripting run`, `he scripting attach`, `reload`). Errors a script throws while running are written to the game log, {log}; read it from disk. +5. Check the result through game state: `he scripting list` and `he scripting list entity ` for running nodes, `run_snippet` for positions, components and values. + +## Assets are data: check their names + +Animation clips, materials and bones are named by each model; there is no clip every model has, and the guides' examples use made-up names such as "wave". Before a script plays a clip, list the real ones: `he model entity ` for the model an entity shows, `he model info ` for a model file. A clip the model lacks plays as nothing, and the game log says so. `he model animation play ` tries one out on an entity. + +`screenshot` cannot tell whether an animation plays, as a still frame shows no motion, and every picture costs a lot of context. Use it for what only a picture shows: placement, layout, lighting, materials, UI, and take as few as possible. + +Entities are picked with selectors, e.g. `@e[type=hollowengine:npc_entity,sort=nearest,limit=1]`. diff --git a/addons/mcp/src/test/kotlin/DocsLibraryTest.kt b/addons/mcp/src/test/kotlin/DocsLibraryTest.kt new file mode 100644 index 000000000..d029c8f49 --- /dev/null +++ b/addons/mcp/src/test/kotlin/DocsLibraryTest.kt @@ -0,0 +1,69 @@ +import ru.hollowhorizon.hollowengine.addons.mcp.docs.DocsLibrary +import ru.hollowhorizon.hollowengine.addons.mcp.docs.DocsPage +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNotNull +import kotlin.test.assertTrue + +class DocsLibraryTest { + private val states = DocsPage.parse( + "scripting/node/states", + """ + --- + title: States + order: 3 + --- + + Intro about node states. + ![A picture](/docs/state.webp) + + ## Switching states + Call `state("next")` to switch. See [events](/docs/hollowengine/scripting/events). + + ### Timeouts + A state may time out. + + ```kotlin + # not a heading inside code + ``` + + ## Saving + States are saved with the world. + """.trimIndent(), + ) + private val library = DocsLibrary(listOf(states, DocsPage.parse("scripting/node/index", "# Nodes\nNode scripts run handlers."))) + + @Test + fun `sections split at headings but not inside code`() { + assertEquals("States", states.title) + assertEquals(listOf("", "switching-states", "timeouts", "saving"), states.sections.map { it.anchor }) + assertTrue("# not a heading inside code" in states.section("timeouts")!!) + } + + @Test + fun `a section includes the deeper ones under it and stops at its own level`() { + val section = assertNotNull(states.section("switching-states")) + assertTrue("A state may time out." in section) + assertFalse("saved with the world" in section) + } + + @Test + fun `site links become page ids and images are dropped`() { + assertTrue("[events](scripting/events)" in states.text) + assertFalse("state.webp" in states.text) + } + + @Test + fun `folders and site paths resolve to their pages`() { + assertEquals("scripting/node/index", library.page("scripting/node")?.id) + assertEquals("scripting/node/states", library.page("/docs/hollowengine/scripting/node/states")?.id) + } + + @Test + fun `search needs every word and ranks headings first`() { + assertEquals(listOf("timeouts"), library.search("state time out", 10).map { it.section.anchor }) + assertEquals("saving", library.search("saving", 10).first().section.anchor) + assertTrue(library.search("nonexistent words", 10).isEmpty()) + } +} diff --git a/addons/mcp/src/test/kotlin/McpServerTest.kt b/addons/mcp/src/test/kotlin/McpServerTest.kt new file mode 100644 index 000000000..61de9cb46 --- /dev/null +++ b/addons/mcp/src/test/kotlin/McpServerTest.kt @@ -0,0 +1,83 @@ +import ru.hollowhorizon.hollowengine.addons.mcp.McpServer +import ru.hollowhorizon.hollowengine.addons.mcp.McpTool +import ru.hollowhorizon.hollowengine.addons.mcp.ParameterType +import ru.hollowhorizon.hollowengine.addons.mcp.ToolParameter +import ru.hollowhorizon.hollowengine.addons.mcp.textResult +import java.net.ServerSocket +import java.net.URI +import java.net.http.HttpClient +import java.net.http.HttpRequest +import java.net.http.HttpResponse +import kotlin.test.AfterTest +import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertContains +import kotlin.test.assertEquals +import kotlin.test.assertNotNull + +class McpServerTest { + private val echo = McpTool( + name = "echo", + description = "Repeats its text", + parameters = listOf(ToolParameter("text", ParameterType.STRING, "What to repeat", required = true)), + readOnly = true, + ) { arguments -> textResult("echo: ${arguments.string("text")}") } + + private val server = McpServer("test", listOf(echo)) { "instructions for the agent" } + private val client = HttpClient.newHttpClient() + private val port = ServerSocket(0).use { it.localPort } + + @BeforeTest + fun start() = server.start(port, TOKEN, javaClass.classLoader) + + @AfterTest + fun stop() = server.stop() + + @Test + fun `a request without the token is refused`() { + assertEquals(401, post(INITIALIZE, token = null).statusCode()) + assertEquals(401, post(INITIALIZE, token = "wrong").statusCode()) + } + + @Test + fun `a session lists and calls the tools`() { + val initialized = post(INITIALIZE) + assertEquals(200, initialized.statusCode(), initialized.body()) + assertContains(initialized.body(), "instructions for the agent") + val session = assertNotNull(initialized.headers().firstValue("mcp-session-id").orElse(null)) + + post("""{"jsonrpc":"2.0","method":"notifications/initialized"}""", session = session) + val listed = post("""{"jsonrpc":"2.0","id":2,"method":"tools/list"}""", session = session).body() + assertContains(listed, "\"echo\"") + assertContains(listed, "\"readOnlyHint\":true") + + val called = post( + """{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"echo","arguments":{"text":"hi"}}}""", + session = session, + ).body() + assertContains(called, "echo: hi") + + val missing = post( + """{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"echo","arguments":{}}}""", + session = session, + ).body() + assertContains(missing, "'text' is required") + assertContains(missing, "\"isError\":true") + } + + private fun post(body: String, token: String? = TOKEN, session: String? = null): HttpResponse { + val request = HttpRequest.newBuilder(URI("http://127.0.0.1:$port/mcp")) + .header("Content-Type", "application/json") + .header("Accept", "application/json, text/event-stream") + .apply { if (token != null) header("Authorization", "Bearer $token") } + .apply { if (session != null) header("mcp-session-id", session) } + .POST(HttpRequest.BodyPublishers.ofString(body)) + .build() + return client.send(request, HttpResponse.BodyHandlers.ofString()) + } + + private companion object { + const val TOKEN = "secret" + const val INITIALIZE = """{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1"}}}""" + } +} diff --git a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/GameRendererMixin.java b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/GameRendererMixin.java index d5e80494b..96499a02f 100644 --- a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/GameRendererMixin.java +++ b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/GameRendererMixin.java @@ -1,6 +1,8 @@ package ru.hollowhorizon.hollowengine.bootstrap.mixins.client; import net.minecraft.client.Camera; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,6 +21,11 @@ private void onRenderItemInHand(Camera camera, float partialTick, Matrix4f proje } } + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;tryTakeScreenshotIfNeeded()V")) + private void onLevelFrameRendered(DeltaTracker deltaTracker, boolean renderLevel, CallbackInfo ci) { + BootstrapRuntimeManager.bridge().onLevelFrameRendered(Minecraft.getInstance()); + } + @Inject(method = "getFov", at = @At("RETURN"), cancellable = true) private void onGetFov(Camera camera, float partialTick, boolean changingFov, CallbackInfoReturnable cir) { double fov = BootstrapRuntimeManager.bridge().onCameraFov( diff --git a/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java b/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java index fdba4c537..b8db3507b 100644 --- a/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java +++ b/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java @@ -314,6 +314,8 @@ default void close() { void initRegistryProvider(RegistryProvider provider); + void onLevelFrameRendered(Minecraft minecraft); + void onBeforeBlitScreen(Minecraft minecraft); void onBlitScreen(Minecraft minecraft); diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt index c9cc2e0a2..54b9f2639 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt @@ -500,6 +500,10 @@ class RuntimeBridgeEntrypoint : RuntimeBridge { override fun shouldForceAutoGuiScale(screen: Screen?): Boolean = screen is AutoScaled + override fun onLevelFrameRendered(minecraft: Minecraft) { + RenderTickEvent.LevelRendered.post(RenderTickEvent.LevelRendered(minecraft)) + } + override fun onBeforeBlitScreen(minecraft: Minecraft) { HollowIdeGameViewport.endRender() } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/scripting/ConsoleScript.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/scripting/ConsoleScript.kt index 6d4ec8804..2f5455c38 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/scripting/ConsoleScript.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/scripting/ConsoleScript.kt @@ -6,19 +6,18 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.job +import kotlinx.coroutines.launch import net.minecraft.client.Minecraft import net.minecraft.client.multiplayer.ClientLevel import net.minecraft.client.player.LocalPlayer import net.minecraft.client.server.IntegratedServer import org.apache.logging.log4j.LogManager -import org.apache.logging.log4j.Logger +import ru.hollowhorizon.hollowengine.common.coroutines.coroutineScope import ru.hollowhorizon.hollowengine.common.coroutines.dispatcher import ru.hollowhorizon.hollowengine.common.events.LogicalSide import ru.hollowhorizon.hollowengine.common.scripting.CONSOLE_SCRIPT_EXTENSION -import ru.hollowhorizon.hollowengine.common.scripting.ScriptingEnvironment -import ru.hollowhorizon.hollowengine.common.scripting.ide.ScriptCompilationException -import java.util.concurrent.Executors -import kotlin.script.experimental.api.constructorArgs +import ru.hollowhorizon.hollowengine.common.scripting.console.SnippetRun +import ru.hollowhorizon.hollowengine.common.scripting.console.SnippetRunner /** * Base of snippets typed into the IDE console. A snippet runs on the render thread and works in the @@ -37,7 +36,7 @@ abstract class ConsoleScript(scope: CoroutineScope) : CoroutineScope by scope { /** Prints to the console, not to the game's standard output. */ fun println(value: Any?) { - ConsoleScripts.LOGGER.info(value.toString()) + ConsoleScripts.runner.print(value.toString()) } fun print(value: Any?) = println(value) @@ -48,11 +47,7 @@ object ConsoleScripts { /** Also the name the IDE analyzes the console input under, so both agree on the script type. */ const val SCRIPT_NAME = "console.$CONSOLE_SCRIPT_EXTENSION" - internal val LOGGER: Logger = LogManager.getLogger("Console") - - private val compiler = Executors.newSingleThreadExecutor { task -> - Thread(task, "HollowEngine-ConsoleCompiler").apply { isDaemon = true } - } + internal val runner = SnippetRunner(SCRIPT_NAME, LogManager.getLogger("Console"), "HollowEngine-ConsoleCompiler") @Volatile private var scope: CoroutineScope? = null @@ -62,26 +57,22 @@ object ConsoleScripts { * snippet's last expression evaluates to is printed, like in a REPL. */ fun run(code: String, onFinished: () -> Unit) { - val environment = ScriptingEnvironment.currentOrNull() - if (environment == null) { - LOGGER.warn("Kotlin snippets need the compiler addon, which is not installed") - onFinished() - return - } - LOGGER.info("> {}", code.trimEnd()) - compiler.execute { - val compiled = environment.compiler.compile(SCRIPT_NAME, code) - Minecraft.getInstance().execute { - compiled.onSuccess { script -> - script.evaluate { constructorArgs(currentScope()) } - .onSuccess { result -> if (result.hasValue) LOGGER.info("= {}", result.value) } - .onFailure { error -> LOGGER.error("The snippet failed", error) } - }.onFailure(::reportCompilationFailure) + val minecraft = Minecraft.getInstance() + minecraft.coroutineScope.launch { + try { + evaluate(code) + } finally { onFinished() } } } + /** Compiles and runs [code] like [run], and hands back what it printed and returned. */ + suspend fun evaluate(code: String): SnippetRun { + val minecraft = Minecraft.getInstance() + return runner.run(code, minecraft.dispatcher) { listOf(currentScope()) } + } + /** Whether coroutines a snippet launched are still alive. */ val hasRunningWork: Boolean get() = scope?.coroutineContext?.job?.children?.any(Job::isActive) == true @@ -95,17 +86,4 @@ object ConsoleScripts { private fun currentScope(): CoroutineScope = scope ?: CoroutineScope( SupervisorJob() + Minecraft.getInstance().dispatcher + LogicalSide.CLIENT + CoroutineName("Console snippets"), ).also { scope = it } - - private fun reportCompilationFailure(error: Throwable) { - val reports = (error as? ScriptCompilationException)?.reports - if (reports == null) { - LOGGER.error("The snippet did not compile", error) - return - } - reports.filter { it.severity.isError() }.forEach { report -> - val start = report.range.start - if (start.line < 0) LOGGER.error(report.message) - else LOGGER.error("{}:{}: {}", start.line + 1, start.column + 1, report.message) - } - } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneCameraSystem.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneCameraSystem.kt index dfa0732bd..74ee4544e 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneCameraSystem.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/timeline/cutscene/CutsceneCameraSystem.kt @@ -19,14 +19,21 @@ object CutsceneCameraSystem { get() = controller /** - * The pose the camera should take. A cutscene being played wins over a story's own `@camera`, - * because it is the more specific instruction; the render bridge reads this one property, so both - * arrive through the same path. + * A pose held from outside any cutscene or story, by a tool that needs a frame seen from a given + * point. It wins over both while it is set and hides the hand like a cutscene does. + */ + @Volatile + var heldPose: CameraPose? = null + + /** + * The pose the camera should take. A held pose wins over everything; a cutscene being played wins + * over a story's own `@camera`, because it is the more specific instruction. The render bridge reads + * this one property, so all of them arrive through the same path. */ val currentPose: CameraPose? - get() = controller?.currentPose ?: StoryCameraSystem.currentPose + get() = heldPose ?: controller?.currentPose ?: StoryCameraSystem.currentPose - /** Whether anything is holding the camera, a cutscene or a story. */ + /** Whether anything is holding the camera: a held pose, a cutscene or a story. */ val isOverriding: Boolean get() = currentPose != null fun play(data: CutsceneData, loop: Boolean = false, anchor: CutsceneAnchor = CutsceneAnchor.WHERE_RECORDED) { @@ -100,6 +107,6 @@ object CutsceneCameraSystem { @SubscribeEvent fun onRenderHand(event: RenderItemInHandEvent) { - if (controller != null) event.isCanceled = true + if (controller != null || heldPose != null) event.isCanceled = true } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowWaitScreen.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowWaitScreen.kt new file mode 100644 index 000000000..017337253 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/screen/HollowWaitScreen.kt @@ -0,0 +1,29 @@ +package ru.hollowhorizon.hollowengine.client.ui.screen + +import androidx.compose.runtime.Composable +import ru.hollowhorizon.hollowengine.client.ui.Column +import ru.hollowhorizon.hollowengine.client.ui.Text +import ru.hollowhorizon.hollowengine.client.ui.style.MinecraftHssResourceLoader + +/** + * Covers the game while something else drives it for a moment, such as a tool moving the camera to + * take a picture, so the player neither sees the jumps nor steers into them. Its owner closes it: Esc + * does not, and the game keeps running underneath. + */ +class HollowWaitScreen(private val heading: String, private val message: String) : + HollowComposeUiScreen(heading, MinecraftHssResourceLoader.load(STYLESHEET)) { + + @Composable + override fun Content() { + Column(id = "wait-screen", tags = listOf("wait-screen")) { + Text(heading, tags = listOf("wait-heading")) + Text(message, tags = listOf("wait-message")) + } + } + + override fun shouldCloseOnEsc(): Boolean = false + + private companion object { + const val STYLESHEET = "hollowengine:ui/styles/wait-screen.hss" + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt index fb99fefac..7ed0c84a6 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/HollowEngineCommands.kt @@ -7,9 +7,6 @@ import com.mojang.brigadier.arguments.StringArgumentType import com.mojang.brigadier.builder.LiteralArgumentBuilder import com.mojang.brigadier.builder.RequiredArgumentBuilder import ru.hollowhorizon.hollowengine.common.utils.math.Vec3f -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.launch import kotlinx.serialization.Serializable import net.minecraft.client.Minecraft import net.minecraft.commands.CommandSourceStack @@ -23,15 +20,12 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.phys.Vec3 import ru.hollowhorizon.hollowengine.HollowEngine import ru.hollowhorizon.hollowengine.api.system -import ru.hollowhorizon.hollowengine.client.models.internal.Model -import ru.hollowhorizon.hollowengine.client.models.internal.manager.HollowModelManager import ru.hollowhorizon.hollowengine.client.particles.BedrockParticles import ru.hollowhorizon.hollowengine.client.particles.ParticleEffect import ru.hollowhorizon.hollowengine.client.particles.Transform import ru.hollowhorizon.hollowengine.client.utils.mc import ru.hollowhorizon.hollowengine.client.vfx.VfxAssets import ru.hollowhorizon.hollowengine.common.vfx.Vfx -import ru.hollowhorizon.hollowengine.common.coroutines.coroutineScope import ru.hollowhorizon.hollowengine.common.coroutines.runtimeContext import ru.hollowhorizon.hollowengine.common.dialogue.DialogueInput import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent @@ -157,20 +151,16 @@ private fun knownEffects(): List = private fun CommandExtension.registerModelCommands() { "model"(arg("model", StringArgumentType.string()) { getAvailableModels() }) { - executes { - val modelName = StringArgumentType.getString(this, "model") - ShowModelInfoPacket(modelName).send(source.playerOrException) - SUCCESS - } + executes { showModelInfo(source, StringArgumentType.getString(this, "model")) } } "model" { "info"(arg("model", StringArgumentType.string()) { getAvailableModels() }) { - executes { - val modelName = StringArgumentType.getString(this, "model") - ShowModelInfoPacket(modelName).send(source.playerOrException) - SUCCESS - } + executes { showModelInfo(source, StringArgumentType.getString(this, "model")) } + } + + "entity"(arg("entity", EntityArgument.entity())) { + executes { showEntityModel(source, EntityArgument.getEntity(this, "entity")) } } "attach"( @@ -656,6 +646,10 @@ private fun playEntityAnimation( source.sendFailure("Animation name must not be blank".literal) return 0 } + missingAnimation(entity, animation)?.let { reason -> + source.sendFailure(reason) + return 0 + } NpcAnimationRuntime.apply( entity = entity, @@ -761,42 +755,6 @@ class CopyTextPacket(val text: String) : HollowPacket { } } -@HollowPacketHandler(HollowPacketHandler.Direction.TO_CLIENT) -@Serializable -class ShowModelInfoPacket(val model: String) : HollowPacket { - override fun handle(player: Player) { - val location = model.rl - Minecraft.getInstance().coroutineScope.launch { - val hollowModel = HollowModelManager.getOrCreate(location) - .filter { it !== Model.EMPTY } - .first() - - player.sendSystemMessage( - "hollowengine.commands.model_animations".mcTranslate(model.substringAfterLast('/')) - ) - - hollowModel.animationsByName.keys.forEach { anim -> - player.sendSystemMessage( - ("- ".literal + anim.literal) - .onHoverText("hollowengine.tooltips.copy".mcTranslate) - .onClickCopy(anim) - ) - } - - player.sendSystemMessage( - "hollowengine.commands.model_textures".mcTranslate(model.substringAfterLast('/')) - ) - - hollowModel.materials.map { it.texture.path.removeSuffix(".png") }.forEach { texture -> - player.sendSystemMessage( - ("- ".literal + texture.literal) - .onHoverText("hollowengine.tooltips.copy".mcTranslate) - .onClickCopy(texture) - ) - } - } - } -} // endregion diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/ModelInfo.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/ModelInfo.kt new file mode 100644 index 000000000..ac43d3ffe --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/commands/ModelInfo.kt @@ -0,0 +1,58 @@ +package ru.hollowhorizon.hollowengine.common.commands + +import net.minecraft.commands.CommandSourceStack +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.Entity +import ru.hollowhorizon.hollowengine.common.models.ServerModelAnimationMetadata +import ru.hollowhorizon.hollowengine.common.npcs.NpcAnimationRuntime +import ru.hollowhorizon.hollowengine.common.utils.literal +import ru.hollowhorizon.hollowengine.common.utils.mcTranslate +import ru.hollowhorizon.hollowengine.common.utils.onClickCopy +import ru.hollowhorizon.hollowengine.common.utils.onHoverText +import ru.hollowhorizon.hollowengine.common.utils.plus +import java.util.Locale + +/** + * Lists a model's animation clips and materials as command feedback. The server reads the model + * itself, so the answer reaches whoever ran the command, a console or a tool included. + */ +internal fun showModelInfo(source: CommandSourceStack, model: String): Int { + val loaded = ServerModelAnimationMetadata.model(model) + if (loaded == null) { + source.sendFailure("hollowengine.commands.model_unreadable".mcTranslate(model)) + return 0 + } + source.sendSuccess({ "hollowengine.commands.model_animations".mcTranslate(model) }, false) + loaded.animations.sortedBy { it.name }.forEach { clip -> + source.sendSuccess({ entry(clip.name, " (%.2f s)".format(Locale.ROOT, clip.duration)) }, false) + } + source.sendSuccess({ "hollowengine.commands.model_materials".mcTranslate(model) }, false) + loaded.materials.sortedBy { it.name }.forEach { material -> + source.sendSuccess({ entry(material.name, " → ${material.texture}") }, false) + } + return loaded.animations.size +} + +/** [showModelInfo] for the model [entity] shows. */ +internal fun showEntityModel(source: CommandSourceStack, entity: Entity): Int { + val model = NpcAnimationRuntime.modelOf(entity) + if (model == null) { + source.sendFailure("hollowengine.commands.entity_without_model".mcTranslate(entity.name)) + return 0 + } + return showModelInfo(source, model) +} + +/** Refuses a clip [entity]'s model does not have, naming the ones it does. Null when it may play. */ +internal fun missingAnimation(entity: Entity, animation: String): Component? { + val clips = NpcAnimationRuntime.animationNames(entity) ?: return null + if (animation in clips) return null + return "hollowengine.commands.model_no_animation".mcTranslate( + NpcAnimationRuntime.modelOf(entity).orEmpty(), animation, clips.sorted().joinToString(), + ) +} + +private fun entry(name: String, detail: String) = + ("- ".literal + name.literal + detail.literal) + .onHoverText("hollowengine.tooltips.copy".mcTranslate) + .onClickCopy(name) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/config/Config.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/config/Config.kt index 87f754667..2eac4186c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/config/Config.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/config/Config.kt @@ -87,7 +87,8 @@ open class Config { val parentDir = configFile.parent try { val key = parentDir.register(fileWatcher, ENTRY_MODIFY) - configRegistrations[key] = FileWatcherEntry(this, configFile, configFile.fileName.toString()) + val entry = FileWatcherEntry(this, configFile, configFile.fileName.toString()) + configRegistrations.compute(key) { _, entries -> entries.orEmpty() + (entry.fileName to entry) } } catch (e: Exception) { LOGGER.warn("Failed to register file watcher for {}", configFile.fileName, e) } @@ -179,7 +180,8 @@ open class Config { val CONFIG_DIR: Path = Paths.get("config").toAbsolutePath() private val fileWatcher = FileSystems.getDefault().newWatchService() - private val configRegistrations = ConcurrentHashMap() + /** Watched configs by directory, then by file name: every config in a directory shares its key. */ + private val configRegistrations = ConcurrentHashMap>() private val saveExecutor = Executors.newSingleThreadScheduledExecutor { runnable -> Thread(runnable, "Config-Save-Thread").apply { isDaemon = true @@ -199,12 +201,11 @@ open class Config { while (isActive) { try { val key = fileWatcher.take() ?: continue - val entry = configRegistrations[key] ?: continue + val entries = configRegistrations[key] ?: continue key.pollEvents().forEach { event -> - if (event.kind() == ENTRY_MODIFY && event.context()?.toString() == entry.fileName) { - waitForFileStable(entry) - } + if (event.kind() != ENTRY_MODIFY) return@forEach + entries[event.context()?.toString()]?.let { entry -> waitForFileStable(entry) } } if (!key.reset()) { diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/events/client/render/RenderTickEvent.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/events/client/render/RenderTickEvent.kt index aa982f3fc..516c7b464 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/events/client/render/RenderTickEvent.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/events/client/render/RenderTickEvent.kt @@ -13,6 +13,11 @@ open class RenderTickEvent(val minecraft: Minecraft) : ClientEvent { companion object : EventHandler() } + /** The level is in the main target, finished, and the GUI has not been drawn over it yet. */ + class LevelRendered(minecraft: Minecraft) : RenderTickEvent(minecraft) { + companion object : EventHandler() + } + class Blit(minecraft: Minecraft) : RenderTickEvent(minecraft) { companion object : EventHandler() } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/npcs/NpcAnimationTransitionPacket.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/npcs/NpcAnimationTransitionPacket.kt index 2f9e9e8c6..16c45d7a7 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/npcs/NpcAnimationTransitionPacket.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/npcs/NpcAnimationTransitionPacket.kt @@ -6,6 +6,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.Entity import net.minecraft.world.entity.player.Player +import ru.hollowhorizon.hollowengine.HollowEngine import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent import ru.hollowhorizon.hollowengine.common.events.tick.TickEvent import ru.hollowhorizon.hollowengine.common.attachments.api.AttachmentRegistry @@ -42,9 +43,19 @@ fun onNpcAnimationServerTick(event: TickEvent.Server) { } object NpcAnimationRuntime { + /** Clips already reported missing, so a script playing one in a loop warns once. */ + private val reportedMissing = HashSet>() + + /** The model [entity] shows, when a component says which one. */ + fun modelOf(entity: Entity): String? = + AttachmentRegistry.componentsById(entity).values.filterIsInstance().firstOrNull()?.model + + /** The clip names of [entity]'s model, or null when the entity has no model the server can read. */ + fun animationNames(entity: Entity): Set? = + modelOf(entity)?.let { model -> ServerModelAnimationMetadata.model(model)?.animationsByName?.keys } + fun animationDuration(entity: Entity, animation: String): Float? { - val model = AttachmentRegistry.componentsById(entity).values.filterIsInstance().firstOrNull()?.model - ?: return null + val model = modelOf(entity) ?: return null return ServerModelAnimationMetadata.animationDuration(model, animation) } @@ -62,6 +73,7 @@ object NpcAnimationRuntime { val current = components[animationsId] as? AnimationsComponent ?: AnimationsComponent() val withoutOld = from?.let { current.fadeOutClip(entity.level().gameTime, it, duration) } ?: current val model = components.values.filterIsInstance().firstOrNull()?.model + if (to != null && model != null) warnIfMissing(model, to) val gameTime = entity.level().gameTime val updated = to ?.takeIf(String::isNotBlank) @@ -82,6 +94,16 @@ object NpcAnimationRuntime { components[animationsId] = updated } + /** A clip the model lacks plays as nothing at all; say so, with the names that would have worked. */ + private fun warnIfMissing(model: String, animation: String) { + val clips = ServerModelAnimationMetadata.model(model)?.animationsByName?.keys ?: return + if (animation in clips || !reportedMissing.add(model to animation)) return + HollowEngine.LOGGER.warn( + "Model {} has no animation '{}', so nothing plays. Its animations: {}", + model, animation, clips.sorted().joinToString(), + ) + } + fun removeLayer(entity: Entity, layerId: String) { val animationsId = ComponentDescriptorRegistry.idFor(AnimationsComponent::class) ?: return val components = AttachmentRegistry.componentsById(entity) diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/DefaultScriptDefinitions.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/DefaultScriptDefinitions.kt index c9a33432b..e6d980ee5 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/DefaultScriptDefinitions.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/DefaultScriptDefinitions.kt @@ -5,6 +5,7 @@ import net.minecraft.server.MinecraftServer import net.minecraft.world.item.ItemStack import ru.hollowhorizon.hollowengine.common.events.SubscribeEvent import ru.hollowhorizon.hollowengine.common.scripting.annotations.Import +import ru.hollowhorizon.hollowengine.common.scripting.console.ServerConsoleScript import ru.hollowhorizon.hollowengine.common.scripting.mixins.MixinScript import ru.hollowhorizon.hollowengine.common.scripting.nodes.NodeScript import ru.hollowhorizon.hollowengine.common.scripting.reload.ReloadScript @@ -18,6 +19,7 @@ const val UI_SCRIPT_EXTENSION = "ui.kts" const val RELOAD_SCRIPT_EXTENSION = "reload.kts" const val STARTUP_SCRIPT_EXTENSION = "startup.kts" const val CONSOLE_SCRIPT_EXTENSION = "console.kts" +const val SERVER_CONSOLE_SCRIPT_EXTENSION = "server-console.kts" const val MIXIN_SCRIPT_EXTENSION = "mixin.kts" private const val CLIENT_RELOAD_CONTEXT = "ru.hollowhorizon.hollowengine.client.scripting.ClientReloadContext" private const val CONSOLE_SCRIPT = "ru.hollowhorizon.hollowengine.client.scripting.ConsoleScript" @@ -206,6 +208,26 @@ object DefaultScriptDefinitions { "ru.hollowhorizon.hollowengine.common.utils.literal", ), ) + this += Provider( + extension = SERVER_CONSOLE_SCRIPT_EXTENSION, + baseClass = ServerConsoleScript::class.qualifiedName!!, + defaultImports = listOf( + Import::class.qualifiedName!!, + ResourceLocation::class.qualifiedName!!, + ItemStack::class.qualifiedName!!, + "net.minecraft.core.BlockPos", + "net.minecraft.world.phys.Vec3", + "net.minecraft.world.entity.Entity", + "net.minecraft.world.entity.LivingEntity", + "net.minecraft.server.level.ServerLevel", + "net.minecraft.server.level.ServerPlayer", + "kotlinx.coroutines.launch", + "kotlinx.coroutines.delay", + "kotlin.time.Duration.Companion.seconds", + "ru.hollowhorizon.hollowengine.common.utils.rl", + "ru.hollowhorizon.hollowengine.common.utils.literal", + ), + ) } } } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/compiling/KotlinCompiledScriptJar.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/compiling/KotlinCompiledScriptJar.kt index 4790ead4e..d51e52abc 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/compiling/KotlinCompiledScriptJar.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/compiling/KotlinCompiledScriptJar.kt @@ -360,11 +360,12 @@ class MemoryClassLoader( override fun getResourceAsStream(name: String): InputStream? = resources[name]?.inputStream() } +/** Kotlin scripting counts lines and columns from 1; [Position] counts them from 0, like the analyzer. */ fun ScriptDiagnostic.convert(): Diagnostic { return Diagnostic(location?.let { Range( - Position(it.start.line, it.start.col), - Position(it.end?.line ?: it.start.line, it.end?.col ?: it.start.col) + Position(it.start.line - 1, it.start.col - 1), + Position((it.end?.line ?: it.start.line) - 1, (it.end?.col ?: it.start.col) - 1) ) } ?: Range(Position(-1, -1), Position(-1, -1)), when (severity) { ScriptDiagnostic.Severity.DEBUG -> Severity.DEBUG diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/ServerConsoleScript.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/ServerConsoleScript.kt new file mode 100644 index 000000000..a55720a0b --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/ServerConsoleScript.kt @@ -0,0 +1,75 @@ +package ru.hollowhorizon.hollowengine.common.scripting.console + +import kotlinx.coroutines.CoroutineName +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel +import kotlinx.coroutines.job +import net.minecraft.server.MinecraftServer +import net.minecraft.server.level.ServerLevel +import net.minecraft.server.level.ServerPlayer +import org.apache.logging.log4j.LogManager +import ru.hollowhorizon.hollowengine.common.coroutines.coroutineScope +import ru.hollowhorizon.hollowengine.common.coroutines.dispatcher +import ru.hollowhorizon.hollowengine.common.events.LogicalSide +import ru.hollowhorizon.hollowengine.common.scripting.SERVER_CONSOLE_SCRIPT_EXTENSION + +/** + * Base of snippets run on the logical server: a dedicated one, or the one inside a singleplayer or LAN + * world. A snippet runs on the server thread, and the coroutines it launches keep running after it + * returns, until [ServerConsoleScripts.stop] or until the server stops. + */ +abstract class ServerConsoleScript(scope: CoroutineScope, val server: MinecraftServer) : CoroutineScope by scope { + val overworld: ServerLevel get() = server.overworld() + + val players: List get() = server.playerList.players + + /** + * The player hosting a singleplayer or LAN world, or the only one on a dedicated server; null when + * that does not name a single player. + */ + val player: ServerPlayer? + get() = players.firstOrNull { server.isSingleplayerOwner(it.gameProfile) } ?: players.singleOrNull() + + /** Prints to the console, not to the game's standard output. */ + fun println(value: Any?) { + ServerConsoleScripts.runner.print(value.toString()) + } + + fun print(value: Any?) = println(value) +} + +/** Compiles server snippets off the server thread and runs them on it. */ +object ServerConsoleScripts { + const val SCRIPT_NAME = "console.$SERVER_CONSOLE_SCRIPT_EXTENSION" + + internal val runner = SnippetRunner(SCRIPT_NAME, LogManager.getLogger("Server Console"), "HollowEngine-ServerConsoleCompiler") + + /** Touched only on the server thread, where snippets are constructed. */ + private var scope: CoroutineScope? = null + private var scopeServer: MinecraftServer? = null + + /** Compiles and runs [code] on [server]'s thread, and hands back what it printed and returned. */ + suspend fun evaluate(server: MinecraftServer, code: String): SnippetRun = + runner.run(code, server.dispatcher) { listOf(scopeOf(server), server) } + + /** Cancels every coroutine server snippets have launched. Call it on the server thread. */ + fun stop() { + scope?.cancel() + scope = null + scopeServer = null + } + + /** A child of the server's own scope, so a stopping server takes the snippets' coroutines with it. */ + private fun scopeOf(server: MinecraftServer): CoroutineScope { + val current = scope + if (current != null && scopeServer === server && current.coroutineContext.job.isActive) return current + return CoroutineScope( + SupervisorJob(server.coroutineScope.coroutineContext.job) + server.dispatcher + LogicalSide.SERVER + + CoroutineName("Server console snippets"), + ).also { + scope = it + scopeServer = server + } + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/SnippetRunner.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/SnippetRunner.kt new file mode 100644 index 000000000..a85e8d407 --- /dev/null +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/console/SnippetRunner.kt @@ -0,0 +1,79 @@ +package ru.hollowhorizon.hollowengine.common.scripting.console + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.asCoroutineDispatcher +import kotlinx.coroutines.withContext +import org.apache.logging.log4j.Logger +import ru.hollowhorizon.hollowengine.common.scripting.ScriptingEnvironment +import ru.hollowhorizon.hollowengine.common.scripting.compiling.ScriptResult +import ru.hollowhorizon.hollowengine.common.scripting.ide.ScriptCompilationException +import java.util.concurrent.Executors +import kotlin.script.experimental.api.constructorArgs + +/** + * What one snippet left behind: the lines it printed while it ran, and either its result or why it did + * not produce one. A [ScriptCompilationException] means it never compiled. + */ +class SnippetRun(val output: List, val result: Result) + +/** + * Compiles console snippets off the game thread and runs them on it. Every snippet is echoed to [logger] + * along with what it printed and what it returned, so the console shows the same whoever typed it. + */ +class SnippetRunner(private val scriptName: String, private val logger: Logger, compilerThreadName: String) { + private val compiler = Executors.newSingleThreadExecutor { task -> + Thread(task, compilerThreadName).apply { isDaemon = true } + }.asCoroutineDispatcher() + + /** Lines printed by the snippet running right now. Touched only on the thread snippets run on. */ + private var capture: MutableList? = null + + /** Called by the snippet base classes; what a snippet prints after it returned only reaches the log. */ + fun print(line: String) { + logger.info(line) + capture?.add(line) + } + + /** Compiles [code], then runs it on [gameThread] with the script constructor's [arguments]. */ + suspend fun run(code: String, gameThread: CoroutineDispatcher, arguments: () -> List): SnippetRun { + val environment = ScriptingEnvironment.currentOrNull() + if (environment == null) { + logger.warn(COMPILER_MISSING) + return SnippetRun(emptyList(), Result.failure(IllegalStateException(COMPILER_MISSING))) + } + logger.info("> {}", code.trimEnd()) + val compiled = withContext(compiler) { environment.compiler.compile(scriptName, code) } + return withContext(gameThread) { + val output = ArrayList() + capture = output + val result = try { + compiled.mapCatching { script -> + script.evaluate { constructorArgs(*arguments().toTypedArray()) }.getOrThrow() + } + } finally { + capture = null + } + report(result) + SnippetRun(output, result) + } + } + + private fun report(result: Result) { + result.onSuccess { value -> if (value.hasValue) logger.info("= {}", value.value) } + val error = result.exceptionOrNull() ?: return + val reports = (error as? ScriptCompilationException)?.reports + if (reports == null) { + logger.error("The snippet failed", error) + return + } + reports.filter { it.severity.isError() }.forEach { report -> + val start = report.range.start + if (start.line < 0) logger.error(report.message) + else logger.error("{}:{}: {}", start.line + 1, start.column + 1, report.message) + } + } + + companion object { + const val COMPILER_MISSING = "Kotlin snippets need the compiler addon, which is not installed" + } +} diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ScriptingAnalyzer.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ScriptingAnalyzer.kt index fcf0ee5b7..9155c26e5 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ScriptingAnalyzer.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/common/scripting/ide/ScriptingAnalyzer.kt @@ -28,8 +28,29 @@ interface ScriptingAnalyzer { fun signatureHelp(name: String, text: String, offset: Int): SignatureHelp? = null fun hover(name: String, text: String, offset: Int): HoverInfo? = null fun diagnostic(name: String, text: String): List + + /** + * Classes and top-level functions and properties on the script classpath whose name matches + * [query]: a simple name, part of one, or a name qualified by part of its package. Closest first. + */ + fun searchSymbols(query: String, limit: Int): List = emptyList() + + /** + * Source of the class, member or top-level declaration [qualifiedName] names, read from a sources + * jar when there is one and decompiled otherwise; [DefinitionLocation.offset] points at the name. + */ + fun symbolSource(qualifiedName: String): DefinitionLocation? = null } +enum class SymbolKind { CLASS, ANNOTATION, FUNCTION, PROPERTY } + +/** A declaration found by [ScriptingAnalyzer.searchSymbols]; [signature] is empty for classes. */ +data class SymbolMatch( + val kind: SymbolKind, + val qualifiedName: String, + val signature: String = "", +) + /** * Receives completions as they are produced. Returning `false` means the request is stale (the * caret moved on) and the analyzer should stop enumerating instead of finishing a scan nobody is diff --git a/runtime/src/main/lang/en_us/hollowengine/commands.json b/runtime/src/main/lang/en_us/hollowengine/commands.json index 5e51ab4ab..e85f6988f 100644 --- a/runtime/src/main/lang/en_us/hollowengine/commands.json +++ b/runtime/src/main/lang/en_us/hollowengine/commands.json @@ -1,7 +1,10 @@ { "copy": "§6[§bHollow Engine§6] §7Value: %s copied.", "model_animations": "§6[§bHollow Engine§6] Model %s animations:", - "model_textures": "§6[§bHollow Engine§6] Model %s textures:", + "model_materials": "§6[§bHollow Engine§6] Model %s materials:", + "model_unreadable": "Model %s could not be read: check the path and the file", + "entity_without_model": "%s has no model component; it shows its vanilla model", + "model_no_animation": "Model %s has no animation '%s'. Its animations: %s", "tags": "§6[§bHollow Engine§6] §7Item tags: ", "scripting_state_requires_node_script": "Cannot use an initial state with '%s': states are supported only by .node.kts scripts. Use a .node.kts script or run the .kts script without the state argument.", "expected_script_path": "Expected a script path, for example scripts/nodes/example.node.kts or my-addon:nodes/example.node.kts", diff --git a/runtime/src/main/lang/ru_ru/hollowengine/commands.json b/runtime/src/main/lang/ru_ru/hollowengine/commands.json index a5b1433e8..f0c7438a7 100644 --- a/runtime/src/main/lang/ru_ru/hollowengine/commands.json +++ b/runtime/src/main/lang/ru_ru/hollowengine/commands.json @@ -1,7 +1,10 @@ { "copy": "§6[§bHollow Engine§6] §7Значение: %s скопировано.", "model_animations": "§6[§bHollow Engine§6] Анимации модели %s:", - "model_textures": "§6[§bHollow Engine§6] Текстуры модели %s:", + "model_materials": "§6[§bHollow Engine§6] Материалы модели %s:", + "model_unreadable": "Не удалось прочитать модель %s: проверьте путь и файл", + "entity_without_model": "У %s нет компонента модели, показывается ванильная модель", + "model_no_animation": "В модели %s нет анимации '%s'. Её анимации: %s", "tags": "§6[§bHollow Engine§6] §7Теги предмета: ", "scripting_state_requires_node_script": "Нельзя передать начальный стейт скрипту '%s': стейты поддерживаются только скриптами .node.kts. Используйте скрипт .node.kts либо запустите .kts без аргумента стейта.", "expected_script_path": "Ожидался путь к скрипту, например scripts/nodes/example.node.kts или my-addon:nodes/example.node.kts", diff --git a/runtime/src/main/resources/assets/hollowengine/ui/styles/wait-screen.hss b/runtime/src/main/resources/assets/hollowengine/ui/styles/wait-screen.hss new file mode 100644 index 000000000..a1c46a849 --- /dev/null +++ b/runtime/src/main/resources/assets/hollowengine/ui/styles/wait-screen.hss @@ -0,0 +1,24 @@ +/* + * The screen that covers the game while a tool drives it. It is opaque on purpose: whatever the tool + * does to the camera underneath should not be seen. + */ + +@import "hollowengine:ui/styles/theme.hss"; + +.wait-screen { + size: 100% 100%; + gap: 6px; + align-items: center center; + background: $bg-window; + font-family: $font; +} + +.wait-heading { + font-size: $font-size-title; + foreground: $text-strong; +} + +.wait-message { + font-size: $font-size; + foreground: $text-muted; +} From 4cc9dee121801bf154bc3834b11c8236444f8c61 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sun, 27 Sep 2026 11:51:11 +0300 Subject: [PATCH 21/25] Include MCP addon in build collection --- build.gradle.kts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a5a35ee85..a64f6a356 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -255,9 +255,13 @@ publishMods { } tasks.named("buildAndCollect") { + dependsOn(buildAddons) + val compilerJar = project(":addons:compiler").tasks.named("addonJar") - dependsOn(compilerJar) + val mcpJar = project(":addons:mcp").tasks.named("addonJar") + from(compilerJar.flatMap { it.archiveFile }) + from(mcpJar.flatMap { it.archiveFile }) } val buildAddons = tasks.register("buildAddons") { @@ -282,8 +286,4 @@ gradle.projectsEvaluated { dependsOn(compilerJar) from(compilerJar.flatMap { it.archiveFile }) } -} - -tasks.named("buildAndCollect") { - dependsOn(buildAddons) -} +} \ No newline at end of file From d9b7ec5265f9bc0818ef7e14c69d76b6510f8b7c Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sun, 27 Sep 2026 12:43:01 +0300 Subject: [PATCH 22/25] Refactor game-viewport window-pass handling --- .../mixins/client/MinecraftMixin.java | 5 -- .../bootstrap/mixins/client/WindowMixin.java | 4 +- .../bootstrap/runtime/RuntimeBridge.java | 10 +-- .../bootstrap/RuntimeBridgeEntrypoint.kt | 16 ++-- .../client/ui/ide/HollowIdeGameViewport.kt | 74 +++++++++---------- .../client/ui/ide/panels/GameViewportDock.kt | 18 ++++- 6 files changed, 66 insertions(+), 61 deletions(-) diff --git a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/MinecraftMixin.java b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/MinecraftMixin.java index 007b42dcc..af35a3ecf 100644 --- a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/MinecraftMixin.java +++ b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/MinecraftMixin.java @@ -56,11 +56,6 @@ private void onStopHead(CallbackInfo ci) { BootstrapRuntimeManager.bridge().onClientStopping((Minecraft) (Object) this); } - @Inject(method = "resizeDisplay", at = @At("RETURN")) - private void onResizeDisplay(CallbackInfo ci) { - BootstrapRuntimeManager.bridge().onClientResized((Minecraft) (Object) this); - } - @Inject(method = "setLevel", at = @At("HEAD")) private void onSetClientLevel(ClientLevel newLevel, ReceivingLevelScreen.Reason reason, CallbackInfo ci) { if (level != newLevel) hollowengine$releaseLevel(); diff --git a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/WindowMixin.java b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/WindowMixin.java index 3e1db0667..1599f52cc 100644 --- a/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/WindowMixin.java +++ b/bootstrap/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/mixins/client/WindowMixin.java @@ -16,7 +16,7 @@ public class WindowMixin { @Inject(method = "getWidth", at = @At("HEAD"), cancellable = true) private void hollowengine$getWidth(CallbackInfoReturnable cir) { RuntimeBridge.GameViewportMetrics metrics = BootstrapRuntimeManager.bridge().getGameViewportMetrics(); - if (metrics != null && BootstrapRuntimeManager.bridge().isGameViewportRendering()) { + if (metrics != null && !BootstrapRuntimeManager.bridge().isGameViewportWindowPass()) { cir.setReturnValue(metrics.framebufferWidth()); } } @@ -24,7 +24,7 @@ public class WindowMixin { @Inject(method = "getHeight", at = @At("HEAD"), cancellable = true) private void hollowengine$getHeight(CallbackInfoReturnable cir) { RuntimeBridge.GameViewportMetrics metrics = BootstrapRuntimeManager.bridge().getGameViewportMetrics(); - if (metrics != null && BootstrapRuntimeManager.bridge().isGameViewportRendering()) { + if (metrics != null && !BootstrapRuntimeManager.bridge().isGameViewportWindowPass()) { cir.setReturnValue(metrics.framebufferHeight()); } } diff --git a/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java b/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java index b8db3507b..16b100963 100644 --- a/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java +++ b/bridge/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/runtime/RuntimeBridge.java @@ -180,8 +180,6 @@ public interface RuntimeBridge extends AutoCloseable { void onClientRenderTickPost(Minecraft client); - void onClientResized(Minecraft client); - void onClientStopping(Minecraft client); void onLevelCreated(Level level); @@ -283,13 +281,13 @@ public interface RuntimeBridge extends AutoCloseable { /** * Virtual framebuffer and GUI dimensions used while the editor embeds the game in a dock. - * GUI dimensions remain active for input and screen layout; framebuffer dimensions are only - * exposed while {@link #isGameViewportRendering()} is true, so the IDE itself still renders - * against the real window. + * GUI dimensions are always answered; framebuffer dimensions are answered everywhere except + * the window pass ({@link #isGameViewportWindowPass()}), where the finished frame and the + * editor are drawn onto the real window. */ @Nullable GameViewportMetrics getGameViewportMetrics(); - boolean isGameViewportRendering(); + boolean isGameViewportWindowPass(); void onRenderLevelStage(LevelRenderer renderer, PoseStack poseStack, Matrix4f projectionMatrix, int ticks, float partialTick, Camera camera, @Nullable Frustum frustum, RenderLevelStage stage); diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt index 54b9f2639..d7759ad9f 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/bootstrap/RuntimeBridgeEntrypoint.kt @@ -505,12 +505,16 @@ class RuntimeBridgeEntrypoint : RuntimeBridge { } override fun onBeforeBlitScreen(minecraft: Minecraft) { - HollowIdeGameViewport.endRender() + HollowIdeGameViewport.beginWindowPass() } override fun onBlitScreen(minecraft: Minecraft) { HollowIdeGameViewport.restoreWindowViewport() - RenderTickEvent.Blit.post(RenderTickEvent.Blit(minecraft)) + try { + RenderTickEvent.Blit.post(RenderTickEvent.Blit(minecraft)) + } finally { + HollowIdeGameViewport.endWindowPass() + } } override fun onServerCreated(server: MinecraftServer, serverThread: Thread, levelRoot: Path) { @@ -550,11 +554,11 @@ class RuntimeBridgeEntrypoint : RuntimeBridge { } override fun onClientTick(client: Minecraft) { + HollowIdeGameViewport.beginFrame(client) RuntimeDispatcherState.runClientTasks(client) } override fun onClientRenderTickPre(client: Minecraft) { - HollowIdeGameViewport.beginRender(client) CutsceneCameraSystem.update(client) RenderTickEvent.Pre.post(RenderTickEvent.Pre(client)) } @@ -563,10 +567,6 @@ class RuntimeBridgeEntrypoint : RuntimeBridge { RenderTickEvent.Post.post(RenderTickEvent.Post(client)) } - override fun onClientResized(client: Minecraft) { - HollowIdeGameViewport.invalidateWindowMetrics() - } - override fun onClientStopping(client: Minecraft) { RuntimeDispatcherState.stopClient(client) } @@ -966,7 +966,7 @@ class RuntimeBridgeEntrypoint : RuntimeBridge { override fun getGameViewportMetrics(): RuntimeBridge.GameViewportMetrics? = HollowIdeGameViewport.metrics() - override fun isGameViewportRendering(): Boolean = HollowIdeGameViewport.isRendering() + override fun isGameViewportWindowPass(): Boolean = HollowIdeGameViewport.isWindowPass() override fun onRenderLevelStage( renderer: LevelRenderer, diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeGameViewport.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeGameViewport.kt index cef8ec4e1..9e1a1a61c 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeGameViewport.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/HollowIdeGameViewport.kt @@ -4,7 +4,6 @@ import net.minecraft.client.Minecraft import org.lwjgl.glfw.GLFW import org.lwjgl.opengl.GL11 import ru.hollowhorizon.hollowengine.bootstrap.runtime.RuntimeBridge -import ru.hollowhorizon.hollowengine.client.ui.ide.HollowIdeGameViewport.rendering import ru.hollowhorizon.hollowengine.client.ui.layout.UiRect import kotlin.math.ceil import kotlin.math.min @@ -14,14 +13,16 @@ import kotlin.math.roundToInt * Where the game panel sits, and how large the game renders for it. */ internal object HollowIdeGameViewport { + private class PanelReport(val owner: Any, val bounds: UiRect) + @Volatile - private var panelBounds: UiRect? = null + private var panel: PanelReport? = null @Volatile private var windowMetrics: RuntimeBridge.GameViewportMetrics? = null @Volatile - private var rendering = false + private var windowPass = false @Volatile private var windowWidth = 0 @@ -29,24 +30,30 @@ internal object HollowIdeGameViewport { @Volatile private var windowHeight = 0 - /** Called by the panel on every layout pass, and with null once it leaves the screen. */ - fun report(bounds: UiRect?) { - panelBounds = bounds + /** Called by a docked panel with its bounds; [owner] tells an old panel instance from its replacement. */ + fun report(owner: Any, bounds: UiRect) { + panel = PanelReport(owner, bounds) + } + + /** Withdraws [owner]'s bounds, unless another panel instance has reported since. */ + fun release(owner: Any) { + if (panel?.owner === owner) panel = null } /** Whether a docked panel is showing the game, which is the only case the game is cut down for. */ - fun isEmbedded(): Boolean = panelBounds != null + fun isEmbedded(): Boolean = panel != null fun windowWidth(): Int = windowWidth.takeIf { it > 0 } ?: Minecraft.getInstance().window.width fun windowHeight(): Int = windowHeight.takeIf { it > 0 } ?: Minecraft.getInstance().window.height /** - * Makes the main game target match the physical pixels the panel occupies. The window getters - * are answered with the panel's size only while [rendering], while the GUI dimensions stay - * virtual until the panel disappears, so screen layout and input agree on one coordinate space. + * Makes the main game target match the physical pixels the panel occupies. Runs before anything + * else in the frame, so tasks, ticks and input see the same framebuffer size as rendering does: + * whatever vanilla sizes from the window outside rendering (post chains rebuilt by a resource + * reload, the transparency chain, entity effects) is sized for the panel too. */ - fun beginRender(minecraft: Minecraft) { + fun beginFrame(minecraft: Minecraft) { sampleWindowSize(minecraft) val requested = requestedMetrics(minecraft) if (requested == null) { @@ -62,36 +69,32 @@ internal object HollowIdeGameViewport { target.resize(requested.framebufferWidth(), requested.framebufferHeight(), Minecraft.ON_OSX) minecraft.gameRenderer.resize(requested.framebufferWidth(), requested.framebufferHeight()) } - target.bindWrite(true) if (metricsChanged || resized) { minecraft.screen?.resize(minecraft, requested.guiScaledWidth(), requested.guiScaledHeight()) } - rendering = true } - fun endRender() { - rendering = false + /** The finished frame goes onto the real window, and the editor is drawn over it at the window's size. */ + fun beginWindowPass() { + windowPass = true } /** - * After game has been blitted, the screen belongs to the editor again: the game left the - * viewport sized for the panel, and everything drawn from here on covers the whole window. + * After game has been blitted, the screen belongs to the editor: the game left the viewport + * sized for the panel, and everything drawn from here on covers the whole window. */ fun restoreWindowViewport() { if (windowMetrics == null) return GL11.glViewport(0, 0, windowWidth(), windowHeight()) } - /** Vanilla has already restored its real target during resize; recompute virtual metrics next frame. */ - fun invalidateWindowMetrics() { - rendering = false - windowMetrics = null - sampleWindowSize(Minecraft.getInstance()) + fun endWindowPass() { + windowPass = false } fun metrics(): RuntimeBridge.GameViewportMetrics? = windowMetrics - fun isRendering(): Boolean = rendering + fun isWindowPass(): Boolean = windowPass private fun sampleWindowSize(minecraft: Minecraft) { val width = IntArray(1) @@ -105,7 +108,7 @@ internal object HollowIdeGameViewport { private fun requestedMetrics(minecraft: Minecraft): RuntimeBridge.GameViewportMetrics? { if (!HollowIdeOverlay.expanded) return null - val bounds = panelBounds ?: return null + val bounds = panel?.bounds ?: return null if (bounds.width <= 0f || bounds.height <= 0f) return null val framebufferScale = HollowIdeScale.factor() @@ -131,23 +134,20 @@ internal object HollowIdeGameViewport { return scale.toDouble() } + /** + * Metrics are only ever dropped here, so the target, the post chains and the screen layout + * always return to the window together with the window getters. + */ private fun restoreWindowTarget(minecraft: Minecraft) { - if (windowMetrics == null) { - rendering = false - return - } - rendering = false + if (windowMetrics == null) return windowMetrics = null - val width = windowWidth().coerceAtLeast(1) - val height = windowHeight().coerceAtLeast(1) + val window = minecraft.window val target = minecraft.mainRenderTarget - if (target.width != width || target.height != height) { - target.resize(width, height, Minecraft.ON_OSX) - minecraft.gameRenderer.resize(width, height) + if (target.width != window.width || target.height != window.height) { + target.resize(window.width, window.height, Minecraft.ON_OSX) + minecraft.gameRenderer.resize(window.width, window.height) } - val window = minecraft.window minecraft.screen?.resize(minecraft, window.guiScaledWidth, window.guiScaledHeight) - target.bindWrite(true) } fun imageRect(bounds: UiRect): UiRect? { @@ -165,5 +165,5 @@ internal object HollowIdeGameViewport { ) } - fun imageRect(): UiRect? = panelBounds?.let(::imageRect) + fun imageRect(): UiRect? = panel?.bounds?.let(::imageRect) } diff --git a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt index 862e05d57..60273cffe 100644 --- a/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt +++ b/runtime/src/main/java/ru/hollowhorizon/hollowengine/client/ui/ide/panels/GameViewportDock.kt @@ -2,6 +2,7 @@ package ru.hollowhorizon.hollowengine.client.ui.ide.panels import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.remember import net.minecraft.client.Minecraft import ru.hollowhorizon.hollowengine.client.ui.* import ru.hollowhorizon.hollowengine.client.ui.ide.GameViewportNodeId @@ -22,14 +23,21 @@ internal object GameViewportLang { */ @Composable fun GameViewportDock(active: Boolean = false, attached: Boolean = true) { + val placement = remember { PanelPlacement() } DisposableEffect(attached) { - if (!attached) HollowIdeGameViewport.report(null) - onDispose { HollowIdeGameViewport.report(null) } + val bounds = placement.bounds + if (attached && bounds != null) HollowIdeGameViewport.report(placement, bounds) + if (!attached) HollowIdeGameViewport.release(placement) + onDispose { HollowIdeGameViewport.release(placement) } } Box( id = GameViewportNodeId, tags = listOfNotNull("game-viewport", "active".takeIf { active && attached }), - modifier = Modifier.input(hoverable = true, clickable = true).onPlaced { if (attached) HollowIdeGameViewport.report(it) } + modifier = Modifier.input(hoverable = true, clickable = true) + .onPlaced { + placement.bounds = it + if (attached) HollowIdeGameViewport.report(placement, it) + } .drawBehind(key = "game-viewport-$attached") { if (!attached) return@drawBehind val rect = HollowIdeGameViewport.imageRect(UiRect(0f, 0f, size.width, size.height)) ?: return@drawBehind @@ -50,3 +58,7 @@ fun GameViewportDock(active: Boolean = false, attached: Boolean = true) { } } } + +private class PanelPlacement { + var bounds: UiRect? = null +} From 70c45c2a614f83049bbac3a8804da92753245497 Mon Sep 17 00:00:00 2001 From: HollowHorizon Date: Sun, 27 Sep 2026 13:30:34 +0300 Subject: [PATCH 23/25] Fix incompability with latest iris/sodium versions --- .../video/playback/VideoSurfaceTexture.kt | 4 ++-- bootstrap-fabric/build.gradle.kts | 14 +++++--------- bootstrap-neoforge/build.gradle.kts | 18 +++++++----------- bridge/build.gradle.kts | 2 +- gradle.properties | 6 +++--- libs/fabric-api-0.116.17+1.21.1.jar | Bin 0 -> 2452735 bytes ...fabric-1.8.14-beta.1+mc1.21.1-devpatch.jar | Bin 0 -> 2791348 bytes libs/iris-fabric-1.8.14-beta.1+mc1.21.1.jar | Bin 0 -> 2791343 bytes libs/iris-neoforge-1.8.14-beta.1+mc1.21.1.jar | Bin 0 -> 2540723 bytes libs/sodium-fabric-0.8.13+mc1.21.1.jar | Bin 0 -> 1574609 bytes libs/sodium-neoforge-0.8.13+mc1.21.1.jar | Bin 0 -> 1292934 bytes runtime/build.gradle.kts | 4 ++-- .../client/ui/ide/HollowIdeGameViewport.kt | 4 ++-- .../client/ui/render/MinecraftUiRenderer.kt | 4 ++-- .../client/ui/render/UiBlurRenderer.kt | 2 +- .../client/ui/render/UiFramebufferPool.kt | 5 +++-- .../client/ui/render/UiImageShadowCache.kt | 2 +- 17 files changed, 29 insertions(+), 36 deletions(-) create mode 100644 libs/fabric-api-0.116.17+1.21.1.jar create mode 100644 libs/iris-fabric-1.8.14-beta.1+mc1.21.1-devpatch.jar create mode 100644 libs/iris-fabric-1.8.14-beta.1+mc1.21.1.jar create mode 100644 libs/iris-neoforge-1.8.14-beta.1+mc1.21.1.jar create mode 100644 libs/sodium-fabric-0.8.13+mc1.21.1.jar create mode 100644 libs/sodium-neoforge-0.8.13+mc1.21.1.jar diff --git a/addons/video/src/main/java/ru/hollowhorizon/hollowengine/addons/video/playback/VideoSurfaceTexture.kt b/addons/video/src/main/java/ru/hollowhorizon/hollowengine/addons/video/playback/VideoSurfaceTexture.kt index a60af239d..a0bdbca8f 100644 --- a/addons/video/src/main/java/ru/hollowhorizon/hollowengine/addons/video/playback/VideoSurfaceTexture.kt +++ b/addons/video/src/main/java/ru/hollowhorizon/hollowengine/addons/video/playback/VideoSurfaceTexture.kt @@ -234,7 +234,7 @@ class VideoSurfaceTexture : AutoCloseable { val cullWasEnabled = GL11.glIsEnabled(GL11.GL_CULL_FACE) GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, framebuffer) - GL11.glViewport(0, 0, width, height) + GlStateManager._viewport(0, 0, width, height) if (blendWasEnabled) GlStateManager._disableBlend() if (scissorWasEnabled) GlStateManager._disableScissorTest() if (depthWasEnabled) GlStateManager._disableDepthTest() @@ -263,7 +263,7 @@ class VideoSurfaceTexture : AutoCloseable { GL20.glUseProgram(previousProgram) GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, previousFramebuffer) - GL11.glViewport(previousViewport[0], previousViewport[1], previousViewport[2], previousViewport[3]) + GlStateManager._viewport(previousViewport[0], previousViewport[1], previousViewport[2], previousViewport[3]) if (blendWasEnabled) GlStateManager._enableBlend() if (scissorWasEnabled) GlStateManager._enableScissorTest() if (depthWasEnabled) GlStateManager._enableDepthTest() diff --git a/bootstrap-fabric/build.gradle.kts b/bootstrap-fabric/build.gradle.kts index 2a2704707..9bc5eaee0 100644 --- a/bootstrap-fabric/build.gradle.kts +++ b/bootstrap-fabric/build.gradle.kts @@ -50,16 +50,12 @@ loom { runs { configureEach { - runDir("../run") + runDirectory.set(rootProject.layout.projectDirectory.dir("run")) if (name == "client") { - programArgs("--username", "TheHollowHorizon") + programArguments.addAll("--username", "TheHollowHorizon") } } } - - settingsPostEdit.add { - it.runDirIdeaUrl = "file://\$PROJECT_DIR\$/run" - } } configurations { @@ -117,14 +113,14 @@ dependencies { val fabricApi = "net.fabricmc.fabric-api:fabric-api:$fabricApiVersion" modImplementation(fabricApi) include(fabricApi) - modImplementation("lib:iris-fabric:1.8.8+mc1.21.1") - modImplementation("lib:sodium-fabric:0.6.13+mc1.21.1") + modImplementation("lib:iris-fabric:1.8.14-beta.1+mc1.21.1-devpatch") + modImplementation("lib:sodium-fabric:0.8.13+mc1.21.1") val mixinExtras = "io.github.llamalad7:mixinextras-fabric:0.4.1" modImplementation(mixinExtras) include(mixinExtras) implementation("org.anarres:jcpp:1.4.14") - implementation("io.github.douira:glsl-transformer:2.0.1") + implementation("io.github.douira:glsl-transformer:3.0.0-pre3") add("embeddedRuntime", project(path = ":runtime", configuration = "embeddedRuntimeElements")) add("payloadRemapTable", project(path = ":runtime", configuration = "payloadRemapTableElements")) diff --git a/bootstrap-neoforge/build.gradle.kts b/bootstrap-neoforge/build.gradle.kts index 3a4e29f62..5f6d11397 100644 --- a/bootstrap-neoforge/build.gradle.kts +++ b/bootstrap-neoforge/build.gradle.kts @@ -51,16 +51,12 @@ loom { runs { configureEach { - runDir("../run") + runDirectory.set(rootProject.layout.projectDirectory.dir("run")) if (name == "client") { - programArgs("--username", "TheHollowHorizon") + programArguments.addAll("--username", "TheHollowHorizon") } } } - - settingsPostEdit.add { - it.runDirIdeaUrl = "file://\$PROJECT_DIR\$/run" - } } configurations { @@ -110,14 +106,14 @@ dependencies { neoForge("net.neoforged:neoforge:$neoForgeVersion") - implementation("lib:iris-neoforge:1.8.12+mc1.21.1") - runtimeOnly("lib:iris-neoforge:1.8.12+mc1.21.1") + implementation("lib:iris-neoforge:1.8.14-beta.1+mc1.21.1") + runtimeOnly("lib:iris-neoforge:1.8.14-beta.1+mc1.21.1") - implementation("lib:sodium-neoforge:0.6.13+mc1.21.1") - runtimeOnly("lib:sodium-neoforge:0.6.13+mc1.21.1") + implementation("lib:sodium-neoforge:0.8.13+mc1.21.1") + runtimeOnly("lib:sodium-neoforge:0.8.13+mc1.21.1") implementation("org.anarres:jcpp:1.4.14") - implementation("io.github.douira:glsl-transformer:2.0.1") + implementation("io.github.douira:glsl-transformer:3.0.0-pre3") val mixinExtras = "io.github.llamalad7:mixinextras-neoforge:0.4.1" implementation(mixinExtras) diff --git a/bridge/build.gradle.kts b/bridge/build.gradle.kts index 13c8f7893..2912250bd 100644 --- a/bridge/build.gradle.kts +++ b/bridge/build.gradle.kts @@ -47,7 +47,7 @@ dependencies { parchment("org.parchmentmc.data:parchment-$minecraftVersion:$parchmentVersion") }) - modImplementation("lib:iris-fabric:1.8.8+mc1.21.1") + modImplementation("lib:iris-fabric:1.8.14-beta.1+mc1.21.1-devpatch") modImplementation("net.fabricmc:fabric-loader:$fabricLoaderVersion") compileOnly("org.spongepowered:mixin:0.8.7") diff --git a/gradle.properties b/gradle.properties index 195e70d09..86745799d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,12 +15,12 @@ resourcePackFormat=34 dataPackFormat=48 enabledPlatforms=fabric,neoforge architecturyPluginVersion=3.5-SNAPSHOT -architecturyLoomVersion=1.14-SNAPSHOT +architecturyLoomVersion=1.17-SNAPSHOT architecturyApiVersion=13.0.8 shadowVersion=8.3.9 parchmentVersion=2024.11.17 -fabricLoaderVersion=0.17.0 -fabricApiVersion=0.116.4+1.21.1 +fabricLoaderVersion=0.19.5 +fabricApiVersion=0.116.17+1.21.1 neoForgeVersion=21.1.220 # Libraries diff --git a/libs/fabric-api-0.116.17+1.21.1.jar b/libs/fabric-api-0.116.17+1.21.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..16198017bcb3b6ed122ad87634a20498e3e9f76d GIT binary patch literal 2452735 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 z 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≠NeF#(LX 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%0D=JkJ`Qog8BsnD`PpA+h!F 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
ZYeAEPxc!n><8;D+MJ`BbL&!i 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%0D@lloXLj5A(^V?KT?ZgyRhg+Z0(G0K@E_emqw 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�Gz!$D5xU=$o&Q#E-p_V*3JTfuDlSU*!7Sp-c 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

wcV1unf2^ES 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%0AGH9 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ʉ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 z zM*l#56}TS*|Ip9*4}&)EBQpJq-zWcBQs*C#5QBbAt`E0Y5$w;!9)BI>s{aAf&Gw(# z_@l96Jpv|b{CnW{DpF69NBT(K{;%Xc<+(z0m7=hC=$Br&pRG^)<hv-M#zX1e%4_c(MMOiSGgozxr@y_3Y2|34a~8F;8Ru2JFY%_c-*Fc>6Ti_tJlV zEC1Xf|H|mW?eMbvnbYg9qv&_!|8?txO&?xC{>kB$0a@{>g8~7e{gGqr5jCLTKcfC& zFr<%vRn~W~_y;v2W`gfd;DLZjDF2W3l>WzR`~%bFl?Z3>gXN3>{~XozHUGy~rV9h3f0I^jw2&*JkdX~4r!TY~oI zXOF**lb-)pm+znXpQJ@Dz!@&_p+}C9f40Qiq5oEk-{_3pmwDky4+Den!@wZ%NDb_% z|5lABgogUJNLgPVLLWKkpYH|p!hehZz6j_^o$xJ$&06QdD`>*}91K*f{Fhq%0~r_6 zLi^(3tnuN&RC+`X-uw-+l9R2ijs4>a#XqMA`wf5pcp?j8`!_T(VE)BKoRrV#XuyN9 zts?wv^H#sh`1_K~!putl(A0MVWhVbB!TNaUaXb7?HGX42wcX**duSz){j)!J^!|0s z9{mROKODjz-%`et-yr@`z4vb!KNjAWejHf-F5{;c=)Wtl{j&x?)+<(fq(RW<-_+ng zDEIxdHb0j4eQaA3*T1RFe|V>{AG^_;e^33Xknq!|%maQY@G0-uKb8;^d?b70sj{C` zMEGa!j}@C9bI-t^{eLW1_A~d#at)6k{2QpJa(|EbW8(40M(Bk6MB)>QLi|kqF@G=H zBPt%|?@*t@`Z1m6;}*)`{SNEb`GJ3?{+Iyq@mvKJ@l&Z!NZk1|_Q!;Jl8>-Qq))~E zPOinD`9EgvdHmjqO7TSg({1<1lo&#fU^EQB1^cJeK>ue(=!ZR$j~`Qh)+d7hA^*nz znZNj9Ki=bs*!<^DB>s9Q=Fh+%SJ^)XmI^!(`0Gu7KLdYUQ2p2?NJ#z;@F}bx7t=j< z@59nhWj$rV_OFIY+DF{yicjSJ(?r*gi)@ z6aWYa2mk;8ApigX0000000000001}u2>?w+R6#9CPDU?kVRCaXW?^D-X=5#9VRT_F zXJu|>a$$67Z*DDNaA_@eF)c7IF)=nSF*h!1VRBVe1pom6rp^+am{X82ytby>wr$(C zZQHhO_t&=FU)#2A+qRAQ_o=B}=VE3LlFCIY$(zc$cvqgKAPo$H0ssL40k9QJs0;Al z8p=OIR#ZihR#HxkURF>}QcP4?g-%wiT5H^?NF#Y$UF2Js&PsgE2u($t9)UnWMu;H3 z$vD?M9z=h4%*|}WQo3QXy8+goV{5<5`L@vp-EpsVJNTU4RtN3(CjhU%_g8B}4!IMa zy3>;(Y~uGdJZs(dvbA?d!Zd?_PV)+VJ6OwP5Lnwq_Np~4K^{K%)G>E^9lk*SEoNJG zl7CJ0%OM00>-V&~bpLCqZx6NLDaT$dJA|HjTEqiiz8M4^u8GEPQ=xejL&)VMK zjxMjv?~Q8wx23v4S7p3I$j?fTw@><m zCZUJzN%Tp=$Q+6w)yC_*by=IU1Dl|An%--m?tjV(W@4$x&F>#lP-*5dbdQOXrhM9P za-3d|Lyd1|TNcE2r(xRj>(lY_f2!DZkO?m`M)oV{aCe@7ptxXq2!J^F`iC9VQLCuQ zz*58XV4y8e-q07^Q&Z_F$QnAbQfwUiF`bV`bRV{`vA1)bAX(aN?FaVF{>%($iMcbXDuL383K3KN z?#}7v%ADom(S2}q0>%k5P)xXq$MhrZs^AWmoSpt(C2 zTi5unr_)b1b+>r8D$8I!wSl-_B4662P)XqSE7@?bw`v&Lt*0X1V+OkIGS6t2YU=-S z-n1UBlW%c3Q8B3&dZuiEbRSuFT^b;`i2sUs*#qRq0J-}59bN)G0-^a9QNT3zBU%-g zhjWE%o!}HZB5qlLD@=sJ-l+8O*U4TWqYm`e>x7NNgyN3dj=>+XU4^-n#@Z1pP536@ zzSLa^D=8miP1ZU6JJ4)jKpP(!9m_z}#9YiPwBSaeO}Y=`rdfNN9vXPgI&S-YHY z&!Y-7Hru*)AGrhqfcTukXa{-W})HU%kuJkfdsZ@T@ZZS%^W4W#I)P3 z8S6XIlkf1p2N^zc5Kkgj7LKw>4;JlWlfM4HFqExpf!IJWPg6_EUf8umo=E>#;Gc%Vd8N zkV0SXKwAna(TiT}wJwr2{5wqQPT|IE$;)j`ibysR)Q}NlM)ZpPc+!>b_w=+e&2NCU zm~!5r9dXX4S>NosE2fzjz<$9QGjuFoPLXG9o?yzJ<)ns(=6BE(aANk-H%fR(?Kg13FYYK35n&`w5Hb%%{#W>utIMjyHRkLBet~GE<4( zb-CGSyLB`p<}Q1ezQqGQ@!S-)LBx#EZRFcL%@IFst^?`Yt z?W^e;Z*>Fw?7e-#1hgLjLL|@~(wKn%Vz9;_26vVXm*J(3V@A+JSm32`m2N4M;BN#> zFnuh9WPLrQR+5v;-dNgym|O4bRp0Xpten`KuaL;?rxSl<8Wy22aed&iOA?ZDpXau; z$*#^IwR+1F&73~$#a{S#^+f&W(4QgfI?0Jajs|SFQMj9sFnf~ z--Jn@J|l}luZoiAISYRx9CWSC!HC#QBBH)SXibjc(9bC0NPJ2SF3OvC@}AeU@XBtY zrD5&iK0{KmqA?;=MAR*20Jug?y{t3e5*3WdD<#=53RcNn6ZOu`cb%Q zEi9C{NRN6a0x6EF(V^5af?=wq^<6>^D_3*4@UO?dOMI_YzBEs|4LX)=>kSvq8sl@N zJmJtTz$m&Nabz{99#r3uM3Z^xap1%(&$>yHuX1POIG52pe}_Zk znIuyRnUnuiVr@~0%tkC(I|vN_?K05SyZW9V#!f12U)eRe*cjY)Rk24SV~hswZ(!g@ zI%Pgs(;9Ev)}c=56MBS4|L38e@G4W$AZxTD8CXnf+Ldf`n5K8GicC`5lV5y>q|D}I z>fZYruH(t)HO1S`6*rAM;^YMpkCx!Tf=x0GN29`G#Xu@o?h~0$DT>9KW9+E6timr^ zvH7;*#|l^c(rE;^fNwZBW=f~`;ZG5hy9C1lTUfSG#TLj$e8EomlOopPH_?fv6ax^O|f> zb86G&a#AnXG7_8QRO!?VZQ_PNc`D#&=q5d><0bp(xJceS^Nn2zU~!oziAR)ykRD={ zb}Py?-35wjc;tt(G+jHh{#LNVEX1z>J=WvHlbC2<=rEFbKTkCllS1pwA0+F!9I z(PiZqDw_P9NyxH&!4wKE|c^0pdi(xmak!3EFoW_K}_1A^dk#>*2TYOUu zhO}yREk>Pkd%_PA@u!Y9m9lzRHWt#SRAOu|OtL*IqaE&|{+w|92(+F~IG%3dZos(j zs!~vyYNEMJncmrT$#OHV5SLY61Ubu=w9O|ag$kAjVQeNWS9xqB z)|!(71C6-~dkl>%m}3+-8mDC2^0Liw&-tBx5y|eQ^rauT%;jD#tR7?bsR1?1o)SY5@yn)Z@`6jA>;J|h_jOo*npKV?_vW&{(W#FD89Og9U6pW!SuxlhotWQV3y>BG z6Kdk-RhTg$LLNuIj6jDZ+H`d6{M%FXux3bnXFGNV=L3?}4=$@k_ z6|}wi>nr}CZu#2ZJx2Ou|3x2u6g|QPdld|DqvZUTbb&G>Wy_FYVtE8wI0J>)06(JV ztyyig+B!2jhfHI2le?aFUpmyPoae7wDHTO^6~08&;>J<>8VBUSQ53j{@B5$gUjPMZ za0r)`MO(8v(yYH zh_|Pgsw-MFC~^9PXstY^%OFDEc~VK!jfY(-414rv=Qs0@Pxf2n5ruTWjSyt0tYGp{KZJ0(?N!oBQKda<5 zunDQB76?Z4m2q{^(c%adhO}(?01QqN)7# zBKlpX3&Ye~BKHj8JXxtPt+G+~c9{Fg>p@e#YCHZ#L&y9<#y4%mx+8O zr_rSJ3P!7sCc06}DA|{fx9e`pD}{nGvRxKPAa3%UxXUXQ(^{_SEvMp@|L|q*Oc~wb z8(%yCrz_yV{7k&T(&2g)X2r4qTqvRd<9GpT-p^50FFawvPmsYsVU2xf7Zi}7e6%~k z^R{e(qGi;<8Jc55Eohfb+1A05wj{RLGJqdzS8ynLQ-{kWVWZhj zM=ma)Q58ZE8i^9`M%6A7DN5;n$@|zJ)f0T<#Z=_YN76~r4J>~)AbpNdj6t`8Z7CXu zUVf8p$htp*1lq2ZcIbMB907R`zbC4h@w0ZR4|^L$WND{~Uf?8U$iws8uqS**C?G7` zWT{XR*`*k_9EEYADi}H5@Sg0v;R8iL%R83dBBnluIj|Ic@neNE1@>>*IanHRs$Ls} zf-l^9|3t8z->tp;^q8IC1B7q{3*0Ky4j7g*3T{DCCa*cZTtIb0Ov5JQf}{b~c|vYG z{5fjWr~A!pyxnIctAk%;*iItj5m$pk8~hrGw3v6)>zoNYD$=Hzzb1CU7o);f74^$b z*$fKV3Ny!ql=3IsJh1odmi-zVFD&Io)n?Z$70Nx7A`t*1YNhPRU?=S5I?Y1@n8FO% zY4~4?*XS&vT37lg?zdq|VPk7nt~$HmGfl-eSUMq~-Z)yjGoit8zo-7_W_!*3ojHYj zGF@Z|Pou3#jZV95;*bnO6f_IXKGOtz0%rb!@~#N>!jKL}<;MZ;;iPpo%@O$O0xp4IKg)?U-C*kWFg9N(}tllVyhDaD~Qs?k3| zkzg^zCy^Ah0?L7}zY;u3!!YBWT^3{3s69vo{-y`qiBeGVMrdPAlI2WIiBoW-GXsp4 z8iXR&B(|(M)f(ojnLDQ(cW(5*AFu1nz6tJ0)xk)F5Xxy~3u_1s3ow}bd4Y97gT>WY z+a|z4hp~0Ef8vf#v(9)|m%STC`?=*K(039Nmgn-@B%)8 z`On$zBFl6OJ^P8hYS572&5`?wDOC>cOdEGp5YrS|dScnatQ#G0F~90~W5I7`R04be73=Gk=!he~0ny0vk}zCpC%4 zaRJt|u_$&x;e12;ArKp!JssBYU&Anzkj_&5M8Zd~lvqvLpK^3xFFVJd+_AVHB1bz; z6yq>Ufx`)FoVH0{)Pc8xHoGz-dJTCvSsO;2jt1V44Wlc$~e4FS?N#R)sL zvRN^qt0^I73avpg-rQE;hfe}a+k&_{`**%o*8hnC@Ho2KFIGHdxJC<2+X%5V-dHGn zFY>J8a3}110Q6Up{ngM@5WNvok5}_j&!1OEu+ZarPrNk>y6&e6YdJ+m&#h971@W6a z#cB^?a}5QVd&%Ro=6EapSfY`{T9cO9EHsW=trQRY_7E_@bTQ-Z$0wELnaNDaC?e%%&_L zNPPPAy6d$_Z`ae(6I+l*!WUJOq(?V6l$ucCNW}K6DXd~UHb82iZvf;o{lL1b zBTx4UkGE)m8eA+jTH_idh(d~8|Gd;r%zS41<=JxXQ#Eohb9f_8;w%BVXP_4A(aX!6 z$Ur6MiqiMI=$rtV8N(nkJw2h1D(9~}==dEIjx|Pe&TPqyJe8TF_%I5LCK&3iOX|QQmhRw^PBO&^6(7eTMUev)K`Z#$u$}hQ>s>K6Oz-QZ zFV)Svt#cyh#!&tuo8zoGu2Mq}3D;=^;yfrNBKXcli`rsvYnt(Sn0_RM?`*A18<@d= z_e^A|ioTX7*ftzGLA3I;aJ|BXQERkTS*THg3+Pc?mg@5kJWlfdc#Ewkz+Hx}=|30Id)m_Ru~U6#YB1flw-9KWNs&Oh4@lG)Dn^h^I`h;J zLWZtSjq+8<-qq>prr9vFVFw2bXesTUd*A5^)!x?;o7jj7U&?6t`z!@RpxI03Iy=L_(NJH?Y_^Bt`(DUTpEqQJPCG;BpJu?$I+^4TLrEtF8j5~cZeX^tpDL0Yw{ zo`kCD#W!n(&r1DMh0)E*vpGd;1MajtcgFkn_x;uRmUq{?=X7UQ6sdrV#-@S9cYzOP z3TiH5E?R;J1u~$Yf&*z}z)W}ne3MZSAOJJu=q(qb6ft8vLB!0QBmq*~7^n{bz)%;P ziJ$ge9xnZ{cnEGd=E%s9DYWjcA+v+Cv;DKvmw4`%xN3L&e3LvRCr$L0u77eKZ8*?` z8x*H2Ahy4iVzHG%DH}gbj8M@+l?5qOu!sg^4+BOD(>3Y`_NPWHB49|r7hnp;hzQ7G z4$>Sv0svzP3R+Doqh>g1w<~J9{F@cUn~$1ep@@8k(R^-mcD<{;8!wMzMQ`9_K1*{j z$=rm050|_*g`m4Rn~5$iY@~zJ`7*_E+-^f5 zDRZlU56V)DyjL7pWtaB#{a`HX;)cS9*a=N3K5GequDBo^WJzh zG#VOUn#0w08qG-m)A@}!JN9c}K~VoRF29(|y}g}x*P~iIk5An(%0n%(P7Qf>7@lzE zGBk~_N_ZnMnl2|;uW}=(fnH<>MpQ9-SlJkIe=wxv=1s1HalB?#S zxO$&S2VNQD55|1Pk~X$n#hq0xu|{(QTU43}eWB}@g((joi?qAb4a-G;#b6L$3y%r# zq}QD~)YY5dA+Tk}HJHFd@Lk#Mdd#Unc@;orCE7bEb46KqlIoN^&g6d_icpAM>$&lb zDDWzf9-z)4R((Hi6)V;Uo^d}IWh6xWVS>93SEf^hxvHh=a{s%dufAG}c-qE|qwGpi zidWpW(Ls=)Oz@(UcVG&}vW{bNQGIyxJkDc1PI z+x=xJ5amv}a$e6CUm6)<(#CS4($MsIs%qy&z6eZ8ru|GoSfpCR*BQg|w$RNu8FjTGVHKTwm-w zbh#jSFW=jM+3F>fo@$$twY1TG>aD9G)^I(}q@KJA`+ z@q&KYa6%vg+LZ0CV7~**O~Oc%9{9SZ%l462i`Y572<3povc5KCC|^4)tr4Wf47dlZRJ{?t9c%IdJ8zRXmZ?i}Ta`(zUR9-67Br^F+pzo8A$ zZFszy$=JLP3B2=-tJL?|ie$_crcx5zAnK^9T@KiZZR17TdqQ;9b`|sDCOu~`aiTyL znff|tYm;`TtgXjOUsD5$!C?`F#s}S&hB%Zpav9wm)ch-qa znhFK3@QzaX&>kTnHBq+(^LIO(QYGe%BuWUy>57%P^_y)9P81$o5Gd5tK4My(GV$Bb z`&S~ieX`OK2L}KUhxqS_7yy9qzvp29$bb636S1laC;%Wp=?oI^e-&Q;wGQ+@_xH)GcRv%Gk00mpp?~e02wuF@1U;AYft)!t` zUT?bH_Zdxy`;1;u`pF!mTi0@~zj{26NBqgI8!iWz@0UVfvTj99;P=m$tGhhy7VI$J zS?aYfpWiwQY|h55wOBh7-Clvvx3#x^TG7K7QeEAey0o`x?3K+P?#|?VRkhHL?!Mmc z&d>X_e!6qY>XXmk+YjOJZ?KSWR&+Hg)!e)RPIf;7*36IOnUJkXvcy`X+>Cva;HKK- zChCz3E~vFg&Gkku6$on2D=Nm3`sjKneA<@m8r_)p-h?@24$`WT(}Gp1<3c?^?<;>c zbKd0AvG^=JW|EC7JN7l`jpb3OW&P{CIk^JVbT^f!$c?`CDnA4ok$F;B{FpgKu@Ar!{)0>Kk zJ01w>KPWY-w*b6q-XT#HaR0ayf)PtW%8j0Oq5MSB7>H7Hx2vA z_kT9klB~CzzF-wW7VB8dg=`(Vb%;wg*Ysz0H;_j4yuCc%(pz!^pBN5;3m)!))p30Q zY?-7$BMBafxf+Bh1yhqRF!Lr&`m-I%==5oQrRC_J=!O5zk->LhDW;-&`gj0dAT}+- zp#pYmU*mxC3}cc5wjYx$t<-5lQbL?B32h@^-&&)&1ee|7OE5M!FRZ`IoJDfcl`?I_(LQ-7qOE085KoHZG z1l$ZT8UfXvf7NSg0><-5Y>&wzKkyHh0L`NS*Cq2Mn+$~p*cpI%a13B;L*cEMsByw* zXpadAYSSM8!R6zbZVt}WA>`u@WTPJ>Mfa%JJra{B8^5HDL#a<(fY%)aBUvD@bH@T~ z9d^Nfop+P82rBpx<8sv&sZ=?@|M82!8==~Y+6ry2+dX$m3k2k_4!{D)uv`u%Q#V2h zw)Dw`07YYC^8rHKnf7G!G}Jgw4wfLilwO-+Nk*xYv3CXU%>MX7i365fPI{srs(}LZP%k=Mt-|vVw~T-zI0;0xJYPEKaKKfRS4T5NSyzMU5n? zOqeetmnv{gE>BwBB})Fp@?SX|uBiAV_QG`cfyN4WhIL?rWH(6tAg7Wj1 zdMA>O0#w}XTagX0Ww!(1=J5d85u6vzO!DGGwICk2N7h2@k~zLvw@N@p6*1kwJM=B; zOJ_|#uzYwhUDlgA$S~7GTm6KXtdn4k4_E=fKtBtOv7v~4L0fed;TxIJ);B;q5>p>n zu=v|wVnX=Yd9bd8Qct}L{3Fc;NOS>)&MrVHsHN6Ggz5y&Ubb?K0LSXCq9G(zk?;fQ z#;?X_Mx9`NEJn|Sks%^zX4{1Au;t{Ua%?%8dbhAR78l}C&Qd;V5OS_5%rl^&&D78@jOH7DB+-|^(juo!&VWj9z>oE(z5o5w}67FoW^8lLL96mGnwiL+rFYv8S zAJZ~?y1|?iOdwHUP%L(#^!%eH^DUq*xFPp@e#9|oXjvSaYYY#3RDczL-@8Ac;vd{K zMnrHP#h0ph1F~!w**-p~&WRrTx@{I*j-0ALYsae8*ya5@Up8(WbwrTk)!2@W!B?(w zTC(e!+5&lV^AxyN`nhlDH%J=>iGYm~s*bLGD5AHa8VPg=El@o${pi)u3w82U7*IVK(cCHWVJA(l)bNn&v5F85 z3gC9k{YB;)c-7(0wcsp#oL)tJFD3G;ZX)%TCv(INtTN+h?Ni+~WoL2^v-2t$0 z@#!`>?9zb>`(UJ(>+j}u324-yJe3m?Afe_7OS1T};|ONXoMFn}($cYu%;N zRWNzTGLx8R;L08DCFP`_mn@b^gVdgS?Z4)h8<(fQAFiKa5^o&|yp1>BdE=eTKabW^ z1p6{%IO}QNsgY5&Q(&z3YBi6|tqAI*$-$`G0E1kWIb)7Ds#op%Pzuci9I zn6OB3Ta@3EcjzV8p@tyXe36%u1xHOTO$sDc+Ra_x_`n|}BbNs9^$ZuF0LfxN^sg5LMi>+`Owwq)4U|r|5GZ`_i>n4=XS|}Gcm6vPs z@XSXYEw-mik-)dklzK`ACT&(oqQ+KXn~#f>FvgM@XRMXuxB?-E`$$j6_CoIIvDOQ) zqvLax6~<~i2Vj@hKA#MI~F=#rMkapS=|rC-=SoIm<6W_o6d zTA2Y35~X*j?Y|_f)=mXPA6&yOr^W1-!YsN;U*o1CDow{Iz-3pU=z|zynb6&1Gj{F) zQfe@^h-jakQ{2Jx36~Ko$5l)bdB1fA@B^ZN0UaQqG2`iC3e5yk zy1NmFguS9$$>F zL8iJmQKI-Q9z3&H0jq)SC=LL2QyVP?CT%3W+l-a&vFpRmBm=Z8<((c#aa-lwEwrHF z2l@x;!ZAV?R%8LQ*DZM(N2eGBbV*E0X9l5;8}hyCDm??a4j1%0MrZQJ98N|$(>vCH z#`9}e4Lk87^V6(Mx-#619)HKNY5kn!XjJ*3`Rmuz1l(Bk z0QwD`mr0Y)hfu4sk;!6;I4fZ~TmZ<@Wkg{Sc|+A3Onn}Ie_jGr^?0@Gba!gk{CIsY zK40`8@ayh&eOeAW5%cKv1uoozq(xptqdf}`n;Tpz&UyzGA;$Zh$xb#`m&J2xM1 z4uILC3H;)*ExTL_urqI=$_;|@n9JI;E;w^Jz|M!pDSVL*O`nwT*t)=RAmXw2HM@me z%_MWRjKf^~#*m80eRD&>YyhGh!Z(jL(`Meg{PY%{*au6AFn>*gE1N-qH@F z0`~;&owD#mt^#D>3$C{{7@rlSC&ByzOLvgRT zzFSUYK`?G)6LdFZi^&s0wD%0H3!X}=)!O4pr|;=q02DM1zAsugCLgLcVZm5uM$VoQ zw{LQhb;CyDZ0$uWAguYt3S{Z0IG2_o-!3E(kxwe5f%%fb@Fvq`<})5}?n$z}u*i~H zo~yZoG8kFTm~U^QB~&C>osXi-5w~8n&B((6CKFbVou-0Uj9zTNKiL}>k!1bP zf?QB>`_UlhMMqa7^BVrvBam7o_;yPN>Uz0U%9W3f04Z=^gxAA8HsR*R9^HNb7jPPP zPn4YLr3T;tgvJI(U-o9nPYz2VH|w+|kW6TN+!AeJh9BkFrnO!6Gy%084o3;y;g`z7TSoGad1 z)jNO4Cs9#lo*4i-K*hf%pU{gyMRynYHgkOZNo6c4{1x~Y z{^i|L^5F93N#_y$7w}&kf5UyH zY6A}dpiA?gI3D~TjyH66Hg$3S|E~l5&-4GW4DkP_PWykWZfR_9N9SN?{_k6IRCFzH zL~(YZb(V@rg{<$RIo4B0gxt-|Z=FZ&7LV9YfN0Ji3B-MYl#H|(6qUd*MMW$n z6OujyX$oMHnGi@pAPp&FkfF}}cp6W%O}p~9H=BnkQfk8r!U=6yu#AWam3n~^3Mmv4 z3uvHW2tjDsSu%sLuWl^oBn&=U&^MMq5p9z#cvU=m(1Q-2mpcU6WoZoSEIkk+k*)w~ z8{-}?{Hl$&mdNAtD_DvJQ+|Rkex7$>801}it@UyK#=#Ao7wxZ{<*z+J z=nw!_f0AYJO>Ax9MtXCcA`=(;B`j#wDm?P$3DBXVl0o0_*>s}Wf_&B_5@Kmn;cr7r zpeb}jEO4X@Q4mXL(nw}09IFNaeFB_kf$D2l;^Cuxf51vb>w|CxJJuQNShdd3YN zw&4~F6_~BQ%g>X{E@Hi49+Z(ju<|2J%X+n3uc?nVFf@ZgDRs6iE?x|xDU5~hh=sO8 zz^aji%A8=1wb(>UjZhUTwShWzT0xOuiUc7IoDfoy)EsA$%FJk5N?I+`jO)lJxBr%Z z2lvV97AkVv_9|>$pHFTDR$EhReMKKP-d3Il%Zcp|!|Vo0Vdp+>dZXLyxq-2nV6Pb3 zZlGr~1f&gz9VAaeMLYJl{ z!Va@XYZ^aT@aFgVnV5@eV)hgCJ(+}l{pDluIB$vJh38|97((~sc^e}zZWC5 zmRRo`F?Zi-y+xXLtM2Oh{c`pn(ffvFkBz&+)WomE!RKV_ak_};G$#JJxg+#-+1p%e zzlZNl|9F2e*pC%%rP=B7I=WQ3SR3=&-fg+8TwnC&YMmdd(YIk<0zMiCNqEva(FZruuI1WAw9w$+3X#@_Wy1tY@C(dw9y2m75Yd>|)^k zTP@4`@uvSTTY#e{Qf~wX0H6l@Pqx7Dk1ZJ6Sen|o{O8&ut&^#lt)T;*m9xFwzn!64 zz7uYM0cPtHRgo+{e!$t18cnUEfhegoh15t@5=XBuy z(+~LVZTNNz25DvQ>!PE6mA#WgG|wT~u`H&UW`8D^IMfKEfWxh4KuIRerl}3H>%;;0 zzhVGb%Nm&T&nv?K|5FSo|B1o>`{S?Gwe1%fQ2cgl(<^vgkP;VJEEhlt`wbM9A|q7^ z`hg#iTDghqsYfxfk$-azNo*V0V8=(aFnCDo!dpFl zQ5;sv(_@|?Q5Et^lqFD;X;D-RB_Dy|Uu@}A>nvRkG@9SOT8H+QYgJy=v$94Q+6gId zzZR^6!QWH6$ZG9vN>b}55YS}+BkP7jubvqYU1ge3UUK|6iAw0A_~aeb7HNi9y--OL zQEcGt%1>i){!FHq;GtoxgrsO)fNbVVntd)py`eP$EB85Lt|; z^g?SW5+P0Wl-;xtA-B#dtHO#x9{eO@+z!`(_>ss~aP7hA`-+RxQlK+VU9RjRyM0WH zLo&xm@_u)w7+M8Mco7vLauj?I8Il2l-RD*%;EG6wKw1EO0O30O_fY5^A+$>#wQ;x}r}LsWCCmk; zQXP<8NF|x(0*8D{K7lKN1_0l@_BDFjtbAeQQKg+s?rd|q_ce-G2YxlV0O7qph&EqL zYtd(d|J4_5R0s{*HMOtGkfo5rP`GL#)_NVh*{Z%gI`N&s^vDwf&#Kzv-XpK3D+bg* zK_KFgP!E&Bh{w!{L~0a-t&cQ`xjUmlU0s<_8f^4IF>(3GCYj53l*V3m^&H#!p<4dW zNm~5YCe5KbHG~aD0Bed3x*X=!+_aE0Rv_2t1%~9rVSW5OK4hXbjakg`hOW6bfuOHX zMbJ5FP(9l+jHg{J<((>>V8IoU%G>ZF(e-R7^R0^H(9w!(#nUZ8-aVk+;uDab{M|!- zz_73&qJV8Hjf@Gk9NwWEp1Jg>5`hAXQ9qyq4V@1lRc$omcATDVq`@?@mw)0j0E@M@ zi1nk&Wqo3G^+NSEVvU)ts$j>@VvV?TXN!E-kLJa46)*Ne?XF~BCZ`uV(#z{y9k-!k zS`;rBlN)(JCUV25!1xWMDy&wEqtOaYF_hEG=GponV$+|(V-efaQTcyag9B*BSLZ+W zc!%|$tbzLfWDRtN#>S@3&hC~b|62LCIV|f=$8EBq@pJo&!)FN_M(&27dyfGD7fZ|o zMQ?+Wh4(#ED5JLEc(4e5?xrR4;%OI&OCAxE>LZaiy!-k1`0N(1WXaw?J^elultm35 zaBC*3>f*Q!3%B!qJ=<;b(E4wpMc10v`)a6&c5kJq)^k?%u1rq5eLp>g*8Rc5_cz2` zHM%dq)K;Qu@oM$1S@kG_4H+G>6sRayxeMUW=3^@P9$9HKo=nrf&#ptp6lxyp7*{BL zztFum*HwXsO>!6g{`6bh8?E&-6jJPY6F{FaVs%%_};_+slV2Dj8O^)_YRn`23)&Mn1^>_9E{qY}k zUIc$EGQw52m8?BAN8@bp1_5n>y>q zQI^VO4?jVfOO%?RHfs+Vh<&SQga|zfMDQ~UzzNpSBQR5!+E;#8(cic61A=oVt6gK* zXfHPRHK|@U>(%DFd5sgxof_TlVe+?a9WK@LqrhHP!e3cd)=b-t#t(Olla|$Q6EEM# zCqWFM6j;q9oas>0YFvZ`$|YSClgyRDQhbs!^z*G@bG0PY|40A3V(&^rr}h zxKjuE+DwP@n|41wlt6iv0rtF*mHy&#gO~+eajw)=&Bz$N-sFd^?=+0l@d`m9*tpSFU7ztl zs7GI(SvD{Vcw9^mbYzJ|p9cMIDNbP5GT@fOpxM2E!c&Op1Y)w0kVub|jDkvhm}G@c zt>!$T@yMXyWqe{}T+pMJk>h_#OzA+}Q>UiQTFog==W;WUkdJ_5L&v?Y8yhcp)HiT< zn}{c8{ENgQWGJ6#pui|(Zc$;E-Z&We%J3pHA(q|{SO6*FiWPhm8Xp5_%HD_Zis_@d z61bg(%L$GDQZ~_>pZgvks%{ofh1#s}WMnZ&W8}`C(jYq9azO;PvnThn)I8AkH%p;E zXqZz#tDNAuZk;!!PmP8H?>G!bSIR`Jd%CJ9B!)%u_V!cM$IY&ar%Oa>mFL)CncI;i z$rhy|kYxoCwmkhQm&gpl1S?wymrX~tqOJVK!y;~M*yZ~N+9@* znAB~HRKqKgNtR=qLBXtD$O?0Qg9M_8BTF00w|U~)F|Gf8MNFFw3R=RK`S?%(INQ*! z0euY!ikfq@=r607OAoTHI}>N3)#HxNnK2}BNu`~+aF-dF8{x`4lnCMcAGEx4kfmRi z@13@7+qPM0+qP|;v~9D}w(ZPH+jdr3Rd03o#6(QLcYe2T&%OWc=Q(lKj#%px-@UNU zG1C?u1O7%~ATO91Pj_+k9afCbi4BC^ZG}_9#xCva6L85DDip}r)2zSnq^aX zW9U5G34 zHJoN^d&dOQEOyDaZvGA%5D>nIjiDOHg`D6omRGqAyM+SypLTK%4eZg~_Bo;)*X{OH z-0>Jvmu*6g@?!PXus%Y}C$AhyQQQL2d;*^RWe!y$8K3f7`V#;UX7-dWep&NaXRfY7 ztR=}gNsAPqAJP<#Ka6d~%S8hV2)8A8QUZ~g?!-V>;QIN{J70}nkx`rzYPxggm{g$h zj{I4oXjjv@hUnSK=6F9S?~5Q!S}kTLB0i*{rVUAXv@hIo9KtRQXPLeaZ;$1WXv*|8 zl!9b`IoJ{yo{q=Pfbs!x>LC$pPWLBC-8`G0X1pNpb>PpL!6;N8XJ*i;k@ZsuoWkgD z%L4*MxJ;rluU&7D3!1&sA{r?8u+yi59TR8ieR}s`DsDJ5q{1e{9=GsNwOFSwMpPdP zbiJkzE7pa92gl*sUHXuC8R}R>nTT#^Q9v!Mvd#Fw2&kVxP8SlO#w*sTr}z*V;cV<@ z`;8-9-?zm*!9~Q)>T9y)D01(Xp&4>r-H=IOUA%V`^Ftnse`=P*8GXZ6yT@`6OQ2tS({UHpR^NDf1ZgTDoHetQdt*)Qmi z^Q7AeS)DbW;Nt_$@DkO_!y|sVNfeTWMC`4G4GUkUCFOf0OIq@o#;Fm)_Yn+?^XCl$ zZ3ZU2_NixPr-!SjWba)DX4DfV-4oCXoM*65y&QYFh7B8pCyw7>GGl{Xb1~W4jczXL zx%cs_$Mm18K@IPE;JR_83?@8JydQ<32U}apWjbecp%p_`OSaqg2pb##BLind7g7gGXQfUC0wce# zgn$o%j^n)xFRxM`ccHdP;%TZz=_8L|$ZN!M$(#du+E3)jRcCt?Q*``hS z>-|{ANptl>G{#F(t!!oU39fj5I|6yr2gg2!ZBwkFNAGg2f!}(QI!*Avz9SyD0EhX~ zTMC9xFGF%4htfc|H}u9t4KsekX!+jYhoa)-_Hy_hSQ?+`>}R97RiowzR|Nw1+h##29(JlfiA)-blH+FoD4v7NxB{#tiXGD zEaD)U=M!8Kkn^Z{I}gECdRXg6@;Wh_z8uv#aB7Ft=@5b)Is4vu^3V8~yqcOe3k zP9t^G@d&tV!{Z{vgBj`l$d1_nn^*W~<_zWS3f*qqTKPEKKA*DN*UCD?MAxckgWNn# zxP+|z7Qz|CSt6-h76c5@ov}F-A`EP{`v9~vOW;^^E*q%S4izNz_99*;xOFm`+L_EgqjWk z2o?xvs_1{$fcWbS`ycHI20JTHD|?s!T7%QaGb08wA%%JbfS=1|GiBBzbCO1fL^Gez zg>wTiri|Ezf8V5bKJED3?p!ubu%O>@tMp5xVuxctRKyw*I!Y#{h;qT**W+mu#M zPo-EbG$W*7rkj{Igmsx4The(Hd34D8wSd4hI-XLbVuW91eI6w|=~Zq-_C@15D97m~ z_4(`XecMlwIQ5P{9zgh?H7EX;j)_eYwi#lA3%&h9CqEsXUo>oM#tm5*Jey=Nfm>E$ zX^G37kUyjPx>Y$4Sx*yjSXq3rCG9!1G@G)MZ?V~{Rs zpU8L_)uIi&E=abHZ;h?ewrK)zp(|iE!fzsfSAAS0JE^HCxLH76OmXLyp5n4`<_OJN zaL98CYo=gE2w8%$_nw{Pg`&Cz~n zl!YmZt!hOd3ng-u6wP|F6)dw-j_GTO*Yon|zx~DY3V~ZtHKyGUiiUI{t zXFxQQnkP??!7}sP$-#?>u0rFv@$ z`4*Bqrt8GqY(y?ieO+@()M+8^-Wm?5S^D#A+vPI@j`TRVJY01&ZVulH*@T7FiWhUZ z4kvazFLG-~LJ|}%xYx)pth_B0$8h&;9_eYtyj%ipa16aOzjR|5q7wv8l56`;Z zh@I1UNF>4e0|-3@^=pJRez~uKPg|$9p~KNC0sWq-vfqm_qy2=*txKu25ZM84OW1|6 z62_d47jb}?)zO88)@>Rb?H;6b%r;y6{?Ng@HFIO%uE^v5Wb($`3$avh6j4h%65u!R zG>DG8Q@8Nr=T*WQTbHan`eMI0sPK(W+w0vtRV*fN5etsRp~bHU68u;Nblc_)LtfW} z?)xd_42RIb)zk&|z4|MisuK(WL2mU|4 z{10mFO#VG9X#Z^GAB%s_7}kGd?2n%Pdj^UA!r1;hXDKu+jivn}># zDfti0cW@TBcXjr1bg=q!9Gch~xw!o2#-+-74k*HCJ&Vdw%i7uv(t?j8;T+7lj{}Bc zu`R*ERyNW@RUKWtUHF~T3F}%YpK9+HA%gvcX5CG;!G;lJ_Jdyn7IQsQa|XKsK>g5s z#&;snQ=*SCk01U7j(Fb)3P!$B3GkiVQu#8bFj=-(QQ1g<(x>Wyj}~kV5&y(e8)odz zyZhcbZRmh-G%m;Lxs_Lt_5Ekf63k&*;~?NHnkS@Eou0gASkoU_#T4!W@)}%>v*`k@ z*?-Nf9vgZSN>rI9{6H46CQ$fz?+#HM-=-w$+i-F#2l6fSC3XtUenm>_*)YW?U#!Wa zae0ejo!Q{tF-hggR;cDmkLu_^X@seW8pOvT{f9F2uAyZIp-GZ&Eq~o|BR_|%!28NR z*tVI4K%n|C(QAU`lTr-N#u}_B63Ul(q0TIb0&^VyqXP>ux!@dD_d6p?=h1fru$q-J z{Mp4`%IVZD=8&4!vNqQr-_lP>qnJ}}@ARfla4iW3 z3*_4jkpVM*M=*yRFXl(c+EjP%YGJ@`VKVkMg`_XEF<+dCh1_XEsF% zS(+kdGsetzWeF|kMEcz%Uk1)^EdKYv$TX+h)-9=(vCT>g%Dd3m%6NhV`FObym^H+5 z-vFi%MccSE=OBOskJ)gz!CAx?{IXmqi-(S<0m-$GgMvh?b5~O;Tby#+{1Ri{0l~&Q z;`jt9>Oaev7Z!SM`aA~6t(WH%B z>bkl%zi%SuQsTOdFPeM%*vaRMo6V#4}V^gkdZLZ(g)_Xsg}N&aFZ7 zC>f(Oib4+^F|ZCDhG3C}IeeNW%-tjVN#*RGDr2f)spE|+iZu3Kj~54HyhuwGj|Xao z+vK3JKNXPM!|C=IyVdw*TfB+RIK#?$SGH4L?|XHeg;K(`DZ@V^;9+` z(D-cx&~Q09*b0eD*~sN#DI#B4$})sdQAL!)ksPgLHWtM7V}j|tOf#{|5U*wP-|y2- ze}%hJTy|eQpgxQi8C8ZYj3RyWY$duhUuhc%XZ+YG`~}}@^kg| zq&vx+m>32GV}!}L4Q}~PdT`{!3@Gl zm+mu)7#jdef+GZH0Kv1`SyEwFR+bFW-TKZ~+uTZM=JFZxsW0Fp`<#=Gauj0h?U@>G zE@K-Q7oz*NS{>l_CvZwpW^^`Px~g{wqPzFCFy2@j`~fUE^gU>}<{8s$&pOmm%r)7a ztV4H)LdC)>EFUErcsiU9-;+bVRo$b^DB0U5k?8ES%t+gGIjoSgx``qRj}gLuM85<> z?a>T@#@qCyo==_ByRdL`%O@B;?rTHUye0sZ=E1e$pbhGgkx}cIobgNs6aPq{gTv=b z*J-T5=clxV*s&}^xN2D{$Ok}+u$4EdsQf};wGc7l$(EZbfjF1z@_%?T&#cJTVbuGT zQiNsHZg@8+5jST2n6!D=)udEStZx)!#3wezfoui2Jn@SZm+#QI%x;#`AU#=X(#xnX zWIsP>8h1HCHFxBemAOj?Ef(H8VQdbck0IczC*x90of+YjyDAM%rJiE@!5!n$)9Fw`kMAy2*to-3AhWLb5y)=S^WqIoY^I(yZmneBv ztoQq!Ko4g{sY+LDZ{q7bVZ=zdx5Hy|@33T_iUtr)&s=fnj$q>Aoaygiyq3`(YOH>u zJ#7{?mm1oLMOiDqKw=Mju&;J`GO+dBnzJurY54-9c_8K?_$@NYi4$hI)MVZRQJ;3u z?%_`t>(+MJ4LyJbLx}xc&13=SkY>TXT;ot}{#A#h`py^XvbclE(mC-?9TCH#Mi|T( z`H{2U_^vh4klHxY$Rt5v3O}vdI3#<*kHG3I^oew;_N7vrvv&i{*gl~v@D=_2OANlc zN_|-0k%w9k54FJ3<#-3nFfbU1tpHN-Vq&lFRe>`%w9xFA6 zqx9bK3rj%gfi7nyc}U!>8}Pt64u~Yu%{yhc;?^FEFDML$dXMwc$@O-g+Q8X`yEx)W z1asbEbFG)fpMSqEa#P6!==zg1)gb+qWb*ynlKD?+*`u+pfvbk~TMr5jpsFp_oZ6|n z5f%s!AQK9yNzKAAqiz1<8)9rjYZg>WRJ0dAJH3nEkE3KnZ+Q)$xc4i<<9iQ_FeH(? zl1DtkjF024UH5=pXU2fv4@*N!$LytWzFLJ4mz}wEji{T>_hUE)b_PhmPlB=$W!8?{=oT1P+Ka{#lOCht?Va) zekp-(asaEq&{$&J)k(p+X0I5(#+c9PRN5a6RT^cqT3=F}lXClIxf1U(8?R-VRbYeD z#}vW9gV%t-S6OF^F*NDK@L^~;+DO?paK$%ZcY;VK!kErH)?2N?Ni=~y$JT=Kn^aoO zI13TdCdxqBmK*V#%~fFYUjrD4PAq5Da;erjg6WZPdus7Itrt3v!)k5bOa~Y=vxFQ~ zF>KonFEbq{*_6Sj4k8DK%sJA3*t!W6cO)(4RVce!Hb+H$!z&tjC*GdF76pOT#|pC# z!+eav$Wy&86>}??QS%9&#SU`$9a3yP$9VXivnOSx(GUzFMqgncbwG!<<07`9w9^#X z`Z+06U>i67c0;C-i^7BkWlcc(Dr*Vy0>a0KwGss!nJuRXrKQ#&@ie!X@bi3dXYXVVXVh&P!O|YJs@xMyR;aReh(!D)}p%s4a~>PSNF^M+$jsw7UoS!vI=$iBNaQ*w+?*=QWE zF9{-%2P+&jSC5x-bX8K98v5JSikXCb^?=w_y=fZw1D6!OB@PDnb4>BN#w8x()|1UQ zDv1wZpJ+vyryVb&ZDqvD@tGyq4K6Zq_%tBPfp;WDVqu>}gBk9p5Y7emtQuz5h6BMc zxOlPF=PcF#$$#nR>3od0^$0)Xd#SpvadnRqU4iBf!37%vqzd9>C%i^#PBpXyz5P3{ zwC)OsZ*j}oIMya!1~@Kc(Qn;@=B=eGJ607`>2<$m^yv~k=?GFYrqz0VCiQieY^NDB zLuI`y`%PO@(SQte($b7^OR1X!Vgn|}F`c;=4@Sl0SNg{aSu-j0d}qDNjkz^362&T2|bsOmW(lb+E-RTzC@m)@f0aH!Cm7e$T{S zUO0A$UvJIpNYdGE&z)cMR>x&dd+L^7No$@esw-KS8C7QW9EN(+GJSxGAAR}to9 zGOlL`KYlYsek;#Sle<{3S!_=`y-Qa*{V^r|bpM-{Q2R(+rczwLX?7BJR?DkLc#m~~ z{Y;4Tyk|`^c5dPg`>Ep4n`p@moWFPK4A#wHV9(&2?yz6sHl`DoE4-w6SC_lN=#S`c zVean?2d@rG6(g9RH$?(SWy=K3ELph`hJx>}fXD-x8!^30tO3zLQSf^v(gan?!x|?l zY^NI02~EG(DA)evjiC%b{l|}c_Eqm2K)e4?AHDz%m|T#AkddPcn#t$nAvwNL!52=- zdIF;>@QdCEbWoKifP;a^3)`iSr>yS|4iqxCU+?8we-9*n-$`03dv4$s47a@38#$GH;y& zx(eNBCWNQ5Lp-EwR`0f;_GU#PBd?;tHxtcuOpWM0Ia4U(xjuBl9^}m0L~foHZLU9t zi*C&IDUvm7CE-8FGF_1%dXnlR^^=yuXmo_e! zL!%7J8Fa_w8rt{r^L;kif47Pu_$v?fa_n{3CAlPMz3@D{U>%-yt)r%iq8{`J-FH)<9D^ioA|jvCK*h_X{ts052ALQ zx&&Z^tE-&qs1ZytPtF+eZ_pN+cb{c`bgtW{%HSLtlZ(1C@s8i=s{p*ht<}wU=pLvM ztkcf}-wYFs?t(`RTlg$CRkE-KEymSq(a*iNko`4}cF_Ce!V-m&qidZscnTpvc?~1_ z(xflw!)km35^2gbb)@D5Qflj8Is`WOsFtvb?1JH+nmL)yoJ`kAJZ4$5ZVI74^3R`z{+=N;l9=O)a;2T^I!96PKx z)Gm6g?X@#Ti^)oV1Bf>jroqgyl_@Icx0Z(LALCuM^%zkPgN2Lc5@d*@xp97MGNDp2 z4S(yt(##l>g%PJ?lASErV3l@2tLqA`j5~s5Q~6;xhrBcilX};>SPA<(q{CudwHw02 zW-I+q=jDY}Ulc*Sb0A`^sY}am9A_ z&`~*o^LZE^M7_i=**XfA2n#15y^#I+@0p>E_T+UD2oO-{Uv}#M#bR38#lc?2%uB_= z*;T>W)XZ7b$kx{Q|6feI$@0s93Zvzu59f@I(ijrAZnSF}po0WeAdL&Zd-yPpjm~V= zw_)DZX}yAeDjnp4H9Hv!L}k8xdjAGu8X_mwkTRb#b9Hx67`PkAj6z*4I(fCs%PN@r zsSe0cZ%E>@xRq(G!;WxlIV8oM)6Q1wK+R@>gXa8gNAS+G|9tGxYPn2-newHaJWQ`M z0WDffGx&I;(D3btRW9Q#CqN2$!_sWO8>x1+hN3M!)<*Z-tPBU`C4DA?sUM2pQf%CD zrxcjM{}C>EcB~-o72ks)pWhV!E9ZP!l%@fN)+(aO(*C%riMG4cg<3kGm3C(N9W?ZR|{~{08 zM(`8N<~Nyr8D8))=K?~OcIbk14N9>6mz$5eg#?+mZF_;Q^tUcwW+{a!wv{H72Gw9( zcU$Us%_P^h*48#$FoEB43}-Q@xb;kM8So?nc=OU=iwYd44ML9Lml@A3H z=#X9KA`C|Obcr+%KnKEk%LL;>8^M;}tDf^Wt*QwbjG?ClFqB9vzwC6eI(!C_X6-s09b(e``D6&UE{I8SVnXF;^(Q zs;&|~h~4UdP3XQxl}t?4vaOsKdziMAOvt<%CG6-`B@%X|T zn-(LMNE8mT5WYtrb%$5Wz2vr@!yE8!BElF%}FIe~qo|^vBckpvmvf9`2#cRv; z6wetp9@@TRe$LWEX^?-*UFpdJTX*P5wk*tR%h6a^niQdAvg&5q=;rU*;MSR0@$iS} z=f7;U(fw=CIXXMITm8|5|EFaC=O+K4TiDdy$lk=v&dlCb@jpKK=f0j6q%ZC=_V0kS zt0q%!4vJwX3<@V9f=IgCRHQ??kn0jIGO|KIlW!}dz;@)~L}VcvPmn!N27PHVf;JI( zB>p5#X^8R}!?w?@xD4c@Pk9sBW)dCI+n4eA&TQTVh2ML%L`k7{b{e#GO2fMrRrpP+^hhj^iqmZCIza@act6l&2o_Rmm}$*v zWV=YmiuKOjGOr_MW2YMmWR}%zNcUNON3)35c52*G==w;DA9-68Mot;@Y=*0GO~G=i ze<;S45*!uMs2H|#I0#y<_6D4yhOe;#=r2Z=x1>{h9FEc3H3ZsbbdugvPPcwFfxkVthqZo|d^{I|wg4>bGwv;J0&YqT< zwORPkYEOWwPs)J;t)ATVJdv*lr=WD!wz?9aFF@+~;sCc^6h2`20mn4okJCQ+X9Qj& zoQv|{RQqgbGAw{n*)F*h(xVIyw^>$=@OoOT-G-&8yM3m8{Hl5R!NbQ?4p)^v)Mk&! z-OGuX!MMsP7<0TZ0i{9AIN#dBT)~!*VRVN@BK`yFnvr-yok3B+TYiu|xrbVF7t3_7 zja!u3zS1Gb?Hc@UrZu_0tZH)UubDRQjJTUHK{CPEKCry%)(L)AmS$1)NF zsIbNA(TO57TvBv3vpA-XglfYfS$0AW=`19w5+g%+D)h{{#z7oQrKXcU6g3!oxoV|M91OxS(qqbQsL;@g&_5;iB)rpR+vq$>Fos z$yb&&8CZxo%r+C=MtU>??+Mw(CN(fk)*U?t5=Mkw&@Vt}KR6@aj@*{w=}2qjXAK2o zhf#ZT%W#Mn5RYhQiMjquA3|Ud$>^{k0ZmO-ZDonpH2dzeqVP82j(lgV{=0{vqsEKS z9ESa#AFNV+3F2M|K{p|xw0C7kOK;DQJR+7PhrFfZdK?tIg)to&UW;Hvj{{P1O+Y+L zyTVS}Cfo6ZK%O@8?g~uV^?bF%=`X|gwo6Ie!qA-g-YKVe zyZK)~ACNbbJtw0X4{2l8dU?h?5vH0)eNYS-Ltu9^k{4LXo^b;myzZ%bXWXSQjR(>S z0JmhLzsgn&X)%u`r=^xm;An}{KKXrjLv9ZsC!}}!4+nq3rRIz<&BWiCD2)dkq>N2} zl7GgiDL*3p-dkhkwq~56Z&+OCXT?7Rmhfkm8~)9BH%0P^*GEG=ya+e}=S$#V#)|k% zTO8|S5_t8)-g*T!l0)c}dPRMK`H?%LXHw=Afiw+`J1u|Pw^t|r%KB?mK-x;KSgE|) z{>PPR@*ScG^wdS%#>h&UxyRd~dX7x$-Y6V2=>7IuO73g9T=Q3E-o6I4EJ1z-%vzpFW zG)fyp+^r|jN+*IkSCr9JkZvbYiE;mcE%c%!HL8FLov(&*4y2FV8U@JL2bo<3mh)KH zO*K9AJ?2A90o~sO7Jhh8G^#^pD~{MSA33RIo8<-n*EJnOX3zNR=sHy_XM5mgPNYN9z0s1rO`Pr%?Z-%?850xM0262F7OO zb;InHCGelu6DA;c5L;yCd4NHDPx|N!=cU{|bmEHcn}JQ@j$6Q{+6sTDom&fKJz+a! zus>X914C|UJ38l5SRq(2>LZ-@*x$s9{zW3msS?v#AM6aP2LaBbt|$_HvK*SaA+6^;EJ-cXMl?x4+3_?rseU_^yOldI{^ z52w|g!&fm$;ZPr(7Zjcn7%Ln^B>N!pJOX0A7+PMKRW-DqPi0Ov1ok5fANObaK1MJG zd_fMuALomR_ydTvKSwSU%I|G36)Xb46!Ze-Od#g)hWdE<(DR~12oB4}^^_EK_P_5p zsWOT0SkX)l@zOPs zMDsYHH3XvVH#O<0PUiG-@Gza6ul9*{qg&R(pYQ~~@C-h<8%YwJKzW}y0FIntPGF?1 zPK-uTxb;!9Ma!Q{bCiH4m{28D1YbG=;^)Pu=27`q$%?31^Kws53jXl?ExLPz$}(;D z3GXd2x8}Tk$#g&5HWz=pgKj~mUJ56F{Cp2%-Qk_5E1SANO!-gn9Ht3_XCQ`rTq;uP zpdu>P>lz9~ylV^|r_#^7Xp>u{iSRkNj;=igm`q5|+X znx-SMaN3PBq*_qbLlg=W8^bhQwkSMI8P9~Q1ULck99El9Cg8c0j{oFR6%wPBoX#ab z*a~FPnF39hLeX*#MmH0&mpLJ^h`GWrtiSqG7G@H>EY2B5mRWg4XcEQpDg!{hD4{Jk z2;sBt9OSjJ^NkLDxyVMAbjQqT<3inp2lHG)WUn!fnZJ{*qktp5v4}LkAjnbW>u2f_ z180i>zf{Y4%J%mlc4}HPYY??VArc9aBo;Y(qc`o?S0UM^lG}wGu{9>CmCs;V$2$7O z6m)NqHg%Y*>Q1U+IrZlY`=Cw6bByF=E$M?u^L_BL(@t^2leMrK3A!@zl8@N z*T9zeS`4b1$~+`QeY!zo#9HB0lgiZ(^d%^?mkVvW&f>zIU0p^d%DyAHeI(+``Vy!X z%?mIo25_+ZQTD1`B6E}a%nqjb1@61>NF1SgP{EAmXbKBGa5<10y|7t6D#B&HGKzO! zTyOUuBEz;4YavK!&|8Y^11z&evXfTJ+xohZ=mhQed^rAaKDk*}l)b^HuxP5K>)L$n z7**XB{W&D<^&8Ps%sO!^p3I0E<3D&Rjh`;1f-Wgg6O(D~rp9#l>JY;QL0nju$pV-= zif95FpxD?piM7{A+nj!SbM;TQJJBV4{!%P9AqoWr?zBMdjB*6EcMUTYz9y&>C)&f* z)OPEwdk9a{JMH!)ZbdU;Z9Pfx+mzy5l(J@<1e*%)SdPA4Q;M-$J1>c}%faIfw>qsF zmDF*dF)FWeNZpw%ksCS3wwm>u8%XK%W`h9r56=XWi5!w`^@>%`&b#8!cO3_ED|FCB zw*0wz%7Mutg`+&ifL+~XwwySV#PLWHH!?y63~E_vZ&hZEP4QtOPi;Ln56v8?QzAUU za`@>5UTrMhm!(^G-E#F=2n*3rjzxWC7Do2%`9K^>W-xl4=AG@*+b$oIF}38}GgFjI zs+hWcxzG-B2u7b+F-5(%qi|qi9VLvW8>S6?Kh={R{p8nlLCVR9%>qhynw6_?9gQdc zu{tTTT_6s_EULQ~NTS*iyr&7Xemo~M7-NwMwP&$U>o#w zJeHF|zR}|dTiUK?&Vu9uy<{1j&nz#N002}#tG~3JLfQPp687x{T&B4^uWY96Gr}-5ZqvMaz48vN|0aOkB)0s^w2k z@SHAViWPw%NPeurA5NEpzZA#4^vaI#hnx_fO#s|81lHfZNvtR*p|$3u@1(-IzK_HT z*N|hFn8q-Qn?S;Kfd~XknhoZe8edFsc&*$WEV7Wd?X&XH#cLJiPQ5Q_rk84KZ|Y<3 z0u=AKCpW%RCbRjO#n4wS*zc=NTukZ@Rd-WxqsJe6Qrjtl8zf*`WjHN2HdjoiWdBtA z;sd@H_m%2=oI;KAHW%1V?7JAC<`X`QA!xS53kr+=-hLIW{eFNnRg-?cIa*qIu*9(I zUXuQJlmoG0#WzARktm9pEG*jUxuF0O@;iTJ*wZ_1G;`7V%eJNJ;nb?4P@uir`{!y# z%Wu#OboS>bvv}&wg8t(-pfBRQB>!ocEPD<A(s$Ao7t<{~s*snD&LaaaRqhF9nz6n1&Y4K8t997j z-g1d&C&_Pcv2v--n>lwXvS`HTW%c398d@dXSyx%IFeyxzwB=P2v4OB<4Cf5}ebf70xAm7Q=^hVS7@ zm~1np<%|7buCC?|vT4H;y;N#mULqLT$m%S%6co7u`3#-YqB>#)IDya1@+Yj9y%Gc>kHy`6i>ls;IZ-I~;%%GfMkU%szf}F0Rjqiu7D#X~2@eY{ctn9L zw%F=40}!zRwy+8NF&Ar0$^^z)h{|&*(Xa1_M2w(M;)t@i%7{HMb!_>Y#Us=Qs%z)Q9d(DNLrnYZuA}RsWMATr z+FvPT4rX>vAV@{W+;``TiC|Y*ag{x$4sU3cAa%v{kkFSQ_$S>YTFGpY^nfe)N51g7 z*0frE>~H|FGej+GMI(J*WGndBahVdP5vjvxHWr?qW{|xyXL2LB&f8{OwiE3f79=L)U1FaC=hU4IQ2@@hE5>!UR`X(xoXPZz;p2hNy4Zq5aoK8I z7NO#jt3-=arYU1h4fY^o3Gb_eVBD@iLhKZ^`&#y)aU&b80d?NsZDZG`rE7Zmm7agR z&s$0t-M&sR+Vtz8*cLyBJx>b^OFIMK&?%ljW+B!NwRrb%Nu0+W#gco6&~$)Kx?OrNEMGMUhM)x9SQnw;`V- zMQPK7V!0SrRw6}QsF`?d_LC*konxn)8jPl>fP|qULVeh87uc$kNRd-)7#{frU3^4u z82@qWLw`p$DRV-`O7N@K{G``ouIJ_VocmnQVt78UlVD(tD?%Y<<;5>%Gcj0j65ytN zjRWG}6-Bhd>=%M-d+|06A%#k64=>hM69vX<&OBB`6=?u!5$xnZbgkLUs> zWkYmyHnXax&0Tc5U_-Ukk%Jk~khiFrff!Slm*){}&WltSYwOCyLQjv`e2+O8BJz}@~X zCOKqXR4ItTn_!An1!dzB-B}-|XgH3_=Oj+przkf(2&opEK4E!=orTG zzf5vpwv=H8(eG{Zu7lKH>f8s+g}~&fMex~D&`A@sI0JX#O8yX$>tVrOSPIf~CBjBP zv_Xxxi>yDRF0=~`(UsjeR3N=5+}Q3X&b-H727JO zoE?jMWy*v65F3aqzMb zEXXJ6>0D0WMjmNy3U<%RF-R+OmAoJ1YPABX%;G2CFeRYH6PI8INzYS-;ubhm-e*}9 zO;1!V+0v%@TfN;K;!zL~8$z|FOrSaojk`;Lh#6#3J^7}|>Y7p|PUz6C-VQZca1w}j zY&fu1fB{plk61?6mxtD>Ym8}%rSYdYmb}`05yUqVw6)V1l_(U23FX+Z;Kz}~4+onf z{0){Q*b|c;Wzo*hIN2s;(~+$WelmXL(}As+&dk07ROea>;Lfvfr>E6ko*!bWkpPg8 zdoUZFZ{Q{khMG^1s9PP;g6@E2DB4^%55G9_%&=VcPG^Q6{FH!hB*^-Q0u=eiub(DP z3>B*+xeh5O{~y-=(BrM~j)O*K}n zl@fy;&u|v0Doy%ce{yZK?~liLM|BxaX%hm~Xq?EME_8X!VT@5U8^eaW%V_fHEC~(_ zp!>@JY1~f7{T2W?GI_7)qOouH?GzT};%a@>k}!NE)^Ro)ry!tD8jrx=?}C*xHv6j^U*iVQcX9&%UHMeNKajkB0uiSa97+LG0)?HE2ZGNrn zCR=E;7NB2bH)vAF47GDN6gh`}{tu}Kc`SLc6AW{MOQFSh@;SIrcF$FTnUg$msN!5< zKF~5fe%K^^XfHEMCaeQvjp=I|GoW15st?$+ZTa*gQVi@p*vV!Fs`=^p|A~UF|vzea{F0%y##~lU^C&+&rV%;5fwl~`vc6#-&@CKhAeuc>LQCSF9Esb zv`o7Dll};mi{nWpG-3CJ(qPz9OZcV%HPSN#V^*5d*TtxZv=`K%q zAd3q#0_cW`UZ~!=T)u$)&%$s85AgbU4I!$;d$>|?2*dR4@q5xv$(axJX-2Uly$Y{?8N?1s8 z`HReT9Jd%Yzy$OO9uD3C|7?9AG0RVqRgx(pU@t%PmG@U_qp^&QpHFgkV7&&HMdMSN zdut2i+(8Ek-Bp?SVPEiaRj<@7^Ep!1t8dLo>Q1Gi zRpr}VkD)`>iqH_-8Sh&8+FY#c<`5sU*|Ln5Dcj|S#vS1{u&OGG1R;oiFcO~eR ziNZt(4OSX?n)2YXT(u!A=sZQ8g@q}foqy0Es6?>9K) z4NFV5Lfkuj`n%@o+_AruicN4<{(bI(cbDH$<0#{ySswbQ~vi2g3=zF5A)hpQr23# z#T+SM(D6Vut5E1Zr8PGy;wn?J9o8P&45ssgF)>Z^n@l}?7x^H{qoI&9ZQ@z3)tL<4 zBRR%9O5~1Jk)TGA!Nn0d+~ekJ9cAoD!Nh^OKguM%IYx5(xW>(RzY*=GefH73EtC#k z6g|QSM!2zVU^MxxapV?pBCb14YXYXuc<86Tj6doWF5dGug#VAVcMP%w2(m_JdfM*W zwr$(CZQHhO+qUg{8`C{)+qS0N({FbpzV~C}i+vF7fjg*u#t}u3Kre)A0JxS(3l6yCK(~2zw%X(lL?>>!;yng zHe=x-HhXH{_$7UFCFfElFu@jQ$wC%>+4wbeq-dQHc4$yE4s`nDAF4)(`|>dvPO^7`J>?f&%gZf^1AEB> zBgwxNWM@%T3jz=V_5TD$9@*{`%6o7=5*ZUPqJAJVrz#?c)lfpTE1vFy4^ZhC&X@)m zaz{9pQ8A<)hG@lq*izWB1UX1X5)+FR|;4EST^lo4)^3hAP}qaBw7| zDhmw~Bwsg-`7=dMVDe02_;xeO`jK$Z_-ml|{`QdUA8vSQ#g?*XNK7!IrF{1yr!)za z!a_;*fIk6-5haEx=88#_s3#Xa(mP%K>wl~}wrIFmh$}iE`h&L}H{v{C0r{=bm)TXpLK`~BWqz|!kEeCltInbv6bR2_$EId-2g_SpY5Ua9fiXEQLO4i zcKv`x7Tv;wCrX`{L)X_nD`kT2swBTFBiw)gMTpHK&2oE!|M8=R>VLvqM*qJsmzcMM zvAwnF|50H6ALKgZr*{hy6KjP3qQ_x;}~IqI7(xZ=qCrrMerzdNx~u*S(0v?hpi z!(@qA5EJZ7A;in<(qm<+N+cGD5?eRaJtS)$Xm>%ss!7Dt315Hw3o0x=Ti2KEAiE@9 zL#iz}KR*}P_OJN+GAJ4NQ%f>@Kb$n}FI=N{%TA3XTx@6g@?H#QxT*WCuKn!wWW-%v z{hrt1+&;bbE{gm)?d_enTaTVweuUbBdsqMYoG>76Sg&4yhVYJ|)9!|?p3nxWqyg5J zQjNFd#wQ*Ov{b|pEggYt8oIOWi6wKIAr6ohVab98)eCT)yKQR%eJGX&HrGxRKp6jA z*4+)=H>Az5FvfE!jG4$pd?UOvH}Qv=SoO#vwAy6`v)`F<3X5M`{4^R0?zR&&F*SA# zPWw@-eYulmLoV6te-+yhWSWiPkE`?bshqEIG_HqC0csbLZQ}POU9on!e@t8}U&_fm zk{rW1|MEN|X*hrHd2%(1HOgG}q!r&%)40lLNnjhv4u2hJw^*%3}IJS#jqM zVc3%pq$0beqPASb^;AYVDNVkHyq7vZ&tERj%dMTmf~5~B?m!*snUc`sVWHXXaa|FZ zTeY_8q?>+G6>Rcx6oWexaC_EX;T~NT-+UjJPq$Jid9*rcL;KzV5|Oa)<}OK7W(9<- zB5dhL0Q@dwul2^_QrR-kHELNQ>08(U{2Co8H|AMjxi_yOK}=h!89r(D^mlaaTY9I~ z?_KZMQO>d$V^Wu2pP};a`mplO_=LZPY2X_*jrZtvW>ewoGki1_`I892gLZ!9T8>8z zlrq-eh6Qzk>@&hD*4g^UbKT13F{CeaCq7YbehnsyS%*=eOxCOBln?Fy^5X#RXAU{u zp4|}-lq|J@V5ReAXa-%vmRtEE$YuV*W&>A+i9ZHZlO6TrxJpg+^XUenfpwByhi`&S zObzhpPUmYAIl^h!s`&H)D^h?kdx@7pg2s53?!B9bqLKJuW z6S7Cg3>4OZaGm!slf&Auvr;=_BglU(tvQ9BzyFKzS6dg@x&7wPOuiBjd zG&I)cuK!)9rtNKnwv7GlFTEzs@vAo)42%E;jI1}9JU3Si4J>(yND`U5hUrQHnAE?O zFSZCOvA5^n*ihZnsn@(N)~FW?so&VZXz$qRzuov4V6^?{&t9J}XeASRmrTj@^t*it z*uC|?^>r-p`FltDLu1hvI@h#@088naqFss23>{2H1TG9+A6v~dIC)Hn1eVvsWCOmo`QzU?_R%^xe{!#tp*GuG^kgFnrJJ z>Foh0-18Ioim?TS=hnN-I`h6P+Uu!vwHM&vuamDYljmZ<*u#V{qLq3 zII>$QygbW=l3_5Q4S6H~RY`Iwi=b(X9p^X2@R|hOSSpk{e`9#2fo9=;l0d_4+I(=j zLtE(l)TBeI69y{CRGnN#D~Wxj4&C-t(C)}CPc>Q{FO#{qfsr%FW99a#B$r4s?QEw> z1y_}^USD{PNxFuzS=$>D`*QBk;$h}*S5tw~sS&?p5vE@T-P9(XKcvPE%VZE>;c!A3 z#y@QGOblZGe5xH|JrUyQfX(UBN`${d!gcb%^zu=+H(jdCa8cdk;BD<}4ARa7j1zUz zjlCRoMSey$`v40oAw2BtS8j@p794fNeSls4N$Lj}P!9@Qx-01~N0GRfFEYL2wF6Z0av6v(FXBh5Nl-5IzrYI)Z?o>9T;uQVT0x}<5>7Dp`x#=dBWN@xvrNv=tN{?V|%;N)2@0%G=rMM z|LP@OczIflM|M<&((TFF+0hP(|4XI0-OTdwYR}eLpM1*;s@REvVfv(k~E@k??azMu5>YViwm;jbJVV=&y%X?hlcpiA1j zfGwg!d#~OoIYKhE@Pp=`_DRMOz3E3$Ic9D7su8GH(2$GXCnI_C*DL}iGv2JHKGN=c zTHw?TOm-fdX%N=0lj{~buH~X4wgx+Fxvh(DvWc+nJ%|asPL)ox<6QVrTDaX!J8PsO z%Y@^UG)nP`7IxX_!xRIDH!e|sP1c%Ui4SKc7I)%(x3c1W-?#*0FuCYzt#w}H4%NqV z>{i))A|Xn{-f-FnqIh7B^~B5i57)}32NN0`G`E^0x;$jO^0AM+FbEYQmVQ7bG+FFi zXHC;bnV}JwY$EW_Z0Top*3z&q@1b(XW7;Lz77IfKq zDu(Cb{nD`7%D`vb$eX1WC1)838Xt}LCMo7aOQi7NWcR$&?`<%m`D>1c;$Mh7AV5{J zt_r?;G|b%(JW>(H%E7aw6amPssgKKl!2BeE#`jFP<@TOsCg_H$Xj#eQo^B_2+1D#j zfbQlh5sO&f8fogj)&hV&Td&Cd`T+!fAn7uQOwQ~|kzv98lSB8VCrC5k;o|k>x2%-M z{d^w}F!Q=&;y(Wck83nmQJBOfp2zHt!|o@a=sf*2O8`{?D*r3Wuql5)7F?}8NuGw> zHLv+6IAiSDo$4(7=TvN_x48SF6L0>A?;3stn1NTrkMW8FNi?&M7TiH>X8Rfr<7JFU|oQpYf zn0>~u-~fXOWCv4I-&j{L<9?`tnD3r@La^3}7y4`&CuMSm%7r?pvmGfhd^M8V)KHM} z0DE08T^R*hrJCF4MnJn4;HINIJ0}=0Qc+n>yqdH{Efu>RhxbOtDt&)&k9y#!l zCu;~>cA6GqA*e?Yqez=ms>!ne*gO&>$;aZAYrXQXsB(KlyOvHS*=QJ6oqu$tEu{Yk zTs(+h{I+v&-&N0x>!Wn4DY4=7J||0zRhS`W{mQRI&Q@ou#9_5^m^nrISWJrhG3}Zf zdy-qYamD*Qy7;jzOIAp-Gm4x=R} zyQL;8>+M*Z2~V4xCinLY1MIPRL%jjf8EsBIJ0n_h-$v&qi}$Dxs?zm3;TaHqLn^``L6cTl-(Hr;*x5fM+x7z#8H0I7! zJShC3QIs}wvf%5bM*V&Lz#nE&_)VnaA34XKzz+UxZ1-#Iegl9vCJ^Kj z^qHlB0|7c9bIesXu%+qa7{Cpf!_oJ>hTdo_&!!eQHpt?YK6tj>xxuQhJkFnIWT8U zv2Chb?$y@4YUKDNs5R-;Ia+Gy%y#8#$>XQUE`47I!X1`W{*WX%2vWQv9^%ag-d%?mvlZh(C+I_~#ePTE0nVGaB|0ANW#EiS~ z+*5#Cr;n5C8k=o?2?~s}%9|VsR_QO^hdvRIYrrpgK%R&^N85pE+na|BZi-tG4rB9y z_zO5C1aoX3K4+bpcFl@EeIxRw2E7E}*6wa(tLORT<)GGnt^}}coU!HZ2U?EMI7WBf zYomDOhZ{b;;f|ffZTuTXc0%FY0o#rd1m?3V|_50mv*Vty)>-SF-?Ki|AEvW3zBw3djLK~39x?pU{C~G^O z|G8OgrI}4aK8|PgZf44Kf(Z()*xUx+hfdX&E{tSGd6BC=w+=AhGZw2N&)8zQ;I z!v`L8yrqAz`^aTBk#$~U)M4hOf3TT4Ql0E|oBwCBamX)k@}e-3)rkUwp<0MO!-)E1 zzB_`$V$LU22D787aJ2;U6uUf@TO*=g10KKcOkZ|5Y^ge=h#-sH$C4R~1hj?OzTAWJWw0^UFvR1zB*o*#v+A28)~w zD@_laj96KkbyFMC!g6I@8~)ybZHMtbCvYzmX^e)HLhU?P(M{2 zF&4`9vZe$6nTL7m&`S1p!?LzId-?ol4O>f?arn&zF^!+5RhM{tOPn*5-g>7JGyyhl zdQ~3d`{85}%i(Mg>dY4INz_ zn=j+s5GGIskpu)vgi`^plm*HDA3I0hq9PtC3T7Iu)J*9uPa@W2EA=LZ!Ppb{(+oz) z9(mI0^&D#_eH=%bVTlJjV)h?aw!Xfq^@4U9P2@t}6IDjJjS)u{Yw1Wt(^+hkVxM76 z<5Ne@4rK1h_1CP^(RvcX2%zUtZS<{KrJILEp%+Nq_n4f{{`z!aCxuh9t5eeUI~(OQs-fkciKXa#xtObNuWu9|1&LcSM#Q!~MffE0wd%ARpM8R?c`Ioi{2M9DBWnn6|G;^a3@)pEJjKHO9@=w3b7PE4U*&3e?FJ2()xMHxd5MZkje_7 z6ak84E!IDsYIqphrdc+Dhh#03hueoJ1PkZrOgKWtSB^B%P)i~ay=-;;j%UzC^0$!^ z{jmM;op;cm6U&{01X`&#{J*rYZ{r7vrw{utBv!}zwO!O{2URkh+{`|+LJ;C!7Dq|@R`M2$85ME8{OK)iY~wG2_1V*(H>rt&#yvQ3W9o?lv@ymjQN=LA$$A_UfAf;i zqZyNeWe{o62{E6mM%j6SaU-lMjPn>|1KKrL#bYk@HE1aRB$;NaB`15Kojt~U{+vXXkO>w( zA7+u+V?R0Ro?>j8qX?bpC($}?mDb*EoNC)R3(+Ihz21!MH#at1 z9Y+NW2yl+|BI)UFK(gu}TGRuoVa@KjxN{fKH&s!#REab0zqLO#-a$nC9qr&6ep11* z?&G6`;v~$Z{a9=-QMf0l6YD!bo7Jz%?$L=lV9A*d zyOFDV$W8UQ%3@(D4FkPTyfl5S_h#?IdYDO15(twsk$%Az3wV*?k?QW}HKg1m>FR{X zET7weINKFu)qha-dt-dME}p92-W-jf{7FG&7}^KXN+V>Ot+HjlaCI>+Mlx_m%8-Wr z%NvjQ;=H-+A3l!1us`)*_Gat05sNtvzWC={E;QS&=ozg;dAx+{{^-a7k__aX@>`6w z#TU$tC)S#K+Le7yyRqA~1i?Fk`Vl?nGZD_cIK3_xvfvCZQW)m2m(zQ~`!~;z&%XkJ zr1!lvWOqOR){2Zkn`QQ$b8y8M;|_=z zpGFB*$GrYgCc3y81#unz*oZj9q7YKo5~VDlbb#>po6)UZ7EvnrhaBeWS=rxbUNIzj?&G7-iNBo753@c*EMrI6gR?Y^i#CU7whr? zIe)W5acv$N4UP}La~8iv(%s+UL9x9dS^=X_30>TNI`VYo4&7&*2329Av?3;bHhz3M zzVh&gBULwoZ7PvqN>=-m!4O+wxud<#jDbS#-I4X!^PB!04;jD;zOLOMGd3< z$LU&%Uyv7^^Y0chjrCoLCDkcG*Fy>=UE`5=(Tkafs^i=6v&w(=StE7s1^?4mlD;hP zW>w7@qrGAmNF?#M1>rI#WMSiGW!LJGJ5+(sPaa#Fs#is>*tFM2Hj4F?b7WH2U_33 z9{25x6ti9K7nv42X=ods?|_UO{!`vlzf<4O!CPL*-2ne*@gMeX(R0{KZnsfBdiYQ0Av@9aJ5FS5`-CebJNhlYr)Em{FCXu1%7JQ$ayOj5=*YwVBKb=F zKiRo1uK5E*9?xMPpvg^=odcB~#g|aFFX5`@&y?)_r#T=vfbVsSJ2Vz#@C-PG=Jyc^ zMFjV@$`BA?y%>(~&q_{fjUS@I>_i$_YI{Um-CmEBYaS@Dr`O?4#Q9a7j*fMVtb~`j zHfU%TbJ0XuitDyJ-#rl}$5t`h7VC>gSqhQeMl!g0>GV|jt!ff`q zG{G(6browO9>Q#)h~D-^>NE3W%tIgROEse5a5<=p1-&jYb4%{stI&E8sEiygUC$A#sYACB)j$QSD6k z53q!^xUjv@p>g4y+m2MzoHd>jpd2~_*tto^rC{ULnZZh1$ z1GK_$a7pp^$iTjO4~Ny!vl>@`%9WQaM(Bm!?zZL_U*BE>6?^=QaG$7WNvS5SQAC1? z+L3iipu~l4oJ!Zn$g;~8U76(o;Mq^GIT^9k=^Iuyn>{z9!})G53l$a02bXV!J3u`b zS27XyEnPcjlF>*owR*OY36#Kj%^A#=M;o$vGWB^}l|RsOh7coP-1Gc*J9An}_7s zDOlHsI(jzh?PzEcHjN`0MM)^C(5xn+lsDVldB?|d|IjYX=xi=2fm#zxrh-vkS(lOJ z%J+`)xYRbaR)-+94VsZ-^{^!8f`5qM38S*2@7<)ej1p-K>CUd+Bvk(l(8^};+Bz12 zM@2mAik!<)hz!7J;$#qTbYnStte{DN*qUI2)#~EBwb`6sT^DF`ZK|x#9sJ<&@O(yk zLO{H}#4=-}$}1fSkUyQ?itOBQX1r09uIiQ@-qg0Ov(osAI`r5+9m zYrzZYGOtf9C=%Kn&S?=Ds`6MseHT3u`IfW}M^n*8;*oezU`$b2AK`+oj?&SujcEeO z66qW+`P)B;-|MbjFfyXc{yl3*cJ;VoOaX^6Ot-|B~>$bCm9P@uBbE>3b` zhMC(EqR8U}>0TW%d5oXP7oiAe_6o0CE|f0ap$u$!h=IWP()OE)UVi06jVY5iHzh@@ zME1zJmh;CjMDy@xP(2>cs@wa6?E}F;`$}VM?c!icIO{as;lvLy%S@F}Jx_3*#=sir z@qOw%9R27O-1=E$rx1?6NT%NvWi8AJiejlb|7erOWQeW+`1vOgTz0NBK`fW8mWGMC zJ`@Qa;orN`tv6nn@_og=R{Wy92h5gZ3zze=)iEPyP7bjW@DO)J+n@~M-0jv*nhB}g ztr?CxLT`Uk#O7)9RzaHN!0obReb_4`P{d_qGG7Ow?qayR^@&(&-cmJknP z+*|J)K^sr`Tey}iSTYz4-$tJY7H&&h0DciSvjb-*7q7Wwp=Y`bQ9XS@^K@eP!iG{7 zj&N>W(7k;Tb(ctYktOi244c_Jd{;n1IPgG>UDV(zR{Qyf$}ruj5^{YS4GqPrlj2C% z)BV|d|6vdk7R@&>{?_$eser@%8vcTM{W3AeYbkME^C<}&3fR%MezxU|ZXL80J~*}; zrT-n4#JdaoPs8jfSm+kIc#!YZd9^5Sa9l7d?Uiu-9JC;%S=Oq2BEmY;SRgejdWc8& zMIHJ(IWEl}MHTo)X)^{!vZ$M#!0O=Gb0f#08bkHy18m04KL@bzUN9Q+J7r{Q+pC`& z_d58Rs_gwKH7(XM>hj!be5pFrVXJ%RBChD=3dMbvWXslzMs&96B2r-Of%8Qj0%Rdm z;&30~;B~E|N|v3o=NGz1yh6; z2G<2SNTil)IsW(Q&hG#W?o{&3nWjlS0v`}0)#Czz&UG1}hnoB`?uFJ3F0=OES%5*D z{gk+^^RTdORa)yWg>}8Q0$0|6U7;@O*hs3jWRwv?boqz`y*BNsw&+P1+f(|I zPks8(PB*O8;aY3g<-@KxSwN?Zd+kJ0xS@?8P^ycYV5rq@!BL`DaZ{w97dh_$Ie;o1 z!HqQ2LkOH1h2|i6KLKkDo8}%PS7>T9$ZGn->TKgC2=&QA)mVut-ZU@m@la)zZ--i0mF>U<_|^DR zVvL%~h%BwQfW+2TMY?Xj~5dYyj??a}{F&6Sx=T@QMs==?7T0$>_(J9XzeNT-U@40WZ9Y z3zaa_+$P#RU~#JFmH2ijh3>@=^&;{Iegn&xOo8{UHUWMKyMTGjZUVrRcYy!8@aY*XU(c=}j#|9kJdHx#=r!1FF(pTUUMxIx@oz${x1}NB^zESC z>9K>Qu?eR>ki8z2^KeCrrZtMjH~^Ancfx_)E~V}|7Q+3zYXv*+PV(#IuEWfH#{9!C zX2gx!tYOATDfV|h?4tYAA2Zub!-r;4w1su8rKVxz7hd1Cs-61idhz;8qhR!_u-_n? zWVWAF070gd-Q_i~lE(X1h)&?Bo57OP{X2YT-cbkNKZd%#sQ1Yl%sD0PFEE_K!wNnh z4aCleQ-*(A2)xfm)I8Ep891Q1Fbg4p=wm5?Xb5_@fMe4v7O8=UabYe8;^Z}`ms{re^69M7lk>Wn;^dxy6c3+etJLVma;_Mz=7`9*Z_S8-D ztWk^;&ewr;#vMQ=2cKZ{Fl(4|WHT!7?`lqd0a#*dP0sjt#@Pq{{AnKWcEUFlDVcU(I*L*Z}~dhB`46KPQbfw&V~A{JcxtybPbns8^20KCfEH z?Sf5p9#fuI4#Gj%yS^u}G|t0yxQ10|Zrx>A-O4lq#4-C&IQGp?S9P!KSPVf3qR zg!~il8v*xbjr|WzfsO z^vITPfhntW!6@TMIu!fh+w}7m`Gw9-+>UGMHwdn4y0bioKJ3c7D(^VoG{T{y=~?@_ z?S^e*)N@_7ty=qjZ6Mqx@p_bX?MS(z>VUegOH4g9eeo#2+-Hx3-A~nx&DUwfsuYnK|DzlX~Z{7W;0Y+x%iACXxA4GWm6}D)$3vk~IA+S906| zrZptRc}XnCfW7AF1=J~ier`hhjNu2KNwTUuV?1y4+~XCE)}=6p{JIl#Gf~!KS0m*$ zt8157U$4b!slvUlr{i&QytuRi3Ar+3qZE`mSukI%JM25Cnpe3J6hnR>vKVHy;QiZfQsbJy*3 z^<~wk@Qb4*S@LaLC)P6b)^W1G1}Vtm(bTYGqv+6+psO9kVXJ5pd z_W12pkQNfsBvw2JNOW;w96e|Mwx4e|;KT>Y5-Hy+ZPlmI@0<0LJbfpp z?*H-j{}wUST#OxD?fz@xoQS)%-T$RGoED7Vf3m{{%~GX3Fr~pnfZa4Q0HR#}7U`f8 zvJgm7t`Mq?nAGhFi{BO&ysWs=jJ_MXzB=dny5-9Tb3Gv%LmfJ{jIxTl_V%{zp357e z^>eq=Qv}S9D>i}QguRI`J1_pH!5!;b54 z6ecqAG}`XW$nw~qq}j`{_T!%)it5T;+d7u>4LU$c?5w1^H4T4{m*C~4jo=Y{kEFTt zinsUaNqy7G$cuA~i#t;g2eONA10zX`GmOuTCSJ$#GLF`crh+V}$ExzwR+vU0-AVCx zO0`HM>TE2uR@k;%{Fy+Ptrtx3t|u+T`kPIwDs5?eDf=q&tp4UveMa&CFnG&POcQ_w z^HdJSA18|mPW9ZS@$@^3QJh89(?2>irCEO<-TnD8)8~eo${sXeflf@b2*W)=Y$#=igsQC#V0qo?HKnLC8`nRMoBb%k{PQ^ za20?XcdR(cy+T9+tX*1Uo+{|K0;2}hTqry6RbGs&uZ%9B*VN1%Wwep9j=_W`s?|Ax z@Un^mZphQQ{EPf9d8VKtO3T)hZ$Vy%)5!G4=>cEy3PFikk(_NAD-OZ|7=dIi6BQ4h z3WIT!jCgcD96M{~^hHE@S%(=qNFfWsH&rGBiOjBCVbM{u3mH9IX-vK~sYDqoOv0U% zO(=bzPjuE?wB9nuo_HNz+f;_CJZC+Q4}IYXhP*6?xM9deH3butz+-1wrAV8BYAAd) zWODNmzWAQlO0`e2Av;E47VGq&;(0#x>zR(V*D0D1^H8NG!&Y6seT6yiLYZ>Y1M;3l z?_`|g$|B1!!7Z|7^BG)a5!n>STf>gqwJr`+%yfit)q0~)A~t=c#j^s5V=D0rxiD(_$gpAXW}!V89a z000Adv|brhXPf3zFZY0Agjv3BK;z#-cCYQ&D3eGUV<&PSA09(3&jSFMZnIV8ot6c! za_3G-b#fj#EPsPOFcHOh1$%^@ zFQ##Z!F|g#WqZ$o>9}9O&7D9IdIG}4_J*T)law^W2BGSsZ5 zf9UQ@+zK~IB|Tm@e|c}@*OnO0m_?jdC=~3*&AvOM3UKyf6k2lqsXg{a@n9WT6JwnE zRRX3Lg{2&}!K_t18^r)iK(xP5BfJ>EVULARzB?ixN^?UprZQWaDot zzcP5!r|FqA@R3V`3-8>NNEb{wP2<~Qwm8$|n!UNj#E5}>b?|}u4%%8sqkVTlu~uCL=AN0>+GTxG#(Yq}xA^HX zp*hfBxVg6@_)xDUDZly$(|zF~z239({cdUkO27=3Wk^7E>>RZ!EU?m9|J5+O(jEjh zetAI;qP!}<3ZHhOu^mn>HHq-x!fi8JR%bKGC+A4s^9m9S-(p+H>!#dE(u}K_o|PBj z_C00%LF{@g+narr{SgQ>Jm=uZCxl5{)b*{13ma6HCrq6t?r~yO>+H}6jO^Yg{wNp` z#P-9Hhq^~|oKQTl-bgxGBP~d;fB5-{JL|HmFsHon*;5}LTnQA7o6qOXo|hkmY-ask zlRcYAsU`pOxh*RtOAK#5+%>B}Il?68(|p&SR7 zeH1XCz`>0L+;t zkk5=%&-qRZza+bd$a-}SjkUJnJ9GR4NFR5Of?oso-EEsCdY~>eyW%1OZIQ>2vtB2H z=5^>B+&}JnM2z$wKcTuEVtk~Me4ur^zc_)cCc&8XGMCVIqlxSJqT)gkt=^B-CRJ-R zm*)ewy!|sV){JBU0h{4$veCb*n)7T{KxX%h%hWAh3gCHq_- zEP&0q@1`)B2Hw~P4IZecSl#;xf9wsu)}MZWx7nKTr1Lewc=00VIU|RUqc_Q6yhC3e zG{C#JseT=$^p{}fu)Oo&p|osi{AAJc$CdU7d0lGLsE1Lo{k_jr$)*OY1CbslNyJyw zA;o5~d)q*shIw33geh%L2SUEodV{^IUa9`6$S{@iT%17}vxG#h{c3ivAk0|TsyZ}g z)EOPAhEW-~Kl(i4Ip$7V29$Mi&fz zx>>NE`?}&bg9bmGHL;^^xrnMV0DQQ>`?(um4hC8vAgI)4er%3F$@I99+hNmj~482l(I`czl9}mWq&a zsZBaeDLv*r+x2^aRs6vgFp5%MV!%|zV*AvvL&^#7!Z4cX<#pNd;WJU67`{XJ`~;qN zzZ^9I(ZA=~lQ*bbxRmpfXm%BEWcpZKuFf0t!4e#?S~bP_`d4TixodU9=5@jB8+?^9 zeHBiGwj^+HR#&7o1D36lnsFazwHfr_jCIRoWW$EKifV-+>z2!^Gqd{>;~48{t4*VR zoYAOa9V7Uwi(b_6msXz;?=RLEEuOO9|23^TwjSvi2>auQAm0BJQ%n7?#MJ*?UZG{} zrM8S6px7ZzfeKAb^s`1eRE{EeLIxm0of1wDvt)!!^=EoY-erHLAC%Ag)2_B-Wy1!u zSN27{7qdRB-Ujp9#J<-4dVq0b3G6|=QV03xu;ZMrC75+W zi4=V%aWp{4BSLf{5iW=}K)r#sI)@Ug#*QMgwX?PPC{Z=h_4X~Rqz%P0 z;%QGSNVb|(oZxh{GdpC#+BFZguN$?uw|6d)<YLtV~sq=AGy8N|}o-c2*@OSF8ja3tupVpuExib62_9nY4eVo#TluZPJr4bww zd*{1o=Qc7!3s5hv3v^bf_gGUWZ(2Y+(O0s>SZ??roZ~$21Ob~7uZ)TOFaPSr2s>Id zPrPlHP<;iBm-u4W{KauC`yiFEMzbs^H4$5K|4X>8By@zY}@SL%LoU%!$xWs}R* zn!b|IMBrK3Svi>1T@^qm$%?vK+TSGfpNk{6G8EyxSDALP7%@uKZ=9d?#FXkAxRt8! z@dWNZEpc_r`)G3esLRE|N4DcoIxMrnZsid)q=fKVLKUX=oCpx3Gf}m#oP#Xvk^@@Z z1Bg3do=z>`xn&q72Zz{MRU`^|_)#M{O2YMYDXOl)%9GV1hf>eoW|Gq_+}pC@JP8sn zGC8u=TyEOiStWbf7V*lCla4bFAsIc4oB~ihSTtVs(sSUuPRb6fL$75V9!&#LAcRY%5XrsP!N!pttUCU_WD17U4P!er!vX1rF2g~C%HA-A6^LbKw2abazaVlFA4u$`{9!QYGB;l2c~)1s_{LgKwe z`n3MJF=`p(upJw-23!uwfKrLYgcoJn-Cd=9VbJqtiDh)>(zz1Ta}PmI+oAMpIHqf6;7v=q!(XS?#-wOsfvV-3O#?@`li;Z)w3jc?hjvMx z<;j{5b|vMs)FD}2KaT}k&=8<-YLbT`n&cwGdc_foz1dkxCH6aMZ} zbN(HQ@tn_vWE&*z)a6kMChs>-#H%naX+E5 z6{*PlL#u{&F)&49A7pu_&3)_I_Tznny8*+U&VuBF~S=Cp8KL^!0zff%O@<%!{RYL_BX_-(*T83Em;5x$ZW%tz3b|PvsYtA{{a$>L$L+{nVUd0;J0@JuZf~*(x$rRxkH|Jw3k( zqHz-hjC6lFFFx((p8Y+*eZ}}I=A$>=WU^V7C%#@IzcJByU&c0lJ2$6#$T>p48g<4$ zF5;u+69u)4>ZLu)Y>+K2;jZ&gNAddth1VgxR#P4BU(ccPBJ}-?lK&FZ^o4Q%23EVB zBvK>8*diD^t4#s;u)bRP$+Lonryz0{NeTW6>UJ-@XIy<&tv18sQ-9{*f~>-z5LUi+ zJAWvl_r2(67V{P5BF*QNSs`{r;qWZY8INFLMMc}5R;;1VJz9Wxt5RS>o29a)!YT}5 zK1`<|EG*S7!^#by>tT z%Ga%8Zk*7d8zp^nx@*zMbEXOE0eTF_bo~WZv*ly_wnGJ}OmaY`W1Bsv#77LpkyD?W zP-6F2j~E(lR}LLIlL#g;Vfw@KF&^w9^UUdTXNLn_njQ z1&zjXp#m9V+u*@Jsjt&o-qfg3|Ls#=*~tytlH4hK`yXaf+BP3UmV@;~9o zRuq5M=7DKcbNyDOhhY{(FewkoDhykzBg#0Yjbew%f)F|3?KnSLOA524fYEg!*zQ#< ztrWaNUV*r{oH6EP3jRe|dCw{K&q3zUaRP0Md@U+8O@9hjQj{uwP;B-NEpV0ADLe%3 zh>{hy5HMvBla@g#`mFgU=KUgDBI7`Dai0j=pd;y`6xeAOFO~ z0GBEy5bl~XI<($v8apVEOk=Sp#NmPb zKXk*xfm9y(-(G1fDG?R-oFjVDnbY}*BS_bnH~00Htq2hY{=IH z{LC9`Bt%$RR@{5(1qeL!`NUkbv0fLKJTJh$C_jE!`{UpnaZLlhUK%_9QDJbD>N)rAKfls80|^5)KbXM2|0|ig@5I0D1M}mD3-v>%aEB=ib=ooE0ZF zB1X&)W6W=FOKa1T=`~AGMENCVe(J zQUXc}bNAZowv$>Ib-U|a2M+U|FZ=t0Q^MlN7auk!JE3Ct%+XvHy2--Uat_iSL<-^P z(_6}1Hr&xQ=7~Ii(cVL7bPlGO)bVTd)4$>{14v?Jr_0dX4An(A1_VvW5%>Ul4xHG^ z4wv7k*#|e{BqOFj`HMr0Q;sLPJSRafiYoVh_LL)jg@Hi}cDdhx zpPcx&@Z`g1tcR&Im&&D?yI0XaUpxl0#-hzerd1j@S?`r2WznrB#S{ARLf!I8u{Z!q z>Yw%PuR)e<)kT`U;UBJL{Dv?U;8OUl>x&hwZCVvSs=ihzv8~t&61zfrS(?U(MZzof zoLpkjrK@ZSBx*1#Mw)zxFWijMKAuP5Av$x$v3oAT!`M&2qk)vp4mP@B7rp}sz(84J#OguX zLnQ{gL>!yqu!lz=j=&Y{jnkJMafyVgBgEdBey^91^dYy9HMzyS!sm^zumazHk(L&GLHVI&PK3{DVoOx7^QYcm}OuHjm_4vY-}nUN6`(EUoCWp*P+Kj!p4Nj>mHGKzLm z@cD0;EF$v80~ayE=I#CB#7l+KMK>Y5fv0!+*{r_7*ezu^25*#@GG5ZM-=c;%X$P@s zx6(<%e)BqfvioKh-qdwlQK6$o**IOjPMgS}G0*=XJSp%a$P84;FVWEU48X#WO>`5A z1XQ_6w;^`MDYkYVpe9$oA$n}+jztQPBqJ2Q`L~W?JcnRL5k$1U3vv~a>lvA$6p6{p z10O&m5_{zJLv15$UB7m*WfVe$R||OTS80h?`^XC)Sm9x5aZ@QV>xHGQ`ccFYX{|A& zOjZ(zvy3K2#rXfe_JQ`};=~LT1f&b>pAK01KXkzV&)J%)8d?1BdwE@HZwhEa$Ridy zmW8T9A>$&&{ImPP2SnFl#otLoqC{~}nXFqpWVD>)%^fyQOjkUu( zIB1I{YfYw2N~UqiX}^=S^6cUSN@i{7*6!vkYC(=X@6RIeF+~g@fZ5$8bU?I#*%^^g zI*suM)`Cl%(we9eL)=j@v<}&o!h3&X+bXVoGqN|b_vWf+V_QnFj_#}V)Kurjwd*Hk zEVjpA(Pf;VVkr@BWLZ#2uT_L}#)cEqax1G+hCHyd5pn+Rrb z{)wI0>j(}DmI_lL!JTReH(ehsQ%}4Hs0N!8bDh-&Yn@5n@<4L_IdFiqQ+{1_%i^fT?zJbOa@~{C8>}_Mj5W=&F zsYstveO2K7jIlrPn~0hk2$2I8d_Hg=KKqq`<~Ia=nIK4eT-#_%T8?P1U9?Q^{TQf)dC@yoMPtobN@J!TJ;V0=*VDW^=jIXJIE2zgi-*bmE21|?IO%Eagf&r>!C)?F1mdoxTNY7^1T+duHUcV^*oL>ukLfk;i z0M+sKvVA&#OH~;`;wE#HXdUp^!H-;^PnDjyo630}w_`fM%dihk>@sS|erGa8^bF5t z_xODr{X4M!9ij;E1Fnk*-^j~%hJ!Ao zUvsmbPp@4t=A6{%r=;^YfNeaBOxt*(HPYszGz;M2yu#MZfsx=y5YE~&7YNocU(ycJn^^xb39g@2AF>L$fMV_0<-eNKorw0K^!wh61}yBdFNImRR0WX_O1p zrwItgWkp`z>@P0|piB0_2C6e` z)RdeQc*J9aSGYGDM1xIj;;!+T52E~;8iY%1o8m>v2ZPx>5y_YTTP2RMzUka)+0q}uk z;QHUqc5!K`ad+mUX*$>{qYB}+)~q=y`+aKWrxwqB(0L?Uk|m{Wx)axT{C%leogucT+w8)&_AKRNIgy3d;_868t4kSwe{S>sjY? zaeer5K`Zrl3oEsHs-ZWSMS=i+j8c5L78_oS1hdL_Nf{#EA~hvBo0<4}ygyij*(Qnd z&+l?3Qg2njd4p`S+>tU?BT{uC~Gwsr`nEKC~46X7Yb)4tTb&wGV)UfMmh` zw<`$q|1w<@X@Iwc|HW^J?XHD7NZKArUOq@Kv8kuIx`q5B1VUs}5Q226Y2N6m0g#!i zWnmGyy1f3jnAcLlSKa(}BZNRM!-O6k#?vmd)70w0j?r?f+0?;h6`k3tN>>bQ zPvVfP)hW~`NnUCri?``ya5$3Nz6?id2CP(rR)lb4iNOlOo@4t?%-VCB+@5mf%y|k6 z2jj|vrPLc?QwXu>s==|&V_0#wl8_h-J7&UXgn$Hlz@{0!{p2WrZE{KpM_dnEWjLpb zJ;_Q6b7IX;b%Y#PzAHd&VOHh20pOOJ)kId$$gS;DjqGxTJ&KuQAFFc=kb&J~P+2r? z@;-aMWyww|l5AUBPZQVC3+EK0wLfxYs6}T3vbR1W+giw%bX78pX}ubzY3nbQ-Ims; zZX|E^=W6Cxvd|l~F|LX@;+a*UvL!w&#iOw>+NR^H9Gh1|KiZ(=j90Ek+;wT(l?3!d z3Rd0z%thhzs|E%&OP9wRU5m+VEN<(iz;f@SIKSvfTLe9cYP2;OCbn(J@nXuX634$Y zaC$Ufbc3wpETokRi1F{*Vp|_AHdWK`imZhP_K(Sim$tFlk5}fwkG0!t{w%?1A{@2J z8kH#yYR3>ypOsNhQVDT4Vf@AIQB=0B{lSXDq3X@lD|w30Jd8a_5p+rgN@77`jLqQ{FmhJbiLBC7+P_ zPDsVz0V-BkZ8eahE(zLdycmvxr*9C8RX48#Y9`gS6}5p|UQ4KDHs_)sF6P>`7!KYR zT&TpvTo}Vd2I9P_Y9`mU;hs4gm{W*kPIcQI<69SC=vi!0;6XUBGzQ=G4RN^8lZZqO z-J!v;D7cW~^wak`hTcL|%+Qh^8%_^an%ZCXn_jeAhHHf_aTckplA~<7u1u_$2|n>W z?iTDb4pl9(F#6%>yAENV4&DTr;ftIQZs{k}>Z7uTFCm7joz3 zHnio?gEB|e__Iegpvh_H_nnj&Q*VBeVg4DOWM^|;vgGUuw3DLqqvGhvJJ11^udfL0 zw-S+`?;CeYFVdR_12i|(QT;yHyo)lHq=zkrPH3EoD;OK*exV3mJ_!07AYm&?RV`3x zGM?aU7*_TOStQA&PBBENv@!)DV;`Pq+q%&l`*Z*uh^Z!{Vm1Ql6S%ow3XL+MA+1V{ zqD|h;?vv|vW9PwfEVcg4As_yoTj6gvh+&o$#?{Kt9jdXpaI}XVk>_u}(lBaXI?73Y z_;aPtMCj%yU#<^2wxviAI?=t5&tQA0>=ixI?;;Nclsk5YWODi=5!~!;c`~T+Q9BK> zjszc>`hiA7^ZMXjV;vIeN{i!1#%XRgL+Y({qP-CghIiiV4@`Km;>3oS0QQ*q#QT_B zmtf?|NjHervPg9a`v&-RqvG3(r=Bb`!eZj-RH8z7)+?;0(z8>?Uo<_a=<`N4A7Fid zViJy&0heoRImvuWG4nCDMwNr&2T}cf^-Zs*UV_e>uzxt6Dlz3FH#bNM!?coVw$IPf ziqKB(%kby)j$tg5NSEPN<>(KS!A)Y&x7lXDG<;_PTQi}*h+HS%qhXb9^C=0T0D2pM ztfbUS-Wn|Oz~PVz{fcnJb+)|)*3xdQwez)fShdP@+>>o(^U9fXSd{xSlj`yW>zQ@U zW$5x+iMFFU33P{B__g8fcr*l9(4r*Y3}Dn^ z-XDy3&PNmOQ4A`B>e0&bZYr|BGfd_Z3JlCZ^7I(CrTp$yG-~=LS0S2DzFvDGSGar9 z(_iO@j@MJzC-)$2Oi9rj=xd&nO+wsXk*$CeRUJF73Ul@qDso+)wQPp+&ML&&{3pS7 zoRp1Y490CSk5U3@d=2cSG?lYF3X8r4;Ycb1aJ^Etl%w5tu9X*JX{m|OAZh`b(POak zYmLUV@vEg?L4%bwLF}*%oU=&evE9j#uOfx zCb)#htpk?FHK;95;uK^^edF`0j>e~m^a=fHU&P`aoqGy(kz3GrBZ2D;{V94bj+Av> z(~3>`$#l{GcmqSe`q8wEd}=%)C8~{8-vfqZJYd4zJ!AIS~A0AG| zOTSkgQny}d6Q18qwHRnZLp}yW{mK+7go7xa7zhdOK_s*EA z=QJaX7f}hR^5R}m_?y_MXv$!ij4`J6-tnY4r}J^n*(7$tRhrq_$K9p~-@|Nljhc14 z^W)}k2kXa6KSV|_mRRuyObdhV55Ko(y=RVqcefLQ??S!=I4z798Ysq86e6Rje6rhVCK3Zn{ZZK{A6MLoB8 z1I=F#QGuQ){^tUf3922$R_44b=-Bz0d#1J~pLyHU(2C4aIE&)Q{U%Bmz0-`+_2EQ^ zQ<>Osv&M@Iz{11&TRC=Uk!sCHU=bBY)Ph}2uALvihrLD1LBXJk`F>e!Asg5EBIGPH zP7YI(y4R7Y&P_Mb>1QnwX}e%b(_*Hf&r#6l@cTS=OT>iL$YThN3JbK#hb8;L(!FR= zp3h_2Zj+;}QjhcD4JIoyD^Olqfm?n)iBXwqWZA+~{1mNL6Qi^+vv58GZTP()d$M#i z2Ef*Ef4h`IkpGJmpddC*gcnx;$vxm9Mkc;Dx(acR;am#1Xo2asv?!-DJuZ|3`H5qx zx7F3v1u)M$ys*7o1wO8GI?(bD*LIdk?TZQ+%jN8{h#gJI=G8{%gbEnke2B#B|IRcN*5m0>cwU6c*t zXw&K_Of3wR*QaEsEdmZ@bQ*V7;-M`8O;$Uua^qTA5-qd09nc!>AEJp+;&m5SlVj+3|6GuuMA@JrBu+RH*Z~ znkw4#d3Z>RX!GS!gS0ZmJT4_J+){*%RvAgCKs#ncD>x*D}zr=z3&bVRG#kO;;duAE?~!&70rJBuL-3_evqO)XIg z0Re#vmZ(b(dgNyX_Fi5py~!%32f#k}pq6T-&wT15Ta^V&*mGWXee=4u>LZG|Pfz|8 zHeI;RdH!Jdol*gMP5c=YnV&~sHkAX*h%EEMgt-A>34_} z(aiROmZR;~Sz&>1s_ivr?Aq7Fyi1GozVP@Q=$$iXI$=pSOr;6qSTH~#4Ed9SYCR#X z=-^Y;3~Lk-tX#x;ykeqKz+!A(FQtGn{20`_{lV(09$tQXXtIQ`oJXM?8@}}#J~4Wk z{r9v?@&<{in^jdj?8@O8bhd$-Dbw>!QqZ*O= zL~^cF(;SV&LVT;aER3v1VHc~BR=ew;{C=!>g_7&(^Y@NO|l_-<$h~W46|_s zPdn080rnJJ>*EaEd^H(Xe}imI3s;g0+mvs(D?!x_s{?aVF%9C(8^HFhp{F65zS;R# zLSz2XA*Tuj0@8ueXgS*2FPJB`CQk)sGv(iAzXo5C zEqqTO)&$0HH_f1Fe=?cS@@~4!@SVI}{c%F-^!~Ub1X-Cge_1;c-e79=+xV@OSdi(b zbDq(E;jFPiXXUrE(af{C!rp&C*XTnrPg~8E_xKVi+%muchVs(c;2FQy`ju+zO{h?u^QyH?dKNkhps1G0Xp5qq*!1sn zG#xpXKM^V^#)WELS5^K|osNU8+n-KNzt23dfE2@v`Mzs4vrF48ZGvdPLOLko(|a?q z2Q|!p9}yOME0oCGB;cHh?F=o4I-rz)?HtgnllRPd%A)GhAkxqPG{DGuxQ%np8h+~z zfTP*mIyW8kXB+?0ZtDIirVRm z@WrC1VNYMxvp&(tzTtyOTiX@mdS2A>s@h}$>y}2b?EQv z_ztAiR><)qb94nt>J~N42>GKHRPMV>8V9>STM5Y6a2t5Wg;p^*9yzQ}?L$|P5bh$C zzo2nQwR1L!B1RJ_TH^D4vvmzLg?ZGFQS`Y6sNeFX_KX7 zF}%b3A?@(NUyk_pg!_ufvh7FLC!}ibEEo(DsWbIUAHy>^ng|pe@(88`W7^%RrlFUd z!#IthnxRt1&3WTdoW8;G%T=PkS>+Vo8<{q?;nzxy=jfhn|J@fPtGnkc1P1|WgZn4d zQ2nn_jepPzwH=oYQRGj0C)x?O3M$qV<${txZudyrKNe0nl6b=K_DO}g-Hal?D6uqZ zXuYP(CVLrgdcnUCZxW_&dT%BPhw3TdIXKm`rJ_C@J$yQLu39@fKtq6mn*wAz zUgoo&0cX-R)x_Z_TF+uFG4Z!I6fks;NEZA(Jt#myh=?U=uia(2#c1A zf|3opV6h8(H;t3eeP}SHbM1;)&~j#>k~3Ury7ZnbU9(;W9HOmSih-Yu*fzO?mFn3n z8&7%&`fX?ZB3x zcmL!T3fP4m^5AVisZ@-5+6NEI|I)x((D5KXS{&j|azz$WIVwK=B|@ghgjYz4aabyU z*#WS4(%rk{uU5O@HoKlz&3~-avpR9axXx?~vH|SmCU_FR+&1P7kagw{;qeH;kt*54*I+d6nDjKG3oB$E1-F)c$~LO7 z9Uq|fo4Ujg@iiSx4a30*Gk^ZfhI?i{i!RN7pg*>(?UN?gyrIy{6#N|oO<7CH`=yJCR3xc~r9kk+OOCor7(ft<8^$`6GsKK}HjcRjoE7nA zjv+A;@f*I-2Rc_i;aN}n-XdfO4(cL*jx2!ONeu)}x*3f)@JyJb$-ZMEwDr8QzVbl@3M~3b4}} zm#o%Pt8G|myj=QvlpfZq8u|=hf7|+-ih}NWLPsUBt{Yt3ccxBCchN39+Pc-+dQt(! zu%jDoJBHK=vwIq^FbVub31nm7CwyMOR6OT^xJ6#hw|Kt|*g;}Iql+e znr^@9#R1Lku6(67Saiqj{)s_B>09>6#t^>`hybIs#l&3yaWnHFhvIH<-DKj@&lsP`)gw|Tr7PtX$m|64E zxog}Y7(pI3KJDWak;GqT3)`C3cgrS(;ya!E)o!}lxl3X$nYZ*U%u}pfq^>Dly8x@N zKFgNsXNnH<{Q{ke976(S__(m$co4d73CEN8o=%Ii6pR;ZDyNuD_aN)b%N)TIAl?k^Kr-vTWT zK&%qo4T6&I2$-13qqM9swPBPIgh!;D#EMgXr3(6pLV{07M&Ldh?L6?Z2(kbI)ke}d z3)LGQp4GbWX7YlGpc4tx@{gn716x9Eav1J>R(1Gy2+L=yEZNyrnGZ20%Sn3{%aD)aS{Io5$hGWCwHv3@sn9No=Xu+$4AXpIl;#A|=H)zIYMN&G9G z`gWzpbhWjo>sU3i0330lbwquP&spBLTsubq4f4bloY?($Nm`p(;Pf!I^(^-M+cKaL z&1IkT7!rI^Z#qjgef292@al z2XbuIYXrl56rW81K;hRw^B!pFvyCK_Uziq+A37EK62$0BcwKI8*?FC9QAdt9_XEV( zTP4$)lF8ItnE$?Th%E{J$-p;&3*!?|? zp$#2cqWxa{!sEG7m}y&FhHpd7yM@jn`*^;Bov9AGi*C=M64RV>;feN&cfY&lDbe}r zYy2iP4Ei-}%k7Wjuo+>9mCvZ3{J-J1hu&VRs%%ip83Mx%U4uEz%3?ck)Ms0eoL*(! zqJSS(QSFwhv_ZUMq$$6YEtlav=#NdEwByZsUD6tad;>)RV@4{ zT2>PO0Nc-Qg@40u+@vx`f}QzFg~Y$`TkmiD=H{aO7k)SM`93=Tjo%8A{2c#=-^{t! zD%5hx#Y812%F~R>#2wPE9Fi5M<4x3*dN8UhRH!Fochr(~xSFo|l2C%xU;@SFbafpVh``cWb(zah zI=<#-GrQ)eq8hOs4wlTxtLckj)AUbJ7vG)Eo$HV7x9zv?sXr4GGa#1chMH(77zSmt zL^6Snf<3peOk-H+=!G&dFW%O^OkC?EkYa1C!uZ?YTx%9~CKq4GmmFtE3t9Rd0So!IMkda(i9{Rp^Om>kWW-k$h8oG_J{#u@w&n$U1S`$?!u za4~=xRnp`d{R0djTD-UldV!Rh$?MuXw2SAOyr(@qfQ3q|$4@nnwng-+9zEV- z=~#jc8#ee7lV<5E;V~Jg97c6k#?6>kD4DIm!6bx90tX5p8%IyAEVKaE(rA&o#dg8A z2a20#Kpd80N~1_=P0k+S7uFDQaaYCed0)@^;1ZB} za3g8VR#q4-W}&A(AJUYBi2&4W(>4A?a+-*!S%=$CVEe7>54WaEgHDA9kIfitP*;p0 z5j``)sGhxQuU_<>Qzgb`m!VI0QJHS1KY;-v7$D>@u^Xko(Vz#Ql;cvgi%!p(&a^j{ z1XQ`1H_<*tIP2n33cA>K$>_tlHGkr0Gs4dvhM>V?3opZq=cc;_>XwffQ-pp%MZy0X z+m#}l{^s4PpJ-|KXg_7tMxNnoiNQU@E`)hl%SosN-Ht(Z7)|q&GQ_Xu_fQ}Pz-vyP zKv4$Lwwpvx!&nVgKX`?CvS~6jMZ>-+1=BbYckm=D#e9W0geM5BnYT~{hEmBZ9sInU zI2_u5k=F`JdO;z3lAH1;`kD35H^+h649-p=1m=&{MrDa~*h0ms;)vp1?W8cB5Pj<=8x64JSmdcVN>S(gTS(EFIZrCv;F3Q9q`bgoHbMnNy zaSZkQpMLru@9W%Q$1!T03;GkGK=->E1iMHYmNv`QY~?*$ouK?DqhICyJTA}{xG}s` zmM+e_JYvwYD0eFylVyz}e&T8DJ_|ff>1YnUxR;_Dbc)`y>}GZ`WzEPq5Op;+4{vr0 zBnY0?-WPq@Uf!Lddrzz~1>9vey~<8;=e--UQ5?&xtc<#s%}%jCm;F39@)X-~UGx{? zNINQ>(c_}zBc4X^ci>faX)7~z&nLtacE1tBC+xPyG}>Cz#$6ntw?`PMkr77LZ9Wj_ zeZNn<`uj3EfzI~&X%hsD)^-BCjnmI6n*b)VnYH5mITy|JzOpil@g0tm@D~(+v>2(O z2hI6hyJINAFnqc5J9&$4rY6cRG<<@=kurWe*_qf4FlzXKn;n(iVp9+dS}f#>;yxsw zp5(R>B4viyXXrQ>ST!LnsAVziq7W2HVD~rqbtaMNP7~$%8OsQ9H!Da7UkEY?IF(De z_Uor^=D2z0HjhkPW_e^j;XL6~`13es{Wd2rQsppX!n;J#J6(}?G$^br%$GQ5s^UE_ z^k_1}EhC(0UYmeMtY(iEnn2P97>pdekA6akG(4HPM6~a+-`6^5v7)0wv-fGmFY()y zhhn>q>A{R>%{lGrkiD?)9IykD=|wV|O94EcEf&#uFx@+tmtSRng7#F5%j?x0os1pSglJ`#x%F6qr8SL%i?xi;F& zu&yF7TTign5w1PVWUAE4kJSx|A(yG$#2`v^j(fluqM^=|*M$jc&JaB!?w|@uNbh!V zet;4!l8>SWEE}Yeb#G$e0v&C7@M_RZ1D9hdRS0V|ckq>p>sQH#$g&pjB1JI*Pe5a1 z?bSkhVV_RQZ$zhHG`R{BMqGr}ugb3&+Gb9xfc&-r2N zHEZenEptBRirb=o%B}44%C26Pg3g|x zR)3Z;&(}*Mh?lexxS1y1J623eyAj~L+G2Di%(2Gl#zWzA32Go@7EowB8!IuS*-DF> zivg$b*hgbED@l;zykZ;7Nm%cpIa%k;1e`R*om~)}w%*2nqqRjYa7NMz655l%$`?iN zTuG`0#}1huGdWeVa;l+kvNi+jxjr zq*0j$~Vt_l$Ab0w6pOShooo<+oHZ*Uk-IZGkK--VrJb$A$0Der$!^B z{#oT0Icg=Zl+87exSCBIIi)7N7z$U>(}%|DSQ9mh5i$ZG?*4#99|oeotV#gj-k>S* z6shojroN+9yy!^X=`<4kAsV=a7#lku7)y#~Poj9UN#l*}kpLVbV}N`baizaAZT4iM zaR$!dj|_CZ7+2o&C=HvUWjY7Tdcpnc_ZMF#U(}CF;eX zw4E-PSyy8^UgoG>#>*+gWbPHKWx$>iFj={rr>s&WU?;$xodpYBLAaH^<-aH}=>Ndh z;qRL9I){?&?@BKxz@1(}n7hD+Q=XX1EfC+Wvzz)8X{Wy60eSPn2#qXWXe?Qokq?S2 z-cM(r8G-L@x;yIP{Ko~4)Y^)~n#b$7IbkkMl8@k{U_p;b;qQY*@Vxpn(6Sr84FX5F z9kx^6Oxe94I>;*B4ng$1pCvcJtmxeiik{So{bE08bq-hh_}^E9h8I!{W>yb1oQ2p= z()EPgIqnTw&dACdRLhhG-;|wI`dz52)#;;MS7l%wI)k0Uva>&7{jJSj&uBBYO{TcL zo|*9$W_C}!bx~!%oIOkFFax2`2IOgw(oFk;qhC@}&vs1v9=zU{#~-dGEZ1wYK7&)w zEE)~l2?Kt@o#i*;&HKL(jR!Ys&3;6ol$dpQe@{XM)$-nvbu$*pBfdl_c_iV zd(w7c%ds_NK=HY1*UiE!^XE4FaYLsUIcKnYa9~?Dtnq&KhG~+UyXuzqV5n-$t^3>B zhQ+rYpZkle3F!Wt+1l34%Jl!%+Sak8ED@9ece_BYm*9df9(ex5gX`Y zXx)vLP4)`(_JH#iv+y!@GCc$eL>eimZ|!Q@kyAYlTwY%KckEnwe_Z76_(Rvn$%V-& zNSdTyL&WjboAm99jGQ`+z4fy^$(jIPeB>1%#3{V}d*3!1%qtGUmpN6M!V;;J5ux7xBf=SJ7bPK3E|qeV`@81`ppHjI3VL=ST%gOmGgBrDf_!V)aS_ z1)y=F(7k$$t;wb6Ph+SuM$9)Pi{{$&O^nwnB^#>e@92Cq-;x&0(T+-)`qQ1DBgBKO z8x`!c?nm}?{#N%b?!2wWKickS2Mf+vkXjW{?Wi)!T8KW#*rF@ zO3tE1jLe~gh1n2>hoRkH9xipK0cS(B%4)h|^xkEfk73Rta%yMLYG*i0y2?iLaM^Ez z)n8vY*zuNE2)GVdc&~3oUx0~1dk?b{f^rlPDJ6JTEruH z2}odHa(BAA>R8P#OLJ=6HWIDaM<3>x>%B3)s2<1Vtwg;bGR|7(9g!zjBCb2vXtEX) z)WIu?6$1CPEQ+;AkWnGaeqbC&suJQA4_*3A)zJV!MUjP>XcM)eH)O5gE%rCIVr`RyKcq~X!nc#erxha+|{ zh3A_B`^IH!T+m#@oa%Y5Dm9Dv?VK}1E;eCegNU@YOeFlKe!c2eIjQOZqn%oP6=`X% zv63F8GcmmEX_!5sQ5$!Cref{upp$ln)5TAd6P$;6SrHf7Xk2&WdD_(IO-$ZWyp0A= zdmk@jk+vhK6YS5A?x@Z6C%NrzcLbhlt=^O(=8L(kp`u>h)dVx`k&U*99B_bMG&ck0 zv{};FE$x6G-6M`vS<){UL?V=aAplEfz1V?wki)VH)Cq|vdIcl5P$pd$BoTTHBX2vG zJKQL#&+jG{c&s*amCbmTi~?K{H-h@X^ur)#I6V@P8iZiJ9vgE5Pua_7D=9ww}~k7xMVy< zdPz*JQSQ7b2q~E)?KeE&%eu)tn>W|yTXrMemgcw@KCe&1WNV9-+1lsD?(mjWvu4hM zo%}IxXncqhDj}K6F*f&-^Djy1EFS-jU^^K(h=q)^k~oJnBLiGvNDE?57^Lt~@M-3k z%X{xoBlGNjb~YYW1M!v=u@F+8>=JA!_U!LKbC1_)Apgf_nuZdq{$~$m_|n5i#wcw* zanJlDvzSneoU>K3`?1Y!Bg<6cGu87L5hv8jI8AVo#z*G(EUl8*QJ45w%3SkAeC?@q z%A|S&okVeSxt(|}Ts&NJaDg%3a*?U+qy>SPsT6wRJ#jHbJ7YLJL8v~dF{ElfFn^Nnt&4xxy*QeuPR1S^UP!w-5_pP(0tQ z?+0m6x}ncngI4LDN5nmgDcSa-achj#9h5!_rQ@PlCob##nfqgTdvZ(80iA(=-p~|g zWyof+gSNZB2F}3e-cz^XaOE}1taZfETn2hageMfsEAlQ`f)s`ua;NUi%A7M(o|%_@ zHp^t8F~_WFT@zJum-@>v(?`cCIh(f%Q$N>5um1mw=c zignfu@hw5cB`A$-oZ`2xlDoUUg(lh{#1?jWO)6B+H+-As468|hp)wJxJ5?o#Up80) zAhBOZT{+>02F%kUPu6njETt(_9W@qBD_=&M*vr99amfw1l$u!iN@JDtjmR#Pf|aFJomdKR zPSHF`H5$J?C%d>ScSsdQxufF0uuS&;Dw)bcgqU zg}#VK(i6Gsbu-uw*y>HBaM&~H?eN^UBfdMJ{*dc`HrPMW*i~VyG?Ya- zjnYKmsChlKMclu!PeMGjBhnQ{uRFk*+E?4o7)kz)hp>M@nhzYhg`F3T3Acoik#6QORXU)@euG6N{b?N1~(EuRu9hobn}Cc*$QxPWA4 zi^^HH%!Sz-HYy_=NSr^Xq5|E44yf`1u{~lWJ&QjStQk%XD&_*ZO6U5s#Bu!K=D8?! z+HvG&L7g}`o1zHo_ANAy5?l51Au8Nzh70C$b_Qmwdd7DnJ1U z^8%xgwuY;!Ues7#ZBVrp6a32y0U_qb;f z-Yc+Am4mxMJB2<0Tm6WK-`EAk;c9uEpP}6Ey__}7J4y!e1HgT zS#evq=)-DL;_Y&y;5ijtKQ5MWJjCmpRbJpM`JVSn_t0RrhYsIO` zFxKsQ+vn+Dd&)Ll;y*v~>$;&F!2&EiM-T0trSzKIYRdm47i-Tado8KKZ_27GkNpqU z-Z{vZcIgsr+qP{RyKURHZS2OcciXmYbGL2V-fg?@dC&c3?u|3?y>aHu{P|Q>tcq9} znH8C}GBd$W?SZc~G11vapFZne1C0qVdHPXbE@Lewhf|>?InAKIpOJ~1i83m-b(m4j z&@MHlh;Kp6pN5Z@ojVhKgmndjsyN$U=aAS?C=59uD}v#np)owsL9C~Ub&NB>XV%ft z$@5!#pM6sl`xqB|IYn)O-g%)~$lfLkqOj`3hRK6PmJ{H$el&zL>JFg93C823vm+1L z-hxjgnzLbgW^rA#fEwtllf8T@NmtECa3>V8{Y>AB`O!(;7+grhwgMiS-yNd@_}oiE z67H5DZn0Q6i*oRB*Tidk7mg`JQgsYiVkMrs>3y?WnTlxcPh8m4Yq^UpGvD5oe@-&1 zPLhG?z`okjR_zOhLsrP4DC{WjG=bAVQQ7!ag;|!^#H8acW5$W8>C6IpraE1zV5Y&D zkYQ$Rwn1^1h^k(1>ZqZ|_F}q5zrnZSlCziFs`YAV;7E-(ir`c1Xxn)l4FR$Qp12!= zi7b;bG;4kzbk+8BuGJ%ry)SsSdCP>2fznsEw%51OZ;8h*Ia~+&2}gg`aK)6hi7>DS z>2V3cy^RG&Z2DEJ$OcA;0)`$S} zw7u7=nHAY`Ta1r-Fb5`I=%sj<5-x0c$8Xbhyg0$ElTT1*zlCO!%T4QGo&X$H_18H% zb>4AJ@1c}q&oh2BT)=a8d?lHT6- z9r%`BN&3P3kpe9Zc_MLhg(RLCrpt!1z*gUk+H~r8e=j$o4q(i&75dY=D+#c*>)2%MQO3Orv9-1gF**%END_@Ypzor`^9}2$ zgQitLZ}N)(vlt%|v!98i_>qMtqY`~zQ5|U!;AC)F@G(WqS>WQ`r`k=?FhKj`L{*2} zr5rI2U^uPToNU#67&)SlNzrOXeA0xU**M-ZOzBp?!fda_kS*VQxHs#+0q3!4#Zcv< zeMLFo@#90Rm+H9Na@gm=6`cM7Slj0vfw2AOVkw)$@cRS3F8G!<%$76ZY}HDl2u?6c zDSB8uF+P*sxskW$p_yN1=aSRtk0?gU|e~%+G;by}0vX7QGYskh(=sey3`^v>?&!(M>V_g)XM2^kHrym=2N8KpYGCdCto37#^9whHw{?TbryXsoDabe8d8bqUA^Lq z@CR?s$V{=tNTn=Z=?vqqa0Iej8QC}mn=hX`!OC$&)guEUubFS=vu_0J;bJ4#2;YF* zl0fJV_bt&sL)+UuxG$IRA6MG!Kai#T#c*0@600(rU>Wxin*y569r8M!-z(k>YRdzl zPr0aRkmz9^57;6wNxS`4ZcDwJEsECLvLt+)HEh&FSO_!H&Mb#=Z#xkEY)KzFSBmf- zXLFX2yY_t0`ZDK9fwAoh%w|FI4^ZFy;R-_7_Yf|Ivzy#83s?fK?ZXqqw||u*{tm`VK&tQj~~XA4`7`PyQGV^&CU+GTtW&fq1r`lhd4+cuq}g;bNn zIe{)?>Q|g~Fbdye7yh_j12H`N8FlTnweK!vu;EVuS57<_=Y<{zxMF02<1lkn_{j=K z-PB+OJ8&dcj*C&N-dZv;Oc7?YKlu;>Kmb%mqp^!(k&LXvamF67T=H9JoYD$kafOC$ zGH4d?$m+UxM*w8tRx&HCPmQ4<-^jRfsyq{nSXP8%g4$9ojixv=P1-IZ610-9z61$S zxe0d?ONw!0>^y5|ZObk2lDW#~lOKytU>fvnl-vYXgvC#;5=R&!r^yahm3=8WpJ;>f zf7jS~dq*@4+?Uvmzr($Uf1~+T#&Z7!87Nfmx4xVxDU3+@#MzdPjVZOjPC%yB(F4 zk7>3}`gP+Vg>pIK#G(LzGQ=YgV+fzC=vUW9^VMeXiN9)yCBRA!%8Ek(k*Z}cIkL6# zW2?4y(nGB7V>OAFOpUyiyt$3=ORi{4vnDY}9AIs^q!h5ux1SLS*ILEbObqi0EfBfO zEN~5Ta8@3*#2r!?#ow38{KonokJ zrl-=qg5jgUp!}mb`if}K?aKL0_e>|xMXSYb&s^0A#yk2De}-Lj`C$q3Z18j@NCTwP z`W*;9&0Vok>=y;19B~1T3hS@s9*TDO?g#P2Ux!H5j|VvX+}(cHIw1Vz22T9!&Vioi z)4&ia9*9gIjkVo!&-%J~?{@RDd8ksl;t@>ZhO^c*bt7_{Aih$2tOm+(>%LM(VTwfD z-c2hqKER!=M5kWVA!)zCl_ATwDB1$eQ=q6M>f=?MXMhw^$MjIqT!_lK3TNuXC4@Qi=8YdeY@B6oI7ubGIbk znHu2YS?u{FS79xK9WfD(o}b{M)wyqo5$d7Q0`J&uG2Hhp7HiaCokq-Z)~p;c-ujs# z!w0DciMuzh*B(W)t}cwB6@;tx{a!D>J;KkP3^>&p@6*uN^LIC-aO!;usN%=H({QD8 z#@2*qBC~Oyg86zVC8#4i;a0sTDW@G*D0DT-@*<3>*WB1d86#m7k@6b8)kUi$t7PC; z`zi*fu!l&rkIrB+G*Pxwx+s1t4I*G5pakn+<~3i6Aq@1IYbVP8Q48xa_K6Yh_9^GiE( zgmX(v?lXs2K}Z>9nawP$YmLtr-M{@NY6G@>fDFM5n4&cMqs_h6nIE#Q@C(El9K=~S zk6ijAVyM@#-`wOi5BeuzOIyEP=a^Xg<5l6K^8J1q94IB~xXi(xf#-MP;9#}XlKO}` zv%vAi=)+IJ>9|QaYUrZ4i1)ckr{d?7(gHlG%A=?{0N8T#dL&s%(#`;K*D#B%GW$DW zBMyQ{{OiY<;M<>~K=hVomX*%oMmrq|!MC1b&W=As0(Gl~%8Xcp1427%I8AVJ%2Fbh z60|Ra0n^$kNQHo!3eE%5v9DxH>}7TzB~i*yUI&Ze_GD(Ud`_#4$e}I(J{&)8qxI_0 ztnRUer6w9VAp1|h|A%IkVBc(fi(Tse@V$wcj0gM%jp7p@4mUt0HV&{Hdu06pAQ=cZ zLa}F$u9}tUpvLk}?8uHhz5qWH7UF{7jLy`hDe>TEK(QiVp&P(AKSfyL5abgP0Q9p0 zUyKL|;vmE1K`ONLhd~XbphrsJg{2m);UK&^Y2ID-sU$Ft*FEpR&(A7QpzG$OFyKLj z{&6A+G{L$d1snihh}14(SXjEAzz2D1Xv^j+MhQTJ7QqV~bM$@T3rt8??bt!>2{= z!RghCYTkpJRy(6$qa>@zbj;cFEz6Ny#I9+S9CwsM$$JbEZPvkjfRkIqm{OkdO#y*% zrq_$PfykmXJ8m_}_))Iv0K}U1q!OWrz_BMLea`MjGUjpyS8CtasOw=@TC_*gytWDR zbFcNB$#ymZMa`Cag}JI-l)mpwS)Xs)OzUX4VXwKhaFb01KnwcDqJMip-i2d3OlOv% z(u9Q}{4H{{l=+5thLCZ=qoyp6&ClydLQs0{Wf5GXuF$Yt{JSODG~>r|EYY#`6y%Wl z8BjlUYY&D90ksxZhwxrSI@8|V*^yXUgSiWv?(()xoja3o{H!tgXVfsJ6rkjwY3bEW4bF0e2@~S z#pziLS(HDj%&8dDuGsZ4Mb$1Y02REmRta0i(i^cW$8p%bxD&m~SE_dYZ8_@HKaq)i z*PjTonkkOr#l%5}K^F8|O|Ys#N1SK1V&e=v9ayYMB@2kWqOTcb+9jfW_^q%EQ$Gmd zalH?8n)W$(>O=I}f}fYNy&)-`q^)+UFAQG-r{x|TB#=?D zNJ5qC$H;3nXc)7ZxoUFZ&c?2Yi`gqgsR5_`ZGOZv}tbT{tZ`LZWsVJ=l8|jiI z6V7x0@JV;h2kBoxjK)^Km^nxY6HeeuP;h&Sw|>Qs+7y8}T>Cgezy6Fk0dCoSr+Lgq zf6SKb)4b&>{)BuoCd?F9ZIE zRC{Ch9n~NHRS-(eN-E6zR03q5GU9B8>z6^2m=9Euy`?9p19h7)`i8J(?}plJQu{U; z!^}E(`<{t5Y14a>`m8B}vhXEQsF1Cd{gArtfcv^f0`ZpUx9D0KGFvW9TEqC?2Eg@p~tU=yG~mTp+?Q3xhcb|#79E1EOab!;w;o11+ix6n7@0%6_zy49On zmMXRcFReXNNp{+=_Ae1G(T^!JZRp=XJWHlLamx@>hcXF`SAAs6o8!au29-?fOny|Wko%&WSz)Lv+5 z3H`C5nKvET!KuHvwXn~6Hd1mHf$iOvduHM8=5WXE@oZ~vec#OH_Rhl#^?I32&)<`h zqi&$nnq^tfJ;y-5Y*XgVb*?tBCn+0!hHURK7%bGxS;ky>X2aXTX}7g{_UH6!t^tHXOelLN(EQ+de5dv>D+fho7=A!oSd_IR$Yn?4b^476iq zwjjQ3Z>8%?k}FS#y|0sQugX9Tl~&M7(d<|st4Y$B3T z`3EOzxG65keYv$oBlcFKUP0NzxDXY;Esl6HyOGt|ZBLgjdA#FST@UGg_@D{sZ5m}B zZVoVMg9PG@HRFm2FMoY@hJ_VK7+l;@c(jf^Jk<%X%n{Uf>uMgp&MMJxuSI?|Izzp! zW$KWd$e&*!vU#H66|N+D!}Tp~m#t0_#8utvOOUnl>{)ry9#{>%^bNRhR0jMB zG<3VF>}W*1SnxaV>QFnOAJ^#I7ZX;cQO(JWu$h+uCd0cwL=j!s;E<;ck%v20V@xh0 z*n+E@D1v#Ey)%ks2-E=W)pp*hSHfVR$}JO~4hy-|hBXlcdbl{h;4`L;GGU!A#zf#! zQEQCbinSF7Z!D$y3J8{F`GBiqLt*KjUsg3NiTy9uJc`4z+a=(^_<}DY_{@vqAgn-K zcamjP(mdU5f(iI-k+mzd2_nE!t|P?zCoT=s&7*X3gZ$`ND$7LRZxNAy2VWZC3o9XjPh!~muO25 z7*o!*bt&23{rlUoWod$e(RU%9rq+>}$iJ4s)jBuKA+{!J_w?fH8mU7ep zc_4RTQ%vPW)o|J9b8dAKdSC|K*s0rGfCPZ3&NxLXYqY%xCjVv)+@4H7@WV@t3}6a`0*CFQXbMB-){Yz>$rC6gdxpn$be7mI-2Nhm-0atJiTrU^rZR%#m z%t@Ggz{)w6MC0JiiSK#B@;5%h!L3G{PUBm#j0GFcs)7|9Xq?v*UpAc& zhnO699wJK&MNv%{Ifcr35c?oOWZX>+Y4|oT3NmPfP1I8B4c*zV;QN61?P8RkywEeq z5Yi~eKI%1kAeD1XsQ$lbn!h8VVH6{{fq_TsRU?EaCSTov|CGLI`uzB!Q{ z03MLs_vw&@Frm4&GJ^QPk5l^t<^z%15$ju4CWU;tgH1l?>vFKN;a5hY5y$j3?2Wg1 ztAp7O(Pmc;{%A!%E`N{cxK`w^wgUkzjg}R9o+bG9Nt4vqvpI;#I`y7_RddQ^9 zR!riiA%E09J8^YI$zX`7!X5__qA5+8su=ubSnD7xagOe`fTrm-3=)rp-g-7_+A^wNbb>Qr{Y=&+V1ja_VG=-^n*Vh&5ZoE_HPGHo7HE%BB9ki4~FfAM`tjTLjMnYXdIg}DCEamx!rch*R1?H?b z$bvDHkfZ!ODLDkEt)Q{iRgIG7er0*`*9CGLQ*KQXVnRPiT0SXIraABwJGwY4;gTd~ z>@%{=A0?=kQh&T!+_H}W3)UvN-8e3QshBK8AFQGGAR=HLgH;(rHA=L$EJiC#VPfPB zMBkS!BYSU;a@`dtJKXD-QRyPN9bn$C4az-zpc*By!c4kLRcdIo!WRvl(eEvTZ-@P@&hxwp~Wnik!Zi89xkI)t*n{ zJZ3bl>af>ko_qN&1St;*x^;tpe@P<66&^Wk_7!;S7_GFpjhew0_A0XH=V1ttLiBX1NmpvOpclxdkAY| zmi(fsntC10wvYzTUS1^^rtD!FHgSDg>Rh50Hbvp2)@y*9&Uk-UVom(mStl2_p9ip> z3REVaQU)<5YOGaHPsw%}#ej*+vdz!2*ra*XQJb?4zIBOfg;067&`A5dDFn1x$W`7< z>#DM{8uz(qWu=8P5lR)bME_Oo;i;~uSTy4d-C()x#I&(*v>JOkOTR38C*gbrN0KH9 z_+j>z<#wx55bE&6Nc%#C@n+wMy@c?8+&!7IxCw!6RS|9Y)a9_zR?{k;#T-^uR;q8{ z$YfVjUs}H1G$>%?J&kM%pj)ZZS85KLNGzGGWDhd~HhY6-W&MWnV@Gs3wV|HWSYECk z9oKbEJLe|w3+@>MDC|g^>1${u`{fQh#l5>?;yX4lwr4u=SdT(0x?E12CBhM_c!KBE zi*~$_s}S3bj&J*q*Lu*g6crlH=3nESxtmM}r&o#YtPm8A};`Ylf_M@1$UFRG?q)>1Qd=7bTf zVT)l8pI%Wa3$6wbz~mPabe=~%lX@x`fr`b*g&@yH;Ln910DoZHyO{K#v3Xe3LH8~} zYJWg&kwOK8(5tNXCo)ZA!3T)Xj6>b&zR}W!k6ggX4|H(L7$;cr6&2%%miz;Qo)xK@ z6%z9kg>$s|Q#v0Ls(Z-pZYcIkvM4vQ%3nTWYM^VuCSqEjy~2%R(kW)BSU<&t-=y&J zK@d-?aiU;$0#Dez;sCKsVrI9c{S@&*g7P!xE6LsG?4WF?79un1tE~%NfgAo6w$p2& z-Qy|ygM`bg=~m+{lW+Zn*Qi|VSSdK`4Ge;xE>q%>Ov7}mX2oYz{+o<0$8pBe$yDrh zNz-OuJo!tGi?rx!x$25Oi^55!2b|buSm9%5r^ei~l{A=zVl!#p=Ak1|znF8C|I;Fi zg*9uCBKZ}kTWj=nC7jNOCN>0&`wX2Js&a=04c*9us^zt#!zY7RXPE<)&yJdrUyOZ# zPnyXx0TwkY%G!p{pmsbf5S$5-NGs$J< z@B$g>Y^j)w11^u<>fMOU&`jD*uYEY?*n<-^2&#SAZ6<~n9{BsLS#pg162AH$S;?My zc3q{KHr=lUzZ#*F(-8A$)=4ENibaUxzcq^C7Lw0(=DifRpZQpIWVVU8f&#A z^pTNO;qfM3E(`!G+;z?KMLfn5$fU2>G)O39%|x(JF3BuVT^`e{@+`0?+Lx&Dg8~Sc zA6E0YWgkNh`tp1yMi{#21T^9fY9>%*?&p?BYI}6y!{ZZF5y>1aS`hQ9{)xcMBJH%28p1GS}m}1?TD1%uaC)gfyHcQIpF-;6wq{j1z{)C%pj5ZJI$EsU$< z;j7LX|7NX-c;ZtfpRF1lZfKGb=Cv55qKV|kWN_jr2 zI^zNHCB=3mwn+3;#z`nP5BcToX@-U7mUD{N3`w%#a}~%crw_hbk;vh7c4{Rwbfh|9 zMJ9zFhjIGWO@^-=N`rE?-;t=lQ*RxJIh=VhLr{L`j@t2-LET}hB(Z>p%WYy%o$O@I z-d{7^Kf@f}TY%HFmuC7@q(R<3Hzfp@^~farihNPo9s$|VEW0#jZPmpvEd%i(|({myJL0Gt&7L?2pBPHNdG1ZT3KcYKeB;eqZvh~bi6pw?F*>{8+N0d#5v z60O7gk{_`KRR{5wph8O}irFF8cP>#n-JbDY3flAshyzofFG?oXP-41!l{u;hegFz1 z1rs1)c$io13g!ddYK#G^;VEY133W|JN7(0MyGyx(im=z%3)MsSa!?ua)FASLz!Wtw z;F)&-M8Fpm_Qx*l_C~$+l8B%(cev1Bv~0%hBxZLc;r80>PiY8gTfM#$E$It4bEUx; zqWs$VCFISW(xmIeHSxz8$KjQrlj`^#W~(1qz|2oP=SDn&8jm)7(icobXNs4_6a3*y z9mM@+@6?UGmUg|cU->M;?!c}0RMUsa9oeLZ34(}oc!s~G`GPP#vFJCo_osP(U#Z>HyaKMInavg!(-koVD43 zD~m$*@@*O4aaXV}-|`S2rV_5p=!sw}vhfz^Y1N7AJWP^}7LYe{&d*P{2a(UdnZZt9Q+>9f`* zgS2xe*O;A7!UnmNeQF)2<9ON#$J8)YjRj695!s%BuXqg8U-fD#f@>Y zm|6kR>qH7CzZkq1T`L~15h^dC?kT%>4!_xkZL2G*LXfc(Dduj0*2!#MQBM4VSaK|a zpCmr^TLJs4U#L6MP@75|!mW*N3l{0fta3~lv^o@|VhxOh1vA%zx0!dKt|Lr-e!s4g ziUuC+S}*0dAtwBBcKN1{8SDKn+&p6of8_g_`Z zWc<1w(*61XAw7(|Ap0G~GVBC@WvKE2qkXIPa)ZP$SZE6w%iKaZ(s=`BKN9OGm@~L= zcf`OKYSI44*Xkdc8;?IT@5(2^ddo-O3)=+6m?24EShZ|O;TPu40x`}sGw6zNpDiWA zHtF}=NLD*b?7rW6z{f*(mZrn7CGyOoj)hI3&aFBJ(lH}?8S0r4G%|rqU7`xmjYkik!p98&so>Y{mSfw$+h>yZWcmu{il4!Uz zQD^Cz;`FNnbOCjpCv zSG<2;!GxBz*DpBVSLYPux8`2tx2fzgZ0D)40O|0WSBz)q{4MAV^4y7?aCCkue#Y9< z)^PN#e(MB~mL#+}8IcDI1h=rW~m!2qDAP?i^m=#iz#Y7)Hs%{eK?j?;cBCh7dF6CLggHh%RS<}78(G2wYWq-d5NzB_6GJJ6#mlD#`lLJvpJ zsrTrGOr8BiAGFMOwufr%SC7;KLD`b#>v7=E%O_b zJLIAnl|*k(dq3aqAboF{MBKZ%ucmNqn;vu0oewk8=43pk$CJ0yg~N4fCd&fVGE+h< zqemFswsboA$6MlH&`ad6J`JR}v|7@m{AoY1w`D-VED|7Ah___T?ef)hwdJScxh|2Q z<4;TM-2PK)B$9^eLlDlHDb%|NT!<)pjk~yc#ADP#n+SRq@&Xtt!5Q zv&lcVdWqS)I(z-==C=Qu&efQdk|KtL1`K{E^Zt{rskpeQ4+|t*3LOQ900)(2OMW8Z zl3~qW?JJRyqU^8fTmeb9(=AEH>)L*6?Jk1T+%6VZUmuU3kbxSK%$6yR%`lAI0R06W zfcYYWT=k@$K6;9~C2t26rsrd?b9N;V)<6_p1$N3TzP=Ot*5Tuu7D>7kB-0?1TdVOw z(C-sC+HPz0Omm)ed5B#LsI4n(@$r5%wJR7vyDwu1U9jL^>$FFh2(Pj+xXrMtvHIz9 z?d%+`$$X54S<9!YBA7Q}`@?SCl}Jz(E}7~IBHq)I>Zt)kS0M!A^;q0$%n@P4!A|kAQoY&`f6r7&Ms`OVJcnwP{Ddbsx<#LL0r-Syh zc=$Lay(rOnv0nj$RFnx-#0?Vp2?4?G5@>3c*%8Av%zK41!495i(SCgw7S6P@r#`U} zfnIM?bV!pV99EoLbOU$bOCowlAeNQ zAhZM*3+C#$9HOq3`h24G7NR%~i4&{Rye;BAA(UQysK}~Rbil=NCs3^+U4_|2ioO9b zP##c<>mX>NxBZc{zv7pue+(~g)IYWajz$Mk(KF8^Kd7>RmFh@M(*eWPU`lTpz zi-c6=d0K4CnOWzSm}I&TcE9_V9)F) zblkPta*$0%RNO$z*+2?Ce4lz|M+P^fSF0YrFv1MlPrn9ig`)#(z@V_uJ7U-MPX|?~ zKeEkG8&O?X`*%yC=^72P(8~P@n0@7-SKkm@L=<~pJLa;RN;gY%_ft-;UZLPHuAo`kp)tsLzCIpy?!icTfW z?9H5wTpj-P-)FU&oy&qalK(WcdQ}={s}%L@K9cZ9f_RIGN$6}-IC01_lB6X-UQki1 zgNvl0DBcvpU!C`;_)>Ob=2I#AN-t@ZX}KtSFVf-qYOb+!<|^m=>!ei>sA`XS05Cyn zH**Tsvc_s6(&*Dus3mUd+Fr?>gK0%S(|j@dwCOg&in#9juzJe%!QkO#D5{?q$gGQ` z%fE4CZg?S&z?y>#*GQ^m-8|g9x|rz(en#d2rpnZphcFAL zAufd5oK|07WSC&&%_iAr1qdf46Itg3xe|xN+>m;$fqIr$1He@it{0ke`0BuVo<4#m z+JJUFbye7njErO;o4uu6uFug7#D<#A5caA#r5Z^u3jdL45h?b-vzP7)vPuYg{y05C zpah@BjJO1ji&1ZA3sg|^4T=oER4k`yn`COYa2fH|u2p@ME=b`_$rOF%t}(sAzLQD{ zQFcrw-Z+@+k;sZB&xUbJFOcbFME%1)S)MlZ7=nGe#%TMzMJ#!`!M<>4L}i}$Bf-_H zX{ys53!D+!d-fUoI1$9FwVb*HWjv9}_~)L|9=}F!E1Ytf zdHjGxKS}#=p;lR8p1JL7^gTx+G@3BYgXIp~*;PR~ok z>Qxt0J0l$UgH(@?^+PC+JQ6ED#sRyAvJYuf{>xxPuy2WG_YeOLfzS<-l|A}xKF z@F%5I3wb!$EnNw7m`qy?-|=mn{9Tx+)6?J}ks&^RPU>P>9uh=gpCOHE7v>XGH||)#!LiHE;K1D=EXKCuTT8$Gxdr#A zR{|p$6bOh4>i<~Y_RqNR--ytq{_)_ygoG_EFJIgx6kd5a>8yRWJxgdCFFS_@?ecjVNc!SuF&%G3nBwAxBFfMvt`?OT{ifok+4mks z@79MBG@ffKJDJ;Yb>(}+uTNY4?rct0hvQ6}&)vktXOLBKy%4(+b8x^?UkE|C_=VVy z*x~5jIO}rK3~VN2X4+X=!Vs@^1$?%q?(kJ)KS`Mf=6n#6BtqrbGGGyQ36Rg=u%=(d zd2x#DBlT1JU`E|>giCVt35sFWKL!;O$AYV??WUHV8rrM%gqV%Q7=*#e!JgsV7;>Vc z=~ehPv|p1bF%>9O>ns73DyS*ruqAX`P#5Y4OT4nQPP#(eMoP<|;OJnfzS5cpgFVG_ z%LTk&iD z%!SxnK@XoSRzsVS$hnTl%J7Kjz#&mEXujJZ-yEbJ1}Jf2Zq+D7nF3fAWQC?lmyf7I-wSZ-J0bc;mQ z&;M=y8xt68Yc&d@Up(ODVUyh~X0qDZ5y=~#orkMP-DOgh6GiP669T)D@vw=V(tjGK zwJ|;!(fD{cl7JO51n5ZywxvxeaJj*_3EBMws-f{fKL(+{Lu-tI&To)f0biX|UAE{< zK8TX1QOJ{O;mqZ5K@nmtFnM+=Ua=+^olr<)emlOI}~br zWT)%D=()KoBk&{}VnM+HP%#(nC7!imTt(YDE#KWXhlF(Zr*F2-`6lpHZ8e{&K;dOn^3PxLNcB?B|r`57v85}Em9$x1<%{6C+( zjW63U4P<>jg|?+F=T?y+`b8{Jl2YrZseanalJZ{&@l58Vqo{gtV6}!}MGZ6}QQvm0TYe*dVk}z4)v5 z*dKalWc&$DSh#e@(oSO487*(;3XVSrdx?h>?2YAKs8dsjOehaLgnLl=m<-mrbrG67 zdFek$UE>F_$o4MjA_-9QkCq5M@*g1oY(4T+U1S;wJZG)0N_!Ilhq;xI&rp{w`A#RA z_Oq9+z0iDR{UTv_#Uc*qM*onToCVCy=2TNlpDvYjydV(0bxl~2t2omP zE!h?~{mQ?n1uwg1KhrFI%3~)s7j2~EQ|K0RxZ68_75P+7F1q$oXJHVLdX32uOiLV2 z#aoE}shr(U=UW&RK|-Xd{Fs(Ye&|jew+hc3FAKV+E$wXi5C;o0EO4>JPKB#D#4)d& zU0jqsb(MEL>+$MQ-;$vnJrO6bo;+M1ZX0!?hp0(apYz(EJg@rZEwmZ!A{fRD#K1MJ}am2-6@f|NlZTdN)T^dJ}t+tYM?HgDc_haa>8cUsSTr= z_lqlIdHRpztwVE^BMr(FMLyl6#8Xj0u(mLQ@TO##3G&ivtuy7&&gInjg2In-?EV-*oRyq1PdRLUOA%3FZdJW8(@z%x#ZtSvK zwp=otHUPTN2U;PTjbf;<^|6D;eO>L%$-2{`N1MFSy&2`)s?r5*#Xb7F?qhQ%#T;xD zu`eYmx-#sy-ef4eWf&}e*Hsbyhn+?S^s-SaS_8(P`Y;Qr`U-JDSj*ichJi(S^B~(04p3{r zU|u>*4*Lf|KP#We3OwXo++^e-UqDi&r?=UVWd{SDTVHC0wRtfeC&{OQgdb9*Ix zBWC!2#)e0uqqcP-C3YF-AfnxzVDj(@C}b18pwt`ub`~VS9%=O@?;*(@Ica#l9`P8y z?RNSw1^G?Y`*S0=V@`u5To9Tf0A2P=ASM9z9bF0XTQ4YxvRR+u9~6y;Ew zDCAH&ujEG!SO?6Jv|+7e4cN4BCyu%K=*I84)Gr z5oywGpL}A*HiF*>t5`Y~2XqYlWAp{ljlF1S>f6D3rJz-Us1T~Mc+3gEBg-`Jr1~3P zH>WW7_(Ocf4w}ja)Hh;nm&GH>tZa$&b6B~0XztL?^L+F(pL#e;S(2ua&RfH zJ7tC|9TlKYp#ew)@g1tt6Rx-Pj6c9z>Qh@>@SY{NI_8Covxzl8TZTjyl<*2r@RBeP zm8jVp3SctIp%L%-FDxhP&`^V=i)o0zbSC=I0il@z-EdJ2`^w@o%2@-s$$Tg8p5MAz zVM{kkrEsj6c1JTrxf|2MncSBlhcrJ6x$LjA`}v(8X+IEtmrh*_+!v?C)PajlA z1a%DSy&|9H)?$&KJ~iTX1NuSb6cjrS|yrbqA9-NW7;_o=(2f$DwyG7Io=u zk;8Q>y~uT)c-HPUeLj9Zk4e<8G-1OL<7P&1uAZT4D9ZJ9ndv|m^4g6^yC7WwsuK-R z^V>J|J2rE`Oh>%!nkN%l+d^XaK44Ttn*NHTVj{lqAAxF=R_m`mz#>N}ffWo9zp6s* zKRd`9b5}lF7uVsX4!}_eq_;hA5l=JABH^^y>`XHx%=|_`xFa}u$9nl^Ax75*yKV0u zj5+*morm?`;q&jPj1rO`_yH&Oo0_c&&63krGe~o88dy_IQZha+?i4y}R~(f>o{jZv zPty?yAv6sJiLNj5n)3bo`!6nuMyQR-QKkSg4wWr$ASN5z>69_Lkr_FaCtxy_nGB%F z$M6noT+8cxNztmz1HbBCE_E*HLYDkaY!)Qx_;ug`YMrBV?&0^_HK>St4YO4G|KPFa z`(P#xnc*vLl!+McFCK-}KB^Cp$dF3@*xw{?YEg#Vj|dgo70*_~x40&Jv*iH$td5*S zG0E_VS<8F7viC8&e}iTf@ykCm-~6*)77CX0wfzsKtpAorod1SLJ1bAC|FG4Ir_aZSsJ1t2n?ho#v zVBGdWUSwOP45wd7Da_F1?h3x3_Pp!{6Yff2+n7@_OB+LRjk&6MEOGzkT?Z$v*FejP z7MjZaJYijCMTD=R`=WP+s`9<`4zNdjlZ$~j3h1it+G|eBzc5L&N#y5s^RdnDbvux89K)8M})f% z$L1(vala>JE8s|)oqY)a^jE(j=MJK zqm$Iwz3A56E_~Y9>>Vaq%EHZB*Vh=fZ7%lUE6mIxHfg3<3F$>920==Yu19w$DJ4itN;gUgNT{@Q zNk~fx($a$Pf9lMCc>HD%ow+R6dcL>r_kDMtefB>0WcKQ~Ty_GhR|C$F?8tE7`;Ss) zC-Y?oAIXIzjPPx`s^_`6a+KHey1Hc6yCq^A6zOa|3}};gdmHdvYd^fhIZj34aR>PjbymTHDh;=A5#6VSFox+E@D4?Kin9N97MdX8&V2Hdx^)#AB zoUh3=3l`Q39`0VZO6Bpy!M(dG#-(d;p=raa!uO4R36yUf zT|rOscD6tCQi*@KdE3Y%Stl_h;8^NcGv^d5iG^f+5sPFjI^dlWL&*=hz8ZAei_h{2 z_0nwfDqM3?O}bPE_@2lYTB#`)J6CYkn)Y!w7qJv%79)QRj%zn{apH?yui@n4w~%_r zi^9sw;L{F$h_aNvDnw^_BD394UQ3XK@2Vl4U0s<|%S`&55o&*#(@|Hqc`vy5tC(k zBp6rnFsNpZo)9L%13$wW8BZZ|MXI?E?_%GT&?*D^?KL}6mC@t~IM&M%Dk4qIu+(f4 z;=i;Sd+dJ@%UVaO2$338**({i>`hM3l`}V_u7>H;J#?>b!(w!)Qut<%HHh^uy(4+$RsMdJGhU=`sjc zn9Co5!r4ogtEDYS--#&8rj8^{OEYKXR}OVeUsY{BVkyK>@Bv}s_*uh}p0=jn zt`7d~rqSWWHbhvZ@I+c|b{euNdtz0WgqW2iH0cj{ZjF8O%5OCUhe%0Gpa+wBWtjlF zdkYu?F#V)s3mmqojcrxh>lDehYf?7#7Dgw8?Cy{9k+oi>Ve3V)`UDdqDKp4v8bLZK z5pUjMtJxQroYX-&lDrG--(LO_Nx51~^U!}3#uEZ1BZ_pT=H67LfVl9a5wk4x!zIea zi7n`!xJDsm%n99~0Kqtp=|_?yU&MsfW}Ab{$rHcGP(MhqcjChuXOfq*x5fe9F0-0h z^-*E}Kwxk~OOn+7P1Gcg29=oztvj>&TSz?U%m`Bn84U4b?nq)8D;l2F3dV*ShqDs+ zWux1yqaigPHkN9k+?ekKx`l9*n{i-E6De(~c&Fkc&*{6nafQG4!rutG{bffO_vSsM zIjAQ^Z%!P>AoVl29-!5^o}q7?ey|!Ln|ZZvy|%t-p^467FZZ|{J92`Yb2fp>N_{zA67j)!wFW-{42so}~ z1qbO4fMY;^gNGfcB*F=1m+Q4p_JC$bgYT7}9X)NXt;Ig8`podWF~_TT7pG0&&VqnOwyU_@qe%$CfPkeV z=2!U{$Iuk4^;|fz5~Ayxh~3^&anVV3YF(ung2@g}&n(_SY2MV|qp5ujxpZVnk`j`$ z(b3NV86)J$Bd;PZDt`{ilCS`C8sj6|mo6sy2#8cEk*dn|OnM2W>48mn_UGy(p$@xk zU8Anq!B>sQE)Ez>{x*Dvn{sTou_g+DYg2=E_<59c+ede~OFED>_j-G%Q=T9OcG51Y z(6i;;q4W>%xAF)i(qz(a@FHb+cmp=I*4S;fcuLqX->R_n*&Qlhr2}DC_?Zb$<*YKc z)vmaicxpW|8~o%KvKDd+*2iT@6%-S=`i~1z`>!Gp8o zf!k+Reug!RyYn)lU&rCWQqNPqgAWaSPFw^|FYY+uc#nSYK06Dt6BWi0mQN;W32SjY zmY=zofyJ`RGspY}rdB1rO6wkuBxVYYAVhJ>Q>k5Y4Q^8LU6tVp>GFdz?33r8weHZ% zGD}6DnkUr)^ul^$oUv-)WOOpHDo04L*y`Zds1~f=smncWEla)2ynGa6oiQ#^p4{I( z@aDNM(W4`x#JJ;HtSQQjs*HHzz=DTwa|8R^^HAEj+LS4s;pMHvqR2U`syzsaNN?>Y z&(o+jX6YUz=wS(zQahaAzw8~>-z+eglZv^Ga{F^4c8`~m2jAqaIkMb zjM!xkF>FsxCwpF=*EWY6!5+t)e;80d1n_}0%cF?2{xq?qL3Q)*2AY2%y|l28heP5EE)6$N-6hD2}k7k+sL~( z!zI0s@uis)h^P~!UXi|Sjj4`suHZ4(mYSni%_)vwAn~4ZdZAUTD^q=kaBjE9j!4c* zE?qQ{6J{35I&wZ-c#}5w+-H9qLr_iK8$0S`9QsBvT~d2Z{?1pgxx`q@antRuc*S2W zp2f~-u@yYP=Get9qTQyKb45VC$0g)L32eJL#T-BIF-%Ncgdx7{&X*zz>BD)x!mM6) zUEIz=pCb%{+pMOiPmW(uwdBJ*BF(WpWi72%mU&T{z^t-ZxDm_OysLh+XW%VWw;O}m zbJ|sv)T=W0-opyByX0p1s-@J@~s^YRkJgqg#-ZjT-nLPbFFs#Uz36Ut`Q%vVXclW zjV;uOc6$t=-XA^s$&srYTTe4H88ZY18{wFAXbj@8v(6FDVak*plo- zZufj_aH2_wWb&8pG5{FUzFvfza;_a?d%E6$eOu#JLZ&bF6X(M;%CgOqGc+Rzk6;cT z=wZZ^4~~;){ARUVUN_3OUSs-|DU#F`@@~Ap_m2*hX zH{+3qiFENET4^fT@zc|;PRQhX*4hm}j5r^BS^n%Wd5f2`a_GzQ4*ey1C8 zW(Gd9<`+6NOIDQ@4Ghhx3<4!hnt6Zqa5GKh&!!|j z&G`mWa(yI(L?^~p?2?*jYUNMRr%~4IJmZ`V$r7)-r9_kZg5Rd4BOn!3tF(%5IPPHgRp@Z?pp6PyqeCFH%3 z4sxM%K{=sepQu8#BNv4;b~X)zH`|h@T{2!5qHU}uAx zFJS(Pa!P8wQlqu`iMOr7rXI+$*hgcvnwar=t~TQ?eQS#ty@SrzEGzC#U2uy|+}i21CS zQl!O%k#1S#p;xG3t?I~;4*|UN&h)seAc>@a{L&IT0m}2PTkY1!e8n0pSr5t~gH=rM zBMwbk%hbM}w>=-VisuT`KLgx#BwBh_&vaTQK0a1jIsHkuFW_@mi(KJd>wG4ECqFbx z0;%NCJ$R^=`Jl#lzesxVPmU{H(=8|?LyCKn4S03PZO)aIRSha<$wm)4ke#*&?8O6a z%y_HbKVDFuXw`cG{qlSmN}s3iEL~XIwzxr+9amXQi}!_nc!$@h2g&mnnV&X-FqsJ2 zJ`K$DaX-hgs|iZ(9ks$gORZwiq@n8h@M_bRDsD0TG>B;Krb}+W5P>Y2xR;h^^XNb% zkTx{eT)=3KN-mTv58ZbXi_Ok+{thOMoW+-}H#l&7gw4b)`mr;+wf#by%=x`oaOLyS zH>jDOty`_wM@`9n<)xu(Pz)S)_L4I6%}CC|m@?Dm9cu{Bj8byRdH_S6 zret%X=v}8AM&;2xWR9cHt(5#bwO0H5D+pC8ge^CE1|!&!f4$&G0#PhYxBg zLt<)5+F=&$SQkgiHzqvZtyt+(`>^&I+QohP@@(aOeM~%kHWv0?9cLKrLM9MS5jMLu zAek3Au{dr^a-Jus$P#iTW?z4lFFK+x$^KK-c9~BOz7Mr7#8{3|?W;8C@;ym?shBt- zQS|oUoV}P{v%21lSgV@adCuozY3xMzfl^1>vRTc=tg4X%BOFufD8oyNhupWG=bv@^ zt#-t{Vpuj0l*@Cm*hKT*t5+4t+A72FjYRYbFN9z=N*x_hkLj*LokP62lG8%RziOu3 z_qrv`Ym0Rk*NtH2o-bhc^$ls3$2hEt1{^nAHr~;6XSjKIn>s2Co%>Xb-pP*`GfCij zQ73(SmJnI1TxyLm?YU}I;nO!1-Vw^94ry`6@I3Y$&G|<*ST)->?nHhvjF5vK9X6h6 zeOGS7XgKh0m<;Pt>EqFgo^5O8sFG)hh#ffCWg&JEuLd+l*K*hwd7sRy|^Lq)`2%bd=kZA%lFCl)oKi;Kl>_Vx7b_N@0giTL`SpaLY_ z73K;TlQ%2!Fb(EhPzXcB$t}YzN0(zfU(Klv7d@U*x6w*0xy!|eiVhiYvi?BzX(#uz z&8CyGz+);_@7rhovec{_!9|J-v~jj1L8P_wOkMLCx?^Uz@O#9puUn!!xrAU}ua=SG zc5Edi;;7q7ypL9!ZEA+`5r$e#B7R15_2(pG;hqLKHoOpQT z6>PJ1>{~)iE|0>dP>_yc*%7MX8B=2m?lC!aJXmWilO${6^gDKH4#(9g?KRBT9 zg0HzokEM0dem0_bwKB^4rQ|}k_AXhTu3mL*k?!*ctJdSf!J{7QbQlB^dNW@IHtKGR zRrls#qiM%UC_?zfR~qO+N1uOe;<2&0(TJz_YSFhf9x59;)v>g8IbjUpaT;<&iv(#z zlWl70r?TA&ZeWiA){hCLP@8x z-#UkkeM;toJltvgmMDRW@qN4r)AZv~q0lOIZ7}Cj^py&o2oi`U|Ti(HL68(YX>;~%L2MECmn2^Sl z0230uFW={HdY3GcHi7C6#g#qq0>4sqt{PTUR+NWgL-!f1wze)V4a@MyYm4QkQBIdD zEK|X@*-6(QX6F*9UpEUs$_Rk0DG9OqYQ$Sh$iOLXmU5Uzhp0=-DP@_|aS)T*Q0Asy zk>5I_CK_GY*uRgBnxIE}|J=mQ4@YC$m)=6&=9Yqto=9PK0LjMagIF79|7#uzls&B+a!7<-ecI|2O#mFo|E(*x1y`>3=5k2dRA9;uJg8 zVq-*S7Ew3>Q5Y9CY{oj!#bH5g$h{$_k%vxJXMarZ2*NkcomoS|+cetgW|Hi3 z&)VcJ(u11`(2-1%9?vIcR`k$_l2W9Nm(s%MsTnvvW(oGBZdTXUt8GLmy^YZtJkA@% z_TNPad}AYx64w)_xa3hU&VLghXZ%RIPPYJhRJSjmeJ@q9@FU6F;WQ0$QcpgH11P_8 zzpgJ-WfSz?AKPONJ_*aE6`}*z_N4-3*FKB9I@=o5^7nz&yP+!q?LsHUaYG+ZgJ|fswi0INYe;Ii%{SYx5vFHiC zvZ3D&e0$kjm*jpVGe@XQwlmakC3+Xz^gtQpEuxTDm8k5$F44aoFIH7lh6GjWC2?#F zbP-ffc7t~Tk7#5#Z_2bjDM>E)Fy9oXR#rP10~9?^puzfHuN_>;)8EBfe&HWJWZ%vE zdgSc|H_*y2-c8$olC@S9vB)?V?K>KL7>EaD>TXf`ktQ=f3PQ3bi>QdhG!AQ~E?nXc zz_D9sPTI+CIm|N=~<+{)E_Mx>by=Qe@=6MTll_Eitx5^T{w~>iN=b4A3WNE&ncdNAS_%zN~Jhs@BA=-!{s1T@6 z!^Bmkr+7#moO*wNO%eCBrCar>UiZOUd1^AE#D#)ly&~fRnA>4xl&MOe-<$5VN2Y1m zrctGg885ix^z}+~Bp>CmjUqiS4J{8sKF;M^$tPeUd|;o%p1yp`cME3;50Sk9qc1m+ zNSmBd5vCv``ExNHZkd#MQmw}XlA9rB8_Tz{?djA<*8`QU;+184y|MqFPob$-0tM() z>c^Di4TOYp=s2w~)FTLVL$We5i%18Ny`2v$BW>=s)~Iencw;wXkkJ~2zfYP@^6b z@X;ghpX3oC8F_vbx8|31F)SV|D^gA^>2J_`@3HJ7_?%N##g!+p`}_zAJFrrO3NZq{ zewM8{M=jodjaMo(aA)c;GdjsdjMry{>wT_9UG?CoQrFXVEJLKpqg05S1RZaC2@aX1 z#ygf@2Lv=cJQju){vH4Y9lfy^Kt{8_GQe_P%cNJ%qEY-dAt~rCkzxw|IX6&`{u!qa zKr4U@8Qz~yv{#$JDzy-GTBxb=KD6t9SS)dn%NoQz|$070RM|@58})MD6+@dw;j2!yHg$ z7Gx{yD=m4w#{Iw9hgFD(LQ(}Is+#SZ%5r&42 zXTib7L0rlDoJ43W8e)OrpNF<>m{&i{ZsJy*ly>__>x;==6X{$O`^@`lVX{);aT7P- z)=Tr{K0demr>6%uZjqo7%+MO8va?vO!U8$$Aw6!!FF3R?i1F#vR?w$5Y}r{FaI0ye zF7&L?YNT+jdWlJUB}Bs-po3AM+gq}-w=5$SL^E5vG0NH<6hBFk!p>`{M-egl`!G2%ri=g zHU3qB-ZGto>SINl@7{tOiyFS6OcE9W+d9r!cAoRhEp*Qc?-|kx*tZfmk9qdi zg?d8k%p*n^D*1i6YgVp9ict=Qg8b>|agHJ!7Qf7Nl;zZF3-)I9jizAA#DMZx=cv+w z>{U`m^wVnGIGKCJf-Uys&M#*jvyzBKN>nHPXuD+8D4uIr)ZzpMyI8QeetKZ7ls@>5 zZSNJ5^#qQ#P~%nn-FJbeW=&N|>kXn#$-J zG%kZT#=q}}AeT$2Fu#leG)fQi#B7BrU*|*GsYeR0ic~8U;_!)x3y%mV!E0px@?(mO zJk~6x8_54}UD-gtUR&)C_ZPSOcHD>i|G557JU)L>@T|G)A4aB4n4uy~uQu`4$@2}3;xQ%y>E`v?IYIoEaSXd% zvgIO-_0dQPi`}>EJ%=#Dj`+coIJShM6Yq-1lfT5WQXsk~J0~5z)eQFIj?(ovDw@}( zQ41Z|u0v^llE2!~p`6aFJ}`$=nB&v=Sf5riy!JsR`66r2;ew*GjDqtHhDg zg9%qDO=4VJQAA*1zm9cl-?ClFpA09DNkKUn)R3QE%tx}kLjb26t#W&m`lY;PFmerY z`1#v%n@}yFQ{!o{++tqzX3-IqJd_+ImqWURhXRKl5PlNtb>h>i)!{&4H9Q9>o`-A! z@15XEhNCOfUd3v3Bu83^Ni!_^PRdzPm8+*4HDrmC9P$rxDQ(t-xKb3c$D7bHB_Q-XG+D_N0Mr>fBU+eOp)vYO z?u5I|X1WXzncF9h-lGBFvCV(Y#upzA;92S3&)wc`;^{HnKF0PPUHHh)rr#i--^{ed zVo1CjSo_hq&4Lm_5c(?b7W)n`zEB~p7#eP% zTqcRoTN42k-I(dJ`p~boB;Q<_4M7u~pLI7lsl#h)?PLM#4Zd`s7lSGj-@X){XJtWi z$s9`pev#7}9w;TN;zOqZ7Gbgh{C1$CZL6QI2J< zXLNjIl+nA8VEClyr5t8qpq;ygkjS#-m(}B;E)GOOZ}Rvm7J|>a@ty>Utek<6!32n{ zG^XRFU+oBJS7oxG2-2NTQy?sb?%(XlFYcDNHm|&UM_;FS4~{LaXLeG4zP9iYPO#Cj z-cpX^jp$^~9{ACh(G3_#`RWwwnR(r)&iIIx&y_h`@3|MU+8TNKJAcyMx+$VB)7>>b zi5ytL9=G`H9f9K%JEPuX;}Oi~&Gq}Abm^m0Xs2)Q$fma^w%cSqwU7h_mPdgbp|jn} z6RE?2PC3jAxIi>x*vhX`rIXRZPAi}Wc*7t>?a=O4!Nc<)tO+0#o*%l2}a$Cx)38!ckVshV|F;tj+_Nd&s31w$h0k z_jn$har1jraZJGBzREo1a+=L|VddzXgD7260x%m>?MB^0K1Oa3z59$Mx2INZeprG^Tfyb1*YM*b)V@DGwh;(KB>waGq+@TRvqq!NVn@P8BZ? zA(p~-l%NLX&-0F!Vc+afVCTW0gKu_QS))CDgG*rtAw$QYF4jg@)o9+ArbD9J618e_wRU#de?>y zG2xJ!cIqt#hKkbk7$<+YN3|ZRCU)n2!Wo%4t!pqdwO-3UMvtNEW9l!TQMSWl)B1Mw zYTl|FyU4v>y{S0V(%H&tFh(AwY_bMN<5njjfPs=EhxjgTC_zB=?VTk>mNjmkRA}5_ zu{Ql_u1xJ%RDtOZV8IOO$`moXi8?4lQjhtcA?m6*pe3 z1$<=tv};UDxz=R8x3rmSe?Ef;%8)xerzIWzH^%mMfG!X`-me}wOi{J!-<2Pej!&HN z%dL%IPzf}d!*F!n0{QWy zEB*L-J+y!L@lQGcK)ErM5kP9m%FXipBb%4>D1b+galUKA1tQFyu#FX zA&6*FRkW@^u{7Q4PS)>XW&g2?26nf;Ppf)a+Y=KdL8D$qwXSv7AR!d(L&LyZgTj|= zwWm=c;%4>-4<&*_n>O8g3~v`yytbuAmc3rHHZyf-R|G{gklc}StspIdxwq9?@ z{0|02BTL}l4@6BXf%55D9#cu28alS5#-g-uye4#G0U-mnZ3WCdMcFy4x*J_{n>HNv zr43A* zBpEzesw`>+QR^{E%>6R+TLP*L@edWaGc}sWPRWir*gf`z)e`rLO}*E_|xgD!}>g{tXwPHv!q6iJRkwx*hf*7k7ojIjm2>zq8i!- zY!TXW1TU91hRRuV+NYaL!@68z9s6WHn`jH0XH<+Ru!uzyOQ8f~E92w#Bd`!!cotX5 zLnBa=!PmQ*brWTg`=p~Qj|i`?6i_=;NUlpZkaLQ^?vH2je=r6WooAbsrY%%_&Ta#f zzcE{7N9629{mvQ#JwIR)S;?~aXo$g!>q(ZLi|!Ju@l7GWdgLIao|Y!! zc%K*-RHR@hl5ox}j^)1Xb+PRHrf1S96Dy)o{PiQKYhtgt((d6OP&B`*O<11sAuhNH zUAleyFkMI=cOtr+$2R`0$~zOrP8|(;IrlMcjdHKD7Own9=*j67BL$^C<#Z^6?s&Sl z(_RlekqGl8+s%E`b1w0beOfOj!lZv5Z&6sMQr`TzPwE>eekU4K{9EZJxB>VS^iVU@ z@?j=tSa~93CpeYzPs>fThukfcxeZr?ZP)3t((=YRB)F^#rIqLKn}kwyNwn;r%4o^- zKPGOc99ovCmov#eF=PvRE%h1Z8P;ehTQCt@yMq&2O_^Mu58XYeohNFe>+b_P5>nn* z5R0AE?tPy=@^XYpJ`GeE2>ydXra$V!H9{EmKZUTq@wJsrn|}&nGPSou&DwI^s$bk~ zt=fEF=&|@Vz5rn!ZpWcBhrdwoU>8cDhS@&`OmZjfLwYnHpF-5UbpMoqz4<*UCc(|X=`DPt+XZ2-ZF!*)0#_^6 z8smek1MR;ISUZAz!8!;gI>}k50_0j#XjUADx)KJyeK`{~yC3 zAh7{I>^c=duJ2rza_|ua0O+CtfWEzaDN1UHGRZ1Qu_%fv$x2D8YcMNHT}C*Wvgfb` zA-tmo0Ionl@+vfIcGtKn-?(7U+HjS#e1vbxEclUdHszznIK_jB{Ap z0hx^KEty=|{t^44HaIYBD-HkvjJ+l?4 z0sW6O_Ap7O^`J-DCj60$|GFso0Dymw4@t*}3P1t?y0bv$0>c*;`UyU>(f6@UH%pUm zzx*S^saWLgm!MCm|6`~OnV&KIFeCH#@aJ^(gB-~Lb(ldE#gLZ`^+xt*G}pnWN^6^A z0byf;0yr8NzLNZ(_{_F;CRd|e^m=G8lomz6_t1Z>TT#Gn1t$HvRQM`bN-$U<<)6b|6=SUK%i|>m1=Ki337JuOn#X*do}z(@eenb1*0WYyB00jA!|R#sZ>BM2`VWg zW6*@=FK?03Zm)tFHUIyg#9|*6G^F0+o9Z%#X3|zb@T- zzeuU<;%x8oGha*TBAV_4eZqmbY+75>Yw>;S8j?5lP`7h*R(3Qobrd(UvAOqi(_XB! zv|zlIX4m2cpYU@T-lZ<7U>EdA2Ot*!T0o`0mIs5!Hordn4_jVu>&~klkP%ElsO7a3 z{Qt4_|40$tvdX*-%IiJkmmhNT7b$)`sHlmn5zyGw7E~|)oVxy#hrB1j(S!ve4#fSI zpun20uD_!I+|<_;kxKc*c@G%?sGz+ZE|2d2jtFr(6I0`hyGQ(lzqsUn%{0i*ctAyA z2*z*o=y&)fJb*^F-;U4z5i9>xLG}N8$r{=G-L~8R(?CXnt$7173n~KupamvtF8aTe z^-YVV>E+#wFRP(E91=(Xg;EXBOV(X5HOx={OErIfaXnS^St^W#px_?Q4ge^FsnW^& z4^{m{MR+ONQZpg|AVLg^@?a{y)clSL1tXxj3+T81H_G>ME1U1l;Xiuuf1>Dvz0kBL zNQff=03ZY25N`P|6#az$ZKeJU3n<@jAziM~(!IY$|BDfY@$33WQ&9G31O;$OF#dzV z-{A+_v*TyaPR!6d2;$WPRb4qS?y=$D;r@fx)|3AMJ^N4S*|X~vH9&Ey9uyU%!01;N|2_Rr$f=+2 z@@9feUkeHb24Lhb*M5im!WuNH@2M3O6)l}TG(7B0FZ}cqQ5Ho}+yNj_1|U%yV4}9R z{u5Exm(l{EC|eDx8^dsyUrfI4{#z-MKw}Fdp!2uJ&-DdqnGaDUgKSd>vdtYZK@x}m zUeK?X6~Yaxu0fC%5~j;#1w8q;dj9{L>xB`Kw4^8>kZJDzkK1&?Li}4PHZGPX*SCr| zjN{fTkjoU|gI?UgqzobcTPd>6rnc8ta%XLyZ44A$@Uefa)B5Wo#QK*?e!@I*|2dC8 zD5ZWyy4=#SCj2#K^>3T&nf_j4{dWENQbZ4?!in@+DlX5Ry-c8rlcq%m%G`UPe-dB> zqrXIOF?jzu$LbfJjR1_=f&A~Ozwc6bEj)7YZp5qbe%f93puXYmT^Im>2<69y^?zMA zD6WAE)}D_uN-%Mvc`s0!|}d-a_Uw+r{j8hcs7#kGIn9XA~rzh{i+*j~0Z4mMcI{uTYRvCI7#>+EoFXLaFUkIMTal(E9 z|DWd9UZ%S^@ebU8Z^2wMeR=&X1F09>{K z08mQ<1QY-W2nYZG03iSX00000000000000l00{t1MN~m8Nlr#DYGHD7FJ@t4a%p2N zWNB?>ZgXjGZgVYmF)c7IF)=nSF*h!1VRBVe1pom6rp^+iy91E#Y?nRSwr$(SX`MEI zZQHhW+V0b~ZQFMDY1_8#?*IGF%>8QqQ#0S4``x5cl}hrgRMyU3&t5wfd1+8EG$1G_ zD4>l%VjZCWw4nX90YsGr=_O^w7y*K^l47Dt$_xOpA{BsBxfIf73C(w3*AOR_<|9T} z1W10E+6;cbUqLSsD9P7bq-PEDnDkv`OGY~X=CQM!+w>qnAIM&oPB4U6svSP0P){%9 ziXxC8uN}LtRB^_}JuZ^D*DW$yUS<>-Oj1@Rp_BwdGF#BEBkDO8nzt_~HE;#+EfT@V zc`c}l)7KeoAA~Kn_rtg)&J4UYF!9eL=?#Sf+4?moZTaXzlMnjhD*v**|gG_nO%86rzeR ze#$J$g_~j^jx4QPBU`xn$sh@_OdD7`3y)_g17wgIaNZ}Ti{}&P6GP6A#b2J^-12Ht zEJQ4|vJV(7G^JjoiwO#;#Q&yaX`>LnDL-8zR*}8 z)VdOr86Kr{!y?Za@XUg{U$9ogDB`$<2vw@ImpE$yjQ5^wfcOK!75EWpO6K%;GvdYh z=jy`h-2_$R;;lICf$~nvj$A?z21OA1pJpciN;+DpBcje|=6-k~bRRt*-C=Z3j$A6E zU)|3=u03-s62*5YzN=_$&@-?geQ&E)ZF5cap!wV|`b_C-tVGSqD51xhXy-ZHIPKPK z!S^!^hIx9bi=gO+uAD+{8Ih|F9#MUDWxZsgw-Fsk!`C{D74DQAqc?~zev{X1AGdFp zwpn*YCP)Jcyn3+LItSC{^sX`3N@4EWV zcZQidi3}rcNQGO1u6~dLSaWBXrMGqf4&`K7;FVjF+rfBbtjemmyr;&jeLcY8bhjEj z0n{A1a{L&Xo1B0!2*VvKDB;kar!`B4+Vx>#>so5#^X)~yi;iLel@-|l4k_DQ7rH>} zhSzc2h(cK7ssY2+L-H`Fm_ij_g_hDu>mA4bPs4&93G2_EO@I@uKDUPchEUG{5MK=4 z%DulM8S7bQQ!W&$Ti}z^Mr#o2)yC!iz^J2owj^koa``L${eIvT`i_S(2yY~BPp}~J z2f-hhl>tYLevrf(@aak-;9zkFwxX^rnZOOe5WUoj0(-8&5h}lC7Yn8I-n%0p+ zFH$x4^X(|=2);_aPkUHFLW+GrE5h)F1U;J@tg9_l`ZZrHb9xZev&2>>a>CIzr8St^ zcCHl&X*NQtt(rZo3d;e7T5|^g!#hesz|?^_ME}L^ik23N_41q$H%oDYQjKfo)Tndb zMEYUtPGtp6n(24f8Y3+^3B~lzoCc3bKe@;N7P7eRqlUJGtXx`2v=OX=%uC8y*AT9| zrt&VEsLCsIRe^tWZlq?~@km82eq_Aq2}n8fqxXZ|RXSu8)^&?&-*`!8=44~fm~te%x>Y%MIjGz3!r{2^p$lAI_9%$3CR$2J9@6%kE_ z(oBK~#(j;0^a0a;vfyq zl>Vv2Ii+u(vD*GypkAmC%IfjL)|h2g+r(%Z$ygyq4qRWV#Je0Kn+TVr3E=je@Cf>M z_L|Pa^#1xQdwn7QS@xp+ciF3`B-oYY#XIjs*!%o$V{MDf9ml$caHz_WuZj!Lji(j9 zP&`WfJP{4;;jXQU8*P7JYkZYvdKG6Bq-q`05G z*Fa*12@YBS4)m&dMhub)|A+!2`a0nLN6w-MiNz8yj zRGr>TPv7<;6sXAeBPNp0?sBeA9zQ@y6p*XnTYMYe!Vq5p&||z0Z#4du(3kjS`UR#Ci`( zr9vN8uDzyt5Ao1wH2>-id+1Ul)-vpU+9e*Z{V! zv}a;!@q#6R1>FkT#nO9bogLus_rM2_{Bm3HyIpyqb`iCxDEZ^S zv*>**QZou9vOi~Mk^{aloUjTDQ-CDH@rZL09YIu^%0+GpbmDD#Ed2%NPJbpl?rlmZ z%OP>dcIk(Pr}&PtubS8tZp8+VGXhxPs|tP-dOl$A@~%{Pz<5GYaBkD=3*bx$&Pv7o z6!pH;gx%}yR!Z*5`L27e(4t9za@I-o2V2)>b(er$ETL(kEiGN@fhJ}CRF2mesiR1l z4eVo)#_Y^N1FwPp(@fVjyogd4VOd-$;S=Ecf#hfUK8^6xF>JCLKX?-^(Mvnz)M4_S zONiRKC(Qi~UI1mwk<0tjQ&~T4-yw4(DP9W7S&)~)p>1B>(|m^zhQ8B$C1leDnNRes zK65DheT-Qp!MHPZfDtVG{f#^mJu@5Hzd^pOH;YN zt7eoPENBNZ`l5^)b4|~~(8$gSce%l98gN`pNfNu9atpW9QXwv{KI+vYwPV+o#7QKu zzLqD6^sQEbX*b&vATx2a0SHB)mSIcHG3)TGyAoQm)0p61kJsb zRpc!zRxZ)2WOm-HW(Nh6#cCm|8QMlYAJ?*X-71u=q)-gKI{orB^3*>=90p$56MDGk zyTdE&Y=GkTwfq%;@ic8-`u(J=t)E&+d4?9DVm$N;++t~3%UE{AEqwhPB4Ho+B) zxet};9L<%^^h)uDvkgRjE&r|xFA`_$oAoatih6L)9J-1C8e@F64srIaOoD8+hRO6$ zhY}Kqsi6MZWoT2BE|r~P&-BV)gCJi4&~fdbZK@D;3U*CGkOCeVjSD4P<%LfX2H-R2 zp1kdk+cRL^HbbRL4)o%%nvoD|n+?@Hh@zX>vbmaR3OCprqQ@z3QL$bE7HR9CjV{Lw zhpRTkKjt;V>qf*>JF(9k01yw$IosM1+muoekLNqAK^JCYuPQB&_b3iY(ZgtO2D+Sd ztd$Rw`g<1boZCDIjVD+YJ3aKOXe3>7&f4Z-r^()T8wQyh{V_|8uG6k{F%`lByBv~? znPJ(jx*K7n@dzbU;TJ4djUEqrP^}xIPfEvsf~=gkq9W4D7~MDt(wYN#G)4|GA6N~e zrDl~=JDv#KX6G~|L4Grh%a%7~T*E%0TKr}aT98zjj?EX$kyH9G6O(u!pxBr0`}bUo3@-~V_18Qs{(n`{KtRO*c`62i{%ifmT&$uD4g?HT zJcR-Z^f$ua=RyACy8jsg?=J)yNnuf0B~f})14Bm(BYI;C8xvb63p-mUdROLufNpAP zIjs+)`#jgII2J2eKon=OS>PUr*ByjZ30sJ?*%GAm25jK;l63e{aU^_iIj!PKNV%5S zEgEYk3}*9rF>Jq1X+Yhk^@uV~WT9NUl>I2t<-I=;NOW0q-aCIi7y1CW7BoWMKAtac z^R}6D!hL3_)jYj_YR_>v8MV~lY>jt$`omt=T>EH74xLGLc4_F)U#DLVF3q^c^hkmhSs8+7x;q!B}{pz=3y{AlvZb<-;YLfFX z_ew&VXi*xgh0i&o*Pt}j89J9EsXi_#8-?p(>Z0*$S#YX%Vc&WYXO-GZtAtMqR;r8% zb%VSv{a(*{kxj+nH+P>(G^%LdRcADkL!$-w)_Qi}2Cce{!^lHpob3`Fa9#Xf{4W0N z%ygm+$-)D(Zf`=taMki0T_;xhX=6fKE%^|RViXEVc9|4QE(xvahrOf0INS@WD_DhR z2M>W?X#qoA1w)9V*xoz8(_*C7S3lQSb=pbxox5^wFyiPw(B^JNcRCx>%!$N2RzADi zC(g=fA|~#zC!}|$*r3)7^sI4%LX*eyjb6;7uwO3Txxa>Bc@9CbKF zs~YwxJA2#r-dIDn+Gg^EQvhA4Z9WsUvG3Y0F4xJ&C251e-hn-aL~kZfV8RtuUM>U5DnT+>dasxtWS!3u!!9i-J*JZH}) zsez7H*-?)@h87!?&l+g%T;bq$Q^5LIJ96XLNX%6Pavr)tDyR!5ARqKm^XS_6z|&f! zfbG3u{RN(9U*3L!@PXfIWKAVtX{Gs6w=ss$hyV?uFw5<&7~+?2hx1*Bp;+r7q0P*f zo8sUsBaxwNB!sOvMd$<@2V~|~LkT%G3oHB9dvYm{aBN#aLqBAHa&P3z_B0Pob+Icw zmue41N?+u6)z54QQhWMQr>OxP%PX-t3P8OR7$^dnMFXu(vQB$B?X^;5ZCyZd2W+P%FxUF{k)G@^$n9Ir!2Pn;A zF_1#d5G~NcI~xidgM-5x1bJ)HgTuo>{V*|5g7{o|Olj6vSa#tf7wK?Vwv5HDdgjmQ;N|p_XeDM9kgsOHp*<~P+ z=45j8aFU9+*-}cWJeS0>gyn6L#CIIurTr0ZBqfe@Mw}T+?b0FzL^O_D=pp;VG>KT_ z6^=$2A780g66pwFh3(!YfS(PgEf5c{JJ^=stY~_ICqKG5Y5y&%CUU3D;nk{T94fkq z$r{1_uY%rG_S8L#yE~Ib-9LM2rn(r*?@$x966~>lOF&qdC&5wHRMAfu%Pu1P!&6#% z`WOddYGd-|C4EK4#P1z@tBPoKwA-Lx(m#Mn&LA*3e^Lu-s@9XBJ3?}nE*&Bvu)8U% z3rUs7eL=elsPdcA##tSTF|uH#i3pn7G~(KCI65mIT8t#$%*~I+1i6>7m5t~JooWd4 z_A6-DOw9g9h;K=HLKVsZTu{j~96mIYUWCev5XKoyi;)B@T7y3&lT0tZUa$qnytweX zj`mI~W^ed~#azx78$ym-qYa|Ui-}4gNFBcyk~yEHAn%p**+_#v9XUn?aY_q7ueaR3_-lkejt(u3oUNKtNH^dmp({(qVM`DN`ArS(g<%452PuIJoG$_;L+?V) zEGv6OX&10=O5b$`qVA8R^m<-k;8HrpPTIR`Xo2UjA$341k;LXGJ8ggOhUBdWpvM~V z4c|h~k#k*-z*mCP3gtdU1^tZK_M6hS#Q(J)F1pon$R=RO9Cw(2Kb`2*kKsB)$O^eB z1-AJOdad2dvWS?fKjR4JPvRdCjhin$d#}NI4Xguc!1J0Lb_gC^8pGid#fuo>X9?u< z>IpW8CLRWnH2TLZiV`@p%usP0 z7L}5@*stOsG19|SMh|}#2bW$n(d%IKI0mF!E;Ld}DXe0}*11+~7%dC@~i0Z)Q%Sd<%l?bcpFtyptZs9MkT*ur(0r&A`)4Jx2y>d5X+ zOZ`f2Ksfk>4C`FBsUZ2iaMFu)H?ulKbgD2ON^x<}Ftfx(83MR5L{leDaAhwkskjAZ zv4Z0&AyD+n*t`_!39M5HW%jp{veJ(W=8NP3st-MOA2W*$i<6&smydAq*A7HpMr*Hp zv5sc%2dhbfy=gMsb#$+^sOXw<(EN$$kEzrr3mOe1RFawZriQ$w$SgO4Cs0EvE9|IF zTm5F2Qhg9CIOO=vO0S7qjFPJ`gHRm5P!|#fM~u&n^CXqq%v@ghA@3z)4?Xzse?sd} zX7*P_= zXWsGM48rtEOs75o2mV^8TnB*!BMIk6t!DggW6nPN)10KGLay9$ zeXTIbZE9t*E1c1UHP6*%L-)?^&^m#`+#Zjr498`PE&VWPGsE)6xy))~F=SrVi7T5n zS1N2QE7RcRosBq{Z%dUTLu{EU_K@^XSTC1EkFLZu8xtvFj;1h5TPeeH0YMG*mY$66 zf!@(&ulvb~N%*5QKRUCRz@R|U=v^A60XCj%n+vaD)H*dOsxBK(hrBq3hXBzr^~~n( z^xk(q-6LJp(iC`rB(+_2_bG0<=8s?G-X;8EO4M#K+`OywC4Mrp;$)OOLS{Ld9+&}+ zF~cn`bH@%awK{XNh}Ov|)eR!Qa4D%$O!*(8Y(Gw%!Sbp`?;7U~ua^!#0bn!;kUb;} zRstPtp(%fAH&@c2kY`Lw8NGh?5Niip3~YGWuEbxxY2DvYKVGqpLWO4_qJ#?zITp+H z#4hb(YIAvRpp%^)snLAq_a50SK~*8P6#9X?XbtE66V?)5tw)P@IQ8JC5`mf*a*p?; zcr3GS=9)1G{e1&;5SXF!%QHYZYZp9>B9rv}IwdBh(*w}Q4EUdQ6dyrchVuFxBGUz; z_9w!f7#*s?V+FJ-haCA(1?ZM0T$rv#4nJc!39p7mhBh}1U3xloBQrWaG{26r)GK{3 zeD$iU{jSWrfqe!~OQk7igJ@MaC;-?ZPKwy}XFvdkvwOA{G)K zw{ajqzNYU_2JQCWIdT2)_F?jr9fw3P37EhE;J$|gwW&5c@?`DqpWR6P^yKb+gt=a7 zST~cPB5L+d@&gMoYj-C;4u%LCPQyKk+P9o=J5nDqsv6eX-xo`%ICoInY`@7rG@klbO;0cbVoWi88m3GBw*8tU;2849|f`tx^WD|oW{P{)TWcFgfukLzK|iCT=D&(Q1mZGtZD(oT_Q4-H{F_5ehs&=XKd4MB?#HWUMX@6Y3>Xr#qzc( z@{2jkZp9`s7;0Ym^;^BHCj&#Z%yZ~V_s`@4!Ix_WaF_Fi;vcz~NYFoT3kbS-M#o)U zIV0Ql5d4l~Zb=f;Jyn71K`=NF7)xI)1SsLDWTzcBekKwd9X3arn-WGiv}$gaK8(X` z#zFw_7&84G*;>WmvJI+Ix4hp{^yC3hy!hAqU5EW$R(R8e#G#Fc2zHg+SaT+OHIOgw zfDb9pz-;lB%AVPMeu?r*v-A+TxE>@Lh8zEvsl&r(Dv}3MC@}5rj~Ct<_sv(1#9U@E zeTV$Zz8g3>nK(QB>-PUY#{YNj|6c??v^Od&Wi-Md95$MKeZmMrD#a%L2#jCybSD>wSDLV5m;D!iz6E-|pMAgN zrlu#Y3EO{#?YCYAcQ*IBB30o+t_qm9_?oN(bieZa_Cwr6Xos^rZ&jlsw=FPJ`pJJ` zWGo=VM<$1@IP)^RA;_@t4QNvkQ^iGGmVe0E^$dWnE4~g;>&$iGm94!t%VDfLi8gdu z(_jcVAmN!C7WWe80jJAO!rLny@^~`yh+B^aB9LjTzK)%M(4F2BiT?soG}L5LP=vr1 z6|sCD|+ZyKUXstL&pCAMb6F(f5c>;Z|( zr;?A)ql1Mb2BYU>OAo-kxU!g$(0^;jTw4G~wn;SSQ}*b_4A_5MY!~DN&>7TPxFdz5 zTmaKI#N40xR2gls5SJl`wi@)-mc~4mvlR*^eFdI$vOYB(!(o>LFhj%*j+lw zUAcqOCIYT{r%2-;-`Kzp_u@K6B`x%co71e3zvs*O$$*JY0ei)7-GN~P_Ff%NjH5+E zxCtwPA>ST0$CWflMJk~|Cz&CirRmzX7)le6hr4MmR#WXU1Gv=7lrqU!tR&-wob{AL@C(mKy3&VQ%6`b`r zXZhe}JtKz!FnuWe0A&I?#-XnT-{?oEnvnmp7<7%t9v?;qF21{+K6AdnUD(7?<}}3G z;K>RNZipR5HXqY2pOZ+<5C)8;5XM1JnzZ&Ejea~wVJcDhc%16R7mp_gf2VCUIJaF3Vmq37 zj^Xp^09Alb)sQ0>j!uj)Uz#YqBurayl36F%adN^K(d2nn7xr?znC0KYq}YIg zfPR4gE1_Vpv2eGrb^5vgACmTbLM~~!yOawaCyQc-dje^S)l&}xRRrU$Tc04x@cN!0{UMkH zo0yAdndC}PU1UHYr(R%}Vjucr1#|xMLH)O(^s!S=Pg%a_6OVxnZI+jFda*sqH_qF6r~KkUCjn*;?7W18cOeg-+}Ie zAFDCQN%3j+vT#K2JewxZB$19j4u6^QSCGH?GHE^9Uj2&^72toy7vewoVz99@{=eyo zisz9VU_uLi{(_-Jt>JQ!1{DD*10iN6Vy+{C7-_Tky%%a-0;2MH{Sud4e%2e$)xFKl zy}X`2}K6IW3?f!p&(QxkXUE(A6<&-$Ky%uq)W*xx-G%ySLZ{Pihd zYUzO2;k?VvHL4_4J2?_NP1sBN3T4LWC~4NJtZX`d`i3ouOIpa1o=YneMhOhUs!a;! zdzZ=yyL@KY_dQD%dd3<3ljpdxDq>cGiLOsn=Ox7e_?8jzg%YBo4=kT%;?8v8!omu& zHZ+^|sy%O5CY%I+?0mnJTFgCBlO5|x&*q4IeFYm|yF@1T7g-KIcIP=6mmw+EQg>j0gJ@lWMr6QWX!au*x?{$9hI+T0p&a)Ln_DI01o3^^{yT{lG zwL)=4iQd>TAlB!klgT1|)opN{bz{(5QTpYoBMx8F3^1@4wlg*{VlcA)t6KcW9h)>D^>G)mzq0Ax ztu?}fvrNPcQFxk7c%)?1n1l{t2uLPx)%%!o0 zWnqgl6x+3=wAwLsoM-t?p0B3NG~&ru*}{uDyq>Q=vk5-0>q3F7F*ZR;hS*uzDiLrz z$uJyjg*@r7;o(o2>9glhZ)aRpVxGuDCO0kXIhhMZ(V+Z!yj)#^5z9gs<&~pif}Riv z=15GRe`YrUu%$6AL2FRFv)_Bp}LWFxZO#4dL9C<)6lx`YIv|0kn>H@)hoTy3nzxun zQ-n+@?F%c=FJj4(4bO?d$mjLv!dQaSSiAd=Guv#;N#y2*v6|l(8-C>n7TSGiDjSui zAsp_RgJNikx?e}*uQQ;P!c)QtiG^|!zyza`lBN@HKb<&iZjjBaE6U6nUTZ;uxndR= z(kjKD#OrEEpZgI~8YLkfn%@{vC#&=YF8Wl~UgLmw9+hUJa8Y*pp}7R=?K}kUNW`hsoTmm*;t{Bfu?3 z7AomI<3{d(tHr>M5n%_%9pf-jfm(`729eRmyW;{id$a#BMN^tVn;5`wWGBU{g96e4 z^I{XCRQBU}C)3i|C_$Mx=g=`3gi9@#qI?)4bU}0L%R zCdPR>cts$40pn@TR0FGp{n@4lC+g|67;aGq>fN5-by-;-QArU%QK0PDX(ISoU3g+X zS&A@l>OSb%v)Ps>@@_9k4@vt(X2Mmz2Hn$CM5I`@yATs;OaON<_!NSTk!Hcv5j|;| zP;(PEG{i+j`h>D}pZn8nqEiygKCL&TZNAZOGg}YVAG5Y|c%hImu(=)&BB1EmFCalU z1a&Ov#?g8-E&*IAavi{!T=nH}<2is|wp-7@m1V93M?hi5qJt+6yzcdy>wU9dYu#y~OJ~Sh&34t)Iu$zPPV5Fg1g3gpSifIucYL9&Y)2~sw(HBNaA4hHQF4rc-JoZE;2`{Pr)?{mV>6*S99cJ6a^1%VnIxw` zfvngwO7GRUXEPQ{QWwx8w4cAUj!9!kGVRYE0ZVRdJd(9&nBu-*2Pe!0AXLmYHoLXH zAYCHe?FVx04dB1T_C{Rj^HAaZ;9w7%pmD$y<~0*)ken$)Ufkg4i}VR%Mo}7J^YZAi zjh3p(C@)&78u4Xt=|#j?;&&VF#1;SbLUpw(>n3O!Dgybt#xAnfXwck}3zLvw)@Mk_M(7m zW?wNjrw-e~KNln?5OdGBpoH0jh}^y8Dx^iPw?<$U3c)#}`|Odc)2R%F^CNl0Q^41l z9K(#*%ppYyz4aOeV_SvFno;p@H8)nPsy+kwB3EAEJw|PdO6!J_P8(A8!-Lnikc8R8 zgr8i{1}hSS2T3_nA111zE$GTOoU(k)sa{dP z$_?gdeLe;-&T|Gw`4LoZ?9zo;e}iq##FvB|(nekkeGfG(z91%m0l4Qh@yWGxck?tJ z7x-aDSdK7tr5zMxg=bcL@+4RV=xJW9@pIt+v^h+|_rJ;%_EVN~BS7{1d{m`oOlmyP z%5(ur(YiZI7Qzt$D-@K?l^lk-2Cz1(bVOVMSXm|U7}9F9E>)l@A6%gqj>A_hfRhg* zkKi8s+h%My0xm5rxa45&H_JpzwD(vac%fy9c#d}O1CG)6lNN`ddxBL`DZDXkh|mv!z)bJa;rLB zLu;VV9c<)&aFk+yK1o{Ja3SY4sdy$$PwmyOMqac`Mfz=Wq#atyuv!2wt??^G{Z^oc z9PD8wSca=WouE&uVT|J-S##YK+GgQH;R*zS&Fq>Sf>_FP^g&x1Vp$m1BO)5~^s}0H z?IhW6%MOk#ihPdLfRi1jrb5MiN!;sT(X|Rd+*#0H|5Qh{?jZz-w<%Nnc-0ZK*RSG= z+J@(#TFM8ny`oEA$}&De#x)aU?~tF+DfJXuC8*o@3T${6%OUXJ9BuM;DhHLTt>n~bhsjIaN8h10sunDw94xZ~)! zlcJgo#&I~b$w+R=N1%eC`txc7QWj0EokY9tDczh4e>JWu9~V)yvs&v(M0Z)E|SimF)H>-c2EmydshNY^8NM?$wA)W9mFzveO(f zxZB^QqG}&&iz>>q0umq9T`Q$!iznP|>O|gZtS)@}c&;LaDVCw>Vbwgr@lj)c%@ZEn zo%8V45WRZH%i>bWJp5TftEOlb&a@%2tS$B0k$HRHFdB7!={8+EXCwNV^{mL}9g1j- z4tk5yr86OgLN|IB_<&2aDe-3grWqyKo|RUy6%{K~3E@!}>O2dDH)I;r?QjwcS7(g4 zv=xl74-?BEeup4}wo9Gb=tJ5`LECho)wO!C;5TxdV8>jsjYi0?cZCU>%o#k64E(l< zB9;2dSZWuK=!HWBll3RP-L;5LTq;4Fnl6?h%7D&@9-Qy>9EHN8(B^7TE2b-d}CrKI1+NHP5oUEg(AR zkB3iDih9ic0-GVjUN13=2VNRKU7h!MtFOsc znMhWma8r$1c0len<)$!qp&(MVF|`od5_PEkGDNe~r4TuGJnMeD9Tqx8sT0cX#)(>{bTkAwb1h(_Ue)- z#JVX)7%OpPd#EvHgP>X+*<#(+BG0Ni#Z-MYzXL~2R^yc}Oj}x=eYTSuHABmlZnWBd zQ)`T~!0+i9LV~B1n0>)n(axkBV*q7?X~MrZ#|8OlNr>QpfTqa)nIGZ*-}w<`12Z!d zV_|bU3nLRzcjtdU`d>_mO;jC1025ZwwHlZUOY{^%`^w@XmIgi(f^E@>3=?DxpZ~(H)H_F@OTWVQTyh3+c#L{JdH& z^-(V}*@nmkS+$J3bz=TZA~k5SNCEF8fG+?PGi#LG{f4LiuVO)j1i9;V1B7geUX^8(6juG^4u)}-EE))E^@3S^CfLht)|6jto5fU-gQ;B z6#CI5|6dNZ45$n>YggzWTqs z6IH4}g9n<99p8siD zG5VV8lUt2e`w7RWo3tF*wTb^M<>PD_o>Y#{>x=zhaqpcWz}>v)Q-M2a^%D$%?Q4F( zu5WW1M~RpyieSWOZM-kXqH|*TQlfJUkvDOS%4(s-pWrmr;bdJC$!CBOsgNcRt;*^U zvFbFTk)o8jj@@goEfhEEKcN$6Fg+Q zs>~91+Q)~r`2w^LAQGmAAKT|DEJn5H&kSdW#J9QHHU~9!0kOcRmf>jnkv4a;J1Z7{ z8V;7VidzEe8zjS7%sjxfy+@~9B=@ez*MsQ%d)El!lZwO#(-gZgY|S#xfF_xz8tJt+ zLAERj5n*4#`uLVgq~xGeDMo?*CCI_B3^8)jP_9T*I5{r^u0t#Q7EJWiu`)yfx)2|S zA|obl{+2q~i>J1qX^AUZVfVYmmT(CxL=J5Lj}enjmOKu#4V%hNZ{UY$wRdOljoRmv z=EC|PNjVOsjTN_{?{^LMRZX{tgKZDnbq{Q)yIlzW<+u@3JId}{p2UbuKn9-Y(E3n> zQk4*F6YwctpW5exru*BO%MuqKo40Tu9gUp=n1AlEDE|^lm*_Bim8FOU?Dpvk#)JMz z7!B?~|0`MxL29k@Nv_q-R~ik2$GNhYb5F=PTouGQA`%fbXFYbrrPdMZ@G%6Hp2~eFJAPi=fMQQw6<#H}QKU0X zc$)JIc90Aun%s(v4i#lW&RH?WfEz1NSVE`;sdVfG)-#?xM*GXr!?@vi7|EFrH#?cBv?d4?~Z;cQ;DK;N?Nc%`H?c8b;bLX^?{scRSxXL85bdj&UNx5ngv4Df zQM!#zanKT%L=XT69%bY12gzbxGO=@I-M|yMBXHyU0{SpE5qP`myHCiJy~+_b1luRF zZftt|$F2KyD$VKWei@Mv_)o!TtdfuxdpEMgdP4?bGNoH#efb&TJ)p4k@S3>Q?D>Qm_?6m+qP}nwr$(CZQHi(^B&u_Jzp}{GfC6* z2lS@h&t7XPo`T7cTjQ)#hX%qjAJ;Wlw)K4J%~G+*31*~@Sn%|7H}iB-7P3r6%O=$3 z#1F(hK<#NH;D=saeK{hZ7%?izhq%#Woy)lM{rw%u6LLf}hphM&bxzRGke1WN*w4H4 zm3Sh05TLj9Td)^8E&6=KPNJ67-*kiL$i3;tHq9vOL=K7_kwkVL4XhA~u((H8C0beb zLQc14zDfaRXLh(XojT9vNdF&<_OtBhjf|Z|k?>I%*h z>V>qVI3k24PgL#w?;Iqe-V{Q)S=cl?P3&6t`Y4~4Qj{frrNRad>r-SuC4SV4jM&C| zdX8RieV!4SM<{TO5M6|PeC+E8xrH$Uq`6T1x1=~fI_6jR3&uijDJ-A(6s@83-W)0K zpjW0{$v92R)5tYi^XGc5?yChs!yQNs2Z?muTsGei&?0shOXt^MaFD)*Tb?PZskl<1>xy4CMth@ZZo0>{Jb&LiBWX zjtj+OUPuqBmvf2T=+{ed-e&L~!yk+{LG6uc<0Ia=^EgcpptfR5&?_$vsYzOTs9DUh z>LTg!ycSJc%o`YcM&`58fl!wSoHW1};gcknpp@BYnjc?!Su>V&-^RzG;@b2dq?Go3 z)0nJFI1Z*XM?p$8#@Nz|eEHZSyMQwnwjymUgkLy+Nm7ppda!9@*&B23+$jH)Ph*1q zJ5{c+b^wj5p>(u}!(1GQL$tbcGjimqko?$(w?ia)SGaC_(M@8*icRBAAuq&8^)V!2 zstw!G*v3LEo#lxbj{(Wp&As1trW2Ul`)qI&h;!h_{8Fm1}j%>k^8Lc*5<2&ZN@0qTVh`Hdh^$PTIH64~cIJf!A3h?7U| zP)4K0OLfr8v%M*puvHnDqXbjEvKud6bxrm9d0t+9gjPgihb5)pw!mqja@pJs?^$rq zsWz@zLBz36Y&Pvx#5}m1#*NEqGaL=zVh|wim1U}@{FT|1Txz2SuzEVbmuUGdKP!Ge zcNd2q!$t)t**xXJMlwXrcIx{HU^7IYg-0oF4_bU_$6v3(_P~5kAehV7fm}v98XR4S zTVany7`U+VHK4u$bN5VIF({h66YL#NlI(y`d;SEqH)2~2EZij+H-0~-kQCRoV`gjZ z&HT+k@zPIyCd}!@c{YLMDc_sgDAybTZ3h88;|31fd zo!9Fe8@9^)rE1zirU^QsqBLIPw0B=#{$+j-2<9%8zfC>8_qh82CypP@*$ENdl1&Mi8&d32nyaabkV)8L>qp zu~q3wIR0FCXwWag(XQ6YrjSkx=bz+#@NIrFo}rZmf09jD>bEA$tjUYo6wS7ty5v`VC-N|F2O7f zcIKSrZGDrOXWiQWX6-%s=-u5tW#2tz?!7e|%G+3BQXn`7Rk|W{8FZ@M7DYFATZLFK zEkhAemvwm;a&3so9_1hZ@ZIJ8S0&Y<-7$BRa$VO9zH^Z4ko~OYW+Z%mg0J^Dr#!;L8Fn_4CnM)YZ?MdGCCz-o@%}&%)y~B>&{Ix*t4oh_ zP$f|fv(Q!kR=v2+XiJ*@cRUlm_kCK5k@58N38NQ=iMLm*A+oNtV|Tc^<7s=oXrwB9 z+*-Q#1pB+M6yHwtt~nA?!uP%@z9bdJotI_IJ>m>gl$4~N=NeZs;XgDjHhy%>o9fSa z>8Ta(;@0(=GIs!MrOQ;72Buidh+Ns3CJaZIH=4YRw~L2G%G_QcBHIt8NaLw_*;fMh z?~`$OZ~G%e?f2Vh^R*cKrhOAU%ZJjb9R0c1nt4x4a74Zzq&=fA=jq1rHXVHdTYQZm z4Lg*vDv?Lln7dntx`m=#hkt3YG0q-g>~^WEKu6LLb}-BD2m z+8BX>-SfXVy+`>1+TB*mbn<=brIU~R?y@Cj=*aD)L4NEJA}BFgpmERBqdRfPVVWoH zoa3N7O6qmy`L^DcS0y`8vdgp$A-P_vUnTWZ4Hc9gPkDHs)GBDci->n;*uV-3GstXd z*odB~WUoz6c{LN2O>x_nlkIe;km)#LXtFR(e@yK*6=F4$gpgo_Ay3hjs!S-8O)1@S z@t~Ushs%gx*7qM-GF+>*X?#ZB+#6@SaWjlis*EZ5>YJLYc_M9e{aj$~=r# zPkrAcxh_kQ812M$agm!i#u|8z+f}UTfRPSgNjez$x#GvthvVS~^xb~#(vIsF*nU!y z!=sN)z4XB3eF3y##}&6adHKKD&xG(sd6VVlMy*!9d*cl~t+6dI6}sM;7JHd@DVF@l zptTS)yWT3<*l^O20~vqzc$A4X2c}CXCe)q3_>+;()as%IJDN!LLC9MQA8HSIk!4F- zMVsTvLuky@T(a-xIFsg1T|hUzHkT+AQ4Glh?OtQl=-e1QwIw&$oI|$KIC_Z)!?A~! zcVdk0%t*IdfX(E{fs4@vHu@GiB*%hP2BN+8l$gx8N$YzmAF;+Js!Dr)-H5Sa;j2y_ zr5vOv5OV0$l5Z8ellKDla#phHo_NxUcK+wdj09Y2f#^yQA&IyT=~uo%NlFm0|U9U{Bq4{k~ir$H&gE@_ukA|oF!Jj6g|Q< zLFAoXa&86euGuH*sfAkcdS|1;1{uRVcbbj%_z332y13umM3#x>Qg#_L(&<9%ssUd* zYk+X}^M33M6^?rWFVvt!O4L<8JGc8B?3bV79WpJ(P-^fpg(NI%fRc+DlK)Kws@vNLS4*_s z)?3fGGU`;yhmh=uHv3#LBtgu}Zs9Lg+ujwRh?lc2d&s}?-IHy;p`LW1rf8O$%l;Dn zTY4gT_%v8B-#c|@exv!ZWM(9f!e9^UWq6;2YMdb8 z`nP+2u^h%l=ak^tYNjKg{6M|kC?T;D0B`kBXR0Y^7aLL>D=j|epcrmABRf=GsZSLy z-jozaq+KLW&yA14xVNOg^;5;NLb)v%u>KMfL$jOnLcnpCqth-hq_Kp(ar&kRbKZAK z*lD{U%t##Aq_K6~0p@SZpg*ItGd`h<_1jq9uapBH55e)JIK`ZndOA>_&HCb7#5gOl z#XKvIOaN^v&3t#vZ`(2Ccc)J{+CZUDXVi>U=M7a0j?MstWh5ew$O-_ z5q=N>STnc}JFeacl)?QTC~a}N;}HbMd{8g@pbq2QyZpChN(;1EaF@T5*BNSnJ-}yr zLnp5Lcbzr@EwDKe*mosjU=FLJ@W^ic>I+dLaf)Rk3gGk&K5^HDps_f^+WH9aYz~TW zMmk%gak`{Tz~;0zwhlY(tl2mNnnVO}?aOg)U;SUoC}aRIs)`9h^WP*06$r!ZNBzZH zXzDe_A;1^~b#QA<5-t>!KqVoY7+~~&Qa%)b9t*b~SR|AhlT(v2wg8!vnD5{qDK*|x zn?gQ;yA(2UuN)E?P0>te$1#A#CvZQl6kV+()eKI@P#}nMOGlEKQ~R_XyhK2Y-j!XA zXi~;8IEZIE30yY;I5%A9gmtI@GN*{&j}nY4tc+s)fn0q1feoy6@N&(UjQOQ50NxZx zb1(j=hDIu;{s&9|6x>-qy@xxw>zb+=d$BA4RZ!|Vl?^+uyxA*?jn?=*Eba-fpDq9Y zSW(~*;1(;itC9c!kLm#b4?BwK|6)g(+PPS|c+#4>{df3(@KIgB4YdAkBtAA>t*#hHH8Fs zUAZduNY>WIC7vQL8%dmpUoh*$9lq3D-lr7;2pjiE9|ea_0wD~H;QVtwo}jm=c7*fW z$v&5jYE9hW^j9!QMJ}4n5ikPv1rOLK9hI8y;hdD3#_ds>BUyfPD{i=Bj&n&!J>C&Z zG4hTyY_6Tl*XnCI2$J&khRp9m!Eqe2JyJS-VbQ=RnTdF6`Fg&`-+ZP3y23pX-}yuL z<3d}P8_WZv8W)?9F)iu7R^;u+58Y-RGQ0lus@Bx3NPguw1%U@DrrOrxVTYroGZ^ZV z1)o#85l+%5Bm>XUJqVI`%<|_$kyFOoK8akbAK8bmtK;oe0snJl?u-y`Cst;sIFSCl z^+Z!T&QY%L>-sf3?_a?qiis2EpV&W+-#rv_J0FU$_9JEph>KsfMBcznXiXI)k_xRZK zYUHMsw5|qD_SLZMVCDHXU{Bnq)YudlbHyL>^`_P`jY>6ybZ?8`R%eli+@cV%dN{$& zP7G`Lw_S>s>N?U_b@b;kf(aS!)Rl6*OHG=X3KXx*aGPC=5GQL?H2#i;D8_=0Kg|8EnfngaTc9zJHn7+|xlr<) zna8|xib7n=kfs~Kx@xh@D6aPkB*DXBCHZ+lBa$wLcxDC+PUj~|4U4IGh%-`PITFXk zh)Y|A^|-yd2Sb+HszuhHZ;$6Cyd@IA&IR!ZV;_-qztVKcALNX1g2uat&El$f9CHZ~ zHP#p)L2*@=^Kr@OAUHeg{gR9DlNbAgbvSuH7ih-}{k<#C2X-%jpI6#C&oG%0X|O-B z3#mUf=xvn1>N{^6>99dma7~Jb(SCaP474G}dNoTAwD#kG!EC16JEfpmzl{-=FuT(t z&}YJNPeb4$&;`m!LZY-LPOEv)XvPJ3@d~Z1E=hJjn!JZ7(7CjMRREcHpD<%rVbSi= zVA8_-@E9H2SEswtZnKOt=0}XC#?75L>P;NJ)f56~cEOs1pgqa`ADMxoPpX)b`T4%u z<_!^skj*eKs>V7a?s7WUyZeX;gXckM3IKj9^v`4+SzbrEAIW^wvBDJ`vBVJ96G)fY zHxT^1=Ll--Q{gn{LrNB1%6= z#K>aN=cckvFs8KpxQWPv6g*@zYx1dsI+!9ys+ww&_B>4rD}hk6GxO``vD3)ssf5-c z%LcXxZDyoIlM#aobkAV6Vv(HZ6(4fhLIiT?cC+8Akn_IX6C_y6PDkvIsGmcN9NwY@ za;#gI-BOdA;HFHDT~~!5%kXLICVV^XG)x$7@~v>HhzO#Yd%#$81a|Ad#;%um%QXVc>YGeMXh%g@ zXEIs0ip2KvQc(h;cqU1A4b7&CI{HN_&*0p~sMBU|nj?D%<7h_+PhappzEfAx7j+)6 z0kKa>hjGgPl9y@0a$a-=4jH%Ix$LL!y^&#A9i6dDA}2wf<+sRZin26TGo>m7aL1@+ zLr!VUKJ~2~K8&!3Sg$wfhdCom0sDVV*%EIq^MWOk@Fw7oV-k;Bh~0n_`QF;-MPj$4 zqv6p5dFq?g?wln)SZDI35u|KZhX&|Iks(ZPgddhF>YjT>bSSjY&4XIv8X6o()_|6*Riroy?KgN6EEF4&RTx0##Wgr_=ii-#-ICQk7Cn`) zmGhd(F0&dMZJGs8+RJ3D<39c)I{(@J_8s8IiWFS|xnFjSf&0+Diu0)7 zS$oJVxNii=9-9l*aLRD#ZH53M6f%!%wPYgka6+Eo z&9H|`r6Rw?jy*lA+uo_@#w5Yeg~JKJY@6Hcl9|w8_O|pjp)Rqk;7xfQ(e9FZpaytb zklrk6cVv_F26MzNf+o#eVEuu_mAOyQj?kVRj_v2&Pz=Wv{Q!-kKSnjA)X)4oPKG)N z?|9vos14V^P=vcxsjsJpEbWh()ic|Mr%<}TdB7UeoUAb+Xvy+aqCj&M5wT?@P+P%l z(~I^N5=I9@Y|8qlq1}>34p&>0YxENa5j#wr04y_aoB-Kxa0viWc4BmB3DLL#GskC> z8MO^<_uDGB^PR2B)l3~{*hoE%?8Wj_$?%az&IlM#V!#amzmtgj`L-~`woqSVwine| zsN$oitGg4GydS9lGYS;tRorFUZ(C(pP5`>9{W_eY% z&8&f<9Z%$2`e7vGIumFYD;P-!j0!E;cbdJM#ey&tS02pU&DNNG6D%wuNpAJC(MHD` z$pi|K*D==&B`0f}=d@Nh0l*HHhO0pC$SX5Yh!_3iU$Sl{t;DqJQ<@dFoMj%k@QumW zXcsSfHil0cDc``UR-_7Ako{R0f2*^O$Ryr(jza@N;|vuYMS>YQdZ#oh3uIsdZf+Q> z=wzI=;NC4ktq^i_kZ_$U-RBlZSuh7}cx?{^b>l=b(7gkpC)-UQ$sa@8cP7+^cIV@s z-G>*)!ggW9&c7va|-9KM5z_>4EehcpmCPnS2|eBPtAF zND|-#>mAyM$F%;}OECSTSFSxH!EPDcOgBc&-oqcLF~ zT>Gksp#LOSIh6QPsdbYf|Cvgpq4x7Zn`tgj(_=!>d_w7@jOAiV2(MJVE2EwSsMZ1+ zvQ5PiOXBxeZA8vbJ7$urP@SUWasJegPbx@xwzLo_)s$aSDKDyi$%?Zs`9~xQcdJQb zU+CD(mclfxfSTWVl?8I)7(aeAl5uI?y507rhK^f?3Rv-JF{nbgSS@`(!VCjAvDw#| zh41BZfs)7-i<_E|bZY0?f>~8+nz>M;G{%|L##)TEZ&AUq4p@VQ^B|J^7ZPR`jf`OC zncTcajS)l5*)RA%Bs%5pQf+htM~ER6-6gtsTAO2N!DzZ~>SC(Oa?0d}nZd6uSK1li z=@H?r#Tus|fVEF!K9<(iZM8C(;Exa%oq(WiTPL9yK)eq0m zc`Yq$BL*6*(|Vt^@wirc?^?UvOV0As(R*hB^k3dh_h}Bk3Eo9$n|$xS=xY_S5N5eS zkDiJtj1neyLyqW0bUPU2O}Y8nvLslbN^`H3oOLg=iHx)F1 zsw5J&3x6UcD(H7K)-qLb_Vlf71xXtFF&Ua*p3ScN_%D-MzU|*g0MSnK*}^aQ9~Nhk zi%5xp5+|-h!7!d5+wl+P=fR^MyIl0_*1UgeNI=HE39-zfX-9^VC{Jo?c5sGk5o{GV zG7Q}>C=4L@pUgh+4Ytv?hL@u5T@QS=KeBomZeI_nyf8jD8lp3ME~pQt20`do8RB?Z zAH|2-NI>Zh+lM;y+-A9S@#seP^^WY)aRF)U8N&Ted0kvLA(kk+_2Yoetke_T$ITZJ zNIP58OqW>3FN>Gv@MK6wQKUINYR-ul za9&mRj=0QPiIi3SqIMKQ8%f|Nv!6+(m-~O@nw$gcx$YBO0@V?ynafYqlX#~6aOTbD zq2Q-tQVH==X}y{cU|@s4uBP8nqSVwl4q>%Xu&JYfs{SFi zD!CVa2d)fZAA=dN_k-wmpD_g8KkCKc6{=z5!egB=9x&2(L#0*05Pu?yU@UoWvA1#|dSx*{B7__bx7Q zhZ~3Sx_1z@pWwvT72vbEkXxfA%Us3x7TPQ(xyg7Rn0q4%9A_ePDY9tL>MxMy<>N{? z_3No2&aIp$__(GQlpxN5KB1D zxxO&{MU?WoYyOnE4QE5rEPL87$QnO}Cr=;B`PClb7U(>rgyKIBA1m>=6{i$i95!@f z>8kxOty4V@2)&XXz+x|sB%+iDCzuT$?7Wwm z4i4H*(Xqhw>)5TbvD)Q?-{J4uW-QaEP_$Rj3t5WtvJL{Vh@P6Hv^b$kv?ZenV&S1i zh#D%{`1Wt4Qf1{S5ZF;-qFU`-rp(JxI}O!tTMj$bKwxKIy-ZTQ#c32JRoRoKk4dq; zKf7uffid?6)W7iv`Dq#(6S=L&Lq-@Pb12~!}s!-LLY>b|+ z(|M&}xtX4XzhbQPaLx63iAk?(%3o2Tu)C%NBo*C8H$>^lo`F68goZas>T_YUMF-^n zJ2O$ErmC3$B_5}BfgL&b6`&PzyOgu_z%4mgEO(8ftGUtt*5q zNdjNbbVqeY3aQhTbcaduDX04G~{gV1m=e6eATbev?0#FT<8rKS!7 zv8=90h!3Ns_Y9*CsVPa0K;=F~DXa{q{-F!;s}*x# zMVIsShX1^5jSygqjWk_ljdK-cFlcB`-nh>_dv8nzU)JM0W_^7{<2)qVdre;lst}27 zjK0<_VKGt*7vx;ONY)7B>jHnGowzylVHDaogcDdxUc^!j>Go7beM+uF)4Jjt3oGQ0ou`UF4~yA>R|Sf(n~?yy1GWkZ443F_TS z-=}^tr@5kj;wAH8y;l;-BlCuyN}R!_E!atc(cr@by9%woN_DW>Y>Xm}_CDuq6u$5) zsl}5Xt{J^iD&hmm^yP1k1v3|+mKpBpx}y7B!N8E(2dwBcL_~QL=ZmLF%j0ZjJzB~Z zu&K4m8}3{$G`I!ONdLyX+8Z-rv?M)+3<`JHL96+UncyF=-+hj(xD{25loibn)@6Ta zG3W`HQJC@cpXjkkuV8Lr%kVa%wv=ipA{jW)e4Dx-KfHnUd~mhcA3%QUdYx zsNf#_EyGl0^X&Y*jzaGbB)j!R01140lfs8-Dyqbk_Q&IG)h$hlRZVQ$Bv2I_i|hsB z-_*w1>(XotLHWqJ=SLMS$YCud2WdarHBHg;mV4qw?uS@Oq_K&3NI<4#EZ>Na2kG@Im$(=@NA z+UF**^et6ReWS8^Va65IyL29z#9RB4C1F8{awoDVaJZFfk+FcdD(8v$qqwWNx9kbv zeG&TL>-Vo_EN&{R69&6a|F1yyAPbXp&JE7_0z|`jp_ZCnWHx;jf1SDJ^S8rpYg?QJ zzF#(n<5(aS_6VGFJ>ChFQCf#-!bZmk47MO@n{%;aZpmW!3R^)xnvk1bg|GgOoMxyK zf^K`71-hjpT!~n}vj9#=ajU#+)}@;h^Jg6!JmBjP|VbmmzE>?aJz_z=mb!eKHPh4oGR%0h+s~=o{>IDQB%OuksYoJn1eogLQ>B zmf1wFmbtF1f-9;TZmU{NPcy_3%t{C@f0{!p9oavg`HexX;&-+rhKiof!N+W#QV$wq@sCxN&5 z$LRfZ#)S<)gQl4ea(2SRK#WriH1*6iQZzn0NaG|z%0RV36G>V2c@34Wb`;7gaw|(Z zhg6dkO&tnalKz)RqpsXPkFR|~E!_zy6+z@Sg8q5InRZ@cf;t7#1lr|*GUI6!P`dFkDQ zmd)aKU3WA`nC&9i>V+ru}gs>l!05|yH{ka2Bm z^w*(+Ko6AW_ZLql=>-IBq*4b$Z$BveK0TP=W!*y+7bzZi+g#u_IJ-2&a7mtJ%WJzX zbs`zKk9Pq)@s?z#ii6)y^GC`NQ6`AKA7AY4iNeiR0SXh`bkrS3P%(qN=Ww7HRF$AOR!IG-A5rT6c zGx|_`@!0gGUR7;Ev%(LQ<)hQ&gW8nrpgKc@4>qB6ukN_g$DqPa@wVU*gx3t<7N<5* zhk-qICsYRNC$vLkE96 z0x(DEie$^UrA&K5oar^IyDynj6nEuqdji*%8*}uT{!?4_hh9D%GL%s?^_%wNw~F5y z8jbW}iB(U`k@DNccFM=itv)h&D5bLdDk^h#wvUvz`XXcU%$}3}xM*zG6QEDV;Zm|w zu}W@kC){dJ0z)NSKo5(!JNJ8^P{$4aMi_!aXL(ieE?R1%NEtD}kBE08SF{>uv2n)b z@fAzpcoLhv;gM!{(X`Ycd?_4Z;8^y+y2sh<3*reHgL&!KfKPy)hJNI&^L zljFKiK92h+ag&uNSfe6%?)8_0y;XM_I8uVG485AYUA`rx+lvd}NIwVNq3Nf#xeY^S z+M%mTHJ2V`F6x5(GZsx%mMz5*A3At=GfS@@G`6Ew@K0>8mdUWxVql`7tXV@FBJW^`6!WIDc6Y= zf*&gRCV3I$-nJY1W3<*#1)rWZmb*@QC`owKHe^m~$)?6kwxJ=NF8zz=UYJ#EEv=e- zed;4O+JY0UVwC+)N-QNeVJoMj?mtmz(Z(iM^tE#Ixe(gOBEyIjHY}%4r?!UsI!2QO zpyWrCfNX*2zfa!ryt|Zt$=m8xqR{1>Dn7`xOQP1R0sZ+QA9^ouoAurK3dcSGA?l&h znUvx&15aT+2;n7-pyIL<0KC_>7lTNT5npE}>fPkHr_K?&UUR^izm@r_F> zUz*V!sy|JJycERGHN+X83U!4;vRM0{YGV490?TnAqzH>9VaRhbYH&4Q3zC|P;M#y)cp=7z}6bYLUKBFk>#dM~* zW`@7$PNJv;B_val^D4>u%zHf0;@QUTyk8{Q$7&d}Q{-ACVm|oG}hA^Y8tc54l;Nj2ImN02m|w ztVRF;LjG350SW#-zsnJ;DT09jfKuj&0D-?@5A6Gaf5u(^Z~*`4K`bNniJGK{TFSt} z;?Tre$lB)6=I~m`>ily#7Q2{!$#3Jz(w0{#s_vwBx{NE6Ks7AkqCsCRMTQkEX6d01 z;Iw;Meg|x8{EF!Oq1sCFb<1IG93|J7x>1d1OAd7O=(~E`HDM#ZV)zh0D{)G+)1m5^ zbo0iEe@)V5&w{7hr3>XT*NV*UzsjdudGp|$-7@NFTD#8T>2E~Y$cx*!YIY{^<^j&P zy0rCYD-xk6Z}DJpH@8?`tI*up$({Nxxh%lh@#)#i%YC)I2>4qBx`7U~tWubkKBsBgH?@HxM2m=ssd`MP=$bD~&b z_Iu6KUGKxTOHz1Bv_$&`5yw@Zr{*u!-`bF0F5uuGT+N}8u&C3{KhO%10%9W{YDMxR zN{AWmldMrblprN!{buyDo{N74x`J9eTpJ8JRMQqfSQp$kqHuqu`?X_M!m`k@t>w5U ze;?QDW5sZG!Mk>3FXqsXv^Ehl$f?j>!$&YKXGcVF;y_&RQm|FF0`*vI6Dp!Q_;(`) zAxaBP#pSvc`-m@`M=LnHSL8g{)Q{rKD^-X2Ptt9}`>?Df+PGx!7^4cJS!d6K+v9h+ zMM<{&gEM($NfLYQ6gsk}wQh)@JYuFDT>aQPUQaBAa(hK+>hhgnEWMQ-US`T;JG^^;t^>Qb9W~fq5 zu5=64R#F|FcR0>vHVwjaLq{c9@|bI^00(O-N-GdW)gd9yPLn`sC()%%JjF-ww7ts% z4DukPEi~R$o=!K%=9K#UW9&o~l7b<abIF|4B3%$r%!414D_X?c8`i4~h6J)Ro^k&Fl8YlC4#Qot{G_w6X? z1dE^;T-^Yr1!Y#mh*iWK-v7-y0O3?;H+3bLm=3X*Q1?^iQ@RGNG*a*)i-k25RLU~9 z{j?P~KQ@kPT<#n$dFV8FgG!HP_}zDo(dP+*-gH%lT6B!GrI?!(@?=s&d3GJ~*N&(g zJ`TM@f;kt71X8aS%vXvyQ`@W45IWY=@zfptI7fAE{T?{3L6?T@C$CZrPdpY89XceH z(SQyZgWmzgNZa!^)G zAwgywf(-sP4}%|^1LO=!2?(cC15_q_?LS#h=`n7K&TuQi?+8wW8(aS5savcc%RMl^ z-ePGLc+x=V?n{Y0cuvWA^M4hBY6n(4i1ie|B}A9tv>P|96#NtVm}eXWa`gUf-c0M@ z3r8gCwjHPW4vT>tm+Ww!lnb_~dwQSQ=T0Kv<{xO^{E?x)zxaHLV*nHZ3~XEvRf3Mk znrRQ<+6UXV|2P;gAUtujp=0E^Py9^-=(G0=fLiRhiiz0gftp`=_%zvIVEXY<&`s`j zd*P<(z~Nk3yc(zaw~h+joxfU#^CFUf%(@OIE2vJ_l*NRNr3K{q1dY;>=G9q$&MuMt zDV^dK5wQ0QIaKAO+;~1X0B4x4+H&Gd;+DGM9p>1IK-=b0S#$S2FXZr`Af}^3_M}x6 z)K;>$1X8|EuQ>H0Vq05`YdHqPQ-oF|?v$Uw^Gq~C-!?tqK?|kjBJc_Ou?tRMbW+dp z1I6@7%;`oexgnEN4$)YV4=o{85VJ&F3WM##23XYW(gT+OZDiF(;0TH% zMD#y(F|3G_cA3kU69^V$R*1}@0&7*ud>osGIpR(4zIxsSx;o*GxMU*)n%49=b$H*v zR_fOQLROAEBX`IiC&yG29}YW7uc?g2{MMKreE%d0Ont4aQRRtsAtKyn3f7k4cjRVSdq!Qry4<9Zn|>g%vXEz36TIl@AP zkS7HxiGUC-LYm2g@i^j49_OG+Pg$ukdgds!TvdqB0+sP&f+-o}{E+JUp7ewiFKu>x z0$A1WMe|pVzNJ>?hgXMRkYtZ5!9CNa&rz&9%NNI{1mg94!l_MxXR(;rN=optw3x3{ zIgj?L1yNDLgdYp*F{QXk7cx&UhNQN+sM{tkOLrO$fbkH~sI97(^loYTdH`0K!IPk# z92yRD9}8WA!YzZd=LxWXN(BGw{wQj|Kf-xDiR%QxUgcX`j7kZ{kDJa!o);i9wb~ea zpil@$u!cfGhI%P~e0;YwQ1?rgd4X+$_!Q2+z$-I^I(0LyFG^>W0@pc5lo0U|Ep|G6 zuZJ#KmKjpp&vgS{JTK16AgUhMMn3c={{!|`WQu=3 z7ada;LT%?%>4M>yVeG4}a^T5?M`3b8qdA>Qj?SW?VDR%o$BRnhT_lh`TQ-&9A_7Zl zr65)|tZf@14v@w)nTlgxpmER$P8se0WNh${?R8hd0Nq@C>K=#Iua$U$iA0OxDND%C zMdEnja>^X9o>MZybZ~H&mN@KqJjS1)v%{an`%7iwWe}y62MCLv>xre} z2AMJ@Gam0cA2EgRMnEF}ljP!YRvI!sf*B8t7~kDH#PVUyo>}1nbbiRqR@%HLbFv)d zS-DRdyMPsEBXZhm@b~k_NqBk zc#^Ue`5B=&Td{gjXraYgZozVj{TdgZY3W^t1EXsP&(w432mFd)fNp(pN~(!hXKzsW z(tRt)1av0gahyfuz1T=9nRbS%Bo3JP6$vB6Zt-`Qc?D==bss+7|!zMFRe79JAo%-&7_v;-Tii>PY*o@O8eARcd7^)NHH0kAUkkd1`nYK zcYMNU!9@$#>>kg>bFXi7K#-W=n<%!}@i6Nc4F>ki#747`+w2@u-MU1Mt*-@WNGrbv zAPq3enbOiRcPPn_lVm6hL;ezmo(b2Ck65r=uOu7#sb&)OQ>(keXE8MPa6pGVPHvF6B2hxfJ0%F625 zmw?EZ#jVX7a-65T6Jc!&pb+ofl|}rOo$D=B`Nx|ixNG0SWknyYLK;nolllPGI4Hv> zQ1u8hhhEG7kODx0fe8-azQG%cMNs)VwKthWeOb&m>Nf~M1n4Teee6?SON%Q~{UN=t zP$g)PeY;D6T{?8>PAA300#MuN2QN&g^h!Y>HS*w z$-_z$bDVb2B*<8}?P8hPhvHl<*0(8tnIW5z;K_r9({K(Zmgu3AtQC@bFMjgN$?1Xn zgT1`hoOsubLz&cMFxGrw&DEzP8Z4X@!2Ul8A1Ti;Q>fO}x7r-X$n`aB(=e&h=fVX= z-OwJnynKFz1fRk%fJHlBA5+YCeNSU)Ir9`%Ix~XDkEZ_xD3Qp{#3BSQ=p)lQ@kiWx zU*V|QvQlQ8LI!P|*9L0PuZa(gD122H{#F!Jr7R9zNJR6@BjtEPxWf|`~J22usJz0Ik~?- zkOThPfAU}ee|U5s{_)m^Cg#%S_SUcY@0?RyryN8a-V2-4qa{LWZ;CkBmBm7KW@hbj z#%ebt)c({#u&(c8f1ld= zk!dq^?ScM=7upT|E9T65t7=sAMmx6*F5$D#oQ`NvtUS1y<8irjSfc3>-ZTk8flORW z&3AJ16&}!zvKLO_ist1&&9<*~ve1?zlI2}hvG|6A;5ZE{{RsgL$ZTS6c$FI8&WqVL zT0IhUAla<4M>ZE=Ig1A|;uDAp%YuQ5GRPnrLPLU-#0O*nWtfzKC?QAyOJST)Fz@4$ zCD$U``QX;3B}SoiEd(_TS*6hk8wvT(B?=je@)!xqvcM2R&~iCy2f$@67jr#bN5`5PT;3Rc-!p1&^=^62OXYg6WgIwbg;Bhf_W=GTH|j zo#px%-{T47a$aGw!0xlEYr#f<-x?XBp{4T9y>Mvpn0pY7Lph8xa)`x(r1{91RfkJ$ zs1i6CA-)P##9%0iRn!F-+X}n*RB!b{1}-DtAxONsT|@}v%UINPN?eW=q7wuklhSlWj)M4(}XB)797Q+VNW627OaX+-4qkKav zq5lCuK)=5MYod^K9tXT=S=hMlcKVEk{14$%C)smgo5N@8RM??*Xw4G`i(dTR-;?u^ z&CI@nJ||PqFF$+??&qyByzqRi;lt>@Jg*a@cUoJ&@$W@Rt;9FFM$O!I+isB-Tx+_! ze?Fc3Ms>en*<<6bFg5V2aPT?VdL1vqyNrmxZ|(?voPTevcihAGrN6&D=|Zqms=pe7k+sEN#sAMHjkJy?rZxulbe2wbw*T1^W)kP5h8R%BZa=6c<**?v zbSz4EW8vW8f+N7`4{2p~iX=3bIB1K0x+H2eKSdOb@sJ*TeRicDc%^a1P~}x9?5x;b z;YQi;CRip6s^XzG@x%MYl7k(M6_K0d*@LgSgV;3zHJl5i;9!+3(DgPF)hhRO)$0W& z$^*6g`lBBUlt;+@gKscsQ~Tc%*-eMfuSS3K8RplrDxw)Zev&- zqHNvs{@Q!&v)brW_jHR(VHnL!13yR34TK1m~fb)pw{G~SLy0KGK`DsEd~Su|9+ z$ta2I%sLfW+GyEYX*0E>otzOE5@04!M=M&E&HxUy4CVh3i{vUSjV-M7tEt+fy429> z86>+#{u}Y3r4;EHfB*p5ApeSZ;=hRhzhV4ZLq~3l2c>tfPQV;pL`dquJE;n_T$g1Y z;n)O;J;_4)GGW*w2Oz5S>t#*iJ)yb5;g^(FYZjHomC*<1*eTERE1R2Q#ob5WmV<4fh^_6tJ<~o4C3mwZm1C1|G}GR2{c)>_s$Q>@Z`+&kDSbmDJ5Z7QPKd*mpRj`nuw@!x{y zM15KO?k^k=Uu{HMwC4sd6FOd z5lWUw=j1wqTg}NKFTKrK_o+hiPcT|X0_H&l0F<4a(ZwAYE6k{od#6C~WipYJ1|=bbe8rlpcC6f2`&(6tiZKX7NdsC>X295-?RpNv3KqOIdLt6YA-tng9(nzE*Kn zc}|59;t)})Wu+E8E~Wu@Yg!oQ-he|KYa4cslzTYFhV|*v)kJFD$7~L@%h`eongLd2d1W{GF1a92BFL%9gv z9K9;h;*Z>MQgub_P~@1wsQn(X^oJE6hRTbNyQpNQ#`VvW$H4DAW?0-7mg10LDhv+h z2DM}oiYLmmTb(b9*G!!)5bG>J1NH7>C`26xoJP>$W5U!4%BUw%9-3WV(UidGKZ9ZfbBg)3JVS;W zYB$AH)@t2f?taY?2@bEwE3>uA-SUf_HY^oq?cmi{+YFpUS?Gb7zL`&YpZ7b$T#>0k zDLd)Kb)(369yA(5uMirKNa5`(UD#TYl0VXgfqMp{bjGN()Rt{59nSp}XUz3-Bn~Z& zI#J2MIspAff7iMpXX^J)GIck$>M73Tp*}y`e5e3#kunE?&<>wu!36dLn&z2V8 zP7NK5y1!eWQDY`ydp5;bJg0Rp(^eA4r2>*9tr#;v970-_E9Sc{G=RtZx1mA#rjCd~ zy22;U%^{*ympk`N31?zJA!qB5h^o~LL2Utklhg4<`R3_(pK+294DkD4f_(b}rrnat z78)*ORWH8c0}Y4qMkd=#Txe;R>(;MTSh&FM;y(24RHE)w1DnXZLINpDZAmioO3rG< zobQ+LLyWg-GI%_9_fs38=S6t&P61N;NTK8CFBCG6waBMSR9&nkmD+5>t`(>>r4u}u zK;3v$bnZZ}l+CZOinf?%#*3-?Tv3p?AI@t%{E221+KIaxMkq%b8>3zI5`~h$7Wwt09cmuWlISVp$BLpKt|m;SFHZ>axg4lKz?Wn|zc`EyJ^|se+}N zHY|xhbrhTKkmH0Mmxv-ilZ7%uQ+Wi@y%8+$vLg#_G;y^u1U}di&ND>kSyRP!B+0gI z%AITt&N`0gRv=4gBvI6vwpD{|fcwp;)k62qQ3EMUz!4>1rYK-nElu?MTBxPigv*k63OY)-p!(P=oCq}WH=Y!W=8;ug69WZG1GSwl2 zK3@~u73wU7IO}+6C{z5CD`j*UIO{0aU}y}_!NPAHDAbkKCtQY-P^UY z10#(H%>nT9Vlj3{fJfB(x*)_MvfZ6oJxUEOQCwE^=Iv13;yIF<`p|)Uy-33D@umJD zqZc_=zgVEX5E+k2Ew3|Ev58>W0_VvBqgdTN=p3|}61$Q9KR|yYE62}AZTc@dXaN6B z%l|*JGRx-Mdu8xzy}gqAI;(ml#EA8E!dqEgLZHg?AUD~BSqb9xd%k4p-6%ylMk!#|y*Y(O;R3b64T=2n+Ay~8IvAF%NOTCjp=e|TRA)wKG z4f79Oel`7~KLy>uuQ)(Sw7>7N?*}Y~U$dOF>#W#$a;Zs}(QhUW$bj;^ST)5<9%nQ+ zY!m_t;`V!vYDR1Zhwi~dn+`)w&!e?v<1g10dYN5%`a^yf>S-NmY0U|C&1m~6K|ql z>)2c}ZQ3zzt!rY^dW7@n7m4ctDGNYV7Qb&6iWa&-4j*@RVl^B_A`R`dfFOfva7Edp zS1yWI-+2X(3+Ej`3>$`!_~mhz9gOK{9Is-sow_}%so*R^R`BWLBEWQBqsHdKP!?FS zZQXhha5ZTA+K3KmXG`e1z#75S2v!Rr>4RwWI>*~gnsI&pUK$sVhEYC$l?5a4zmgE- zF9~f;od3O{2JC;_{EuhA#^~QeLHXZN{&Di}fnod;Favvwe}5qK&jA0?O#VGw(*GX! z?@j98L#O!vi~jG=1g)*@-2O5u11G2dIqs5ekOdM% z@CoV%EHpHsiH-?js~wg!@5Trx5k{7wv7TrNi>{g(@uY34cppEn9!7jM z8NLTTDms_PyZ_rA>&wYTBZcWv2=jbf>F4vx(EUODOt$*?fhzI}BIl!!3N^09VDMW9 zmFW00KPMMcwuZJl`q`ktWoT9peKstZbr~`0VjqAFxT*+y7w&*Yuxn#f^~}m#pIe{# ztj3?)iuUdAWy~bR5oP$i-h?I;@pYEFcD4E&idXPq zpO~6Mg8hr%1`6c9^)od`MfF2x{i1ZusUsySJmkbIZh;!-?*0z?;Q0v6ktnQYCmBZ`J=@T`+UN+kIv!~RhPRH~!zf-F6Z*(#c@=v)1|r~c_J z^l8u#SZ283%pCwYAnO8bM-Ye9g6t*-j1TY!2NWx$H}&#vs#M?KXVAs*buI9J2~qqn z#Sr*^661eUp+!y0Nl69e+coJAi$y-6eEvL;P=y3Vu&#L)SbS?UP$?)SIwe(hY1wr_ znS``# z+t=>44ghaE-F(jC^jSMs=1S6%gc*_wv!}9DMkgosiYZ6LY_sr3jY}V+mFbGF#55%W z(Es4&9iuaAvv=RvwpFohCl%YaZKL9fZQHh;RFaBQv2B|tRo(w{_UPXI?$M)rpKs4t z>-qK@b6(e6_cd=n$Kwbrmbp3M+si`^8goiJ$O`qJokEOIx7=M_LtS1IQnFMfD2opu z1|Be9ymbT;`3q^}dkm*Rns{qOWXB7N8xC_!WQvC2N=g}o##l&aj!L~m{B-q%%vC_g zC^q(!uaQIh$td{bQJO&)1u@X4lKYz5*=Lb55jL=sW!QPWPA_wMT0gW)&ulbLY$=6j|xgAeC}>iZhsVuk zXso#muVODD5SRQxy|@{S$B@-DcjemsrHybGSPW04L?y{sDyWKbc+Q7Stgf~x zn9-6k6sL&gc&v>Pzcx8RI-!8B;lcBHlry2_w;}ZLaz~0WIPWSp zQ3ajz&xM>VQcN|@ZNjK&HZj4cVTCs*_KqAdbD{2ct|}9;4~`oxzM2hJSv2GZ^!_L* zYORmeVEh_D2&+Gfr3(=5Z8!4NG*#dh`eV3-B1N-nw;+irM4E*|8A!v*e!B@$3oesZ zXgp|)K&Z#^kV8?@d`SxcHoS+iA>SBKvrge{G1>>8l3q?R)D)DJ&SC%(8g-?Xvx;=w z$wj4Cfa})*B#>_)lH~E-6;P8tQ+YAz_8=Ty`nXwivw1nSH*1Gmvn)%5{@R>c+9cst zKOxKviBKJ>hkwUrG{h;LC_4&HA|rNL?q&-AFE1pB+eDIbv;z6?olQXf^1vXFgcs`GlE1P;Q4K*_O z?F8k#7e?UXy%o#f$eFeUGjeZ_xid`c{HVge zGmCk-u>Z*8_btJB(?NR!7vLSEg|t!!aso}poU33Zd;#{>dMU}du5|^)f4M~D-STFv zkS$PR%Kr6uc_JBYUm{Mw7jiwDuW_HkX%T}YRS;ihFF1beaE6eqo_v&(WI0LNsvm8 zETD(;`KLzZu7`4OTM|vJV3&^gQ$_-7lz%?iHPf+AgId>SH4Lnt+%9w1?oV4LecX9q z!0ZS-j)HIHyH|EFpN9Cv+6vpMD>BK(HS>k7L3?Bb#>MhrF!O+IK}D76V`x;CZVr_Xzr^ ztnz(K!Y+wQwxF0jG>|DrhX6MA)G9=dZg`JdUE_&pt&Kf8pq=a%OJXZaLe%0NKXJtu zAcVFSaWI#Cn)}a=FXucg*4U&A*uHL$R(Nel`syr_# zG0+UwHkcIz)vR0VA`Q9lH`}LvxCaJHiXo z%$!M0ZO}KLH2k`2Ofx8tgBW0+-cwmOo|2zixTf}7XtY1Kgf>}u6P*d5>KvGUH8DOs zAj|+z=*BlqK>2`rCF=Z0QW>|$v_R17^)}>~3$V?6<&j$F#o1JyklCT`c3=%cnVC4H z={URWoV;M6!a$wdeESojmWW)95(WbRctiLr=@R?5rAyJu*x2rWb#;QqM*nCeWd9h6 z%)uKtgv8N-(IG)>^p-%oTp-}sKr^DypvWc7gP+^$c&*y>?<~;1-}pw^C11%0hG<;Y zJD%Kb*4K4)0QCT*!Gr>$Oo?a`f9{cO8sxHL6|XW4qXKqW+)Q(3n-2{BaJ+ZRalT?6 zc!9tO*w?B6S?J@wEO&~U`C2o$xw$ZxdSMvzs>$jf(>r}DYSY0yQ`!f?!vHrXC3ebG z;-f7p=hZ(PUy44FD4-tp)4nvQ(e@6(|+|Of99<5xw$y~!MP1`Z7KyLV6U}! zim_xe%$UNyf|-%MLnp2t$2LK^bjXh(2zechMTKs&B z^;bD)%Nj{{&?fz812M0}?f0~B-aoE;>^hL1;L}x{{H3!{{Lk^o80$M2xJ%pGI64_S z{G-{(l$DkQWAt6bpNp~vr9S`8^ z!6%Uk+wA2@75ZcP_HRz!fB_85m{KsExKYJ(jYxd~(5VKe+4op+B!N0kFQ-{`%?5sb zlA@mH^i9tvj~l0Eo7dO>q6f1qDGyZ@ao;7t(u`4Vv5)-MhH~M+AYHA>+F@ zWcej?G;#`A$VGwB{>NrXA9-zFm^XX22UjX1Idm*1ZDY-S;cRyso{CCa=lb~NQ=UiJ z3Vw`_r2!0DbCzJ78SS+*;U8G;TC>WSycFd~k+lr1$nPK)6_e9#?W>$^bzp#x!$2AU zo`FDS(;FbV;W>z`dfC@lr+t8fF^`;s{WR#_z`tR6rFrgu`2=b+- z<~F8E=GMml$SS5*0$2bc*mNgV(qK-HQ0@EYz(h--MEr{o63kza2#vL_`DYNUr{k8( z#ei!4C7>6%{XGJ;!5$jZhZk4<3sbi41wKGb4}VX@)RwgDcum>KsN8z z1i?+;;+HO5x^FGC&Ln!5>6*-%8vVu673lbgW{?v1A7LiIJpN2LjL))BF+=)a%X!y;$IRzrh<@ zg@%H2F9{uF+nR9t@^!EC0o+cZw3uEyJHCA>(7+Hsjr5IgfDxqCtm~dolx#Q@ z-Iwv0Hz`l(VB?lXw-|&B zWF5E*a%`@$n+7%%*E6k%=rwt?#Lm<-XE@OjMk-`@=a%@-&GS(Kwhy zZBfJ&>A`SHGN5Te+Yi+xlT4uXrvZEM^^o<(4cO`)`~rcAGts?AS{N&{Cvuo-uT~&v z@H6MlQ50w!y@ey|g@n;q4volJ%R>Lm(ACZb&-Ul-^IQ1imXV{XEj{tC`JWinv^;`i zIjuj&1h<9FXSiBuj*?(55|u-TVn2JFk3D6DZm#p}XOFA=)8nuJxOPFO^12~;(FML( z_0SHoEC#bK#kggj>I~+|{w5TseExv@NoVIT2}%E#2z^%3KLU~;`z#<7p07p-gUu!O zTY_k9wemYuR>VW#kki5u*yu&fK?wmEri@2C2U$$T&E6kw zpS^kzt3OdWt67+7rj8066rE>0@ou@>E>W&Gp2uf;7&c$&f@n{x)k5lVm8`)UTo2|3 zHx|Ms(E4V@L{uDK&p-EexGnt{L*^qBmteR?9e+rBNW}wJL*HV)yo98nj2^|;DpsEg z_SB->h*%>_@=J#2G8ZQ|t#2Y3AQX({P9UHO29yvB;8kMpWs5fcK}E#rDLzhylFLw9 z*ID=w#X^6{IM*oKm)y#ozU8TKC#zvw14H520!7=^K_?w;<@!*Uw3cHz(c=4d&ySgx z(v(v5^1K^nbwq0BKK8g{1?<5ZUOT>sN5^*&4qseOS=V?0w4?qy7{?T{4l#1@U{H|*NS>sYXm5pfi4nY)lENJj$Q~TaDLMcGAbee@x4vrqIH8%y~9Fk=dzLO9V zZU7VIJy1&xKj64qlRd`BZdu2xibF*ncB?T#U=5vi9s|dke2n0NExSI|vi_q=RYF-~zJNdhwd)O zWRr%=UC}fwvAM)mU6<2@6=ig@({=eR$8IPZk7C6QMk_WHLC-^I!v3i?^z*c=g&{Ce z2Z+^{Pz9VAY3&5ex1t6y0G_oVp!{gtHA3W&2{Mk!=RDu{dh-OSv4jDPcIumnhyXb} zOnQnqVq}W+v+ZD-HubU+^V~7)C;m(Z#d2Zd)}QF-{t~^?e*wL!zNN9Uot&+s`Tv%? zwCty3W&+iH%PR>SaJ%diphFwLfFLs{6G8TgALJANc~XuC`%VV_Z~REdq`*#}_z(XQzw&>C z|I;abj)k&@hR$~SztJl?={x(yRA8dNH3m|XCTw7N=H3TXS69@$>j6?*PtTvU> z={!NrasT5CC$!pR3;0oPXem52Xt8B*f^S30#O3z+0&Nx<>a#*_{BFd6Se2F#z?RqG`k$%8lHX2;#@$+WiRx{SwS)^2d1pSTc zNeQ~(_w4cXe^Hn}@i;jBD`AeF{OxRqx<8#QL538!`&AA))w#e()^|V>!ZfkIUkN4z zB<=M^DEQzsUhACgr8fSo|kQ!=zl-1VJ`_=1!yzl3Jm zYl>sj?G}-Rw0or?RfhO2&6X+#tpN6qK?vrwD`1l-4oW_;>&Chu-h)K>MCt_c`n`9% zik3iTNOjFeO3Y8}R?IMPQKCsG5>36E$mhi0z&m)eLXtA}7eF`KDHM+`ALw{3$-Y-; z4PHq*@FJTdz#fpn>K9=4_F{NQz?o+^~I2QZ!Y^eDXoSZwJyuwqK z5aGz*!Eg4IQ);~15X})WTfjDW>-6%%c~`jWJk-`3PX7sRBrm9ZL;Ixi<1fib{fA_1 z?fw-Q86L^cdC(hsQVYpYibQQm&1?s&ddf~Y1_W53mtSK^lT^Ron0ECX^m>8%74V(h zo(+OhgJbZgr)}5z%F7tlH^4TaFQjA#lvI&AN3sOJmceh}YCGO0_9Dk~vpZc%PG~zTHkvILECPp)>iq|CHL(Mi_x= zDEg{wft8v8B9ldV;rf-yP&#S$TdN&q%1uBdc-?td&BRMJp&$g}6EOQFx!}qHnjoD> z{rW)e0n2Irj^)}3tZuZ6#_OLW8yW<7e&kOggMUed??0jP4fgwRz`=BIusJ?OuZsd8EpGHOnN6F$(4+Vsfg6Cby z5urqq+aW!p+s@)kHGqn~0Q;4SOE2D#H3-WI5N`EsM>YlbPtRI$AckdJ%32gJjS=oAYARwoBMVwF|(0A8R0-*}wMJgDpM^J<-I|tUM z!Og3+(O_t5tgu?B$COK?DFmtk2sj$!MD?;%)Z2} z-1BvrzPscoPy-bSwvIMz@65^o>jjvH`-i6xPVl!t#pHqH+YUlpjVdnY#iI)xECUsc zMJa70-9~S^+_iwrGoiIN@4yGTMp<=*TBnND&1kv)|?=Am=36TgWqA>e-Cw|5)w zT^Zf9SV`TGLfMHVIpTyx$r|fY&I$v*ws5`SUm%{_M&DH@c)~A~h!bmA85qlyhcE-= za_VxkE)SCopQ7?9H^4aH!5i${grOstK$>ljMp_cs=FisS!D;kXeDR|D(0lJ5F6)cVB|_PhD@6{0#HQxT!V3ky@NC%8AV7?irgDSNbu)Me z+S1hYptVqJBr8niLqtBYYr+mGA`1vtJl3Z5vQ1Q8nZUUXVRtWK4>SDQ0=B?Ne6h!3 zPSpRS6hovtM0WmS=SFAUyf;;_JKiq}8ybMhos0(who$MFYS!_A90TzjhdS6le$~W= z6%p+EVzKNrVZ11zV!RAxU@wuCN{B|W)`xBDDx=6?|Ld3JfutoOefr6zQ?p<4Yz8V~ zk7_rINc?fG2g=0sBs1d_S(?S}z*v)W)nVpZ7l0SF7`?BegNnqIv_S*2e%N14YYkfL zpeJ`p4#T4~LM+L)wladp+7QQrI#nzKGu2bZM2|tibf<1)EIXtFxo&VSwmTH<+0GGP zUkGk4gaR4It<(mqw<1C`y#l9_b(1;DWrG`!^rU(_^U}G(D!6zwCie=xC3RwC@v|ofZ)lR z*=F(!xF~re!MSU;njwWG5ou*RTb}a#>+?3i!{z;lA>T=kSXa=DMYV%Rro|qe&fTfr zS_LOUIoELX$AMBcc6Z1s>{$@{o}w%X$&|bRbx|^2wD(sz{6*_mtGBs%FScecX9M54 z+lw~G`d*O-$p@J-=5Kg_Ox&I}-^9)@)9|AAeqzV-te;U^gz}|vG|#aypY10+u~1<- zOZtg)@u)I{n}P~;_rko9=4#culx@RbD#PPE3h}D%aS;fPP|zSjg|L_`D6!{ma!hY5 zgvkfbW_&4buvAQjc}x?Pc$*(0W1BUFr~%zHBWeJ%~xnV)h&~ zf?wCXNbIQ3KEyQtbEyxH~hLyG`b% zICXoGQsg@cZZm!FDAIGt#5!XEaQsAu$t1YFXRW80_aIRpR;maBvlkc7V8*nHyT>r@ntvp_k9sPCK@PBApITf`=YsI-{<69^NWQDNt@-o8Ha1A zA7z+zl{VMc%azhH!Nrg#O&HBmB!XMZJBo-;9YsxJ2pDHnrSky>20lu<11B%EJK7}n zKvdB53ZZ(I)J4+G=6?29xXZap#Veo^o@l4OeiSSl6rQb_E-3O}SV~Jo1Hy&Y3gZGY zhz?EQ(&RUV3l%cM&f4DBDBpqk(4ST2n_CC#RETb++qxtNPab2ZE=;|fHBYmWAm3=U zH_Ep?AG@X=>V0}>nm!5zH!4m-lzwiO3;L$qiLP#goS;3UY5PhI9$dQT`qG_LJBEkQ z8w+-;E<~3+N^=w3=2yVC4H^nWPw5t(2vMH*VCLeRdN0!8WhFy^o=wZsN_eK6c`G7+ z>0OLrMcSvz$};1J#-BGJlxL%DyHo7~){shvIL0Rnqk{w9>0B_I3QgwCM58R%%7!Uc?=h1%3H z>&Mz#GrE_9e#Qv>jOMu2()08LAP7m{6Z$YnKoCg*VZHbndtpp8#DE1tgU$WT;7wA! z!tbH#*?^hwYSZq$ffJD?PDm+?)R}Bk<~2F>yr{Tz`Htnl+28u#3qTH0SK`IJl6pz6 zT2sx=G*?6Ij6hdFb&Tk{0%#s-%hap-B`F9J8N`~!W3Zgi3z@+cgpdk?iN#=BAe&9W zk4Q1Gilbl%-r7(LOr;6dEWwU!Rt?oWV%k+(DoW2+SXYdiSvWf2s^6&Rt!_B6(lU7u z=F^~CHiAPoYk1s;dM`U{*m`#qF6Hx-k1o9e#%v9Meee^hRd+a!6j&TBgLbEe7nRSI zU1cO5wsvN=uyFB?>_Vjl?X%%Pxh9rafI*_w2-$7@H!CpxLoUVpXZlZ-aszXg&g&;x zIjp2*s%KBw!+-I%FDy+}JfiH6fWAiIdYfjz^kT16FdZ^51k4xx%qdQV(A_@F-Y?0H zUAHnd^2+!ay2QkFT%)5HkIg3)kHX>(n{*)SJ7M(1BEd^Uyp%`)45w4CbsGpAOdePJ zlo)1e@04~lU`6FMO{VsRd83Erg^WRC79G!k6k$!eO)5|@^iv=RCUhv&S3LQzoahq< z9PJ%&(fT}N=~wDUlY2iq_Fy(JXn&|Ex0x!$X~poiLG5Go_*^e%5N`9;iFj30Y#;nY zoZMFLpP`0N`hhf_G`*3*_-skL>CPoQ#2$@~A2O@zCd0TDqQwL5*z|~;H_8E_BF=rW zF1VPlXwCA>qM%5+!MF;&BHDAWJ$crf5D475TMBUlqNVFj~-3*+;5MSH#f zod!}xGCDlk1s2n{yGfOrKGGT=3$PP1x7nIo?%B5QV`yW~ipDy=?~$se$&xtbuNG1W+t1C8frNL!Ujy5}kbg`0n4JstlrA`#Sj%qkg+_9e6=X;@C_5sN|+ftRtSs&c21r$#Tc_Hqwg&`@4`^UpYe64%B&s?s`o>W|KzLKsY@6eYo*?C;7Q)o zve}Ho44`V!8Zji#iUP6#0#AG(HDvheE)kFpfHY9s2&qxMu)OfJnVcj!o?EXzrjdTUTzXKPETFF+ zI!(9&{wqNDNZqNpK~719avMAo&l-=njI8TLwC+Y1aLO=}P!%<|b+~OylX4xF|ImY# zbOO%`*W3Ug<9?Tlo>o-d{y6#yW>r;p^MFgY6?n6)2Hiihv zia2ewq_Jl1aR;}?wyg2JIAm#tN`jyCy9XsXnS>tu<5P{gsL(IU)e2?(@*=ecbtrPsAm^Tg%@i@z|Wr^ww9d@l9(gNMeG?pO_qyL)y02wc6~)VFt_N zlOoY|73HCO%inG?3T>DeCnj4DZ#ie6Y64+@B#L_}4+4O3A@m>!{a9%#hp8X@sC3NI zU(61!mS@!0v-F`8Nk-M;@~pLD6#oS?v<-^NX2%qEf?+C$J>Q^D>In0t*3FWc$$D2= zYCEaJbp<}Y17)BzN3+R}bwQdZQ<)*C76K{do-9q?uGyU;osrSkJr-tKj0n{aY^_;c zN`l9+N?qy;#Y)p<^{*tmx@C0?`JV&_!0d(vPN4N5YO(^8g(g2->x`$Mcf^iX``;k0 zQ@B)Nc}$JGS2RURraiv9t4E2#oEcxOdn(%F9DfJ8+Z8lcq<5O%w+y|gyo3#z(Eb{B z>(JdmxEfs4tXA7nKdP;ng*|#+h!wuDx;G%&GPh=ttA%#%ABgT0L92SNElIr`m6I(F zK=^|Wzyq+Pfo|pqp*PLP?iu8p2Ou0ch+3|Y)AqCnE;fE_t35))8F4We=t z<|{sb&hE+e^=V*$0RRmDa=l&q-zY#uV+R*whrfMR6SB27(0BTu17Z^=V+TodD=T9o zStqmq`O81lXQAw$s72=Qq(z1lHwGQvt${W>#1;`DLa1;au^aOmXF17QmH8Oydm8xf z^Fo=>A?S?L+?)N*|f_<&uR=TcG6{Dz_8Qs1XW;T{ZT^gIMD=$oI#BS3}Gdf~m(Me+x|6Pw4~u|y^G z>{+ig_%xBXlx%|0utCy619$-ecO&8m*n#b{;y;oo0%qbuC22A|t(v!GY%7tP+mf*p z?!Pv>vYJj|UdP6qpM_U9vQvP~F{d;Ih>QZ-r7!Uve;V;j5{++#! zf5q(|6YMIwirC61A8QD8F;?PEcu~CFbUOFt#TjdD*Pa zPchOHP5TnCJTR)9+8tF(nY`?EHcEriP}b9oSMu5@T%(nkg)xF#} zgI1l(sa8vu^HM3>&UMOjbF;UOkIJwNU}Bqig&g!-wcP4Dn>47=@N8_8R1foO|@Bvp9A@agE)y!$*^b zFSJl-NAEv)2dllo25e0_T}c_HU&v93Pdd0^Vmy7 zq9qr~djZl}Ks1(p{E_f$;p+0x?Ykg~q}seaCh!}|F;rz!T;q=2(lrRp2T8NUFn{b! z+jN;~pz1zqI(ulIBy8;Rgn9Qba?`4~qHaDQ{sYr- zE7wxBR!0aGC>K2N1m&Nsj6mUm6=iN3T1=GU})sh)&1#_ zn-TB(H+(5NcoqvbBq2Hlr2={vB^gUz$zC57cTJ?ukc{lchOYsGVhaGsC|smlq2(x! zS;bRj*K#+7c%73KrgjYRV5oi;fFK2c5Oh4~7CWqV18B*Zh1^De@#!z-GrVin4V(xJ zy!sJ>PV_){`}G+zLI#oeYEf2)E^CTIYL3R?m9}a&JI{nZBwCJ0J%!r*<4?l%>z$AQ zFbDuZ9@PI0-B7i4urd-d)3-4-{$Iu8@6GAY^M7bdmC*vfv#vq9$II51zdUY^Y6KLWqXZx<+YLxA?;Fxsw52HURl>1+TvO(S4v zUOSYL{*LI86nL=4Rj|E(Rp=E&ljbPs$l+FR+o6`dpuusfy5up=^(`sg+J2nM-Tz zRJG-tw)64Nl_~+od((uUqCxSOqVZpbCTFGZZtUE1vs*f{5f40E$0>GEZumXiQ_!Haf8rfyT&$hh)h~dxfUClX2 zRZ}Bze9HX0+J_l_g{%hi3TqNfpFi%Xc|JP+nqn#ya3K@-Grx1zAjqXsv^gvfGV->J{!{G{O$E1OdVA@-4A2EMRqwRG z9*X1n6RAEGf4mTFf=6e-p8K^QQ_IF~!UV>{(C{#wAkT0r6Rj|jT_Ftt4qrlpYB<%w zBA0=o=#pqk(eMQQ|pbT52x3HHos1pJL@GMgIV?C4Wb=chrKkS zdH)%bwiCZP{|*Vj|0Oob{}#4?fYhnFp^7Yu@*YgwPAnW+YL5Ntr`&)rm0~6!UJ!}V z!%Bb^n5WFSL|s#NT9h7yxBk58JI$u+br{aW!&AxqIG>#Lj?VLj|7_%GTE|Zi*l!*H zztrkzy1#zm!}Kt*`_PwqdPQ$W;wZ*t2b4xg2l1BSYDL9;K7h}GyGmnhS*>#Cl)~?*@_*a&{b#;ZZ zQXu989=GzKJy;=YHenWa`Us!e583h6%v4>B%pcN`2k86fJmjl{*+E6IV==~hn86ot zOmr(=Gava3OmRzahHWwF#U`#87kD~vE)s4M^EEK8fxQbWY}i9Dj|3omyhfMpVMa5Lgg&=mmWWeXbqI06&$`xAuc=3mcuFIx# z7;nskMNP)wRB=Ut@x4WZQ`TT~o(-!2MnJj0GE|dHHGwu|rF{0qu4v_Uv)0`?B+pF9 z+d59A_n1cS8x}(#d2=eXtA%EH-$M(s$284za@W>(b8^y@#?+1VMzR`KW2DaOtWeeN z&x<$Fq^yD>Uc;5Uf)sk0mp4t}6O_^(m({xw;Ix1Zjk9o9UQ(XY)KGR&H&I*ajw_g9 z3%QqV+W!(#!qALW(mr~*f~fFt?hn1A=tWv48>Mj8#6G@6j&a_=S$%)Haizg&Utd&g z**DW&IYK!E5}}C;v3-MPI)jJuLKbcmU&m3Ny6)^-+SM|T*VulXTpYHkgMn!Tn)whq z0gh;d3Dlv$K+$)uV>^;&nKClSB8f~w%&`xtbc<)eDj|7*ffV9)9AUi%dUHEBhm+av zF=78WWKGHMk-DYNb109fzR&*wUSPS##1Jw3NEs;VhBO2z91!SA7%|KK#eW~giGql- z9^O$uqau=S<{T}Ogfi6qpU-z7C|0%)4Iu}Nbl6H|v#9GPZOiQlx<@OxKr#9UQ` z`MF)&g;R(Q;&2#k5c>$#dcvjlSl%@`(VRKEQo{m{G(OYr^-9y3igt*qg^O8-VHnh7 z0WFSdERmN_o9HqE`qtElZc^t%iEmvMet@8^$7Spg!8nTrW~1K#-S-djV($EE0zfxG z(rkmE0y}G@Han>AfgrNXLKtH1U~>bcaXsbM$YDyR$4TYv;pKB_eJF2qF-eExo9fS5 z9gT|VVlXc|?`#2p8#zdd27c&=VK0Uf9%_;0Z@|gAhEvf8P@YedxnT=0o83M~||q%lJ^1q1>xu<^)# zPl396MdCU70+~Is=5_GMPa>p9o+%hBV<5liCTAr5F$!D=7;wIWuftGw39u9mC7`q8 z!ha6jcAg!XDc@gocftX($_ECsBehmhwVW30r)BNoH;EeGT8O425SrNau>=Ja_%^qY zX4pwd<^iQ*=12=0b_K=!QM(85p~X~&j@WAZVN%nVd5we|IP55~RtJ)Ms@G=2khyf4ZrM)hVV=Vw7ysimYHarv#tXYZM1E6$>%#L}oi!$IQD@2T# zkrkUIHyDa%PPmF(O=hjbentP2#=X6y0(2BVa^>*&ki-;FVB2-wDu)f&J0)y}{bl?rj4H@DT8ZFf|5)5yN_bgp_sZm;D2F;S4z}hZb7j^1;#5lJR3ZQ+rB~{i{=* z0lkh{6Gz@cXj%kzpp?4k)S5ee#3~NGWod96(050Dj^srq@p9>yJ&z&_c|K#vEju`Z@J|%YXzqV!ae?Vlc?_~Cm zgraJH6AGRrA-1NNN(8K>@9{Us1aKzwS5XoskT0cjsF1Wz)QLG0+5Uy$27m`;UllV7 zfQ;w$;rsFQ>h0Cl3Cs_r4d@!EgGSjbLU-F7b37EPcalAgLeWz{ko zOz03|zBRp`b3F+O0l3y$mPm~{zAMBldWO7+Q1h{H6HiaOdEAWwIRFG#cXyCaVs1;R zu$O{SBZmbJv}~!tdK|*RHwx6>hhQ=0H&^IzUh3-N!STp*qX-l*~bG z)=T#WX4Ma|{P{+@u%=A+w`&vZgAtI?|Bo9c|D6i@y~gk_D(KIaN!Hx*S@v={_|>Ob z9h#RkrbDx?l|!L+yCj;WZ!h?Cs|Ek>j>*>=@ZZaHFR7_syE`{$xBwzk$n^CnM#0d< z%DG*B1Ew@1V7NLY$}mR1k{umTTT`nV#)mC!acF#*8H>DHhkzU<_#qByY6Z=w_OESf ziBXXjk?bxPUd^r0?VdJpAeljMCVcR+D=MJc8qA7VW5(pXKNR9a|LV>WM*(f9m-UaxS}dw11;Y;?4d|EY&E_-P)(>$1>Ae+n;BVS z(v$8C?bAHjDL(gXS;~dD31_17hsfi$c{LMyKsI2}Eb8k7STF7^>vfJe+g6hNxnk(# z+XMpUC!P8K9}4IXp}#C3=KrsN)WhnS{Y8EkP^ceh>wII21C9}wz~6h^1gZk&?;iJY z!I#|~J=yFEAeKA4xtw$0$WSkVcCBf5Rq=bApc+mCsebt!Cq&ZAHBtxN5+j9n;S?*! zk|j~zDZqwuno$}zHBvykGil_XF<3E9KkiF7+8vKiR`BJPCmy7%1p9bFku9^a5F%w*svT)S8zczq4uR<>ucD> zK-@Cv>> zZ}-9k2Z{(1#AT$23F;f(vpO1$Fj%@IOS-W@f0hyB1QK#%jzf5+?|$~{&7U^cgU|+K z5-5O1=_*ov_u1xti52MesTd3js_<}#s^*SK8JlseyYHAig@dO@Q`a6u7NP`xJC{(F zND523X3))rqrib+UrDyZT>xEuOC}C#`*w4B@Mt8&NuNMjj538PvBS@Q0AKU1sc^&k zgE5@IQm7=8(tob-`n}NAa~A*9HLDsegPBB-EllwiNW-z+9*e9<7_e9tTSR-O&n-Tg zow!cmE4z->g46X2T#0>4M$K0vzxNQn(sPL;~vPIs|%Y5QLXdt>zf{R>4kr4 zh@K%i?RS@3`Ab6o{x{u!CiIUZp4yQw_8_JYDW^)(d~KczAZQ%(07FxpS`% zQHT{;Z7rcWw#xOgj^=#WuTgUkgd9LY=!RUj1VJHao*5u%&6<_Ahp$IhWDWSwC*3_{ z%dR5W<}~Uy$ES4oDvllX7u*+2lO0_7%^R8;U{fL8Oskp7 zd;OTf)vo75ggh)crXxuUw-q3C{nID+OKiqvLjuYSro@jp_9-KWrqm%m!39DPiSEW4 zi3D8R^85|lHby170@MNBQc$)DKn4(tJ(ns=i2YS{lntl;yv0MoN{%Ag+yzEtOcq@X zr6-O-8G-cuO^qQEEup=dIFkeqB=KL6i{bBK@79>aX6K@GL1+ykm{6*WSA9fBBJjUE zwuIL9B9pYR!HBr)gG78AT-MuIBm}z&j_YkS@FRDy4-iP0qvE&1!8+pOp=adgbu+lV z{6XKJiXCV;ScN3l@zPjff~RN4(i}0i7(~jq+LGC8Jz?e^{C<*^Kx+Pj{H9dAkinL+ zD9Pqj->vm2VRpKK{VXPzw$g}^f`ms@*oh7L<3>Y88hbPWQ_?iS>)q+4tLfa$dTb== zia?_rURmR6GzjiLkMRczTV`6Wl10@!=M?HbD@mWix^KEtw;267@_0}?_ zV8e+o%L7N<#3=TYn%<0EBuT$p%{?5lTv z@eC1&UGdSeR?)Kp;uP))3}N|%^bymw3+ffOh!kBSFGdPp=c0H1u|)x^?Aa`s{J3IY zgy3W~6cczFBQuK1_S$DD8k1zPWJ(%Ott+D^HT=aIGGGKt!ye#*hjF7^GY^dl7)I{O z;&h5zbR=nwe{T9Aq%w!xS`^R5nQwIHY^FLz$rgbi@XuqWE*}_#mVxHjo`z5Cg>M6{ z)V``Y4NtZ6j*tw54p)S=_U9r;Zq z!~V2}k!6o`UxPdo_ez64VIr<5ZmAjNHRcY0CT!F4o+s3=+#D!Z8#yJ)4vA9-?%Isd zQjywO$(~R{A0mD6>wYX=31e#fg*u>W#O(*2k$CVu@gSh3XH(vx73QqtY#e z2x_T8Ty#RMuWU--^~8+<1YXDByG}nYhy9(8L#V#uat=<#J!Y^&lkQe}=#~!GAz+uw z70ZFHPSbTa z%z?<_-HjA;d8BPPMl~Ch?J8r4?V926~tUvQgE}5i*`*dw2rB7uCyMEw8Z? z$B0aeHp1r3NB1*B4tI=jTk$Kz_bm_!PMhQ&f`6F|oz8e1}&7@j=UY z)v2qIyVHOor&0oN#Tsg{5n?U!VAEb3jqx$$#Ua!$(hd^$CzH!bd&3mYkO`$gIf_7> zAeJE0FHQSZ(qOPWLNW~7dVuR?WvpdtEH|0}aMiG0qCgmK6baMvnClS>g*Hkt_mVgi zPA~PWswpZTO3i$)y<{#D)nd9+XvyRnnr+w@PLC5JXW>!l^BPmcXm|T{(Tvx64@;nx5>k&*bB_er;Pp^-36N7FIfhdpFXX^>{)AkSFhMM62YVPfCuFl_z4gWUMRy1+?uNWOU&uC8Au($mBC;;bd^;DK4zR(*4Zdy; z$EI+Zs+KGIfQQinhTP8<;_;yCxRRXeke1rO7mOJK4v}Y86SCs8wi3bwU~%Yb1vGwn zBsML@C&m~Eb+2DcB}`InZhs6InImwf`V!zTh$2(vr0J#+wirtNs5BvQ3@YS8kc|~W@blqQOackMM1LX1`6tVGFp@EQ# z`Tb9J!hwJ2fd0=54gVgMzZbq`$@RzzGNG)JT!Sf01@tFifA*~1@*s930gnqTiR%l% zuAdc=k|eSiVR`*q>xXR^9GPdGL>muJ{o2w*^}}Z{b5Q5cs=}`WoQ|3@b8;jOMdVAr zK!S?nVWVFh#px;C%M0SkpB)kg|)?2$IF4u*J(S zrgn_!C$FBxt?i+`r$c?~CNf!7i43ZB2v6g%<6rmk`mqLv^GgZ`@7|D}rCcQ!_Je`F&vgc_$LIQ=_il8A8Cv`(|UJpf^V;Exp_;Sii zk5=`;keMgTnf(eIt@?-P;HAYxnen8AzXbL-eG?S3*;@G0J9k8OjJ;e_=Xf48TkZn<1p9#~Ss4Hq_Q0p)-zL7i* zbHhd!Dj?zhv*RaPgODxpxFYL`%xOqxu#U4}B}^ykaSvsR?_Wi656Fm9j6d+``G=T@ z{BxK{+FAT(ZT7FjqHScNGL%?`M!8WDW@hkkhKy*+hy_U`^Ih;Uw@4C5^cty zxvA9DIQEG;v^W{6+eQs$mJ{`?Tg zo+$u}m{O)vr}#>D5kYQ|V<4n|aWQ0}jnVwrWge`&X@5`4X`$|=R9{wfI+QFqBmOmP z9dbIotEcCR&aw(I0a$jcs5abEe8W2-Mv36plbCj@LN)|x{r(flh zfOkodCY{l_X&=Yk#`W-)B%&;dy`X}wUB1xy{Ek9qW@s{k;w2@h-W^hy0vJX>~-tzJ{NwGKE@8!0QRMu24!@ZL{#Ru!sIz7P$w z)XvJMYvZxR_x1BL`g7Kj)Z#hCQ{ZX*#DS^ld79VwgV%Uk8q3RYVb~3r;A6~psnLc2 zq5kjF;gQ0bvXkQK0xYIl_wJMUMwFcMD5q=*My7Q8uHI71~WJ;Y#0cu@gd1s4zxu* zwDwl~6~WdlOGZU#{RT8MP|Mfy^H_3`Ze%;8c>4(M)tu7Zl~f4LWagjvW-7j4?R|!F z)yaCQVKe<5ypm)c&Z(m9lIe(PsZLk(ESaZKTl+}NvS_gkvmLM!wWvR9EWC3iln;lL z1U_P#UA8p_o_*`>7Z0pD=XvJwY~{8f>S?UEf&maU?gFJ(O^XnHv zUVjp}>nvenW;9nWwgv%7=8&wQ(ybDQQE5#@^@$k)yIqtlG!_;YOSVi2I1D}D_6-8M%QPSbK%$=j z9rFp`2v(M$r2)nAXjSX$JSe-Zesg2%$Qk)0dDEh@9V~0=pkNdU%0wxsWa(;a?p(*? z20;ty@6ND^T};viujXS}P?BBC;741&c)3n6k%PI3pS2vnb0FYT;~a7g03u}>>aE;b zV06G~ouVUZdPjvoILsujyj)dV?B~d&YPzuPn&{bcVYBH>l?$@h=2ltfAifzR`#Obi!|gtfmX)(yXrB2n@9a92(cwc1)AEh<}pchaQLl|NN~p={zh0qq*1uT zZrX9!z%B=Of9&PWoxwBj4@kWJLQ&CLj0;p)%ypF$NWzgDi$s$?vO1P0Mw&%uc^osxNj z2TYQAd+45;yI(`|8Er%clsNYf0J|1`(Y;`E_S%*v$cZ}%;Ac?R)>lR1vn~8<@(ErH zsoQ0npkfzq!~wFGiTF1se*A>6ba7#gM?jZ%8%|@TxxG0nR&Av_-Qt$Bx|9#0-X$n1 z0o+eRTbG+YB~=eY9Yvz9gh^ek;Ulx|<+c=O zrIE&S-CbUEn?nrQn@T+YNy5ud7)qB4@exYrzPQ+HJNb8+99|<Gd|Fj;w^PKkCa{5(q ziK@oj`|@W7Ur?raI!JXm`9A;}@HJzaYFB~V5M zo8i3%wbfV4V8hyG?T#y)>fI{f*hi29R*#S9biC1liAMF9 zxf>pw*{RgR*_!C|W+6ygF}ITxizR{Pog!rYwy_nYIMdX><2o#h7k2BGm~zgpbFmO@TUK4E#b4e@qB-fR?$RmP+ju^)Tp1X{!Z7~S6VndAJft1d*AOHKhkzlhVLBZ+1>f$oE(v~FC*9?k>t zLlwW2savvSNcvwE54fy3zxNR)=Vw)NK&sfXEwT=>sP9$p5hlZf-mZRTC9j+s-^vl8 zN~A-GY!-_ORLq6jw&g`C2;fCA=XX@oKSGR^`rzWB9~DWApm_%I@GUjdnsZS0fVWzJc4j@WD-G`yJS=<2#hWtXf#^CV53 zH_P9*)XfpHYZs^!9~XwuW{Mqwib!to4sR#7`GK{efXT7gwf^oqM)kE@yBz;U-9kaG z_24FSd;kxaiCn8_Nw)JK?_2^hwc;gqGnu#Surqwh8-{GHW7c%?UShzK>{dtLlyhKZ z$XVHUv$v-)5t%CZg=utkZM`i^YX`N~lW~JU%*cr7$BQG0Z;Vg$x#}QdVqHoBi^b|` zvoBc8;|ujV5;WKP&Gc(?9>|>^i%i`%{1xx87H&qhpJ1jH1#Eej5pZBLLM)IEI*=6R_qKk^NFh1`V zJjO?2=y@U&IS80MSZP?NtrEpsre#GY!Xs4ubyKS3=`Ci=R4ZiBv8O*}4P5WL4m+1tp_mCpH>Cf^A>@o)b zW)J=C+6w)#l*ODsAV+4isaxY!K@lT-f;k8nu6$Axh;SrIvFB-9M9fVujYI#MaE&!S z4cm7>?MDZ|ssWgsn9+Xz#Ze0|Yl}T2na6fqN2`h`ydCONK3#Q>vhmkDBfrpD{o+=d z?MKXiv|cjPhJA66aL#vh%O7xX#Z~-(23P2Ha0MuS;Pc)%>Ily%S)aI~<^NFi*rxCd zYewAr+v1^usUvqdI54oNf0$vx`#b*EUwd@^ce^Br|KXK?+h+8Cy9VRm-E8ttZ1JG~ zA3X3+tn*;|A3tOA*Erk%?zO+y74iRlP3W(qfAP2fI+ywLm;czqt74<1C4%9Lg+^lW zi(wi2FoH^1XxY&QmYB6caHb#%3FC`#(H%s6i?#mNdYi)q(xBXx*&(M%|M;QXkHnoN z8Tgs>2F~G8lZosHr+Y5SAMbZ77huU(1VR9mxS3rffX>DlS~SCtM86$RMaVdzoJeGX zT04eygMt>Nx;(ZRB6uC(HKtKKm{GGe?=v$>)&5v$`z7OQ=7b44j&bw+fTL;3g;VfQ z`t*wIqGAuwyc8n$cQQz*D?uQaeL2o6G2d#0wa z4<`1=lSwJUSfAfN6{KHaaQ9^w>nUE>67>nOD-GBVDXSd(=~ckiKm~!zr>`#k0H;AU zuPtI~nF6zdY$wK(ZOs|e!Z6=pDJh3h%u!+mBk84u7^WJM)(hpGDU6s>0$21FZ8n+$ zl0OtL`&H364X15@BQ0l#b9P16Z=Xbrbv77laQEZ4Z0!#z1hR}r`7p!-lN#F95^K;b zX%%U3;jNd~YV9vWf)p>^fHp7LQYqztqB@@li98%r*`pFmYDu%7O0T2TmB~>e?TUZ} z!l?+Q^A!@$nXQCi=M|0jT!0q8&T)2lcp>H9^K-|HdAymPFi-gR*zkh3ro8(gRK?xN z1bUg-ETtkXj^ka1`PpI0rn$K&Gr1AO&+k|MSkQfBmuGkG&v}SpM;yjAS=qi4G7%+n zg+I=Iuc4mn2I*F96LdOY7MFA56o`mPQO{9(v+!h0VAJL46)}c*qd}y~8DN-&gyrFW zn@PKBTM80P-ZGUF?yMILr^cw|j3hf};XUOm*tP3)r!mV?c;ODiNPebM(qx9?<)yZy z=g~_wYhLGZcC{t8>);pU3PYnoeE67=XIypny7rLb-qY8!#Khr@>vfk4x&tMD8j~+o z1yonfw12akxp^`a3a;A<+xsey%He0x(kE#d0p z->in8_2DfvppxVc^}yPI`E%O2s3^{TMQJtGBoWW7CF*^;QxY_BOBqC-Ze z3ZP~MqH|k0vvhNb9e6xLALi>w9>6PD;RFh-neWe^k!t%!)nbb^--pa;ooRyW8Nyod zl3M2FN1Zf(Qa?ubmQ+A=L8W-cn*u@fK{JhRm_24jO4rErRkmG?(qj1b{vNGve!wfm zPSd;GgdM5Ad^C$k-qw1_iCRJwwdvy`i!Bb)tAe+zgcYa|J6nI21Zr} zW+ng&TT{FLpn#I(|6)1!nF3l_l~;!U^2h$2!2Yd!Mv;aN14^siEX6`%%rwQ?wf0{r z&KtL32w52uIBwR-SZ-dgA0fZ?Wq&sx8YvCWlASh&GA<)(ND7-W?l7M5B`)3<$JH_C83Tv)JJ(i`#4|CwrpQ*>hNwWe?L2;#3j6*eu_Y}tAtq}Y7(2W?N?Xm+ zZ%{Q5IkL@Kmz}Ayueka8?HSCkdx(ezoE3_le;6`aYy&IT5fB2Lrmv@-7_*tBHIYQ) zd{yDp*zL>f*T+DrrUXA5)O3W%5BG=no9Cp}5mZ~gM1W}`uVyXe(K%d{e_YD$o(hk6 zyvRA_uL;ImmqXII2VA0@a!jNj8VoJeg4{xGY=FoH2rG+w$^jtgOZY!=a+{4+{xfa- z`VZ4G|Ja8AGbWbuzjO0HVOu%>`}hBSo7SOf^XJHeZ!n~xV5ngw=I?nDP5<8OqMrg* zh+)D)HN?Ts(?vqeaOD|mnQP>sInPATpPxT3<(Q+$n zz87*mA6;#EXqi~``oq56oY;ZIm#|2u_0Cy(ug%j&g)^8Vy#?7?_By+`X`utq8XD5+ zMxsz~Kw)O>zu5vZTx?9<(n^|%AJF=jMTvl|% zHGr)(d~iKiSaEJfp5aY;xeDSr=iX51lZK+ERY(%Y9Y-9HqEW@5De%ldqux3{efjGz z62L>&mhsry((SwuEK5O5pF3;^;+vg^e(0>Tf%3=#B}EapDAzYYK0beJ%^Z?$BT&53 zOn}4X0ZT}qOgB7_h>{d`8zT5uTP_bGOABa&F7509?IpXp3~??F=w3ahogsk_tIAHNZXR81PbC9;E0=s9|>}0F_=cg43`!fzuUI90~H4W%-WV2-eu|S znF)H=Y~i#9!VXExeLVQE2ARYK8Gw_Pn*7w*?`+bdsGuvxR>rkY*SE8~+OP{adFywH z#byVT`#8{HKcjPtEY)ZKwHkmKjUQ?WUp`J|KOkGKYFKVa4S!L^Z^wY27*9QBW?sSAU zi+k33TsQkho`#Ye?U#mpmOz=>y)~@8UfG-#xsZHa2^*>P+z;cj7i%w*tAW|;x~J*k zH&zhHC;4??_$Jlf7~M)8a5bNQ8@yhlxGgGRKfv6vZmZt+RmAzG#`|Em2g43+hS^H4 zApUa+Pw_~aF?&-Y9i3~LWD;T@F10q7uplG;#sJFFAS16&j)&kyfXRuAB$UyCEew1H z8Jn<#n=^L`tIUW>m>@p1lB$aMFAPE7`da$ayoND*#Wk__as}|;8l~-RbS@qo*{m_3Di|pu~wGtM!FtNU+9BuD+(QFj}F*MI1 z9g&CH9eN?2+C>H(F2(W7(P*hzxMX@;;(!XSza2kazDXU?@vEiwJ4C-PxJ`wPGz)Ej zJ<{v8xMkeWWA1+v>G4>`Em(S@)JNv;r(|94htfpidc?p~gma5?nbh#02@?4>-9j~BNq*U&@aaB$d`PH1p5x0ffdjVex# z8W4w}te9LtNWKP2!N^TK-$Ct_9FD_Kh~LdslNf2(e;Q2iCCVb~LytEM&zR{9@lwC3 z%mNv4AJrzR(*4Gi`jk_cq?6oACiU5Vz6YBMwj!?tCqj%08pRXE7R4~u1w|5tKW50} zc@L98S9l-T$_u z@xM~wW14W<_zNB%KTetab+Vv`2IGUs$w(dO=t4M+MPRWkK-5@%K}nkiZr@1(JQ-_H zficT6%eSF3%QDlVwn`jT35%sG+zr1;Y!nN{mRnQ2iXO6x9`=fgGw;3ZOg|?RM1FT1 zxqz|TC)jxD{BY~!Xuofq@Fo0C$tPhRWkJ1>$elI`Vlg=B;mFsUGvWs%Pb(qt+e8z2 z`#fh7W*`q%`7%}fgyo?xcPe8j>o4*NNJwe4m-Gv$@tWJ^W{R;dnGlzLiFY7nulyb5 z0mv2cwsh=YmK#6)+Ppt|SRuN&Lg}6{Wu(cOD_iKjRgx|(%gQ?6bX8C*=w0sML%!gI z)ES$cI)g^RpwmBEkPaW3Yix3$EGcz+JXL~)E3G3brywuQ*{HD%&xwJrEquTwngv> z3lizlo}6$+8Lvp`lwiS_YiJhXOjJatUh2`JSrjv0VPt}OKm%6&5uPG__j2N)osnwe<#M)UcWV`X23L-u^G<20po@j z2YI4jMIh2ouGR&gG!YY@1kqZxmFX_rm7m|3%tfg|Q_vz8)&C`sa7Kv|F1jo~Uw1Y? z7gF{SZhV&f4@eje(NDr|@ohR-G>_v^(=MCX7C43g{cuTEqBoP|Y=)x;6*lHJ)>eBZ z>Mjj(rcq0Ygm*~&P!E=g2TusdnN+EeuTfEz1e6|AI-;Yytdyf@{OT&4E{`kGZW#C$ zw;T;vgmFhj4A!HMc?z!YC3sx6@FhAjFX*_Zx~zhG*O&jWVkzC`5VKZZzLx z+|~+(%u$tZzL$kOUyoEr=a;v&<8=RmdBY(&)h_gg0-fe1?2nXCwYTH+T%iTpXUnfI zv7q5(A0pk~LA6psi;Z7P>FbkmI{Mi!@(&GjlI-AI@CU<0Y(Z6XHbg_g6B&)ZK|5IgylNt7&fSC|6&E-R~X3#BB)cXFd`{N%v`yPGIoagS99+ zNYj!XHDT$y`Z}qbFHuItL#idI|Y1kX&o9h8Fb<4ZBKkOxE19rp^><@m|Kib9xb%vlc18}Gwb$fvY$;@q{ zV^YC&W#AHteAh3RS7^K;2XNRI1@Mnl9vO5J`dMDWS-xK?n#{CQCyhST?yYPu!p+OX zb%%{-H@TBY)13-f23_JaHs;J7Aq?u}=uQ=P+B?8p#ncWa2cNdOg+I^mt#GXZ5Z6bs zl6yXCEH10<9hz#*X@sw~6Vz|@8GME3`=-~dS!#Gc*>FSfY(wwt%syrLNvHF)hCtAr zf$>P07dW{algwhnB0|B8yI<`HjzT=b^}2fWjdi#-@9k2OqbU9${C3piyILdV>zK#s z(>Kb(ki%cbuIDwX)sSfhk+r7VkgG!$owGyM@{CfpiR~T~2P>R#sv!m+6e*~3%&?sz zd5Pz{R1}KhNd2hd5WvFBnFw)HoyPdVZS}o7v%~Ldn*&M}=1OZj(bNSQ4)dJVut)kQ za{um}mEc{K6%3=%QETSUfG#c6B9!V)$yzHit|e!(N>HUW5l=G zavG0h|8GWXn#x*V-tGdE*}&-Av$_f!vzuNJyjviDM0b&4WIR1N{{*~MOP@Sjxo#g} z4%x3pbYbqzI6d+>oK9#@=`6*Xt+24$2E=t0My0*OyynA%T*?&V z;0lDfNDQ<0m8w#0)@l5TRJs2Le0!GhNU|$+;Rv=30nmy|G8ocnCTnD@6|I1u zEpam5+aAM$Sx3uc+a^K})+B}C?Y&49Sm$M~2WLC&%hPqm!A9-e?b{%d`@-p#?vb0@ z*;zO?FFK0!S;2&fpa67FriI!1EhBm*U28sGkV1!BazL^qyzFVQ+iZ+?cSsKXW4eCi_&ZZh2AOXf? zw)11gn8#OJ*j!SW(AChV)!JvJ0lo6k_3MIus0wq^h^{VKM8_DlPX3<(q@NfX(@-0- zVjhQji4IN^Yp+^OSEVQqKYcDcGLF7#Vh_8}eOZW4#Lmu>C7wM>LaB{hv!bJml+Ojh zx+s00ycjB_*Ghi_F8r{wao6RR5~yN0%DT76RnQJmirvw8o{0;3!vZ-*O8bv|WIqL- zaj>)nIBO|^f)({*#$bkGmYnRj7l)bx;4%spXQ`a>SQ=5xs3J(05)ako58$e+b>L)< zY6m477TO7kwsfv>IfSHAP@|3|bi2m$EC|>Vvgoy!rFk1S3z;0Ge?$>B@CmT7QL&!q zhV+$EqBmt|X0+eZbF1|-9j$L#({pg~ZdmCHd6Rpnm1&8l23}Wk;BHDIAzv96tvn=U--PRXr5HqL{Oc}6 zh^ej4fUd}n*<)^~;_Cu{N6RAl!*dMIT##jx?8+qwdqSgL(?svfvd3P#dQ9{xlkYb_ zn9byjjy~npRrX|_wVZ$(|9o!e9u4%?%`zmwjy9_8*M`6;tOb((l*>z`#98G9deUv- zv=bBE{n!edfXCsPFbK{uM`sBvxpZS0ti2hYUlPDC4)98&f$qnBSS`RfHC;ni|bJ! zF6ChyVaT?Gd*67nMsZTfiNV}yYlkp}HCX*7sOl+k=yZe?!E4?Ykw#S+jC%YkY$Xdg z%^a}(6(8Z9WJDhoM>kQarKt_w6V(cX80Rra=r!o*xA!)Kwhx$iZEKSa+XHzY2()@% zs<*O5yd!pN8d~=+nX?_Y@h}dGH=R?%J*73Jr~H%>jbz{A*NiB#5ZfNMPShF5av*m^ zu8-inV~1e-X+2Jd5O?%q2zweyL3dtPonJcz>N@9o3cfD=5F~lAd304R)c=6Mdcll% zlpT5?471*2uHw3)<86#Sd0a&6)cbXsxXROA99hwUWb|3kn(4sFxMXlpKF+UQ&{3Bx zC%cDIJ-EUqEE~IdprNw3(D^~Ck+W{PQgOs>Q)oxy(@ZZPsf9OMP93CoG!quTJn`*K z#pHxpL8ez>rdMW?NtMZK$rm8F?oWRQtV_dap-QRmPq%0fX|dki6S=DJZ-%0UL4g#+ zx1TpnkiLZy#iOOPsEWU$efVmkJu}f&x~5M^#64)q-UQ9b-Z1h+S?;h_Zx_=Qw`4n{ zztLuzdXVSm$h?e{uWF}gzp?uEZyz&7luOPJOw6G9?m_EbR6mipGHi2@rNBU?u#G(0 zBuLGeEPl4#j`d$4pJ*d1z=QCBo_ z*6{v7_D#`)+~8QW(OGqcy-&U@o|AeU?k0H`z4lfo(bB39?9%K1);4)g=SIK1@y+jy zZEu|XRju>0$9KCtogNt|JMl1Asbz=IAC;W`WXGIU4Mwt(bH?Wxab-fog4ajfUo=sx zueW5pqYA(IGxzV5x68~=_ElgrOB_Bp`s*%F`hJu9QDnqt%N+iV(d&b;a*n~I;rScn z$Oyk-u9DWt@Q|MAIZ5GKi#R!22~Fv$;{mgc(>7*-Qi?@jj6IbHtJv;x{Y<(VcibIeq9gB@z6tm>{df&8G!Z#1-B4N1qrJvW6?@;#-|OKGB;OApZ7ml)m#O zkk$Fj^Rz?!N|!#?Z-Suc2Kj~+j4~<-uL9blpuDyq`8^NMf{tXuw7SH2@`^%ksa}Tq zK=>x3IqMNU3%5CX#Tm3l&ASkcnQR&( zKUw-!rzm@H69me{?~^3NP~`ZJ%{Va;r@$UsQf(=b95GzYPPZh!97=nYFd(kU7PF!t z+ky*TOTdO4X5vzb7i1WopLED#FR!sRjyTtb`gCYBMeX7N)fQ%xc^;apW`uc2xv5br z(L?8xY4>b#(W&dCXYj>l$F!FH2G#K)+6H@OaZ}IEw0!KHOr4G29;EKzn_hfu`~SpshC0~Eje@n zjQ3zI3jp>f26wgZR3)S|{#Z!jl7e)VpA^yEzs{V=i@KSeoC3SM6p2`$^}X-Ka3@aL zzXsyvXPl0v-DEwDr#U@c-JEcMMYxYM=9>(<2`^C%IHiL>%yv#|AIk^9XtRrNmiuyH zXQ=^_!Hf=nkmC8b395P2zKU`ifS(}-3;-@PNQ2|r?aFvdo?2YnS88Y3O$<>_MMxJ4i8JcTw#M;#a@ zB4_w?=`>d^9?YwEv|@c<_=PgQ0*AVcwGaVglDW#>X{5v$MKnjx*I{a>PyLmb3$A0( zY_-KZ1)0*qELlvcW7f=(2Lu~CRkXZY;ltLadgmdckh~>oL0cXhsPs@%GF1V2uAi4J z%u6o3)FK#wDd9niwl+S6>iRf5jnN7(!g~>#WEuUiq6y+gk^Nf?^kj_VvGT23T}i=` z{Bc7$_?+9L`piLa(oEXcY%FlACgLy85A&H;Q`D|~nxq-PD6aDy0r(lf0P8uGDA&3A zH7)D7j|VgLY)2jIm%P(>)33ue5;!IkGJBVrS;IR+@$eYbSdI5W23~%mCJkYghoX_4 zXrl5l5>BHPKiDkWgkqJCFe?i+>T)Hxi{{^29d_&L2pMvW-=YvXrbK5fyVx0d+8f3v z!)C_KFEU>v>xoDnnJRVSuJKGQWCoydy7dD;Z{aH}jc7Hju;aaluH@Js@F*s1IM{{1 z)9PLRf>65n45!o(kk|ZE3-u`K(J*0F^5BZmkyV;KX3#Tw_oSdj{Q440{ijrO`%hYD zX~^bqt4}?0gCz^hEQZF-EfTkKN2%7N{3z&ya_rY~OL@h&&g4u)B6DG8_smCUM(6-d zK(fEPJpvC5e@dZKd3gs01Q?jiKO|li_@79jos+qvot@2pLl&_tr393PQ7?Wf%40!d z(&5E@pI(gcFAd|5J#saNS;1v)16)_n!bI`oWWOo&v&;m4RTS!_;PGI8oaf0TU<#4GFQzA$38VzLFMsO!%?_*m$&nBNw)|-r>JIw1SM5O)zBwh zB5lC)b@d16JGuJW`Xycuh)lTcZq#y^bs!m}_Zpihl}Xa(sUScZap`DIh1Yzyl%yKJ zd~L{Nx@Eq76B(VXCrd)iVG^cL{7v@k!0tx{jgx1f0*xqFUu+JkvdugvnhJ4Qb0UU5 zkaF3xz2jWQ(ueXuAVoEdSpQ*@t_-}{jq0Txsq8ROB7Vtkg)L8yG!js;H?nATA7u0p ztlEneH(X9E+-`)Gp$lb6V8GI?ibru&LhS>(k_GA5Sejf^^3C)hZ>UrX5-N&t*m zo&%FPwC#)9)VmSoCtuP8vkhJsvzry{EA7u@DIE}+cEk-6MPDGHnIe@`71{1!3~-<+ z6_@g9g)`ll;<^b6O6s%rzXg}d9Y^>yaTWv?dd&i%cSAQ!DD7U z(7y)}0|DIF$|&K$YRYKJaR-iRdX4?-Fx0FVmLGrBhgIlzikHB_z+RyKkIb69#XqPp z6e?@k{mF_);o82KYA<2mlE}^)*zYim782Y1Wjc^bT)`*IepmAHXa7kUi~fXWy;bp( zS`duS9QHY2k_sY5)1KUSVAj zys^Du#3!cvPV0-{i|{E8eZ-VVD>a%eOJAHt+mM&{ggu_$@j;NF+meCGV()I;{o!oe z72gRZo2i@VAS^(}%NmuD`4OWuvU@QDPF3PSu{t1L!3E!OJt4mtX2ezJ&~MU&E0#vE z!Aki(Dtuw}3ggK8NI}9PxRN2tVv7}&7T1kfid1S`GgJd)?EGa|x*NHWs5+nN9kBIv z-6Gk{KXiZf>0-=l7_2NvHDwYywh5*_O;?Sn}Gi2MVhSc`!+0#*pk(eDf zW;v@0lQvn{BxE7!+>c^=4q(u1ggd6tGEzQd-tU^%^|z$sQhSJDQ?>SFUf!j7n`=22 z5&PY^n}*_Jzw@?<^PEJJ7b^J%UPN?Wef8JD<`qAvs+u9JPG6^*>_Zsa-r+TkZk4hqL2DUxeD(70KK3)(bg;Ii+x?{ zz!+=YWA^zQDL&mUE?p_~I!i9DDb}^gjhTU4v*k)-5p|X!R!w3LiErr3hDJ+=ZI9`o zC#jNNOd5CEz-sUm?=VN5y66=vv%1FwbNZe5xjUdWyWT`m?PaZK5~h8Lcqpju;954o z%3?i^k%OiH6oGNnYE4Uc%XW1@v(3OW#(U zILQN@_{*&5{H~FfP#pcO$^-a=q}aVzob!J-7_fdppT+P zvF_Q1XuO9wJ^L&1;B08s zre$K6q`7q7Dgs@5U**Ce9hUBn>$cmfMBb&A`5QwfxM>YW?+{YQyI%rmLA@~XOWzNv zTfCz#55)Z$D_4YtBa5d;WGDVPqf2S#YsTN}2>D73aIa~~co_!c60gF};k(q&nixaB zOPl_b*~vsMdci-8pe)S)QDN}^*R43GD&h2}*e=KOsbfWiF{P59_8>3vaCs>9P8BFB}P zdba9y?VVh7EVzBVpSgjpJ;vp(p=D?9lSao47hFT|8ELcA>8NLK$s8HRLqGob$(D0m+nrBc|K_M$z>CBmd<@m=RfrF|Pd$q~IuEpo3WIxzx9=+%Uz1+X zjz?rklyzjG#hD){u)_tRQHK=s@tHU-5ZGGUSdixC2fgm2_j^}UX540C2Na>8qjDXb zAF|85#HTY>Fd^+B62w$U3qgUdJ@BYU4Sg?C34m7WJvCLSzk*c|{a&UK2a-wF1LIKf zvh~%Oenb=B6U_|-(elRRO{A5Ws(09D=T^+rAYOb8s0PyG3M0+KYz{y}cX8M@BfcO! z*Wz%ak%I%1>>aC^BImJ;<(#Ny3E$PQ@RE0H4YWMNGxlNSbSAy714@#BJG~>^SVT-B z&GbX|549Obk%iXF#yKex?8AK7?DPl&bM@H<$Ect$*s^9*!f8Uy_5!)`Vn$AnU*Aj^ zJK-|MyX|6qf;%FdzmFLs zBATP2;QA7AmqSPxDMA7<)tQgT6Oo|mAbiDw-)DPDEr#NC6ZRB~golUA3QBKafDOql z1Jd8?$B|}@!9q<2`t))0XGkKN!OsZHRcs5FYRx`DO@#yDA-~V*p9pc~8hrD!2xleu zu65Rna!e>oTelbn@hMOM?u!N*v(;f>9Y->moFp z#;_DEfxF&32)pgU!d%TKq)8QVPyQk&Y`*DWChdML%eYa%oSTz8QL_~v&^Yb5B`e`; zfm2`^N6QB~1LTU%X$AXp1{s6FWzqvVW*2j}G=lYg?UcMq0+`D^DK_S6ALIr(nI;Whu7tO;U{~QxF&Zu{ z)j9<4G)gV5hNOsV9AsX*4gzI*D!m6Pi`a{+#IJcj%dB+?CjTZ4Q@Y|0PBOX)Cr5oj z3e)6RFIZ0`mEvW_ksvD}--o+#jb^++QS$KPQLiOSDToWZAzZKS*7WX{Z|Sx{B2sWt zez~ZgX><{_)`4df&h4`G%V$F_d3d`$2G`z1@2AE8aYZC9Mobf_QEZ- zm@5vEnI*lB!Va1EkEZh?Ev||4ohr7rzg0Z#@{HO9#E?}W^| z+2Uy#h!tYNTkaqY8-hrTM+V~*)1}y@chVp*)+SlAb3~76Na~4>cyKP-!Vuv7Xu`U) zqZWQW{RrN0`vN3-d1HIe7<>;L#`|EUpQzB;aL;0W!JrF~_l&XC_eCPdLz4z^dgGO` zDo9ctzL_JX(Sv)z~(5FmiR5kHr=4Dz1 zZ`|r#5686A#6buWjE&atC?t-nDnYAC;S+X#x*mWxe+(sm4S*&OGnV6)KD<1m{agW6 z`JiDeH-rqz>nFV4B$Zf@8iM>*mm(2Cl#u-iN}*?v29;3oK08LsLyybFPOx8u&ID z@{WDh#y=@UJn4D(+9@?m5i0l;&mTy3gTcwom`#{pN)TOz|Qv=^VTUAQ4%4~5mAp&R) z#rSZw+(&|jIdg1DR-szex}1vUzSX|3ZoJ%NBY#?&Inb)TfdWT%pRBdc0uHoATV z1ftW0DSf`{fpu|1rf#8jxSD}yXS)xQ7!EU0Uvn^f@I4IZ8L>;W9Xcq1I1 zpOu-LZ19hqNdbnX?#C*i@7}wXO#>8YSExu#!RS#KY?+3kr{*lIIvju*0u$K#TdcfC zoE%}4Ufl3*9kz1Bp;a#q*g5mW3z~==&tq(7UP3wgSDhzH)>{Dq~w%#QUsStSQY>%?_o^ zZ^-^*O(Ef=9}QO)869B$+Zco(i)W^fuwr&wBx=m~9-v!5`v4I|bZjA2VfV0Hi#db3 zF1U_Y7LMavmGkIs$XF}aGMj{`M-WD2u3pN7!DKyh-C%C7?0xB+mKx}m*>>xK&L|zM zx{^a;A(xYQlePr&B;i3TYeJd-xNKD-62F-2rjWf}JZd~-PuKVhLNq^K!NP(}`HE$g zQy$*@^)xe~HTEq)bFo?oIsKM`?ZDzb=-gCs=UVA&0*!GVl?OH5Oi3*uhyq?~zXTmq zQFdkIR@N$-QKl*>C6I;oBzntyoI(%kJk{~cjxgI{Xb-ab@nokhiJfL8e2m3(YFqht z-@vt%^Gk|IPenSJv_|roBQBy3OM^@aG20k{?2aU71Ll|_fYTxkS72l?vSS}-8%RBt zeJx{BxlCx3%K|(35c--R_ssh#Kqyl-5f$m-Em$rG75#fswv6QsowlbaAC$MK74=0w z7c+_8dxSaqlveE|MOAzEW#grj_J;5=6v*RK<A78LBs}v@hVx%0g87phnNjhEv zl^r_+p4HCub;xwkzN-QA`&8v7HTqPb_#NW;wZfl8cP)#)#18VlVI4k*=c)%C<&VwK9R9!7t^zEo zt!slwcQ;6fbeHsi#Lyk;(B0C45<{0D-O@-&NJtK8fPkPVAxH>Fw}k(w-}hgJdlme= z8xGGrzlt$V1BLs7~Qv!|1poq*xO;N{zch?;Y?-p(JG3l-svrJ$M6Qkj_k7r(8}P zgW}8g(3}+A4UQIwaB$gJzv|m%FW$Gqgi84N&5)j#5qS^c2@>k)^~W3V0{isbDnjfC z^E}ZJ7#%w7(N{>{)U)g7A&w^2l+;LGAIbx+ZNC_#TTH33P93$ze-|5DSM0-J?>z+^ z5?!1qu=HjGPQ54(f@4RDKN+N!sHqm^b!^#d7F=si2|00{I))Q_lsYY`JU9W_RFlR8 z$XGxqwK=s-9T*BqzvLN`7J@~y>AN4uI?85h;oTS<>_S$!h4E4;VOqCmN8tmm& zHCYu#Ec2 zs?(UpOUEFuu4r>I^P1r;?(dw;>HSg^#Q(gzNi93579(1}c%gTVn;jSRNz5~|N#$&? zD9IFq-K}-;s~rpk+>Z<^FUcHkcBW0*z&X5`iO)b~XU$0lO*Nq3uS@}HE0RIFlnBk4 z$wQeH$Aezy2akY0qNkL}0GVlwN306yRw4!5LxwS?)gy zk3DY`han&EvfNyyfD}X^X!d#@Q#XQLp#{ftF11W;H+y4OblB!!3+X90OebS)0`Sb3C<+k1Ny8yYf6 z_;hGM>XbrfjkoPUYNndbVm1rweCuXZ7hct5@B1z$F88FAAr=MUI;AgFUMqTX1oE2C zfg1slMuu;OUM~eu8)H#OJwY#fyC#X{&EB~c#F;bTvOyHi*B;rGmbS~oXTEo7`qr5G z$eOiv8HrO4bq|G5_yTu=r%2#rOFNx->(qPhxAeEG0=NjyB0-K(O=1 z726uo5iSQ$672Y2A>|j42`6QsLxU{1FF=R z@wYv%wL>^Mg$|ap)yeMjDw3m5;e;F5cC&cm;;9haHJK5i;d)4qYA8n)xJ@We#hw#g zlrWXb$U~ITn%l6|h2uJf9w{BPIMD1j;Ot#Pz3WE3iAA-%xaCpL)mQv3^f}2W+DnWB zlU3SD*$4YP$I9DItQBn$8O)szM$KEUBVw@&7|LYmUG8ZMC+&YjI}M$EJfK?=3O>-z z*`7IAxz^l+EPCkOXynOYX^VaXU@gjjg}>VCz{q(!{r;N|WK4?d21o*uK52Y7bIC=h zJgn8zpRc~=7g+0Skv7(R7;O4xBUKGek5P zGGQz5sQ6iGs*pO~q=@11YyLI+93Ia!#ENlcF@%ZGGzw4hNpaDt#3f5bo7)k<7g#TY zJ!XuJ-Zhm;jtb)Rrm={)?YQlW#9$*G-Egd^IDB<0q+;Mb)%K1W*pG8>PvhwTE3)Qn z!n&WL-r(3rS#VFLkwY6{i^&}JlR3c$z>qQ{qZxz{4YfBfBl-E>N-!ex8m8%Z+;BikAN5m@StZ#f3zI%KU zD;HlAKYkPPm;<{sNrPdDYIr2{ed(rwg}-}YiqGZR&|-F?)4&X^V~XAF+j;#eOoVrsX-cc|45QUE=v`S9Job{|0~ba>+F?P+ zX=F>Onq8mAlHI3y_wB^pXIwEBGDf`dsICOip)tjwl_Q$lb&XNp)j7J<@~JJ*GqnBi zQGG@br)IwjYvV@oRJ|43GjI&vrtStma!Wu3@A!uQ+zv)aWWBYidf z@P57Sj1Tncl@u7w{kl9~K8_jhQzlwiPF0h8O+Uh>1tE!|dp7HP)S-~;7Qh{zbb~!* z$TYBLZB1B!WF09`%o*AHS`V}J*H_oyNz8;i2!3Ox6LQ6+rfW%%Rn;#bOGG_7%ltKe zl-3y6=jR+QEb|`I&PU_-;QZQOc{+^NDLygrVl5U8D^wRAE6aCSk319ulezAp`yF?l zO~5UeC4W%Th0xr46Hp~U*Nhb8W0$cQiv(L zt(?Q;<-T0aberMaCr1>72sbuowgmPdH+eTAxS?RwuVX{5oha1wj+G0tW8JZIj)gB3 zr7lS`+84}p$wgB&oSfs+pgd3(5#{H5Gioq($tf(dD&3c-oE<{COioU2#73+tQbZS% z<1IX&n=UeiMS#{lm#kP^t*Q_W*blbuup`Ltx1xNk-j{-yJ~BU(*;p?#t3o2bnz02Y zW%B;WR>5d3JWVvFpQlY<=e{fVs3FHMCZcR1=#eS;bs1ixb!mUDPs^K)dT~xjb%UF+ zYEx`gCN9^!`q^tE?B|IlUe@WQhLtL-kS6x=udEm(n^@kg6(r^HO zo1SqCEgTfm0Ok~Mc+}DJQoq>lBy^k172M!km3-f7LFDT85=yAgjLHMfdh?dh$dp}; z*|z>Y{`BpsyK<~J9%|2l6WU7O&?{?L*7%-YDv3+bLUg@iybu`-<-64pr-*gvB^ zl+q)N)}86N{E`nEKVCE%1-Z5Hhbzb4aWN|159}y4|UL6_y(sOG3wnqHn^K{m>+D&``})x-19}4 zydM2RYErq>8N0N+B(q!8p_A;ycYt)@*-jsMhrjXeWzBl)jyA{sRJnKy$PlTy^Pv*)EAm1lM=taT+7 zY(zB;k&U&DqS%k3tdSH9(!JK)g8EIhssAriXaEt4`pG^R;wq(|W2L;_Xd@*8$vSqtSjc zg@S3f9OtU@1BaOG5N!q9qpj@k16m68! zlkXd@A`pSnW|(kr+Km6w(w!E_%*oNt{MS#X$pJr}PT#J$yw}aZz)tV{sav7gltNlL zAs6LlNjE><9p;ZaW};o0RTgis4s_cPP^i?h4%9<=KN7}{a%eXVt)>f4HQd}CX!ZMw zAc@(8LC9e8HPj;t14&AHAK@TSt3|CUQq`B6vBPm|Qf;rROF3wswISC*<1VS zpONoS0b-Oq1O&wLNH|)HZXdExyMpr@1#+k{Ytg#YsL|=X#bc1dESdDplc~2(u5%fc zs=8`&JQ!6d5@tsbPbmCIopdAv>h5?wr&r>HH`o%Kn}#_tF&tib-A3{1^UA{lfotg? zA)jYlG8Trcq-$IWNrjAB?~1fahU1=DG&Bx@tOiEMIaET5NJlcha;K%uj);?L)Gox- zF79m#g=`7uZ3xJS_|ejV!{XkM5iMyR@Y7|D`019VWWS6A-4p8YHQ(mmS(vUYTO+09 z8PCuMu=d!6(va7?cjxw~c`u?U?Py)*uAOlFlqn`soD#dui-0RJn3s;qQV=2o7N+8T z)RJ3lU}sOkCt6mq7Z%!pidgKwXVe=omIhXz93jTtIG4j)?X}Nbk9c<|qL#qsuyK3O@ z9y*!rU~pRU;kZ*OrDE{(QXnqB#T5~r`}8+86??|}kwFIt`9WjVQmBpdSUbI!XEJLn zDww>HZJ=$&8`rgFc{k-@k`6V?IKvWd28&4Z$jrM6z5TFWf@j+=h1(g-obU~0*;P8% zvC#S>Ln7)g%@--vD-IFnZlNyFa^UZzxO%{Ai&VRIUJf%D@6e80$tl7U(HiL8dUg7u7ZoM=Q>TmXz(>iv#n`A!N>vs7(QbS_vD1GGSnfWsa{H# zvm-<=oSB+@K#UGE?ejvv$jJQwiL^eGo`dur;&PQ5@V2)ZOPitp_k7D7H|}n$Ai%-t z|ME%o&%#;$LmSqywzK=T@_vymCXZ{m_ii~fU%tc_h7f@YG)XVuR*$9il@j97@XCg^ z;qMzvOhb-J>#)n-g@iAh6qQ(ZmnN#E(N@-E@-Fxt^dB9(S@VZ0x)m{f53hS_!Ja+v zMl6n>YD?lX;%C=gXCr8E{gm9B#0b25xNUXX5lrjNR(v$VB)9H-L^h`C;nY!FUZ&EZ zr!;k6V4!vZAK2u{NUX}U5*&Y0vl`s+8dowAeaQpaj`ctem{z=Pls>a`tgTTJQ+jW2 zZUYSrXl2<}`&2@qNEprYt}1t5j@`ylKHRJ-vZx#bGFtd$+bLjrmb(Xoms~@k`o}&K zpL`9kr+GDxb#B;ke+Jf#Ge;7RStkg7?Xh>)dNZk>)p+d=$)W>Oh^9~mfNX(uXkM}# zgM1_=1Rc|6g-$a|$p3wLn6x1ogv~j~j}hp!zDuveR2TP!TfZ|FHJzAF1fy%uM6V=? zmW$wJ1%R@_Uu%$NY+yS`IJ9@)H!oEVJ3tpZri4d~D;%zqs|yn{g#4w9WZCJ-q>b1l zO@|XD8qe41j3ZNI^(jpL_GMnBq>thfS`TrxwH8pdS(tO9r&fSG@8SvqpBEc^oQ_zL zYp&g@X?S16J5CXS@q`Nt$ARUU@OWn#hRc2`)m?0^^~&B43jC2bP=VD(dXL_{fvmX@ zeu=7EK{#N$B^<#pp1Dp&sJl93JIgyuyCZOUlu7dLYbLgc2fnRupXG%5FvWH~^SNtX zb$>Eiq(-H%l)fC>+dgN{vq>r4b%goD1kszJNqmbFp?CpqT(eXjt#J&#K}#Dfan<_y z%k-?l)0@Nam<3D*Jc)TX)meGQX9CR{jPrvg>l9EMEz$-hk!Rv+94Z*yn{4)}pKntX zSZ%F1hKqZn#CEW%4=gGVF0vCQ`geU+l`W{0`>J0k6hk`RCZg_2$8RJ#*|6b6l+;FX z8!JhnN!E>HI=u^!OI7b=saC+t3s8q4&#p{P^Ccgy}T#xL4q3jcLr)0zb$x zADV>7ivKXnEu!Zf8ArWKS#F#A6jN%wn7OUFTj=-w4=C6Q-j5TN4~|4QQ*LpOm~N$5 zn1LdWN4*MfXlycB^1OB9F5Jji#xJ9}L*<3GKK4Cqw!IwDkUF#-TmP~h|2h!ZzZRP7 zXOWGuD=#YdzdmFp$<}IC!x+;vi?Y>8*g5i{ht$7QYDW1XEJG(}T;|JIa;vTI4LX;K#I`xPd z3OU+O5E8;0L>l~j)j1ZFA@9p8Up%!ptP5}k-(tHFH%d&K+y)@EkQeGy*+{r1zmq9O z1RSu46Wcjr9^}D5-$H$3+{&0HJ(WKnPWis51%XEQ_Dimk)RxluM(OrPhT?$%^xzbH zBvwy6bNp9E;7-)$$3qWWD{qX|r!lpUd`4p0YnE|pqG(mH1!HVU)BsAmY|WGKB*xi| zsRs%aIL#q0yc;rd9dp21$q-`c`Jvg>Xl+xW1-v+0*=MO$s!84S3^YJ2rC1_d`&f8m z-rEi&1|uJucTs_j0s6w`T{GP>U~>80I6;dWhn@%z!f3+|xN`S{i26|}2z;Mqqg0!& zxTJyjh&WpuHls>(lb9W7D5cOMF24+%e)2q(hD@|`-z)|c-^AKN*oEhSedQ9_r=o#Z zyS}W~d?KbbK64d1Zd(vs?Ulo6vuq}zy^2_h5!d)Z&R#Slorx`y!w9kfn%zLeooIHV zd7zB{psFJ=eUQ^x7m0(%Ol5EpZM1makKtiG(}Ewu&Aw~9*-snP!*f6Dn#6;OR-F8s z4qk8@iG!=z6$}uuk-35@NFB0lD6B~+9bPZSRolF_lL0ikG*3Ko@fmh(jmrg;6TT$c zY%ZnnF;qaWI;1fo!qjwqFVF{Jh?($7EyEocFR=F*B?sRhT}o9QcN}Kp_W}q75aIMU>T|}Agxq3$>l+~4O@zWf0xF4fgEKm-#T-ACi-h1=zNlg}Rry#xdA`6op z7dQX$r3HUT=R@N9ZDi|!{lxxIOMlGc`slUmjWdR(cuCDxfg}u+TX}mMH2RM56e~7z z8}JHKK2KVZqcW%ASfmOzJsw;-v_2XKn(}X;x#nBy2}#Zq(hhT0QM74BGGWE~M0aS) z;z1PG;qr?S#{I#_nPacqrj*3cW|){Yjw6zMN0h|(iA~Vv15BxsONC?>fI-RsaQLXl)z;j?zYDW<-LWZ2%5r%i!I>=D~W zut@Q^UcU|FHM+2Wg8to*V(W(_1x$O%XgRA@@~%?;!P1LDTiD-v zxV9yD2aC&aaPg@BZVz|fL#tYCLtT7bf)f>v$ROMV+Hjq`aQjOMaS?emC}G@#Z=G1A z9$6`2LuewEErwDQm?iR$iFe>_jZ1eLT8m3d4_}z+v)y}~Fb}dAXvwHWCbJVgVkH3d@II?D;UFTSpX?y;}O-a z*yFqJXP3$?bqU>gY7lu)dBNtM)fj!Awm99I#csArHnb@!k9ZzYPzv*ozmq*y8aR=E zr>8df>_(Ib!9*>kt7ey%TMv#DCnngg#=@mE*W6fFC=+Dp)l)@@m_*XC(OI(HLLoz4 z&L#WQ9>TD#NG%l4huydLXt$R;9);RE!HTO$d)oee+VV$yO-&YXyJ=z5)0cuP#^EB4 zdIQ0$h`h1yiN0V#Ap2ESQkSKQ7svSo>subqrAiOJdz=)k>%rCnLTd#q7be&hY^(CF zy{luX2i)z$?`WLnip*S3&gE2}qgmy~$lzkVN|zgK(&84g+x}4nptjx7`el$J=4kKs zL!JDX$JRcJB}%P_VV4 zU39J_EfXUCeGIidY?Ia?KUBIQnQYsk@iR1iLE9cB8Z9wmb2W z4QlJBA!W2tDI^8XA#(kkbjkGr)>?I_eWmj2fkqLXso}zAA~-UMx!6(n0w^-phPP>t z^S8U-;IUf(093&wtJC5#Ct8deQgJ!Mgg3GcFi)5`I?2Z1k(F#~ha*QRIJrD&SIk5UnY2z&jVy>7!G;vl`-E8pk4@|6wSSJO^ z1Wi6MDzq;R*M{)-O4#bx^~?eK-0MCM9?yG~r6{r+Bs#g^*-Fjpjg^ZwGLsCs=cg1} z@ne~XW2hn1#!56~Z4=9`71GzjvHDsOgSHB1`TtLw+CW zlA{rzHLDE&TApc(8+=ym-V^##AP~Deu13WLg?d`l`$@=kR2M){U*8qp!ZiW!sdap; zAt~IiHWg{Q&oP?YXOGZ*t766kL!+K{OyKwhh)|p$V((V1Z=w6nr8UZRRID>cQV;Ui z#PmSo3Nl<|i_}CYawNF3Z#|x>SP|)e3WqA)(_C?_pjvvZ~kaBC7l1ajeouMduLb&Vp0#zWA7{OUAd^HKJnB<99bY6`?Sf!=IgMwsLKgc@pfo8OL<3n#mAtHZJ z3oV9g$9q~SF}BtmJT-aq2K=lLy-}%b_3Y65lCqYzn%%Jy+$e$aC=Ard`rF%fI!4!= z*>!c2jFD(5_{A!nAJuv>lNXzSai{m6IJCs!%?f6M_R%qqlGxY1a$JJvm z1j}taTLn8EP~QPZI_)CMgHb_y@8yySOJ*D?L$2K8GIndOnC%y#Nf+N;L@px`d3#HV z=|FV`wKCY=cNC@ib>a2C;x%LC%9xjTkddvUhy5^ozt5p*Op*2$p%(P`WvD{oi`(~C zhK(6egh=9ax7NO^tvzY-+$i!KT5W$=c!l6nz^$xXcm*I69+sxG?27qz*ddT(8OuO@vy7+!*`>SyjT;t*^p{Ft-vRwu|f-2#Iv;3XIzDNmB%$}xSB$Z+8oR; zbQlORF{wPX=S`j~`RquJb}z8qZEUAyHki-O>C3Ca1;hT^u~z_)u?raW8U3}6IjGs3 zz8e+(5&_%~vyKPS7)KkmCFY>R!F`5Wm;ml<0Rpt7*cDXdIDt|s3UUBVEe@dESp=7z zOk{c}!U8oM96rq1AJI=C$Vo|SD9CVgX#NdgUDqm49(rpgk8)PRb>e>j(9o1RjqqRJ z`0t$;D)j5GGDvj_;s0y??D?yrpSA6<;oywf;NYlX&c}ydl(K>hKt&V4{=>=Gf4CR> zclUB-cjx{o>S za{g89&quX3b#&lxaChgM6$agp7Y^=6sMnvFk=@1I!XD(rVdLuP z@KXY=ig^Y*sPsq?I5;{Of;~PsxIaP8@V}$`0{V#!{;c$7(Vrr7{J12J@BNPJuL%$g zPO?v+pLj2wmA)kQbApQ?FKwAb+=0sGhSn=K46?NNe~~%t9nF4?a@yZ6!=NBa!hP>; zFLWvz(58(kE5`4=T_z?a_O0B=jHR+4P|0gx|_vz2+EP-bR>9gc{ zu@$x0P~trJACaa1DlcUIh+O8jtJ~j_-koJvj2e%Yh4w$kI6o$Ne-(YepRk`p`+PHq z>k9OOm!ZdX7+M15-=)>GGdFiSZE$IGvvcTuQ+?*?pwyetLlcI+8u-WbD&`;;6EC2n zgR7gl%XxfX+)l z(zpIqWVHSr5m0NKqoGhOT)`fy;Wbo)E{q0Voj=h4bTqTJ@cOR^S!)+_Q#WhJ^Qr}J zi4nmKs^$|^jTVd=4!u8DqYJV%*LG5KbhW;KlmjjFyl;*70D5S{NMSel6Dd$9h4vh( zrlz-@K;L9&x`EuzbCjevI(LbnI(p&HI?A}=A8By|xwu`>QP^>?CGnyBUC=`rMuWTY zpJ{M(x}XG|qYobqptl2ig#fVMvW#E>8O6)rKDzEaPZz0&+W@?ODm%&JOB{ZdU*O zmvb}$c4VZ!rLD+CJ3D_Nbo+Bn=a2`Q&kfQ*4Z`v_gFNv3-^g_xUF^(ctUwNy=BKUl zA7$Tve~zY^2Y}n(x(MvQX;Sq5S2g`u=f9AqusmA8MJYqa0{T?MBf;hr{#EXW>ot|^?sIQYc>IM*->{MUs1LvHS~I+pMD&h?rABFtlaoEM(5%}m=?7!nLu#X@LFM@lHqnu7VBLstvTy|mfi&xR%> zRUMBnOn2S}zq6#L!$^w4kg9cFnDmzcT+cF|jLf`jaobfjs`sr8zunPi6qrXY|i`Xt_Sx>*BA`8Ph^ZvrD7mGS@ zmiqM0de{qYU%W8&xo^arWj(zQ7Hq)=AOQeSO9KQH00;;O0000X00000000000000005<>$ z08K?yK`lv6MlWh%a&s?cVPbM=V=ZNNWo~qHEop9aWpZI-bZKvHEp{+1FfK7MHZCzY zE^1+NRa6B40RX1X60Eobuq=z3tvhYowr$(CZQHhOYfalW*RAMxkGZA%|fLz_$@ID{o= zfVJ}c)ZXBapk2Z~M^D%r_+@fX&d?2ELc0Kd$REyod5t{H4|D+EMa@Rg)%id#2nH^9 z^+Rk&4?LR2?R8Cl(46;yWEcI2_>Oh096`IF+K6coHR$m&kIO(W6NFYH%GI9}x`(a1 z_cb56PD8gr{wuW>piLsb-X4IQmT?Hw_LTchHK@<{(*wp1I5+z)rp82s)`zSmS-a#k z4i;}WUU2b&Xd_zZxSkvO(9>u30DiaRxmshLkSTXxR?e)%AS6NN$le2r(zQu`qr?`UO~wRtN!6HKcZQmoS7UK4J@G;Y?ZPzSmDJhKZZ}uRu9#e35~IOo(FiG0kYE!o$w~zT-4G`s-x0H2 zvEPg{t{vYKSc#x;J^{W{623vHIH{?cx-UhxoJi-*{N|E4%qyzQh6!4V+>cbMsr!is zy<`#KO6ge`TSbyHu6Tc*p74x}w1!R>mkA))bLA!{bCX6hM+><|^>fQoFPaj*5x1Xj&k0+M&M*f0Pq!1YSA|ag#KdfBxbqBp(0{ z86y0HqBd`aO;fd595nA@yg=G}4(mZdKCv$I!#(9&$#i`dYyc$u3+dM*t#w2wz@TJ% zwB|YucFLcbYjr=1K+E_ghl`kGiu#;tC-tN;|`(GL3un1c#f{cCVaIQxlQu8UZKt3cJ7!=EIo{HO=x zOrI|rcuU_6hyzNED^wnt=({y6M@W)5Ff5!gRWrss#3GlagWgGt#Ngz*HE=H@rF#nr zV&US&V)o`r`UsKis%vZy{o;V0y{s22c`#8_^Nm8p7FM^5tjm+VElJA_Y&UHLe6mfVN>{O(k{4Xz zLJ3E^YqBi%z_yUo($s{=Qx`RwF~L2E;AKxaE*JJFoL+L@dh?blvPAC=vO%WlkaSg> zHvB2UvzMtm2V`c#-Tl#O^yP)CTCOh~T8?AQ+#VZm9Xf6;h0<7?`aDYo%k})L2ha|N zj95vlBMs3iu}v@?D3&lEwQcy^%(m9wM_zUlW@k{<$bTRoDM{!;y6HO%b6I2!LlXGu z%q-kjMw;Fgxq1+RXH|r&nzv?cFrA}i3v5fTR1U$&7rV5IvYqVYHkB&ZpltvOMXROD#DA7?QdY5taXVPxh$ zvm85Do!9x9GqY8J^(KWzX2es-1e)0~%9PfuJEn7WW_o4T$Y%uU!+$HQ(I39v>`CI= zCbvD|AJfCVnFmk%%k#s`ySsjy*V_ik$t8$k87T9qkU_RHa=yt}`4dR9I=fhp^ z)OqzsGT(j-&61KbE-_HzaqCE(E~VX>>*}r5Bdef!HFg;^e>EB}PcTHSi}TiD&vf2- z?!%GVU9q0&<=9S0noOGdbLKtjG_dD@l3EYJP}Y*f#<_$je$T1T>VBYj0n^?oHV_{L z4*w>yvL~!ud~}MFSBwVTrg;n_i(;C1NZ&KxXusLHv}1EYx3;i*TIzr)V}J|9n&k?n zLJ0K=l)axZ*}=DhYJxwUFD6@Eq-K-0nC#%4&nCR~>q(`RT$H3~KwadHs%h6EBQ*h$fj}5%;w%gCw`v}6xECr*l zSup_1Rnz`qBEO!GKhYOXy#a(ESw3JJo|!@mr8yOIwvfwYv`qp+CmpHf=F?BtTgDyH zWd4b*ws?3g==2M@iu*tbhm$$yR5B=wL^518av_6gz5>PJMLKyUY_bi8l3wB6-GqK$ zbq)+Hn%+h^I-u!10^FlXcvT9{1}F;db80UFhopxwmZ!9#E7w{A52v)2*_3dWBc7u#96LO!s% z={@$1#t&8=U+~TCZ+}7D7=F)g4*b4EfURgGV_lFnFxMsse~=iON!qt9Ac|^E}4d5XX-Gk z&M{l3kaglN!;4Rje~FLjjN~kxsN0~_%8kL0#2sU!q??&d&5J(sYTyBw^QG^{7kzi1 zRenrr7xkHc*X|+fCnpMdRvyBZq(`?53#$2Hpgp7Nnmjdp*3QC;x ztE~M@C%SlT>Eu0yK}q*;>bqp*q@|Zwg92r0+ijZm9B@^<5Lbx6Tk({BTQ4t0c#n7gHaa12Ks=#Gg?M+o=15C$xWOE*Q_{M@x+y_A; zd6`KJRkSJfq1pUN$xJH<`xF*<7BqAB`pq*X^=xS6OvmX7Fz1qBCCOknK_*+wh_)h` zq&l26hS39fq-OP3P+W@#6V9FsN&OghHRnrJH6 z85XW2)dg}_3E^fntr0R2wd^Vx@=c<&8`x2`THMfL%0s}N9I7f3jLREjao==T`+$-N zMvi#z=vl&nu=n_;m6cuTp?E_(u$BH?#Knmo)Y$6WKHXcr)HI3*yw1NJ)P)P%0|&YY z0~%#8XR@2_6t?3ra1CJ2wFRmAcb)~$mrge@7avqJ>}TfVKq9vo?Za+9qq~-)&H|2L z1~xUK3!e>0oUrE>Qbeyatjg>PcmvfPnKa(=x^<}^U0c@Sa!xFGnUz~t?0j0zRFrw5 z8%;24y$`a%Lm?r^gA_ zz_>8#?6u@@ES5(JHc}{@E?`VqAuZx*+;l-bipgHiBA_9H!YVe-Qk`=j^iFX5!dr!} zU+;^dmSM2@c+1|kdQaB^Y3-&BhvZX5sbNHeK;0<|D#vMUtPjVY&xa%D`*=;yP32kS zn6X|p+(&_}4-k4RTteWoUgsTx-yd^ISPmQJ z@U^!KHfeBi>PHewQCJ*qttGWbE`gxmu&_V1cK(OBH{^BMD+4DzGA$@@XuwIWVj`;E zQ1UY(8SSR=&rvlcGHWkMN}I*Ua#b(MU2#h~u+L}=+S~YIh`VsV%+T4O&0$PtRsyvN zvwmNvdGnBGV@_0x|2Y2oAvLg{@dw`S-CrE~y*rPAMiIO@+ib!7z^qb|A)5P}Wai?x zlN$%oaL?Yp^OWxib6q`MS{GfX;~mrwTCc5)I!;qVm{s@;du1jt(1l>sgQ2OM%oMsV z)Vl4WAto=&r_StF3-%i-x?3?}hOm{@Y)`RuxjA`<^gbHl)1&}ZWi!d`9IQ&dz0+{5oHL)!OzQru_S;LCzyHu8 zN6t*!M^B97+lrp|bA7g%9HV-qOSDu}x%3d?E=%CWkJ5$D!&QHnvt0G2{2$=xYn#8? z2}3IIEj@+AKy`CA`x=byY?I$TS+5dLC1@ruBJ>QNhJ{OiTy|uQKV+OihwOrAsZPzM z>N%I;fJ0KA2~7PK6ZkDB?HYsF1Y_|zm#N)wdkmQWoCe`qMtbrTlL@g|%-HZ!hR}Xb zRqJrCgkJ*i1vd_LNZ{OasOsY1iaQskck{DwfwHcf=!P*sE=*h=+e6Lo_NpQ({Y^!tEc48(d|M7WP!A3Sa(Ny7d*(?mtR`J^a zcza!K8Og*3V<-l$CVbm=N1UC0%H_~TN%|TjHHN_Myvjj4b zS3EP`ytyyiKMyx2+upq|KC?af&`AnpI60G&$C5Xmg%SZ$LY4s}C=ddL7=8)q!Hc{T zIOm|jzyLr%PX2NsN|F%<2_d)Ok__BbFabaSI30ZZ4odg=I25yvk?3LohX(=cL!2QA z&w}5A1Brt95a&M-_spE09~lmijv2ZS5D!no4#7F(0oo7@4X-GnzEMF;MBN%N5d&7n zf-!Jt2PBhq#liE#IR*Z~{*{PG1RpQ-0Yn50Nd54f$2tIz0YaS~#(i3uzLyzHk1V-Q z?W}nI&%aI&6ZoR+CmcBDcM6NUMi?(#-C4~geuBvcn5=IGZef z;V#k|i>o5EB^+H2X{FM^TOM$ZgRVL9rQoS~Zdjw4DaNnnv4h*_IWJR9;>iX34!6wB z*R#w;HwL1u+2|2LmDHet;<4{Ib|}B8&ZN=mIW=Y9%#(8zKYMJ0 zNyJuf5bllB(LJniH!SMgR9J6ldRG|@M4197J2WVcTJTOM?rE(}!O$X~0>z!+>e^O> z-N}{sxN65p8@%lBl4517p^wMhGG0!YXXY19NWZgEb*U7g)Dj(Uy4*tWCnpZ6>9T5= z`l8*O^~$i7*_k(1u`N6s>SL-N^9nu_PxLG8XP$65#ENHgveED6!<$L?qZGX7T6>%^ z{uIVlDy}&6%2z33nYJ)TLqCz>E$I){gMttsL*Se4{ z$csN&7?n_`r$Cu#P8XuzSLoDC*~StC*4oDe;uW05eu}o3M+9v19BT90PNpuy(5$~s zF?1X&9SXi@1S-8z|CL?Jge&l(jbyplz-BfCPN@*j?+eGa!?`JiK|Q8()QLJ}=4QWb zQx~X$b^BfRPI6i`6l2bY1WUGv7VE8i$EB}NPqjL5CTf|O55(IrxQ@Ha)_F%AozKa?>qS zw&`Q$q_A{hkXLhfr0U>NRk#HB#@N}!?G{lm#Z;G)|56xdSAX-|SC72pL@wQwJS$?wfL~TTqoo&|a!#A4FV$_=)>1ahOho^vVc9@6fos@H2AsR7kIMgj~ z%F%D=*!@EP-TsjAo{@y$M}uU2%nl6rhp^DM^?e6^z#kh<4v4@IL4`nyx_?ppx_4aa zsGK@BI>sKI%%YE8`n(tL!Q5RIVoqmyJLICWrZ%2k@6jtX>6LF-U^Q)=U7S6;hpcDR z!dARov04Y`mynC8igx?E=hX`noG$Y;P#><9$@ThNBU@%vS|g6{?S*I23ZOzn>Qk1- z9~GM*p){%Y;WH%~!I-*Drs`xfxb>|I5-&xD+r~bGv+y^_ds#ja(&8qDk+&x-z0rZS zOg_1jLe9Ozv-6BgdW()#5pd+RD0EI;@{6_|s0>Eooa2aMD1Je^KcFP32-weoETAIy zoSQKLQqVh-;lRyb&Qy?*bq)*6QM^kB(1 zw&3DF{o5-^6Z1g7$znH4N95VvhOur43u$-<>(4;6-DaKnVN6fmBs2^-FKT-sle&gE zkPw_SD(&1e4Pgp++Dd=g)&a;QK z06h=9gnG~BO4rCeFW|zyjB`)D+?Uw)t01$`x&y^Sefbc&T zVgSg$j(=8SRTWSGK!CCtB;bEj_{aA^|M9#3y8_8y3Nn(yqH@Zjv}T4zPL{^Brf#No zF3z-;b}pt)hQ=*v%Vn{|K8b8N466~g6zQt9XGx*)p#p(`EhXp&#SGIcH^T(IY0-LjOTOHQ+WRF)M^iAE3 zpH}q9xm0(LrY`MGI(t=%hr2U5Uv(X{qr0!SyYtf?t)K3kvij81*VcVF{3|Tvs})_X zN)0z}fRo+#pf&RYc@|__vMjL{DK}%kB)F+Ixrut@f(vRLQcHu8OC^HZ(~635q&~VH z3ZJ$myG9S@oi|}_xr4N7V!})(A!GPM((Rz1{R-%$4rWGRp*`ty|FwBwXA== zR~L53y89%Q0wmh`9>F2UWz6zV*;jXtGj&)l4v0->3lf@}w%7Oup|XIjDRHgjVyG{N8{#Grg&pxZ}Q%{=HI@dMm(-<}DIcA@{dCAsDd~ zq}3(n`HHBqhYz zGM>1Wy=qN$=+UFKEZR?qc5~T+1B;|4Do%A*BjyB3LP!yFu!T#Nqx)?!^HcrUty420 zM=8)n_$INS9t^)i$Yvql=70ww|#NrqT?)Gjt+=c|aXG_{==C+*#}T@@AWh{NfFu|Lc6A|%D-p7cV70|YT`X~6X$qY+U3*=K{6CSU@O#MZbh@;(1h zDbPF$aD572ipg+jfSm!D2ge|`HWc29i5e%2hW5CSpf>$J5L^MC>Bi7ZJwgHQU=I3z za&)hH{R1(Hvhj2J1eE&ZIe7hkFp>oVJ9iww=0P{?=UER)tDu4pF)mkKu}ZZAe2iZN z-YC^()MjW${mz+FdLST&bpRGXrsZ-lnYs~5u%%BP1SlFCn-37;_OvIPr=iACO0Wds zh4k8QmK2nF8GBdouAKKzlz3pd<>W{D;fA;FCx)z^8;R~ZEVUM;u}_trW)w;bbS|-~ zYAd(|@GWwtO|T-+gOcQ$P8hjW0Fl--Qq)MIs>Jzna;ZYsl#1ll9io&EEdP~*F-`@sW&3&C_u%X{uS8(TXs7DZXOSiZNYib ztYj}fR14z4J7g`yZkeO&b*n^VR1woZcn7}4{TZwo`m_1RIpTx8HAi^3iAvq>eNlm$G|1Er9LAI<;z}DD9{}}wh~{4D~RAH z8qSIl1uffvKBp1QF27x}gvP(R^0j&SspuIHzSj7!bwF{kxayt zAP5PV8QzaT2jC1*1{%6p21tY41D{(}@s8CgX5Ny%?+!*j7)$T>x1SGo&oG#Cf(axF42r`plAeFiWWE8^ z1vlh=D~LD(4K0snbB*PJj|#8?@O$$IRE)u0V?+e!QGBjWFd)l;k?rS$>YD7euis+9 z<;bm$Svyjt#;zFH{2b4D554m6^9-I>==GgMO!{gVqclFV-#Nt(PBrJ#`@0xECiPTWz5B8I;X8BXh-@j zLvVuq60K5C)YdxMk#54kBW5XfDF2DcLoZ7FVz&g0*P^IR2V~Gt;Ij`RUjB;HuPAFU zl55|RoWsO#s*y;C&iJWy<|f!6_INo>OgG_Ht4SRDAn z-asV3VMeznPoSBoMaU!pRij4v>|~2|8rj|pe(8mLei_<*m>h>-sl9~0eBcMXS-BSh zp~d+WyG8h&i=(3C%W+N8`-=(ddDF!EewR$q^0K(z|D-T(1R>~I&>e$(leg2xJER?B zfdX0kg%(q|A?Iwyw6#eUm_!57!+B*;*&P527oTo}!!84;s2@gpx#4zRmw-kM%2PQp z5fW;iur!+=JDyMRt1xXEGwCL2Cl;4PEt<#X~|-lG)V2S z&;E06xoLU&>;CEqCh5kJz}xuG8*hS>`N!dUs$hSn3}*w)8#OYjmOLb13hGk^<>``U z6A^`E&V!i|PdOsft>7udNctKpvh((!`IXcF7!wvLZmaTJ$~L{^I@B-(n=kTGir|>Z zg-M~LN{6}YDEoErUILilMm+==rX195`_Qr6rDuDfA`{x7qcPuasj?K6(UU_2t$x^acF^VdzH zVJ;c7hX$MR%0YkaOZWST-z6Z+J)ylM$WX1lz~YDIMSf6Y*s7(SRyM%4xgs(EXxBeM z-0_UDFgRft24PJTB8ya~nHk_~cO2hq4DwsrIjoB3R1vKU^?8u}^Sji}pip-wH zIbthZh8^Y@K3G?|9ZW`y>$-^*vlhxF%@q}zJUsJJhl?EsoqE=>rLqr*!YJ1O#t98EvqW7<0m(yeS z%3v1Vq_1$(5S6B572t9zQS?C!u}tXhuo=5{0Vy>YTSc@_&nRx;`Gm`fmE$Xa6XXT3 zV+~i+M!{>%Jro9 z_Gk9~KybZb9ES_ffyD}!l&~#V>Wf|3$JZBd-$JIjI8mbbE$%ok;;`UCKY%m*Td{yWi(uHG$EUL@~X0KoJG>%R+2g9y|JqXUD%D z85`N!GIH(f){D;W`qcV9&ef>)L-W_Ktqr)g=mqo}J}Z|dpAVr{Wh0Zt6meFkD)ANPctn*p#)7SlzDRjDZ z@8{Zcyb6w{H+r=Xhx5GmwJ*2n*WT5msqfr!v@r-~k0$Vg$F}TpA;8YOi7Gb)%405T z&${5ub15rSTkLhByVPT+O+DWr- z>&}RIG&(VBe()6(2{iMF-9soOK56TShj>FfmEp-XB{vBUXBsqxC5!zL z3DBX|>cpM9cW{0yCE&%`{{(fj(zIbNK|#>!lNtaLX5Q&RcoGU0GMb5f8hck_G>kjUd$7NHxoe|P$70Gk>-FxW8y@H)-Yj z33eR7KIGOZ7=0G=c1wpwsv6QFG@!fvfe7`ShLZ0(p;LbG>9z58{i3yBXeyVH2eef3 zdbGZ>#|C3l7D-^6GXui3P#9iA~VmkS#V}2+`g%v_ANE zdY#rTPX>K&-vXeZaqwO7x-t21jR_0JIx}+4jJSQXi>w|z42CzEE;FC;pmT4s?YTv^)bd>IEtJ9Na^`$TGcBPa!RmYzWv;mO zqHShA4ltRpdfYS>ykhiX$KCPngc#QxAZ>yT*2E`Y^k@v5m@Y>^ow~Y)`fLxFcptr; z{a)e`|4sq4r4~Sh*KHmBVcqqfeaR%>HtE357djoqr!~r=rBJ~#SmUS=HeX1ESR&V( zR#ll35EKXrcknluJteBh@#X4{8RDx2(_YmUAqa9|<;{DeoEIHkt;|dKYp+0BvEb_s z9jNQYQW;kPIs&A?T`^uS_xPln8+&xeK3u>_{2ftBmX{iU0}vV;9DVt#B|kYVh1{&u zra%gz@lk8Eg&BU7W4qQ?`Qs$iRsxtT4qZ;56HB`oOrBv)#&(&7 z3kA_5F$9QC@8>JeoX6H1TS@_=m`Vu;k?WV4@FEi@=6a|=nlQx6Y>(4BUi*iY?-!Cv z8L9r@T>d`ZcP=wZa_o}aj>DjI@MqvJjMpEDKHxjDrkd2Oa)h893)o>8oSKa|1P1}g z0veYw`{y@H$^DD#N1X@spMP7)Uvpoo+Q0(<=+gY%7!Ur}7;ot8Z0h3tudf0A}v4x_YZ&H&x`-J{LJjM4SuI@#6kO2Xm@MB8$t~>_&UEuo4@IXtloEF zz(JV12=!>L*PU8i^o}KZ`XH$}annIWqCInItNJGk4WT;a=o~C1M)9!+; zjg}FL)Vi?3a6%gvEF)q6BfU9JkcmtD5*M`U6dri< z1?bRG$)KrMBWo^XRlY`Dcj1!ik*3-Tp%idoN@hh(Jpt^5envtKON zYa5~s49%cW%A74rN*04?isIlq11EH=>6B2v2i`@4H%2~?<1y;b7sN*44c=P*wPtHX(Gy4hp9#28P{O~b& zoVCXC!t=3445Rz;yiSbXYH#e~--(f0ORRT|n!9he-5|}o)pU3Nd^-D&>V3ho$HiY_ zYT{Sn;B&I|I-N&!854hB-xB(|>~5@e+`;!{yuaNW?8OPU(QJ2n9bTxMuZ??c?X+H0 ztuK0Wwm&nz{E>#=nalC`A-)c7lIMY+(f>Ste90eOk<0tMj$PaSw6aXWruu61WAw9w z$+dv(_It}~YG9t_yMN4_mHRDn(9OX6t45ah{Z;=TSpkloNWBRd0Dv0o@3I2@Us=J} z#`3R3@VARcS|?L8TSEsrD`$JVe>2`;Dp*KYSaKon*1X1q|iG(pjU=JtuyzYbSfVx3?5R(V%3Dho^_Pfj=ku z5DZsvTcd07pO>Q1xA-zF?cjqfG8n_-<{3!S@C~mnRQ{ucT7o>E>^wpsvV?e%Bi0|A zL!l0chCqHX*BNfuO8&L5!;8fx2#cHvYL+whSmA+gqRyQU zS7`|i=J(f;BH*Jqnt&}%{yH}KYJ1Rf&}sC-0ybi)jo+C(xVcL@U%u0>jQX=BcY})D zMDz_Jbc+d+oY1JoysN9es?AEUK;tKh7-Io|CugE}%iH{CRqBHW^J2yUW(>)B6%N6e zXTXV@6=Y43CC#f2gKURdn{O6k$Yy!2qIj({%~G9vxvN%};)Hf~iFw~er;Ti8+QNy* zH_o=|PwSR4LgLI@nb)ub?V@!RTE{lq3}JA&;R-5c`4rdKI>fXSqQiX}Cw9c-?T|Ij zqUG<|5VKvbt@P)@kXw(>edBxVYOo9t97nIPd5;Gb6OJGgn*9I)5vOoM7>`MsFO&AB z3q?F7DSmm}3D%s{YrYwRbVzuSM-kl6h|%9n_Gg`%1_=v531Kavk3~lylt4vyli5JX zE*_!lHbfEyI>NsLEr4Qip8g24R^7!MXV?s>=3cd4Kv7#a171l#EB;}9l(SP~k0sIs zQxU*ED4UWt$)oF&DOk4}qo~fCpcXb9V`(~Y(^}mK3o~gjF)yM!hgD}-bcAwn`H+ZmM?$rypnewD@L{pM0~{WCkNW`wDoz|;L+nRpI`9n{?Ujth9T}Z* zGFBhBi%L3Z5gGe+xyHYq2o*2mhr{y?`j5!Q{&ul*`75$(G5#*HDgKJ=|MwxSwqw1) zfZ#W)k0^tO20@YLzbb!*K{IC;8Uy#Nr1FvF)o?^$eI|7F!>9Rn#F3Wl!dO^JFZL|y zzT@l8>bX4`7v zM*7AhO03_k->Ik<&|hl(kh;)NM{xdJ0dou=Z-jzBWk|u)*kJMUw8{qt`9jZ?kE?ZS zQ?U-mO#!)mG6CT`!j6z3ZYcDFwY?JB6iYjx?ZqTXPXv9FYW@0@Q-pO;c?o?DeUg}O zr-EirXEO>bP9&NZ(+LCzRWQ%FNDPE+)2ELtC5HM>1IRv~Trgzk?|eTgddvh#%wGlE zaPzaD71tPNdt}p-+)&@*ISv#Xf=bb4NPJWaSMDzzO0xhqoz%y?Qw^xUy~BzvWQP=3 zYp$NFXgh5=xf7tn*Ub`^IvAx#SAEv66PL_;-g5udW}iVxt&LOV$6>HA{uD5)I1%y7ysxBp9Eh z8{-F6*J0?~C@1y6D?YcHXciCJ5KgB7)jZw9|HJRuxH#&Ge>J$@NdH|W`#ZnW{d<|C zv$gcFv~&L7Z7-`JD?h{l)AK-GnU@}sOLnEkai<9BxEq9Uuj76%kxM5@UTOJ*%Z?e8 z{q^~|-89RtstV2}hf`kFrV52zgJuKr8N^Ge0!_LxM8^QAb3IK^9WI;d=Nl5Rcu-->orIlIy=9U8rnzFl_dda(V*Fh1TcxB`qE$gNU zA=eSJ1=twiu2eyavNRl<0sDAh81Us};vkN6BpEjtc~T*(yBY%6cbnnn+@w4-{%!lE z(^s>CDfz8krhW!tOgTQdHhkro|{9AOty zQUijl5!mk!1x9ZMAIoGL8pUtSrBPk}nOT!ttfxjBCUwj)-(Ee)i;+UfUX z>0E0(H{BcwOB<0}f-{8#KHZgG0?bJWYWQVc7>weDBtD}LiG-v7%yo@Si)dYX)_Jn^dEyZyP60)yFY_#D{(@bW}xUCRYeF3)r z1h2J=7|U+a&WF3SUeA%LE8mny!=RC7v`*9o_|GZOb!?Y#kNld#7Z~LdLGD^8jeepJ zCD#U&p6%-eD|$Lex!bh?tg5}65UGMZ5BPa8&i7-^lPt*Gn?JU=0r@)O$sZyt8JnES=#{@LL5WY@L~<{fE6T@TZ55Cs>0pX`y454A}JT zNxkprJ$CEK&csQc5go0HW4dy4$X3TD`RA+v2zKso1LdZTtaPVeNJu$|cHE_go5;0o zSVSwUssu4jUsJ^u@@QdMnvWI>egvN^h4A?qGNRS^-}=uRLigF7g}2+&9j zyvG5VwqV`0>!o$du%E+V5+r22Prz@AgY{@MVZk8yT<7E8?$;+S{-2v4aJ!ht7-YPK zHLiM!ak_2Bqx-O9NO^9Lt*o=`BT-Xrp;(p;^dqf+qY3M~+M7-tF9Tk*HWig%To?lYyq=nXvo&7zP)SrosDcRFufp%d7#f4yUj3q=o z!uQE4cBzEwaQju??)K5&AXM7wdaFgs_O`? zaZ++4y`yuwiAo<@j+HNRy*|})X>edp3U||P!oMMR)Z~PvTksjMQ#xZ~-Nn7>uV(qB zN=){->>dq3*cT}eG1KnJ>D;oV2H-uVS(=#=iQ0fWs~Y0ftDkT8Y!_GV*>pY;qMl7EBu( zHmlV`yoRU;ip-`Kj<2!QfH zZF#1bicI$|K+mizEg#*(yP6|&Q_O_D|{F zqubmPHy~Bbg*b|pcM)@i5mC?`At5^YS)e=mJ%HjPZ{!j%NB|<~j1vF?e=!yTE>T?X zq1~3&fHMaTpQ5^O#4FMYy4gzc6@ae7`|FkPpyp4x#jbTasex z3Z(PNj4^6D%1rF5KjNn_uIUtMT8ULg#P;?(?2r?4j2Hy4*b6x|Nh4j_+MjA7Al&H-t5PO>brjMFw6Gf2 zGvAXX(p18?yychWZ1FcIge#crRaizI3KucgWsMlC(Im~oc}lx{R`j^?(V!V>U(H1t zwJAXtrprGXED^FWS8+VTuXC>=$0pCipA*T+;TWBbPEN}!kL4Jcq(dttW^wr08NcJ0 zAI%=jD7BboAt73<@|Rn59_zLCnbS1qTRz+Tbg_?l$5z(fT=ajzxGx_#(zwT+*iNQy z!D!Qb%cwTJHe1Rh(+E=~)%?mJ<~;v@XnD)1%C=-po5W?~?(XjH?(UGdyE}<)5_fkJ zm&D!O-4l0rNF4gqsqWF;b-z0I-m0&Eu08gc^GB@p#2fF78QAHK^pjd-qV_1Tdtk?K zJ74%lYE-c{&Tg&yj)IL`_x$?u-;;j6vWwOuGV$Ghdj3|!3SL1KLGr;Sur?M$9n=3l zM>4ypVlRC0W8ehWm`d!DOWlF7jhTw1?WXEN%2n9NbGx`GJ9)w~umXbJArnJAmaM;6 z#V=q-@T)3kDS>>@G3U*IbNbe*B$V@B>pSN+d{s9;je2e`^5`&8DWjy0x?GK19fmX0 z{r7l(MSg0v=#Hv%3D-WmnGP_|hD@1H6E(eM^c*4t6|aJQYE3%Ks2S)Bk# znJEv(0NX(g921@*H8b$lUZiw9aS5A`ppO~P!n4U~@R_Og&h2EnU%Qr4#Bxv?R;s?} zNAj3=5~K0}m8z|MnZ1(rxMjwgT5hDmuUQHI44GI1WMwo=XNC|;M__@ zpz4V^Il-;eluwx4EH#!DC46UAI^VsyyXPYiEJn^|P{V4pp@O`gW@%~)zU0YU#gL^& z8d1{BbU@Hh;j`m#vhrAi&IOG!-`AJWtUx5j=8 zeQHu;!eS8{dWmT#UW>8}A{cX6HoHV86H1z9QHd@iC4io1+hzP-633F6jeVs5vqhPTZs2K+VgI| z{&$~__$Wj~)&akuYyz2R@8$p#vmH(KTsB)L(DDo5BO5x*E}U3c>R8|D1+t*HkuS0V z><+r`DrYzZq628jD4{fA808%4bdV;8~lY2(dVc<&{TgnvHbRX31?)$Mhp2)lR8m7 zBwy@O_l9pMU*LIJjLT+Ur|%n>Pld`)oz&^`qIHB!^V&Vo5wi)-W4jU~Ugm4fz;Y?}5$n#l1_#C1SUgi03Po9rR6Z4| zi?~&VXgaGvK7~;aT#|*KYTNz-yAS|s`dei~TfOX(uh!Y}DnBO;&oJ8R(@Jq>Y2khG zy-n__d-R~^5_rz+3n1)P=Q6l;8ie4}weS>1@B__tZRD5WN3Io;{n1FXE&Ie*C6&*6AW`my z060L$zh2G3^H?y9TE+fQ<%w;Of7RERZMe4m^!w@_JpIglS(Z_@rh3<=nPuONP?TZ! z>?d*c4z8Oh!`vBr9xd5Nxuct)+(3xsGCcSp#y&sUtyR^XQYV2|0Tnh>}8 z8Il!l35gmJ|7V^*Co;_3ys#UM7#fGF_-jewGVoh#Awhn+Xi^rbr{+t>?~T9rqUdnd zQkMTAfcP-}RfFVDYxiF(4axu0W&duo|LZ*}|E1L(|CDk6+9nGB%}qrAeEM6d`*-ih z(b3jR)X3J>*vQ1@AB1G5hQ2DUI+j1es;MY6d0vCOxDJw~h*fGVXs96?3AA0_iqe9H znF0qCpIJRFC$72k)i=kEhoLoVe96{h#N+#4*q`B=OONNpV969_cthA6NBl?cTvvDg z_&M)>PiQ?PUB+6Cp%&-21+idUX2t#q61Bfj~PCnBuy1ry`ijv=r@{%{1B1(7`D{SJsaCtnOXTWz345RtuG&#TU=IQ`kM3*cOH={qYCoimO0JzF6e2WZh}xnziNB|$f6 z^axex=}_b~T5n@_oXhi7?h4J$mu%+~W9%x~pd-d5wJyK(!}cFj7e9}UU+S10bLjW- z*B-ZZbctb!h3|YgmAJr~7azPk;Q05dq7K`wha15^bMYWKP?qA}H+7a*B&A${o$$DG zd*=2*t(S+VwmvuKZ5gXgwZ3J1o;G6c=S+5H$l~ZsQP0jLmn7LOjEV2q-xP>b@_P;M zFL8Jj{o+JG6`r_V97r$m;tFd!Lv6g zr@*C|bRK3!0U)t{J9aP8Ps3nON&b6*(B4c^XBPLNFcl8r6b}7!xvmbpRjX%rzm9#m zu>E;ZVJ43|y&d+U3KMs}`Z)_^M194TweH>n0=?+V-Xlh@@;{@}hqq48hcUmAu^$LQ z=e}x&eU0l^#wX=b;gN8Qdj3XwzlALEA+qvVpZf;-jNXUz!W6~!6QvZb*eW+aM&rW* zMxGGD6r&mG;qeQKcxM5%kt3C$P<3MNQQs2Jl~fSUH6 zw2Q{^XUPQ;Ay~K3JIv+BzQrz8mgdL`n2t%qJhcw9^JzZeEmK!sW8xI&$*b5l0qj#k z%oOS!%kwP;!(2%zVok{Up97Qt9bcTqz(GK~VE+nas{bCy{ujf@L>=s1jjZhdLs?v< zvSvRogv6g2nTR!C`~{ZUsuevRJY*ELTqrrhO1y}z$}&l_!Kvwj<2O$oXZ(vMQDB_s zHrNx@KqaaQ6^){wqxsZRRyyn6+tc#}ZvZ`?`HHGYyJQEUtl+&x__*X8I%XW+{d*%(z9qRlyL5AzZ;`UhAjCmD3<7Rl41+4qucrAqhe?^+z8781F|5e zE#wufFPb4UUGwyCH~J5)C%wpCTHxF|xv0SGfQ6P-W-T%Ldm3RnGoQ3T!&iITxE^o% zhLLWy_>o=t;%PjU~xm^ph+bjt{wC3|J%XVW`GcF1LAhaPsjZup`{>XvZc? z43wV5sDjmB^oba*L+;&@W_ob)52$fD9Z{uN=aY8`4!oSxV%o&nQkp!dS?M2JSk3!Wm11IhC!HX9kL1>x!X=00^Dp2q>#|K7!%| z$$L6v29*xc%JLrAOJja=bpJnv2&1Y#Gu|Kh7Vj^QvZVk2c}xG{-JH}Icg7V*|0$i^ zYJH16qp01+2Bmwmnop`(58jqG6-&r0RehEbt7?=prof3h}eEelstGZ8V<&2P= z;XPV>W`?d|;aqZCMMhVhY3ZqWU^GDw4x^Vnm7V4@Bp@)byBSoo-P-PPhF9qj2rKw_ z`dFyzp~m#}rXyHmUPxy9cC`|64s?{GTd1HzcXNH`J-PlS^&!=q=V(XQ|I2)9mU4%v z+YLo5L>HYHC&w||c&g6}BsO^NB;5of#%D5%&zXBICQ%zQwSqqh)BcD=6~l0_60nI~ zfb?2@XFdmucQsKrjWq^8B*HToz>ovNM}KV-3-U<_nlMx`f>?l<3QX{n-yRE}s1`e9 z{XEEN5SbQaxo+z*{NY1%t())sb6A~kNCVz)ZG$m~qQzxF?K65s!>j3hU%K2~aS=hC zIhwg6zR#>fI#o}aG*T}m*+tK=iqpyB!qUZYry}nlM2@FIx0#}0Dw2n4Sxdhl6Jm^C z#qZ?45_Kdu!xL1Oe~Lfw!)&a@-BXfCBhAzxgDXek0(h%e$Rmk8QFO!N{7V!rYStK% zn@5Ht6T!u)at7Hdw8`YMQIEEPe_8L04r`MftsY4WBaKIr{HssOLkPF+bHt?e;N!t8 z&7`thAk?sMYD0g7#pyTYbnE7Dw#{J~*efIUXkt@H%TxW|MMq|hN~`=0e$#dhKC-(? zJoFEAW1pr`D!I~{<&~27HhI=p?JTy>Nm6dQ%y--V2UyWexho$Jt53Ub)>jCeD z`-`K3YDQ?By3rZ89%NqNb?DOxQ$O$RI}asa}+R}^DKW=lhv@3Vq&-wmT2Au&qL;>Wgx1J5$GVhktai!Zu*QAKSoK^7{S zjU@6)sF~$MyxFB~OpxDpT7ZfaaR3ydeQhX2wA zp)-dRB?6%5@LidCa_h~qMYvCzv^TFG1w4MhJWOE^ua&dLIL{JpdmdEZl)vQ2^C(eM z^Q@-x6J8B-|4|EMZ{_Clfz<$~u{rE^u%SB6W$LY)Fd?g@McG0xu#3qT)#{&W9iy|l z*OCus+YZtsA6p)^TDa}C&Fl$I3<0&29i#A(YhgnQ&*4n`_+NmdF%g`}2>lPL>QYRc+|~=OAy`Aak*CLI(2e`p4ZhUfosvhGJff2o%>CP6CF~#A zMLv5S(&_YZDv=Y7D0gyolbe|I{qv@F9$r5BZnM=6ld}ekT+I&`dCFWf5C|GP8})Wn z-C}*_vUCiecy7!vqjOJowE;%5OZ-M~%>@11+|v5-b_4LeVIuQ zM|BO`{rP$aQ0w=2k6Myh`PJSshEJr*Eo#K3Q{U0~HGhSrN1{E(*zA5X>uS0$Wphuf zBQVG)#>sB>tszJ4;5(0cqJd%I6i?kTh~{TH60LaX{zVA{*K|5JhD-V@>FZt2| z5ZhpXgQBW$vJ5cF=>s>_+eT8pE;Y9dF!^z;>cGDic{WKi7ykHeB;~~_8n0Kx9=O+- zA&%`sKdWKoImd#4({v&|%)#*s&Up>$$q@@+0~nRPUy8y3n%wMX%}KZLP61y->$0OXX_^ZS8$1S;+FG==c8gDkEwWk5cG^0PlV-VJCYFu* zI)ewd83DT#@S{Mcj{d7nq!_2&X;zmgcrB@T$xeo`D9zV5qyFEf>Pe>h3D+5RyyYc4 z956#m_`?-G4AqU7rSouW!9?35O)_I7SbO1zoEGCz{|hvMwC0{GYbmSXxUG4e{F^X}N^6 z7@8tCGw16LEyz6)1k2z0-X5{OpLHAV;D+qJ%vZDh?%(=`qK%EzLl6xH%_pff>^79} zP53SvhqPYEjYsByFOa*=pP<>QTZGo^*e)Tn2c6D1WdeVYE9HB!Yn|QR;wk_7%@;G~ zP_w$PUrrIJga$y7g@sgFWJO?C*uqO43|o%C&tQ+=b8l{9yAl=o-GbLYz8^wgxQ1B8 z{Mh$V?Jqe6EfCD>CaMXw^OY!6HvUT5py`B33I`RSbH#T+me}ZEC!KQtfzhaZx zzs9CNAO571h_jiIjrgB^d}PAruK!WsE6K}>2%~kHoT}C@SgS^oSSn|JwM^TV5m)xq zN@|IAY8l$^@M3Y;1pCy9^cNDOX(J5;UnmwBh@fI)@6dfmA5Sko+Xk93Mlm%zYI#MOhTIv{}OTFP`El>B_4}AT-=Hr6d=wV=suxzT5qsQ!zBX?XvZT>56`z8x;ibU z=a0e^K_+$x`V%OVI{TYJPt>vxhYs1TBK>x#*PM#JS~CbD1?saH*c_T{K4f=33te|Y z*kS7!0?MF#bJrLi-7nU35kr2^xiaZ-PhPdT8)?~L#`L!0lY_!J0n=7l0QmU{n_b0Ma|aDVfB><;zu3^L{-Y=Y3T@bN`%Oz1{^ z(4!7&kKyIU=cv^K@K@s}$ry;Th0v~;#1{RqS=Oy}Rb-a-Zcmpu2m$DtbJ%zmPuxD$ z8znea9zs9{O`wb?36Y5D(m=J0BG;F#*&9!+52ds$nl5FhJBgjii11Mj2Gr29+T9Uz z*mp`QToW!^L9@^0@Pw8SM3nE_&Wd zxMH&0H`@=S$ZSLcvRT3FnO}ghoN9Y+-c{!E%CPg&9bp0+J*;X~(<;ZLDxOt`Dw+tU znG9~^`aUI>+%hjYoh$1~`Q1HwIDk7qE34e=VCwrPc|SxLm8vlV^iwaN$8T`-^Gl~0 za=*IWvga)h3|vKJl*lKVKnOZ=Cjx$b*9G1C-<_8g*%%#u*iT;@Z~O;;x9VatVtN31`zltb+!(?72@+$WXER6LxfKyy5$$R@b1dbG5Uf|Ye=_Nnb@ zRNVy3OEKL&>4_tg(snGdNi+DcmBJGTErdrHAmY_hH8RwHeN3v1kjIu`$+_b*h*jSr z?O*7)s!)RHSQ-&7xKu|jN6!}y#iFDsa7Cn!Fb6KNzeEs;&wcmjly(jyOKf1#F=^ep zzBDnZQ}}GN5?bbydF&KvH|>Y+Y=JIBX{#O)fx>cttZ@z-`O@71i_Ez@YjTNUgk9t& z8aCJCN`_NADHTiQk6HD+?n;O1qw?JYt@3LH=Laf-nQ`aRfU8BZ3)?q()ORpc<~Pe) zNyd-4@4SwwAJfFQcpDf)SU$in!9;dgBdP^9SOsoqO~S0QD=Z;aD4a8^4KpqG46%xU zCBA1g0F0O3u)Iux2S+hg@z56T{F5{|3wU}!Ql4XOSAqLV3)s>860uCrmDUHkfgp!C zHwl$w$tIg2shARY_6>uvp!Ct`Hm;~SU@PN}Iq9UCq$XnRDMk!a`k9&7hmdei@hZZ# zY5Io$q`=hr9sbX%K1ybV?~mL>1o!`-s&_W~d+X#sRm_urRP{(75;|6P+A*eqsAySS zSi@2>*JDmfJuHygQes5B45q#TVC*{4lS38Si`GRnnoj#;V2%eMsd#xU0f=58G>E+> zjbs_&|BrF8!3!5!aW!7G#(oq%BWGq?{SE&2hOb){FZ`f?uH~|OfC_l1tP5Ld@RoU zGi#VjKVNTSpw*{=B1wz*g3qF&vflea3hZz6-8?M2R{pXj1v2OI8T z(~n>TT)*E?`Vm{J8OgTaLbLjqE_vRCq;?+XrLv)0My@v?Al_uq<#yfV6p4by%ea0r zO=Md(7ssS##9TS^UcZ5%Y6HVB;{$f2e|r6lVIT}{1l@}FIhY4DBYN*HCgqRU+ucz% zmdDUjA{~%z4#9!Y{O{cjPWZbI=t>D#}9tZwRoy%V-zd7vZPBT z_0;f^3D4>ymB)!g35wtzr>c#>2C(5o4Znez&?HAjFyJFL>=BmMgN0vPACuW@5LChL z>ziRVED;aDfB>}Gdd|%bq0Mf`;jT$GL2kajwY}d@ z@&@m{pjA+3Wr&)NzKOgdJ{UqRtiV8jpz^lq;Ou_DSIR_yh6AY&!h7yY!N$( z%P7J#DWWiSUU~@&UVAa#&z5XyfJ1g-*QquV>6GY$Co%zwy>X=|)kNdYRp;oCgOJ(b z!aU)g)Pt|)ah7-2EN3zR#3P0=#}@a4RGNM$lQpx_f{9zq1%rJN@$3Yt#2}>ZzL&hS{~A=MNzj@N{;(pXnDJvL-hEr$ahI%VlJGc9OeDFENV~Spk>0a zO2?6|eDh^=mSC_{sN4fkJ%mrk9%}ycX8h&yfhhJU@-tHdT(fi>uJ6VxWIWQhZZGAa zxp_b+o=j+SYT)uUq+f(?0o~^7pZ9kXnFT@Tz(7C<|5EM#=O>H*&Y_>ce|7c0^XV_G z$NyE<6R-L-q0iiyFc%H;`4)yb#kHx? zsm$;KhR29+@kaTz(Qk?Zfh#U45SKEM|BCx+`OZJ<@$KXG8X~~V7H*=IhRMTpu(>K@ zkwQ+pS-!D)y{D4*R_OWA8A-~#?<_dI*Hg@my@5tKunV*1PTKG~W=C+xGTQ26GD3lKo25*3{Y5D*jq@ zc~g1fpe&RlZhr$WlAWlkR}kBB0XdecL3FJzz@}cWZ}#j=$wV*7ffGwBt zu`4$@l|7Z7k#jkco=%0qlb%Vr6h&&2T#jcC&QepgBOPe*>@Y>>zw=fO3NvgEKBn$Z z8aV-Di3k@MH3;uqq%xtxOZJsu^|d3edj92}IQNWMb!x{ZxAN>j=D_`!s;tw! z^j7K3yk2{^uIL+Z`(8361NIDrFfleU`Wnah8Xm62_l@{6-43|*)|iQ!SzgxFv#g-V z6q9!Mnt_EwIA14;7!QlH#V19uhS)m8l)B@2ug{Po1CmL+QSS|-$gPoP^^CxaG+uem z%H-Bfiqf{IWPj*N*r*(%h3ZeA^d;~YI)hOm`qwT#Eh7!|_T5>hnF^jRW6e(ooPa71 zs%S<>&TzMNS<+C~pnU(qP1?2gpMZ=mW7VJD>I~^9iS4VE>Pg+?v4vw!Nr)bGNiS`NE;zigihj zhmn@6pJQ2aW>88D*5(Ye&(rG{%jP57}=_JscKv z8?gaHO&Ok9Dg1@#Qhh({^xmFM746vrpb2h$u;Wvuut(tHKcQxk7Kr>nRHN*0ASRGD z=>!h_0|nvliFf%FZ+!8jW%NlMaA2a#;lHX9sz`<`FxlOQEXeCbge*W`hG6UUNv8cU zz_({8?k^%K1%(YZ&I37i%$X8T3yPn?%71*s+jZI2^nHet5ez-x8an~UPj01XWrbD% z+km|z7$p6vDYcO|q1!UnU5s%W!EAFG)@%sJ}5R7YX(NW~Nl|#2_ zmP~U8lj{_-?_fJpKg{l8uA?BRTU)!&rDWYxTI`lj3WJ#oAD_N(+FqVxJ)ZgWCGh~U z>KOaCG?ak2k|-%I+m~=A@+11qPO-f3x=$wR%Nq{Ou9g5zNKrR2>;{G$;<}E;jxOn! zieOS5jV%_@cea*i%>c;45-R3rL0z6f9?{t zjaXLotczjlhxl{`^vDBWK{xW-WR|N7EFY02etYh&Ui{%?JspON<+Y~CvnC>~vBOF4 z;MnH~ix_k)o>s=GxZ*c#Q*7g=1KAzuX+=`EzE%(H53WR)&of$CV{lAV=$(fope$fn zp+S~?1d<(os~E?%GbTnED0cU~=i26{cX z19n+hnNeI%)|l}Y5$e{A0VWpg3|9x%iQFQ9<%H`hn|YTje|s;|Cb?!f11K5#?oV>g zkgX;w(65?6)l>5!Y=(z+LHtC(jh*aD^e}5ZgmvMpu!kS61fW@nyvi#O|CanZE8n+x z=0!_gd^5G|)Hk5J9xScsBSE-#ekP04ZoJks)QBo|%ecj>L#%yz0#1E~w1_!(z{^x^ zm)7<3sw6(2>_%g}7_KejEWDw}40p|LSnbE8)`=Zef27t}z>X;JMwJhqcAD2Zbf@D4 zhG8)1=w^z0ATTTgy*4aebuXjDB6(k%{F_}p{S&Zk(b7W77ZIl1fJv!Y_S z4D*$GoPf$En9&&OO$Iu?c3~!fU>b6CQNGa1=vdwiRZ^K8Z*8ox$sJu7&TJ# zYGGCHWU|Ec_&jjAnlM?nJ4erLm{1l*Js3hkRpK zGM<8O!Qqu0DA^g2W+teK&2>Ar`xbJRX^|Ftf_c~U4YqHin##X747z8PxtT&F@9~Fb zSjk-XvB%%TrM4HSRzWDJKBV`{KH-=g!=_x)5b!pHl8#~Ikogr#$HlrupNXoyrz$qE z%!2}GS^`PDs@*xAQqRjbc+=qP^n?+}>ni#tt!ea7z{3N2h_IkRSh&Ji%6zb9L<7Tj zn{xR=-bAKd=BCTbNSq+qy{n67|Y1 z{BSUOE3u{Vz+PtV)tt08X|?W4=vU1^xknp)MFvn}!_F|$B*=^Uj*EM#XJ`zF^ACLw zv;+vX&sm{n8o@I=Qov!*`UT6C8})#qI+Xt zBF{JAtCpGBFQiH`YQt^t(mx?k%T~6i>j_^A8Jku%_XHUgp7D&5H5|)i=*w~ z8HS4sg>T{>y0hh^)Vlxk));OaRhjvhKVtls-lNpN8DkMMbBF(M&8tXBQC374DVP1h zO#3%f(DC-5sQxb*mVQ-<1R`>D{I-D(v#3S4+;iPf0U?8OQNlb#^vQV<0Dof*FKhSK zgoF9f-Pt=B2!o-n&_+TkJ|J7e?_p00&r+JS?kfVIDr|{EN?(%fU(W5M&^dGvylQT9mSu)5!Rq} ziO61Ej^}b_;2jsu3141*B{;9#s9;C!9qrxSYTF5@a_jeGC5$pa- zBRajocV5Ribrfk}XUvbyH3H|?b%y&lG6Kp!0zJ-&_IgJ3yW<(HkeHif60~OQ21k+` zi8tzKRsTqLq~{9Rgb5zPUz4Z|ktlVt7jl?-q=#aSZg1SSc}VN}PaU$1K?<<`BhbZv z8EBb*Gti<&_9kYwW~Tq_dv^XpxJ^ni1c8guR!j4Rxe|mt0g23dB_ki9P{~``fp`b( zjT+NGfY9t*9J;q>jN)Psi!?vdeWjwgN}dZwK!%g5@?i^*2e^IH=rulx_aVrpi6Iq(wDVeW7!Tq;>}Z*4}hr zCpD>~aWav5l=qxJ!XcsdKTN6ZN{ZRjWw^jwnQqQwqw>nt2DVKpW?#^?$|KpSY7qSm zH$EMN!29}16hNBvJI)HYYD~hexICse_Aw?9GlP(&+Bm-$bwb@(;;Arf2GFl~aGYMJ z)kCRHy#Co_GbyhT^tVv|{L4@a|9heSN71P{?t}U_(Md5`I4UGsXe=ab6WAmqs*3|! zmP|p0CQtagC;2gywXv2$z#?-z49?_p1OV!^Vq2jmUIox`1uQ zTx{XivbghA_T9&Z%QXMvNB^J?i1!VcXx~ECaT1Hs*=g3PLV=7zto2>SiI@wpE^l>~ zn3)V-He3Ez221AQKnM5`Qik$ja%q0r{A_PHw!9meC)V#O#@V5C>?sYy2I``;a&yZ> z6kkARvgK*EGn;NuF0poaMj?mUYDNf1@V8NJpiX{vuO=BQp57N3&Z8=A`d`)Dnw6sh zgIR11zN$-g=5X9F4}e!r^W>VydyMDSKv#1|E_uj0TuI_}d8P?_VD&4qTxKBIY~nVT zslEdije&fXGnyoo%d?l;|?0Od)vf4#_ znzchIoO;f{fyxCnQATxB8BgEt)VO8Qx0dI!SxpjNG&}zYe{#V#;?cW)hNmPm!Mad#-gjOHpZz8KV?eA5xa?a}V*TeYq03Mr|}#lf44v7)%Vqe#0;+ zhP*x9nu?4(HITW0S4U)sxdFlvO*v?vtKWWHZ?(T@GI2I=h)Mr@HsGi{2~q9wr%sdb zV?Z^P@B@*>tW)X1sAO|s?2}s1!nP%LShC5vQ=U1f~TV|?pFl9wMC2e4nk|Ej2X;6%__z6MkvydY+k{wM>mg>T^O`k z2XNVo!ywPLOKLg}W@qix)gRTw$k;QISU0&aG~E zs|v^d)zk8UU(Z+j{i@tWFw{|eh-!!njTL;*7TUx$mZ~*NIQ2QuT(fZdSi-g3usp^- zeKv|W|8+J59SC(FW4R%go26}ydn~Y4qyiqZWV1FVqM~f^{KLYwah|%%ARPWe@N@<} zmyQJw4Rplh>ySO$f^zBAh!kmmuzzZhKjQ#xDke9!PsDw!DPNd`!e_{FF7OG$VEiPW zi1>mL%`< zQIY$A=#)x}T6}k*I($yyLyr1ci6y>v<0hQo`+RV4*LohKG7ffhV^z2DCw}iO`upp^ zu*7=dx7LvWFi#9<2rl!1!O%5*qcS&S$^e6jMmTwsq#tqvUrRZ+#8|3jI z(RNiOe#l#$Y5U>NxNq=tiYtUS>`%N3%i^aoc>EYQ64u{_;RN*V>T^Hek77W!abLCq zGs2){q?mpO;Oz^9KnMh*y(6V#7g9KAJ@ zFOn(~7yyM2Bvd|Yr6+n_^YOv1&%TD9KpV;+P~uw8?kvoP!pbLI5c%4y9OkbFf{Mz3 zFfVLFj7gb4>whD<8chAgWZf-uI>j)Gu^-C-$lL`m@l|C?=sh`b*`Q4NGP$!&vI*(m zzu2w?y-dF=>T%aRZ@hQ}$e)zUxPA*tQj=Jk+dA_wKow$8Va=Ji^=)CZ?mQ&0(m^b5_0nM-l?W zRWjbcUo_Fr#oGac1ObUc`>WK$`(O5LUCjPVw(9c=S)u&*Vvf=(k`Qp2R76zJa4I4x z_L*Nw_F1(qb=-mUnHw!WLH&N;!dYXQ)g6+YUch+1zUp?AcUho9B~h3;9}MPHKk^^> z~50M(;k#eTbZaDJL2q$Rce7eMlk(egb!k6$=_ zfM&=F>+ehiq3So27@`%ttLy==EF?P=3n}<#@ zJs_2{$X;vxj(`yjZu~$~RwLy_8Y8kuQ#M5-BGkESs|Z~rsm8Nnb2~9-e~yg;6RT^~ zkDaXlE$$JkAmv2b2yR)H#0h4Buirs5_=V7uJBBl!U=Z4#tj{yjXjcV6)2}OOv_pDy zr=EvPhdO{T!qt-&X9Wb?M>s*+36Ob(crz%Iv07S1wCeiId$N;$@E7 z({~=N;`(VqCvJDd51gwBEN;7sD81}<)2rx3;v-2*(w8jurRs^bE(2&pp*P<41PVGhz=qJS?qiz4~f0LDe@PfV1}><#i|Hos`e`i1(# zs(vfSO0mjxjwX&9CuA~Zq|k3p{G|Qa`GZVjSISuKxls<b~_L6oR#M(*aq#bdP9rY z@Y&Y2_|8928+w5yFlgZvMM6Mc{z%nqeV9LKHjJKRpQ#XBES8+rzHGG^+CF`TkzH6G z(_000nPI)fE9WkI@Wq3Bk-JdV554bk+OJ7X@Tg*hFbH~ialB^_P8Xj77U zk3*JTgLp(E_Kffk@OPgO)>#Wh_TT*m-)1z@5x2iYFC%+~E5px6nSBlCL~s4x_R%`@TU!0;`JHrsEeto~r zmGFr+=qja5<`zdH1wjVR-z*22uE>36Kv`23&uR$gJ zkQwy%%%cl5dxpczDaT1iVCH?Pf zseZ!wp+P1ahHYunFBQ4G3s|WPB(X2O1%Vo%rF&p5^{qX9=A89D!HFJ%VTe;)T^fGM z1TSCk2=U)(1k|TD3PlDB<#HzEe&_g1U1jhgCg=W{%1N+tTC$ z@|HM`bGyfe)H3V`>V6x^ZliyzjW{D{%-~@I;=bqe6aaLfrjfK)wO3b2UXwp+D@z^H zjUGu_o>K$7$%{LLD8=X{VPi8BcFyz+OO3eu?w@klu1T82ZR8=mOP;{X zG`@B*0A&1l%ZmUouiX|oh8&f|^BgU$0lon)mpfQP>_0Y!m60f#b@5-ta_%k^h~9kAQPClVnQI07wa)hGJQ!wow( zYnf!TpdFp+-IJDaq^fw0@72`tpxQvNFIPFMjC8N^8mMp0# z_U>e{{9)gI`w z6)w7I^Wkr@t$s#(PVg(t3;oSF9kbvlx!IT@OM(X46VUbG1#bx8rHXruz$sA@{qlgZ3J0YY zqYw_hW6qAwKpmteWQYU+2f^o(jHw}l*b8KK=4W*cLf@wJeIs4!Mnw6RF%OF0AZnB4 z{(sx1kVZdIKCOj1Wq0U5{&ZR#ZI8+X!9hSG|I#+)`EL+Q+SSbNpI#r`(8Lu-`-CT3 zMN)xAwhnGw#E?nANV$$j3K|JBoE570@>cpiaWaI#*4>2zm#@R;P4FHsw%U$=Sk>#8 zaQjC66C=0WgTqSLNL7L0B`!PN=j!cnb1U12vRhElAJP!n3`niYWu1;`r(ab;#I^2&6VZ;bJ|r-hZ&HI zb#|EVMzr9z!`C3=(W=cNW=G|q4fRkS1k&HQR16yg2n6y6e>3wjGfBL@tJ>3w-@@yk z5V#QbkSS8{wW`b>ylmZGcJE5z(M7>~Qj{(=y^lgr zE*CNN{?Ulf@yCyelWpMlI2|fvh_)6FPB6s2{}ZLur(j zJQV>9mZg<&!Auq^YC^$PNR&*gp=iY&NM#J@g$5*3QHth#$Y$_i%)z#pENN!YoT8a& zX&GcCLke5P65|ejp-0y_QSLdOP2yGdN~&_rYnmNWj_tWy@^^6e9G8JmZFIJZMU@vA zqv`S0y;Pe{!au z{-(ZV-!W)pyH}6YbnS(;0qvn&YM^q)aO^|jaoUupqt_(Ec7GVY9_?L3buRyvO$udF z7l*T{wQAf=70aq2{&oG()voN3RgZ=Xt&gXgL!RN&gOEL|n54se&SnQlVQElmxM(L| zdCG8^V8+cpe7HFDh5aRR?hBzC0Wj@8YpB|CF;MpUIqe*mkvv{XsyN=9w?QF3Yqpdu z)(OmWKf_mkD}Xk}B(-Y?2(#HEkJFu>n>z~{BE~3!dcw%l9XS-bU&(mrlk(f67z`}% z%V(_AkS|zZxHft5dKc>pE{ebeq)D$qzCiE2BJ@B|Y!_Tj?&tFzjI-iRmuoMS!WMz6 zfMjzJ@{q&_aLdgm4i5|k%?zb~p>2pcLR!ay8s+4a?56n6H&AN@z zLR8C1REKCy{nlX0en-@`UEWM^F+mF` zdD_L~^E@x!3mHcaTDAnt$`F@}?0+3SSVI*4L3WE@cS7ma&HIXl+w%D5l*w)IIwFZb zu!a4XO?=q@1Y1^ij<)|=o6SF)NcZQ8|Hjw>+W&mr|6@??zqZHM|K1+|dzzGjnX89` zvyGIIy{Ya0obLAbc1KYMdwa7#|NRf3Z&cR*+mJW@{v`%|jk16U^*1rQKrV>qI5qhR z&|cFjF?kbT;`xgOgmb8L1ZY8711Vo7f!7~V9?j8D+Y|!F_U2dXyhk}czb76E4Z1)* zV`%!@wQx4k?W%&PuJ8uq8CV*Xu_XUR#JKMx#HWXCx^wZ93op#W%x4* zJo8C9QU_`$W;n3=UB?KhX{=`1`JlzSyW1OXEeC;vOo@_Dj*56NkXMA3^~$DcFNs3H zT~u`1yQtpsC7o8|Wx_Qq6Ra~DYBc~w8)G>8ts}l?Y&`GLR9;S?)_7i_aP0VE;w0q-5 z4f0ym?8RGe2f;0IgraoVVXo;N=S-o}wi?;|=;zSo8Jc2AFZdeW6cRw( z8gnTm!FuLh2n*Vc(j9zvhG|n0=IbVqzy&}c@FNb(#uAY5ky%enzRVNF1Q;_y2Sh9# zrqXOoXx33#=_E09X%7~V5E>>T>` zVG)LPMd)~K_SykBLfmAHvbK{R_=_wUf2;L^ZBCh>K4Xecb<1L^Yv&pQ;aGtjFuy4f zecttx0M>7q?kZvK2Nr6lG|udM@k?`cvvl4@ckd;h60iZfy#sY3(6_l(L*6qyh$V&X zsu3f}k#McHD79N~BHQ`h^9SD!n-A|I(eu&t41oF}!V81iU&gg!{`g!;%8 zb7SrtXON%kB?FGdXeeQHHN{KsnW@Wqzc|`TB8qa5+RG6>xAC*zj@S=#_DU+Hx*z>C zu&^T7+-OnOo^|+XK$a|L_x+*~Hlb}E`cF#8C?uyGhV}4%s#$@=wu%`qhaJZ6AZ=|b zDT=0{J6jdkEiJULB&pWie!PF#Mei|QmY7+3c+-7qz!Rl9P(hKKFMbpBH2mjv7leN&%EHr8@*}z9{Q}~MP6{xXH&s03-Xcrv*@H0_G%9T}J=FLv#JQc?Ynl$^4I+kaC^p? zldNoRmTBniZ^*PqM}4=izh2SkX*zz8>Cu))$XU<9e{a4t*vZ|ikK<{yv^0xXK`?!q z-sJJP`nYnqnsf-*dIJ*_=r+b=WTW6NmS6Wa>aHUfeSA$oT0&=Ah&U@LT(j<*qhraa z9v#rt;MC)n|52|Ez1C#nvI0E#$=A$l@bcfKkDWI z3?zS^9Tl*Zib=3q3;;bq!oO4JC{GpSCuh2(u(c{G*Toq9IVyoZ!}P7;gYx6&;$@!rYEy97PW@T_UxB|LQ9w{vPDasQ9`nKhEo6} zMxYYmOe))um`sB`p=10n`t$*{B*x>N_SRrJ+0F%EB6O(?ZY3QZEI2ma$joxQ$=jMJ z3Zz9DHJT-AM>P~GapZvb{AmUBrK886Y$L&(fh9l{j&;-FBCrqy($4a-g{qY*Nx&2O z%8qII?%mA2Hxi_+WcX&w>4$ha9HlG`5&JS^m)}%dWE{C0Z*?guM72EFWKUM2z?MQZ zLi6IKhx}+*Z^YGcJAf?XgJ;NCcE!FkL(V2J0M*aAy%zTBR4YH}9q;(9y`)_Wnpjbw zY{@&9Edg%MEF64j;-Pk}D0_envi&#~rP(DptZcCfvYZCDn9*{fgmB+9A@j*D>IF$> zuF9Utt^<&W0N(3Fie0=*E>G&X+E~Ha0Ub|;$YYUvf)5ru z-WE}c0M&qK9~HIOeXxEiw@E$fWiwU6lsN}~BJeO_&cG>9!>AN4#oldOuoASf^a|`< z=82RF_p|K@Gm--N*db=l^FHkKxUt-j3Upb&+XN?4oI`?FYrF!eBRqp-h&(x3mO;2U z^Dkoat1ZtyPYng>Ha{o~khZ{7tW~u)vr~z{Mw*6C=qKsqtX}5g)da!N|8VV>{UR^L3`?Z6*A`~a?O)4mAU|X+1p~(T*-oT+*5+3B> zb|ok1P2;93A&j~%K523}47b$hlfyIYiCrYo5 zr-vV@>dm$XhR!x=iJauP5aAV^wivaN8<%n%{iK5RQyaI{tfa^^b=h#J^?7FxdmG(M zBX2><^4sH;8E45lwVh;R#AIKUR44v{jpZWTK{eR#yzJSq*FZBavk`Tft4?M?0^=OP{Y&Kk$1?9T#OH@=;s58x< zKNk5CIrdPQA*h|j)F-FdBhJlgc3*?TUhDBA9rBZaz&Rr zh$?8Fb1J=r_SFfSrRZ^w1sl%GirbRd5_%NVbl9j6BOeCmYBtz6-}ik^Ey=sf=(@J9 zwvg$f3y$Z)PGH@gRQHnv9Zgqa1bVv->8WOq&uD>kFnkKtz9ra(13&LbVu?=_wR4GB zkXv%&uv&O_ahI`~?&qvQa4%;Jd&f36sNl%v=-@CBDLgnzLM#F(sMimGgkq9E>zX) ze`*7@GvF=&fdc`h!2g~3Vg8?)pZ|?$o7%tC)xR)!|3RGotFNlQ@t4`d{Dx~~lR=fP zWVaSVwQj>&6%>wcCWe#F1cEMJ$H^uIsam@z`JJg*)zumRir{x~TKO1+?|1TRCFe_m zue9{f#SvnembH)XYWkW(_xp3E!_jk3&Ih<5xBw$|*HY zuIoaqYkV=2f zq+4>DdOEYC(nX|)!4~Wi_87j|NvXo(B=v2)g9@76z+;T(iql4$mrc<5HngMDU$bH^#gJ5k zrJnDa{X4TL7e_n?LmHYG_A-5GvLE`ey8IiiD<|ZXQGQ<*vh)T!h(5zkJt<;Pm3hlG zd^{Q7nm$pscz)}|gwyWExqB2MC&t&1H`@Q9+_JB|20n|zmrtdqib7WH;5vGxX7|{DS$NJ?GMetPp3q}kU|Hk}lPDDy zIiq^nB5eD~Y){g?KyPStv~g9q_mmjmekKSR%oRRv)mX#>ate0j*<#ay%*qSEI;bXV zm;j%84MAtSs|qLlS~+EitUy+RD$5c&q3;dJF?Pyn#IcU64zUgy<^*Mhmfbd)S99J^ z`0AN8I3tjHgVu>945peI3yVB6FEVjdh*RgD2pW{ z$izxlW~OAVZ<`6T@8>%k!Slk1c?bnYKp@)g4w=-H6gp3_L%ketAqkeFw6L^QtvQ^T zaok9`b$%Y&>y6k#2?>_zV`1sdEAPqYrrGPE1T7RU^jTgKUxpXQ!l!UWBx+_raTU)yT}B#aynHuJPi}_9dIW>T}iyMd8Z& z*x1@dr^k28l(v}h)p$aEm^Bx}1zHZr&-uh==uOST7W(h=!9x5+mrmvH>!<4|GJ6-` zm^!MUU9W{C2dF#E+1d_UwaehN1u~xl^<-xi^vaIH#E)nz?IcCvA588BjkGIHcKWw& z+^**>vnt`f#WZ=z=HBnKFM(gitSlKD;Q>Rp29|Td43-x+KR;g*hU;bmQ8=YojI0%2 zkew#FZb%;ZiPTp6R7Ju&kAr?#uZ;P5_jl*mtMP;V+z(QfdRn)d!Cn)y#!3H$*Le%c zB0$8~8FJqKt5ouGCp&Deexz+JSjO&G3tney6we0dDP8WKe36~2t>*y~|5@)qE|X;B za?6}df(;Mlfw%`z%N*MqsxY%%)7~yg5`p*HOQg6r#&<+}ivP@Y)BzLY&(srTexX(u zh5}aj1v8Fdu4tnOPJ5Fq`7==Iv^(S9!bn+!8BkHi3CL)^(&G$@(d@X=Uv}deQ5C5u zFi?v?4#|Uj(!DE9@Xd%=qCoWlA|?n-;iKs{OOUbonYfWVIt*RV-G#4|Q2ye7QhNP- zW3SJ-@QHp~P+ePmgZ~4$nR5~E=)r)13}OEcxkdjiMfy8o1QW+Tx9W>2K=OVW<{00r-LB^9f+eIa7OZ9=PuwywS*8QyDPM|3Qa$OqK z-HP`@*15%NV-lF*U_A1kGxGcE2~uZuxF%ftYYlk&pT-rd2IP$L2N2Nfzjd+1znG%G zn;W^`@&kg1StN*wh=i=HNrcp+$*8L6%A_)qzeX{t6mZTbz3jHKKb=s0fe6AlVGxt* zhAu2U@ExuhYJr@ys5hY`x(erY7Sb3B>=wADKx7uxiG7&oS_*iWXH;*ill3x%sAz4l zC3zC09mX@{CK;7D->Y?Eki(Wt&S~^qX!*3DGDO!UO{{0VELtO;cPlU_LN~kmrve_Z zn8PLnIGHC=;d|_$ql800LkbZ&DJNU)uHkB{O~Rr|^$YCU;`_jLxTgbGDR{2;==ZSsE+ z{Qg&}xc|A~|8?~HUkPFTt4{tS#3*Fy{*NMYyT87w{`JMi%vtUq|NobzH>9ScfFptW zHO#(dh$BomOMXg5WMwSUkN%rV5d}LONQjLnl0;xudd`!NJ+aE7`gT1j^(*Kr_$yjc zP5Uul+2FmfA}3vMG%Si(2vy)BeS+)H>$F+y_vdwO&yS?rcq6@tS-ZQA6#b1T411j~ z+GLtH;jkLj{Mk(yv%Jj_{y%6PndG zFZpR`C;t!?%c?;4+}gHi>Zb8YH)~R&NsM}cB3;CbPV1mt|?=k8Om-wuoo)NS{n~&uX(%9#wD7{ldiosFt7(H;(xA$ailZde+xu z2vHfBa8?e+K90oSkPb}x5Z7!ZODXAuZU}|McMxxi>=6wt`Vc3>NuTXXzy460WhuY) z(|;CA@J`mI3D5+1NpvJpVqJAqeuVu*KHq@>%tImX?LZHqD2*D=qrOwuFm3WFrC<&3 zchp$b^qbL@lSpRg2Y4DCA0MGhC$BJ6U|W}KQ&2ymAU!oPYc-2~Kaz0j`+~gqBfbPz z&L@~9?$#QB4#c;n=1FwQZ3%38)7WUi67&58wP(r_2s|+a^wl>SH;ys>+88I;V~?t3 z$^=9K4~&#Yi>rKCcJ}BzDmx)`a|b2tz=K%Q;$2PZRx>L@YD9?JD(FXb3M;T1%b=@qphfExl%mIa_S) zPrxp(6a`ArE0ovSo{BE17eeaE;^`hU|3?3@CV5vMXnF|j)HQg!w3dI*U<7978(u5j z(B$PoE@gLraDMuFA=ewYT&m@yaJ@l0QV9ITf=Gc6c;j)+fO~AY#T!syiD52ngkG>$3i* z5TRn`>~7}#51{zJGZFtCL{zKWXrO4IZeb)uLkX2PTQ9CxSpMi^LbxOBMl2`+CbraW zF5nmoimQ*h)cgtV|KVk zn;J(L3(bs;AuI@jXXZJ1tNMe@5=6m~)rlD=c{VGY%pz|0#VK3j@2f6V{$#9&@cpm_ zFE}GW;f6OSSxjOx)`r&HmfD6kQsq;Iqp04oePf7rHZ8LyzK43~G4nx-w?{I}*4-t< zFl(CWDnY1@2!Y52nJ1vzOeD>1oz`>#7Q(z^OSY65OPIZl?rR9VcEe_9CCqEAu1#xm zj|1(1Bc1x-#PT582y2@Qu${jvjq7ux4@-1m2I&PC;@QD{-(wZjdD%?YPL<_+tUPuH zd(9NWg9^l)$>6>vWi~%#*Um^=&I(mAEY~=0gYZ~Boo7q8F|-Rkv`XkHsxfeLWVaGu zYBiT<2T*aa?5Yw^7%REKW>2TFV`M(+R@wW*<$j8&GL6mOb4T@2PxdNZODnox<6t(?%w8q8T!$Xwx&m%`u?PCHvEzvW;%30Y<&k7E#IA= zP)sacP-TQikW*0bh*PiNjHRI*al|5EF%6jybY`0k%xz_1I$)F`?>M9}VB=ovsF+vi zIfWK@WOo)GV4GJcSI+p|=h$g8-@~e$K=-33HjMJ9ewFH|wmol`T+ML6dIKSBpe`Ks z=4?QaU7)X&N!2mRXha;J=>xSF#;THsL0bH~z6i9D_D~&m)`nV#aM9yNi-5_ALos|U z7~u23`{Koxqd*=4)7UVo6tl-~4Lj6I>4IH`EBe8WI1*WPHDL)_ScLH`G)u2k(YFci zo+GVDtXKkT@u$L21-IK11WA%D{^#iy(|J&M5hG@S>K#Vt26I>M8F>%at1EY@y~DF` z*QE$+8`0wqgb2P2Z4;$cW`S`V_|k*aL<1ka+=2*RM#K3-wa3)#R=av5brw#;70X3V z{g_i24{yXATloE-biUZ}BK|N~UUsOD&;EScH-VIX$^~9l! z5BQ1W$~YW=52vcYV57Mlzc{-n7~zr|D|r*1uaqf_Y8B~?tM%3s%WI!6*cwG$21ejX zLCM7pDg)LL`fNm_pE^2E-5$F~&L1ukjbI2*&r3`aMbtD)UQkm=U{jW$F!rF-aQkEH z^#(poCNNGp;Kzui+w722R-0Urzs&KQ&lu5Ya_D*E+o%OvPy8I@V>*1Li%G)5EV+(J zL_BfSt8N&IQEufNo$e*5PtXH6&odemMAFth>KoX4kECLW6cAa#X#??L*0o1s(j++* zmY5jA7OtA=!~7>oWF(^2Efk~&(T)@0k2!p?UL&v34`PD1@Q z2B-wYJv!q>OF@|`-V+cuEpXhe$r5)Cr2z5V4fo#DP`@9;u8xt*Ej8<0EueZwj$I|!CU0CjZM@TMi3~RHGnB15Tveks+_QBUrVbrdlrrU= z3dCFQ+kcb!cEpgP4P5Xe(e%kLEFgZlScI@|K0~GFhofvB@HCwEvlvbHB z#WZrJ4q`s=>iJ(QI-UF(is`{l%X*k)9wEdIr|ai<`#aD-`A)y zOdgNf0Vh&L8&U`7%d)px8Ul!#slw#aqFkbs>}u?w<_2|<8%G%*E}v)yHhwNo&?%ma zm0;kR$BAEQp9s@yMDGw~(kL$9x6Lb%Y5hFPHzfSVK}es(=d~OJPD#)Nbu+sqFrVmU z%lIiTQ0gSogSFzs!p+Lm>v)-4lD_ALox@&pquqjkW@Ztx-5NvQTzp;46*!>S9N3l!uQc8CbEFYb}FTul;rGN!;+`r;7E3|EU|gG*xFB~W<6!q zp3+9rd|f`wVlt9s4i|}d`B`*5WN4J)Cc5{Ym+4X3Udbt z{tN>c1XGmO(O<$HO1qSz$Jo>j=h%bs3(dmZ+?}y2<^uISRF@%TZ{XHW*AKzO8-fgv z1OPqeUw56x%xJ85>o%JYWE*_|hW#PaCi_j5!IM3hET6{+)x{I4BV@e58Eq!bBedK) zC$VEORuN6saqY(~pr9@x>GOb<7H)!B@JJq;xP0RXJfPr&j4(>SCK6A`I3>gu4^=hm z9WTp90M4a-^8U}-k}u7fVEw;bI_JO5Qva*i{r}JI{!bBnIU{=`i~ruS+tT)O#gV}J zmZPR!J7|45C^#^OPALJ? zg+OT$2n@CdUTS59Q`6K`j7q6^Rfv1o{aP6}!co|KU}IP6es7tZ%i5UX(7pex$MXL1 z5mpM|N4sm|d<06Z ziSJ8FYvO2{#y+{btg$D&fIE5qZG$Q!n?iz80(9!{@5?4!EhPAEPC=LCo<36$OMKD|{ z<7zZN+f-epRnS71DZLy{gZ;scNn53-w#+yUb@1+~205S+Oi3)60XJ&uXGq1Z?P15r zp=g0j?6c4Lq?GKr6hMX>GD9^X-qE6y0BI3++Fng#(yMQ`DCfjpb#a?NB&a+zM>-RW zeMZS$b`ml}jG1Ybb3_lRdtezeW-*Zf0=1Aqil~#jm||a=J3B;U$$KP;{%4e;!l)h; zSsXO+gqW%qr65wXk-X(^rLaI0dPP-;<0NLJ0YcF*d6OGyNTm`{o&uhYkpt~UBr0*| zfz>@xIC_@KOz^M3Zl_IhxeY|YRz9Q>-IMjG14 zq8?tvB*a4EbfH>m%k0>!lp8^jlD> zdSeXY>dZN1LC@=kVItCeJ6w4GZ&*&p*xz%zqC8KUjt4_B{oA^_>Y>3bi__!M#_b62 z*(ZbNRovQnS={SC0M;-~BB~74zb2Bz*1|$g8dN(Pl!3`|c@o1^b7_E+VQuKfwbdvI zSD*4$z`*=cY(G)W!XaT2?dl3PM-bEUHRZ2mq2UO2lX?STK4)p2px;P~oYhrdD*cG& zu(-Eof4T2IGLl>F2Pmzpf`JrGA;P=Z#cEoKs3LDO%4ZUW(F|l5)6@`6KgzX@hjHvt z;;|hmJ&|>WNn4j_cHFXWqyCAkluGSWZMCJO6D>hR{vjjRqWRLNfxnI20&QUgyt^?p zVXDfaYOIBvnStHNIX|0r6q6Z?<<}q{ zCnIXhULjt2`c}c!{JmvmrhMHq6|v!k({rTjDj2jw>vuH`tb9TbI0*)#+YJF#*JffC za5Js3qlqfb5%45I1QsgRyj z1jiJg)IHrT4dB!6_G;w2*&*K`CAy zi8|F7r>Uk#`G_AAIhae;J*C?px3ptUS2T?Y)bo_N+oNt44mZXhy3oU_y~(juaX;99)|H{BqqiJpRGKeYL|+&9P| zqOdatOgqH!Ix#Rh-C?QHv>oGM#u|`e1op~Z>2`Iw_Z{}+y7>a%trLjm2{3w1;!U{m z1DEPFx4$x?q`jg|Ctut2L>F+~g?K?4_)29irE_57^`gVz0(BiaEkd03CSI$Z9eVCg z)e*Wpa675j5EVl!p*@pk)a8&#Kj_ZLmlxmr06PX&m8ps6o1ewEbKB=gzxbpZP)_gZ znjx#hnYjtxdK{oRLB*56Y+}rlZ%8+0j2wj@;(rm?ty0!PNwN z9C5cobWR<>9-zB9%%IM5ko2m{`OA`%O}x!EoHM&=v_tk7Rg6Mvn!Q;g(Tk~A#aVU% zwJUa@YBr&gj;m}W89dp6j=4F;N<`&hh)fd{hp?MZ6AmCSpBOSsjBWQ}R`!}1Wl3LD zKdRdUiLvmUdom_NQaIOrOG?j2pZ2*%3S4o6@#by;SqFdq3S(j0TNyvX(THB)GUp&M zA&$rkzHy6WizoJJwP?#51pdYvYiMy=qGIWmCw?bM;(5u`blZ&5b|-|pIUyyjK+F%V zCM)p^cW4K1)si1><-q4|CT}!RAd+K+lW&?u)7t)-(<*UirL%A2*yTl%0$B~%i@wp%Tz?HFFBji1ku$GBotQy0eSfM;Z5oH~q^LJ;IH z^McG@kM0RW*=|&y4H0d&+Yl{soRZQ55CVK9V?~kjs(aU>$4>Fkgu8_Ggh7N#ghZQC z96NrbIX*8|$kS>R1Y1N|EGh75U0h-iT| z;3aR*lv?HbTK+AIkTgvq<&NFl!NDE#z-)B{tTCKs)6o?T08p zCCwh5sS=bW15kva20-iVi+0K1Hf3{lPF!rzt9)*(P^v5}lPn)% zc3gm~e7H1A9XA2k5F%s_dNCqE9?CX4q=p|x&yStx{1!2&QF0Q$WN-?lQQ}7BhaR8&zQv#ioZ0l_ zOFL9H&+mJRCKiy@R8YfAFvAvF!zfNegJF&Nmx_q>l^ZuOi<=YB8&7L~QGzc6n7G;F zCc{^lk9p8*c9hNnqz`$+Mr&gB0LMU+1PVt-D4SSCPPn+nE=n68rRArBs!K7gji`ne zjP#cKHJ3zNh77~^+R#g~#9%Uu_gab#{u*LA_IEC$5dpEAwNZ2qbcg%dT_3J#7fveK zR1>n8O3Ti`;Q**t_m9kBGSb{u;t12BU*G>MoPkWc@)E>d!usaZ#MERb?IQ)?N+PpnX=$#~;3x$ns!IhE35hJauHuc7 zPQb3={j}n(a~wPX3!aul%22W(rIpOS+ZvE`IFk*tp47`F>nRUBNJTq z31aTP?epjMz5DvPo8x{|MuGrzwqF~|n{~+XdBV?$jTy7velz53sNzUn9CgaEG9!QR z@Mr#61`o2zYoWT+Y2?^@vL`27r_%Dl53=rG3@N>sN0%uQrXI4(;G3E6?ledu!t^4C zPP7IC8q8H^i~Ar~gYh+Rlp=5ZWHq8&&c?G13X`x*2Qj1dMq&9)iSNv1*3zW(&p4*l zS&|nIY;Ts+C9?M8A{B>4hpX{*R>1-1Cf=qqZ*9caR{Ja{Xmp>Z^`XLm*tGr#$DQ{ZZj?J&BRLjmr246>Ptmc$y2 zMw8%qDKP0PCoM}#>zNQ6ux^*b8~RJEJ0C*zoN1ROIyS49rOPV9 zcL6JNfo|F52RgOqOk&HzQ~ed2MA-$3m}>haq|njQGFZ#FrAKvbByBFHA^C5d8qGIo zue)-5nKM>}I3lqKlue!H$cXO`p0sD%gb36)k7dZpDAlSP0PX@+^+#q&Z{Behj#Nqv zQZvOx6fk~b8zeIH{hWIy;z?$fdiSTqT)OfmOo<6F0d<~VA%S|_QH*N{-d=S2H`d@$ zMgz2DBtJ}vn-@^3D7>|}c~O($$cC~j*k{pJAoiq*cZIR!sYnf{oASljd5RS}_GgfXG54PBy&P+3m=br$?!%n2a4D+a2M# zVVv06wRHwqVMuLDl32@m;_lR#Qyc1>~KQXKUYq;WoS z$a$t8IbJ32+#k^Qd@m&FZoxjDSn=}6F!qSMO-uDIc)J5Zxu|Aw%37xa_)|&65$Qw; z$|xu?kIeu&%q%(~Gv_mtwn?n+B)U_wo(<#jy75)`y*0$pP1bQDiv2mPxY*bYJH2G^ z!Zf0=-f!4(Fg{ZwPQUSked7&RW4)=!#4*>+i>JwSCm92vlO;V#it8;e*q>QwD=w`)#&cY4qx|* zP~MzG2q%`fV~8@oyiZ$Bad!qrmP+B3D!RCj;_l-T+pEdxX`f(INnK5bjHcfPZVSxM zxGc>a90kZ=M-f*sm<@3Qn|6wEeE~P{17~BkIi%vUu2Fr6ViKU{4d>=Ep7`H?kRueM znAcK_L}J<@%uG_L%4BkxN#tVcq*t>P1P(DD`%7~v3$lHUDtSdU@9@p_ZDdxK?R3`N zTUtYTc(hxxh7|HHbv9bsZk)Cq+isu$?aTs+CEE1hkD@GD8Nn#k0xbOWzR(^ReGv*4 zT)$s0Gxg}hjHX|{9ER?OC!aPlta=tW!2Pz@cs;kCzb)6e->>?4(+)GI=(9)MkwO;e zX&YKZimO+P>U~Ni5iLx-CCM5rGFY4`^DXD>!#eD_slLl zQ|6GWWvxE6-B6j3TpVAk#TLOMeu*PA!;W}PIHKm7-QcgJ8|nzByApcVAtKyv`}wKhd*TEEAR=<2J)xL?uYq-Lj%~0I~3kgkBNkUFtEr08>Ps2 zwv+4tfZ6gLo=Qd`8wy2y0y|QAf)Ut7xkB!Kr>(X8xH9QuUObNd9DDANjm85 zU#>-j#Vrkv_v0TGkpcT=pd^>^8DxB_5!ZUb zo~|$nlE3!Dbo*r_6+S|#l}m~eE~odM3nf=o>FYNl!%cxKdFvm8>;5R;9zXDJznE>} z^wo_En(kBgz0{~1;30yEx=utcT8gc7@Y*OY&xJeKiN?>+1FM9zq~!!wuQNYb|KGqw zIzD#LF`{9*Rq%jy!QnpsuFWux0iJmH3SH=@sSaF+F zDB)B^G?PKeu!mZfw42-X-S+j+6gtE5W`;&SES<=erjV0$TqxER*;SECMcTp&vly5G z*L+hL^5YrYEhUI9>6yF2nX+k3rslP4p~Z0WlNL==NpijvGhBsoI7<5+?4t(5aiv2C zPS<`xoOlbi5jS>4YuSoVhReJDSmRr5l0v#?CXae;Yc<(D1{oygHQ8oXvm@UDdYv zAtwkXk4CU4KVZ!{xaZFtg`=*hr=r6FAT-FOS#}`_go~dgGF8pIr^WiHfwl?T1jdGm zSOY8TJ8j}mS{%!*Dx^3MrAh9O(Z(((qdapD%#L7lr63!PdIQDYfht6jV~r;y>FTmfGhO#c6CO~-`e{6b+RN*`%o8bRviin2O%CA$zYBbS2T*!g zS;X(V@~v`9;udFeg}^?0k=v7(jQzbc>Iak>w_9Bt%cSdu2vb?@#?~z1gu)0wD7m>M zdNu=%ry!E(uM71*r`W#w+jLyvsJ zo~}>2dnwnykr~>$5}IoIa!X`sss??s4J&xRctse^EbIxxZ(BV4LwPDWHEu5vShzGS zD9lu@d>@iOF?@{cj|3Qo6iYX+m9N+Qi}R*5`SH)+8;)_KmCl>;4f8R_jmt`W8N&gh zmO&(r`POnzx9f~DX$uReKTkeepuFG4IIPw zJ6%)aqj&SGiYRoe>Ue+}Obx7e&h!2vrg=$bE-LCcLc}kx=83$H)TMMwI#OyVQtpq~ z493_kHavzg9sdatxTQM7BrH+Lx-_=hrTP=OodY6>JZ>rAF-~uuOAneBUqm+ncAqD71Z*t(5jHhugt(a5-6>3HN2=DqP#C7veklv z)%~&h9txuOKGx8O0asyfV_>3~eRJa{+%Ku-KBnI@#6?F+9}Y#q4liz z)Qy%uDbo*^m!s=HAku82lNV#^6Q{Igh|!8bC*(xVusigll07NV9^4@Jyzf2$tVJ1# zl57;etcUMy>jew3*s78`b%h&c@yBBOd*+oq?V+J(GATK6KXeub={$213Bt-7xR~`G zk}O=um|ARo9+{onvcA;u%uBaIB7WbZ^(Q;Kv_RIi???Yu?oX*(YU*bW4iADgD(RQF zO)F-U)pSG>8_`^PI?FH%*Sa*7^I2d;BV$90INRSBQ(?oCx9-T;GqgTy(xu@CylzNn zbtx`$YOTexnhgaL6J2rk+~4j+jMH`>jhCIxAok6W4Lcdh^EcNvv7}~cMS>+QQWPc$ z52J7^37(r)c`3+bM zjKh9049WGlLON{kMKB5ngG|mLJSp8&a(?bB14f`X4%wlJzQTCt$mwb~C-MI2>kb-- zPSa#|`Q%mcp*kTwOW(63C;3P-?@8AxPF=D#`iNQWN5|k;`aDQ+VoK6URy`6U_yma( zWDa!pP39M5aa`V{;XcPZBO=zt@G$x2p*TfaCPfqHPQRJTV`W_~a~V1@9!ba)C+Ad> zxYf{XBF3)n^~*^p=ea?*57b-D`0SSUeBY0dyKVpQzP=t|DC@7wXmhrY$8FU z+sk1M;uff2x2<2Kt`uC#jqdm!>nnQB0UXOlHzCdyxyCX!`(mSuOl5yE>yth6mEVq@ zl2(a+_EBH>7w@>f&N;#|3U=0O~rmPIwlk_Hz^!cGmeZFckmov$H z5&q}MCFq~Cj@sGET~us*XO}qK)nqWxwxBb{=N=Kop*lXy?Me>(nNo4qYm-eW3xF62|h?+=BP6 zdvLYaI}}HYaVCsAE6PO}6Q6?QgKp`nseVj}OH;&HlJ@MI@<4w`=;PD|M)E91#LzmO z;^=LOA;x~6bzyKz16G0E5B33V8*=*>B*%UT@DYIdxf>v&pT4aZ6i<($1D=4yR%=l_ z8S@hP&m;+8OTLXr&o#K!(%sa)j7T^J2}U5Qux`Ca^7C*7_F(Nzi6e~uQvu1eyOqeif}Q;I;@a5W$R=} z-soijRy%||gk8&U;X%&=idxH@Gm-Irax5!j3R>X8MxQy4CW6Ka`6-2ybe;rD91%z7 z7>QzPf;1_fB&9;!ELn%%MML+Z&ckDfXH6eP+lZE=!BC7y*l%7kj@WFq4b|mRRyTwQ zp(2clPJ@c;nVX5SZrg(`O`Dhq(zWbS*5{`hBPvexV80!67?V37znwEdVsn)UNF{_x z_?@jyw$Cbv(~5>enOG>+q@S412~MfE+buKL2@X;`b<}aUE)J~&feWKyRO2bEzdr3x zj8wi1x(fPcaL~`-cbeZH`G&K{!yv{hu=rK7FT}qr15uL0Fz=}aChi&a_xq(gTN0#! zfAmnAr8d4kdJaaQc`n9GtrE{qn4oKMBf^BEevI={ks#Tayn^V~Z@#E~WWYG|*6OT= zPGkggsO2HSy|fnrFd*_tt@`Lt;aFN*cdF?-u^e2O_*qnjC*vqZJt@Ft<_1nkw2v8tHVxo9L|9aBj4Z zUX6SQBM^2A(Q@)NX|18C+ij%C_+u4**7;Y^iiU2D!rAu6DC|`wK6t zH8bU~(+8D?0*!e2j)%FtxHc~t=WCp}X=VuYT7;q89<+dVJV)y z$aN@lpQEUUQaB4^T4SJ76~s;J6c*x|*hX8&v8ZU7u&0XN&y05uSPAMTp{-6BgNtH` zwj^vb`3;5ti^^aJjf+ko-S})GW?pN_Bgxr_a#GAJTMQZwBDmn0qm5w3Mo;-Y;TzJR zvxWb{{(M%BwCcEq(ZMC6add+}fR;G3FQaHW2UBHXK=;eWHTT81adilX-!$$tjHHCf z1`Y_(zdk-scJ0HNI}wNB&=v*%uu-cvLtUbIvu56Ds?MTwHc@JPe_yzh7Qk*YBOErF z9Hk(S{*aWK%vkzc=8U$ZCey8(wDUk#_sr1VtP#_Xb|84FKUqrdu$CALa!Ccxx`iS16NmONO4It-k!%-9mYPJoVfN%rBvXY;{wUN8Z1_gzih!T$$Y zOhfU5OW%Eu*k5UB3%q|fK2w2eb4$Mn`@Dv^D&Eik8mDQR<;yT{ORl-7ZB)oDV^1jaPE|xgU&^Xk1kgL&+V`MTkpIb`scVrZFn$7UBk97P`I*^*(_6lu)^2E z;#gUFQxqSgI=|WegYGLfQ%Kt&hL2#wzK~a8b_(74t?(;PSWeB(ewLx5a6vr=9>jbH zT8Uh=Suwc15xsTZ9K)`FE(H%Us;&C0=pgPV4}FyUFhOLPn2+p6`H>%JEsA2o9wuam>zRMx3w z+@YGDWc~(?#h4|lt(Vz4IbvPhp8UGZJCvS=)2nAVd!vDZiwZNg0(rA9f1*lRqch8- z-#n9_@I<5AotG2KBvY2-!Vhju1-(VPViBCeE5%1HdPG+h1e5TqyzR>0#Rez%VQ*QB z4DhNp%%|3kssE?7E02e24Z}xdEBhLgE$Lcjm}Fl{8iQ(dn@Y)&GM22_sZ1rZWE3Kl ziXttt6lKjQy4gZEx<~kV$U+;PyN5 zitE7=g0r=2OMbUVS!1W4Tw&HHM_;@`eDibPsn2nt@a*3EalB6E?AAeln1_*iGd-wc=^$|5=A)uPl9@%s&8h9Yw)Z>Rw(OE>*9{gNjs+S82r?MNn$gk*%?Qhx z)VH~7dnXQ%(;n)D*5jXoLrO$mo$q6ve%G_6%MM+u-ZqoKA1}48XbCddG|jGO$=%C4 zZ{)G+)z`P&x}n`ga(e)HHfFsocICa|#Q*tXRhrzm-LaA}72U~}vTpt0e(eVt5#<&M z$**PL_ma#8j9I&!t3&=66b-%p$Fs_Tsj%r%M^@4!0nsb$=tHM99A!TQWp1zSvlZN^ z)@!-BAyn_YI=;AZl}pvzi>T8L={eUp+hMI~l}T37rqO;VVgFY#m7^--7pja4IHT)P zr5?N$qw<9#RjScqVuRsw9lIZS_WK9I8u#OBF|ipvDj@|C0m4HKI@4(mGiib&7kh`M z#sveWusG4Z`u-tb(9G{I@>c_x8m+o5iugcq((0TpK4i*VyZc%i0l)I|PZa*Wjb0l#e_1jnVeOAUKbql$s8^|!_H&W42Rx(po73$NhI zNAV#A53k@k^|CO4*jTu{TmEnt;sOy^J8kpOAdpQ-3N2`{Pki9SwuySBX=FL^NSc$~3|GUjvuawU<&eh5p`lw&kT+8qhC~QFAxp2-ZSpL9V0uXfF0+7 zRlQNH?Re^gM>vR`cy+S#%|oq`3DLCHL9vP2d_nvGRzRu0xrcU134s`;A+6PJ1)dQf zy*bxbmm4fY0fk*&k`s63H`yXs-wSAd&46{pnjNx~l&tM4=D}`mDuk=KZawEKTG*4Z zO8V0KEY%X5*LPG+T{I>RPlv8ZkxjgA`z}&vx@6s~#qLY zVr{Jwj3~jKuZu_?HCMRkIEuGXsBt+GOKk3JnK0~bS3s}tJZnP;d6L(CX4UazE1kau zP;L7AM-N1;4M}NR{id?k%iM<)hsam$O2@CW8MSCeO*qAL57=GHO8K-~rt|Rhq#-`! z;U(!|^s!Iq>B+p4fwz|Dtl2Fu>ug!Or}(pqpY`ROkp!97j)r0%2fMeuXiU$>5lF%_ z86g5&h}C_KEr;~dGUJ`Jv;UeX+TW*Z->2}`zNAE3_}C1rm(*AgZr7X6b3^~l z&O)aomqzxJA9lKxq$uUS5VvX}<)fa;qCSu8|4_2MzQp+$Qu#UT+}IN5efKa8>E(a= z6XH(@VFh_|X@pPl+Gerrfx{5;U6^~O}rr-O;4YiL5CdrN( zEEC$j)2m7G0URZix!1eYG$QZCnWD4!{6^yHkf?+=NWND8=j;Bu(Lc>2`Ze`dbD6BS zu^yS+?sg~h?Hz_Mc!#}^SIj??qvI{YOXALhwHWlmHm#e0S-f?AJefm@Zsr-t3ePEk z-(P*9UEekRRMedVHIsy@S0w*$(aoU}q?Z6Cy1D4YYrG;00Q^le3U{HZtP4#N&G6=0 z^G6%_ZyoaM>vxdYsW^7LaoyONNuh$gASA`e-=8%qcmUt)f0ux)U8Kv}5%8(d&rf zzM;7{S~4|PD(`vUbyX_6|Kg~?tEUCmdyZ>ZH9bkQPQZK)e=W50$m(L!TJg|~6!v@` z7o7Cd6q`CVr1s41y#&F~o}<0Wdwo<4BH1_Ju(^uVXgjj%=A$Vu+tWDn`k2a|x$x%D zg1PYK<^C1!?9m&~eRVgM^-?>3r?^9}JU*NUBYilg+51W;o1$a`UeMwg-0i>c=GP_X z?WMc%92}tVW(=E?$6R=`-?xEfSt1NjhW2%+tPR_#jav+lty@1UJK& zsBSgFn3<<7}^)w!uasU9D zlUhQ6&`$uiV~xNF-|gf3))_AHZ@#fef)M_jcJ3~Tg;46 z7%U1-F*Nu$6Z3(CYz*$NwjeZE8V3ZLTNwbz)`;`1ivM+DQN7gLVCvi%XHavoIhKO&T$%i%z zk(D=Q?h-xDLVXf-T69<#fqy~5a?g^X@38>@9|WFH=Q}*Y-P3_K3fLOiASgTZfNxHj zp{_iTu4n)4`ky~%2tycx(MpZ+?>&JbC~*jsy#CLj=F+k=1SbW7^P>T`f3C94!k}O3 zRXYAAA3b29lm`Zx1YOW?MRO>nfco*#^OSsK#X?CWGT-zK8Dib$ z!Zas%_@p76!Rr_1#C?ktTzLE@2N2Gsn8tT8mGOVT+~)EhFg>fZye>;#^8J`>|@Xe>G9KZ0G9iS zxG&^$W8vBWyYyzH4krQKrs(NCpMw*Q?t~Bl7ZyXrOnPW)E#S295+qUrR;N%#^fIl3;+_|&i(ZdP)i30 zMCCRvd(i*@xBUPBP)h>@6aWYa2mk;8ApigX0000000000001%o2>?w+R6#9CPDU?k zVRCaXW?^D-X=5#CVQpnCa&>HFEn#qJEp{<2FfK7MHZCzYE^1+NRa6B40RX1X5}bMi zkZfJLY}>YN+qP}nwsG3FZQHhO+wMMn+Is)Yy>H?^%)I-iDk@^fs@ho*x$?{0-xo_k z8W;ox00II6U^|FV7vR6VQ2zSJimC|GO3I1R%L>X#iis+#(8-GBXh&C~A!Aqs+tin)d<7)($E0rht&!?~Ov2UB1Z#Z3WQ-kR!xca{x$#6%u_c>ShG7jl`-bQc z>;(CNG46*sb$n-T2D_kMxibEs>11}$28@Z+Yw-+yw<#tAoW_>LGr$rz1pfF;E(7&o zH&ULm9Db(rDrEkIaY%p*f{W~x@AW7IN0Us3# z72W+@9U-$CT*PUFaY6ta2wc97fQe-T$l+iG_aqYO@=BU9re{^{rE;L`6f=O_A*$SHt1=64ds-tl9~ zAka?gg$4oj07lEFlI6xnBeqzzigzFe+N%JCAzV0+HUYe%M-9#%8 z_)~v05+qItw`lrOmrvnFRzLS2O>ha{M~|?-s-A)2hIZLxrrZ%m`maOdGai9x@IHg9?Y-;d4rxnHH77Nx?(W)~=$0Gs+51jWZJXt; zb{H{qf*_05=Am|}MWlQBh{gnGI0c7ftP#=UeKAczZ{SGW7@Ys~7&mVg9YikY#`A?Y*Phqj|HQwwgT+KvhsorQd zMN%c}q8PSpp}$lV&%L~;Xta+oYaX3&W7+*!Gwn?e)v10Yhj;ku3bm>cPD0Tmf=AYf z>P*(##s54)cCxxig1x#?S7fc=!pY9_W8locP{`19N!DJX1r{mvJC)&vQkEG&^a`Yg z6VJY_2k!7rt^(&4i8XNTmLB$~{7CI9Q`mLT$4L+l#58e$@U-1xm9pRw8T;GSUs`eH z3r$yf$fM3EdddT_i@a6_dMj;9dnx}kZJ%`zCjvX&K@Zs|CTpIO8EPz<0EAe^VMzI2 z4j6k}RN1@eS?|zd8IusbXz-~zDbd4KqjuG9FtZku_UHs)O@5?Qc)^S5<$jlP`}wo>l@it_^&lim z3amde-d*4*rO|FEWEdE{Hg_6{BY+2pB^Z8UW9{kQ)k%sZH=iilnYVznoxM@1FMD&G znmgCb$&_2jX=%jq4)Yk9qm%f(g1kR_xs>bTXroIS-D76IJvWTWwHV@+9|7YaplM># zF{YCknf^ZJGZxO&?8E2BuQUzDsBk{!EEo2!j}*; zYpopTU&r!OLSn79fF!e1gyDAu%=0qNH_vCy|FoH??pAC)gb7+j5!d_7ht%UCs?!xz zPOI?TjarK`v^I{s6zO?B=v`r1iDOx7VhF3Wd zT#XAaw?dSp_WOHb@`sEW)MJM9u66o3KkorjYb*$MIbxxH)vQF{Qg9;3Z{7T0CWOlx*#Z~z2Jg^5$jGE$1K-dQj0YE#wHML1e?u_S`} zz;$rFgRn8$g^b%e2lIn828^~zg*`=`TxqzK#Wc2zc+Q2y1rOt-N5Fr}kYDPu#uzS% zl%~NawXV~Zq8j~!U{2K$13$>m^Sq0hRVF>8ag6nK%6L}H5eMMvbG+T6d4|z{Ds1g} z{Fj0&k35?xyF&eim$mcMNU6A$O&U-2O)j{&(~>P-w|mc{r!Ua1^*a$CZ9Hi_dFn<~ zm4>dZ?p!7g>ZCwn>6C?!-GTOAn?&JDkd*V+%H^iS`9<&s~{rN{1lpot^EdTX-XPniumjdBku`B=I4b_vp&S zn-2N5H~l?+AMczYhyU*`OvpTK2947?6~63n3;ux0?u%L;*?o0Mbzn&8@k=^IwMIY9 zC^>!7$7*k40$qzSMe>MlYj+4)RcE(SqcE*>&=ETwh;6n~q5k2O(&e~Pak{W0n3)W5 zd+)QKP*j03%ZAmQVU;i%q{)cJ7jd1QGi_9%*IKM9>||s(pQLnX>sHiI60`34S9k?! za0rY&!S*L`0DyW_004!5`q+T{UmqL91cj6&g&FCT#d6dqoQfuqcHBjNg3|6ngusFY z3W;}t5FSYg89m2fj7k9j^?&MjmU?!q+IkdGP{VmrJbxcoIAf*Rt+gF&!f3~~8a|@pl z;$_@4<=sKzoE(z$=Vgn@l-L5~_^dgeHLIyVUHH56H_gem8b!Y$ zxLLjM5?HmxK(+hw09Adn$I!=I^f$fMotf3kF=ybOww3vl3h~X zkT00557HY#{ayo2MstPZ1^17I?fFzt)dw>qNY3fy;d}3Z?yp1WKN$WEk?4F83%IGH zhoMJILvhknl`lM)ZBxCu9l|4b?aBs_V8^py!^jOUmH4*a{+D?&dy%U(e` zr9@YyE&?xbH?$QrojI7$K|`hAZ4+U}-4DX}xpzQ!~cF;J~Qzz&?nD{{v3=O81N6ANz2@`w7O~_&`>^ z9j&^3b=3+=%XnO#_AMOGK^7rSe$`Nj@iy*>UKGK z8*7um<)p;q)E;DAx+5!o!|rjhYi;l^^@KjnL*o7gZEH%x&npX{HRwvmq7TH~_E(A_!(M`yL27 zjZ}#M)Z0>FKZM%RF^z9_)Rz)D)G8qh-Qp~$T9E{3<~uh|YSo^l=?E!xnno*NaW848 z)WRPD27dHK-El2O|2!Ab)pOFg!&3Q*tMKIDFW zDMxxA#`KyAq;}>-8HG6&#*#r0&|C`%1mvi6@68T~)fr0mc_j`;WAxNHHIVI+Archq*lUPv4u~odV)%X{ z@T>v(n#7FV5Z&p4j`<})Rz4=^Y^Le->4KyhC4~S^{>QClyEk*0>+?4!0lW{{vwAzXzN9Oe%Ir;X-8F-zeM#6xt z&+5^-8GrlT&ka1oS;oww`IiScc1WNnq(OlmM@L_YaFA2Sp$Ui_Z4cN=_r~~JL3Px< zEF;GJ2YeC3yvp_@c)=!Twh+A$E31Y$q7Rq=P=n4DG*f54^n3Sj3D{|0o-q3=3$(TCUZ=Kt(#*9ns8yo zE$gTSCa|Tt@=AV5>KBnhdzbHf@cC0Jd#b%<08o{~*Q`<0sP_5=Gxd~_rGy)i%Pja) zJ*b(t3fulbcWs0INoT~KTiJr~_9si42rOnYB-=F*(}S%-_!QiB)0NmM;Z7fV6CYyC zywT`M?s;bHQ6ZMLcMeSDEW;ScE%4bWywCA~Qxo`}^{?b!^+=l)Vmpv@j$-3;buogU|dzTL+tRn*^ zCC1rgOIXkf`wAshkKVc0bmWTc$WXklhEBwDTs&Fx(_|}_#So(@9+$LZ-goCy z$v;OcaxV>rBQe4~;)eNRH+IMpY2$mSp*2vdSP0yYi|E724|g)(UtMR?n7Q7!exzR8 zT8Ko{O{xnHX|_S$)S zXObFq0Rs_js?x6wa!KhV#%yQ+TS*ahHIIMA%Nz>RT6TJ3(Gait7BNl?J1`)=9&6f# z?>IWgP*g`-$qEz!9Sl{#!68ku?{|ChKK%gxEs3wT=?^6TN@69Xf0e{2|F$56O3quxr`_MCq+Tl zx}ruj>Vc+3nW$6agX8YWW!L*>t}oB~?rryx_r;Gc6NLG2KRIe>#5XXg03ZZJSv1MO z0sv<8zTf~STh5WA9y=HoU|rDS7C*uODq;s;*62kniC`540sstv?fjDAp#7Mi(;&A9 zi5-SNGY!~iYLpP7<>~SH5&rQ*&frHppMU&eOFURQerS1vbbbkSDCU$0Z2MP0!o~~5 zu{R1WA&mM!J|k5ol|^(a)Tmsryfk!CD5uyDn7=wPiNNnVeE>6XK?wl-^KfTC5&)RX zVDW7IOe-=n7(VZDD?h9d{ughL&zN14xx#{c1$&^LC@~rAo66Jfg|s~q1*;1_gyiCW zACe)RX)I-hz>eC48dV(R)@IXbbL4Olj{#xJW-~Oy&AVOHg0Mi(OFQM$&SM!cx8NGz z-1`a&Um7?csBc&H8K^WgyBRf&rf+Eq|3RjWmvTh(C%6T6$3C~qNN>oawc$!CfE|+R zKs)dY*EM_}_nH_KKAP)pKUbjSg+qG&4^9%zpW8KHDtM-V$Y8d_Su*&d*^JTULLA~Q z0M$Ho;XrCIhz_UYeFq~hZ}l8Z;b&-}aU<{RHOX|&%#qIG-`Gd>2%iC0hM&m#1(8FSJXYEzG}Y(+#7^eIepj{%poyl4?g4FH*HteQcg7A zo5$J!7NU03h@$Ok!EE}ZIY?^7MjJ5LUyPn&tS6X>wRt<3B_m1U&4+tsC1=qm-lwEF zp1AIgz?tzL(9mR5_iu}E>S)w36;|Xf7#i3lX0Rbl$B57Nq#*UG%z!w<@tBbf*B zxCpd-Ov9D@u$`^x18QNa5|n!qwUvlJQdf4B)5A*6+trt8m;4Lm(MLg2L~COdaUvs< zYDH6!U|2IA(4#r(H;{YqP?qf6;cn2-Kh&u9h=NKoEUOlC$G=(;0s;j0$0(XPusm5f zB=lO7Y=j!LliA+h{koC@?d7mnQSHsrLSugB@C0Mc$I`pkG3>tGDEqgP!b*{ab_H;z z)z^6vy%|vo+A8vB96KqK;&WAzIxI-YcDLy*>Ol4k65Nx4h%!317-tXP*#$iJ$1&Oow#0BS$*5rcG$HTBRyjwOW~Uf3HYc!?7?N9hI|P&E2xcQ*a+?IGCi)!6%8L z68T|J@Jl@Jtf*^7HqbWYNn(;uyEG1#O?jh$*16uiEjwBQ6$+Z*L>Y7MaII)-{AG2o z_W~P$qpRW*A+N0nEUvC$Ib^0_c7QuEA-D8r9I?{=-VJ-ix`6f08WUZ32t`X9-<6fP zSCHlyvkz}cuy)3*ZTP)$%ouuO14q&g`JgNgJv+ZDA0$|*v z&Pm;#)`rvTC^J-oe&2C{OO(TDo5ptj=P*Vd9qHo8-)%m(b$7Xk*G4`(7JYG?r65Hw ze7Z1EpQ=!NNF7lkT5{bU6F;U*sE?KeeP`!bj4l(*7v*C$Z52LHv!or#TQJo*o+FH6 z{GGFWIIx<4#m980Nu&GmGcmpLk-L}oI{jSJBlRXJE>AVez!37sM3qs$S85ZnL0^x* zBAzNLc*})$RbmY;fr=B6+QqCZn(-)c^jzdSM%Gq-EchynjF^ep+Xy%f_a!Ou5(k0d zROf(OE3)}e1)@W6Ky?=Me(MSzhMzh>LD5P*Ird^GMGmFv<~GK()~YUKa}`UA9mU#4 zhdB$sQ!CY*YS>h9CiX6$E>6e8Qq@;4=PPoV&_El#N0`e{YY64?N=9#Hh4Ru@~|JEza=r|Fm;*4 zUr8(u@n4e|0D$nn1~CBSU+;e;v8oCv03bl=ED|ul-w^)xJ%tqNk6;J8`u(3Ze{i>CR$0uxxC(VdvCLv5DyuBqV!Wa zNO!IkTxEJZkH`GUuA450S8rEBpR#U6&EOADS8IDb9Tw~`Us>vP&mUhpi)_xuZFN|? zlRaL6(06rrep*o@mr~t5n!2=iY3x-k9`4TMeARW(j_$tR?#@pKw0^qt%IZ^3Upv3U z;9p@OU#;kBRcg3-1Dx!>2d$YO$ul9_l4OasNVysNCBaR#$xYNF7F|&5kXjmyTq+UN zo>oE*uPqGt--ji8~$&>Hk)0Qf~!#(Y!~Z zD&YQhCj=vwf|MIO>qhyGpfM1o=I&5E=h}e#8?0tQHx}&$`20k?$0v9~m2dn3L2iP`AfkqNM7IQTSRtlmf zUu5P@n(}8mlF{kc`b^8wJ=F{QnJ0tq#8ON}_4M%oyhLnXfkOrC(Z0a}w2kbZ@ zSzfKzhNOhJSiuw5vRAFC4mtT_EsOROtleC?=)fYWiHcL*)rdKP5+7X19Ax2A<>-E2 z#Qao0cJI_o$Wa1x6}C+*s0YKZ5d2y9!$%tsoqmUhmkiw&Cx|hB1_L$2vcbm-x)dqz&xOi z9DH^GTJF97{6+!p%&v-xcEsWQ(b%8mc?pu@`apUy-2sA_wj|(okkJUJ{^GMiOA|1j zM`CAO7Wp^-Pzlfi3UGZgU$V(?NPwLIm2xR zU6D$)1AMe!INm7LcI0+QNB!P~Q(7P(hjjoJK!)W?5Sh9WN|2>bE(9nV8=DUh;_i$m zo2Q}1Npg?`;g$6IG)po{y^OspcvtrOCrTW!+)C0P`r(GR?k9%Ko;!)|IxMvorLj+y zo@NwE3v@2As%k5^c<>!^rfsl7(4*p{nobzGH2{&;R8rIkqN;?2a&oBx*W`+%wLPNb z4=n%HqcKhdWwtGPta);s@)AXO6t)M*5r>luiFlKBwq__lf2lVj=}17uz5Z3%09$rD z0B#-+kX^wA(aa<-K2!_h!3Sh5#BQ0B+YPG(WKA>H`Z_{^vitWU(~nJ_X$ z1kG%lu^qOZTvSdh$5QVXm&W6QJt|l##teclG=+Hv6?N*S7NX%2+fts9h4N&tDHP~V z{(pz@1Il3-3|zkyICkT0-v-&8AetR z6P19II{PRlak)%GJS-cql?Hx3b&3gQm*xj6tUEiblc;joYI}GM)QoroV0M+e{xRt6fnS^-FfJOH0xQ}K?`DPrD{{@opfd^DEU?{$ra zP3{~&bL%z=; zhgNKIGAN_WNNEBFg|da1Z)va?@ku(pXP~O1Yd?zU zU5G{k9YQNqFU$aX4fJBYd^HACZ$=b%ihSs4vnw?`8S4q;K?4|@ZV{FWKrfjog`f)*i@1XPV0<+GD5)_FvGFZi_=^5u0%_i<7zf~EE{ z`pS_X@OI@vID{7GQ_K$GcMgtg9h+Ap-2!VTFMv!<<0s=y=~h#tx;3xp+E{Mc~>v**q*6|ZUO*hS{?f|IJD5VR_oJY<@&aX7B%zXX6d4fs2b0qLK-hAVYcQXGt-bfMb&yeA4pn0Q4M%9vs zcD9X?$QveFaMOM(p5+6ydxY+mRGHHNKP(rIM_ zY?~t@1Aun>^NTxO3PIeEosrd!0dkM?0HU@scXMb+JAdvVUQp z+8Gq;;cQ%WG$C7TmCLZh9K#3eCZ~hRh;c(Vp<>QLxwyHaLX(GQA@X>sBVCFFzHPSD zQ!+4Vt5Om*wi?@fLZpN-mdrR~y#mJ-2szA0dM36Ha$k?NL4X|{pR2quHoFwhut>@H zLmH_GI+0_K1E*=+COsvlAs0uNv^0(z58f&L()RboqyJK-XQrr?8Q>66dZ*gKbHZBP zbU@VM4eUx<%t0y4lAH7mZYrYEOpF3tb|s2Fh#{5<-2*mb*FGSn24ky;_W1?HJv^Uq zIk9qF=V6N?qF z8rZJlAYc!*(NbX2X40F@cF|1VuQM##d-EMWHf zWl!U%6oY_ni5cn4U#Js?d@s66Pe86C1p|&znfx(FQxVSejdNlQ&TTZqH!R*lle(=~c`qg4#o7M^b+_8IWiCNM(CU*C01|56=|OlF0v0@) zfqfoxWHse}sxe|*Gpc=bB$igqDHe_ShP~ryZq}YD4?~yRgAA{A(11Mz*u`49c}13o z>-VeB=3VbF8G&;kJaSEmz39Y>B+Kg>siT0%<5U)*8?=9a=4Jq!8ayz_F&yN}1L4ec z*s!x2k3~0e_4^5S9Kb&K-YE!u4)cCTheoOz(jp|FyZw;}^^%5??>4?ue(CA8@qXi~ zwO?o|hmi-gMDpyoF~_X7f6GeL14uy}YqD0wCp>p7AMXne#l7<8ekG9w!MKS{(A|(N zCQk^_-ZP{=XgaMvzzV;r9Y;e>xLAKFq2Al&P|j{dmr_Q1Y)l5dxEVDAf^j^fiAWyw+~e+8^@ zR0x|dxI!#}>rJbw)CmX*goHcj8_b>(Rpj(~ZO;tx)q?4uYKIU6xuEjyy;07Kj;>bb zCG53VAhk&F^^OkI^=i44D<2&JQsAKoua|p#(#?%Ms^btY;4JQeC^^$h4Zr~ijSY^z z{MC}59F{_E&S_g9nb7#8HOj&aKhm*XYp49rB-Bnkm@E!mcAyhWyBJKaVNLq3&wHA_ zf-D3N?%h$($zYE)&Rj8JSn~;-eKjY>qUm8B`0I!4r<7Mvu6SE@-@*}}L}j&kW~h8Z z9|9HKec2ABjHT2ePJ`l+1F3U)dJ0 z!!S5CTd@cZ0+9JME@Sr3ZGG7|zR2&5rp3^LTY zA5YV%wrO|%&Q{9^MM_<0K^UP83ziWvp;8}ELLr4hVgU^_3?T?DJ4@y-?CV?0c?pB} zR`ktfP(<5g3tkn^Ui4o_Pb-~*?6Ne5^_Ct85lGj7v`ul3mwq+I+f0NNh+*x9{q^N> zPn9gif+^oYm)}o&Fbwi8zSjCUWpQwW7exoF=lScuA#?};Yd**__$IfvaU;Ar&X9?V z{Sp?n>J%P%^91P7QOTfh`E0t-Y(YM16A7`jsqlB8CD0T)!xuSHhAD_8G-)KW6mqoO zI#$A{ekCIw+bD{`ge7T;=>;~{Hbl?As@IzyGCko2jo5IDg$T^m+~?;>W*4zuG7rf} zA6oelre(cYZqznJ85o*Dp_DpX78fu5qA84p?~H}EL%^z)gvy*`jJch(+wm%F+gM0$16EsC zYkNVTFy2v~0n3RU2*vCHNnz(cX?~^K>b-@rnPjgV-f5&~GX$g!gB>DILPb0Ax8xoF z3{w{hToZ$=^E~85%fiO>us2{VYAvzRHEQm@+jfVv;8xS!{qyPU zKdScy%N`qdjj4%Wg@ez@*6VZ`-epYueS1&n>$1PK-thq6m;V0t+u$HpxQ%AF+w1sB z<#K)8YiFiIJX^p=fWP!jpCU`!_$gE^fb^6cFY;I*MoR> zl{sJkq8*A9AC9t*ds0)bQ+*d?g{Nr1$c2E6=EP@rDJrmweah6tr9_vkUw|t&vnxli zbX5e{*k1>y%k6gy#{lUg_0$Ihb?n(uhd7%Cct8N{`Iv5TKgi0^FB;~cBp?op4{9^J zy)sS8qDA#x;PT?;{qoos>ss_5agH_v(qZXWZV?C7##vORt0!(t(VKzbfXK78JwJP^ z99TLI4qVK_ zlRuqH5U%s>Y<~ayF#B1P>9P+H000a6U+IJRFMa&~2xBK%SAL5DCG_rty0RQyRLJRZ zA&x~oU_Mx_IEJbCru29A(lkXY_11+J;WxKiQVSszF%&k$ZEWAH_pJ3t$CXPL+)x$j zNrY4B4mUF!GY*T^VO}DVSR?>rX8{grdf>E@K%R_)=`ZF1jME25!u;g;4;(URn*bB6 zUNeF=vt7e{{|JwRcR!BXxoWT?obX}k7>URfEst9Zq?OwC0``j&!~HHl7ncJZb(hn8 zYAQj0F%V&yZKGU*CDC8TP)LXatTrrER{T?8F(K}qFJrbfoduCrg!DJ1jk<9wsN+wy z%R3oXvANdTHC1c)(V=Fp_OqLnsypAbCSKzeUU`PvH@%%FUR}S=&qpU$-;=MzLOym4 zcz$2rwOd&P$p)g@U3FG^XR7a+okd;U>Cc|E7LbOp=mpzx~|sSNIw@)6TGawH6d$vw0ntUWtLVx}U0qqcF5N=17VFttwcp?_TEr z6df-x9f>FpEKsucNtlWiD6R}ZSN86|S46IH%9OPxf)*&jkybmwZ(nsCe#m0u(kHj zOqz>lGB*{Rp8W#;yObW3Rv-S75((75k`n1ZmlBU{dRW>y|F1P?8!s3&$bb-X_Z_*|1o@|VzXn`W1UmFKzs)IP$~?(S|g+cT?d{$}YA>YCmCtKdbtUAr{v;{Xk=;e5!g}Q5^zUDm(h2SG83_9f83g`f2%M2|-gwsatVJiXv%-I*{*3XM zFLN;$=b1cGffp!&P?_dW3tXyIz+5_CpR6AJ{V3`cWar8DU-TFN{+mwqe`PI1f!BUe z0A}Y6Rnd%2sZ?qQNEoyk8dzGD(AhEmfN${;6!kBQ>eUIWM5^DIyA$?Hll+UcK5(e@ z)H+cZU^(Q~AihC7P%7Nf${<|=+owAP&38ien*k#XnA9Q>?=9hCT+GNbcb)>tOVcLH z)+g!GXeP8*WwwpIVFOw)p2uB+b{2Lm;wJc_LwNJs8qhU9PWy1m_xprj-^#DKspxck zk*BD+O-1|qN94zF<)jq6&J)*Y+!!)CXKbK#pnY=ALpdRQD+wRU6`U!R%JWHFD^$#t zz}}D@yMJ#8EC`zhn*mAFR>Y+ME2Z48uLh(I!NB1U(82)&V2}lLOVgqZ3qis`Zb~- zT;eqarY*`_7Op##;I7$V< znNxx`S5UJD=AREQpB}coGD9-!c>hqw3pHIaRBd9{fI_nt5qwPH`Sbr;mG?- z**UUb%_&^%p*8Qn4Ody1d88R-6o2YkiDn9PWMnJg8K-(3bN5WddeMjbA$IqVb~win zk^|GPdi>jxZ%S;o#+tzt#JNk~ZrFwpZWTn%X-dnTG=g*HkxTbQp7l)b6dSi@zni}$ z<>$H+Oys@=DhJsd!afbSw{kFqE5N0hALDTR;ZciJIeBq>6*E6a>sABE@rNUnWOipr z;8i-_^K#7wHbIkGf_4JGOTw6p(w9@!HugpgAO610_NKFz1%GX^H}JpOW{|(O+0NAE z-)kCS|MTYm(21?_zlVbIzoY!e#lHuJ@lU}1s`q~nknmps{>@JQ<|h9hGRc1j`QPp5 z1^%1h!miFP_O{}GttkDqB5delYHsi3`B$hIIy?X4k4sc_otMN=c(39p+>+x$fd~~W z2m?sV5ak?%jE)jB<4QRK2{Weqp_?4pVg*v8X_#lEe`G(7!MT(zrhtc#;lC7fc6A}I z$=Hr0@r!kJcbso|U-W9ezt3*C0jf02H5^3^ZXR&=YFDckMh{`PDjz!UwPWk`POF`& zFg>2UO*}^ zRt{!Pm$rX@#$-5n`x3V08-^QJ<`sn+hPsS-6U=spCfKRu5}MsH$*6l7o~5DJp<*D> zS)N}d=}#xjDJ;0%`nbL?7J53+EZ1?|$NUayL z<)zXQPTzms>8dWIOt-rJ46fO^mxOhgJ(f!aX3hhQ6G0MQr$!R zR!cuL8L4tI&-!TfiH%0SB3gfO!*|M)LV(EQ3tN~8P|vG-6gzgh>}wAi6}Pcks_o#h zcxzr;(@}rD+(H~q*!`pBr@GyO8;FyG3dyx??2i7ts&D2!KXgb?F`o|v1OMHMtHuL~EK*zrpOo<_aCaTNijVt(oW){$je2AeXDbT20 z{6i&rngIBGMV&+59do5nwUcaSkMZeJxth>4Tlv%L9N~dkCqG<#U@2_ik$1pFN5soN z_79fXvpNa#%{6#*hP?x;^cuay=+?$dc+FI^*@ah-O;+~NtKh;&3*)M4GN}bigR%yp z=}2uMMqZ@RK9X6A6YgFjEsa#7pE6YqXUR#c6!$WVO=WqMgDM| z=&Rx*Z|XOY>~WrkZ;8@fyh^8pSc14FU>EJ)(t8n<@0W3@=aYwiL~O!7$|8qwJc<}H zWnr>?(tjK^3b5;B3IEH|rT*nnBmVzp`HTI1`G1zbnx(U)i@nqTR{bq1H*&~=D7;ID zwb}|)RwM6#P!yxXvNxmQTk!}qqb7<##r`aWOQsZ2AA+S_vK}-)R)@f^5PZ=Ov#pf) z0~{6i#;3a-=BL@*%-`G(RRWK#SRI~$~5f4dKms(Xg$ZPVoP8g%!R8wt|t8k!0?}cRr zH&!xE+vc>PcUnHM@@Jb)TkIySD;B*Ev3Yq=Y^_-$Z9WU6#pSA%!0%DDg-w4d z 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

Lf=SHS>-Yz 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

JjjSqP-F@1@h*=vip|G- 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

^R@zD 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%0D^vckbwEV@4ri~V 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

)}Sbs6TIg~@RPS5X@U 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

`QcyHi5CyhREEUdIV*e=DD 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�$cdwma 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 F{|}1w(#8M) literal 0 HcmV?d00001 diff --git a/libs/iris-fabric-1.8.14-beta.1+mc1.21.1-devpatch.jar b/libs/iris-fabric-1.8.14-beta.1+mc1.21.1-devpatch.jar new file mode 100644 index 0000000000000000000000000000000000000000..2358e84e5e81f80a156ab455d21a5240df7dd242 GIT binary patch literal 2791348 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

KIexA2B5WnxA!EO^dI{I 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
CA+!Hxe2$~O+`Smf$G$0mdIYH_b{%9 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∓hhsggLL#peWCKWm+g`nde;X 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�c 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

7nU<)o?IyWm~a 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 WTII~UlSq-B- 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 h#>S3GPg^K03CM%)5ppZBPJaaK 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

~G?)rwp^I=iZis>A%C<;O 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

vMCHYx2{pS@+*bkPYEnAsh?B> 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

  • 78 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

    UCc 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

      ;elRnuzgqs285y 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
    1. V1MIP5*lJ%@6tlK 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

      Ix0)v!#*V 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 ApJqGS4HDDy6)@JH88I!l^9{=D>^_ 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⩔~4MB3nTJ6$f*N!aQQBSx1nD-v049V55kAe5Q< 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 z

    _fRWgoyBON;hXt)<@~ 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 z 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

  • C57iqm_wX^n-Mn-Z%gyyU{@fwVqF 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

    G!Z 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 M9xA64% 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 z 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 z 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%0ARM7=e>5T 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