@warpgogol/forge 1.2.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warpgogol/forge",
3
- "version": "1.2.2",
3
+ "version": "2.2.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -8,6 +8,9 @@ workspace:
8
8
  dirs:
9
9
  - docs
10
10
  - scripts
11
+ - tools
12
+ - missions
13
+ - systems-cache
11
14
  files:
12
15
  - path: .gitignore
13
16
  content: |
@@ -149,6 +152,124 @@ workspace:
149
152
  console.log("deleted", p.replace(repoRoot + "/", ""));
150
153
  }
151
154
 
152
- console.log(`Cleaned ${toDelete.length} directories.`);
155
+ console.log(`Cleaned ${toDelete.length} directories.`)
156
+ - path: tools/kernel.config.ts
157
+ content: |
158
+ import { defineKernelConfig } from "@warpgogol/werkstatt/kernel/types";
159
+
160
+ export default defineKernelConfig({
161
+ name: "__PROJECT_NAME__",
162
+ description: "__PROJECT_NAME__ workshop",
163
+ moduleLoaders: {
164
+ "forge-core": async () => (await import("@warpgogol/forge/os/core")).forgeCoreModule,
165
+ "forge-rfc": async () => (await import("@warpgogol/forge/os/rfc-module")).forgeRfcModule,
166
+ "forge-adr": async () => (await import("@warpgogol/forge/os/adr-module")).forgeAdrModule,
167
+ "forge-plan": async () => (await import("@warpgogol/forge/os/plan-module")).forgePlanModule,
168
+ "forge-audit": async () => (await import("@warpgogol/forge/os/audit-module")).forgeAuditModule,
169
+ "forge-compass": async () => (await import("@warpgogol/forge/os/compass")).forgeCompassModule,
170
+ "forge-naming": async () => (await import("@warpgogol/forge/os/naming-module")).forgeNamingModule,
171
+ "forge-workflow": async () => (await import("@warpgogol/forge/os/workflow-module")).forgeWorkflowModule,
172
+ "forge-session": async () => (await import("@warpgogol/forge/os/session-module")).forgeSessionModule,
173
+ "forge-mission": async () => (await import("@warpgogol/forge/os/mission-module")).forgeMissionModule,
174
+ "forge-spec": async () => (await import("@warpgogol/forge/os/spec-module")).forgeSpecModule,
175
+ "forge-exploration": async () => (await import("@warpgogol/forge/os/exploration")).forgeExplorationModule,
176
+ "forge-program": async () => (await import("@warpgogol/forge/os/program")).forgeProgramModule,
177
+ "forge-werkstatt": async () => (await import("@warpgogol/forge/os/werkstatt")).forgeWerkstattModule,
178
+ },
179
+ });
180
+ - path: .npmrc
181
+ content: |
182
+ # @warpgogol scoped registry — replace YOUR_NPM_TOKEN with a valid npm read token
183
+ @warpgogol:registry=https://registry.npmjs.org/
184
+ //registry.npmjs.org/:_authToken=YOUR_NPM_TOKEN
185
+ # Auto-approve build scripts so operators aren't prompted during install
186
+ dangerously-allow-all-builds=true
187
+ - path: eslint.config.js
188
+ content: |
189
+ export default [
190
+ {
191
+ rules: {},
192
+ },
193
+ ];
194
+ - path: .prettierrc.mjs
195
+ content: |
196
+ export default {
197
+ semi: true,
198
+ singleQuote: false,
199
+ trailingComma: "all",
200
+ printWidth: 100,
201
+ tabWidth: 2,
202
+ };
203
+ - path: .gitattributes
204
+ content: |
205
+ # No LFS patterns for this stack
206
+ - path: hooks/pre-commit
207
+ content: |
208
+ #!/bin/sh
209
+ # Platform-scope pre-commit guard
210
+ # Runs forge validation before commits
211
+ echo "Pre-commit: running platform checks..."
212
+ pnpm exec forge run forge.validate || exit 1
213
+ - path: systems-cache/.gitkeep
214
+ content: |
215
+ # Sternsystem cache directory (RFC-0790)
216
+ # Per-system config and state files live in systems-cache/<id>/
217
+ - path: missions/.gitkeep
218
+ content: ""
219
+ - path: .forge/pinned.yaml
220
+ content: |
221
+ # Pinned foundation files (DNA-62, RFC-0733)
222
+ # Protect mode: warns on delete/move. Freeze mode: blocks modify too.
223
+ entries:
224
+ - path: tools/kernel.config.ts
225
+ mode: protect
226
+ - path: forge.yaml
227
+ mode: protect
228
+ - path: pnpm-workspace.yaml
229
+ mode: protect
230
+ - path: turbo.json
231
+ mode: protect
232
+ - path: tsconfig.base.json
233
+ mode: protect
234
+ - path: systems-cache/.gitkeep
235
+ mode: protect
236
+ - path: README.md
237
+ content: |
238
+ # __PROJECT_NAME__
239
+
240
+ A Warpgogol workshop powered by the Forge engine.
241
+
242
+ ## Prerequisites
243
+
244
+ - Node.js 24+
245
+ - pnpm 10+
246
+
247
+ ## Setup
248
+
249
+ ### 1. Configure npm token
250
+
251
+ This workshop depends on private @warpgogol packages. Edit `.npmrc` and replace `YOUR_NPM_TOKEN` with a valid npm read token:
252
+
253
+ ```sh
254
+ sed -i 's/YOUR_NPM_TOKEN/your_actual_token/' .npmrc
255
+ ```
256
+
257
+ ### 2. Install dependencies
258
+
259
+ ```sh
260
+ pnpm install
261
+ ```
262
+
263
+ ### 3. Verify the workshop
264
+
265
+ ```sh
266
+ pnpm exec forge run forge.doctor
267
+ pnpm exec forge run forge.validate
268
+ ```
269
+
270
+ ## Stack
271
+
272
+ - Engine: @warpgogol/forge
273
+ - Stack profile: forge-shell
153
274
  install:
154
275
  - pnpm add -D @warpgogol/forge prettier vitest
@@ -24,7 +24,7 @@ artifacts:
24
24
  - .cs
25
25
  - .tres
26
26
  produce:
27
- command: dotnet build ./Game.csproj
27
+ command: dotnet build
28
28
  output: bin/Debug
29
29
  validate:
30
30
  command: godot --path . --headless --quit
@@ -104,15 +104,18 @@ invariants:
104
104
  pattern: ""
105
105
  workspace:
106
106
  dirs:
107
- - games
107
+ - apps
108
108
  - packages
109
109
  - services
110
110
  - scripts
111
+ - tools
112
+ - missions
113
+ - systems-cache
111
114
  files:
112
115
  - path: pnpm-workspace.yaml
113
116
  content: |
114
117
  packages:
115
- - "games/*"
118
+ - "apps/*"
116
119
  - "packages/*"
117
120
  - "services/*"
118
121
  - path: turbo.json
@@ -155,10 +158,19 @@ workspace:
155
158
 
156
159
  # Godot
157
160
  .godot/
161
+ .godot-bin/
158
162
  bin/
159
163
  obj/
160
164
  *.user
161
165
  *.csproj.user
166
+ - path: .vscode/extensions.json
167
+ content: |
168
+ {
169
+ "recommendations": [
170
+ "ms-dotnettools.csharp",
171
+ "geequla.godot-tools"
172
+ ]
173
+ }
162
174
  - path: .github/workflows/ci.yml
163
175
  content: |
164
176
  name: CI
@@ -284,8 +296,167 @@ workspace:
284
296
  "build:check": "turbo run build:check",
285
297
  "test": "turbo run test",
286
298
  "upgrade-packages": "pnpm -r up"
299
+ },
300
+ "devDependencies": {
301
+ "typescript": "^5.7.0",
302
+ "turbo": "^2.3.0",
303
+ "prettier": "^3.4.0",
304
+ "@warpgogol/forge": "^2.2.0",
305
+ "@warpgogol/werkstatt": "^1.2.0",
306
+ "@warpgogol/werkstatt-godot": "^0.6.0"
287
307
  }
288
308
  }
309
+ - path: godot.version
310
+ content: |
311
+ # Exact Godot version for install-godot.sh (CI uses short form "4.3")
312
+ 4.3.0
313
+ - path: scripts/install-godot.sh
314
+ content: |
315
+ #!/usr/bin/env bash
316
+ set -euo pipefail
317
+
318
+ # Download and install the Godot mono build specified in godot.version
319
+ # Usage: ./scripts/install-godot.sh [--force]
320
+
321
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
322
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
323
+ VERSION="$(grep -v '^#' "$PROJECT_ROOT/godot.version" | tr -d '[:space:]')"
324
+ GODOT_DIR="$PROJECT_ROOT/.godot-bin"
325
+ GODOT_BIN="$GODOT_DIR/godot"
326
+
327
+ if [[ -x "$GODOT_BIN" ]] && [[ "$1" != "--force" ]]; then
328
+ echo "Godot $VERSION already installed at $GODOT_BIN"
329
+ echo "Use --force to reinstall."
330
+ exit 0
331
+ fi
332
+
333
+ OS="$(uname -s)"
334
+ ARCH="$(uname -m)"
335
+
336
+ case "$OS" in
337
+ Linux*) PLATFORM="linux" ;;
338
+ Darwin*) PLATFORM="osx" ;;
339
+ MINGW*|MSYS*|CYGWIN*) PLATFORM="win" ;;
340
+ *) echo "Unsupported OS: $OS"; exit 1 ;;
341
+ esac
342
+
343
+ case "$ARCH" in
344
+ x86_64|amd64) ARCH_SUFFIX="x86_64" ;;
345
+ arm64|aarch64) ARCH_SUFFIX="arm64" ;;
346
+ *) echo "Unsupported arch: $ARCH"; exit 1 ;;
347
+ esac
348
+
349
+ if [[ "$PLATFORM" == "osx" && "$ARCH_SUFFIX" == "x86_64" ]]; then
350
+ ARCH_SUFFIX="universal"
351
+ fi
352
+
353
+ if [[ "$PLATFORM" == "win" ]]; then
354
+ ZIP_NAME="Godot_v${VERSION}_mono_win64.zip"
355
+ elif [[ "$PLATFORM" == "osx" ]]; then
356
+ ZIP_NAME="Godot_v${VERSION}_mono_${PLATFORM}_${ARCH_SUFFIX}.zip"
357
+ else
358
+ ZIP_NAME="Godot_v${VERSION}_mono_${PLATFORM}_${ARCH_SUFFIX}.zip"
359
+ fi
360
+
361
+ URL="https://github.com/godotengine/godot/releases/download/v${VERSION}-stable/${ZIP_NAME}"
362
+
363
+ echo "Downloading Godot $VERSION (mono) from:"
364
+ echo " $URL"
365
+
366
+ mkdir -p "$GODOT_DIR"
367
+ TMP_ZIP="$GODOT_DIR/$ZIP_NAME"
368
+
369
+ if command -v curl &>/dev/null; then
370
+ curl -fL --progress-bar -o "$TMP_ZIP" "$URL"
371
+ elif command -v wget &>/dev/null; then
372
+ wget -q --show-progress -O "$TMP_ZIP" "$URL"
373
+ else
374
+ echo "curl or wget required — please install one"; exit 1
375
+ fi
376
+
377
+ echo "Extracting..."
378
+ if command -v unzip &>/dev/null; then
379
+ unzip -o "$TMP_ZIP" -d "$GODOT_DIR"
380
+ else
381
+ echo "unzip not found — please install unzip"; exit 1
382
+ fi
383
+ rm -f "$TMP_ZIP"
384
+
385
+ # Find the godot binary in the extracted files
386
+ if [[ "$PLATFORM" == "osx" ]]; then
387
+ # macOS: .app bundle
388
+ APP_DIR="$GODOT_DIR/Godot.app"
389
+ if [[ -d "$APP_DIR" ]]; then
390
+ ln -sf "$APP_DIR/Contents/MacOS/Godot" "$GODOT_BIN"
391
+ else
392
+ # Some versions ship a unix executable
393
+ find "$GODOT_DIR" -type f -name "Godot*" -executable | head -1 | xargs -I{} ln -sf {} "$GODOT_BIN"
394
+ fi
395
+ elif [[ "$PLATFORM" == "win" ]]; then
396
+ find "$GODOT_DIR" -type f -name "Godot*.exe" | head -1 | xargs -I{} ln -sf {} "$GODOT_BIN"
397
+ else
398
+ find "$GODOT_DIR" -type f -name "Godot*" -executable | head -1 | xargs -I{} ln -sf {} "$GODOT_BIN"
399
+ fi
400
+
401
+ chmod +x "$GODOT_BIN" 2>/dev/null || true
402
+
403
+ if [[ -x "$GODOT_BIN" || -L "$GODOT_BIN" ]]; then
404
+ echo ""
405
+ echo "Godot $VERSION installed to $GODOT_BIN"
406
+ echo "Add to PATH: export PATH=\"$GODOT_DIR:$PATH\""
407
+ else
408
+ echo "Installation completed but binary not found. Check $GODOT_DIR"
409
+ exit 1
410
+ fi
411
+ - path: scripts/run.sh
412
+ content: |
413
+ #!/usr/bin/env bash
414
+ set -euo pipefail
415
+
416
+ # Build the C# project and launch Godot with the correct --path
417
+ # Usage: ./scripts/run.sh [--editor]
418
+
419
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
420
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
421
+
422
+ # Find the game workspace (first directory under apps/ with a project.godot)
423
+ GAME_DIR=""
424
+ for dir in "$PROJECT_ROOT"/apps/*/; do
425
+ if [[ -f "${dir}project.godot" ]]; then
426
+ GAME_DIR="${dir%/}"
427
+ break
428
+ fi
429
+ done
430
+
431
+ if [[ -z "$GAME_DIR" ]]; then
432
+ echo "No Godot project found under apps/*/"; exit 1
433
+ fi
434
+
435
+ echo "Game project: $GAME_DIR"
436
+
437
+ # Kill any running Godot instances (best-effort)
438
+ pkill -f "godot.*--path" 2>/dev/null || true
439
+
440
+ # Build C# project
441
+ echo "Building C# project..."
442
+ (cd "$GAME_DIR" && dotnet build)
443
+
444
+ # Find godot binary: prefer .godot-bin, then PATH
445
+ GODOT_BIN=""
446
+ if [[ -x "$PROJECT_ROOT/.godot-bin/godot" ]]; then
447
+ GODOT_BIN="$PROJECT_ROOT/.godot-bin/godot"
448
+ elif command -v godot &>/dev/null; then
449
+ GODOT_BIN="godot"
450
+ else
451
+ echo "Godot not found. Run ./scripts/install-godot.sh first."; exit 1
452
+ fi
453
+
454
+ echo "Launching Godot..."
455
+ if [[ "$1" == "--editor" ]]; then
456
+ exec "$GODOT_BIN" --path "$GAME_DIR" --editor
457
+ else
458
+ exec "$GODOT_BIN" --path "$GAME_DIR"
459
+ fi
289
460
  - path: scripts/clean.mjs
290
461
  content: |
291
462
  import { readdir, rm } from "node:fs/promises";
@@ -325,10 +496,178 @@ workspace:
325
496
  }
326
497
 
327
498
  console.log(`Cleaned ${toDelete.length} directories.`);
499
+ - path: tools/kernel.config.ts
500
+ content: |
501
+ import { defineKernelConfig } from "@warpgogol/werkstatt/kernel/types";
502
+ import { werkstattGodotPlugin } from "@warpgogol/werkstatt-godot";
503
+
504
+ export default defineKernelConfig({
505
+ name: "__PROJECT_NAME__",
506
+ description: "__PROJECT_NAME__ workshop",
507
+ moduleLoaders: {
508
+ "forge-core": async () => (await import("@warpgogol/forge/os/core")).forgeCoreModule,
509
+ "forge-rfc": async () => (await import("@warpgogol/forge/os/rfc-module")).forgeRfcModule,
510
+ "forge-adr": async () => (await import("@warpgogol/forge/os/adr-module")).forgeAdrModule,
511
+ "forge-plan": async () => (await import("@warpgogol/forge/os/plan-module")).forgePlanModule,
512
+ "forge-audit": async () => (await import("@warpgogol/forge/os/audit-module")).forgeAuditModule,
513
+ "forge-compass": async () => (await import("@warpgogol/forge/os/compass")).forgeCompassModule,
514
+ "forge-naming": async () => (await import("@warpgogol/forge/os/naming-module")).forgeNamingModule,
515
+ "forge-workflow": async () => (await import("@warpgogol/forge/os/workflow-module")).forgeWorkflowModule,
516
+ "forge-session": async () => (await import("@warpgogol/forge/os/session-module")).forgeSessionModule,
517
+ "forge-mission": async () => (await import("@warpgogol/forge/os/mission-module")).forgeMissionModule,
518
+ "forge-spec": async () => (await import("@warpgogol/forge/os/spec-module")).forgeSpecModule,
519
+ "forge-exploration": async () => (await import("@warpgogol/forge/os/exploration")).forgeExplorationModule,
520
+ "forge-program": async () => (await import("@warpgogol/forge/os/program")).forgeProgramModule,
521
+ "forge-werkstatt": async () => (await import("@warpgogol/forge/os/werkstatt")).forgeWerkstattModule,
522
+ mission: async () => (await import("@warpgogol/werkstatt/mission-module")).createMissionModule(),
523
+ sternsystem: async () => (await import("@warpgogol/werkstatt/sternsystem-module")).createSternsystemModule(),
524
+ bordbuch: async () => (await import("@warpgogol/werkstatt/bordbuch-module")).createBordbuchModule(),
525
+ "artifact-store": async () => (await import("@warpgogol/werkstatt/artifact-store-module")).createArtifactStoreModule(),
526
+ release: async () => (await import("@warpgogol/werkstatt/release-module")).createReleaseModule(),
527
+ leitstand: async () => (await import("@warpgogol/werkstatt/leitstand-module")).createLeitstandModule(),
528
+ notausgang: async () => (await import("@warpgogol/werkstatt/notausgang-module")).createNotausgangModule(),
529
+ evidence: async () => (await import("@warpgogol/werkstatt/evidence-module")).createEvidenceModule(),
530
+ "werkstatt-plugin": async () => (await import("@warpgogol/werkstatt/os/werkstatt-plugin-module")).forgeWerkstattPluginModule,
531
+ "werkstatt-autonomy": async () => (await import("@warpgogol/werkstatt/os/werkstatt-autonomy-module")).werkstattAutonomyModule,
532
+ "__PROJECT_NAME__-plugin": async () => werkstattGodotPlugin,
533
+ },
534
+ });
535
+ - path: .npmrc
536
+ content: |
537
+ # @warpgogol scoped registry — replace YOUR_NPM_TOKEN with a valid npm read token
538
+ @warpgogol:registry=https://registry.npmjs.org/
539
+ //registry.npmjs.org/:_authToken=YOUR_NPM_TOKEN
540
+ # Auto-approve build scripts so operators aren't prompted during install
541
+ dangerously-allow-all-builds=true
542
+ - path: eslint.config.js
543
+ content: |
544
+ export default [
545
+ {
546
+ rules: {},
547
+ },
548
+ ];
549
+ - path: .prettierrc.mjs
550
+ content: |
551
+ export default {
552
+ semi: true,
553
+ singleQuote: false,
554
+ trailingComma: "all",
555
+ printWidth: 100,
556
+ tabWidth: 2,
557
+ };
558
+ - path: .gitattributes
559
+ content: |
560
+ # No LFS patterns for this stack
561
+ - path: hooks/pre-commit
562
+ content: |
563
+ #!/bin/sh
564
+ # Platform-scope pre-commit guard
565
+ # Runs werkstatt autonomy and plugin validation before commits
566
+ echo "Pre-commit: running platform checks..."
567
+ pnpm exec werkstatt run werkstatt.autonomy.validate || exit 1
568
+ pnpm exec werkstatt run werkstatt.plugin.validate || exit 1
569
+ - path: systems-cache/.gitkeep
570
+ content: |
571
+ # Sternsystem cache directory (RFC-0790)
572
+ # Per-system config and state files live in systems-cache/<id>/
573
+ - path: missions/.gitkeep
574
+ content: ""
575
+ - path: .forge/pinned.yaml
576
+ content: |
577
+ # Pinned foundation files (DNA-62, RFC-0733)
578
+ # Protect mode: warns on delete/move. Freeze mode: blocks modify too.
579
+ entries:
580
+ - path: tools/kernel.config.ts
581
+ mode: protect
582
+ - path: forge.yaml
583
+ mode: protect
584
+ - path: pnpm-workspace.yaml
585
+ mode: protect
586
+ - path: turbo.json
587
+ mode: protect
588
+ - path: tsconfig.base.json
589
+ mode: protect
590
+ - path: systems-cache/.gitkeep
591
+ mode: protect
592
+ - path: godot.version
593
+ mode: protect
594
+ - path: README.md
595
+ content: |
596
+ # __PROJECT_NAME__
597
+
598
+ A Warpgogol workshop powered by the Werkstatt engine and the @warpgogol/werkstatt-godot plugin.
599
+
600
+ ## Prerequisites
601
+
602
+ - Node.js 24+
603
+ - pnpm 10+
604
+ - .NET SDK 8+
605
+ - Godot 4.x (with .NET support)
606
+ - On Windows: Git Bash or WSL (for shell scripts)
607
+
608
+ ## Setup
609
+
610
+ ### 1. Configure npm token
611
+
612
+ This workshop depends on private @warpgogol packages. Edit `.npmrc` and replace `YOUR_NPM_TOKEN` with a valid npm read token:
613
+
614
+ ```sh
615
+ sed -i 's/YOUR_NPM_TOKEN/your_actual_token/' .npmrc
616
+ ```
617
+
618
+ ### 2. Install dependencies
619
+
620
+ ```sh
621
+ pnpm install
622
+ ```
623
+
624
+ ### 3. Verify the workshop
625
+
626
+ ```sh
627
+ pnpm exec werkstatt run forge.doctor
628
+ pnpm exec werkstatt run werkstatt.plugin.validate
629
+ pnpm exec werkstatt run werkstatt.autonomy.validate
630
+ ```
631
+
632
+ ## Running the game
633
+
634
+ ### Quick start
635
+
636
+ ```sh
637
+ # Install the correct Godot version (mono build)
638
+ ./scripts/install-godot.sh
639
+
640
+ # Build and run the game
641
+ ./scripts/run.sh
642
+ ```
643
+
644
+ Or open in the editor:
645
+
646
+ ```sh
647
+ ./scripts/run.sh --editor
648
+ ```
649
+
650
+ You should see "Hello, my-game!" in the game window.
651
+
652
+ ### Manual setup (if you already have Godot installed)
653
+
654
+ Ensure you have Godot 4.3 (mono) installed and on your PATH, then:
655
+
656
+ ```sh
657
+ cd apps/my-game
658
+ dotnet build
659
+ godot --path .
660
+ ```
661
+
662
+ ## Stack
663
+
664
+ - Engine: @warpgogol/werkstatt
665
+ - Plugin: @warpgogol/werkstatt-godot
666
+ - Stack profile: godot-csharp
328
667
  install:
329
- - pnpm add -D typescript turbo @warpgogol/forge @warpgogol/werkstatt @warpgogol/werkstatt-godot prettier
668
+ - pnpm install
330
669
  firstWorkspace:
331
- path: games/my-game
670
+ path: apps/my-game
332
671
  files:
333
672
  - path: project.godot
334
673
  content: |
@@ -347,7 +686,14 @@ firstWorkspace:
347
686
  project/assembly_name="my-game"
348
687
  - path: Game.csproj
349
688
  content: |
350
- <Project Sdk="Godot.NET.Sdk">
689
+ <Project Sdk="Godot.NET.Sdk/4.3.0">
690
+ <PropertyGroup>
691
+ <AssemblyName>my-game</AssemblyName>
692
+ </PropertyGroup>
693
+ </Project>
694
+ - path: Directory.Build.props
695
+ content: |
696
+ <Project>
351
697
  <PropertyGroup>
352
698
  <TargetFramework>net8.0</TargetFramework>
353
699
  <TargetFramework Condition="'$(OS)' == 'Windows_NT'">net8.0-windows</TargetFramework>
@@ -356,15 +702,101 @@ firstWorkspace:
356
702
  <Nullable>enable</Nullable>
357
703
  </PropertyGroup>
358
704
  </Project>
705
+ - path: global.json
706
+ content: |
707
+ {
708
+ "sdk": {
709
+ "version": "8.0.100",
710
+ "rollForward": "latestFeature"
711
+ }
712
+ }
713
+ - path: Game.sln
714
+ content: |
715
+ Microsoft Visual Studio Solution File, Format Version 12.00
716
+ # Visual Studio Version 17
717
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "my-game", "Game.csproj", "{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}"
718
+ EndProject
719
+ Global
720
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
721
+ Debug|Any CPU = Debug|Any CPU
722
+ Release|Any CPU = Release|Any CPU
723
+ EndGlobalSection
724
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
725
+ {AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
726
+ {AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
727
+ {AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
728
+ {AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}.Release|Any CPU.Build.0 = Release|Any CPU
729
+ EndGlobalSection
730
+ EndGlobal
731
+ - path: export_presets.cfg
732
+ content: |
733
+ [preset.0]
734
+
735
+ name="Web"
736
+ platform="Web"
737
+ runnable=true
738
+ dedicated_server=false
739
+ custom_features=""
740
+ export_filter="all_resources"
741
+ include_filter=""
742
+ exclude_filter=""
743
+ export_path="bin/web/index.html"
744
+ encryption_include_filters=""
745
+ encryption_exclude_filters=""
746
+ encrypt_export=false
747
+
748
+ [preset.0.options]
749
+
750
+ html/export_icon=true
751
+ html/custom_html_shell=""
752
+ html/head_include=""
753
+ - path: omnisharp.json
754
+ content: |
755
+ {
756
+ "FormattingOptions": {
757
+ "UseTabs": true,
758
+ "TabSize": 4,
759
+ "IndentationSize": 4,
760
+ "NewLine": "\n"
761
+ },
762
+ "RoslynExtensionsOptions": {
763
+ "EnableAnalyzersSupport": true
764
+ }
765
+ }
766
+ - path: .vscode/settings.json
767
+ content: |
768
+ {
769
+ "files.associations": {
770
+ "*.tscn": "gdscript",
771
+ "*.tres": "gdscript",
772
+ "*.gd": "gdscript"
773
+ },
774
+ "search.exclude": {
775
+ "**/.godot": true,
776
+ "**/bin": true,
777
+ "**/obj": true
778
+ },
779
+ "files.watcherExclude": {
780
+ "**/.godot/**": true,
781
+ "**/bin/**": true,
782
+ "**/obj/**": true
783
+ }
784
+ }
359
785
  - path: Scenes/Main.tscn
360
786
  content: |
361
- [gd_scene load_steps=1 format=3 uid="uid://main_scene"]
787
+ [gd_scene load_steps=2 format=3 uid="uid://main_scene"]
362
788
 
363
- [ext_resource type="Script" path="res://Scripts/Main.cs" id="1"]
364
789
  [ext_resource type="Script" path="res://Scripts/Main.cs" id="1_script"]
365
790
 
366
791
  [node name="Main" type="Node2D"]
367
792
  script = ExtResource("1_script")
793
+
794
+ [node name="HelloLabel" type="Label" parent="."]
795
+ offset_left = 200.0
796
+ offset_top = 200.0
797
+ offset_right = 600.0
798
+ offset_bottom = 300.0
799
+ text = "Hello, my-game!"
368
800
  - path: Scripts/Main.cs
369
801
  content: |
370
802
  using Godot;
@@ -383,6 +815,31 @@ firstWorkspace:
383
815
  obj/
384
816
  *.user
385
817
  *.csproj.user
818
+ - path: icon.svg
819
+ content: |
820
+ <svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
821
+ <rect width="128" height="128" rx="16" fill="#478cbf"/>
822
+ <text x="64" y="80" font-family="Arial, sans-serif" font-size="48" font-weight="bold" fill="white" text-anchor="middle">G</text>
823
+ </svg>
824
+ - path: .editorconfig
825
+ content: |
826
+ root = true
827
+
828
+ [*]
829
+ charset = utf-8
830
+ end_of_line = lf
831
+ insert_final_newline = true
832
+ trim_trailing_whitespace = true
833
+
834
+ [*.{cs,csproj}]
835
+ indent_style = tab
836
+ indent_size = 4
837
+
838
+ [*.{tscn,tres,godot,cfg}]
839
+ indent_style = tab
840
+ indent_size = 4
841
+
842
+ [*.{md,txt}]
843
+ trim_trailing_whitespace = false
386
844
  install:
387
- - dotnet new sln --name my-game
388
- - dotnet sln add Game.csproj
845
+ - dotnet restore