Skip to content

Commit 7343344

Browse files
committed
#171 MovieClipへの変換処理を実装
1 parent ff50a30 commit 7343344

3 files changed

Lines changed: 43 additions & 28 deletions

File tree

src/js/menu/application/ConvertMovieClipModal/ConvertMovieClipModalUtil.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,25 @@ let $selectedElementId: string = "";
1717
*/
1818
let $validValue: boolean = false;
1919

20+
/**
21+
* @description アンカー位置の割合
22+
* Anchor position ratio
23+
*
24+
* @type {Record<string, [number, number]>}
25+
* @private
26+
*/
27+
export const $anchorFrac: Record<string, [number, number]> = {
28+
"top-left": [0, 0],
29+
"middle-left": [0.5, 0],
30+
"bottom-left": [1, 0],
31+
"top-center": [0, 0.5],
32+
"middle-center": [0.5, 0.5],
33+
"bottom-center": [1, 0.5],
34+
"top-right": [0, 1],
35+
"middle-right": [0.5, 1],
36+
"bottom-right": [1, 1]
37+
};
38+
2039
/**
2140
* @description ConvertMovieClipModalの選択した中心点のElement IDを取得
2241
* Get the selected center point Element ID of ConvertMovieClipModal

src/js/menu/application/ConvertMovieClipModal/service/ConvertMovieClipModalCalcPositionService.ts

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,10 @@
11
import type { Character } from "@/core/domain/model/Character";
22
import type { IPosition } from "@/interface/IPosition";
33
import type { IBounds } from "@/interface/IBounds";
4-
import { $getSelectedElementId } from "../ConvertMovieClipModalUtil";
5-
6-
/**
7-
* @description アンカー位置の割合
8-
* Anchor position ratio
9-
*
10-
* @type {Record<string, [number, number]>}
11-
* @private
12-
*/
13-
const $anchorFrac: Record<string, [number, number]> = {
14-
"top-left": [0, 0],
15-
"middle-left": [0.5, 0],
16-
"bottom-left": [1, 0],
17-
"top-center": [0, 0.5],
18-
"middle-center": [0.5, 0.5],
19-
"bottom-center": [1, 0.5],
20-
"top-right": [0, 1],
21-
"middle-right": [0.5, 1],
22-
"bottom-right": [1, 1]
23-
};
4+
import {
5+
$anchorFrac,
6+
$getSelectedElementId
7+
} from "../ConvertMovieClipModalUtil";
248

259
/**
2610
* @description ConvertMovieClipModalの選択した中心点に合わせてDisplayObjectの位置を計算

src/js/menu/application/ConvertMovieClipModal/usecase/ConvertMovieClipModalButtonPointerDownEventUseCase.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import { execute as convertMovieClipModalHideUseCase } from "./ConvertMovieClipM
88
import { execute as externalLibraryAddNewMovieClipUseCase } from "@/external/controller/application/ExternalLibrary/usecase/ExternalLibraryAddNewMovieClipUseCase";
99
import { execute as convertMovieClipModalCalcPositionService } from "../service/ConvertMovieClipModalCalcPositionService";
1010
import { execute as screenAreaCalcSelectedBoundsService } from "@/screen/application/ScreenArea/service/ScreenAreaCalcSelectedBoundsService";
11+
import {
12+
$anchorFrac,
13+
$getSelectedElementId
14+
} from "../ConvertMovieClipModalUtil";
1115

1216
/**
1317
* @description 指定の名前のMovieClipを作成して、選択中のDisplayObjectを配置
@@ -128,20 +132,28 @@ export const execute = async (event: PointerEvent): Promise<void> =>
128132
newCharacter.startFrame = startFrame;
129133
newCharacter.endFrame = endFrame;
130134

131-
// todo: xy position
132-
133135
const currentExternalLayer = new ExternalLayer(
134136
workspace,
135137
movieClip,
136138
layer
137139
);
138140

139-
await currentExternalLayer.addCharacter(new ExternalCharacter(
140-
workspace,
141-
movieClip,
142-
layer,
143-
newCharacter
144-
));
141+
const newExternalCharacter = await currentExternalLayer
142+
.addCharacter(new ExternalCharacter(
143+
workspace,
144+
movieClip,
145+
layer,
146+
newCharacter
147+
));
148+
149+
// 中心点に合わせて座標を移動
150+
const [ax, ay] = $anchorFrac[$getSelectedElementId() as keyof typeof $anchorFrac];
151+
await newExternalCharacter.setX(
152+
bounds.xMin + Math.abs(bounds.xMax - bounds.xMin) * ax
153+
);
154+
await newExternalCharacter.setY(
155+
bounds.yMin + Math.abs(bounds.yMax - bounds.yMin) * ay
156+
);
145157

146158
// モーダルを非表示にする
147159
convertMovieClipModalHideUseCase();

0 commit comments

Comments
 (0)