Skip to content

Instantly share code, notes, and snippets.

View hobione2k's full-sized avatar

hobione hobione2k

View GitHub Profile
@hobione2k
hobione2k / Template.js
Last active April 29, 2024 19:44
ClusterScript Template
const logLvl = () => $.getStateCompat(Tg.this, "LOG_LEVEL", T.integer);
const pd = (n, l = 2) => {
return n.toString().padStart(l, "0");
};
const now = () => {
const d = new Date();
const time = `${pd(d.getHours())}:${pd(d.getMinutes())}:${pd(
d.getSeconds()
)}.${pd(d.getMilliseconds(), 3)}`;
return time;
@hobione2k
hobione2k / aim.js
Last active March 22, 2024 20:16
ClusterScript 特定方向に向ける (Z軸 +z方向を前とする)
const rad2Deg = (r) => (r * 180) / Math.PI;
const aimAt = (pos, target) => {
const dir = target.clone().sub(pos);
const angleY = rad2Deg(Math.atan2(dir.x, dir.z)); // Y軸回転
const d = new Vector2(dir.x, dir.z).length();
const angleX = -rad2Deg(Math.atan2(dir.y, d)); // X軸回転
return new Quaternion().setFromEulerAngles(new Vector3(angleX, angleY, 0));
};
@hobione2k
hobione2k / sendAll.js
Last active March 22, 2024 20:15
ClusterScript Itemにsendするやつ
const sendAll = (items, type, value) => {
if (items == null) return;
items = items.concat();
while (items.length > 0) { // 送信先があれば実行
const item = items.shift(); // 取り出す
try {
item.send(type, value);
} catch (e) {
items.unshift(item); // エラーになったら戻して次回に回す
return items;
@hobione2k
hobione2k / GetAllPlayer.js
Last active March 22, 2024 09:22
ClusterScript ワールドにいるユーザーを一括取得するやつ
const activePlayer = (players) =>
players.filter((p) => p != null && p.exists());
const getAllPlayer = () => {
const players = $.getPlayersNear($.getPosition(), Infinity);
return activePlayer(players);
}
@hobione2k
hobione2k / attachSubNodeToPlayer.js
Last active March 11, 2024 14:42
ClusterScript(Beta) SubNodeをプレイヤーにくっつけるサンプル
// インタラクトしたユーザーの頭にアイテムをくっつける
// ※アイテムスケールが1であること
$.onInteract((player) => {
$.state.targetPlayer = player;
});
const attachSubNodeToPlayer = (subNode, player, bone, offset) => {
const bonePos = player.getHumanoidBonePosition(bone);
const boneRot = player.getHumanoidBoneRotation(bone);
const globalPos = bonePos.add(offset.clone().applyQuaternion(boneRot));
@hobione2k
hobione2k / attachItemToPlayer.js
Last active October 15, 2023 13:50
ClusterScript Beta アイテムをプレイヤーにくっつける(Item直接)
// インタラクトしたユーザーの頭にアイテムをくっつける
$.onInteract((player) => {
$.state.targetPlayer = player;
});
const attachToPlayer = (player, bone, offset) => {
const bonePosition = player.getHumanoidBonePosition(bone);
const boneRotation = player.getHumanoidBoneRotation(bone);
const position = bonePosition.add(offset.clone().applyQuaternion(boneRotation));
$.setPosition(position);
@hobione2k
hobione2k / getOverlapsPlayer.js
Last active March 22, 2024 20:16
ClusterScript Beta Overlapプレイヤーを取得
const dedupPlayer = (players) =>
players.filter((p, i) => players.findIndex((p2) => p2.id == p.id) === i);
const activePlayer = (players) =>
players.filter((p) => p != null && p.exists());
const getOverlapsPlayer = () => {
// getOverlaps()から有効なプレイヤーだけ取得
const overlaps = $.getOverlaps();
const players = overlaps.map((o) => o.object.playerHandle);
@hobione2k
hobione2k / dogeza.js
Last active September 28, 2023 19:18
ClusterScipt Beta DOGEZA検出サンプル
// プレイヤー検出用コライダーにOverlap Detector Shapeコンポーネントを付けること
// アイテムの中心(原点)が床の高さであること
const dedupPlayer = (players) =>
players.filter((p, i) => players.findIndex((p2) => p2.id == p.id) === i); // 重複排除
$.onUpdate((deltaTime) => {
// プレイヤーを取得
const overlaps = $.getOverlaps();
const players = dedupPlayer(
@hobione2k
hobione2k / dedupPlayer.js
Created September 28, 2023 15:44
ClusterScript Beta playerHandle重複排除
const dedupPlayer = (players) =>
players.filter((p, i) => players.findIndex((p2) => p2.id == p.id) === i);
@hobione2k
hobione2k / subNodeCompare.js
Last active September 28, 2023 17:20
ClusterScript Beta subNode比較
const equalNode = (n1, n2) =>
n1.getGlobalPosition().equals(n2.getGlobalPosition()) &&
n1.getGlobalRotation().equals(n2.getGlobalRotation());