了解した。
いまの CameraOS の上に自然に乗る KaleidoscopeAPI(万華鏡レイヤ) を、あなたの OS 美学に合わせて「境界が明確で、儀式として美しい形」で設計してみるね。
🌌 KaleidoscopeAPI — 追加 API 設計案(初版)
CameraOS を汚さず、完全に別レイヤとして成立する構造にしてある。
CameraOS は「世界をどう切り取るか」
KaleidoscopeAPI は「世界をどう対称変換して見せるか」
という役割分担。
📁 ファイル構成案
ReplicatedStorage
└── KaleidoscopeAPI
├── KaleidoscopeConfig.lua
├── KaleidoscopeSeedWorld.lua
├── KaleidoscopePattern.lua
├── KaleidoscopeWorldFactory.lua
├── KaleidoscopeRenderer.lua
├── KaleidoscopeSerializer.lua
└── KaleidoscopeController.lua
🧩 各モジュールの役割
1. KaleidoscopeConfig.lua
万華鏡の「離散モデル(プリセット)」を定義する辞書。
- 対称数(3, 4, 6, 8…)
- ミラー角度
- 色パレット ID
- 密度
- 乱数の使い方(位置・回転・スケールの離散セット)
return {
Presets = {
Classic3 = {
symmetry = 3,
mirrorAngle = 60,
palette = "SoftPastel",
density = 0.5,
},
Crystal6 = {
symmetry = 6,
mirrorAngle = 30,
palette = "IceBlue",
density = 0.8,
},
}
}
2. KaleidoscopeSeedWorld.lua
プレイヤーが「三角形の中に置く種オブジェクト」を管理するミニ世界。
- 三角形の境界チェック
- 種オブジェクトの追加・削除
- 種のメタデータ(位置・回転・スケール・マテリアル)
local SeedWorld = {}
function SeedWorld.new(config) end
function SeedWorld:addSeed(instance) end
function SeedWorld:getSeeds() end
return SeedWorld
3. KaleidoscopePattern.lua
プリセット+乱数シードから「確定したパターン」を生成する。
presetIdrandomSeedresolvedSymmetryresolvedPaletteresolvedDensity
local Pattern = {}
function Pattern.fromPreset(presetId, randomSeed) end
return Pattern
4. KaleidoscopeWorldFactory.lua
SeedWorld と Pattern から「最終的な万華鏡世界」を生成する。
- 種オブジェクトを複製
- 回転・反射を適用
- 対称数に応じて配置
- CameraOS の TargetGroup として扱えるようにする
local Factory = {}
function Factory.generate(seedWorld, pattern)
-- returns KaleidoscopeWorld (Model or Folder)
end
return Factory
5. KaleidoscopeRenderer.lua
CameraOS の Frame / Shot / Page と接続するための橋渡し。
- KaleidoscopeWorld を CameraOS の Target に変換
- Frame に ViewportFrame として描画
local Renderer = {}
function Renderer.attachToFrame(frame, kaleidoscopeWorld, cameraConfig) end
return Renderer
6. KaleidoscopeSerializer.lua
保存・公開のためのデータ構造を扱う。
- SeedWorld の種データを JSON 化
- Pattern の presetId + randomSeed を保存
- 復元 API
local Serializer = {}
function Serializer.serialize(seedWorld, pattern) end
function Serializer.deserialize(data) end
return Serializer
7. KaleidoscopeController.lua
ゲーム側が使う「高レベル API」。
- SeedWorld の生成
- パターンのランダム化
- 万華鏡世界の生成
- CameraOS への接続
local Controller = {}
function Controller.createSeedWorld(config)
end
function Controller.randomizePattern(presetId)
end
function Controller.build(seedWorld, pattern)
-- returns KaleidoscopeWorld
end
function Controller.renderToFrame(frame, kaleidoscopeWorld, cameraConfig)
end
return Controller
🎮 ゲーム側からの利用イメージ
local KS = require(KaleidoscopeAPI.KaleidoscopeController)
local seedWorld = KS.createSeedWorld()
-- プレイヤーが三角形内にオブジェクトを置く
local pattern = KS.randomizePattern("Classic3")
local world = KS.build(seedWorld, pattern)
KS.renderToFrame(myFrame, world, {
fov = 70,
distance = 20,
})
あなたの CameraOS と完全に分離しつつ、
CameraOS の「Frame / Shot / Page」構造に自然に接続できるようにしてある。
✨ この API 設計の美点
-
レイヤ境界が明確
CameraOS は一切汚さず、KaleidoscopeAPI が独立した OS として成立。 -
儀式として美しい
SeedWorld → Pattern → World → Renderの流れが一貫している。 -
離散モデル(プリセット)を OS として扱える
プリセット+シードで完全再現可能。 -
保存・公開が自然にできる
Serializer が OS 的に正しい位置にいる。
この設計をベースに「最小実装」から始めるのが一番きれいだと思う。
必要なら、次は 各ファイルの最小コード(中身はダミー) を儀式として書き出すよ。