Update docs/VSCODE_INTEGRATION.md
This commit is contained in:
@@ -1,261 +1,118 @@
|
|||||||
# VS Code Integration Guide for Godot Development
|
# VS Code Setup for Godot Development
|
||||||
|
|
||||||
## Overview
|
## Why VS Code?
|
||||||
|
|
||||||
This guide provides comprehensive instructions for setting up Visual Studio Code as your primary editor for Godot game development. VS Code offers superior C# support, excellent Git integration, and powerful extensions that significantly enhance the Godot development experience compared to the built-in editor.
|
Better IntelliSense, Git integration, extensions, debugging, and multi-project support compared to Godot's built-in editor.
|
||||||
|
|
||||||
## Why Use VS Code with Godot?
|
|
||||||
|
|
||||||
### Advantages of VS Code
|
|
||||||
|
|
||||||
- **Superior IntelliSense**: Advanced code completion, error detection, and refactoring tools
|
|
||||||
- **Powerful Extensions**: Rich ecosystem of extensions for C#, Git, and game development
|
|
||||||
- **Better Git Integration**: Built-in Git support with visual diff tools and GitLens integration
|
|
||||||
- **Multi-Project Support**: Work with multiple libraries and projects simultaneously
|
|
||||||
- **Debugging Support**: Integrated debugging capabilities for C# code
|
|
||||||
- **Customizable Interface**: Themes, layouts, and keyboard shortcuts
|
|
||||||
- **Fast Performance**: Lightweight and responsive compared to full IDEs
|
|
||||||
|
|
||||||
### What You'll Get
|
|
||||||
|
|
||||||
- Full project context when opening files from Godot
|
|
||||||
- IntelliSense for your custom libraries and Godot APIs
|
|
||||||
- Seamless navigation between files and projects
|
|
||||||
- Integrated terminal for Git operations
|
|
||||||
- Side-by-side editing of multiple files
|
|
||||||
- Advanced search and replace across entire projects
|
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- Godot v4.5.1+ with C# support enabled
|
- Godot v4.5.1+ (C# support)
|
||||||
- .NET 8.0+ installed
|
- .NET 8.0+
|
||||||
- Visual Studio Code installed
|
- Visual Studio Code
|
||||||
- Basic familiarity with VS Code interface
|
|
||||||
|
|
||||||
## Initial Setup and Configuration
|
## Setup
|
||||||
|
|
||||||
### Step 1: Install VS Code Extensions
|
### 1. Install Extensions
|
||||||
|
|
||||||
Install these essential extensions for optimal Godot development:
|
|
||||||
|
|
||||||
#### Required Extensions
|
|
||||||
|
|
||||||
|
**Required:**
|
||||||
```bash
|
```bash
|
||||||
# Core C# support
|
|
||||||
code --install-extension ms-dotnettools.csdevkit
|
code --install-extension ms-dotnettools.csdevkit
|
||||||
code --install-extension ms-dotnettools.csharp
|
code --install-extension ms-dotnettools.csharp
|
||||||
|
|
||||||
# Godot integration
|
|
||||||
code --install-extension geequlim.godot-tools
|
code --install-extension geequlim.godot-tools
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Highly Recommended Extensions
|
**Recommended:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Enhanced development experience
|
|
||||||
code --install-extension visualstudioexptteam.vscodeintellicode
|
code --install-extension visualstudioexptteam.vscodeintellicode
|
||||||
code --install-extension eamodio.gitlens
|
code --install-extension eamodio.gitlens
|
||||||
code --install-extension ms-vscode.vscode-json
|
|
||||||
|
|
||||||
# Code quality and formatting
|
|
||||||
code --install-extension ms-dotnettools.vscode-dotnet-runtime
|
|
||||||
code --install-extension streetsidesoftware.code-spell-checker
|
code --install-extension streetsidesoftware.code-spell-checker
|
||||||
|
|
||||||
# Productivity enhancements
|
|
||||||
code --install-extension ms-vscode.powershell
|
|
||||||
code --install-extension ms-vscode-remote.remote-repositories
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Optional but Useful Extensions
|
### 2. Configure Godot
|
||||||
|
|
||||||
```bash
|
**Editor Settings:**
|
||||||
# Visual enhancements
|
1. **Editor → Editor Settings → Network → Language Server**
|
||||||
code --install-extension pkief.material-icon-theme
|
- Enable **Use Language Server**
|
||||||
code --install-extension zhuangtongfa.material-theme
|
|
||||||
|
|
||||||
# Additional tools
|
2. **Text Editor → External**
|
||||||
code --install-extension formulahendry.auto-rename-tag
|
|
||||||
code --install-extension ms-vscode.hexeditor
|
|
||||||
code --install-extension redhat.vscode-yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: Configure Godot to Use VS Code
|
|
||||||
|
|
||||||
#### Basic External Editor Setup
|
|
||||||
|
|
||||||
1. **Open Godot Editor Settings**
|
|
||||||
- Go to **Editor → Editor Settings**
|
|
||||||
- Navigate to **Network → Language Server**
|
|
||||||
- Set **Use Language Server** to **On**
|
|
||||||
|
|
||||||
2. **Configure External Editor**
|
|
||||||
- Navigate to **Text Editor → External**
|
|
||||||
- Check **Use External Editor**
|
- Check **Use External Editor**
|
||||||
- Set **Exec Path** to VS Code installation:
|
- **Exec Path:**
|
||||||
- **macOS**: `/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code`
|
- macOS: `/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code`
|
||||||
- **Windows**: `C:\Users\[Username]\AppData\Local\Programs\Microsoft VS Code\Code.exe`
|
- Windows: `C:\Users\[Username]\AppData\Local\Programs\Microsoft VS Code\Code.exe`
|
||||||
- **Linux**: `/usr/bin/code` or `/snap/bin/code`
|
- Linux: `/usr/bin/code` or just `code`
|
||||||
- **Alternative**: Just `code` if you have the command in your PATH
|
|
||||||
|
|
||||||
### Step 3: Fix Project Context Issue
|
### 3. Fix Project Context (Choose One)
|
||||||
|
|
||||||
The default setup opens individual files without project context. Here are several solutions:
|
**Option A - Simple Flags (Easiest):**
|
||||||
|
```
|
||||||
|
{project} --goto {file}:{line}:{col}
|
||||||
|
```
|
||||||
|
|
||||||
#### Solution A: Create Smart Wrapper Script (Recommended)
|
**Option B - Wrapper Script (Best):**
|
||||||
|
|
||||||
Create a script that ensures VS Code always opens with full project context:
|
**macOS/Linux** (`~/GameDev/vscode-godot.sh`):
|
||||||
|
|
||||||
**For macOS/Linux:**
|
|
||||||
```bash
|
```bash
|
||||||
# Create the wrapper script
|
|
||||||
cat > ~/GameDev/vscode-godot.sh << 'EOF'
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Get the file path passed by Godot
|
|
||||||
FILE_PATH="$1"
|
FILE_PATH="$1"
|
||||||
LINE_NUMBER="$2"
|
LINE_NUMBER="$2"
|
||||||
COLUMN_NUMBER="$3"
|
COLUMN_NUMBER="$3"
|
||||||
|
|
||||||
# Find the project directory by looking for project.godot
|
|
||||||
PROJECT_DIR=$(dirname "$FILE_PATH")
|
PROJECT_DIR=$(dirname "$FILE_PATH")
|
||||||
while [[ "$PROJECT_DIR" != "/" && ! -f "$PROJECT_DIR/project.godot" ]]; do
|
while [[ "$PROJECT_DIR" != "/" && ! -f "$PROJECT_DIR/project.godot" ]]; do
|
||||||
PROJECT_DIR=$(dirname "$PROJECT_DIR")
|
PROJECT_DIR=$(dirname "$PROJECT_DIR")
|
||||||
done
|
done
|
||||||
|
|
||||||
# If we found a project.godot, open that directory with the file
|
|
||||||
if [[ -f "$PROJECT_DIR/project.godot" ]]; then
|
if [[ -f "$PROJECT_DIR/project.godot" ]]; then
|
||||||
echo "Opening project: $PROJECT_DIR"
|
|
||||||
code "$PROJECT_DIR" --goto "$FILE_PATH:$LINE_NUMBER:$COLUMN_NUMBER"
|
code "$PROJECT_DIR" --goto "$FILE_PATH:$LINE_NUMBER:$COLUMN_NUMBER"
|
||||||
else
|
else
|
||||||
echo "No project.godot found, opening file directory"
|
|
||||||
code "$(dirname "$FILE_PATH")" --goto "$FILE_PATH:$LINE_NUMBER:$COLUMN_NUMBER"
|
code "$(dirname "$FILE_PATH")" --goto "$FILE_PATH:$LINE_NUMBER:$COLUMN_NUMBER"
|
||||||
fi
|
fi
|
||||||
EOF
|
|
||||||
|
|
||||||
# Make it executable
|
|
||||||
chmod +x ~/GameDev/vscode-godot.sh
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**For Windows (PowerShell):**
|
**Windows** (`~/GameDev/vscode-godot.ps1`):
|
||||||
```powershell
|
```powershell
|
||||||
# Create vscode-godot.ps1 in your GameDev directory
|
param($FilePath, $LineNumber = "1", $ColumnNumber = "1")
|
||||||
@'
|
|
||||||
param(
|
|
||||||
[string]$FilePath,
|
|
||||||
[string]$LineNumber = "1",
|
|
||||||
[string]$ColumnNumber = "1"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Find project directory
|
|
||||||
$ProjectDir = Split-Path $FilePath -Parent
|
$ProjectDir = Split-Path $FilePath -Parent
|
||||||
while (($ProjectDir -ne [System.IO.Path]::GetPathRoot($ProjectDir)) -and
|
while (($ProjectDir -ne [System.IO.Path]::GetPathRoot($ProjectDir)) -and
|
||||||
(-not (Test-Path (Join-Path $ProjectDir "project.godot")))) {
|
(-not (Test-Path (Join-Path $ProjectDir "project.godot")))) {
|
||||||
$ProjectDir = Split-Path $ProjectDir -Parent
|
$ProjectDir = Split-Path $ProjectDir -Parent
|
||||||
}
|
}
|
||||||
|
|
||||||
# Open VS Code with project context
|
|
||||||
if (Test-Path (Join-Path $ProjectDir "project.godot")) {
|
if (Test-Path (Join-Path $ProjectDir "project.godot")) {
|
||||||
Write-Host "Opening project: $ProjectDir"
|
|
||||||
& code $ProjectDir --goto "$FilePath`:$LineNumber`:$ColumnNumber"
|
& code $ProjectDir --goto "$FilePath`:$LineNumber`:$ColumnNumber"
|
||||||
} else {
|
} else {
|
||||||
Write-Host "No project.godot found, opening file directory"
|
|
||||||
& code (Split-Path $FilePath -Parent) --goto "$FilePath`:$LineNumber`:$ColumnNumber"
|
& code (Split-Path $FilePath -Parent) --goto "$FilePath`:$LineNumber`:$ColumnNumber"
|
||||||
}
|
}
|
||||||
'@ | Out-File -FilePath "~/GameDev/vscode-godot.ps1" -Encoding UTF8
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Configure Godot to Use the Wrapper Script
|
Make script executable: `chmod +x ~/GameDev/vscode-godot.sh`
|
||||||
|
|
||||||
In Godot's **Editor Settings → Text Editor → External**:
|
Set **Exec Flags**: `{file} {line} {col}`
|
||||||
- **Exec Path**: `/Users/[your-username]/GameDev/vscode-godot.sh` (or path to .ps1 on Windows)
|
|
||||||
- **Exec Flags**: `{file} {line} {col}`
|
|
||||||
|
|
||||||
#### Solution B: Simple Project Opening
|
## Project Configuration
|
||||||
|
|
||||||
Alternative simpler approach in **Exec Flags**:
|
### .vscode/settings.json
|
||||||
```
|
```json
|
||||||
{project} --goto {file}:{line}:{col}
|
|
||||||
```
|
|
||||||
|
|
||||||
This opens the project directory and navigates to the specific file.
|
|
||||||
|
|
||||||
## Project-Specific VS Code Configuration
|
|
||||||
|
|
||||||
### Step 1: Create Workspace Settings
|
|
||||||
|
|
||||||
For each Godot project, create `.vscode/settings.json`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Navigate to your project
|
|
||||||
cd ~/GameDev/projects/test-game
|
|
||||||
|
|
||||||
# Create .vscode directory
|
|
||||||
mkdir -p .vscode
|
|
||||||
|
|
||||||
# Create comprehensive settings
|
|
||||||
cat > .vscode/settings.json << 'EOF'
|
|
||||||
{
|
{
|
||||||
// .NET and C# Configuration
|
"dotnet.defaultSolution": "YourGame.sln",
|
||||||
"dotnet.defaultSolution": "TestGame.sln",
|
|
||||||
"omnisharp.enableEditorConfigSupport": true,
|
|
||||||
"omnisharp.enableImportCompletion": true,
|
|
||||||
"omnisharp.enableRoslynAnalyzers": true,
|
|
||||||
"omnisharp.useModernNet": true,
|
"omnisharp.useModernNet": true,
|
||||||
|
"godot_tools.editor_path": "/path/to/Godot",
|
||||||
|
|
||||||
// Godot Integration
|
|
||||||
"godot_tools.editor_path": "~/GameDev/Godot/Godot.app/Contents/MacOS/Godot",
|
|
||||||
"godot_tools.gdscript_lsp_server_port": 6005,
|
|
||||||
|
|
||||||
// File Management
|
|
||||||
"files.exclude": {
|
"files.exclude": {
|
||||||
"**/.godot": true,
|
|
||||||
"**/.import": true,
|
|
||||||
"**/bin": true,
|
|
||||||
"**/obj": true,
|
|
||||||
"**/*.tmp": true
|
|
||||||
},
|
|
||||||
|
|
||||||
// Window Behavior
|
|
||||||
"window.openFilesInNewWindow": "off",
|
|
||||||
"window.openFoldersInNewWindow": "off",
|
|
||||||
"workbench.editor.revealIfOpen": true,
|
|
||||||
|
|
||||||
// Search Configuration
|
|
||||||
"search.exclude": {
|
|
||||||
"**/.godot": true,
|
"**/.godot": true,
|
||||||
"**/bin": true,
|
"**/bin": true,
|
||||||
"**/obj": true
|
"**/obj": true
|
||||||
},
|
},
|
||||||
|
|
||||||
// File Associations
|
"window.openFilesInNewWindow": "off",
|
||||||
"files.associations": {
|
|
||||||
"*.cs": "csharp",
|
|
||||||
"*.tscn": "godot-scene",
|
|
||||||
"*.tres": "godot-resource",
|
|
||||||
"*.gd": "gdscript"
|
|
||||||
},
|
|
||||||
|
|
||||||
// Code Formatting
|
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"editor.formatOnType": true,
|
"git.detectSubmodules": true
|
||||||
"csharp.format.enable": true,
|
|
||||||
|
|
||||||
// Git Integration
|
|
||||||
"git.autoRepositoryDetection": "subFolders",
|
|
||||||
"git.detectSubmodules": true,
|
|
||||||
|
|
||||||
// Terminal Configuration
|
|
||||||
"terminal.integrated.cwd": "${workspaceFolder}"
|
|
||||||
}
|
}
|
||||||
EOF
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 2: Create Launch Configuration
|
### .vscode/launch.json
|
||||||
|
```json
|
||||||
Set up debugging and task running with `.vscode/launch.json`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cat > .vscode/launch.json << 'EOF'
|
|
||||||
{
|
{
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
@@ -264,505 +121,95 @@ cat > .vscode/launch.json << 'EOF'
|
|||||||
"type": "godot",
|
"type": "godot",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"project": "${workspaceFolder}",
|
"project": "${workspaceFolder}",
|
||||||
"port": 6007,
|
"port": 6007
|
||||||
"debugServer": 6008,
|
|
||||||
"preLaunchTask": "build"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Launch Game",
|
|
||||||
"type": "godot",
|
|
||||||
"request": "launch",
|
|
||||||
"project": "${workspaceFolder}",
|
|
||||||
"port": 6007,
|
|
||||||
"debugServer": 6008,
|
|
||||||
"executable": "~/GameDev/Godot/Godot.app/Contents/MacOS/Godot",
|
|
||||||
"executableArguments": [
|
|
||||||
"--path",
|
|
||||||
"${workspaceFolder}"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Launch Main Scene",
|
|
||||||
"type": "godot",
|
|
||||||
"request": "launch",
|
|
||||||
"project": "${workspaceFolder}",
|
|
||||||
"port": 6007,
|
|
||||||
"debugServer": 6008,
|
|
||||||
"executable": "~/GameDev/Godot/Godot.app/Contents/MacOS/Godot",
|
|
||||||
"executableArguments": [
|
|
||||||
"--path",
|
|
||||||
"${workspaceFolder}",
|
|
||||||
"Scenes/Main.tscn"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
EOF
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 3: Configure Build Tasks
|
### .vscode/tasks.json
|
||||||
|
```json
|
||||||
Create `.vscode/tasks.json` for build automation:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cat > .vscode/tasks.json << 'EOF'
|
|
||||||
{
|
{
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
"label": "build",
|
"label": "build",
|
||||||
"type": "dotnet",
|
"command": "dotnet",
|
||||||
"task": "build",
|
"type": "process",
|
||||||
"group": {
|
"args": ["build"],
|
||||||
"kind": "build",
|
|
||||||
"isDefault": true
|
|
||||||
},
|
|
||||||
"presentation": {
|
|
||||||
"echo": true,
|
|
||||||
"reveal": "silent",
|
|
||||||
"focus": false,
|
|
||||||
"panel": "shared"
|
|
||||||
},
|
|
||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "clean",
|
|
||||||
"type": "dotnet",
|
|
||||||
"task": "clean",
|
|
||||||
"group": "build",
|
|
||||||
"presentation": {
|
|
||||||
"echo": true,
|
|
||||||
"reveal": "always",
|
|
||||||
"focus": false,
|
|
||||||
"panel": "shared"
|
|
||||||
},
|
|
||||||
"problemMatcher": "$msCompile"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "restore",
|
|
||||||
"type": "dotnet",
|
|
||||||
"task": "restore",
|
|
||||||
"group": "build",
|
|
||||||
"presentation": {
|
|
||||||
"echo": true,
|
|
||||||
"reveal": "silent",
|
|
||||||
"focus": false,
|
|
||||||
"panel": "shared"
|
|
||||||
},
|
|
||||||
"problemMatcher": []
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
EOF
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Multi-Project Workspace Setup
|
### .editorconfig (Optional)
|
||||||
|
|
||||||
### Creating a Master Workspace
|
|
||||||
|
|
||||||
For working with multiple projects and libraries simultaneously:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Create a master workspace file
|
|
||||||
cat > ~/GameDev/godot-development.code-workspace << 'EOF'
|
|
||||||
{
|
|
||||||
"folders": [
|
|
||||||
{
|
|
||||||
"name": "🎮 Test Game",
|
|
||||||
"path": "./projects/test-game"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🎮 Puzzle Game",
|
|
||||||
"path": "./projects/puzzle-game"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "📚 Utilities Library",
|
|
||||||
"path": "./libraries/utilities"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "📚 Audio Manager Library",
|
|
||||||
"path": "./libraries/audio-manager"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"settings": {
|
|
||||||
// Global workspace settings
|
|
||||||
"files.exclude": {
|
|
||||||
"**/.godot": true,
|
|
||||||
"**/.import": true,
|
|
||||||
"**/bin": true,
|
|
||||||
"**/obj": true
|
|
||||||
},
|
|
||||||
"search.exclude": {
|
|
||||||
"**/.godot": true,
|
|
||||||
"**/bin": true,
|
|
||||||
"**/obj": true
|
|
||||||
},
|
|
||||||
"git.detectSubmodules": true,
|
|
||||||
"git.autoRepositoryDetection": "subFolders",
|
|
||||||
|
|
||||||
// Default to first project's solution
|
|
||||||
"dotnet.defaultSolution": "./projects/test-game/TestGame.sln"
|
|
||||||
},
|
|
||||||
"extensions": {
|
|
||||||
"recommendations": [
|
|
||||||
"ms-dotnettools.csdevkit",
|
|
||||||
"ms-dotnettools.csharp",
|
|
||||||
"geequlim.godot-tools",
|
|
||||||
"eamodio.gitlens",
|
|
||||||
"visualstudioexptteam.vscodeintellicode"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
### Opening the Workspace
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Open the master workspace
|
|
||||||
code ~/GameDev/godot-development.code-workspace
|
|
||||||
|
|
||||||
# Or open individual projects
|
|
||||||
cd ~/GameDev/projects/test-game
|
|
||||||
code .
|
|
||||||
```
|
|
||||||
|
|
||||||
## Development Workflows
|
|
||||||
|
|
||||||
### Daily Development Routine
|
|
||||||
|
|
||||||
1. **Start Your Day**
|
|
||||||
```bash
|
|
||||||
# Open your workspace
|
|
||||||
code ~/GameDev/godot-development.code-workspace
|
|
||||||
|
|
||||||
# Or open specific project
|
|
||||||
cd ~/GameDev/projects/test-game
|
|
||||||
code .
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Working with Files**
|
|
||||||
- **From Godot**: Double-click scripts → Opens in VS Code with full project context
|
|
||||||
- **From VS Code**: Use `Cmd/Ctrl + P` to quickly open files
|
|
||||||
- **Navigation**: Use `Cmd/Ctrl + Click` on symbols to jump to definitions
|
|
||||||
|
|
||||||
3. **Building and Testing**
|
|
||||||
- **Quick Build**: `Cmd/Ctrl + Shift + P` → "Tasks: Run Build Task"
|
|
||||||
- **From Godot**: Use Godot's Build button (recommended for final builds)
|
|
||||||
- **Debug**: Use F5 in VS Code (if debugging is set up)
|
|
||||||
|
|
||||||
### Working with Libraries
|
|
||||||
|
|
||||||
#### Editing Library Code
|
|
||||||
|
|
||||||
1. **Navigate to library**:
|
|
||||||
```bash
|
|
||||||
cd ~/GameDev/libraries/utilities
|
|
||||||
code .
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Make changes** with full IntelliSense support
|
|
||||||
|
|
||||||
3. **Test changes**:
|
|
||||||
- Open the library project in Godot
|
|
||||||
- Or test within a game project that uses the library
|
|
||||||
|
|
||||||
4. **Commit and push changes**:
|
|
||||||
```bash
|
|
||||||
git add .
|
|
||||||
git commit -m "Add new utility function"
|
|
||||||
git push origin main
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Updating Libraries in Projects
|
|
||||||
|
|
||||||
1. **Update from VS Code terminal**:
|
|
||||||
```bash
|
|
||||||
# In your game project
|
|
||||||
git submodule update --remote Libraries/utilities
|
|
||||||
git add Libraries/utilities
|
|
||||||
git commit -m "Update utilities library"
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Reload project in Godot** to pick up changes
|
|
||||||
|
|
||||||
### Git Integration Workflows
|
|
||||||
|
|
||||||
#### Using VS Code's Built-in Git
|
|
||||||
|
|
||||||
1. **Source Control Panel** (`Cmd/Ctrl + Shift + G`):
|
|
||||||
- View changes across all repositories
|
|
||||||
- Stage and commit changes
|
|
||||||
- See submodule status
|
|
||||||
|
|
||||||
2. **Git Commands**:
|
|
||||||
- `Cmd/Ctrl + Shift + P` → "Git: " for all Git commands
|
|
||||||
- Built-in diff viewer for file changes
|
|
||||||
- Integrated merge conflict resolution
|
|
||||||
|
|
||||||
#### Advanced Git with GitLens
|
|
||||||
|
|
||||||
1. **Blame Information**: See who changed each line of code
|
|
||||||
2. **File History**: View complete file change history
|
|
||||||
3. **Repository Insights**: Visualize branch structure and commits
|
|
||||||
4. **Interactive Rebase**: Advanced Git operations through UI
|
|
||||||
|
|
||||||
## Advanced Features and Tips
|
|
||||||
|
|
||||||
### IntelliSense and Code Navigation
|
|
||||||
|
|
||||||
#### Maximizing IntelliSense Performance
|
|
||||||
|
|
||||||
1. **Ensure proper project references** in `.csproj` files
|
|
||||||
2. **Build solution regularly** to update IntelliSense cache
|
|
||||||
3. **Use "Reload Window"** if IntelliSense stops working:
|
|
||||||
- `Cmd/Ctrl + Shift + P` → "Developer: Reload Window"
|
|
||||||
|
|
||||||
#### Navigation Shortcuts
|
|
||||||
|
|
||||||
- **Go to Definition**: `F12` or `Cmd/Ctrl + Click`
|
|
||||||
- **Go to References**: `Shift + F12`
|
|
||||||
- **Go to Symbol**: `Cmd/Ctrl + Shift + O`
|
|
||||||
- **Go to File**: `Cmd/Ctrl + P`
|
|
||||||
- **Command Palette**: `Cmd/Ctrl + Shift + P`
|
|
||||||
|
|
||||||
### Code Formatting and Quality
|
|
||||||
|
|
||||||
#### Auto-Formatting Setup
|
|
||||||
|
|
||||||
1. **Install C# extension** with formatting support
|
|
||||||
2. **Configure format on save** in settings.json
|
|
||||||
3. **Use EditorConfig** for consistent formatting across team
|
|
||||||
|
|
||||||
Create `.editorconfig` in project root:
|
|
||||||
```ini
|
```ini
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
|
||||||
|
|
||||||
[*.cs]
|
[*.cs]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
[*.{csproj,props,targets}]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Code Quality Tools
|
## Multi-Project Workspace
|
||||||
|
|
||||||
1. **Enable Roslyn Analyzers** in settings.json
|
|
||||||
2. **Use SonarLint extension** for additional code quality checks
|
|
||||||
3. **Configure spell checking** for comments and strings
|
|
||||||
|
|
||||||
### Debugging Setup
|
|
||||||
|
|
||||||
#### Enable Debugging in Godot
|
|
||||||
|
|
||||||
1. **In Godot Project Settings**:
|
|
||||||
- Go to **Debug → Settings**
|
|
||||||
- Enable **Remote Port** (usually 6007)
|
|
||||||
- Enable **Remote Host** (usually 127.0.0.1)
|
|
||||||
|
|
||||||
2. **In VS Code**:
|
|
||||||
- Set breakpoints in your C# code
|
|
||||||
- Press `F5` to start debugging
|
|
||||||
- Godot will connect to VS Code debugger
|
|
||||||
|
|
||||||
#### Debugging Workflow
|
|
||||||
|
|
||||||
1. **Set breakpoints** in VS Code
|
|
||||||
2. **Start debugging** with F5
|
|
||||||
3. **Play scene in Godot**
|
|
||||||
4. **Debug in VS Code** when breakpoints hit
|
|
||||||
|
|
||||||
### Customization and Themes
|
|
||||||
|
|
||||||
#### Recommended Themes for Game Development
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Dark themes optimized for long coding sessions
|
|
||||||
code --install-extension zhuangtongfa.material-theme
|
|
||||||
code --install-extension github.github-vscode-theme
|
|
||||||
code --install-extension dracula-theme.theme-dracula
|
|
||||||
|
|
||||||
# Icon themes for better file recognition
|
|
||||||
code --install-extension pkief.material-icon-theme
|
|
||||||
code --install-extension vscode-icons-team.vscode-icons
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Custom Keybindings
|
|
||||||
|
|
||||||
Create custom keybindings for Godot workflows in `keybindings.json`:
|
|
||||||
|
|
||||||
|
Create `your-workspace.code-workspace`:
|
||||||
```json
|
```json
|
||||||
[
|
|
||||||
{
|
{
|
||||||
"key": "cmd+shift+g",
|
"folders": [
|
||||||
"command": "godot.runProject",
|
{"path": "projects/main-game"},
|
||||||
"when": "resourceExtname == '.cs'"
|
{"path": "libraries/utilities"},
|
||||||
},
|
{"path": "libraries/extensions"}
|
||||||
{
|
],
|
||||||
"key": "cmd+shift+b",
|
"settings": {
|
||||||
"command": "workbench.action.tasks.build"
|
"omnisharp.useModernNet": true,
|
||||||
|
"files.exclude": {
|
||||||
|
"**/.godot": true,
|
||||||
|
"**/bin": true,
|
||||||
|
"**/obj": true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Shortcuts
|
||||||
|
|
||||||
|
- **Go to Definition**: `F12`
|
||||||
|
- **Find References**: `Shift + F12`
|
||||||
|
- **Go to Symbol**: `Cmd/Ctrl + Shift + O`
|
||||||
|
- **Command Palette**: `Cmd/Ctrl + Shift + P`
|
||||||
|
- **Search Files**: `Cmd/Ctrl + P`
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### Common Issues and Solutions
|
**IntelliSense not working:**
|
||||||
|
- Reload window: `Cmd/Ctrl + Shift + P` → "Developer: Reload Window"
|
||||||
|
- Rebuild: `dotnet build`
|
||||||
|
|
||||||
#### VS Code Opens Individual Files Instead of Project
|
**Project opens as single file:**
|
||||||
|
- Use wrapper script or set Exec Flags to `{project} --goto {file}:{line}:{col}`
|
||||||
|
|
||||||
**Problem**: Clicking scripts in Godot opens single files without project context.
|
**Submodules not recognized:**
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. **Use the wrapper script** (recommended approach above)
|
|
||||||
2. **Keep project always open** in VS Code
|
|
||||||
3. **Modify Exec Flags** to `{project} --goto {file}:{line}:{col}`
|
|
||||||
|
|
||||||
#### IntelliSense Not Working
|
|
||||||
|
|
||||||
**Problem**: No code completion or error detection.
|
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. **Check C# extension is installed** and enabled
|
|
||||||
2. **Verify .csproj references** are correct
|
|
||||||
3. **Reload VS Code window**: `Cmd/Ctrl + Shift + P` → "Developer: Reload Window"
|
|
||||||
4. **Rebuild solution**: `Cmd/Ctrl + Shift + P` → "Tasks: Run Build Task"
|
|
||||||
5. **Check OmniSharp output** in Output panel
|
|
||||||
|
|
||||||
#### Submodule Libraries Not Recognized
|
|
||||||
|
|
||||||
**Problem**: Libraries in submodules don't have IntelliSense.
|
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. **Verify submodules are initialized**:
|
|
||||||
```bash
|
```bash
|
||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
```
|
```
|
||||||
2. **Check project references** in `.csproj`
|
Add to settings: `"git.detectSubmodules": true`
|
||||||
3. **Rebuild solution** after submodule updates
|
|
||||||
|
|
||||||
#### Git Integration Issues
|
**Performance issues:**
|
||||||
|
- Exclude build folders in settings
|
||||||
**Problem**: Git operations not working correctly with submodules.
|
- Disable unused extensions
|
||||||
|
- Run: `code --max-memory=8192`
|
||||||
**Solutions**:
|
|
||||||
1. **Enable submodule detection** in settings:
|
|
||||||
```json
|
|
||||||
"git.detectSubmodules": true
|
|
||||||
```
|
|
||||||
2. **Use terminal** for complex Git operations
|
|
||||||
3. **Check repository status** in each submodule directory
|
|
||||||
|
|
||||||
#### Build Errors in VS Code
|
|
||||||
|
|
||||||
**Problem**: Build fails in VS Code but works in Godot.
|
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. **Check .NET SDK version** matches Godot requirements
|
|
||||||
2. **Use Godot's build system** as authoritative
|
|
||||||
3. **Clean and rebuild**:
|
|
||||||
```bash
|
|
||||||
dotnet clean
|
|
||||||
dotnet restore
|
|
||||||
dotnet build
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Performance Issues
|
|
||||||
|
|
||||||
**Problem**: VS Code becomes slow with large projects.
|
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. **Exclude build directories** in settings.json
|
|
||||||
2. **Disable unnecessary extensions**
|
|
||||||
3. **Increase VS Code memory limit**:
|
|
||||||
```bash
|
|
||||||
code --max-memory=8192
|
|
||||||
```
|
|
||||||
|
|
||||||
### Diagnostic Commands
|
|
||||||
|
|
||||||
#### Check Extension Status
|
|
||||||
```bash
|
|
||||||
# List installed extensions
|
|
||||||
code --list-extensions
|
|
||||||
|
|
||||||
# Check if specific extensions are installed
|
|
||||||
code --list-extensions | grep -E "(csdevkit|godot-tools|csharp)"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Verify Project Setup
|
|
||||||
```bash
|
|
||||||
# Check submodule status
|
|
||||||
git submodule status
|
|
||||||
|
|
||||||
# Verify project can build
|
|
||||||
dotnet build
|
|
||||||
|
|
||||||
# Check Godot project configuration
|
|
||||||
grep -A 5 "\[dotnet\]" project.godot
|
|
||||||
```
|
|
||||||
|
|
||||||
## Best Practices
|
## Best Practices
|
||||||
|
|
||||||
### Project Organization
|
- Keep consistent project structure
|
||||||
|
- Commit often with clear messages
|
||||||
1. **Consistent Structure**: Use the same folder layout across all projects
|
- Use feature branches
|
||||||
2. **Clear Naming**: Use descriptive names for files and folders
|
- Exclude build folders (.godot, bin, obj)
|
||||||
3. **Separate Concerns**: Keep game logic, UI, and utilities in separate folders
|
- Enable format on save
|
||||||
4. **Document Code**: Use XML documentation comments for public APIs
|
- Document public APIs
|
||||||
|
|
||||||
### Code Quality
|
|
||||||
|
|
||||||
1. **Follow C# Conventions**: Use PascalCase for classes, camelCase for methods
|
|
||||||
2. **Use Meaningful Names**: Avoid abbreviations and unclear variable names
|
|
||||||
3. **Keep Methods Small**: Single responsibility principle
|
|
||||||
4. **Comment Complex Logic**: Explain why, not what
|
|
||||||
|
|
||||||
### Git Workflow
|
|
||||||
|
|
||||||
1. **Commit Often**: Small, focused commits are easier to review
|
|
||||||
2. **Descriptive Messages**: Use clear commit messages
|
|
||||||
3. **Branch Strategy**: Use feature branches for new development
|
|
||||||
4. **Test Before Pushing**: Ensure code builds and runs before pushing
|
|
||||||
|
|
||||||
### Performance
|
|
||||||
|
|
||||||
1. **Exclude Build Folders**: Keep VS Code fast by excluding unnecessary directories
|
|
||||||
2. **Regular Cleanup**: Clean build artifacts regularly
|
|
||||||
3. **Monitor Extensions**: Disable unused extensions
|
|
||||||
4. **Use Workspace Settings**: Project-specific settings improve performance
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
This setup provides a powerful, integrated development environment for Godot game development with C#. The combination of VS Code's advanced editing capabilities with Godot's excellent game engine creates an optimal workflow for both solo developers and teams.
|
|
||||||
|
|
||||||
### Key Benefits Achieved
|
|
||||||
|
|
||||||
- **Full Project Context**: No more single-file editing
|
|
||||||
- **Superior IntelliSense**: Complete code completion and error detection
|
|
||||||
- **Seamless Git Integration**: Visual diff tools and submodule support
|
|
||||||
- **Multi-Project Support**: Work with libraries and games simultaneously
|
|
||||||
- **Professional Debugging**: Set breakpoints and inspect variables
|
|
||||||
- **Extensible Environment**: Customize with thousands of available extensions
|
|
||||||
|
|
||||||
### Next Steps
|
|
||||||
|
|
||||||
1. **Implement the wrapper script** for proper project opening
|
|
||||||
2. **Configure your first project** with the provided settings
|
|
||||||
3. **Install recommended extensions**
|
|
||||||
4. **Create a multi-project workspace** for library development
|
|
||||||
5. **Customize themes and keybindings** to your preferences
|
|
||||||
|
|
||||||
Remember to update this documentation as your workflow evolves and new VS Code features become available!
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Keep this documentation updated as VS Code and Godot continue to evolve.*
|
|
||||||
|
|||||||
Reference in New Issue
Block a user