@almadar/ui 5.28.2 → 5.28.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avl/index.cjs +106 -31
- package/dist/avl/index.js +106 -31
- package/dist/components/game/organisms/BattleBoard.d.ts +18 -1
- package/dist/components/game/organisms/CanvasEffect.d.ts +1 -1
- package/dist/components/game/organisms/CastleBoard.d.ts +18 -3
- package/dist/components/game/organisms/UncontrolledBattleBoard.d.ts +10 -1
- package/dist/components/game/organisms/WorldMapBoard.d.ts +17 -1
- package/dist/components/game/templates/BattleTemplate.d.ts +11 -1
- package/dist/components/game/templates/CastleTemplate.d.ts +11 -1
- package/dist/components/game/templates/WorldMapTemplate.d.ts +11 -1
- package/dist/components/index.cjs +106 -31
- package/dist/components/index.js +106 -31
- package/dist/providers/index.cjs +106 -31
- package/dist/providers/index.js +106 -31
- package/dist/runtime/index.cjs +106 -31
- package/dist/runtime/index.js +106 -31
- package/package.json +1 -1
package/dist/avl/index.cjs
CHANGED
|
@@ -11456,7 +11456,7 @@ var init_DamageNumber = __esm({
|
|
|
11456
11456
|
function DialogueBubble({
|
|
11457
11457
|
speaker,
|
|
11458
11458
|
text,
|
|
11459
|
-
portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/
|
|
11459
|
+
portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
|
|
11460
11460
|
position = "bottom",
|
|
11461
11461
|
className
|
|
11462
11462
|
}) {
|
|
@@ -14066,7 +14066,7 @@ function IsometricCanvas({
|
|
|
14066
14066
|
// Rendering options
|
|
14067
14067
|
scale = 0.4,
|
|
14068
14068
|
debug: debug2 = false,
|
|
14069
|
-
backgroundImage,
|
|
14069
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/court.png",
|
|
14070
14070
|
showMinimap = true,
|
|
14071
14071
|
enableCamera = true,
|
|
14072
14072
|
unitScale = 1,
|
|
@@ -14081,7 +14081,7 @@ function IsometricCanvas({
|
|
|
14081
14081
|
// Tuning
|
|
14082
14082
|
diamondTopY: diamondTopYProp,
|
|
14083
14083
|
// Remote asset loading
|
|
14084
|
-
assetBaseUrl,
|
|
14084
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
|
|
14085
14085
|
assetManifest
|
|
14086
14086
|
}) {
|
|
14087
14087
|
const tilesProp = Array.isArray(_tilesPropRaw) ? _tilesPropRaw : [];
|
|
@@ -14840,6 +14840,10 @@ var init_boardEntity = __esm({
|
|
|
14840
14840
|
});
|
|
14841
14841
|
function BattleBoard({
|
|
14842
14842
|
entity,
|
|
14843
|
+
tiles: propTiles,
|
|
14844
|
+
units: propUnits,
|
|
14845
|
+
features: propFeatures,
|
|
14846
|
+
assetManifest: propAssetManifest,
|
|
14843
14847
|
scale = 0.45,
|
|
14844
14848
|
unitScale = 1,
|
|
14845
14849
|
header,
|
|
@@ -14865,11 +14869,11 @@ function BattleBoard({
|
|
|
14865
14869
|
className
|
|
14866
14870
|
}) {
|
|
14867
14871
|
const board = boardEntity(entity) ?? {};
|
|
14868
|
-
const tiles = Array.isArray(board.tiles) ? board.tiles : [];
|
|
14869
|
-
const features = Array.isArray(board.features) ? board.features : [];
|
|
14872
|
+
const tiles = propTiles ?? (Array.isArray(board.tiles) ? board.tiles : []);
|
|
14873
|
+
const features = propFeatures ?? (Array.isArray(board.features) ? board.features : []);
|
|
14870
14874
|
const boardWidth = num(board.boardWidth, 8);
|
|
14871
14875
|
const boardHeight = num(board.boardHeight, 6);
|
|
14872
|
-
const assetManifest = board.assetManifest;
|
|
14876
|
+
const assetManifest = propAssetManifest ?? board.assetManifest;
|
|
14873
14877
|
const backgroundImage = board.backgroundImage;
|
|
14874
14878
|
const units = rows(board.units);
|
|
14875
14879
|
const selectedUnitId = board.selectedUnitId ?? null;
|
|
@@ -14961,7 +14965,7 @@ function BattleBoard({
|
|
|
14961
14965
|
}, 16);
|
|
14962
14966
|
return () => clearInterval(interval);
|
|
14963
14967
|
}, []);
|
|
14964
|
-
const
|
|
14968
|
+
const derivedIsoUnits = React88.useMemo(() => {
|
|
14965
14969
|
return units.filter((u) => unitHealth(u) > 0).map((unit) => {
|
|
14966
14970
|
const id = str(unit.id);
|
|
14967
14971
|
const pos = movingPositions.get(id) ?? unitPosition(unit);
|
|
@@ -14985,6 +14989,7 @@ function BattleBoard({
|
|
|
14985
14989
|
};
|
|
14986
14990
|
});
|
|
14987
14991
|
}, [units, movingPositions]);
|
|
14992
|
+
const isoUnits = propUnits ?? derivedIsoUnits;
|
|
14988
14993
|
const maxY = Math.max(...tiles.map((t2) => t2.y), 0);
|
|
14989
14994
|
const baseOffsetX = (maxY + 1) * (TILE_WIDTH * scale / 2);
|
|
14990
14995
|
const tileToScreen = React88.useCallback(
|
|
@@ -15206,14 +15211,22 @@ function BattleTemplate({
|
|
|
15206
15211
|
entity,
|
|
15207
15212
|
scale = 0.45,
|
|
15208
15213
|
unitScale = 1,
|
|
15214
|
+
tiles,
|
|
15215
|
+
units,
|
|
15216
|
+
features,
|
|
15217
|
+
assetManifest,
|
|
15209
15218
|
className
|
|
15210
15219
|
}) {
|
|
15211
15220
|
const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
|
|
15212
|
-
if (!resolved) return null;
|
|
15221
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
15213
15222
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15214
15223
|
BattleBoard,
|
|
15215
15224
|
{
|
|
15216
15225
|
entity: resolved,
|
|
15226
|
+
tiles,
|
|
15227
|
+
units,
|
|
15228
|
+
features,
|
|
15229
|
+
assetManifest,
|
|
15217
15230
|
scale,
|
|
15218
15231
|
unitScale,
|
|
15219
15232
|
tileClickEvent: "TILE_CLICK",
|
|
@@ -21359,16 +21372,21 @@ function EmojiEffect({
|
|
|
21359
21372
|
}
|
|
21360
21373
|
);
|
|
21361
21374
|
}
|
|
21362
|
-
function CanvasEffect(
|
|
21375
|
+
function CanvasEffect({
|
|
21376
|
+
effectSpriteUrl = "https://almadar-kflow-assets.web.app/shared/effects/gas/gas00.png",
|
|
21377
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/effects/",
|
|
21378
|
+
...props
|
|
21379
|
+
}) {
|
|
21363
21380
|
const eventBus = useEventBus();
|
|
21364
|
-
const {
|
|
21381
|
+
const mergedProps = { effectSpriteUrl, assetBaseUrl, ...props };
|
|
21382
|
+
const { completeEvent, onComplete, ...rest } = mergedProps;
|
|
21365
21383
|
const handleComplete = React88.useCallback(() => {
|
|
21366
21384
|
if (completeEvent) eventBus.emit(`UI:${completeEvent}`, {});
|
|
21367
21385
|
onComplete?.();
|
|
21368
21386
|
}, [completeEvent, eventBus, onComplete]);
|
|
21369
21387
|
const enhancedProps = { ...rest, onComplete: handleComplete };
|
|
21370
|
-
if (
|
|
21371
|
-
return /* @__PURE__ */ jsxRuntime.jsx(CanvasEffectEngine, { ...enhancedProps, assetManifest:
|
|
21388
|
+
if (rest.assetManifest) {
|
|
21389
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CanvasEffectEngine, { ...enhancedProps, assetManifest: rest.assetManifest });
|
|
21372
21390
|
}
|
|
21373
21391
|
return /* @__PURE__ */ jsxRuntime.jsx(EmojiEffect, { ...enhancedProps });
|
|
21374
21392
|
}
|
|
@@ -22153,6 +22171,10 @@ var init_CaseStudyOrganism = __esm({
|
|
|
22153
22171
|
});
|
|
22154
22172
|
function CastleBoard({
|
|
22155
22173
|
entity,
|
|
22174
|
+
tiles: propTiles,
|
|
22175
|
+
units: propUnits,
|
|
22176
|
+
features: propFeatures,
|
|
22177
|
+
assetManifest: propAssetManifest,
|
|
22156
22178
|
scale = 0.45,
|
|
22157
22179
|
header,
|
|
22158
22180
|
sidePanel,
|
|
@@ -22168,10 +22190,10 @@ function CastleBoard({
|
|
|
22168
22190
|
}) {
|
|
22169
22191
|
const eventBus = useEventBus();
|
|
22170
22192
|
const resolved = boardEntity(entity);
|
|
22171
|
-
const tiles = Array.isArray(resolved?.tiles) ? resolved.tiles : [];
|
|
22172
|
-
const features = Array.isArray(resolved?.features) ? resolved.features : [];
|
|
22173
|
-
const units = Array.isArray(resolved?.units) ? resolved.units : [];
|
|
22174
|
-
const assetManifest = resolved?.assetManifest;
|
|
22193
|
+
const tiles = propTiles ?? (Array.isArray(resolved?.tiles) ? resolved.tiles : []);
|
|
22194
|
+
const features = propFeatures ?? (Array.isArray(resolved?.features) ? resolved.features : []);
|
|
22195
|
+
const units = propUnits ?? (Array.isArray(resolved?.units) ? resolved.units : []);
|
|
22196
|
+
const assetManifest = propAssetManifest ?? resolved?.assetManifest;
|
|
22175
22197
|
const backgroundImage = resolved?.backgroundImage;
|
|
22176
22198
|
const [hoveredTile, setHoveredTile] = React88.useState(null);
|
|
22177
22199
|
const [selectedFeature, setSelectedFeature] = React88.useState(null);
|
|
@@ -22274,14 +22296,22 @@ var init_CastleBoard = __esm({
|
|
|
22274
22296
|
function CastleTemplate({
|
|
22275
22297
|
entity,
|
|
22276
22298
|
scale = 0.45,
|
|
22299
|
+
tiles,
|
|
22300
|
+
units,
|
|
22301
|
+
features,
|
|
22302
|
+
assetManifest,
|
|
22277
22303
|
className
|
|
22278
22304
|
}) {
|
|
22279
22305
|
const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
|
|
22280
|
-
if (!resolved) return null;
|
|
22306
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
22281
22307
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22282
22308
|
CastleBoard,
|
|
22283
22309
|
{
|
|
22284
22310
|
entity: resolved,
|
|
22311
|
+
tiles,
|
|
22312
|
+
units,
|
|
22313
|
+
features,
|
|
22314
|
+
assetManifest,
|
|
22285
22315
|
scale,
|
|
22286
22316
|
featureClickEvent: "FEATURE_CLICK",
|
|
22287
22317
|
unitClickEvent: "UNIT_CLICK",
|
|
@@ -28914,8 +28944,8 @@ function GameCanvas2D({
|
|
|
28914
28944
|
tickEvent,
|
|
28915
28945
|
drawEvent,
|
|
28916
28946
|
fps = 60,
|
|
28917
|
-
backgroundImage,
|
|
28918
|
-
assetBaseUrl = "",
|
|
28947
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/resonators.jpeg",
|
|
28948
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
|
|
28919
28949
|
className
|
|
28920
28950
|
}) {
|
|
28921
28951
|
const canvasRef = React88__namespace.useRef(null);
|
|
@@ -28979,6 +29009,9 @@ function GameCanvas2D({
|
|
|
28979
29009
|
const bgImg = loadImage(backgroundImageRef.current);
|
|
28980
29010
|
if (bgImg) {
|
|
28981
29011
|
ctx.drawImage(bgImg, 0, 0, widthRef.current, heightRef.current);
|
|
29012
|
+
} else {
|
|
29013
|
+
ctx.fillStyle = "#0f1420";
|
|
29014
|
+
ctx.fillRect(0, 0, widthRef.current, heightRef.current);
|
|
28982
29015
|
}
|
|
28983
29016
|
}
|
|
28984
29017
|
onDrawRef.current?.(ctx, frame);
|
|
@@ -30123,10 +30156,10 @@ function PlatformerCanvas({
|
|
|
30123
30156
|
canvasHeight = 400,
|
|
30124
30157
|
followCamera = true,
|
|
30125
30158
|
bgColor,
|
|
30126
|
-
playerSprite,
|
|
30159
|
+
playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
|
|
30127
30160
|
tileSprites,
|
|
30128
|
-
backgroundImage,
|
|
30129
|
-
assetBaseUrl = "",
|
|
30161
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/court.png",
|
|
30162
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
|
|
30130
30163
|
leftEvent = "MOVE_LEFT",
|
|
30131
30164
|
rightEvent = "MOVE_RIGHT",
|
|
30132
30165
|
jumpEvent = "JUMP",
|
|
@@ -47944,7 +47977,14 @@ var init_useBattleState = __esm({
|
|
|
47944
47977
|
init_boardEntity();
|
|
47945
47978
|
}
|
|
47946
47979
|
});
|
|
47947
|
-
function UncontrolledBattleBoard({
|
|
47980
|
+
function UncontrolledBattleBoard({
|
|
47981
|
+
entity,
|
|
47982
|
+
tiles,
|
|
47983
|
+
units,
|
|
47984
|
+
features,
|
|
47985
|
+
assetManifest,
|
|
47986
|
+
...rest
|
|
47987
|
+
}) {
|
|
47948
47988
|
const resolved = boardEntity(entity);
|
|
47949
47989
|
const battleState = useBattleState(
|
|
47950
47990
|
rows(resolved?.initialUnits),
|
|
@@ -47964,19 +48004,23 @@ function UncontrolledBattleBoard({ entity, ...rest }) {
|
|
|
47964
48004
|
calculateDamage: rest.calculateDamage
|
|
47965
48005
|
}
|
|
47966
48006
|
);
|
|
47967
|
-
if (!resolved) return null;
|
|
48007
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
47968
48008
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
47969
48009
|
BattleBoard,
|
|
47970
48010
|
{
|
|
47971
48011
|
...rest,
|
|
47972
|
-
|
|
48012
|
+
tiles,
|
|
48013
|
+
units,
|
|
48014
|
+
features,
|
|
48015
|
+
assetManifest,
|
|
48016
|
+
entity: resolved ? {
|
|
47973
48017
|
...resolved,
|
|
47974
48018
|
units: battleState.units,
|
|
47975
48019
|
phase: battleState.phase,
|
|
47976
48020
|
turn: battleState.turn,
|
|
47977
48021
|
gameResult: battleState.gameResult,
|
|
47978
48022
|
selectedUnitId: battleState.selectedUnitId
|
|
47979
|
-
}
|
|
48023
|
+
} : void 0
|
|
47980
48024
|
}
|
|
47981
48025
|
);
|
|
47982
48026
|
}
|
|
@@ -48005,6 +48049,10 @@ function defaultIsInRange(from, to, range) {
|
|
|
48005
48049
|
}
|
|
48006
48050
|
function WorldMapBoard({
|
|
48007
48051
|
entity,
|
|
48052
|
+
tiles: propTiles,
|
|
48053
|
+
units: propUnits,
|
|
48054
|
+
features: propFeatures,
|
|
48055
|
+
assetManifest: propAssetManifest,
|
|
48008
48056
|
isLoading,
|
|
48009
48057
|
scale = 0.4,
|
|
48010
48058
|
unitScale = 2.5,
|
|
@@ -48033,16 +48081,16 @@ function WorldMapBoard({
|
|
|
48033
48081
|
const resolved = boardEntity(entity);
|
|
48034
48082
|
const hexes = rows(resolved?.hexes);
|
|
48035
48083
|
const heroes = rows(resolved?.heroes);
|
|
48036
|
-
const features = Array.isArray(resolved?.features) ? resolved.features : [];
|
|
48084
|
+
const features = propFeatures ?? (Array.isArray(resolved?.features) ? resolved.features : []);
|
|
48037
48085
|
const selectedHeroId = resolved?.selectedHeroId ?? null;
|
|
48038
|
-
const assetManifest = resolved?.assetManifest;
|
|
48086
|
+
const assetManifest = propAssetManifest ?? resolved?.assetManifest;
|
|
48039
48087
|
const backgroundImage = resolved?.backgroundImage;
|
|
48040
48088
|
const [hoveredTile, setHoveredTile] = React88.useState(null);
|
|
48041
48089
|
const selectedHero = React88.useMemo(
|
|
48042
48090
|
() => heroes.find((h) => str(h.id) === selectedHeroId) ?? null,
|
|
48043
48091
|
[heroes, selectedHeroId]
|
|
48044
48092
|
);
|
|
48045
|
-
const
|
|
48093
|
+
const derivedTiles = React88.useMemo(
|
|
48046
48094
|
() => hexes.map((hex) => ({
|
|
48047
48095
|
x: num(hex.x),
|
|
48048
48096
|
y: num(hex.y),
|
|
@@ -48051,8 +48099,9 @@ function WorldMapBoard({
|
|
|
48051
48099
|
})),
|
|
48052
48100
|
[hexes]
|
|
48053
48101
|
);
|
|
48102
|
+
const tiles = propTiles ?? derivedTiles;
|
|
48054
48103
|
const baseUnits = React88.useMemo(
|
|
48055
|
-
() => heroes.map((hero) => ({
|
|
48104
|
+
() => propUnits ?? heroes.map((hero) => ({
|
|
48056
48105
|
id: str(hero.id),
|
|
48057
48106
|
position: heroPosition(hero),
|
|
48058
48107
|
name: str(hero.name),
|
|
@@ -48061,7 +48110,7 @@ function WorldMapBoard({
|
|
|
48061
48110
|
maxHealth: 100,
|
|
48062
48111
|
sprite: hero.sprite == null ? void 0 : str(hero.sprite)
|
|
48063
48112
|
})),
|
|
48064
|
-
[heroes]
|
|
48113
|
+
[heroes, propUnits]
|
|
48065
48114
|
);
|
|
48066
48115
|
const MOVE_SPEED_MS_PER_TILE = 300;
|
|
48067
48116
|
const movementAnimRef = React88.useRef(null);
|
|
@@ -48271,12 +48320,20 @@ function WorldMapTemplate({
|
|
|
48271
48320
|
unitScale = 2.5,
|
|
48272
48321
|
diamondTopY,
|
|
48273
48322
|
allowMoveAllHeroes = false,
|
|
48323
|
+
tiles,
|
|
48324
|
+
units,
|
|
48325
|
+
features,
|
|
48326
|
+
assetManifest,
|
|
48274
48327
|
className
|
|
48275
48328
|
}) {
|
|
48276
48329
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
48277
48330
|
WorldMapBoard,
|
|
48278
48331
|
{
|
|
48279
48332
|
entity,
|
|
48333
|
+
tiles,
|
|
48334
|
+
units,
|
|
48335
|
+
features,
|
|
48336
|
+
assetManifest,
|
|
48280
48337
|
scale,
|
|
48281
48338
|
unitScale,
|
|
48282
48339
|
diamondTopY,
|
|
@@ -49494,6 +49551,24 @@ function renderPatternProps(props, onDismiss) {
|
|
|
49494
49551
|
priority: 0
|
|
49495
49552
|
};
|
|
49496
49553
|
rendered[key] = /* @__PURE__ */ jsxRuntime.jsx(SlotContentRenderer, { content: childContent, onDismiss });
|
|
49554
|
+
} else if (Array.isArray(value)) {
|
|
49555
|
+
rendered[key] = value.map((item, i) => {
|
|
49556
|
+
const el = item;
|
|
49557
|
+
if (isPatternConfig(el)) {
|
|
49558
|
+
const nestedProps = {};
|
|
49559
|
+
for (const [k, v] of Object.entries(el)) {
|
|
49560
|
+
if (k !== "type") nestedProps[k] = v;
|
|
49561
|
+
}
|
|
49562
|
+
const childContent = {
|
|
49563
|
+
id: `prop-${key}-${i}`,
|
|
49564
|
+
pattern: el.type,
|
|
49565
|
+
props: nestedProps,
|
|
49566
|
+
priority: 0
|
|
49567
|
+
};
|
|
49568
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SlotContentRenderer, { content: childContent, onDismiss }, i);
|
|
49569
|
+
}
|
|
49570
|
+
return substituteTraitRefsDeep(el, `prop:${key}[${i}]`);
|
|
49571
|
+
});
|
|
49497
49572
|
} else {
|
|
49498
49573
|
rendered[key] = substituteTraitRefsDeep(value, `prop:${key}`);
|
|
49499
49574
|
}
|
package/dist/avl/index.js
CHANGED
|
@@ -11407,7 +11407,7 @@ var init_DamageNumber = __esm({
|
|
|
11407
11407
|
function DialogueBubble({
|
|
11408
11408
|
speaker,
|
|
11409
11409
|
text,
|
|
11410
|
-
portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/
|
|
11410
|
+
portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
|
|
11411
11411
|
position = "bottom",
|
|
11412
11412
|
className
|
|
11413
11413
|
}) {
|
|
@@ -14017,7 +14017,7 @@ function IsometricCanvas({
|
|
|
14017
14017
|
// Rendering options
|
|
14018
14018
|
scale = 0.4,
|
|
14019
14019
|
debug: debug2 = false,
|
|
14020
|
-
backgroundImage,
|
|
14020
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/court.png",
|
|
14021
14021
|
showMinimap = true,
|
|
14022
14022
|
enableCamera = true,
|
|
14023
14023
|
unitScale = 1,
|
|
@@ -14032,7 +14032,7 @@ function IsometricCanvas({
|
|
|
14032
14032
|
// Tuning
|
|
14033
14033
|
diamondTopY: diamondTopYProp,
|
|
14034
14034
|
// Remote asset loading
|
|
14035
|
-
assetBaseUrl,
|
|
14035
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
|
|
14036
14036
|
assetManifest
|
|
14037
14037
|
}) {
|
|
14038
14038
|
const tilesProp = Array.isArray(_tilesPropRaw) ? _tilesPropRaw : [];
|
|
@@ -14791,6 +14791,10 @@ var init_boardEntity = __esm({
|
|
|
14791
14791
|
});
|
|
14792
14792
|
function BattleBoard({
|
|
14793
14793
|
entity,
|
|
14794
|
+
tiles: propTiles,
|
|
14795
|
+
units: propUnits,
|
|
14796
|
+
features: propFeatures,
|
|
14797
|
+
assetManifest: propAssetManifest,
|
|
14794
14798
|
scale = 0.45,
|
|
14795
14799
|
unitScale = 1,
|
|
14796
14800
|
header,
|
|
@@ -14816,11 +14820,11 @@ function BattleBoard({
|
|
|
14816
14820
|
className
|
|
14817
14821
|
}) {
|
|
14818
14822
|
const board = boardEntity(entity) ?? {};
|
|
14819
|
-
const tiles = Array.isArray(board.tiles) ? board.tiles : [];
|
|
14820
|
-
const features = Array.isArray(board.features) ? board.features : [];
|
|
14823
|
+
const tiles = propTiles ?? (Array.isArray(board.tiles) ? board.tiles : []);
|
|
14824
|
+
const features = propFeatures ?? (Array.isArray(board.features) ? board.features : []);
|
|
14821
14825
|
const boardWidth = num(board.boardWidth, 8);
|
|
14822
14826
|
const boardHeight = num(board.boardHeight, 6);
|
|
14823
|
-
const assetManifest = board.assetManifest;
|
|
14827
|
+
const assetManifest = propAssetManifest ?? board.assetManifest;
|
|
14824
14828
|
const backgroundImage = board.backgroundImage;
|
|
14825
14829
|
const units = rows(board.units);
|
|
14826
14830
|
const selectedUnitId = board.selectedUnitId ?? null;
|
|
@@ -14912,7 +14916,7 @@ function BattleBoard({
|
|
|
14912
14916
|
}, 16);
|
|
14913
14917
|
return () => clearInterval(interval);
|
|
14914
14918
|
}, []);
|
|
14915
|
-
const
|
|
14919
|
+
const derivedIsoUnits = useMemo(() => {
|
|
14916
14920
|
return units.filter((u) => unitHealth(u) > 0).map((unit) => {
|
|
14917
14921
|
const id = str(unit.id);
|
|
14918
14922
|
const pos = movingPositions.get(id) ?? unitPosition(unit);
|
|
@@ -14936,6 +14940,7 @@ function BattleBoard({
|
|
|
14936
14940
|
};
|
|
14937
14941
|
});
|
|
14938
14942
|
}, [units, movingPositions]);
|
|
14943
|
+
const isoUnits = propUnits ?? derivedIsoUnits;
|
|
14939
14944
|
const maxY = Math.max(...tiles.map((t2) => t2.y), 0);
|
|
14940
14945
|
const baseOffsetX = (maxY + 1) * (TILE_WIDTH * scale / 2);
|
|
14941
14946
|
const tileToScreen = useCallback(
|
|
@@ -15157,14 +15162,22 @@ function BattleTemplate({
|
|
|
15157
15162
|
entity,
|
|
15158
15163
|
scale = 0.45,
|
|
15159
15164
|
unitScale = 1,
|
|
15165
|
+
tiles,
|
|
15166
|
+
units,
|
|
15167
|
+
features,
|
|
15168
|
+
assetManifest,
|
|
15160
15169
|
className
|
|
15161
15170
|
}) {
|
|
15162
15171
|
const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
|
|
15163
|
-
if (!resolved) return null;
|
|
15172
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
15164
15173
|
return /* @__PURE__ */ jsx(
|
|
15165
15174
|
BattleBoard,
|
|
15166
15175
|
{
|
|
15167
15176
|
entity: resolved,
|
|
15177
|
+
tiles,
|
|
15178
|
+
units,
|
|
15179
|
+
features,
|
|
15180
|
+
assetManifest,
|
|
15168
15181
|
scale,
|
|
15169
15182
|
unitScale,
|
|
15170
15183
|
tileClickEvent: "TILE_CLICK",
|
|
@@ -21310,16 +21323,21 @@ function EmojiEffect({
|
|
|
21310
21323
|
}
|
|
21311
21324
|
);
|
|
21312
21325
|
}
|
|
21313
|
-
function CanvasEffect(
|
|
21326
|
+
function CanvasEffect({
|
|
21327
|
+
effectSpriteUrl = "https://almadar-kflow-assets.web.app/shared/effects/gas/gas00.png",
|
|
21328
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/effects/",
|
|
21329
|
+
...props
|
|
21330
|
+
}) {
|
|
21314
21331
|
const eventBus = useEventBus();
|
|
21315
|
-
const {
|
|
21332
|
+
const mergedProps = { effectSpriteUrl, assetBaseUrl, ...props };
|
|
21333
|
+
const { completeEvent, onComplete, ...rest } = mergedProps;
|
|
21316
21334
|
const handleComplete = useCallback(() => {
|
|
21317
21335
|
if (completeEvent) eventBus.emit(`UI:${completeEvent}`, {});
|
|
21318
21336
|
onComplete?.();
|
|
21319
21337
|
}, [completeEvent, eventBus, onComplete]);
|
|
21320
21338
|
const enhancedProps = { ...rest, onComplete: handleComplete };
|
|
21321
|
-
if (
|
|
21322
|
-
return /* @__PURE__ */ jsx(CanvasEffectEngine, { ...enhancedProps, assetManifest:
|
|
21339
|
+
if (rest.assetManifest) {
|
|
21340
|
+
return /* @__PURE__ */ jsx(CanvasEffectEngine, { ...enhancedProps, assetManifest: rest.assetManifest });
|
|
21323
21341
|
}
|
|
21324
21342
|
return /* @__PURE__ */ jsx(EmojiEffect, { ...enhancedProps });
|
|
21325
21343
|
}
|
|
@@ -22104,6 +22122,10 @@ var init_CaseStudyOrganism = __esm({
|
|
|
22104
22122
|
});
|
|
22105
22123
|
function CastleBoard({
|
|
22106
22124
|
entity,
|
|
22125
|
+
tiles: propTiles,
|
|
22126
|
+
units: propUnits,
|
|
22127
|
+
features: propFeatures,
|
|
22128
|
+
assetManifest: propAssetManifest,
|
|
22107
22129
|
scale = 0.45,
|
|
22108
22130
|
header,
|
|
22109
22131
|
sidePanel,
|
|
@@ -22119,10 +22141,10 @@ function CastleBoard({
|
|
|
22119
22141
|
}) {
|
|
22120
22142
|
const eventBus = useEventBus();
|
|
22121
22143
|
const resolved = boardEntity(entity);
|
|
22122
|
-
const tiles = Array.isArray(resolved?.tiles) ? resolved.tiles : [];
|
|
22123
|
-
const features = Array.isArray(resolved?.features) ? resolved.features : [];
|
|
22124
|
-
const units = Array.isArray(resolved?.units) ? resolved.units : [];
|
|
22125
|
-
const assetManifest = resolved?.assetManifest;
|
|
22144
|
+
const tiles = propTiles ?? (Array.isArray(resolved?.tiles) ? resolved.tiles : []);
|
|
22145
|
+
const features = propFeatures ?? (Array.isArray(resolved?.features) ? resolved.features : []);
|
|
22146
|
+
const units = propUnits ?? (Array.isArray(resolved?.units) ? resolved.units : []);
|
|
22147
|
+
const assetManifest = propAssetManifest ?? resolved?.assetManifest;
|
|
22126
22148
|
const backgroundImage = resolved?.backgroundImage;
|
|
22127
22149
|
const [hoveredTile, setHoveredTile] = useState(null);
|
|
22128
22150
|
const [selectedFeature, setSelectedFeature] = useState(null);
|
|
@@ -22225,14 +22247,22 @@ var init_CastleBoard = __esm({
|
|
|
22225
22247
|
function CastleTemplate({
|
|
22226
22248
|
entity,
|
|
22227
22249
|
scale = 0.45,
|
|
22250
|
+
tiles,
|
|
22251
|
+
units,
|
|
22252
|
+
features,
|
|
22253
|
+
assetManifest,
|
|
22228
22254
|
className
|
|
22229
22255
|
}) {
|
|
22230
22256
|
const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
|
|
22231
|
-
if (!resolved) return null;
|
|
22257
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
22232
22258
|
return /* @__PURE__ */ jsx(
|
|
22233
22259
|
CastleBoard,
|
|
22234
22260
|
{
|
|
22235
22261
|
entity: resolved,
|
|
22262
|
+
tiles,
|
|
22263
|
+
units,
|
|
22264
|
+
features,
|
|
22265
|
+
assetManifest,
|
|
22236
22266
|
scale,
|
|
22237
22267
|
featureClickEvent: "FEATURE_CLICK",
|
|
22238
22268
|
unitClickEvent: "UNIT_CLICK",
|
|
@@ -28865,8 +28895,8 @@ function GameCanvas2D({
|
|
|
28865
28895
|
tickEvent,
|
|
28866
28896
|
drawEvent,
|
|
28867
28897
|
fps = 60,
|
|
28868
|
-
backgroundImage,
|
|
28869
|
-
assetBaseUrl = "",
|
|
28898
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/resonators.jpeg",
|
|
28899
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
|
|
28870
28900
|
className
|
|
28871
28901
|
}) {
|
|
28872
28902
|
const canvasRef = React88.useRef(null);
|
|
@@ -28930,6 +28960,9 @@ function GameCanvas2D({
|
|
|
28930
28960
|
const bgImg = loadImage(backgroundImageRef.current);
|
|
28931
28961
|
if (bgImg) {
|
|
28932
28962
|
ctx.drawImage(bgImg, 0, 0, widthRef.current, heightRef.current);
|
|
28963
|
+
} else {
|
|
28964
|
+
ctx.fillStyle = "#0f1420";
|
|
28965
|
+
ctx.fillRect(0, 0, widthRef.current, heightRef.current);
|
|
28933
28966
|
}
|
|
28934
28967
|
}
|
|
28935
28968
|
onDrawRef.current?.(ctx, frame);
|
|
@@ -30074,10 +30107,10 @@ function PlatformerCanvas({
|
|
|
30074
30107
|
canvasHeight = 400,
|
|
30075
30108
|
followCamera = true,
|
|
30076
30109
|
bgColor,
|
|
30077
|
-
playerSprite,
|
|
30110
|
+
playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
|
|
30078
30111
|
tileSprites,
|
|
30079
|
-
backgroundImage,
|
|
30080
|
-
assetBaseUrl = "",
|
|
30112
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/court.png",
|
|
30113
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
|
|
30081
30114
|
leftEvent = "MOVE_LEFT",
|
|
30082
30115
|
rightEvent = "MOVE_RIGHT",
|
|
30083
30116
|
jumpEvent = "JUMP",
|
|
@@ -47895,7 +47928,14 @@ var init_useBattleState = __esm({
|
|
|
47895
47928
|
init_boardEntity();
|
|
47896
47929
|
}
|
|
47897
47930
|
});
|
|
47898
|
-
function UncontrolledBattleBoard({
|
|
47931
|
+
function UncontrolledBattleBoard({
|
|
47932
|
+
entity,
|
|
47933
|
+
tiles,
|
|
47934
|
+
units,
|
|
47935
|
+
features,
|
|
47936
|
+
assetManifest,
|
|
47937
|
+
...rest
|
|
47938
|
+
}) {
|
|
47899
47939
|
const resolved = boardEntity(entity);
|
|
47900
47940
|
const battleState = useBattleState(
|
|
47901
47941
|
rows(resolved?.initialUnits),
|
|
@@ -47915,19 +47955,23 @@ function UncontrolledBattleBoard({ entity, ...rest }) {
|
|
|
47915
47955
|
calculateDamage: rest.calculateDamage
|
|
47916
47956
|
}
|
|
47917
47957
|
);
|
|
47918
|
-
if (!resolved) return null;
|
|
47958
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
47919
47959
|
return /* @__PURE__ */ jsx(
|
|
47920
47960
|
BattleBoard,
|
|
47921
47961
|
{
|
|
47922
47962
|
...rest,
|
|
47923
|
-
|
|
47963
|
+
tiles,
|
|
47964
|
+
units,
|
|
47965
|
+
features,
|
|
47966
|
+
assetManifest,
|
|
47967
|
+
entity: resolved ? {
|
|
47924
47968
|
...resolved,
|
|
47925
47969
|
units: battleState.units,
|
|
47926
47970
|
phase: battleState.phase,
|
|
47927
47971
|
turn: battleState.turn,
|
|
47928
47972
|
gameResult: battleState.gameResult,
|
|
47929
47973
|
selectedUnitId: battleState.selectedUnitId
|
|
47930
|
-
}
|
|
47974
|
+
} : void 0
|
|
47931
47975
|
}
|
|
47932
47976
|
);
|
|
47933
47977
|
}
|
|
@@ -47956,6 +48000,10 @@ function defaultIsInRange(from, to, range) {
|
|
|
47956
48000
|
}
|
|
47957
48001
|
function WorldMapBoard({
|
|
47958
48002
|
entity,
|
|
48003
|
+
tiles: propTiles,
|
|
48004
|
+
units: propUnits,
|
|
48005
|
+
features: propFeatures,
|
|
48006
|
+
assetManifest: propAssetManifest,
|
|
47959
48007
|
isLoading,
|
|
47960
48008
|
scale = 0.4,
|
|
47961
48009
|
unitScale = 2.5,
|
|
@@ -47984,16 +48032,16 @@ function WorldMapBoard({
|
|
|
47984
48032
|
const resolved = boardEntity(entity);
|
|
47985
48033
|
const hexes = rows(resolved?.hexes);
|
|
47986
48034
|
const heroes = rows(resolved?.heroes);
|
|
47987
|
-
const features = Array.isArray(resolved?.features) ? resolved.features : [];
|
|
48035
|
+
const features = propFeatures ?? (Array.isArray(resolved?.features) ? resolved.features : []);
|
|
47988
48036
|
const selectedHeroId = resolved?.selectedHeroId ?? null;
|
|
47989
|
-
const assetManifest = resolved?.assetManifest;
|
|
48037
|
+
const assetManifest = propAssetManifest ?? resolved?.assetManifest;
|
|
47990
48038
|
const backgroundImage = resolved?.backgroundImage;
|
|
47991
48039
|
const [hoveredTile, setHoveredTile] = useState(null);
|
|
47992
48040
|
const selectedHero = useMemo(
|
|
47993
48041
|
() => heroes.find((h) => str(h.id) === selectedHeroId) ?? null,
|
|
47994
48042
|
[heroes, selectedHeroId]
|
|
47995
48043
|
);
|
|
47996
|
-
const
|
|
48044
|
+
const derivedTiles = useMemo(
|
|
47997
48045
|
() => hexes.map((hex) => ({
|
|
47998
48046
|
x: num(hex.x),
|
|
47999
48047
|
y: num(hex.y),
|
|
@@ -48002,8 +48050,9 @@ function WorldMapBoard({
|
|
|
48002
48050
|
})),
|
|
48003
48051
|
[hexes]
|
|
48004
48052
|
);
|
|
48053
|
+
const tiles = propTiles ?? derivedTiles;
|
|
48005
48054
|
const baseUnits = useMemo(
|
|
48006
|
-
() => heroes.map((hero) => ({
|
|
48055
|
+
() => propUnits ?? heroes.map((hero) => ({
|
|
48007
48056
|
id: str(hero.id),
|
|
48008
48057
|
position: heroPosition(hero),
|
|
48009
48058
|
name: str(hero.name),
|
|
@@ -48012,7 +48061,7 @@ function WorldMapBoard({
|
|
|
48012
48061
|
maxHealth: 100,
|
|
48013
48062
|
sprite: hero.sprite == null ? void 0 : str(hero.sprite)
|
|
48014
48063
|
})),
|
|
48015
|
-
[heroes]
|
|
48064
|
+
[heroes, propUnits]
|
|
48016
48065
|
);
|
|
48017
48066
|
const MOVE_SPEED_MS_PER_TILE = 300;
|
|
48018
48067
|
const movementAnimRef = useRef(null);
|
|
@@ -48222,12 +48271,20 @@ function WorldMapTemplate({
|
|
|
48222
48271
|
unitScale = 2.5,
|
|
48223
48272
|
diamondTopY,
|
|
48224
48273
|
allowMoveAllHeroes = false,
|
|
48274
|
+
tiles,
|
|
48275
|
+
units,
|
|
48276
|
+
features,
|
|
48277
|
+
assetManifest,
|
|
48225
48278
|
className
|
|
48226
48279
|
}) {
|
|
48227
48280
|
return /* @__PURE__ */ jsx(
|
|
48228
48281
|
WorldMapBoard,
|
|
48229
48282
|
{
|
|
48230
48283
|
entity,
|
|
48284
|
+
tiles,
|
|
48285
|
+
units,
|
|
48286
|
+
features,
|
|
48287
|
+
assetManifest,
|
|
48231
48288
|
scale,
|
|
48232
48289
|
unitScale,
|
|
48233
48290
|
diamondTopY,
|
|
@@ -49445,6 +49502,24 @@ function renderPatternProps(props, onDismiss) {
|
|
|
49445
49502
|
priority: 0
|
|
49446
49503
|
};
|
|
49447
49504
|
rendered[key] = /* @__PURE__ */ jsx(SlotContentRenderer, { content: childContent, onDismiss });
|
|
49505
|
+
} else if (Array.isArray(value)) {
|
|
49506
|
+
rendered[key] = value.map((item, i) => {
|
|
49507
|
+
const el = item;
|
|
49508
|
+
if (isPatternConfig(el)) {
|
|
49509
|
+
const nestedProps = {};
|
|
49510
|
+
for (const [k, v] of Object.entries(el)) {
|
|
49511
|
+
if (k !== "type") nestedProps[k] = v;
|
|
49512
|
+
}
|
|
49513
|
+
const childContent = {
|
|
49514
|
+
id: `prop-${key}-${i}`,
|
|
49515
|
+
pattern: el.type,
|
|
49516
|
+
props: nestedProps,
|
|
49517
|
+
priority: 0
|
|
49518
|
+
};
|
|
49519
|
+
return /* @__PURE__ */ jsx(SlotContentRenderer, { content: childContent, onDismiss }, i);
|
|
49520
|
+
}
|
|
49521
|
+
return substituteTraitRefsDeep(el, `prop:${key}[${i}]`);
|
|
49522
|
+
});
|
|
49448
49523
|
} else {
|
|
49449
49524
|
rendered[key] = substituteTraitRefsDeep(value, `prop:${key}`);
|
|
49450
49525
|
}
|