sui-game-sdk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -0
- package/dist/bin/cli.d.ts +2 -0
- package/dist/bin/cli.js +79 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +19 -0
- package/dist/session.d.ts +23 -0
- package/dist/session.js +47 -0
- package/dist/spawner.d.ts +19 -0
- package/dist/spawner.js +37 -0
- package/dist/sync.d.ts +20 -0
- package/dist/sync.js +55 -0
- package/package.json +46 -0
- package/starter/README.md +57 -0
- package/starter/client/index.ts +79 -0
- package/starter/move/Move.toml +9 -0
- package/starter/move/sources/hero.move +109 -0
- package/starter/scripts/deploy.ts +37 -0
- package/starters/godot/README.md +71 -0
- package/starters/godot/deploy.js +39 -0
- package/starters/godot/move/Move.toml +9 -0
- package/starters/godot/move/sources/hero.move +109 -0
- package/starters/godot/project.godot +29 -0
- package/starters/godot/scenes/main.tscn +22 -0
- package/starters/godot/scripts/game_manager.gd +14 -0
- package/starters/godot/scripts/player.gd +10 -0
- package/starters/godot/scripts/sui/hero_controller.gd +56 -0
- package/starters/godot/scripts/sui/sui_service.gd +62 -0
- package/starters/nextjs/.env.local.example +2 -0
- package/starters/nextjs/README.md +110 -0
- package/starters/nextjs/app/globals.css +3 -0
- package/starters/nextjs/app/layout.tsx +22 -0
- package/starters/nextjs/app/page.tsx +5 -0
- package/starters/nextjs/components/HeroGame.tsx +161 -0
- package/starters/nextjs/lib/sui-client.ts +22 -0
- package/starters/nextjs/move/Move.toml +9 -0
- package/starters/nextjs/move/sources/hero.move +109 -0
- package/starters/nextjs/next.config.js +4 -0
- package/starters/nextjs/package.json +30 -0
- package/starters/nextjs/postcss.config.js +6 -0
- package/starters/nextjs/scripts/deploy.ts +42 -0
- package/starters/nextjs/tailwind.config.js +12 -0
- package/starters/nextjs/tsconfig.json +39 -0
- package/starters/unity/Assets/Scenes/Main.unity +197 -0
- package/starters/unity/Assets/Scripts/Core/GameManager.cs +38 -0
- package/starters/unity/Assets/Scripts/Core/PlayerController.cs +37 -0
- package/starters/unity/Assets/Scripts/Sui/HeroManager.cs +99 -0
- package/starters/unity/Assets/Scripts/Sui/SuiManager.cs +94 -0
- package/starters/unity/README.md +72 -0
- package/starters/unity/deploy.js +39 -0
- package/starters/unity/move/Move.toml +9 -0
- package/starters/unity/move/sources/hero.move +109 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Metadata } from 'next'
|
|
2
|
+
import { Inter } from 'next/font/google'
|
|
3
|
+
import './globals.css'
|
|
4
|
+
|
|
5
|
+
const inter = Inter({ subsets: ['latin'] })
|
|
6
|
+
|
|
7
|
+
export const metadata: Metadata = {
|
|
8
|
+
title: 'Sui Quest - Next.js Game',
|
|
9
|
+
description: 'A blockchain RPG powered by sui-game-sdk',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default function RootLayout({
|
|
13
|
+
children,
|
|
14
|
+
}: {
|
|
15
|
+
children: React.ReactNode
|
|
16
|
+
}) {
|
|
17
|
+
return (
|
|
18
|
+
<html lang="en">
|
|
19
|
+
<body className={inter.className}>{children}</body>
|
|
20
|
+
</html>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { Transaction } from '@mysten/sui/transactions';
|
|
5
|
+
import { sessionManager, gameStateSync, PACKAGE_ID, MODULE, suiClient } from '@/lib/sui-client';
|
|
6
|
+
|
|
7
|
+
export default function HeroGame() {
|
|
8
|
+
const [sessionAddress, setSessionAddress] = useState<string>('');
|
|
9
|
+
const [heroId, setHeroId] = useState<string | null>(null);
|
|
10
|
+
const [events, setEvents] = useState<string[]>([]);
|
|
11
|
+
const [loading, setLoading] = useState(false);
|
|
12
|
+
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
// Initialize session
|
|
15
|
+
const address = sessionManager.sessionAddress;
|
|
16
|
+
setSessionAddress(address);
|
|
17
|
+
|
|
18
|
+
// Subscribe to game events using GameStateSync
|
|
19
|
+
gameStateSync.subscribe(`${PACKAGE_ID}::${MODULE}::AttackEvent`, (event) => {
|
|
20
|
+
const data = event.parsedJson as any;
|
|
21
|
+
setEvents(prev => [...prev, `⚔️ Hero dealt ${data.damage_dealt} damage!`]);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
gameStateSync.subscribe(`${PACKAGE_ID}::${MODULE}::LevelUpEvent`, (event) => {
|
|
25
|
+
const data = event.parsedJson as any;
|
|
26
|
+
setEvents(prev => [...prev, `🎉 LEVEL UP! New Level: ${data.new_level}`]);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Start polling for events
|
|
30
|
+
gameStateSync.startPolling(PACKAGE_ID);
|
|
31
|
+
|
|
32
|
+
// Check for existing hero
|
|
33
|
+
checkForHero(address);
|
|
34
|
+
|
|
35
|
+
return () => {
|
|
36
|
+
// Cleanup if needed
|
|
37
|
+
};
|
|
38
|
+
}, []);
|
|
39
|
+
|
|
40
|
+
const checkForHero = async (address: string) => {
|
|
41
|
+
try {
|
|
42
|
+
const heroes = await suiClient.getOwnedObjects({
|
|
43
|
+
owner: address,
|
|
44
|
+
options: { showType: true, showContent: true }
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const heroObj = heroes.data.find(d => d.data?.type === `${PACKAGE_ID}::${MODULE}::Hero`);
|
|
48
|
+
if (heroObj) {
|
|
49
|
+
setHeroId(heroObj.data?.objectId || null);
|
|
50
|
+
setEvents(prev => [...prev, `✅ Hero found: ${heroObj.data?.objectId}`]);
|
|
51
|
+
} else {
|
|
52
|
+
setEvents(prev => [...prev, '❌ No hero found. Mint one to start!']);
|
|
53
|
+
}
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error('Error checking for hero:', error);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const mintHero = async () => {
|
|
60
|
+
setLoading(true);
|
|
61
|
+
try {
|
|
62
|
+
// Note: In a real app, you'd need admin cap or open minting
|
|
63
|
+
setEvents(prev => [...prev, '🔨 Minting hero... (requires admin cap)']);
|
|
64
|
+
// This is a placeholder - actual minting requires proper setup
|
|
65
|
+
} catch (error) {
|
|
66
|
+
setEvents(prev => [...prev, `❌ Error: ${error}`]);
|
|
67
|
+
} finally {
|
|
68
|
+
setLoading(false);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const slayBoar = async () => {
|
|
73
|
+
if (!heroId) {
|
|
74
|
+
setEvents(prev => [...prev, '❌ No hero to fight with!']);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
setLoading(true);
|
|
79
|
+
try {
|
|
80
|
+
const tx = new Transaction();
|
|
81
|
+
tx.moveCall({
|
|
82
|
+
target: `${PACKAGE_ID}::${MODULE}::slay_boar`,
|
|
83
|
+
arguments: [tx.object(heroId)]
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const result = await sessionManager.executeSessionTx(tx);
|
|
87
|
+
setEvents(prev => [...prev, `✅ Boar slain! Tx: ${result.digest}`]);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
setEvents(prev => [...prev, `❌ Error: ${error}`]);
|
|
90
|
+
} finally {
|
|
91
|
+
setLoading(false);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
return (
|
|
96
|
+
<div className="min-h-screen bg-gradient-to-br from-purple-900 via-blue-900 to-black text-white p-8">
|
|
97
|
+
<div className="max-w-4xl mx-auto">
|
|
98
|
+
<h1 className="text-5xl font-bold mb-8 text-center bg-clip-text text-transparent bg-gradient-to-r from-purple-400 to-pink-600">
|
|
99
|
+
⚔️ Sui Quest
|
|
100
|
+
</h1>
|
|
101
|
+
|
|
102
|
+
<div className="bg-white/10 backdrop-blur-lg rounded-2xl p-6 mb-6 border border-white/20">
|
|
103
|
+
<h2 className="text-2xl font-semibold mb-4">Session Info</h2>
|
|
104
|
+
<p className="text-sm text-gray-300 mb-2">Session Address:</p>
|
|
105
|
+
<code className="block bg-black/30 p-3 rounded text-xs break-all">
|
|
106
|
+
{sessionAddress}
|
|
107
|
+
</code>
|
|
108
|
+
<p className="text-xs text-yellow-400 mt-2">
|
|
109
|
+
💡 Fund this address with Testnet SUI to play!
|
|
110
|
+
</p>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<div className="bg-white/10 backdrop-blur-lg rounded-2xl p-6 mb-6 border border-white/20">
|
|
114
|
+
<h2 className="text-2xl font-semibold mb-4">Hero Status</h2>
|
|
115
|
+
{heroId ? (
|
|
116
|
+
<div>
|
|
117
|
+
<p className="text-green-400 mb-2">✅ Hero Ready!</p>
|
|
118
|
+
<code className="block bg-black/30 p-3 rounded text-xs break-all">
|
|
119
|
+
{heroId}
|
|
120
|
+
</code>
|
|
121
|
+
</div>
|
|
122
|
+
) : (
|
|
123
|
+
<p className="text-gray-400">No hero found</p>
|
|
124
|
+
)}
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
<div className="flex gap-4 mb-6">
|
|
128
|
+
<button
|
|
129
|
+
onClick={mintHero}
|
|
130
|
+
disabled={loading}
|
|
131
|
+
className="flex-1 bg-gradient-to-r from-purple-600 to-pink-600 hover:from-purple-700 hover:to-pink-700 disabled:opacity-50 disabled:cursor-not-allowed px-6 py-4 rounded-xl font-semibold text-lg transition-all transform hover:scale-105"
|
|
132
|
+
>
|
|
133
|
+
🔨 Mint Hero
|
|
134
|
+
</button>
|
|
135
|
+
<button
|
|
136
|
+
onClick={slayBoar}
|
|
137
|
+
disabled={loading || !heroId}
|
|
138
|
+
className="flex-1 bg-gradient-to-r from-red-600 to-orange-600 hover:from-red-700 hover:to-orange-700 disabled:opacity-50 disabled:cursor-not-allowed px-6 py-4 rounded-xl font-semibold text-lg transition-all transform hover:scale-105"
|
|
139
|
+
>
|
|
140
|
+
⚔️ Slay Boar
|
|
141
|
+
</button>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<div className="bg-white/10 backdrop-blur-lg rounded-2xl p-6 border border-white/20">
|
|
145
|
+
<h2 className="text-2xl font-semibold mb-4">Event Log</h2>
|
|
146
|
+
<div className="space-y-2 max-h-64 overflow-y-auto">
|
|
147
|
+
{events.length === 0 ? (
|
|
148
|
+
<p className="text-gray-400 text-sm">No events yet...</p>
|
|
149
|
+
) : (
|
|
150
|
+
events.map((event, i) => (
|
|
151
|
+
<div key={i} className="bg-black/30 p-3 rounded text-sm">
|
|
152
|
+
{event}
|
|
153
|
+
</div>
|
|
154
|
+
))
|
|
155
|
+
)}
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
);
|
|
161
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SuiClient } from '@mysten/sui/client';
|
|
2
|
+
import { SessionManager, AssetSpawner, GameStateSync } from 'sui-game-sdk';
|
|
3
|
+
|
|
4
|
+
// Configuration
|
|
5
|
+
export const PACKAGE_ID = process.env.NEXT_PUBLIC_PACKAGE_ID || '0x_REPLACE_WITH_PACKAGE_ID';
|
|
6
|
+
export const MODULE = 'hero';
|
|
7
|
+
export const RPC_URL = 'https://fullnode.testnet.sui.io';
|
|
8
|
+
|
|
9
|
+
// Initialize Sui Client
|
|
10
|
+
export const suiClient = new SuiClient({ url: RPC_URL });
|
|
11
|
+
|
|
12
|
+
// Initialize SDK Components
|
|
13
|
+
export const sessionManager = new SessionManager(suiClient);
|
|
14
|
+
|
|
15
|
+
export const assetSpawner = new AssetSpawner(suiClient, {
|
|
16
|
+
packageId: PACKAGE_ID,
|
|
17
|
+
module: MODULE,
|
|
18
|
+
function: 'mint_hero',
|
|
19
|
+
adminCapId: process.env.NEXT_PUBLIC_ADMIN_CAP || '0x_ADMIN_CAP'
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export const gameStateSync = new GameStateSync(suiClient);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
module sui_quest::hero {
|
|
2
|
+
use sui::object::{Self, UID};
|
|
3
|
+
use sui::tx_context::{Self, TxContext};
|
|
4
|
+
use sui::transfer;
|
|
5
|
+
use sui::event;
|
|
6
|
+
|
|
7
|
+
// --- Structs ---
|
|
8
|
+
|
|
9
|
+
struct Hero has key, store {
|
|
10
|
+
id: UID,
|
|
11
|
+
name: vector<u8>,
|
|
12
|
+
level: u64,
|
|
13
|
+
experience: u64,
|
|
14
|
+
hp: u64,
|
|
15
|
+
strength: u64,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
struct GameAdmin has key {
|
|
19
|
+
id: UID,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// --- Events ---
|
|
23
|
+
|
|
24
|
+
struct HeroMinted has copy, drop {
|
|
25
|
+
id: address,
|
|
26
|
+
name: vector<u8>,
|
|
27
|
+
owner: address,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
struct AttackEvent has copy, drop {
|
|
31
|
+
hero_id: address,
|
|
32
|
+
damage_dealt: u64,
|
|
33
|
+
enemy_hp_remaining: u64, // simplified
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
struct LevelUpEvent has copy, drop {
|
|
37
|
+
hero_id: address,
|
|
38
|
+
new_level: u64,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// --- Initializer ---
|
|
42
|
+
|
|
43
|
+
fun init(ctx: &mut TxContext) {
|
|
44
|
+
let admin = GameAdmin { id: object::new(ctx) };
|
|
45
|
+
transfer::transfer(admin, tx_context::sender(ctx));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// --- Entry Functions ---
|
|
49
|
+
|
|
50
|
+
public entry fun mint_hero(
|
|
51
|
+
_admin: &GameAdmin, // Require admin to mint (simulate controlled spawning)
|
|
52
|
+
name: vector<u8>,
|
|
53
|
+
recipient: address,
|
|
54
|
+
ctx: &mut TxContext
|
|
55
|
+
) {
|
|
56
|
+
let id = object::new(ctx);
|
|
57
|
+
let hero_id = object::uid_to_address(&id);
|
|
58
|
+
|
|
59
|
+
let hero = Hero {
|
|
60
|
+
id,
|
|
61
|
+
name,
|
|
62
|
+
level: 1,
|
|
63
|
+
experience: 0,
|
|
64
|
+
hp: 100,
|
|
65
|
+
strength: 10,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
event::emit(HeroMinted {
|
|
69
|
+
id: hero_id,
|
|
70
|
+
name,
|
|
71
|
+
owner: recipient
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
transfer::public_transfer(hero, recipient);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public entry fun slay_boar(hero: &mut Hero, ctx: &mut TxContext) {
|
|
78
|
+
// Simulate combat logic
|
|
79
|
+
// In reality, you'd use on-chain randomness or a specific Monster object
|
|
80
|
+
|
|
81
|
+
// 1. Calculate Damage (Strength +/- random noise simulated)
|
|
82
|
+
let damage = hero.strength + 2;
|
|
83
|
+
|
|
84
|
+
// 2. Grant XP
|
|
85
|
+
hero.experience = hero.experience + 10;
|
|
86
|
+
|
|
87
|
+
// 3. Check Level Up
|
|
88
|
+
if (hero.experience >= 100) {
|
|
89
|
+
hero.level = hero.level + 1;
|
|
90
|
+
hero.experience = 0;
|
|
91
|
+
hero.strength = hero.strength + 5;
|
|
92
|
+
event::emit(LevelUpEvent {
|
|
93
|
+
hero_id: object::uid_to_address(&hero.id),
|
|
94
|
+
new_level: hero.level
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
event::emit(AttackEvent {
|
|
99
|
+
hero_id: object::uid_to_address(&hero.id),
|
|
100
|
+
damage_dealt: damage,
|
|
101
|
+
enemy_hp_remaining: 0
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// --- Accessors (View Functions) ---
|
|
106
|
+
public fun get_level(hero: &Hero): u64 {
|
|
107
|
+
hero.level
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sui-quest-nextjs",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "next dev",
|
|
8
|
+
"build": "next build",
|
|
9
|
+
"start": "next start",
|
|
10
|
+
"lint": "next lint",
|
|
11
|
+
"deploy": "ts-node --esm scripts/deploy.ts"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@mysten/sui": "^1.21.1",
|
|
15
|
+
"react": "^18",
|
|
16
|
+
"react-dom": "^18",
|
|
17
|
+
"next": "14.2.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"typescript": "^5",
|
|
21
|
+
"@types/node": "^20",
|
|
22
|
+
"@types/react": "^18",
|
|
23
|
+
"@types/react-dom": "^18",
|
|
24
|
+
"autoprefixer": "^10.0.1",
|
|
25
|
+
"postcss": "^8",
|
|
26
|
+
"tailwindcss": "^3.4.1",
|
|
27
|
+
"ts-node": "^10.9.2",
|
|
28
|
+
"sui-game-sdk": "^0.0.1"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = path.dirname(__filename);
|
|
7
|
+
|
|
8
|
+
async function main() {
|
|
9
|
+
const moveDir = path.resolve(__dirname, '../move');
|
|
10
|
+
console.log(`Deploying from ${moveDir}...`);
|
|
11
|
+
|
|
12
|
+
console.log('Building Move Package...');
|
|
13
|
+
try {
|
|
14
|
+
const output = execSync('sui client publish --gas-budget 100000000 --json', {
|
|
15
|
+
cwd: moveDir,
|
|
16
|
+
encoding: 'utf-8'
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const result = JSON.parse(output);
|
|
20
|
+
const packageId = result.objectChanges.find((c: any) => c.type === 'published')?.packageId;
|
|
21
|
+
const adminCap = result.objectChanges.find((c: any) => c.objectType?.includes('GameAdmin'))?.objectId;
|
|
22
|
+
|
|
23
|
+
if (!packageId) {
|
|
24
|
+
console.error('Could not find package ID in publish output.');
|
|
25
|
+
console.log(output);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
console.log('\nSUCCESS! Package Published.');
|
|
30
|
+
console.log('Package ID:', packageId);
|
|
31
|
+
if (adminCap) console.log('Admin Cap:', adminCap);
|
|
32
|
+
|
|
33
|
+
console.log('\nUpdate your .env.local file:');
|
|
34
|
+
console.log(`NEXT_PUBLIC_PACKAGE_ID=${packageId}`);
|
|
35
|
+
if (adminCap) console.log(`NEXT_PUBLIC_ADMIN_CAP=${adminCap}`);
|
|
36
|
+
} catch (e: any) {
|
|
37
|
+
console.error('Deployment failed:', e.message);
|
|
38
|
+
console.log('Ensure you have sufficient gas and the SUI CLI configured.');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
main();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"lib": [
|
|
4
|
+
"dom",
|
|
5
|
+
"dom.iterable",
|
|
6
|
+
"esnext"
|
|
7
|
+
],
|
|
8
|
+
"allowJs": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"strict": true,
|
|
11
|
+
"noEmit": true,
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"module": "esnext",
|
|
14
|
+
"moduleResolution": "bundler",
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"isolatedModules": true,
|
|
17
|
+
"jsx": "preserve",
|
|
18
|
+
"incremental": true,
|
|
19
|
+
"plugins": [
|
|
20
|
+
{
|
|
21
|
+
"name": "next"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"paths": {
|
|
25
|
+
"@/*": [
|
|
26
|
+
"./*"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"include": [
|
|
31
|
+
"next-env.d.ts",
|
|
32
|
+
"**/*.ts",
|
|
33
|
+
"**/*.tsx",
|
|
34
|
+
".next/types/**/*.ts"
|
|
35
|
+
],
|
|
36
|
+
"exclude": [
|
|
37
|
+
"node_modules"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
%YAML 1.1
|
|
2
|
+
%TAG !u! tag:unity3d.com,2011:
|
|
3
|
+
--- !u!29 &1
|
|
4
|
+
OcclusionCullingSettings:
|
|
5
|
+
m_ObjectHideFlags: 0
|
|
6
|
+
serializedVersion: 2
|
|
7
|
+
m_OcclusionBakeSettings:
|
|
8
|
+
smallestOccluder: 5
|
|
9
|
+
smallestHole: 0.25
|
|
10
|
+
backfaceThreshold: 100
|
|
11
|
+
m_SceneGUID: 00000000000000000000000000000000
|
|
12
|
+
m_OcclusionCullingData: {fileID: 0}
|
|
13
|
+
--- !u!104 &2
|
|
14
|
+
RenderSettings:
|
|
15
|
+
m_ObjectHideFlags: 0
|
|
16
|
+
serializedVersion: 9
|
|
17
|
+
m_Fog: 0
|
|
18
|
+
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
|
19
|
+
m_FogMode: 3
|
|
20
|
+
m_FogDensity: 0.01
|
|
21
|
+
m_LinearFogStart: 0
|
|
22
|
+
m_LinearFogEnd: 300
|
|
23
|
+
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
|
24
|
+
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
|
25
|
+
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
|
26
|
+
m_AmbientIntensity: 1
|
|
27
|
+
m_AmbientMode: 0
|
|
28
|
+
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
|
29
|
+
m_SkyboxMaterial: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
|
30
|
+
m_HaloStrength: 0.5
|
|
31
|
+
m_FlareStrength: 1
|
|
32
|
+
m_FlareFadeSpeed: 3
|
|
33
|
+
m_HaloTexture: {fileID: 0}
|
|
34
|
+
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
|
35
|
+
m_DefaultReflectionMode: 0
|
|
36
|
+
m_DefaultReflectionResolution: 128
|
|
37
|
+
m_ReflectionBounces: 1
|
|
38
|
+
m_ReflectionIntensity: 1
|
|
39
|
+
m_CustomReflection: {fileID: 0}
|
|
40
|
+
m_Sun: {fileID: 0}
|
|
41
|
+
m_IndirectSpecularColor: {r: 0.44657898, g: 0.49641335, b: 0.5748178, a: 1}
|
|
42
|
+
m_UseRadianceAmbientProbe: 0
|
|
43
|
+
--- !u!157 &3
|
|
44
|
+
LightmapSettings:
|
|
45
|
+
m_ObjectHideFlags: 0
|
|
46
|
+
serializedVersion: 12
|
|
47
|
+
m_GIWorkflowMode: 1
|
|
48
|
+
m_GISettings:
|
|
49
|
+
serializedVersion: 2
|
|
50
|
+
m_BounceScale: 1
|
|
51
|
+
m_IndirectOutputScale: 1
|
|
52
|
+
m_AlbedoBoost: 1
|
|
53
|
+
m_EnvironmentLightingMode: 0
|
|
54
|
+
m_EnableBakedLightmaps: 1
|
|
55
|
+
m_EnableRealtimeLightmaps: 0
|
|
56
|
+
m_LightmapEditorSettings:
|
|
57
|
+
serializedVersion: 12
|
|
58
|
+
m_Resolution: 2
|
|
59
|
+
m_BakeResolution: 40
|
|
60
|
+
m_AtlasSize: 1024
|
|
61
|
+
m_AO: 0
|
|
62
|
+
m_AOMaxDistance: 1
|
|
63
|
+
m_CompAOExponent: 1
|
|
64
|
+
m_CompAOExponentDirect: 0
|
|
65
|
+
m_ExtractAmbientOcclusion: 0
|
|
66
|
+
m_Padding: 2
|
|
67
|
+
m_LightmapParameters: {fileID: 0}
|
|
68
|
+
m_LightmapsBakeMode: 1
|
|
69
|
+
m_TextureCompression: 1
|
|
70
|
+
m_FinalGather: 0
|
|
71
|
+
m_FinalGatherRayCount: 256
|
|
72
|
+
m_ReflectionCompression: 2
|
|
73
|
+
m_MixedBakeMode: 2
|
|
74
|
+
m_BakeBackend: 1
|
|
75
|
+
m_PVRSampling: 1
|
|
76
|
+
m_PVRDirectSampleCount: 32
|
|
77
|
+
m_PVRSampleCount: 500
|
|
78
|
+
m_PVRBounces: 2
|
|
79
|
+
m_PVREnvironmentSampleCount: 500
|
|
80
|
+
m_PVREnvironmentReferencePointCount: 2048
|
|
81
|
+
m_PVRFilteringMode: 2
|
|
82
|
+
m_PVRDenoiserTypeDirect: 0
|
|
83
|
+
m_PVRDenoiserTypeIndirect: 0
|
|
84
|
+
m_PVRDenoiserTypeAO: 0
|
|
85
|
+
m_PVRFilterTypeDirect: 0
|
|
86
|
+
m_PVRFilterTypeIndirect: 0
|
|
87
|
+
m_PVRFilterTypeAO: 0
|
|
88
|
+
m_PVREnvironmentMIS: 0
|
|
89
|
+
m_PVRCulling: 1
|
|
90
|
+
m_PVRFilteringGaussRadiusDirect: 1
|
|
91
|
+
m_PVRFilteringGaussRadiusIndirect: 5
|
|
92
|
+
m_PVRFilteringGaussRadiusAO: 2
|
|
93
|
+
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
|
|
94
|
+
m_PVRFilteringAtrousPositionSigmaIndirect: 2
|
|
95
|
+
m_PVRFilteringAtrousPositionSigmaAO: 1
|
|
96
|
+
m_ExportTrainingData: 0
|
|
97
|
+
m_TrainingDataDestination: TrainingData
|
|
98
|
+
m_LightProbeSampleCountMultiplier: 4
|
|
99
|
+
m_LightingDataAsset: {fileID: 0}
|
|
100
|
+
m_UseShadowmask: 1
|
|
101
|
+
--- !u!196 &4
|
|
102
|
+
NavMeshSettings:
|
|
103
|
+
serializedVersion: 2
|
|
104
|
+
m_ObjectHideFlags: 0
|
|
105
|
+
m_BuildSettings:
|
|
106
|
+
serializedVersion: 2
|
|
107
|
+
agentTypeID: 0
|
|
108
|
+
agentRadius: 0.5
|
|
109
|
+
agentHeight: 2
|
|
110
|
+
agentSlope: 45
|
|
111
|
+
agentClimb: 0.4
|
|
112
|
+
ledgeDropHeight: 0
|
|
113
|
+
maxJumpAcrossDistance: 0
|
|
114
|
+
minRegionArea: 2
|
|
115
|
+
manualCellSize: 0
|
|
116
|
+
cellSize: 0.16666667
|
|
117
|
+
manualTileSize: 0
|
|
118
|
+
tileSize: 256
|
|
119
|
+
accuratePlacement: 0
|
|
120
|
+
debug:
|
|
121
|
+
m_Flags: 0
|
|
122
|
+
m_NavMeshData: {fileID: 0}
|
|
123
|
+
--- !u!1 &705507993
|
|
124
|
+
GameObject:
|
|
125
|
+
m_ObjectHideFlags: 0
|
|
126
|
+
m_CorrespondingSourceObject: {fileID: 0}
|
|
127
|
+
m_PrefabInstance: {fileID: 0}
|
|
128
|
+
m_PrefabAsset: {fileID: 0}
|
|
129
|
+
serializedVersion: 6
|
|
130
|
+
m_Component:
|
|
131
|
+
- component: {fileID: 705507995}
|
|
132
|
+
- component: {fileID: 705507994}
|
|
133
|
+
m_Layer: 0
|
|
134
|
+
m_Name: Main Camera
|
|
135
|
+
m_TagString: MainCamera
|
|
136
|
+
m_Icon: {fileID: 0}
|
|
137
|
+
m_NavMeshLayer: 0
|
|
138
|
+
m_StaticEditorFlags: 0
|
|
139
|
+
m_IsActive: 1
|
|
140
|
+
--- !u!20 &705507994
|
|
141
|
+
Camera:
|
|
142
|
+
m_ObjectHideFlags: 0
|
|
143
|
+
m_CorrespondingSourceObject: {fileID: 0}
|
|
144
|
+
m_PrefabInstance: {fileID: 0}
|
|
145
|
+
m_PrefabAsset: {fileID: 0}
|
|
146
|
+
m_GameObject: {fileID: 705507993}
|
|
147
|
+
m_Enabled: 1
|
|
148
|
+
serializedVersion: 2
|
|
149
|
+
m_ClearFlags: 1
|
|
150
|
+
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
|
|
151
|
+
m_projectionMatrixMode: 1
|
|
152
|
+
m_GateFitMode: 2
|
|
153
|
+
m_FOVAxisMode: 0
|
|
154
|
+
m_SensorSize: {x: 36, y: 24}
|
|
155
|
+
m_LensShift: {x: 0, y: 0}
|
|
156
|
+
m_FocalLength: 50
|
|
157
|
+
m_NormalizedViewPortRect:
|
|
158
|
+
serializedVersion: 2
|
|
159
|
+
x: 0
|
|
160
|
+
y: 0
|
|
161
|
+
width: 1
|
|
162
|
+
height: 1
|
|
163
|
+
near clip plane: 0.3
|
|
164
|
+
far clip plane: 1000
|
|
165
|
+
field of view: 60
|
|
166
|
+
orthographic: 0
|
|
167
|
+
orthographic size: 5
|
|
168
|
+
m_Depth: -1
|
|
169
|
+
m_CullingMask:
|
|
170
|
+
serializedVersion: 2
|
|
171
|
+
m_Bits: 4294967295
|
|
172
|
+
m_RenderingPath: -1
|
|
173
|
+
m_TargetTexture: {fileID: 0}
|
|
174
|
+
m_TargetDisplay: 0
|
|
175
|
+
m_TargetEye: 3
|
|
176
|
+
m_HDR: 1
|
|
177
|
+
m_AllowMSAA: 1
|
|
178
|
+
m_AllowDynamicResolution: 0
|
|
179
|
+
m_ForceIntoRT: 0
|
|
180
|
+
m_OcclusionCulling: 1
|
|
181
|
+
m_StereoConvergence: 10
|
|
182
|
+
m_StereoSeparation: 0.022
|
|
183
|
+
--- !u!4 &705507995
|
|
184
|
+
Transform:
|
|
185
|
+
m_ObjectHideFlags: 0
|
|
186
|
+
m_CorrespondingSourceObject: {fileID: 0}
|
|
187
|
+
m_PrefabInstance: {fileID: 0}
|
|
188
|
+
m_PrefabAsset: {fileID: 0}
|
|
189
|
+
m_GameObject: {fileID: 705507993}
|
|
190
|
+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
191
|
+
m_LocalPosition: {x: 0, y: 1, z: -10}
|
|
192
|
+
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
193
|
+
m_ConstrainProportionsScale: 0
|
|
194
|
+
m_Children: []
|
|
195
|
+
m_Father: {fileID: 0}
|
|
196
|
+
m_RootOrder: 0
|
|
197
|
+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|