From 56b2331968a35c30231c0c3273e0b420691ac90d Mon Sep 17 00:00:00 2001 From: Andraxion Date: Fri, 26 Jun 2026 21:19:33 -0400 Subject: [PATCH] Show what's new on launcher --- src/WorldshaperLauncher.tsx | 28 ++++++++ src/index.css | 67 +++++++++++++++++++ src/worldshaperStudio/changelogData.ts | 63 +++++++++++++++++ .../changelogSplashWindowController.ts | 62 +---------------- 4 files changed, 160 insertions(+), 60 deletions(-) create mode 100644 src/worldshaperStudio/changelogData.ts diff --git a/src/WorldshaperLauncher.tsx b/src/WorldshaperLauncher.tsx index 684d120..3fc0d26 100644 --- a/src/WorldshaperLauncher.tsx +++ b/src/WorldshaperLauncher.tsx @@ -3,6 +3,7 @@ import { buildWorldshaperStudioUrl, openWorldshaperStudioWindow, } from "./worldshaperStudio/windowing"; +import { CHANGELOG_SECTIONS, CHANGELOG_SPLASH_VERSION } from "./worldshaperStudio/changelogData"; type WorldDefaultPayload = { worldId?: string; @@ -224,6 +225,33 @@ function WorldshaperLauncher() { ) : null} +
+
+

What's New

+

{CHANGELOG_SPLASH_VERSION}

+
+
+ {CHANGELOG_SECTIONS.map((section) => ( +
+

{section.title}

+
    + {section.items.map((item, index) => { + const key = `${section.title}-${index}`; + if (typeof item === "string") { + return
  • {item}
  • ; + } + return ( +
  • +
    {item.text}
    + {item.note ?
    {item.note}
    : null} +
  • + ); + })} +
+
+ ))} +
+
); diff --git a/src/index.css b/src/index.css index 6b7f337..1a342f1 100644 --- a/src/index.css +++ b/src/index.css @@ -88,6 +88,68 @@ body { margin-top: 18px; } +.launcher-whats-new { + margin-top: 24px; + padding-top: 18px; + border-top: 1px solid rgba(120, 170, 230, 0.16); +} + +.launcher-whats-new-head { + display: flex; + flex-wrap: wrap; + align-items: baseline; + justify-content: space-between; + gap: 10px; + margin-bottom: 14px; +} + +.launcher-whats-new-title { + margin: 0; + font-size: 1.1rem; +} + +.launcher-whats-new-version { + margin: 0; + color: #9fd8ff; + font-size: 0.78rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.launcher-whats-new-list { + display: grid; + gap: 14px; +} + +.launcher-whats-new-section { + display: grid; + gap: 8px; +} + +.launcher-whats-new-section-title { + margin: 0; + font-size: 0.92rem; + color: #dff2ff; +} + +.launcher-whats-new-bullets { + margin: 0; + padding-left: 18px; + display: grid; + gap: 8px; + color: #d5dfec; +} + +.launcher-whats-new-bullets li { + line-height: 1.45; +} + +.launcher-whats-new-note { + margin-top: 3px; + color: #9bacbe; + font-size: 0.88rem; +} + .launcher-primary-btn, .launcher-secondary-btn { min-height: 46px; @@ -1212,6 +1274,11 @@ button.danger:not(:disabled):hover { flex-direction: column; } + .launcher-whats-new-head { + flex-direction: column; + align-items: flex-start; + } + .launcher-primary-btn, .launcher-secondary-btn { width: 100%; diff --git a/src/worldshaperStudio/changelogData.ts b/src/worldshaperStudio/changelogData.ts new file mode 100644 index 0000000..b0b0a81 --- /dev/null +++ b/src/worldshaperStudio/changelogData.ts @@ -0,0 +1,63 @@ +export type ChangelogItem = string | { + text: string; + note?: string; +}; + +export const CHANGELOG_SPLASH_VERSION = "2026-06-22-world-editor-release-v6"; + +export const CHANGELOG_SECTIONS = [ + { + title: "World Rendering", + items: [ + "Added live image opacity support in the renderer for both tiles and entity sprites.", + { + text: "Fixed world painting placement drift on very wide displays.", + note: "For the many of you out there using this on superultrawide monitors.", + }, + ], + }, + { + title: "Graphics & Animation", + items: [ + "Added animation frame timelines to the Graphic Painter.", + "Added frame duplication, enable/disable, delete, drag reorder, and default-frame selection.", + "Added animation speed and playback settings to graphics data.", + "Added animation preview support from the Graphic Painter.", + ], + }, + { + title: "World Overview", + items: [ + "Added chunk move, duplicate, rotate, flip, and delete workflows from the world overview.", + "Added safer chunk management feedback and confirmation flows.", + ], + }, + { + title: "Editor Stability", + items: [ + "Fixed unified graphics conversion so saved image properties flow correctly into runtime tiles and sprites.", + "Improved live refresh behavior for renderer-facing graphic updates.", + ], + }, + { + title: "TBI (To Be Implemented [Or thought about really hard])", + items: [ + "Image animations on renderer with hotkey toggle and engine override toggle.", + "Add premade frame duplication effects, like duplicate and shift by direction.", + "Add animation effects that change opacity over time.", + "Add animation effects that shift saturation over time.", + "Work on a system to use an image with animation frames as a tile strip, placing the instance once but specifying which subimage to use.", + "Add an elevation system where some tiles can appear at different z-indexes and show a different subframe.", + "Allow unsnapped tile placement, possibly via hotkey, writing into a chunk patch instead of chunk rows.", + "Explore whether unsnapped placement should be true free placement or an additional sub-layer drawn over an existing layer.", + "Add custom prompts for text input and confirmation dialogs.", + "Prototype terrain painters for meta chunk painting and tile replacement, like rivers, mountains, and woods.", + "Talk to Justin more about zone and subzone music regions via chunk painting.", + "Autotilers.", + "Prefab stamps.", + ], + }, +] as const satisfies ReadonlyArray<{ + title: string; + items: ReadonlyArray; +}>; diff --git a/src/worldshaperStudio/changelogSplashWindowController.ts b/src/worldshaperStudio/changelogSplashWindowController.ts index 453dfac..5970548 100644 --- a/src/worldshaperStudio/changelogSplashWindowController.ts +++ b/src/worldshaperStudio/changelogSplashWindowController.ts @@ -1,7 +1,8 @@ import { clampFloatingWindowRect } from "./floatingWindowUtils"; +import { CHANGELOG_SECTIONS, CHANGELOG_SPLASH_VERSION } from "./changelogData"; +import type { ChangelogItem } from "./changelogData"; const CHANGELOG_SPLASH_WINDOW_KEY = "changelogSplash"; -const CHANGELOG_SPLASH_VERSION = "2026-06-22-world-editor-release-v6"; const CHANGELOG_SPLASH_STORAGE_KEY = `worldshaper:studio:changelog-seen:${CHANGELOG_SPLASH_VERSION}`; const DEFAULT_WIDTH = 700; const DEFAULT_HEIGHT = 560; @@ -56,65 +57,6 @@ type OpenOptions = { markSeen?: boolean; }; -type ChangelogItem = string | { - text: string; - note?: string; -}; - -const CHANGELOG_SECTIONS = [ - { - title: "World Rendering", - items: [ - "Added live image opacity support in the renderer for both tiles and entity sprites.", - { - text: "Fixed world painting placement drift on very wide displays.", - note: "For the many of you out there using this on superultrawide monitors.", - }, - ], - }, - { - title: "Graphics & Animation", - items: [ - "Added animation frame timelines to the Graphic Painter.", - "Added frame duplication, enable/disable, delete, drag reorder, and default-frame selection.", - "Added animation speed and playback settings to graphics data.", - "Added animation preview support from the Graphic Painter.", - ], - }, - { - title: "World Overview", - items: [ - "Added chunk move, duplicate, rotate, flip, and delete workflows from the world overview.", - "Added safer chunk management feedback and confirmation flows.", - ], - }, - { - title: "Editor Stability", - items: [ - "Fixed unified graphics conversion so saved image properties flow correctly into runtime tiles and sprites.", - "Improved live refresh behavior for renderer-facing graphic updates.", - ], - }, - { - title: "TBI (To Be Implemented [Or thought about really hard])", - items: [ - "Image animations on renderer with hotkey toggle and engine override toggle.", - "Add premade frame duplication effects, like duplicate and shift by direction.", - "Add animation effects that change opacity over time.", - "Add animation effects that shift saturation over time.", - "Work on a system to use an image with animation frames as a tile strip, placing the instance once but specifying which subimage to use.", - "Add an elevation system where some tiles can appear at different z-indexes and show a different subframe.", - "Allow unsnapped tile placement, possibly via hotkey, writing into a chunk patch instead of chunk rows.", - "Explore whether unsnapped placement should be true free placement or an additional sub-layer drawn over an existing layer.", - "Add custom prompts for text input and confirmation dialogs.", - "Prototype terrain painters for meta chunk painting and tile replacement, like rivers, mountains, and woods.", - "Talk to Justin more about zone and subzone music regions via chunk painting.", - "Autotilers.", - "Prefab stamps.", - ], - }, -] as const; - function clampWindowRect(layerRect: LayerRect, left: number, top: number, width: number, height: number) { return clampFloatingWindowRect(layerRect, left, top, width, height, MIN_WIDTH, MIN_HEIGHT, DEFAULT_WIDTH, DEFAULT_HEIGHT); }