diff --git a/src/components/Exhibition/3d.tsx b/src/components/Exhibition/3d.tsx index a6d9f763..6fe6fb42 100644 --- a/src/components/Exhibition/3d.tsx +++ b/src/components/Exhibition/3d.tsx @@ -155,6 +155,10 @@ export const Exhibition3d: React.FC<{ (actions: string[]) => { actions.forEach((action) => { switch (action) { + case "open_okusuri_land": + window.open("https://okusuri.land", "_blank"); + return; + case "pancake": setPlayerAccessory("pancake"); return; diff --git a/src/data/cloud.ts b/src/data/cloud.ts index 816b90c2..d5dabf69 100644 --- a/src/data/cloud.ts +++ b/src/data/cloud.ts @@ -1,5 +1,13 @@ -import { MAID_SCENARIOS } from "./clouds/scenarios"; -import { ABOUT_THIS_WORLD } from "./common/scenarios"; +import { + CALMERY_CHAN_SCENARIOS, + FLOWER_SHEEP_SCENARIOS, + HITSUGI_SCENARIOS, + MAID_SCENARIOS, + NEMINKO_SCENARIOS, + NONEME_SCENARIOS, + PC_SCENARIOS, + WATER_SHEEP_SCENARIOS, +} from "./clouds/scenarios"; import { Area } from "~/types/exhibition"; const area: Area = { @@ -50,6 +58,48 @@ const area: Area = { }, objects: { characters: [ + { + id: "neminko", + name: "", + position: { + x: -11.25, + y: 6.1, + z: -6.5, + }, + rotation: { + x: 0, + y: -200, + z: 0, + }, + scale: { + x: 0.5, + y: 0.5, + z: 0.5, + }, + scenarios: NEMINKO_SCENARIOS, + url: "/objects/areas/cloud/neminko_sleeping.glb", + }, + { + id: "pc", + name: "", + position: { + x: -7, + y: 6.1, + z: 2.25, + }, + rotation: { + x: 0, + y: 0, + z: 0, + }, + scale: { + x: 1, + y: 1, + z: 1, + }, + scenarios: PC_SCENARIOS, + url: "/objects/areas/cloud/pc.glb", + }, { id: "noneme_sitting", name: "", @@ -64,12 +114,12 @@ const area: Area = { z: 0, }, scale: { - x: 0.25, - y: 0.25, - z: 0.25, + x: 0.22, + y: 0.22, + z: 0.22, }, - scenarios: [], - url: "/objects/characters/noneme_sitting.glb", + scenarios: NONEME_SCENARIOS, + url: "/objects/areas/cloud/noneme_sitting.glb", }, { id: "flower_sheep", @@ -89,31 +139,7 @@ const area: Area = { y: 0.2, z: 0.2, }, - scenarios: [ - { - branches: [ - { - message: "行く", - scenarios: [ - { - actions: ["move_to_meadow"], - message: "…", - }, - ], - }, - { - message: "止めとく", - scenarios: [ - { - message: "…", - }, - ], - }, - ], - name: null, - message: "どうやら草原に連れて行ってくれるようだ。", - }, - ], + scenarios: FLOWER_SHEEP_SCENARIOS, url: "/objects/characters/flower_sheep.glb", }, { @@ -134,36 +160,12 @@ const area: Area = { y: 0.2, z: 0.2, }, - scenarios: [ - { - branches: [ - { - message: "行く", - scenarios: [ - { - actions: ["move_to_sea"], - message: "…", - }, - ], - }, - { - message: "止めとく", - scenarios: [ - { - message: "…", - }, - ], - }, - ], - name: null, - message: "どうやら水中遺跡に連れて行ってくれるようだ。", - }, - ], + scenarios: WATER_SHEEP_SCENARIOS, url: "/objects/characters/water_sheep.glb", }, { - id: "ameri", - name: "あめり", + id: "calmery_chan", + name: "かるめりちゃん", position: { x: 15.05, y: 6.155, @@ -179,8 +181,8 @@ const area: Area = { y: 0.25, z: 0.25, }, - scenarios: [], - url: "/objects/characters/ameri.glb", + scenarios: CALMERY_CHAN_SCENARIOS, + url: "/objects/characters/calmery_chan.glb", }, { id: "maid", @@ -221,28 +223,7 @@ const area: Area = { y: 0.5, z: 0.5, }, - scenarios: [ - { - branches: [ - { - message: "好きなお菓子のはなし", - scenarios: [ - { - message: "…私はグミが好き。", - }, - { - message: "食感がグミグミしてて何だか気持ちいいから…。", - }, - ], - }, - { - message: "この世界について", - scenarios: ABOUT_THIS_WORLD, - }, - ], - message: "………ここは甘いにおいがする。", - }, - ], + scenarios: HITSUGI_SCENARIOS, url: "/objects/characters/hitsugi.glb", }, ], @@ -320,42 +301,6 @@ const area: Area = { }, url: "/objects/areas/cloud/clouds.glb", }, - { - position: { - x: 0, - y: 0, - z: 0, - }, - rotation: { - x: 0, - y: 0, - z: 0, - }, - scale: { - x: 1, - y: 1, - z: 1, - }, - url: "/objects/areas/cloud/neminko_sleeping.glb", - }, - { - position: { - x: 0, - y: 0, - z: 0, - }, - rotation: { - x: 0, - y: 0, - z: 0, - }, - scale: { - x: 1, - y: 1, - z: 1, - }, - url: "/objects/areas/cloud/pc.glb", - }, { position: { x: 0, diff --git a/src/data/clouds/scenarios.ts b/src/data/clouds/scenarios.ts index 607f18ac..1a25c2db 100644 --- a/src/data/clouds/scenarios.ts +++ b/src/data/clouds/scenarios.ts @@ -1,10 +1,94 @@ +import { ABOUT_THIS_WORLD } from "../common/scenarios"; import { Scenario } from "~/types/exhibition"; -// Maid +export const CALMERY_CHAN_SCENARIOS: Scenario[] = [ + { + animations: [["wave"], ["idle"]], + branches: [ + { + message: "ください", + scenarios: [ + { + message: "どうぞ!", + }, + { + message: "甘くてふわふわしていた。", + name: null, + }, + { + animations: [["wave"], ["idle"]], + message: "また来てね!", + name: "あめり", + }, + ], + }, + { + message: "首を横に振る", + scenarios: [ + { + animations: [["wave"], ["idle"]], + message: "また来てね!", + }, + ], + }, + ], + message: "こんにちは!雲から作ったわたあめはいかがですか~?", + name: "あめり", + }, +]; + +export const FLOWER_SHEEP_SCENARIOS: Scenario[] = [ + { + branches: [ + { + message: "行く", + scenarios: [ + { + actions: ["move_to_meadow"], + message: "…", + }, + ], + }, + { + message: "止めとく", + scenarios: [ + { + message: "…", + }, + ], + }, + ], + name: null, + message: "どうやら草原に連れて行ってくれるようだ。", + }, +]; + +export const HITSUGI_SCENARIOS: Scenario[] = [ + { + branches: [ + { + message: "好きなお菓子のはなし", + scenarios: [ + { + message: "…私はグミが好き。", + }, + { + message: "食感がグミグミしてて何だか気持ちいいから…。", + }, + ], + }, + { + message: "この世界について", + scenarios: ABOUT_THIS_WORLD, + }, + ], + message: "………ここは甘いにおいがする。", + name: "棺", + }, +]; export const MAID_SCENARIOS: Scenario[] = [ { - animations: [["blink", "meido_Standing"]], message: "はじめまして!あの…突然ですがちょっと料理を作りすぎてしまって…", name: "メイドさん", }, @@ -14,14 +98,12 @@ export const MAID_SCENARIOS: Scenario[] = [ message: "パンケーキがいい", scenarios: [ { + animations: [["pose"]], branches: [ { message: "食べる", scenarios: [ { - animations: [ - ["open mouth", "pose", "smile", "meido_Standing"], - ], message: "わぁ!ありがとうございます♪お口に合うといいのですが!", }, @@ -35,13 +117,13 @@ export const MAID_SCENARIOS: Scenario[] = [ message: "頭にのせておく", scenarios: [ { - animations: [["komaru", "pose", "meido_Standing"]], branches: [ { message: "乗せて!", scenarios: [ { actions: ["pancake"], + animations: [["idle"]], message: "…乗せましたよ!落とさないように気を付けてくださいね…?", }, @@ -71,14 +153,12 @@ export const MAID_SCENARIOS: Scenario[] = [ message: "目玉焼きがいい", scenarios: [ { + animations: [["pose"]], branches: [ { message: "食べる", scenarios: [ { - animations: [ - ["open mouth", "pose", "smile", "meido_Standing"], - ], message: "わぁ!ありがとうございます♪お口に合うといいのですが!", }, @@ -92,13 +172,13 @@ export const MAID_SCENARIOS: Scenario[] = [ message: "頭にのせておく", scenarios: [ { - animations: [["komaru", "pose", "meido_Standing"]], branches: [ { message: "乗せて!", scenarios: [ { actions: ["fried_egg"], + animations: [["idle"]], message: "…乗せましたよ!落とさないように気を付けてくださいね…?", }, @@ -128,3 +208,173 @@ export const MAID_SCENARIOS: Scenario[] = [ message: "パンケーキと目玉焼き…もしお腹が空いていれば、食べませんか…?", }, ]; + +export const NEMINKO_SCENARIOS: Scenario[] = [ + { + branches: [ + { + message: "この夢から覚めるには?", + scenarios: [ + { + animations: [["talk"]], + message: + "夢から覚めるコツ・・・?うーん・・・。自然と目が覚めるまで夢を楽しむことかな…♪", + }, + { + message: + "なんてね。いつもたべん子ちゃんからは手とかほっぺをつねってもらってるよ。", + }, + { + animations: [["sleep"]], + branches: [ + { + message: "この世界の出口はどこにあるの?", + scenarios: [ + { + animations: [["idle"]], + message: + "んー…ゴールっぽい場所ならここの奥の雲の先で見た気がするよ~。", + }, + ], + }, + { + message: "ほっぺつねってくれませんか……?", + scenarios: [ + { + animations: [["idle"]], + message: "しょうがないなぁ~。一回だけだよ?えい、ぐいー。", + }, + { + message: "…………………夢から覚める気配がない…", + name: null, + }, + { + message: "うーん。効果なかったみたいだねぇ。", + name: "ねみん子", + }, + { + animations: [["talk"]], + message: + "そういえば、ここから奥に進むとゴール的なものがあった気がするよ~。", + }, + { + animations: [["sleep"]], + message: + "私はもう少しここで寝ていたいから…じゃあおやすみ~♪", + }, + ], + }, + ], + message: "じゃあおやすみ…Zzz", + }, + ], + }, + { + message: "ねみん子ちゃんだ!", + scenarios: [ + { + animations: [["talk"]], + message: "え?なんで私の事知ってるの…?", + }, + { + message: + "授業中寝ててもテストで100点取れちゃうからそれで有名になっちゃったかなぁ?", + }, + { + message: "えへへ…サインなら書いてあげるよ…むにゃむにゃぁ", + }, + ], + }, + { + message: "あっ、すいません…。", + scenarios: [ + { + animations: [["sleep"]], + message: "ん……………Zzz", + }, + ], + }, + ], + message: "……………むにゃ?", + name: "ねみん子", + }, +]; + +export const NONEME_SCENARIOS: Scenario[] = [ + { + branches: [ + { + message: "どんな味がするの?", + scenarios: [ + { + message: "………味?…ふわふわしてる…。", + }, + ], + }, + { + message: "好きなお菓子のはなし", + scenarios: [ + { + message: "えっと……見た目が可愛いものかな…。写真映えするし…♪", + }, + ], + }, + ], + message: "……………♪", + name: "ノネメ", + }, +]; + +export const PC_SCENARIOS: Scenario[] = [ + { + branches: [ + { + message: "する", + scenarios: [ + { + message: "(何だか昔作ったサイトに似てるなぁ…?)", + }, + { + actions: ["open_okusuri_land"], + message: "...", + }, + ], + }, + { + message: "しない", + scenarios: [ + { + message: "...", + }, + ], + }, + ], + message: "おくすりランドに接続しますか?", + }, +]; + +export const WATER_SHEEP_SCENARIOS: Scenario[] = [ + { + branches: [ + { + message: "行く", + scenarios: [ + { + actions: ["move_to_sea"], + message: "…", + }, + ], + }, + { + message: "止めとく", + scenarios: [ + { + message: "…", + }, + ], + }, + ], + name: null, + message: "どうやら水中遺跡に連れて行ってくれるようだ。", + }, +];