Compare commits
10 Commits
flat-jeans
...
88b4ce3e14
| Author | SHA1 | Date | |
|---|---|---|---|
| 88b4ce3e14 | |||
| 09b96360f8 | |||
| 374710ce61 | |||
| dd4bd87f90 | |||
| 56710afc12 | |||
| 2f91563096 | |||
| 35c2887011 | |||
| 5b2670f08c | |||
| 8661fbad15 | |||
| 975b51a2b5 |
51
.beads/.gitignore
vendored
Normal file
51
.beads/.gitignore
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Dolt database (managed by Dolt, not git)
|
||||||
|
dolt/
|
||||||
|
dolt-access.lock
|
||||||
|
|
||||||
|
# Runtime files
|
||||||
|
bd.sock
|
||||||
|
bd.sock.startlock
|
||||||
|
sync-state.json
|
||||||
|
last-touched
|
||||||
|
|
||||||
|
# Local version tracking (prevents upgrade notification spam after git ops)
|
||||||
|
.local_version
|
||||||
|
|
||||||
|
# Worktree redirect file (contains relative path to main repo's .beads/)
|
||||||
|
# Must not be committed as paths would be wrong in other clones
|
||||||
|
redirect
|
||||||
|
|
||||||
|
# Sync state (local-only, per-machine)
|
||||||
|
# These files are machine-specific and should not be shared across clones
|
||||||
|
.sync.lock
|
||||||
|
export-state/
|
||||||
|
|
||||||
|
# Ephemeral store (SQLite - wisps/molecules, intentionally not versioned)
|
||||||
|
ephemeral.sqlite3
|
||||||
|
ephemeral.sqlite3-journal
|
||||||
|
ephemeral.sqlite3-wal
|
||||||
|
ephemeral.sqlite3-shm
|
||||||
|
|
||||||
|
# Dolt server management (auto-started by bd)
|
||||||
|
dolt-server.pid
|
||||||
|
dolt-server.log
|
||||||
|
dolt-server.lock
|
||||||
|
dolt-server.port
|
||||||
|
dolt-server.activity
|
||||||
|
dolt-monitor.pid
|
||||||
|
|
||||||
|
# Backup data (auto-exported JSONL, local-only)
|
||||||
|
backup/
|
||||||
|
|
||||||
|
# Legacy files (from pre-Dolt versions)
|
||||||
|
*.db
|
||||||
|
*.db?*
|
||||||
|
*.db-journal
|
||||||
|
*.db-wal
|
||||||
|
*.db-shm
|
||||||
|
db.sqlite
|
||||||
|
bd.db
|
||||||
|
# NOTE: Do NOT add negation patterns here.
|
||||||
|
# They would override fork protection in .git/info/exclude.
|
||||||
|
# Config files (metadata.json, config.yaml) are tracked by git by default
|
||||||
|
# since no pattern above ignores them.
|
||||||
81
.beads/README.md
Normal file
81
.beads/README.md
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Beads - AI-Native Issue Tracking
|
||||||
|
|
||||||
|
Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
|
||||||
|
|
||||||
|
## What is Beads?
|
||||||
|
|
||||||
|
Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
|
||||||
|
|
||||||
|
**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Essential Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create new issues
|
||||||
|
bd create "Add user authentication"
|
||||||
|
|
||||||
|
# View all issues
|
||||||
|
bd list
|
||||||
|
|
||||||
|
# View issue details
|
||||||
|
bd show <issue-id>
|
||||||
|
|
||||||
|
# Update issue status
|
||||||
|
bd update <issue-id> --claim
|
||||||
|
bd update <issue-id> --status done
|
||||||
|
|
||||||
|
# Sync with Dolt remote
|
||||||
|
bd dolt push
|
||||||
|
```
|
||||||
|
|
||||||
|
### Working with Issues
|
||||||
|
|
||||||
|
Issues in Beads are:
|
||||||
|
- **Git-native**: Stored in Dolt database with version control and branching
|
||||||
|
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
|
||||||
|
- **Branch-aware**: Issues can follow your branch workflow
|
||||||
|
- **Always in sync**: Auto-syncs with your commits
|
||||||
|
|
||||||
|
## Why Beads?
|
||||||
|
|
||||||
|
✨ **AI-Native Design**
|
||||||
|
- Built specifically for AI-assisted development workflows
|
||||||
|
- CLI-first interface works seamlessly with AI coding agents
|
||||||
|
- No context switching to web UIs
|
||||||
|
|
||||||
|
🚀 **Developer Focused**
|
||||||
|
- Issues live in your repo, right next to your code
|
||||||
|
- Works offline, syncs when you push
|
||||||
|
- Fast, lightweight, and stays out of your way
|
||||||
|
|
||||||
|
🔧 **Git Integration**
|
||||||
|
- Automatic sync with git commits
|
||||||
|
- Branch-aware issue tracking
|
||||||
|
- Dolt-native three-way merge resolution
|
||||||
|
|
||||||
|
## Get Started with Beads
|
||||||
|
|
||||||
|
Try Beads in your own projects:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Beads
|
||||||
|
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
|
||||||
|
|
||||||
|
# Initialize in your repo
|
||||||
|
bd init
|
||||||
|
|
||||||
|
# Create your first issue
|
||||||
|
bd create "Try out Beads"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Learn More
|
||||||
|
|
||||||
|
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
|
||||||
|
- **Quick Start Guide**: Run `bd quickstart`
|
||||||
|
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Beads: Issue tracking that moves at the speed of thought* ⚡
|
||||||
54
.beads/config.yaml
Normal file
54
.beads/config.yaml
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Beads Configuration File
|
||||||
|
# This file configures default behavior for all bd commands in this repository
|
||||||
|
# All settings can also be set via environment variables (BD_* prefix)
|
||||||
|
# or overridden with command-line flags
|
||||||
|
|
||||||
|
# Issue prefix for this repository (used by bd init)
|
||||||
|
# If not set, bd init will auto-detect from directory name
|
||||||
|
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
|
||||||
|
# issue-prefix: ""
|
||||||
|
|
||||||
|
# Use no-db mode: JSONL-only, no Dolt database
|
||||||
|
# When true, bd will use .beads/issues.jsonl as the source of truth
|
||||||
|
# no-db: false
|
||||||
|
|
||||||
|
# Enable JSON output by default
|
||||||
|
# json: false
|
||||||
|
|
||||||
|
# Feedback title formatting for mutating commands (create/update/close/dep/edit)
|
||||||
|
# 0 = hide titles, N > 0 = truncate to N characters
|
||||||
|
# output:
|
||||||
|
# title-length: 255
|
||||||
|
|
||||||
|
# Default actor for audit trails (overridden by BD_ACTOR or --actor)
|
||||||
|
# actor: ""
|
||||||
|
|
||||||
|
# Export events (audit trail) to .beads/events.jsonl on each flush/sync
|
||||||
|
# When enabled, new events are appended incrementally using a high-water mark.
|
||||||
|
# Use 'bd export --events' to trigger manually regardless of this setting.
|
||||||
|
# events-export: false
|
||||||
|
|
||||||
|
# Multi-repo configuration (experimental - bd-307)
|
||||||
|
# Allows hydrating from multiple repositories and routing writes to the correct database
|
||||||
|
# repos:
|
||||||
|
# primary: "." # Primary repo (where this database lives)
|
||||||
|
# additional: # Additional repos to hydrate from (read-only)
|
||||||
|
# - ~/beads-planning # Personal planning repo
|
||||||
|
# - ~/work-planning # Work planning repo
|
||||||
|
|
||||||
|
# JSONL backup (periodic export for off-machine recovery)
|
||||||
|
# Auto-enabled when a git remote exists. Override explicitly:
|
||||||
|
# backup:
|
||||||
|
# enabled: false # Disable auto-backup entirely
|
||||||
|
# interval: 15m # Minimum time between auto-exports
|
||||||
|
# git-push: false # Disable git push (export locally only)
|
||||||
|
# git-repo: "" # Separate git repo for backups (default: project repo)
|
||||||
|
|
||||||
|
# Integration settings (access with 'bd config get/set')
|
||||||
|
# These are stored in the database, not in this file:
|
||||||
|
# - jira.url
|
||||||
|
# - jira.project
|
||||||
|
# - linear.url
|
||||||
|
# - linear.api-key
|
||||||
|
# - github.org
|
||||||
|
# - github.repo
|
||||||
9
.beads/hooks/post-checkout
Executable file
9
.beads/hooks/post-checkout
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
|
||||||
|
# This section is managed by beads. Do not remove these markers.
|
||||||
|
if command -v bd >/dev/null 2>&1; then
|
||||||
|
export BD_GIT_HOOK=1
|
||||||
|
bd hooks run post-checkout "$@"
|
||||||
|
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
|
||||||
|
fi
|
||||||
|
# --- END BEADS INTEGRATION v0.59.0 ---
|
||||||
9
.beads/hooks/post-merge
Executable file
9
.beads/hooks/post-merge
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
|
||||||
|
# This section is managed by beads. Do not remove these markers.
|
||||||
|
if command -v bd >/dev/null 2>&1; then
|
||||||
|
export BD_GIT_HOOK=1
|
||||||
|
bd hooks run post-merge "$@"
|
||||||
|
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
|
||||||
|
fi
|
||||||
|
# --- END BEADS INTEGRATION v0.59.0 ---
|
||||||
9
.beads/hooks/pre-commit
Executable file
9
.beads/hooks/pre-commit
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
|
||||||
|
# This section is managed by beads. Do not remove these markers.
|
||||||
|
if command -v bd >/dev/null 2>&1; then
|
||||||
|
export BD_GIT_HOOK=1
|
||||||
|
bd hooks run pre-commit "$@"
|
||||||
|
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
|
||||||
|
fi
|
||||||
|
# --- END BEADS INTEGRATION v0.59.0 ---
|
||||||
9
.beads/hooks/pre-push
Executable file
9
.beads/hooks/pre-push
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
|
||||||
|
# This section is managed by beads. Do not remove these markers.
|
||||||
|
if command -v bd >/dev/null 2>&1; then
|
||||||
|
export BD_GIT_HOOK=1
|
||||||
|
bd hooks run pre-push "$@"
|
||||||
|
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
|
||||||
|
fi
|
||||||
|
# --- END BEADS INTEGRATION v0.59.0 ---
|
||||||
9
.beads/hooks/prepare-commit-msg
Executable file
9
.beads/hooks/prepare-commit-msg
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
|
||||||
|
# This section is managed by beads. Do not remove these markers.
|
||||||
|
if command -v bd >/dev/null 2>&1; then
|
||||||
|
export BD_GIT_HOOK=1
|
||||||
|
bd hooks run prepare-commit-msg "$@"
|
||||||
|
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
|
||||||
|
fi
|
||||||
|
# --- END BEADS INTEGRATION v0.59.0 ---
|
||||||
0
.beads/interactions.jsonl
Normal file
0
.beads/interactions.jsonl
Normal file
7
.beads/metadata.json
Normal file
7
.beads/metadata.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"database": "dolt",
|
||||||
|
"backend": "dolt",
|
||||||
|
"dolt_mode": "server",
|
||||||
|
"dolt_database": "ai_game_2",
|
||||||
|
"project_id": "16f0248d-5833-44e9-91cc-42afea26fd77"
|
||||||
|
}
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -14,4 +14,3 @@ tmp/**
|
|||||||
tools/ora_editor/node_modules/*
|
tools/ora_editor/node_modules/*
|
||||||
node_modules/*
|
node_modules/*
|
||||||
**/*.log
|
**/*.log
|
||||||
kq4-sierra-decompile/**
|
|
||||||
|
|||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,6 +1,3 @@
|
|||||||
[submodule "kq4-sierra-decompile"]
|
[submodule "kq4-sierra-decompile"]
|
||||||
path = kq4-sierra-decompile
|
path = kq4-sierra-decompile
|
||||||
url = ssh://raspberrypi/~/git/sierra-decompile
|
url = ssh://raspberrypi/~/git/sierra-decompile
|
||||||
[submodule "godot-mcp"]
|
|
||||||
path = godot-mcp
|
|
||||||
url = https://github.com/tugcantopaloglu/godot-mcp
|
|
||||||
|
|||||||
@@ -1,151 +0,0 @@
|
|||||||
---
|
|
||||||
name: gitea-tea
|
|
||||||
description: Use tea CLI to create, manage, and checkout Gitea pull requests. Use this when opening a PR, managing PRs, or checking out PRs on the Gitea remote (gitea.story-basking.ts.net).
|
|
||||||
---
|
|
||||||
|
|
||||||
# Gitea Tea CLI Skill
|
|
||||||
|
|
||||||
This skill covers using `tea` (Gitea's official CLI) for pull request workflows in this project.
|
|
||||||
|
|
||||||
## When to Use This Skill
|
|
||||||
|
|
||||||
Use this skill when you need to:
|
|
||||||
- Create a PR from a working branch to master on the Gitea remote
|
|
||||||
- Open, list, or view PRs
|
|
||||||
- Checkout a PR locally for review or iteration
|
|
||||||
- Manage PR state (close, reopen, merge)
|
|
||||||
|
|
||||||
## Project Setup
|
|
||||||
|
|
||||||
The git remote is `origin` pointing to `git@gitea:notid/ai-game-2.git`. The repo slug is `notid/ai-game-2`.
|
|
||||||
|
|
||||||
In this project's environment:
|
|
||||||
- Gitea login is pre-configured for `gitea.story-basking.ts.net`
|
|
||||||
- Repo slug: `notid/ai-game-2`
|
|
||||||
- Target branch for PRs: `master`
|
|
||||||
- The git remote named `origin` points to this instance
|
|
||||||
|
|
||||||
## Key Flags
|
|
||||||
|
|
||||||
All tea subcommands support these flags for repo and auth context:
|
|
||||||
- `-r notid/ai-game-2` - Override repo slug (required when auto-discovery fails, e.g. in worktrees)
|
|
||||||
- `-R origin` - Discover Gitea login from a specific git remote
|
|
||||||
- `-l <username>` - Use a different Gitea login
|
|
||||||
|
|
||||||
In practice, you usually need just `-r notid/ai-game-2` on the subcommand you're running.
|
|
||||||
|
|
||||||
## Creating a PR
|
|
||||||
|
|
||||||
Use `tea pulls create` to open a PR from the current branch to master:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tea pulls create -r notid/ai-game-2 -b master -t "Title" -d "Body"
|
|
||||||
```
|
|
||||||
|
|
||||||
Common flags:
|
|
||||||
- `-t, --title` - PR title
|
|
||||||
- `-d, --description` - PR body/description (use heredoc or file for long descriptions)
|
|
||||||
- `-a, --assignees` - Comma-separated usernames to assign
|
|
||||||
- `-L, --labels` - Comma-separated labels to apply
|
|
||||||
- `-m, --milestone` - Milestone to assign
|
|
||||||
|
|
||||||
**Writing a multiline description:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tea pulls create -r notid/ai-game-2 -b master \
|
|
||||||
-t "feat: add feature" \
|
|
||||||
-d "$(cat <<'EOF'
|
|
||||||
## Summary
|
|
||||||
- Bullet point one
|
|
||||||
- Bullet point two
|
|
||||||
EOF
|
|
||||||
)"
|
|
||||||
```
|
|
||||||
|
|
||||||
Or write the body to a temp file first and reference it.
|
|
||||||
|
|
||||||
## Listing PRs
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tea pulls list -r notid/ai-game-2 # List open PRs
|
|
||||||
tea pulls list -r notid/ai-game-2 --state all # All PRs
|
|
||||||
tea pulls list -r notid/ai-game-2 --limit 10 -o simple # Limit output, simple format
|
|
||||||
```
|
|
||||||
|
|
||||||
## Opening a PR in Browser
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tea open pr <number> -r notid/ai-game-2
|
|
||||||
tea open pr create -r notid/ai-game-2 # Open web UI to create a PR
|
|
||||||
```
|
|
||||||
|
|
||||||
## Checking Out a PR Locally
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tea pulls checkout <number> -r notid/ai-game-2
|
|
||||||
```
|
|
||||||
|
|
||||||
This fetches and checks out the PR branch locally.
|
|
||||||
|
|
||||||
## Managing PR State
|
|
||||||
|
|
||||||
**Close a PR:**
|
|
||||||
```bash
|
|
||||||
tea pulls close <number> -r notid/ai-game-2 --confirm
|
|
||||||
```
|
|
||||||
|
|
||||||
**Reopen a closed PR:**
|
|
||||||
```bash
|
|
||||||
tea pulls reopen <number> -r notid/ai-game-2 --confirm
|
|
||||||
```
|
|
||||||
|
|
||||||
**Merge a PR:**
|
|
||||||
```bash
|
|
||||||
tea pulls merge <number> -r notid/ai-game-2 --confirm
|
|
||||||
```
|
|
||||||
|
|
||||||
**Edit a PR (title, description, etc.):**
|
|
||||||
```bash
|
|
||||||
tea pulls edit <number> -r notid/ai-game-2 -t "New title" -d "New body"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Full PR Creation Workflow
|
|
||||||
|
|
||||||
1. Commit all changes on your branch:
|
|
||||||
```bash
|
|
||||||
git add . && git commit -m "describe the change"
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Push the branch to origin:
|
|
||||||
```bash
|
|
||||||
git push origin <branch-name>
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Create the PR with tea:
|
|
||||||
```bash
|
|
||||||
tea pulls create -r notid/ai-game-2 -b master \
|
|
||||||
-t "feat: description of change" \
|
|
||||||
-d "Detailed PR body here"
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Open the PR in browser to verify:
|
|
||||||
```bash
|
|
||||||
tea open pr <number> -r notid/ai-game-2
|
|
||||||
```
|
|
||||||
|
|
||||||
## Worktree Gotcha
|
|
||||||
|
|
||||||
When running from a git worktree, tea may fail to auto-discover the repo. Always pass `-r notid/ai-game-2` explicitly in that case:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tea pulls list -r notid/ai-game-2 # Works in worktrees
|
|
||||||
tea pulls create -r notid/ai-game-2 ... # Works in worktrees
|
|
||||||
```
|
|
||||||
|
|
||||||
## Tips
|
|
||||||
|
|
||||||
- Always use `-r notid/ai-game-2` to specify the repo explicitly, especially in worktrees
|
|
||||||
- Use `-b master` to set the target branch (default may differ)
|
|
||||||
- The `--confirm` flag is required for destructive actions (close, merge)
|
|
||||||
- Use `-o simple`, `-o json`, `-o table`, etc. to control output format
|
|
||||||
- `tea whoami` verifies your authentication before running PR commands
|
|
||||||
108
AGENTS.md
108
AGENTS.md
@@ -299,10 +299,116 @@ func _on_exit_interacted() -> void:
|
|||||||
|
|
||||||
Do all work in a branch. Squash the branch before merging into master.
|
Do all work in a branch. Squash the branch before merging into master.
|
||||||
|
|
||||||
|
|
||||||
|
<!-- BEGIN BEADS INTEGRATION -->
|
||||||
|
## Issue Tracking with bd (beads)
|
||||||
|
|
||||||
|
**IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods.
|
||||||
|
|
||||||
|
### Why bd?
|
||||||
|
|
||||||
|
- Dependency-aware: Track blockers and relationships between issues
|
||||||
|
- Git-friendly: Dolt-powered version control with native sync
|
||||||
|
- Agent-optimized: JSON output, ready work detection, discovered-from links
|
||||||
|
- Prevents duplicate tracking systems and confusion
|
||||||
|
|
||||||
|
### Quick Start
|
||||||
|
|
||||||
|
**Check for ready work:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bd ready --json
|
||||||
|
```
|
||||||
|
|
||||||
|
**Create new issues:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bd create "Issue title" --description="Detailed context" -t bug|feature|task -p 0-4 --json
|
||||||
|
bd create "Issue title" --description="What this issue is about" -p 1 --deps discovered-from:bd-123 --json
|
||||||
|
```
|
||||||
|
|
||||||
|
**Claim and update:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bd update <id> --claim --json
|
||||||
|
bd update bd-42 --priority 1 --json
|
||||||
|
```
|
||||||
|
|
||||||
|
**Complete work:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bd close bd-42 --reason "Completed" --json
|
||||||
|
```
|
||||||
|
|
||||||
|
### Issue Types
|
||||||
|
|
||||||
|
- `bug` - Something broken
|
||||||
|
- `feature` - New functionality
|
||||||
|
- `task` - Work item (tests, docs, refactoring)
|
||||||
|
- `epic` - Large feature with subtasks
|
||||||
|
- `chore` - Maintenance (dependencies, tooling)
|
||||||
|
|
||||||
|
### Priorities
|
||||||
|
|
||||||
|
- `0` - Critical (security, data loss, broken builds)
|
||||||
|
- `1` - High (major features, important bugs)
|
||||||
|
- `2` - Medium (default, nice-to-have)
|
||||||
|
- `3` - Low (polish, optimization)
|
||||||
|
- `4` - Backlog (future ideas)
|
||||||
|
|
||||||
|
### Workflow for AI Agents
|
||||||
|
|
||||||
|
1. **Check ready work**: `bd ready` shows unblocked issues
|
||||||
|
2. **Claim your task atomically**: `bd update <id> --claim`
|
||||||
|
3. **Work on it**: Implement, test, document
|
||||||
|
4. **Discover new work?** Create linked issue:
|
||||||
|
- `bd create "Found bug" --description="Details about what was found" -p 1 --deps discovered-from:<parent-id>`
|
||||||
|
5. **Complete**: `bd close <id> --reason "Done"`
|
||||||
|
|
||||||
|
### Auto-Sync
|
||||||
|
|
||||||
|
bd automatically syncs via Dolt:
|
||||||
|
|
||||||
|
- Each write auto-commits to Dolt history
|
||||||
|
- Use `bd dolt push`/`bd dolt pull` for remote sync
|
||||||
|
- No manual export/import needed!
|
||||||
|
|
||||||
|
### Important Rules
|
||||||
|
|
||||||
|
- ✅ Use bd for ALL task tracking
|
||||||
|
- ✅ Always use `--json` flag for programmatic use
|
||||||
|
- ✅ Link discovered work with `discovered-from` dependencies
|
||||||
|
- ✅ Check `bd ready` before asking "what should I work on?"
|
||||||
|
- ❌ Do NOT create markdown TODO lists
|
||||||
|
- ❌ Do NOT use external issue trackers
|
||||||
|
- ❌ Do NOT duplicate tracking systems
|
||||||
|
|
||||||
|
For more details, see README.md and docs/QUICKSTART.md.
|
||||||
|
|
||||||
|
## Landing the Plane (Session Completion)
|
||||||
|
|
||||||
|
**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
|
||||||
|
|
||||||
|
**MANDATORY WORKFLOW:**
|
||||||
|
|
||||||
|
1. **File issues for remaining work** - Create issues for anything that needs follow-up
|
||||||
|
2. **Run quality gates** (if code changed) - Tests, linters, builds
|
||||||
|
3. **Update issue status** - Close finished work, update in-progress items
|
||||||
|
4. **PUSH TO REMOTE** - This is MANDATORY:
|
||||||
|
```bash
|
||||||
|
git pull --rebase
|
||||||
|
bd sync
|
||||||
|
git push
|
||||||
|
git status # MUST show "up to date with origin"
|
||||||
|
```
|
||||||
|
5. **Clean up** - Clear stashes, prune remote branches
|
||||||
|
6. **Verify** - All changes committed AND pushed
|
||||||
|
7. **Hand off** - Provide context for next session
|
||||||
|
|
||||||
**CRITICAL RULES:**
|
**CRITICAL RULES:**
|
||||||
- Work is NOT complete until `git push` succeeds
|
- Work is NOT complete until `git push` succeeds
|
||||||
- NEVER stop before pushing - that leaves work stranded locally
|
- NEVER stop before pushing - that leaves work stranded locally
|
||||||
- NEVER say "ready to push when you are" - YOU must push
|
- NEVER say "ready to push when you are" - YOU must push
|
||||||
- If push fails, resolve and retry until it succeeds
|
- If push fails, resolve and retry until it succeeds
|
||||||
|
|
||||||
|
<!-- END BEADS INTEGRATION -->
|
||||||
|
|||||||
@@ -190,18 +190,11 @@ autowrap_mode = 3
|
|||||||
layer = 5
|
layer = 5
|
||||||
|
|
||||||
[node name="InventoryBackpack" parent="HUD" unique_id=-294967294 instance=ExtResource("9_backpack")]
|
[node name="InventoryBackpack" parent="HUD" unique_id=-294967294 instance=ExtResource("9_backpack")]
|
||||||
anchors_preset = 0
|
|
||||||
anchor_top = 0.0
|
|
||||||
anchor_bottom = 0.0
|
|
||||||
offset_top = 0.0
|
|
||||||
offset_bottom = 70.0
|
|
||||||
grow_vertical = 1
|
|
||||||
|
|
||||||
[node name="InventoryOverlayLayer" type="CanvasLayer" parent="." unique_id=-294967293]
|
[node name="InventoryOverlayLayer" type="CanvasLayer" parent="." unique_id=-294967293]
|
||||||
layer = 10
|
layer = 10
|
||||||
|
|
||||||
[node name="InventoryOverlay" parent="InventoryOverlayLayer" unique_id=-294967292 instance=ExtResource("a_overlay")]
|
[node name="InventoryOverlay" parent="InventoryOverlayLayer" unique_id=-294967292 instance=ExtResource("a_overlay")]
|
||||||
|
|
||||||
[connection signal="overlay_hide_requested" from="HUD/InventoryBackpack" to="." method="_on_backpack_hide_overlay"]
|
|
||||||
[connection signal="overlay_show_requested" from="HUD/InventoryBackpack" to="." method="_on_backpack_show_overlay"]
|
[connection signal="overlay_show_requested" from="HUD/InventoryBackpack" to="." method="_on_backpack_show_overlay"]
|
||||||
[connection signal="item_confirmed" from="InventoryOverlayLayer/InventoryOverlay" to="." method="_on_overlay_item_confirmed"]
|
[connection signal="overlay_hide_requested" from="HUD/InventoryBackpack" to="." method="_on_backpack_hide_overlay"]
|
||||||
|
|||||||
29
MainGame.gd
29
MainGame.gd
@@ -3,7 +3,6 @@ extends Node2D
|
|||||||
|
|
||||||
var cursors = [load("res://boot_icon.png"), load("res://eye_icon.png"), load("res://hand_icon.png"), load("res://speech_icon.png")]
|
var cursors = [load("res://boot_icon.png"), load("res://eye_icon.png"), load("res://hand_icon.png"), load("res://speech_icon.png")]
|
||||||
var hourglass_cursor = load("res://hourglass_icon.png")
|
var hourglass_cursor = load("res://hourglass_icon.png")
|
||||||
var item_cursor: Texture2D = null
|
|
||||||
var previous_cursor_index: int = 0
|
var previous_cursor_index: int = 0
|
||||||
var is_script_running: bool = false
|
var is_script_running: bool = false
|
||||||
var is_cursor_locked: bool = false # When true, hourglass is shown and cursor can't be changed
|
var is_cursor_locked: bool = false # When true, hourglass is shown and cursor can't be changed
|
||||||
@@ -70,32 +69,16 @@ func set_script_cursor() -> void:
|
|||||||
func restore_cursor() -> void:
|
func restore_cursor() -> void:
|
||||||
is_script_running = false
|
is_script_running = false
|
||||||
is_cursor_locked = false # Unlock cursor
|
is_cursor_locked = false # Unlock cursor
|
||||||
if previous_cursor_index == ActionState.Action.ITEM:
|
Input.set_custom_mouse_cursor(cursors[previous_cursor_index])
|
||||||
if item_cursor:
|
|
||||||
Input.set_custom_mouse_cursor(item_cursor)
|
|
||||||
else:
|
|
||||||
Input.set_custom_mouse_cursor(cursors[ActionState.Action.WALK])
|
|
||||||
else:
|
|
||||||
Input.set_custom_mouse_cursor(cursors[previous_cursor_index])
|
|
||||||
|
|
||||||
func _unhandled_input(event: InputEvent) -> void:
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
$SceneViewport.push_input(event)
|
$SceneViewport.push_input(event)
|
||||||
|
|
||||||
func _on_backpack_show_overlay() -> void:
|
func _on_backpack_show_overlay() -> void:
|
||||||
$InventoryOverlayLayer/InventoryOverlay.show_overlay()
|
$HUD/InventoryOverlay.show_overlay()
|
||||||
|
|
||||||
func _on_backpack_hide_overlay() -> void:
|
func _on_backpack_hide_overlay() -> void:
|
||||||
$InventoryOverlayLayer/InventoryOverlay.hide_overlay()
|
$HUD/InventoryOverlay.hide_overlay()
|
||||||
|
|
||||||
func _on_overlay_item_confirmed(item_id: String) -> void:
|
|
||||||
InventoryManager.select_item(item_id)
|
|
||||||
var def = InventoryManager.get_item_definition(item_id)
|
|
||||||
if def and def.icon:
|
|
||||||
item_cursor = def.icon
|
|
||||||
Input.set_custom_mouse_cursor(item_cursor)
|
|
||||||
ActionState.current_action = ActionState.Action.ITEM
|
|
||||||
else:
|
|
||||||
Input.set_custom_mouse_cursor(cursors[ActionState.Action.WALK])
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
if event.is_action_released("quit"):
|
if event.is_action_released("quit"):
|
||||||
@@ -104,8 +87,8 @@ func _input(event):
|
|||||||
var prev_action = ActionState.current_action
|
var prev_action = ActionState.current_action
|
||||||
ActionState.current_action = (ActionState.current_action + 1) % 5
|
ActionState.current_action = (ActionState.current_action + 1) % 5
|
||||||
if ActionState.current_action == ActionState.Action.ITEM:
|
if ActionState.current_action == ActionState.Action.ITEM:
|
||||||
if InventoryManager.selected_item and item_cursor:
|
if InventoryManager.selected_item:
|
||||||
Input.set_custom_mouse_cursor(item_cursor, Input.CursorShape.CURSOR_ARROW, Vector2(0,0))
|
Input.set_custom_mouse_cursor(cursors[ActionState.current_action], Input.CursorShape.CURSOR_ARROW, Vector2(0,0))
|
||||||
else:
|
else:
|
||||||
ActionState.current_action = (ActionState.current_action + 1) % 5
|
ActionState.current_action = (ActionState.current_action + 1) % 5
|
||||||
Input.set_custom_mouse_cursor(cursors[ActionState.current_action], Input.CursorShape.CURSOR_ARROW, Vector2(0,0))
|
Input.set_custom_mouse_cursor(cursors[ActionState.current_action], Input.CursorShape.CURSOR_ARROW, Vector2(0,0))
|
||||||
|
|||||||
Submodule godot-mcp deleted from b77dfc7c62
@@ -3,5 +3,4 @@ class_name ItemDefinition
|
|||||||
|
|
||||||
@export var id: String = ""
|
@export var id: String = ""
|
||||||
@export var name: String = ""
|
@export var name: String = ""
|
||||||
@export var icon: Texture2D
|
|
||||||
@export var combination_category: String = ""
|
@export var combination_category: String = ""
|
||||||
|
|||||||
@@ -13,14 +13,12 @@ var _state: State = State.IDLE
|
|||||||
var _animating: bool = false
|
var _animating: bool = false
|
||||||
var _active_tween: Tween = null
|
var _active_tween: Tween = null
|
||||||
var _floating_item_color: Color = Color(1, 1, 1, 0)
|
var _floating_item_color: Color = Color(1, 1, 1, 0)
|
||||||
var _home_position: Vector2 = Vector2(0, 0)
|
|
||||||
|
|
||||||
@onready var backpack_icon: ColorRect = $BackpackIcon
|
@onready var backpack_icon: ColorRect = $BackpackIcon
|
||||||
@onready var floating_item: ColorRect = $FloatingItem
|
@onready var floating_item: ColorRect = $FloatingItem
|
||||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
_home_position = backpack_icon.position
|
|
||||||
floating_item.modulate = Color(1, 1, 1, 0)
|
floating_item.modulate = Color(1, 1, 1, 0)
|
||||||
floating_item.visible = false
|
floating_item.visible = false
|
||||||
InventoryManager.item_acquired.connect(_on_item_acquired)
|
InventoryManager.item_acquired.connect(_on_item_acquired)
|
||||||
@@ -73,7 +71,7 @@ func _transition_to_idle() -> void:
|
|||||||
_active_tween = tween
|
_active_tween = tween
|
||||||
_animating = true
|
_animating = true
|
||||||
tween.tween_property(backpack_icon, "rotation", 0.0, 0.35).set_trans(Tween.TRANS_LINEAR)
|
tween.tween_property(backpack_icon, "rotation", 0.0, 0.35).set_trans(Tween.TRANS_LINEAR)
|
||||||
tween.tween_property(backpack_icon, "position", _home_position, 0.35).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)
|
tween.tween_property(backpack_icon, "position", backpack_icon.position, 0.35).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)
|
||||||
tween.tween_callback(_on_transition_complete.bind(State.IDLE))
|
tween.tween_callback(_on_transition_complete.bind(State.IDLE))
|
||||||
|
|
||||||
func _transition_to_open() -> void:
|
func _transition_to_open() -> void:
|
||||||
@@ -89,7 +87,7 @@ func _transition_to_open() -> void:
|
|||||||
_active_tween = tween
|
_active_tween = tween
|
||||||
_animating = true
|
_animating = true
|
||||||
tween.tween_property(backpack_icon, "rotation", PI / 4, 0.35).set_trans(Tween.TRANS_LINEAR)
|
tween.tween_property(backpack_icon, "rotation", PI / 4, 0.35).set_trans(Tween.TRANS_LINEAR)
|
||||||
tween.tween_property(backpack_icon, "position", _home_position + Vector2(20, 20), 0.35).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)
|
tween.tween_property(backpack_icon, "position", Vector2(backpack_icon.position.x + 20, backpack_icon.position.y + 20), 0.35).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)
|
||||||
tween.tween_callback(_on_transition_complete.bind(State.OPEN))
|
tween.tween_callback(_on_transition_complete.bind(State.OPEN))
|
||||||
tween.tween_callback(overlay_show_requested.emit)
|
tween.tween_callback(overlay_show_requested.emit)
|
||||||
|
|
||||||
@@ -224,13 +222,12 @@ func _on_inventory_changed() -> void:
|
|||||||
_update_floating_item()
|
_update_floating_item()
|
||||||
|
|
||||||
func _gui_input(event: InputEvent) -> void:
|
func _gui_input(event: InputEvent) -> void:
|
||||||
print("[BACKPACK] _gui_input: %s, state=%s" % [event, State.keys()[_state]])
|
|
||||||
if event is InputEventMouseButton and event.pressed and event.button_index == 1:
|
if event is InputEventMouseButton and event.pressed and event.button_index == 1:
|
||||||
|
print("OBTAINED")
|
||||||
if _state == State.IDLE:
|
if _state == State.IDLE:
|
||||||
print("[BACKPACK] transitioning to OPEN")
|
|
||||||
transition_to(State.OPEN)
|
transition_to(State.OPEN)
|
||||||
elif _state == State.OPEN:
|
elif _state == State.OPEN:
|
||||||
print("[BACKPACK] transitioning to IDLE")
|
|
||||||
transition_to(State.IDLE)
|
transition_to(State.IDLE)
|
||||||
|
|
||||||
func _notification(what: int) -> void:
|
func _notification(what: int) -> void:
|
||||||
|
|||||||
@@ -1,30 +1,28 @@
|
|||||||
[gd_scene format=3 uid="uid://dxkyfas46q7ef"]
|
[gd_scene format=3 uid="uid://1406xmcnkygw0"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://v8du0eptw65c" path="res://inventory/inventory_backpack/InventoryBackpack.gd" id="1"]
|
[ext_resource type="Script" uid="uid://2x3g0ethsdcgo" path="res://inventory/inventory_backpack/InventoryBackpack.gd" id="1"]
|
||||||
|
|
||||||
[node name="InventoryBackpack" type="Control" unique_id=1000000001]
|
[node name="InventoryBackpack" type="Control" unique_id=1000000001]
|
||||||
layout_mode = 3
|
layout_mode = 0
|
||||||
anchors_preset = 2
|
|
||||||
anchor_top = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
offset_top = -70.0
|
|
||||||
offset_right = 70.0
|
offset_right = 70.0
|
||||||
grow_vertical = 0
|
offset_bottom = 70.0
|
||||||
script = ExtResource("1")
|
script = ExtResource("1")
|
||||||
|
|
||||||
[node name="BackpackIcon" type="ColorRect" parent="." unique_id=1000000002]
|
[node name="BackpackIcon" type="ColorRect" parent="." unique_id=1000000002]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
|
offset_left = 0.0
|
||||||
|
offset_top = 0.0
|
||||||
offset_right = 60.0
|
offset_right = 60.0
|
||||||
offset_bottom = 60.0
|
offset_bottom = 60.0
|
||||||
mouse_filter = 1
|
|
||||||
color = Color(0.4, 0.6, 0.9, 1)
|
color = Color(0.4, 0.6, 0.9, 1)
|
||||||
|
|
||||||
[node name="FloatingItem" type="ColorRect" parent="." unique_id=1000000003]
|
[node name="FloatingItem" type="ColorRect" parent="." unique_id=1000000003]
|
||||||
visible = false
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 20.0
|
offset_left = 20.0
|
||||||
offset_top = -30.0
|
offset_top = -30.0
|
||||||
offset_right = 50.0
|
offset_right = 50.0
|
||||||
|
offset_bottom = 0.0
|
||||||
color = Color(1, 0.6, 0.2, 1)
|
color = Color(1, 0.6, 0.2, 1)
|
||||||
|
visible = false
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1000000004]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1000000004]
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ func _ready() -> void:
|
|||||||
InventoryManager.combination_attempted.connect(_on_combination_attempted)
|
InventoryManager.combination_attempted.connect(_on_combination_attempted)
|
||||||
|
|
||||||
func show_overlay() -> void:
|
func show_overlay() -> void:
|
||||||
print("[OVERLAY] show_overlay called, inventory has %d items" % InventoryManager.inventory.size())
|
|
||||||
_refresh_grid()
|
|
||||||
if _fade_tween:
|
if _fade_tween:
|
||||||
_fade_tween.kill()
|
_fade_tween.kill()
|
||||||
_fade_tween = null
|
_fade_tween = null
|
||||||
@@ -50,7 +48,6 @@ func show_overlay() -> void:
|
|||||||
tween.tween_callback(_on_fade_in_complete)
|
tween.tween_callback(_on_fade_in_complete)
|
||||||
|
|
||||||
func hide_overlay() -> void:
|
func hide_overlay() -> void:
|
||||||
print("[OVERLAY] hide_overlay called")
|
|
||||||
if _fade_tween:
|
if _fade_tween:
|
||||||
_fade_tween.kill()
|
_fade_tween.kill()
|
||||||
_fade_tween = null
|
_fade_tween = null
|
||||||
@@ -87,30 +84,28 @@ func _refresh_grid() -> void:
|
|||||||
|
|
||||||
var slot_scene = load("res://inventory/inventory_overlay/InventorySlot.tscn")
|
var slot_scene = load("res://inventory/inventory_overlay/InventorySlot.tscn")
|
||||||
var slot: InventorySlot = slot_scene.instantiate()
|
var slot: InventorySlot = slot_scene.instantiate()
|
||||||
grid.add_child(slot)
|
|
||||||
slot.set_item(def)
|
slot.set_item(def)
|
||||||
slot.clicked.connect(_on_slot_clicked)
|
slot.clicked.connect(_on_slot_clicked)
|
||||||
slot.right_clicked.connect(_on_slot_right_clicked)
|
slot.right_clicked.connect(_on_slot_right_clicked)
|
||||||
slot.hovered.connect(_on_slot_hovered)
|
slot.hovered.connect(_on_slot_hovered)
|
||||||
slot.unhovered.connect(_on_slot_unhovered)
|
slot.unhovered.connect(_on_slot_unhovered)
|
||||||
|
grid.add_child(slot)
|
||||||
|
|
||||||
grid.columns = SLOTS_PER_ROW
|
grid.columns = SLOTS_PER_ROW
|
||||||
|
|
||||||
func _on_slot_clicked(item_id: String) -> void:
|
func _on_slot_clicked(item_id: String) -> void:
|
||||||
print("[OVERLAY] _on_slot_clicked: '%s', input_active=%s" % [item_id, input_active])
|
|
||||||
if not input_active:
|
if not input_active:
|
||||||
return
|
return
|
||||||
|
|
||||||
for child in grid.get_children():
|
for child in grid.get_children():
|
||||||
if child is InventorySlot and child.item_id == item_id:
|
if child is InventorySlot and child.item_id == item_id:
|
||||||
if _selected_slot == null:
|
if _selected_slot == null:
|
||||||
InventoryManager.select_item(item_id)
|
_selected_slot = child
|
||||||
item_confirmed.emit(item_id)
|
_drag_start_time = Time.get_ticks_msec() / 1000.0
|
||||||
hide_overlay()
|
_is_dragging = true
|
||||||
|
_create_drag_preview(child)
|
||||||
elif _selected_slot.item_id == item_id:
|
elif _selected_slot.item_id == item_id:
|
||||||
InventoryManager.select_item(item_id)
|
_handle_release_same_item()
|
||||||
item_confirmed.emit(item_id)
|
|
||||||
hide_overlay()
|
|
||||||
else:
|
else:
|
||||||
combine_requested.emit(_selected_slot.item_id, item_id)
|
combine_requested.emit(_selected_slot.item_id, item_id)
|
||||||
_clear_selection()
|
_clear_selection()
|
||||||
@@ -181,19 +176,35 @@ func _update_hover_label() -> void:
|
|||||||
else:
|
else:
|
||||||
hover_label.text = ""
|
hover_label.text = ""
|
||||||
|
|
||||||
func _on_background_gui_input(event: InputEvent) -> void:
|
|
||||||
if event is InputEventMouseButton and event.button_index == 1 and event.pressed:
|
|
||||||
hide_overlay()
|
|
||||||
close_requested.emit()
|
|
||||||
|
|
||||||
func _gui_input(event: InputEvent) -> void:
|
func _gui_input(event: InputEvent) -> void:
|
||||||
if event is InputEventMouseButton and event.button_index == 1 and event.pressed:
|
if not _is_visible:
|
||||||
|
return
|
||||||
|
|
||||||
|
if event is InputEventMouseButton:
|
||||||
|
if event.button_index == 1 and event.pressed:
|
||||||
|
if not _is_dragging:
|
||||||
|
pass
|
||||||
|
elif event.button_index == 1 and not event.pressed:
|
||||||
|
if _is_dragging:
|
||||||
|
if _hovered_slot == null:
|
||||||
|
_clear_selection()
|
||||||
|
hide_overlay()
|
||||||
|
close_requested.emit()
|
||||||
|
elif _hovered_slot == _selected_slot:
|
||||||
|
_handle_release_same_item()
|
||||||
|
else:
|
||||||
|
combine_requested.emit(_selected_slot.item_id, _hovered_slot.item_id)
|
||||||
|
_clear_selection()
|
||||||
|
return
|
||||||
|
|
||||||
|
if event is InputEventMouseMotion and _is_dragging and _dragged_item:
|
||||||
|
_dragged_item.position = get_local_mouse_position() - Vector2(24, 24)
|
||||||
var panel_rect = panel.get_global_rect()
|
var panel_rect = panel.get_global_rect()
|
||||||
if not panel_rect.has_point(get_global_mouse_position()):
|
if not panel_rect.has_point(get_global_mouse_position()):
|
||||||
|
_clear_selection()
|
||||||
hide_overlay()
|
hide_overlay()
|
||||||
close_requested.emit()
|
close_requested.emit()
|
||||||
|
|
||||||
|
|
||||||
func _on_combination_attempted(item_a_id: String, item_b_id: String) -> void:
|
func _on_combination_attempted(item_a_id: String, item_b_id: String) -> void:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -1,34 +1,29 @@
|
|||||||
[gd_scene format=3 uid="uid://djoycn4xfa8p3"]
|
[gd_scene format=3 uid="uid://1p46uzngsih9o"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bkpafveapyv8n" path="res://inventory/inventory_overlay/InventoryOverlay.gd" id="1"]
|
[ext_resource type="Script" uid="uid://3mkdj9s1oe1jz" path="res://inventory/inventory_overlay/InventoryOverlay.gd" id="1"]
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_inv"]
|
[sub_resource type="LabelSettings" id="LabelSettings_inv"]
|
||||||
font_size = 20
|
font_size = 20
|
||||||
outline_size = 3
|
outline_size = 3
|
||||||
outline_color = Color(0, 0, 0, 1)
|
outline_color = Color(0, 0, 0, 1)
|
||||||
|
|
||||||
[node name="InventoryOverlay" type="Control" unique_id=-1294967295]
|
[node name="InventoryOverlay" type="Control" unique_id=3000000001]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
script = ExtResource("1")
|
script = ExtResource("1")
|
||||||
|
|
||||||
[node name="Background" type="ColorRect" parent="." unique_id=-1294967294]
|
[node name="Background" type="ColorRect" parent="." unique_id=3000000002]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
mouse_filter = 1
|
|
||||||
color = Color(0, 0, 0, 0.7)
|
color = Color(0, 0, 0, 0.7)
|
||||||
|
|
||||||
[node name="InventoryPanel" type="Control" parent="." unique_id=-1294967293]
|
[node name="InventoryPanel" type="Control" parent="." unique_id=3000000003]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 8
|
anchors_preset = 7
|
||||||
anchor_left = 0.5
|
anchor_left = 0.5
|
||||||
anchor_top = 0.5
|
anchor_top = 0.5
|
||||||
anchor_right = 0.5
|
anchor_right = 0.5
|
||||||
@@ -40,38 +35,29 @@ offset_bottom = 150.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
|
|
||||||
[node name="Frame" type="ColorRect" parent="InventoryPanel" unique_id=-1294967292]
|
[node name="Frame" type="ColorRect" parent="InventoryPanel" unique_id=3000000004]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
mouse_filter = 1
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
color = Color(0.15, 0.15, 0.2, 1)
|
color = Color(0.15, 0.15, 0.2, 1)
|
||||||
|
|
||||||
[node name="ItemGrid" type="GridContainer" parent="InventoryPanel" unique_id=-1294967291]
|
[node name="ItemGrid" type="GridContainer" parent="InventoryPanel" unique_id=3000000005]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 15
|
anchors_preset = 0
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
offset_left = 10.0
|
offset_left = 10.0
|
||||||
offset_top = 10.0
|
offset_top = 10.0
|
||||||
offset_right = -10.0
|
offset_right = -10.0
|
||||||
offset_bottom = -50.0
|
offset_bottom = -50.0
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
|
|
||||||
[node name="HoverLabel" type="Label" parent="InventoryPanel" unique_id=-1294967290]
|
[node name="HoverLabel" type="Label" parent="InventoryPanel" unique_id=3000000006]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 12
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.0
|
||||||
anchor_top = 1.0
|
anchor_top = 1.0
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
offset_bottom = -10.0
|
offset_bottom = -10.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
|
||||||
label_settings = SubResource("LabelSettings_inv")
|
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
label_settings = SubResource("LabelSettings_inv")
|
||||||
[connection signal="gui_input" from="Background" to="." method="_on_background_gui_input"]
|
|
||||||
|
|||||||
@@ -35,10 +35,8 @@ func set_hover(hovered: bool) -> void:
|
|||||||
item_box.color = Color(0.8, 0.8, 0.8, 1)
|
item_box.color = Color(0.8, 0.8, 0.8, 1)
|
||||||
|
|
||||||
func _gui_input(event: InputEvent) -> void:
|
func _gui_input(event: InputEvent) -> void:
|
||||||
print("[SLOT:%s] _gui_input: %s" % [item_id, event])
|
|
||||||
if event is InputEventMouseButton:
|
if event is InputEventMouseButton:
|
||||||
if event.button_index == 1 and event.pressed:
|
if event.button_index == 1 and event.pressed:
|
||||||
print("[SLOT:%s] emitting clicked" % item_id)
|
|
||||||
clicked.emit(item_id)
|
clicked.emit(item_id)
|
||||||
elif event.button_index == 2:
|
elif event.button_index == 2:
|
||||||
right_clicked.emit(item_id)
|
right_clicked.emit(item_id)
|
||||||
|
|||||||
@@ -1,32 +1,26 @@
|
|||||||
[gd_scene format=3 uid="uid://c7depvvxf5s6l"]
|
[gd_scene format=3 uid="uid://1esl88fgtd2p6"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://oegm753jbmam" path="res://inventory/inventory_overlay/InventorySlot.gd" id="1"]
|
[ext_resource type="Script" uid="uid://oegm753jbl9m" path="res://inventory/inventory_overlay/InventorySlot.gd" id="1"]
|
||||||
|
|
||||||
[node name="InventorySlot" type="Control" unique_id=2000000001]
|
[node name="InventorySlot" type="Control" unique_id=2000000001]
|
||||||
custom_minimum_size = Vector2(64, 64)
|
custom_minimum_size = Vector2i(64, 64)
|
||||||
layout_mode = 3
|
|
||||||
anchors_preset = 0
|
|
||||||
script = ExtResource("1")
|
script = ExtResource("1")
|
||||||
|
|
||||||
[node name="ItemBox" type="ColorRect" parent="." unique_id=2000000002]
|
[node name="ItemBox" type="ColorRect" parent="." unique_id=2000000002]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = -1
|
anchors_preset = 8
|
||||||
anchor_left = 0.062
|
anchor_left = 0.062
|
||||||
anchor_top = 0.062
|
anchor_top = 0.062
|
||||||
anchor_right = 0.938
|
anchor_right = 0.938
|
||||||
anchor_bottom = 0.938
|
anchor_bottom = 0.938
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
mouse_filter = 1
|
|
||||||
color = Color(1, 0.6, 0.2, 1)
|
color = Color(1, 0.6, 0.2, 1)
|
||||||
|
|
||||||
[node name="HoverHighlight" type="ColorRect" parent="." unique_id=2000000003]
|
[node name="HoverHighlight" type="ColorRect" parent="." unique_id=2000000003]
|
||||||
visible = false
|
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 15
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.0
|
||||||
|
anchor_top = 0.0
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
mouse_filter = 1
|
|
||||||
color = Color(1, 1, 1, 0.3)
|
color = Color(1, 1, 1, 0.3)
|
||||||
|
visible = false
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"item_id": "splash",
|
|
||||||
"name": "Splash",
|
|
||||||
"icon": "res://splash.png",
|
|
||||||
"combination_category": "potion"
|
|
||||||
}
|
|
||||||
@@ -24,7 +24,6 @@ config/icon="res://icon.png"
|
|||||||
ActionState="*res://ActionState.gd"
|
ActionState="*res://ActionState.gd"
|
||||||
CameraTransition="*res://camera_transition.tscn"
|
CameraTransition="*res://camera_transition.tscn"
|
||||||
InventoryManager="*res://inventory/InventoryManager.gd"
|
InventoryManager="*res://inventory/InventoryManager.gd"
|
||||||
McpInteractionServer="*uid://dovjioj1jyqpp"
|
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
extends Scene
|
extends Scene
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
super._ready()
|
|
||||||
var def = ItemDefinition.new()
|
|
||||||
def.id = "splash"
|
|
||||||
def.name = "Splash"
|
|
||||||
def.icon = load("res://splash.png")
|
|
||||||
def.combination_category = "potion"
|
|
||||||
InventoryManager.register_item(def)
|
|
||||||
give_item("splash")
|
|
||||||
|
|
||||||
|
|
||||||
func _on_meadow_interacted() -> void:
|
func _on_meadow_interacted() -> void:
|
||||||
$kq4_002_meadow.default_script(self)
|
$kq4_002_meadow.default_script(self)
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1 +0,0 @@
|
|||||||
uid://dovjioj1jyqpp
|
|
||||||
BIN
splash.png
LFS
BIN
splash.png
LFS
Binary file not shown.
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://cxu3klicoldpv"
|
|
||||||
path="res://.godot/imported/splash.png-929ed8a00b89ba36c51789452f874c77.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://splash.png"
|
|
||||||
dest_files=["res://.godot/imported/splash.png-929ed8a00b89ba36c51789452f874c77.ctex"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
compress/mode=0
|
|
||||||
compress/high_quality=false
|
|
||||||
compress/lossy_quality=0.7
|
|
||||||
compress/uastc_level=0
|
|
||||||
compress/rdo_quality_loss=0.0
|
|
||||||
compress/hdr_compression=1
|
|
||||||
compress/normal_map=0
|
|
||||||
compress/channel_pack=0
|
|
||||||
mipmaps/generate=false
|
|
||||||
mipmaps/limit=-1
|
|
||||||
roughness/mode=0
|
|
||||||
roughness/src_normal=""
|
|
||||||
process/channel_remap/red=0
|
|
||||||
process/channel_remap/green=1
|
|
||||||
process/channel_remap/blue=2
|
|
||||||
process/channel_remap/alpha=3
|
|
||||||
process/fix_alpha_border=true
|
|
||||||
process/premult_alpha=false
|
|
||||||
process/normal_map_invert_y=false
|
|
||||||
process/hdr_as_srgb=false
|
|
||||||
process/hdr_clamp_exposure=false
|
|
||||||
process/size_limit=0
|
|
||||||
detect_3d/compress_to=1
|
|
||||||
Reference in New Issue
Block a user