This commit is contained in:
+15
-1
@@ -22,4 +22,18 @@ When prompting an AI about this project, include:
|
|||||||
- Flag any Godot 3 vs 4 API differences (e.g., `move_and_slide()` behavior, signal typing).
|
- Flag any Godot 3 vs 4 API differences (e.g., `move_and_slide()` behavior, signal typing).
|
||||||
- If a request needs multiple scenes, describe the scene hierarchy before showing code.
|
- If a request needs multiple scenes, describe the scene hierarchy before showing code.
|
||||||
|
|
||||||
Read `ARCHITECTURE.md` for system boundaries and data flow expectations.
|
|
||||||
|
## Handling Ambiguity & Assumptions (Crucial!)
|
||||||
|
|
||||||
|
When a request is ambiguous, incomplete, or requires knowledge outside the scope of the provided documents:
|
||||||
|
1. **DO NOT guess.** Do not write code based on assumptions you cannot validate.
|
||||||
|
2. **Acknowledge the Gap:** Explicitly state what information is missing or unclear (e.g., "The current architecture does not specify how \`WaveRunner\` handles player death.").
|
||||||
|
3. **Propose Assumptions:** If a concrete implementation path *must* be shown, list all assumptions made clearly before writing code. Use a dedicated section like:
|
||||||
|
|
||||||
|
\`\`\`markdown
|
||||||
|
**[ASSUMPTIONS MADE]**
|
||||||
|
1. We assume that the \`PlayerStats\` Resource is accessible from the global scope.
|
||||||
|
2. We are assuming the signal for enemy death will be named \`mob_killed\`.
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
This ensures that the final code provided by AI can be reviewed against project reality before integration.
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# 🚀 YeetGeese - Phase 0 Design Summary
|
||||||
|
|
||||||
|
**Genre:** Third-Person Over-the-Shoulder Tower Defense
|
||||||
|
**Core Fantasy:** A lone defender in a farm arena, utilizing powerful projectile geese to defend their base from waves of approaching enemies. The goal is simple but satisfying: yeet and survive!
|
||||||
|
|
||||||
|
## 🦢 Core Loop
|
||||||
|
Enemies spawn → Player maneuvers & aims → **Yeets Goose** (Damage/Stun) → Currency collected (Feathers) → Player upgrades defenses/geese → Wave ends → Repeat with increased difficulty.
|
||||||
|
|
||||||
|
## 🎯 Minimum Viable Product (MVP) Scope
|
||||||
|
| Feature | Detail | Status |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **Arena** | Single, open 3D farm arena. | Defined |
|
||||||
|
| **Player** | Third-person controller (WASD + Mouse Look). Basic Health System. | Defined |
|
||||||
|
| **Weapon** | One basic Goose projectile (medium damage, spinning, self-lifetime). | Defined |
|
||||||
|
| **Enemies** | Two types: **Pigs** (Slow/Tank) & **Chickens** (Fast/Skirmisher). | Defined |
|
||||||
|
| **Progression** | 5 Waves total. Basic economy (Feathers collected from kills). | Defined |
|
||||||
|
| **UI/Win/Loss** | Health bar, Feather Count, Wave Counter. Win: Survive 5 waves. Loss: Player HP $\le$ 0. | Defined |
|
||||||
|
|
||||||
|
## ⚙️ Technical Foundation
|
||||||
|
* **Engine:** Godot 4.x (3D, Forward+).
|
||||||
|
* **Architecture:** Utilize autoloads (`GameState`, `EventBus`, etc.) to manage state centrally and decouple systems.
|
||||||
|
* **Key Systems:** Input mapping (Movement, Aim, Throw), defined collision layers (Environment, Player, Enemy, Goose, Currency).
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# AudioManager.gd
|
||||||
|
extends Node
|
||||||
|
var music_player # Reference to AudioStreamPlayer for background music
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
print("AudioManager loaded. Ready to play sounds.")
|
||||||
|
|
||||||
|
func play_sfx(sound_path: String):
|
||||||
|
# Logic to play a sound effect
|
||||||
|
pass
|
||||||
|
|
||||||
|
func play_music(stream: AudioStream):
|
||||||
|
# Logic to set and play background music
|
||||||
|
pass
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# SettingsManager.gd
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
const SETTINGS_PATH = "user://settings.save"
|
||||||
|
|
||||||
|
func save_setting(key: String, value):
|
||||||
|
print("Saving setting: " + key)
|
||||||
|
# Logic to serialize and save settings data
|
||||||
|
pass
|
||||||
|
|
||||||
|
func load_setting(key: String):
|
||||||
|
print("Loading setting: " + key)
|
||||||
|
# Logic to read saved setting data
|
||||||
|
return null
|
||||||
Reference in New Issue
Block a user