From d8a8ef8f693135ce2ed907c4ac6d16dad55a90d4 Mon Sep 17 00:00:00 2001 From: teramotodaiki Date: Fri, 10 Mar 2023 18:25:13 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=81=95=E3=81=86=E3=83=9E=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=81=AB=E3=81=84=E3=82=8B=E3=82=AD=E3=83=A3=E3=83=A9?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=BC=E3=81=8C=E3=81=B6=E3=81=A4=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E3=81=8F=E3=82=8B=E3=83=90=E3=82=B0=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20(#184)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * プレイヤーと同じマップにいるオブジェクトだけ「つねに」を呼ぶ * プレイヤーと同じマップにいるオブジェクトだけ「じかんがすすんだとき」を呼ぶ * 別のマップにいるオブジェクトにはぶつからない * https://scrapbox.io/hackforplay-inc/別のマップにいるキャラクターにぶつかられるバグ --- src/hackforplay/object/object.ts | 10 ++++++++-- src/hackforplay/rule.ts | 9 ++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/hackforplay/object/object.ts b/src/hackforplay/object/object.ts index 3bebbf9c..e2537717 100644 --- a/src/hackforplay/object/object.ts +++ b/src/hackforplay/object/object.ts @@ -690,10 +690,16 @@ export default class RPGObject extends enchant.Sprite implements N.INumbers { nextMapY < 0 || nextMapY >= ty; // 画面外にいこうとしている + // 同じマップにいるオブジェクト + const currentMap = this.map; + const objectsInSameMap = RPGObject.collection.filter( + obj => obj.map === currentMap + ); + // プレイヤーだけは例外的に仲間のいるマスをすり抜けられる const mayCollideItems = this.isPlayer - ? objectsInDefaultMap().filter(item => this.family !== item.family) - : objectsInDefaultMap(); + ? objectsInSameMap.filter(item => this.family !== item.family) + : objectsInSameMap; // 歩く先にあるオブジェクト const hits = mayCollideItems.filter(obj => { diff --git a/src/hackforplay/rule.ts b/src/hackforplay/rule.ts index d1142d1b..6688683c 100644 --- a/src/hackforplay/rule.ts +++ b/src/hackforplay/rule.ts @@ -1,16 +1,17 @@ import { log } from '@hackforplay/log'; +import { objectsInDefaultMap } from './cache'; import { IDir } from './dir'; import { Direction } from './direction'; import { hasContract, isOpposite } from './family'; import { install } from './feeles'; import { getHack } from './get-hack'; import { emitGlobalsChangedIfNeeded } from './globals'; +import { loadMaps } from './load-maps'; import RPGObject from './object/object'; import { errorInEvent, logFromAsset } from './stdlog'; import { synonyms } from './synonyms/rule'; import { PropertyMissing, synonymizeClass } from './synonyms/synonymize'; import talk from './talk'; -import { loadMaps } from './load-maps'; interface IEvent { target: RPGObject; @@ -314,8 +315,7 @@ export class Rule { if (!Hack.isPlaying) return; // ゲームが終了した // つねに をコールする - // this._collections を使うべきか?(へんしんしたときちゃんと動くか?) - for (const object of Array.from(RPGObject.collection)) { + for (const object of objectsInDefaultMap()) { if (!this.enabledUpdate.get(object)) { continue; // まだ途中になっているものがある => スキップ } @@ -385,6 +385,9 @@ export class Rule { if (!listeners) return; for (const name of Object.keys(listeners)) { for (const item of this.getCollection(name)) { + const map = 'map' in Hack ? Hack.map : undefined; + if (item.map !== map) continue; // プレイヤーと同じマップにいるものだけが対象 + this.scheduleEventEmit({ eventName: 'じかんがすすんだとき', args: [item]