From 25c9abd427a2859fc9b6890b22476b4720cae964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 1 Sep 2022 11:38:17 +0200 Subject: [PATCH] Use BASE API utility MapObject class --- data.mv.db | Bin 36864 -> 45056 bytes .../demo/entity/MapObject.java | 131 ++---------------- 2 files changed, 15 insertions(+), 116 deletions(-) diff --git a/data.mv.db b/data.mv.db index fc1d0abcc25961b60d93d0056edddf6507e64396..e8e9d83da370d6bbf8541fdb192ba1848c08a542 100644 GIT binary patch literal 45056 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 pathExecutor = new PathExecutor<>(this); - private final String interactSound; - - protected boolean interacting = false; - - private Supplier> beforeAll; - private Supplier> before; - private Supplier> after; - private Supplier> afterAll; - - private CompletableFuture future; +public abstract class MapObject extends com.bartlomiejpluta.base.util.world.MapObject { + protected final Context context; + protected final DemoRunner runner; @Getter private final String name; - + private final String interactSound; public MapObject(@NonNull String id) { - this(DB.dao.map_object.find(id)); + this(DB.dao.object.find(id)); } - public MapObject(@NonNull DB.model.MapObjectModel template) { - super(ContextHolder.INSTANCE.getContext().createCharacter(A.charsets.get(template.getCharset()).uid)); - short frame = requireNonNull(template.getFrame()); + public MapObject(@NonNull DB.model.ObjectModel template) { + super(ContextHolder.INSTANCE.getContext().createCharacter(A.charsets.get(template.getCharset()).uid), template.getFrame()); + this.context = ContextHolder.INSTANCE.getContext(); + this.runner = DemoRunner.instance(); this.name = template.getName(); this.interactSound = A.sounds.get(template.getInteractSound()).uid; - - setBlocking(true); - disableAnimation(); - - setAnimationFrame(frame); - pathExecutor.setRepeat(1); - - pathExecutor.setPath(new CharacterPath() - .run(this::startInteraction) - .turn(Direction.LEFT, frame) - .wait(INTERVAL) - .turn(Direction.RIGHT, frame) - .wait(INTERVAL) - .turn(Direction.UP, frame) - .wait(INTERVAL) - .run(this::runInteraction) - .suspend(() -> future) - .wait(INTERVAL) - .turn(Direction.RIGHT, frame) - .wait(INTERVAL) - .turn(Direction.LEFT, frame) - .wait(INTERVAL) - .turn(Direction.DOWN, frame) - .run(this::finishInteraction) - .suspend(() -> future) - .wait(COOLDOWN) - .run(this::completeInteraction) - ); - } - - public MapObject beforeAll(@NonNull Supplier> action) { - this.beforeAll = action; - return this; - } - - public MapObject before(@NonNull Supplier> action) { - this.before = action; - return this; - } - - public MapObject after(@NonNull Supplier> action) { - this.after = action; - return this; - } - - public MapObject afterAll(@NonNull Supplier> action) { - this.afterAll = action; - return this; - } - - public void triggerInteraction() { - if (interacting) { - return; - } - - pathExecutor.reset(); - - if (beforeAll != null) { - beforeAll.get().thenRun(() -> interacting = true); - } else { - interacting = true; - } - } - - private void runInteraction() { - this.future = (before != null ? before.get() : completedFuture(null)) - .thenCompose(v -> interact()) - .thenCompose(v -> (after != null ? after.get() : completedFuture(null))); - } - - private void startInteraction() { - if (interactSound != null) { - context.playSound(interactSound); - } - } - - private void finishInteraction() { - this.future = afterAll != null ? afterAll.get() : completedFuture(null); - } - - private void completeInteraction() { - interacting = false; } @Override - public void update(float dt) { - if (interacting) { - pathExecutor.execute(getLayer(), dt); + protected @NonNull CompletableFuture onInteractionBegin() { + if (interactSound != null) { + context.playSound(interactSound); } - } - protected final void reset() { - setFaceDirection(Direction.DOWN); - pathExecutor.reset(); - interacting = false; + return completedFuture(null); } - - protected abstract CompletableFuture interact(); } \ No newline at end of file