Compare commits
2 Commits
feature/js
...
94fed9a810
| Author | SHA1 | Date | |
|---|---|---|---|
| 94fed9a810 | |||
| f4174724c6 |
1
.gitignore
vendored
@@ -14,7 +14,6 @@
|
||||
*.pch
|
||||
*.sbr
|
||||
build/
|
||||
build_debug/
|
||||
Build/
|
||||
bin/
|
||||
Debug/
|
||||
|
||||
251
AGENTS.md
@@ -1,251 +0,0 @@
|
||||
# Code Modification Guidelines
|
||||
|
||||
## 1. Git Branch Protection
|
||||
|
||||
- Never modify code directly on the `main` branch.
|
||||
- Before editing, check the current branch:
|
||||
|
||||
```bash
|
||||
git branch --show-current
|
||||
````
|
||||
|
||||
* If the result is `main`, create or switch to a development branch first:
|
||||
|
||||
```bash
|
||||
git checkout -b feature/xxx
|
||||
```
|
||||
|
||||
* Do not bypass branch protection by:
|
||||
|
||||
* Committing directly to `main`.
|
||||
* Running code generation, formatting, or large refactors on `main`.
|
||||
* Rewriting or damaging `main` history.
|
||||
|
||||
---
|
||||
|
||||
## 2. Code Comments
|
||||
|
||||
* All new comments must be written in English.
|
||||
* Comments must be:
|
||||
|
||||
* Short and clear.
|
||||
* Explain the purpose, not repeat the code.
|
||||
* Avoid unnecessary details.
|
||||
|
||||
Recommended:
|
||||
|
||||
```cpp
|
||||
// AI-generated: Prevent stale handle access.
|
||||
```
|
||||
|
||||
Avoid:
|
||||
|
||||
```cpp
|
||||
// AI-generated: This checks if the handle is invalid because...
|
||||
```
|
||||
|
||||
* Important AI-added or modified logic should include:
|
||||
|
||||
```cpp
|
||||
// AI-generated
|
||||
```
|
||||
|
||||
* Do not add comments for trivial changes such as:
|
||||
|
||||
* One or two line logic fixes.
|
||||
* Spelling corrections.
|
||||
* Simple variable renames.
|
||||
|
||||
### 2.1 Do not write excessive or granular comments
|
||||
|
||||
AI must avoid sprinkling small explanatory comments throughout code.
|
||||
Specifically:
|
||||
|
||||
* **No line-by-line narration.** Do not add a comment above (or beside)
|
||||
every field, signal, slot, branch, or block just to restate what it is.
|
||||
If the name is self-explanatory, no comment is needed.
|
||||
* **No multi-part explanations on a single marker.** A line like
|
||||
`// AI-generated: abort the in-flight download; finished handler clears state.`
|
||||
is too much. Either drop it, or shorten to a single short clause
|
||||
(e.g. `// AI-generated: abort in-flight download.`).
|
||||
* **Prefer zero or one comment per file/section**, not many. A short
|
||||
header comment explaining the file's purpose is acceptable; dozens of
|
||||
inline labels are not.
|
||||
* **Do not comment obvious QML/C++ bindings, layout splits, or default
|
||||
values** (e.g. `// AI-generated: index 0 -> zh_CN, index 1 -> en.`).
|
||||
The code already says that.
|
||||
* **When in doubt, omit the comment.** A missing comment is fine; a
|
||||
redundant one is noise that future maintainers must clean up.
|
||||
|
||||
Rule of thumb: if removing the comment would not lose useful
|
||||
information, remove it.
|
||||
|
||||
---
|
||||
|
||||
## 3. Project Style
|
||||
|
||||
Follow the existing project style strictly:
|
||||
|
||||
* Naming conventions.
|
||||
* File organization.
|
||||
* Formatting rules.
|
||||
* Include order.
|
||||
* Existing architecture.
|
||||
|
||||
Do not:
|
||||
|
||||
* Introduce unrelated coding styles.
|
||||
* Add unnecessary design patterns.
|
||||
* Create duplicate systems.
|
||||
* Add abstractions without need.
|
||||
* Change module responsibilities.
|
||||
|
||||
---
|
||||
|
||||
## 4. Modification Scope
|
||||
|
||||
Only modify the minimum code required.
|
||||
|
||||
Do not:
|
||||
|
||||
* Format unrelated files.
|
||||
* Remove existing comments.
|
||||
* Rename large numbers of symbols.
|
||||
* Change public APIs.
|
||||
* Perform large refactors without confirmation.
|
||||
|
||||
If large changes are required, explain first:
|
||||
|
||||
1. Current problem.
|
||||
2. Required changes.
|
||||
3. Affected modules.
|
||||
4. Expected impact.
|
||||
|
||||
---
|
||||
|
||||
## 5. Build and Test
|
||||
|
||||
After modifications:
|
||||
|
||||
* Verify compilation.
|
||||
* Check for new warnings.
|
||||
* Ensure existing features still work.
|
||||
|
||||
Do not:
|
||||
|
||||
* Commit without verification.
|
||||
* Ignore compiler errors.
|
||||
* Hide problems with temporary hacks.
|
||||
|
||||
---
|
||||
|
||||
## 6. Compatibility
|
||||
|
||||
Consider:
|
||||
|
||||
* Existing callers.
|
||||
* API/ABI compatibility.
|
||||
* Serialization formats.
|
||||
* Network protocols.
|
||||
* Save data.
|
||||
* Threading impact.
|
||||
|
||||
Do not:
|
||||
|
||||
* Change network structures without compatibility handling.
|
||||
* Break old data formats.
|
||||
* Change public data layouts carelessly.
|
||||
|
||||
---
|
||||
|
||||
## 7. Multi-threading Safety
|
||||
|
||||
For multi-threaded code, check:
|
||||
|
||||
* Data races.
|
||||
* Object lifetime.
|
||||
* Lock contention.
|
||||
* Atomic correctness.
|
||||
* Cross-thread resource access.
|
||||
|
||||
Do not:
|
||||
|
||||
* Assume single-threaded execution.
|
||||
* Modify shared data without protection.
|
||||
* Add hidden locks that hurt performance.
|
||||
|
||||
---
|
||||
|
||||
## 8. Memory Safety
|
||||
|
||||
Consider:
|
||||
|
||||
* Ownership.
|
||||
* Lifetime.
|
||||
* RAII.
|
||||
* Memory leaks.
|
||||
* Dangling references.
|
||||
* Iterator invalidation.
|
||||
|
||||
Do not:
|
||||
|
||||
* Return references to local variables.
|
||||
* Store pointers to temporary objects.
|
||||
* Use uninitialized data.
|
||||
* Introduce undefined behavior.
|
||||
|
||||
---
|
||||
|
||||
## 9. Third-party Libraries
|
||||
|
||||
Before adding or changing dependencies:
|
||||
|
||||
Check:
|
||||
|
||||
* Existing project dependencies.
|
||||
* Build system impact.
|
||||
* Maintenance cost.
|
||||
|
||||
Do not:
|
||||
|
||||
* Add large libraries for simple features.
|
||||
* Duplicate existing library functionality.
|
||||
* Modify third-party source code.
|
||||
|
||||
---
|
||||
|
||||
## 10. AI Behavior Rules
|
||||
|
||||
AI-generated code must:
|
||||
|
||||
* Reuse existing code first.
|
||||
* Preserve current architecture.
|
||||
* Prefer simple solutions.
|
||||
* Minimize risk and code changes.
|
||||
|
||||
Do not:
|
||||
|
||||
* Guess requirements.
|
||||
* Add unrequested features.
|
||||
* Redesign architecture.
|
||||
* Add unnecessary abstraction layers.
|
||||
|
||||
Choose the implementation with:
|
||||
|
||||
> The smallest change, lowest risk, and best compatibility with existing code.
|
||||
|
||||
---
|
||||
|
||||
## 11. Pre-commit Checklist
|
||||
|
||||
Before committing:
|
||||
|
||||
* [ ] Not on `main`.
|
||||
* [ ] Changes match the requested task.
|
||||
* [ ] New comments are in English.
|
||||
* [ ] AI changes are marked when needed.
|
||||
* [ ] No unrelated formatting changes.
|
||||
* [ ] Build passes.
|
||||
* [ ] No obvious performance/security/thread issues.
|
||||
* [ ] No API, protocol, or data format breakage.
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"name": "air",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": true,
|
||||
"is_passable": true,
|
||||
"is_discard": true,
|
||||
"is_blend": false,
|
||||
"is_transitional": false,
|
||||
"is_gas": true,
|
||||
"roughness": 1.0
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "dirt",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": false,
|
||||
"is_passable": false,
|
||||
"is_discard": false,
|
||||
"is_blend": false,
|
||||
"is_transitional": true,
|
||||
"is_gas": false,
|
||||
"roughness": 1.0
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/dirt",
|
||||
"normal": "cubed:normals/blocks/dirt"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/dirt/break.ogg",
|
||||
"place": "cubed:sounds/blocks/dirt/place.ogg",
|
||||
"walk": "cubed:sounds/blocks/dirt/walk.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"name": "grass",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": true,
|
||||
"is_transparent": true,
|
||||
"is_passable": true,
|
||||
"is_discard": true,
|
||||
"is_blend": false,
|
||||
"is_transitional": false,
|
||||
"is_gas": false,
|
||||
"roughness": 0.9
|
||||
},
|
||||
"texture": {
|
||||
"type": "cross",
|
||||
"path": "cubed:textures/blocks/grass"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/grass/break.ogg",
|
||||
"place": "cubed:sounds/blocks/grass/place.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "grass_block",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": false,
|
||||
"is_passable": false,
|
||||
"is_discard": false,
|
||||
"is_blend": false,
|
||||
"is_transitional": true,
|
||||
"is_gas": false,
|
||||
"roughness": 0.9
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/grass_block",
|
||||
"normal": "cubed:normals/blocks/grass_block"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/grass_block/break.ogg",
|
||||
"place": "cubed:sounds/blocks/grass_block/place.ogg",
|
||||
"walk": "cubed:sounds/blocks/grass_block/walk.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"name": "leaf",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": true,
|
||||
"is_passable": false,
|
||||
"is_discard": true,
|
||||
"is_blend": false,
|
||||
"is_transitional": false,
|
||||
"is_gas": false,
|
||||
"roughness": 0.7
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/leaf"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/leaf/break.ogg",
|
||||
"place": "cubed:sounds/blocks/leaf/place.ogg",
|
||||
"walk": "cubed:sounds/blocks/leaf/walk.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "log",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": false,
|
||||
"is_passable": false,
|
||||
"is_discard": false,
|
||||
"is_blend": false,
|
||||
"is_transitional": false,
|
||||
"is_gas": false,
|
||||
"roughness": 0.7
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/log",
|
||||
"normal": "cubed:normals/blocks/log"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/log/break.ogg",
|
||||
"place": "cubed:sounds/blocks/log/place.ogg",
|
||||
"walk": "cubed:sounds/blocks/log/walk.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "sand",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": false,
|
||||
"is_passable": false,
|
||||
"is_discard": false,
|
||||
"is_blend": false,
|
||||
"is_transitional": true,
|
||||
"is_gas": false,
|
||||
"roughness": 0.8
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/sand",
|
||||
"normal": "cubed:normals/blocks/sand"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/sand/break.ogg",
|
||||
"place": "cubed:sounds/blocks/sand/place.ogg",
|
||||
"walk": "cubed:sounds/blocks/sand/walk.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "snowy_grass_block",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": false,
|
||||
"is_passable": false,
|
||||
"is_discard": false,
|
||||
"is_blend": false,
|
||||
"is_transitional": true,
|
||||
"is_gas": false,
|
||||
"roughness": 0.9
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/snowy_grass_block",
|
||||
"normal": "cubed:normals/blocks/snowy_grass_block"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/snowy_grass_block/break.ogg",
|
||||
"place": "cubed:sounds/blocks/snowy_grass_block/place.ogg",
|
||||
"walk": "cubed:sounds/blocks/snowy_grass_block/walk.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "stone",
|
||||
"properties": {
|
||||
"is_liquid": false,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": false,
|
||||
"is_passable": false,
|
||||
"is_discard": false,
|
||||
"is_blend": false,
|
||||
"is_transitional": true,
|
||||
"is_gas": false,
|
||||
"roughness": 0.75
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/stone",
|
||||
"normal": "cubed:normals/blocks/stone"
|
||||
},
|
||||
"sounds": {
|
||||
"break": "cubed:sounds/blocks/stone/break.ogg",
|
||||
"place": "cubed:sounds/blocks/stone/place.ogg",
|
||||
"walk": "cubed:sounds/blocks/stone/walk.ogg"
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"name": "water",
|
||||
"properties": {
|
||||
"is_liquid": true,
|
||||
"is_cross_plane": false,
|
||||
"is_transparent": true,
|
||||
"is_passable": true,
|
||||
"is_discard": false,
|
||||
"is_blend": true,
|
||||
"is_transitional": false,
|
||||
"is_gas": false,
|
||||
"roughness": 0.02
|
||||
},
|
||||
"texture": {
|
||||
"type": "cuboid",
|
||||
"path": "cubed:textures/blocks/water"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"name": "pig",
|
||||
"model": "cubed:models/creatures/pig/pig.glb",
|
||||
"animation": "cubed:models/creatures/pig/animation.json",
|
||||
"collision": "cubed:models/creatures/pig/collision.json"
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "player",
|
||||
"model": "cubed:models/creatures/player/player.glb",
|
||||
"collision": "cubed:models/creatures/player/collision.json"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "air",
|
||||
"type": "block",
|
||||
"block": "cubed:air",
|
||||
"texture": "cubed:textures/items/block/air.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "dirt",
|
||||
"type": "block",
|
||||
"block": "cubed:dirt",
|
||||
"texture": "cubed:textures/items/block/dirt.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "grass",
|
||||
"type": "block",
|
||||
"block": "cubed:grass",
|
||||
"texture": "cubed:textures/items/block/grass.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "grass_block",
|
||||
"type": "block",
|
||||
"block": "cubed:grass_block",
|
||||
"texture": "cubed:textures/items/block/grass_block.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "leaf",
|
||||
"type": "block",
|
||||
"block": "cubed:leaf",
|
||||
"texture": "cubed:textures/items/block/leaf.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "log",
|
||||
"type": "block",
|
||||
"block": "cubed:log",
|
||||
"texture": "cubed:textures/items/block/log.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "pig_spawn_egg",
|
||||
"type": "spawn_egg",
|
||||
"creature": "cubed:pig",
|
||||
"texture": "cubed:textures/items/spawn_egg/pig_spawn_egg.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "sand",
|
||||
"type": "block",
|
||||
"block": "cubed:sand",
|
||||
"texture": "cubed:textures/items/block/sand.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "snowy_grass_block",
|
||||
"type": "block",
|
||||
"block": "cubed:snowy_grass_block",
|
||||
"texture": "cubed:textures/items/block/snowy_grass_block.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "stone",
|
||||
"type": "block",
|
||||
"block": "cubed:stone",
|
||||
"texture": "cubed:textures/items/block/stone.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "water",
|
||||
"type": "block",
|
||||
"block": "cubed:water",
|
||||
"texture": "cubed:textures/items/block/water.png",
|
||||
"description": ""
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"walk": {
|
||||
"speed": 6.0,
|
||||
"amplitude": 25.0
|
||||
},
|
||||
"run": {
|
||||
"speed": 12.0,
|
||||
"amplitude": 40.0
|
||||
},
|
||||
"body_bob": 0.03,
|
||||
"head": {
|
||||
"node": "Head",
|
||||
"amplitude": 4.0
|
||||
},
|
||||
"legs": [
|
||||
{
|
||||
"node": "Foot_FL",
|
||||
"phase": 0.0
|
||||
},
|
||||
{
|
||||
"node": "Foot_FR",
|
||||
"phase": 3.14159
|
||||
},
|
||||
{
|
||||
"node": "Foot_HL",
|
||||
"phase": 3.14159
|
||||
},
|
||||
{
|
||||
"node": "Foot_HR",
|
||||
"phase": 0.0
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"boxes": [
|
||||
{
|
||||
"center": [
|
||||
0,
|
||||
0.78,
|
||||
0
|
||||
],
|
||||
"half": [
|
||||
0.53,
|
||||
0.78,
|
||||
0.406
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"boxes": [
|
||||
{
|
||||
"center": [
|
||||
0,
|
||||
0.9,
|
||||
0
|
||||
],
|
||||
"half": [
|
||||
0.3,
|
||||
0.9,
|
||||
0.3
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"blocks": {
|
||||
"air": 0,
|
||||
"grass_block": 1,
|
||||
"dirt": 2,
|
||||
"stone": 3,
|
||||
"sand": 4,
|
||||
"log": 5,
|
||||
"leaf": 6,
|
||||
"water": 7,
|
||||
"snowy_grass_block": 8,
|
||||
"grass": 9
|
||||
},
|
||||
"items": {
|
||||
"air": 0,
|
||||
"grass_block": 1,
|
||||
"dirt": 2,
|
||||
"stone": 3,
|
||||
"sand": 4,
|
||||
"log": 5,
|
||||
"leaf": 6,
|
||||
"water": 7,
|
||||
"snowy_grass_block": 8,
|
||||
"grass": 9,
|
||||
"pig_spawn_egg": 10
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 174 B |
12
assets/data/block/air.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 0
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = true
|
||||
is_gas = true
|
||||
is_liquid = false
|
||||
is_passable = true
|
||||
is_transitional = false
|
||||
is_transparent = true
|
||||
name = 'air'
|
||||
name_key = 'block.air'
|
||||
roughness = 1.0
|
||||
12
assets/data/block/dirt.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 2
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = false
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = false
|
||||
is_transitional = true
|
||||
is_transparent = false
|
||||
name = 'dirt'
|
||||
name_key = 'block.dirt'
|
||||
roughness = 1.0
|
||||
12
assets/data/block/grass.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 9
|
||||
is_blend = false
|
||||
is_cross_plane = true
|
||||
is_discard = true
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = true
|
||||
is_transitional = false
|
||||
is_transparent = true
|
||||
name = 'grass'
|
||||
name_key = 'block.grass'
|
||||
roughness = 0.90000000000000002
|
||||
12
assets/data/block/grass_block.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 1
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = false
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = false
|
||||
is_transitional = true
|
||||
is_transparent = false
|
||||
name = 'grass_block'
|
||||
name_key = 'block.grass_block'
|
||||
roughness = 0.90000000000000002
|
||||
12
assets/data/block/leaf.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 6
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = true
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = false
|
||||
is_transitional = false
|
||||
is_transparent = true
|
||||
name = 'leaf'
|
||||
name_key = 'block.leaf'
|
||||
roughness = 0.69999999999999996
|
||||
12
assets/data/block/log.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 5
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = false
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = false
|
||||
is_transitional = false
|
||||
is_transparent = false
|
||||
name = 'log'
|
||||
name_key = 'block.log'
|
||||
roughness = 0.69999999999999996
|
||||
12
assets/data/block/sand.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 4
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = false
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = false
|
||||
is_transitional = true
|
||||
is_transparent = false
|
||||
name = 'sand'
|
||||
name_key = 'block.sand'
|
||||
roughness = 0.80000000000000004
|
||||
12
assets/data/block/snowy_grass_block.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 8
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = false
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = false
|
||||
is_transitional = true
|
||||
is_transparent = false
|
||||
name = 'snowy_grass_block'
|
||||
name_key = 'block.snowy_grass_block'
|
||||
roughness = 0.90000000000000002
|
||||
12
assets/data/block/stone.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 3
|
||||
is_blend = false
|
||||
is_cross_plane = false
|
||||
is_discard = false
|
||||
is_gas = false
|
||||
is_liquid = false
|
||||
is_passable = false
|
||||
is_transitional = true
|
||||
is_transparent = false
|
||||
name = 'stone'
|
||||
name_key = 'block.stone'
|
||||
roughness = 0.75
|
||||
12
assets/data/block/template.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
name = "template"
|
||||
id = 0
|
||||
is_liquid = false
|
||||
is_gas = false
|
||||
is_passable = false
|
||||
is_cross_plane = false
|
||||
is_transparent = false
|
||||
is_discard = false
|
||||
is_blend = false
|
||||
is_transitional = false
|
||||
roughness = 1.0
|
||||
name_key = "block.template"
|
||||
12
assets/data/block/water.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
id = 7
|
||||
is_blend = true
|
||||
is_cross_plane = false
|
||||
is_discard = false
|
||||
is_gas = false
|
||||
is_liquid = true
|
||||
is_passable = true
|
||||
is_transitional = false
|
||||
is_transparent = true
|
||||
name = 'water'
|
||||
name_key = 'block.water'
|
||||
roughness = 0.02
|
||||
@@ -4,7 +4,6 @@
|
||||
"menu.main.join_game": "Join Game",
|
||||
"menu.main.credits": "Credits",
|
||||
"menu.main.quit": "Quit",
|
||||
"menu.screenshot": "Screenshots",
|
||||
"menu.main.player_name": "Player: {name}",
|
||||
"menu.main.cubed_version": "Cubed: {version}",
|
||||
"menu.pause.pause_menu": "Pause Menu",
|
||||
@@ -37,20 +36,14 @@
|
||||
"joingame.server_ip": "Server Ip",
|
||||
"joingame.join_world": "Join World",
|
||||
"error.disable_voice": "Server Disable Voice Chat",
|
||||
"item.cubed.air.name": "air",
|
||||
"item.cubed.dirt.name": "dirt",
|
||||
"item.cubed.grass_block.name": "grass block",
|
||||
"item.cubed.grass.name": "grass",
|
||||
"item.cubed.leaf.name": "leaf",
|
||||
"item.cubed.log.name": "log",
|
||||
"item.cubed.sand.name": "sand",
|
||||
"item.cubed.snowy_grass_block.name": "snowy grass block",
|
||||
"item.cubed.stone.name": "stone",
|
||||
"item.cubed.water.name": "water",
|
||||
"item.cubed.pig_spawn_egg.name": "pig spawn egg",
|
||||
"screenshot.no_screenshot": "No Screenshot",
|
||||
"button.show_in_file_manager": "Show In File Manager",
|
||||
"file.sort_type": "File Sort Type: {type}",
|
||||
"file.newest_first": "Newest First",
|
||||
"file.oldest_first": "Oldest First"
|
||||
"block.air": "air",
|
||||
"block.dirt": "dirt",
|
||||
"block.grass_block": "grass block",
|
||||
"block.grass": "grass",
|
||||
"block.leaf": "leaf",
|
||||
"block.log": "log",
|
||||
"block.sand": "sand",
|
||||
"block.snowy_grass_block": "snowy grass block",
|
||||
"block.stone": "stone",
|
||||
"block.water": "water"
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
"menu.main.join_game": "加入游戏",
|
||||
"menu.main.credits": "制作人员",
|
||||
"menu.main.quit": "退出",
|
||||
"menu.screenshot": "屏幕截图",
|
||||
"menu.main.player_name": "玩家:{name}",
|
||||
"menu.main.cubed_version": "Cubed:{version}",
|
||||
"menu.pause.pause_menu": "暂停菜单",
|
||||
@@ -37,20 +36,14 @@
|
||||
"joingame.server_ip": "服务器IP",
|
||||
"joingame.join_world": "加入世界",
|
||||
"error.disable_voice": "服务器已禁用语音聊天",
|
||||
"item.cubed.air.name": "空气",
|
||||
"item.cubed.dirt.name": "泥土",
|
||||
"item.cubed.grass_block.name": "草方块",
|
||||
"item.cubed.grass.name": "草",
|
||||
"item.cubed.leaf.name": "树叶",
|
||||
"item.cubed.log.name": "原木",
|
||||
"item.cubed.sand.name": "沙子",
|
||||
"item.cubed.snowy_grass_block.name": "覆雪草方块",
|
||||
"item.cubed.stone.name": "石头",
|
||||
"item.cubed.water.name": "水",
|
||||
"item.cubed.pig_spawn_egg.name": "猪猪刷怪蛋",
|
||||
"screenshot.no_screenshot": "没有截图",
|
||||
"button.show_in_file_manager": "在文件管理器中显示",
|
||||
"file.sort_type": "文件排序方式:{type}",
|
||||
"file.newest_first": "最新在前",
|
||||
"file.oldest_first": "最旧在前"
|
||||
"block.air": "空气",
|
||||
"block.dirt": "泥土",
|
||||
"block.grass_block": "草方块",
|
||||
"block.grass": "草",
|
||||
"block.leaf": "树叶",
|
||||
"block.log": "原木",
|
||||
"block.sand": "沙子",
|
||||
"block.snowy_grass_block": "覆雪草方块",
|
||||
"block.stone": "石头",
|
||||
"block.water": "水"
|
||||
}
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 955 B After Width: | Height: | Size: 955 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 955 B After Width: | Height: | Size: 955 B |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -1,13 +0,0 @@
|
||||
#version 460
|
||||
|
||||
layout (location = 0) in vec3 pos;
|
||||
layout (location = 1) in vec2 texCoord;
|
||||
layout (location = 3) in mat4 modelMatrix;
|
||||
uniform mat4 lightSpaceMatrix;
|
||||
|
||||
out vec2 tc;
|
||||
|
||||
void main() {
|
||||
tc = texCoord;
|
||||
gl_Position = lightSpaceMatrix * modelMatrix * vec4(pos, 1.0);
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
#version 460
|
||||
|
||||
layout (location = 0) in vec3 pos;
|
||||
layout (location = 1) in vec2 texCoord;
|
||||
|
||||
uniform mat4 lightSpaceMatrix;
|
||||
uniform mat4 modelMatrix;
|
||||
|
||||
out vec2 tc;
|
||||
|
||||
void main() {
|
||||
tc = texCoord;
|
||||
gl_Position = lightSpaceMatrix * modelMatrix * vec4(pos, 1.0);
|
||||
}
|
||||
@@ -7,6 +7,7 @@ uniform mat4 lightSpaceMatrix;
|
||||
uniform mat4 modelMatrix;
|
||||
|
||||
out vec2 tc;
|
||||
flat out int tex_layer;
|
||||
|
||||
void main() {
|
||||
tc = texCoord;
|
||||
@@ -3,45 +3,13 @@
|
||||
in vec2 tc;
|
||||
in vec3 normal;
|
||||
in vec3 vert_pos;
|
||||
in vec4 FragPosLightSpace;
|
||||
|
||||
out vec4 color;
|
||||
|
||||
layout (binding = 0) uniform sampler2D shadowMap;
|
||||
layout (binding = 1) uniform sampler2D samp;
|
||||
layout (binding = 0) uniform sampler2D samp;
|
||||
|
||||
uniform float ambientStrength;
|
||||
uniform vec3 sunlightColor;
|
||||
uniform vec3 ambientColor;
|
||||
uniform vec3 sunlightDir;
|
||||
uniform bool shader_on;
|
||||
uniform int shadowMode;
|
||||
uniform float lightSizeUV;
|
||||
uniform float minRadius;
|
||||
uniform float maxRadius;
|
||||
|
||||
#include "shadow.glsl"
|
||||
|
||||
void main() {
|
||||
vec4 objectColor = texture(samp, tc);
|
||||
color = texture(samp, tc);
|
||||
|
||||
if (!shader_on) {
|
||||
color = objectColor;
|
||||
return;
|
||||
}
|
||||
|
||||
vec3 lightDir = normalize(-sunlightDir);
|
||||
|
||||
vec3 norm = normalize(normal);
|
||||
|
||||
vec3 ambient = ambientStrength * ambientColor;
|
||||
|
||||
float diff = max(dot(norm, lightDir), 0.0);
|
||||
|
||||
vec3 diffuse = diff * sunlightColor;
|
||||
|
||||
float shadow = ShadowCalculation(FragPosLightSpace, norm, lightDir);
|
||||
//float shadow = 0.0;
|
||||
//color = vec4(vec3(shadow),1);
|
||||
//color = vec4(vec3(diff),1);
|
||||
color = vec4((ambient + (1.0 - shadow) * (diffuse)) * objectColor.rgb, objectColor.a);
|
||||
}
|
||||
|
||||
@@ -6,21 +6,17 @@ layout (location = 2) in vec3 aNormal;
|
||||
|
||||
uniform mat4 mv_matrix;
|
||||
uniform mat4 proj_matrix;
|
||||
uniform mat4 norm_matrix;
|
||||
uniform mat4 lightSpaceMatrix;
|
||||
uniform mat4 modelMatrix;
|
||||
out vec4 FragPosLightSpace;
|
||||
|
||||
out vec3 normal;
|
||||
out vec2 tc;
|
||||
out vec3 vert_pos;
|
||||
|
||||
|
||||
void main() {
|
||||
vec4 worldPos = modelMatrix * vec4(pos, 1.0);
|
||||
FragPosLightSpace = lightSpaceMatrix * worldPos;
|
||||
//vec4 worldPos = modelMatrix * vec4(pos, 1.0);
|
||||
vec4 viewPos = mv_matrix * vec4(pos, 1.0);
|
||||
tc = texCoord;
|
||||
vert_pos = pos;
|
||||
normal = normalize(mat3(norm_matrix) * aNormal);
|
||||
//normal = normalize(mat3(norm_matrix) * aNormal);
|
||||
gl_Position = proj_matrix * viewPos;
|
||||
}
|
||||
47
assets/shaders/player_f_shader.glsl
Normal file
@@ -0,0 +1,47 @@
|
||||
#version 460
|
||||
|
||||
in vec2 tc;
|
||||
in vec3 normal;
|
||||
in vec3 vert_pos;
|
||||
in vec4 FragPosLightSpace;
|
||||
out vec4 color;
|
||||
|
||||
layout (binding = 0) uniform sampler2D shadowMap;
|
||||
layout (binding = 1) uniform sampler2D samp;
|
||||
|
||||
uniform float ambientStrength;
|
||||
uniform vec3 sunlightColor;
|
||||
uniform vec3 ambientColor;
|
||||
uniform vec3 sunlightDir;
|
||||
uniform bool shader_on;
|
||||
uniform int shadowMode;
|
||||
uniform float lightSizeUV;
|
||||
uniform float minRadius;
|
||||
uniform float maxRadius;
|
||||
|
||||
#include "shadow.glsl"
|
||||
|
||||
void main() {
|
||||
vec4 objectColor = texture(samp, tc);
|
||||
|
||||
if (!shader_on) {
|
||||
color = objectColor;
|
||||
return;
|
||||
}
|
||||
|
||||
vec3 lightDir = normalize(-sunlightDir);
|
||||
|
||||
vec3 norm = normalize(normal);
|
||||
|
||||
vec3 ambient = ambientStrength * ambientColor;
|
||||
|
||||
float diff = max(dot(norm, lightDir), 0.0);
|
||||
|
||||
vec3 diffuse = diff * sunlightColor;
|
||||
|
||||
float shadow = ShadowCalculation(FragPosLightSpace, norm, lightDir);
|
||||
//float shadow = 0.0;
|
||||
//color = vec4(vec3(shadow),1);
|
||||
//color = vec4(vec3(diff),1);
|
||||
color = vec4((ambient + (1.0 - shadow) * (diffuse)) * objectColor.rgb, objectColor.a);
|
||||
}
|
||||
@@ -3,10 +3,13 @@
|
||||
layout (location = 0) in vec3 pos;
|
||||
layout (location = 1) in vec2 texCoord;
|
||||
layout (location = 2) in vec3 aNormal;
|
||||
layout (location = 3) in mat4 modelMatrix;
|
||||
uniform mat4 view_matrix;
|
||||
layout (location = 3) in vec3 aTangent;
|
||||
|
||||
uniform mat4 mv_matrix;
|
||||
uniform mat4 proj_matrix;
|
||||
uniform mat4 norm_matrix;
|
||||
uniform mat4 lightSpaceMatrix;
|
||||
uniform mat4 modelMatrix;
|
||||
out vec4 FragPosLightSpace;
|
||||
out vec3 normal;
|
||||
out vec2 tc;
|
||||
@@ -16,8 +19,6 @@ out vec3 vert_pos;
|
||||
void main() {
|
||||
vec4 worldPos = modelMatrix * vec4(pos, 1.0);
|
||||
FragPosLightSpace = lightSpaceMatrix * worldPos;
|
||||
mat4 mv_matrix= view_matrix * modelMatrix;
|
||||
mat4 norm_matrix = transpose(inverse(mv_matrix));
|
||||
vec4 viewPos = mv_matrix * vec4(pos, 1.0);
|
||||
tc = texCoord;
|
||||
vert_pos = pos;
|
||||