Commit 72a0436a authored by Chunchi Che's avatar Chunchi Che

rerange simpleDuel hands.ts

parent 5c23d243
...@@ -10,82 +10,105 @@ export default (hands: Card[], scene: BABYLON.Scene) => { ...@@ -10,82 +10,105 @@ export default (hands: Card[], scene: BABYLON.Scene) => {
handShape, handShape,
scene scene
); );
// 位置 // 位置&旋转
hand.position = new BABYLON.Vector3( setupHandTransform(hand, item);
item.transform.position?.x,
item.transform.position?.y,
item.transform.position?.z
);
hand.rotation = new BABYLON.Vector3(
item.transform.rotation?.x,
item.transform.rotation?.y,
item.transform.rotation?.z
);
// 材质 // 材质
const handMaterial = new BABYLON.StandardMaterial("handMaterial", scene); setupHandMaterial(hand, item, scene);
// 材质贴纸
handMaterial.diffuseTexture = new BABYLON.Texture(
`https://cdn02.moecube.com:444/images/ygopro-images-zh-CN/${item.meta.id}.jpg`,
scene
);
hand.material = handMaterial;
// 事件管理 // 事件管理
hand.actionManager = new BABYLON.ActionManager(scene); setupHandAction(hand, item, idx, scene);
// 监听点击事件
hand.actionManager.registerAction(
new BABYLON.ExecuteCodeAction(
BABYLON.ActionManager.OnPickTrigger,
(event) => {
console.log(`<Click>hand: ${idx}`, "card:", item, "event:", event);
}
)
);
// 监听`Hover`事件
hand.actionManager.registerAction(
new BABYLON.CombineAction(
{ trigger: BABYLON.ActionManager.OnPointerOverTrigger },
[
new BABYLON.SetValueAction(
{
trigger: BABYLON.ActionManager.OnPointerOverTrigger,
},
hand,
"scaling",
CONFIG.HandHoverScaling()
),
// TODO: 这里后续应该加上显示可操作按钮的处理
new BABYLON.ExecuteCodeAction(
BABYLON.ActionManager.OnPointerOverTrigger,
(event) => {
console.log(`<Hover>hand: ${idx}`, "event: ", event);
}
),
]
)
);
// 监听`Hover`离开事件
hand.actionManager.registerAction(
new BABYLON.CombineAction(
{ trigger: BABYLON.ActionManager.OnPointerOutTrigger },
[
new BABYLON.SetValueAction(
{
trigger: BABYLON.ActionManager.OnPointerOutTrigger,
},
hand,
"scaling",
CONFIG.HandHoverOutScaling()
),
// TODO: 这里后续应该加上禁用可操作按钮的处理
new BABYLON.ExecuteCodeAction(
BABYLON.ActionManager.OnPointerOutTrigger,
(event) => {
console.log(`<Hover Out>hand: ${idx}`, "event:", event);
}
),
]
)
);
}); });
}; };
function setupHandTransform(mesh: BABYLON.Mesh, state: Card) {
mesh.position = new BABYLON.Vector3(
state.transform.position?.x,
state.transform.position?.y,
state.transform.position?.z
);
mesh.rotation = new BABYLON.Vector3(
state.transform.rotation?.x,
state.transform.rotation?.y,
state.transform.rotation?.z
);
}
function setupHandMaterial(
mesh: BABYLON.Mesh,
state: Card,
scene: BABYLON.Scene
) {
const handMaterial = new BABYLON.StandardMaterial(
`handMaterial${state.meta.id}`,
scene
);
// 材质贴纸
handMaterial.diffuseTexture = new BABYLON.Texture(
`https://cdn02.moecube.com:444/images/ygopro-images-zh-CN/${state.meta.id}.jpg`,
scene
);
mesh.material = handMaterial;
}
function setupHandAction(
mesh: BABYLON.Mesh,
state: Card,
handIdx: number,
scene: BABYLON.Scene
) {
mesh.actionManager = new BABYLON.ActionManager(scene);
// 监听点击事件
mesh.actionManager.registerAction(
new BABYLON.ExecuteCodeAction(
BABYLON.ActionManager.OnPickTrigger,
(event) => {
console.log(`<Click>hand: ${handIdx}`, "card:", state, "event:", event);
}
)
);
// 监听`Hover`事件
mesh.actionManager.registerAction(
new BABYLON.CombineAction(
{ trigger: BABYLON.ActionManager.OnPointerOverTrigger },
[
new BABYLON.SetValueAction(
{
trigger: BABYLON.ActionManager.OnPointerOverTrigger,
},
mesh,
"scaling",
CONFIG.HandHoverScaling()
),
// TODO: 这里后续应该加上显示可操作按钮的处理
new BABYLON.ExecuteCodeAction(
BABYLON.ActionManager.OnPointerOverTrigger,
(event) => {
console.log(`<Hover>hand: ${handIdx}`, "event: ", event);
}
),
]
)
);
// 监听`Hover`离开事件
mesh.actionManager.registerAction(
new BABYLON.CombineAction(
{ trigger: BABYLON.ActionManager.OnPointerOutTrigger },
[
new BABYLON.SetValueAction(
{
trigger: BABYLON.ActionManager.OnPointerOutTrigger,
},
mesh,
"scaling",
CONFIG.HandHoverOutScaling()
),
// TODO: 这里后续应该加上禁用可操作按钮的处理
new BABYLON.ExecuteCodeAction(
BABYLON.ActionManager.OnPointerOutTrigger,
(event) => {
console.log(`<Hover Out>hand: ${handIdx}`, "event:", event);
}
),
]
)
);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment