From 28122c54a3c9b25b7ac9e139302284e7e83a8f58 Mon Sep 17 00:00:00 2001 From: Alexander Klingenbeck Date: Tue, 6 Jun 2023 22:55:45 +0200 Subject: [PATCH] Add editor --- examples/ts_game/resources/tilemap_packed.png | Bin 0 -> 5471 bytes examples/ts_game/src/editor.ts | 215 +++++++++++++----- examples/ts_game/src/entity.ts | 8 +- examples/ts_game/src/game.ts | 6 +- examples/ts_game/src/index.ts | 2 +- 5 files changed, 175 insertions(+), 56 deletions(-) create mode 100644 examples/ts_game/resources/tilemap_packed.png diff --git a/examples/ts_game/resources/tilemap_packed.png b/examples/ts_game/resources/tilemap_packed.png new file mode 100644 index 0000000000000000000000000000000000000000..67e255f5761f4a92dfd1da9b6c13aa32586ff28f GIT binary patch literal 5471 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 v@7sQX4!$k`f7jp3!N>vIgdU5`w literal 0 HcmV?d00001 diff --git a/examples/ts_game/src/editor.ts b/examples/ts_game/src/editor.ts index 8a87920..31e9109 100644 --- a/examples/ts_game/src/editor.ts +++ b/examples/ts_game/src/editor.ts @@ -1,13 +1,14 @@ -import { Behaviour, Builder, Creator, Entity, HasBoundingBox, HasMouseInteraction, HasPosition, HasSize, combine, hasDefault, hasDefaultFn, makeEntity, which, withBoundingBox, withComponent, withMouseInteraction, withPosition, withSize } from "./entity" +import { Behaviour, Builder, Creator, Entity, HasBehaviour, HasBoundingBox, HasMouseInteraction, HasPosition, HasSize, combine, hasDefault, hasDefaultFn, makeEntity, which, withBehaviour, withBoundingBox, withComponent, withMouseInteraction, withPosition, withSize } from "./entity" import { entityAdd, gameRun, gameSetClearColor } from "./game" +import { resourceUnload, textureLoad } from "./resource" import { HasText, withText } from "./text" const withGuiSize = withComponent(x => hasDefaultFn(x, 'size', () => new Vector2(100,20))) type UiControl = Entity & HasPosition & HasSize -const makeControl = combine(makeEntity, withPosition, withSize) +const makeControl = combine(makeEntity, withPosition, withGuiSize) -type Button = Entity & HasPosition & HasSize & HasMouseInteraction & HasText +type Button = UiControl & HasMouseInteraction & HasText const drawsButton: Behaviour