diff --git a/Downloads/docker-compose.yml b/Downloads/docker-compose.yml new file mode 100644 index 0000000..4e803ab --- /dev/null +++ b/Downloads/docker-compose.yml @@ -0,0 +1,208 @@ +services: + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + group_add: + - "993" # render group for VAAPI hardware acceleration + + ports: + - "8096:8096" # HTTP web UI + - "8920:8920" # HTTPS + - "7359:7359/udp" # Network discovery + - "1900:1900/udp" # DLNA + + expose: + - "8096" + + environment: + - PUID=1000 + - PGID=1000 + - TZ=Australia/Perth + + volumes: + # Config on NVMe (fast) + - ./config:/config + - ./cache:/cache + + # Media libraries (read-only for safety) + - "/mnt/media/Movies:/media/movies:ro" + - "/mnt/media/TV Shows:/media/tv-shows:ro" + - "/mnt/media/Anime:/media/anime:ro" + - "/mnt/media/Kids TV:/media/kids-tv:ro" + - "/mnt/media/Kids Movies:/media/kids-movies:ro" + - "/tank/home-videos:/media/home-videos:ro" + - "/tank/videos:/media/home-videos:ro" + - "/tank/photos:/media/home-photos:ro" + + devices: + # Hardware transcoding (Vega graphics) + - /dev/dri:/dev/dri + + networks: + - jellyfin-net + + qbittorrent: + image: linuxserver/qbittorrent:latest + container_name: qbittorrent + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + WEBUI_PORT: 8090 + volumes: + - ~/.docker_volumes/qbittorrent/config:/config + - /mnt/media/downloads:/downloads + - /mnt/media/anime:/animeq + ports: + - "8090:8090" + - "6881:6881" + - "6881:6881/udp" + expose: + - "8090" + restart: unless-stopped + deploy: + resources: + limits: + memory: 1G + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + sonarr: + image: linuxserver/sonarr:latest + container_name: sonarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + DOCKER_MODS: "linuxserver/mods:universal-package-install" + INSTALL_PACKAGES: "ffmpeg" + volumes: + - ~/.docker_volumes/sonarr/config:/config + - /mnt/media/Anime:/tv + - ~/media/downloads:/downloads + ports: + - "8989:8989" + expose: + - "8989" + restart: unless-stopped + depends_on: + - qbittorrent + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + prowlarr: + image: linuxserver/prowlarr:latest + container_name: prowlarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/prowlarr/config:/config + ports: + - "9696:9696" + expose: + - "9696" + restart: unless-stopped + depends_on: + - qbittorrent + - sonarr + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9696/ping"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: jellyseerr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/jellyseerr/config:/app/config + ports: + - "5055:5055" + expose: + - "5055" + restart: unless-stopped + depends_on: + - jellyfin + - sonarr + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5055/api/v1/status"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + caddy: + build: + context: . + dockerfile_inline: | + FROM caddy:builder AS builder + RUN xcaddy build --with github.com/caddy-dns/namedotcom + FROM caddy:latest + COPY --from=builder /usr/bin/caddy /usr/bin/caddy + container_name: caddy + restart: unless-stopped + environment: + - NAMEDOTCOM_USERNAME= + - NAMEDOTCOM_TOKEN=your_api_token + ports: + - "443:443" + - "443:443/udp" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - ./caddy_data:/data + - ./caddy_config:/config + networks: + - jellyfin-net + + crowdsec: + image: crowdsecurity/crowdsec:latest + container_name: crowdsec + restart: unless-stopped + environment: + - COLLECTIONS=crowdsecurity/linux crowdsecurity/caddy crowdsecurity/base-httping + volumes: + - /var/log:/var/log:ro + - ./crowdsec_data:/var/lib/crowdsec/data + - ./crowdsec_config:/etc/crowdsec + networks: + - jellyfin-net + +networks: + jellyfin-net: + driver: bridge diff --git a/apps-flatpak.txt b/apps-flatpak.txt index 2e69076..774293b 100644 --- a/apps-flatpak.txt +++ b/apps-flatpak.txt @@ -2,6 +2,7 @@ app.zen_browser.zen art.taunoerik.tauno-monitor cc.arduino.IDE2 cc.arduino.arduinoide +com.bitwarden.desktop com.getmailspring.Mailspring com.spotify.Client com.unity.UnityHub diff --git a/dot_config/JetBrains/CLion2025.3/app-internal-state.db b/dot_config/JetBrains/CLion2025.3/app-internal-state.db new file mode 100644 index 0000000..6354468 Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/app-internal-state.db differ diff --git a/dot_config/JetBrains/CLion2025.3/bundled_plugins.txt b/dot_config/JetBrains/CLion2025.3/bundled_plugins.txt new file mode 100644 index 0000000..894f31f --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/bundled_plugins.txt @@ -0,0 +1,121 @@ +AngularJS|JavaScript Frameworks and Tools +Docker|Deployment +Git4Idea|Version Controls +HtmlTools|HTML and XML +JSIntentionPowerPack|JavaScript Frameworks and Tools +JavaScriptDebugger|JavaScript Frameworks and Tools +JavaScript|JavaScript Frameworks and Tools +Karma|JavaScript Frameworks and Tools +NodeJS|JavaScript Frameworks and Tools +PerforceDirectPlugin|Version Controls +PythonCore|null +SerialPortMonitor|Embedded Development +Subversion|Version Controls +XPathView|HTML and XML +com.deadlock.scsyntax|JavaScript Frameworks and Tools +com.intellij.cidr.compiler.custom|Languages +com.intellij.cidr.lang.clangd|null +com.intellij.cidr.parallelStacks|null +com.intellij.clion-compdb|Build Tools +com.intellij.clion-makefile|Build Tools +com.intellij.clion.embedded|Embedded Development +com.intellij.clion.meson|Build Tools +com.intellij.clion.performanceTesting|null +com.intellij.clion.west|Build Tools +com.intellij.clion|null +com.intellij.cmake|Build Tools +com.intellij.completion.ml.ranking|Local AI/ML Tools +com.intellij.configurationScript|IDE Settings +com.intellij.copyright|IDE Settings +com.intellij.cpp-diagnostics|null +com.intellij.css|Style Sheets +com.intellij.database|Database +com.intellij.dev|Platform Development +com.intellij.diagram|Other Tools +com.intellij.dts|null +com.intellij.ja|IDE Localization +com.intellij.jsonpath|Languages +com.intellij.ko|IDE Localization +com.intellij.lang.qml|Languages +com.intellij.mcpServer|AI-Powered +com.intellij.modules.json|Languages +com.intellij.nativeDebug|null +com.intellij.platform.images|null +com.intellij.plugins.all_hallows_eve.colorscheme|UI +com.intellij.plugins.blackboard.colorscheme|UI +com.intellij.plugins.cidr.solarized.colorscheme|UI +com.intellij.plugins.cobalt.colorscheme|UI +com.intellij.plugins.dawm.colorscheme|UI +com.intellij.plugins.eclipsekeymap|Keymap +com.intellij.plugins.espresso.colorscheme|UI +com.intellij.plugins.github.colorscheme|UI +com.intellij.plugins.monokai.colorscheme|UI +com.intellij.plugins.netbeanskeymap|Keymap +com.intellij.plugins.qtcreatorkeymap|Keymap +com.intellij.plugins.rails_casts.colorscheme|UI +com.intellij.plugins.resharperkeymap|Keymap +com.intellij.plugins.twilight.colorscheme|UI +com.intellij.plugins.vibrantink.colorscheme|UI +com.intellij.plugins.visualstudiokeymap|Keymap +com.intellij.plugins.warmneon.colorscheme|UI +com.intellij.plugins.webcomponents|JavaScript Frameworks and Tools +com.intellij.plugins.xcode.colorscheme|UI +com.intellij.plugins.xcodekeymap|Keymap +com.intellij.qt|null +com.intellij.react|JavaScript Frameworks and Tools +com.intellij.searcheverywhere.ml|Local AI/ML Tools +com.intellij.settingsSync|IDE Settings +com.intellij.stylelint|JavaScript Frameworks and Tools +com.intellij.tailwindcss|Style Sheets +com.intellij.tasks.timeTracking|Other Tools +com.intellij.tasks|Other Tools +com.intellij.zh|IDE Localization +com.intellij|null +com.jetbrains.clion.plugins.packageManager|Deployment +com.jetbrains.codeWithMe|Remote Development +com.jetbrains.gateway|Remote Development +com.jetbrains.linkerscript|Languages +com.jetbrains.performancePlugin.async|Platform Development +com.jetbrains.performancePlugin|Platform Development +com.jetbrains.plugins.ini4idea|Languages +com.jetbrains.plugins.webDeployment|Deployment +com.jetbrains.remoteDevServer|Remote Development +com.jetbrains.restClient|Microservices +com.jetbrains.rust|null +com.jetbrains.sh|Languages +com.jetbrains.station|Remote Development +hg4idea|Version Controls +intellij.clion.embedded.platformio|Embedded Development +intellij.git.commit.modal|Version Controls +intellij.grid.plugin|null +intellij.nextjs|JavaScript Frameworks and Tools +intellij.platform.ijent.impl|Remote Development +intellij.prettierJS|JavaScript Frameworks and Tools +intellij.vitejs|JavaScript Frameworks and Tools +intellij.webpack|JavaScript Frameworks and Tools +name.kropp.intellij.makefile|Languages +org.intellij.plugins.markdown|Languages +org.intellij.plugins.postcss|Style Sheets +org.intellij.qodana|null +org.jetbrains.completion.full.line|Local AI/ML Tools +org.jetbrains.plugins.clion.ctest|Test Tools +org.jetbrains.plugins.clion.radler|null +org.jetbrains.plugins.clion.test.boost|Test Tools +org.jetbrains.plugins.clion.test.catch|Test Tools +org.jetbrains.plugins.clion.test.doctest|Test Tools +org.jetbrains.plugins.clion.test.google|Test Tools +org.jetbrains.plugins.docker.gateway|Remote Development +org.jetbrains.plugins.github|Version Controls +org.jetbrains.plugins.gitlab|Version Controls +org.jetbrains.plugins.less|Style Sheets +org.jetbrains.plugins.node-remote-interpreter|JavaScript Frameworks and Tools +org.jetbrains.plugins.remote-run|Remote Development +org.jetbrains.plugins.sass|Style Sheets +org.jetbrains.plugins.terminal|Other Tools +org.jetbrains.plugins.textmate|Languages +org.jetbrains.plugins.vue|JavaScript Frameworks and Tools +org.jetbrains.plugins.yaml|Languages +org.toml.lang|Languages +tanvd.grazi|Languages +training|null +tslint|JavaScript Frameworks and Tools diff --git a/dot_config/JetBrains/CLion2025.3/clion.key b/dot_config/JetBrains/CLion2025.3/clion.key new file mode 100644 index 0000000..a616696 Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/clion.key differ diff --git a/dot_config/JetBrains/CLion2025.3/clion64.vmoptions b/dot_config/JetBrains/CLion2025.3/clion64.vmoptions new file mode 100644 index 0000000..7f53e3a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/clion64.vmoptions @@ -0,0 +1,5 @@ +-Xmx1925m +-Dide.managed.by.toolbox=/home/breadway/Downloads/jetbrains-toolbox-3.2.0.65851/bin/jetbrains-toolbox +-Dtoolbox.notification.token=faf37c92-f1e7-4a46-b8c0-fdf6ffa8776d +-Dtoolbox.notification.portFile=/home/breadway/.cache/JetBrains/Toolbox/ports/1805ca97-ee47-4a11-9160-a1b382f7ebd7.port +-Didea.suppressed.plugins.set.selector=radler \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/codestyles/Default.xml b/dot_config/JetBrains/CLion2025.3/codestyles/Default.xml new file mode 100644 index 0000000..6c5e74b --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/codestyles/Default.xml @@ -0,0 +1,100 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/disabled_plugins.txt b/dot_config/JetBrains/CLion2025.3/disabled_plugins.txt new file mode 100644 index 0000000..b088ee3 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/disabled_plugins.txt @@ -0,0 +1 @@ +com.intellij.cidr.lang diff --git a/dot_config/JetBrains/CLion2025.3/early-access-registry.txt b/dot_config/JetBrains/CLion2025.3/early-access-registry.txt new file mode 100644 index 0000000..eaf6f21 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/early-access-registry.txt @@ -0,0 +1,10 @@ +i18n.locale + +ide.experimental.ui +true +ide.experimental.ui.inter.font +false +idea.plugins.compatible.build + +switched.from.classic.to.islands +false diff --git a/dot_config/JetBrains/CLion2025.3/empty_nova.txt b/dot_config/JetBrains/CLion2025.3/empty_nova.txt new file mode 100644 index 0000000..e69de29 diff --git a/dot_config/JetBrains/CLion2025.3/empty_splash-subscription-mode.txt b/dot_config/JetBrains/CLion2025.3/empty_splash-subscription-mode.txt new file mode 100644 index 0000000..e69de29 diff --git a/dot_config/JetBrains/CLion2025.3/options/Clang-Tidy.xml b/dot_config/JetBrains/CLion2025.3/options/Clang-Tidy.xml new file mode 100644 index 0000000..e0f1bd7 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/Clang-Tidy.xml @@ -0,0 +1,817 @@ + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/CommonFeedbackSurveyService.xml b/dot_config/JetBrains/CLion2025.3/options/CommonFeedbackSurveyService.xml new file mode 100644 index 0000000..e81b461 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/CommonFeedbackSurveyService.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/ConversationToolStoreService.xml b/dot_config/JetBrains/CLion2025.3/options/ConversationToolStoreService.xml new file mode 100644 index 0000000..d98f137 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/ConversationToolStoreService.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/DontShowAgainFeedbackService.xml b/dot_config/JetBrains/CLion2025.3/options/DontShowAgainFeedbackService.xml new file mode 100644 index 0000000..52bca8f --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/DontShowAgainFeedbackService.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/EventLogAllowedList.xml b/dot_config/JetBrains/CLion2025.3/options/EventLogAllowedList.xml new file mode 100644 index 0000000..ecac6ae --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/EventLogAllowedList.xml @@ -0,0 +1,22 @@ + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/PerfProfiler.xml b/dot_config/JetBrains/CLion2025.3/options/PerfProfiler.xml new file mode 100644 index 0000000..4eda18a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/PerfProfiler.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/RadFeedbackService.xml b/dot_config/JetBrains/CLion2025.3/options/RadFeedbackService.xml new file mode 100644 index 0000000..326173a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/RadFeedbackService.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/actionSummary.xml b/dot_config/JetBrains/CLion2025.3/options/actionSummary.xml new file mode 100644 index 0000000..5c4b569 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/actionSummary.xml @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/advancedSettings.xml b/dot_config/JetBrains/CLion2025.3/options/advancedSettings.xml new file mode 100644 index 0000000..5aa9b14 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/advancedSettings.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/baseRefactoring.xml b/dot_config/JetBrains/CLion2025.3/options/baseRefactoring.xml new file mode 100644 index 0000000..dd208be --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/baseRefactoring.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/colors.scheme.xml b/dot_config/JetBrains/CLion2025.3/options/colors.scheme.xml new file mode 100644 index 0000000..c1e0a9a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/colors.scheme.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/console-font.xml b/dot_config/JetBrains/CLion2025.3/options/console-font.xml new file mode 100644 index 0000000..2c67ad2 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/console-font.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/cppRuleManager.xml b/dot_config/JetBrains/CLion2025.3/options/cppRuleManager.xml new file mode 100644 index 0000000..d1b8288 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/cppRuleManager.xml @@ -0,0 +1,16 @@ + + + + std::* + + + boost::* + + + Catch::* + + + testing::* + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/csvSettings.xml b/dot_config/JetBrains/CLion2025.3/options/csvSettings.xml new file mode 100644 index 0000000..c0a15b2 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/csvSettings.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/dailyLocalStatistics.xml b/dot_config/JetBrains/CLion2025.3/options/dailyLocalStatistics.xml new file mode 100644 index 0000000..1d54330 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/dailyLocalStatistics.xml @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/databaseDrivers.xml b/dot_config/JetBrains/CLion2025.3/options/databaseDrivers.xml new file mode 100644 index 0000000..18bb29e --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/databaseDrivers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/databaseSettings.xml b/dot_config/JetBrains/CLion2025.3/options/databaseSettings.xml new file mode 100644 index 0000000..7daa415 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/databaseSettings.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/debugger.xml b/dot_config/JetBrains/CLion2025.3/options/debugger.xml new file mode 100644 index 0000000..8fd0533 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/debugger.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/diff.xml b/dot_config/JetBrains/CLion2025.3/options/diff.xml new file mode 100644 index 0000000..c679db1 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/diff.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/editor-font.xml b/dot_config/JetBrains/CLion2025.3/options/editor-font.xml new file mode 100644 index 0000000..2a546c4 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/editor-font.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/editor.xml b/dot_config/JetBrains/CLion2025.3/options/editor.xml new file mode 100644 index 0000000..edee924 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/editor.xml @@ -0,0 +1,67 @@ + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/features.usage.statistics.xml b/dot_config/JetBrains/CLion2025.3/options/features.usage.statistics.xml new file mode 100644 index 0000000..a7df3bf --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/features.usage.statistics.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/filetypes.xml b/dot_config/JetBrains/CLion2025.3/options/filetypes.xml new file mode 100644 index 0000000..8c5264c --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/filetypes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/find.xml b/dot_config/JetBrains/CLion2025.3/options/find.xml new file mode 100644 index 0000000..d2a6057 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/find.xml @@ -0,0 +1,9 @@ + + + *.css + *.html + *.xml + *.cmake + *..txt + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/github-copilot.local.xml b/dot_config/JetBrains/CLion2025.3/options/github-copilot.local.xml new file mode 100644 index 0000000..bc6ad0e --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/github-copilot.local.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/github-copilot.xml b/dot_config/JetBrains/CLion2025.3/options/github-copilot.xml new file mode 100644 index 0000000..bddae8c --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/github-copilot.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/github.xml b/dot_config/JetBrains/CLion2025.3/options/github.xml new file mode 100644 index 0000000..2f74c56 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/github.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/gitlab.xml b/dot_config/JetBrains/CLion2025.3/options/gitlab.xml new file mode 100644 index 0000000..1fa6ec9 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/gitlab.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/ide-features-trainer.xml b/dot_config/JetBrains/CLion2025.3/options/ide-features-trainer.xml new file mode 100644 index 0000000..4d93ed3 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/ide-features-trainer.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/ide.general.local.xml b/dot_config/JetBrains/CLion2025.3/options/ide.general.local.xml new file mode 100644 index 0000000..22930d0 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/ide.general.local.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/ide.general.xml b/dot_config/JetBrains/CLion2025.3/options/ide.general.xml new file mode 100644 index 0000000..169435c --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/ide.general.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/inline.factors.completion.xml b/dot_config/JetBrains/CLion2025.3/options/inline.factors.completion.xml new file mode 100644 index 0000000..72ef21a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/inline.factors.completion.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/log-categories.xml b/dot_config/JetBrains/CLion2025.3/options/log-categories.xml new file mode 100644 index 0000000..3ff0f01 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/log-categories.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/notifications.xml b/dot_config/JetBrains/CLion2025.3/options/notifications.xml new file mode 100644 index 0000000..a3ec03a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/notifications.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/other.xml b/dot_config/JetBrains/CLion2025.3/options/other.xml new file mode 100644 index 0000000..2234c08 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/other.xml @@ -0,0 +1,73 @@ + + {} + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/path.macros.xml b/dot_config/JetBrains/CLion2025.3/options/path.macros.xml new file mode 100644 index 0000000..244ff3a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/path.macros.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/profilerRunConfigurations.xml b/dot_config/JetBrains/CLion2025.3/options/profilerRunConfigurations.xml new file mode 100644 index 0000000..47515e7 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/profilerRunConfigurations.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/project.default.xml b/dot_config/JetBrains/CLion2025.3/options/project.default.xml new file mode 100644 index 0000000..cb95b73 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/project.default.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/proxy.settings.xml b/dot_config/JetBrains/CLion2025.3/options/proxy.settings.xml new file mode 100644 index 0000000..b98ef7c --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/proxy.settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/pycharm-job-survey-service.xml b/dot_config/JetBrains/CLion2025.3/options/pycharm-job-survey-service.xml new file mode 100644 index 0000000..b8da133 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/pycharm-job-survey-service.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/recentProjects.xml b/dot_config/JetBrains/CLion2025.3/options/recentProjects.xml new file mode 100644 index 0000000..9a53044 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/recentProjects.xml @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/runner.layout.xml b/dot_config/JetBrains/CLion2025.3/options/runner.layout.xml new file mode 100644 index 0000000..36f7b3e --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/runner.layout.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/rust.feedback.xml b/dot_config/JetBrains/CLion2025.3/options/rust.feedback.xml new file mode 100644 index 0000000..3a06d86 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/rust.feedback.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/settingsSync.xml b/dot_config/JetBrains/CLion2025.3/options/settingsSync.xml new file mode 100644 index 0000000..6c9eb82 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/settingsSync.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/sshRecentConnections.v2.xml b/dot_config/JetBrains/CLion2025.3/options/sshRecentConnections.v2.xml new file mode 100644 index 0000000..0ab9433 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/sshRecentConnections.v2.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/sshRecentConnectionsHost.xml b/dot_config/JetBrains/CLion2025.3/options/sshRecentConnectionsHost.xml new file mode 100644 index 0000000..d921474 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/sshRecentConnectionsHost.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/terminal-font.xml b/dot_config/JetBrains/CLion2025.3/options/terminal-font.xml new file mode 100644 index 0000000..f2d6543 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/terminal-font.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/terminal.xml b/dot_config/JetBrains/CLion2025.3/options/terminal.xml new file mode 100644 index 0000000..093f759 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/terminal.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/textmate.xml b/dot_config/JetBrains/CLion2025.3/options/textmate.xml new file mode 100644 index 0000000..32b9320 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/textmate.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/trace_license_storage.xml b/dot_config/JetBrains/CLion2025.3/options/trace_license_storage.xml new file mode 100644 index 0000000..b401f4a --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/trace_license_storage.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/trusted-paths.xml b/dot_config/JetBrains/CLion2025.3/options/trusted-paths.xml new file mode 100644 index 0000000..e0da57c --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/trusted-paths.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/ui.lnf.xml b/dot_config/JetBrains/CLion2025.3/options/ui.lnf.xml new file mode 100644 index 0000000..585ca57 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/ui.lnf.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/updates.xml b/dot_config/JetBrains/CLion2025.3/options/updates.xml new file mode 100644 index 0000000..bc3abb8 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/updates.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/usage.statistics.xml b/dot_config/JetBrains/CLion2025.3/options/usage.statistics.xml new file mode 100644 index 0000000..d440092 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/usage.statistics.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/web-types-npm-loader.xml b/dot_config/JetBrains/CLion2025.3/options/web-types-npm-loader.xml new file mode 100644 index 0000000..25c3b60 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/web-types-npm-loader.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/window.layouts.xml b/dot_config/JetBrains/CLion2025.3/options/window.layouts.xml new file mode 100644 index 0000000..593471c --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/window.layouts.xml @@ -0,0 +1,93 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/options/window.state.xml b/dot_config/JetBrains/CLion2025.3/options/window.state.xml new file mode 100644 index 0000000..16c1dab --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/options/window.state.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/plugin_PCWMP.license b/dot_config/JetBrains/CLion2025.3/plugin_PCWMP.license new file mode 100644 index 0000000..a616696 Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/plugin_PCWMP.license differ diff --git a/dot_config/JetBrains/CLion2025.3/resharper-host/CultureOptions b/dot_config/JetBrains/CLion2025.3/resharper-host/CultureOptions new file mode 100644 index 0000000..ce0dc71 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/resharper-host/CultureOptions @@ -0,0 +1 @@ +{Culture:} \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/tasks/Hazard_Pay.contexts.zip b/dot_config/JetBrains/CLion2025.3/tasks/Hazard_Pay.contexts.zip new file mode 100644 index 0000000..568404d Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/tasks/Hazard_Pay.contexts.zip differ diff --git a/dot_config/JetBrains/CLion2025.3/tasks/Hazard_Pay.tasks.zip b/dot_config/JetBrains/CLion2025.3/tasks/Hazard_Pay.tasks.zip new file mode 100644 index 0000000..568404d Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/tasks/Hazard_Pay.tasks.zip differ diff --git a/dot_config/JetBrains/CLion2025.3/tasks/Laser_Tag.contexts.zip b/dot_config/JetBrains/CLion2025.3/tasks/Laser_Tag.contexts.zip new file mode 100644 index 0000000..3d00467 Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/tasks/Laser_Tag.contexts.zip differ diff --git a/dot_config/JetBrains/CLion2025.3/tasks/Laser_Tag.tasks.zip b/dot_config/JetBrains/CLion2025.3/tasks/Laser_Tag.tasks.zip new file mode 100644 index 0000000..e660959 Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/tasks/Laser_Tag.tasks.zip differ diff --git a/dot_config/JetBrains/CLion2025.3/tasks/laser_tag.contexts.zip b/dot_config/JetBrains/CLion2025.3/tasks/laser_tag.contexts.zip new file mode 100644 index 0000000..b72de6e Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/tasks/laser_tag.contexts.zip differ diff --git a/dot_config/JetBrains/CLion2025.3/tasks/laser_tag.tasks.zip b/dot_config/JetBrains/CLion2025.3/tasks/laser_tag.tasks.zip new file mode 100644 index 0000000..b72de6e Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/tasks/laser_tag.tasks.zip differ diff --git a/dot_config/JetBrains/CLion2025.3/tools/External Tools.xml b/dot_config/JetBrains/CLion2025.3/tools/External Tools.xml new file mode 100644 index 0000000..873d9f2 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/tools/External Tools.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/updatedBrokenPlugins.db b/dot_config/JetBrains/CLion2025.3/updatedBrokenPlugins.db new file mode 100644 index 0000000..d6f7065 Binary files /dev/null and b/dot_config/JetBrains/CLion2025.3/updatedBrokenPlugins.db differ diff --git a/dot_config/JetBrains/CLion2025.3/workspace/3BOE7pLB3btMHvDTrKDW53uXjfo.xml b/dot_config/JetBrains/CLion2025.3/workspace/3BOE7pLB3btMHvDTrKDW53uXjfo.xml new file mode 100644 index 0000000..2d7e5da --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/workspace/3BOE7pLB3btMHvDTrKDW53uXjfo.xml @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + + + + + + + + + setup( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Project + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/CLion2025.3/workspace/3BOreagVTgIQtFhZt0F9hFMY2Kf.xml b/dot_config/JetBrains/CLion2025.3/workspace/3BOreagVTgIQtFhZt0F9hFMY2Kf.xml new file mode 100644 index 0000000..8a84525 --- /dev/null +++ b/dot_config/JetBrains/CLion2025.3/workspace/3BOreagVTgIQtFhZt0F9hFMY2Kf.xml @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + "changedPaths": [ + "/home/breadway/Documents/Laser Tag/CMakeLists.txt", + "/home/breadway/Documents/Laser Tag/main/CMakeLists.txt" + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Project + Run + Messages + CMake + ESP-IDF + Problems View + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/app-internal-state.db b/dot_config/JetBrains/Rider2025.3/app-internal-state.db new file mode 100644 index 0000000..eeb7e2e Binary files /dev/null and b/dot_config/JetBrains/Rider2025.3/app-internal-state.db differ diff --git a/dot_config/JetBrains/Rider2025.3/early-access-registry.txt b/dot_config/JetBrains/Rider2025.3/early-access-registry.txt new file mode 100644 index 0000000..36663ff --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/early-access-registry.txt @@ -0,0 +1,6 @@ +i18n.locale + +ide.experimental.ui +true +moved.to.new.ui +true diff --git a/dot_config/JetBrains/Rider2025.3/empty_splash-subscription-mode.txt b/dot_config/JetBrains/Rider2025.3/empty_splash-subscription-mode.txt new file mode 100644 index 0000000..e69de29 diff --git a/dot_config/JetBrains/Rider2025.3/options/RiderPerAppSettingsManager.xml b/dot_config/JetBrains/Rider2025.3/options/RiderPerAppSettingsManager.xml new file mode 100644 index 0000000..72e2599 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/RiderPerAppSettingsManager.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/actionSummary.xml b/dot_config/JetBrains/Rider2025.3/options/actionSummary.xml new file mode 100644 index 0000000..0c37343 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/actionSummary.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/advancedSettings.xml b/dot_config/JetBrains/Rider2025.3/options/advancedSettings.xml new file mode 100644 index 0000000..01dfed3 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/advancedSettings.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/codeLens.xml b/dot_config/JetBrains/Rider2025.3/options/codeLens.xml new file mode 100644 index 0000000..6054592 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/codeLens.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/colors.scheme.xml b/dot_config/JetBrains/Rider2025.3/options/colors.scheme.xml new file mode 100644 index 0000000..b27a1c0 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/colors.scheme.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/console-font.xml b/dot_config/JetBrains/Rider2025.3/options/console-font.xml new file mode 100644 index 0000000..2c67ad2 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/console-font.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/debugger.xml b/dot_config/JetBrains/Rider2025.3/options/debugger.xml new file mode 100644 index 0000000..8fd0533 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/debugger.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/editor-font.xml b/dot_config/JetBrains/Rider2025.3/options/editor-font.xml new file mode 100644 index 0000000..2a546c4 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/editor-font.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/editor.codeinsight.xml b/dot_config/JetBrains/Rider2025.3/options/editor.codeinsight.xml new file mode 100644 index 0000000..0381806 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/editor.codeinsight.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/editor.xml b/dot_config/JetBrains/Rider2025.3/options/editor.xml new file mode 100644 index 0000000..2e45dc8 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/editor.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/features.usage.statistics.xml b/dot_config/JetBrains/Rider2025.3/options/features.usage.statistics.xml new file mode 100644 index 0000000..3f4e946 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/features.usage.statistics.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/filetypes.xml b/dot_config/JetBrains/Rider2025.3/options/filetypes.xml new file mode 100644 index 0000000..08ab028 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/filetypes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/find.xml b/dot_config/JetBrains/Rider2025.3/options/find.xml new file mode 100644 index 0000000..8c26ec5 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/find.xml @@ -0,0 +1,8 @@ + + + *.css + *.html + *.xml + *.cs + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/ide.general.xml b/dot_config/JetBrains/Rider2025.3/options/ide.general.xml new file mode 100644 index 0000000..df331ff --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/ide.general.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/log-categories.xml b/dot_config/JetBrains/Rider2025.3/options/log-categories.xml new file mode 100644 index 0000000..3ff0f01 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/log-categories.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/notifications.xml b/dot_config/JetBrains/Rider2025.3/options/notifications.xml new file mode 100644 index 0000000..a3ec03a --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/notifications.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/other.xml b/dot_config/JetBrains/Rider2025.3/options/other.xml new file mode 100644 index 0000000..1828e8f --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/other.xml @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/path.macros.xml b/dot_config/JetBrains/Rider2025.3/options/path.macros.xml new file mode 100644 index 0000000..244ff3a --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/path.macros.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/profilerRunConfigurations.xml b/dot_config/JetBrains/Rider2025.3/options/profilerRunConfigurations.xml new file mode 100644 index 0000000..47515e7 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/profilerRunConfigurations.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/project.default.xml b/dot_config/JetBrains/Rider2025.3/options/project.default.xml new file mode 100644 index 0000000..0510a84 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/project.default.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/proxy.settings.xml b/dot_config/JetBrains/Rider2025.3/options/proxy.settings.xml new file mode 100644 index 0000000..b98ef7c --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/proxy.settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/rider.perapp.window.state.v2.xml b/dot_config/JetBrains/Rider2025.3/options/rider.perapp.window.state.v2.xml new file mode 100644 index 0000000..ac8fe65 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/rider.perapp.window.state.v2.xml @@ -0,0 +1,84 @@ + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/riderVersions.xml b/dot_config/JetBrains/Rider2025.3/options/riderVersions.xml new file mode 100644 index 0000000..3f18c28 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/riderVersions.xml @@ -0,0 +1,53 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/runner.layout.xml b/dot_config/JetBrains/Rider2025.3/options/runner.layout.xml new file mode 100644 index 0000000..88261ad --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/runner.layout.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/settingsSync.xml b/dot_config/JetBrains/Rider2025.3/options/settingsSync.xml new file mode 100644 index 0000000..6c9eb82 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/settingsSync.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/sshRecentConnections.v2.xml b/dot_config/JetBrains/Rider2025.3/options/sshRecentConnections.v2.xml new file mode 100644 index 0000000..0ab9433 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/sshRecentConnections.v2.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/sshRecentConnectionsHost.xml b/dot_config/JetBrains/Rider2025.3/options/sshRecentConnectionsHost.xml new file mode 100644 index 0000000..d921474 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/sshRecentConnectionsHost.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/ui.lnf.xml b/dot_config/JetBrains/Rider2025.3/options/ui.lnf.xml new file mode 100644 index 0000000..585ca57 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/ui.lnf.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/updates.xml b/dot_config/JetBrains/Rider2025.3/options/updates.xml new file mode 100644 index 0000000..2a338a3 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/updates.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/usage.statistics.xml b/dot_config/JetBrains/Rider2025.3/options/usage.statistics.xml new file mode 100644 index 0000000..72f2ae7 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/usage.statistics.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/options/window.state.xml b/dot_config/JetBrains/Rider2025.3/options/window.state.xml new file mode 100644 index 0000000..1b2c56a --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/options/window.state.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/plugin_PCWMP.license b/dot_config/JetBrains/Rider2025.3/plugin_PCWMP.license new file mode 100644 index 0000000..49c54e9 Binary files /dev/null and b/dot_config/JetBrains/Rider2025.3/plugin_PCWMP.license differ diff --git a/dot_config/JetBrains/Rider2025.3/resharper-host/CultureOptions b/dot_config/JetBrains/Rider2025.3/resharper-host/CultureOptions new file mode 100644 index 0000000..ce0dc71 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/resharper-host/CultureOptions @@ -0,0 +1 @@ +{Culture:} \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/resharper-host/GlobalSettingsStorage.DotSettings b/dot_config/JetBrains/Rider2025.3/resharper-host/GlobalSettingsStorage.DotSettings new file mode 100644 index 0000000..7d101f3 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/resharper-host/GlobalSettingsStorage.DotSettings @@ -0,0 +1,6 @@ + + False + True + System.*||Microsoft.*||JetBrains.* + System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute||System.CodeDom.Compiler.GeneratedCodeAttribute||System.Runtime.CompilerServices.CompilerGeneratedAttribute + 1 \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/rider.key b/dot_config/JetBrains/Rider2025.3/rider.key new file mode 100644 index 0000000..49c54e9 Binary files /dev/null and b/dot_config/JetBrains/Rider2025.3/rider.key differ diff --git a/dot_config/JetBrains/Rider2025.3/rider64.vmoptions b/dot_config/JetBrains/Rider2025.3/rider64.vmoptions new file mode 100644 index 0000000..f4c8315 --- /dev/null +++ b/dot_config/JetBrains/Rider2025.3/rider64.vmoptions @@ -0,0 +1,4 @@ +-Xmx1925m +-Dide.managed.by.toolbox=/home/breadway/Downloads/jetbrains-toolbox-3.2.0.65851/bin/jetbrains-toolbox +-Dtoolbox.notification.token=c7847899-6090-4740-bae4-7325718db299 +-Dtoolbox.notification.portFile=/home/breadway/.cache/JetBrains/Toolbox/ports/30730423-fc05-4782-a1f4-256b72350d6e.port \ No newline at end of file diff --git a/dot_config/JetBrains/Rider2025.3/updatedBrokenPlugins.db b/dot_config/JetBrains/Rider2025.3/updatedBrokenPlugins.db new file mode 100644 index 0000000..0fea987 Binary files /dev/null and b/dot_config/JetBrains/Rider2025.3/updatedBrokenPlugins.db differ diff --git a/dot_config/private_Code/User/History/-1aabd2fd/0Ago.csv b/dot_config/private_Code/User/History/-1aabd2fd/0Ago.csv new file mode 100644 index 0000000..41b3d32 --- /dev/null +++ b/dot_config/private_Code/User/History/-1aabd2fd/0Ago.csv @@ -0,0 +1,2402 @@ +Participant_ID,Group,Day,Calendar_Adherence,Cleanliness_Adherence,Punctuality_Adherence,Happiness +1,Intervention,1,Yes,No,Yes,5 +1,Intervention,2,Yes,Yes,No,5 +1,Intervention,3,Yes,Yes,Yes,6 +1,Intervention,4,Yes,Yes,Yes,6 +1,Intervention,5,Yes,Yes,Yes,7 +1,Intervention,6,No,Yes,Yes,6 +1,Intervention,7,Yes,Yes,Yes,7 +1,Intervention,8,Yes,No,Yes,6 +1,Intervention,9,Yes,Yes,Yes,7 +1,Intervention,10,Yes,Yes,Yes,8 +1,Intervention,11,Yes,Yes,Yes,8 +1,Intervention,12,Yes,No,Yes,8 +1,Intervention,13,Yes,Yes,Yes,8 +1,Intervention,14,Yes,Yes,Yes,8 +1,Intervention,15,Yes,Yes,Yes,8 +1,Intervention,16,Yes,Yes,No,7 +1,Intervention,17,Yes,Yes,Yes,8 +1,Intervention,18,Yes,Yes,Yes,8 +1,Intervention,19,Yes,Yes,Yes,8 +1,Intervention,20,Yes,Yes,Yes,9 +1,Intervention,21,No,Yes,Yes,8 +1,Intervention,22,Yes,Yes,Yes,8 +1,Intervention,23,Yes,Yes,Yes,9 +1,Intervention,24,Yes,Yes,Yes,8 +1,Intervention,25,Yes,Yes,Yes,8 +1,Intervention,26,Yes,Yes,Yes,8 +1,Intervention,27,No,No,Yes,7 +1,Intervention,28,No,No,Yes,7 +1,Intervention,29,No,No,Yes,8 +1,Intervention,30,Yes,Yes,Yes,9 +2,Intervention,1,Yes,Yes,No,5 +2,Intervention,2,Yes,Yes,No,4 +2,Intervention,3,No,Yes,Yes,5 +2,Intervention,4,Yes,Yes,Yes,6 +2,Intervention,5,Yes,Yes,No,5 +2,Intervention,6,Yes,No,Yes,6 +2,Intervention,7,Yes,No,Yes,6 +2,Intervention,8,Yes,Yes,Yes,7 +2,Intervention,9,Yes,Yes,Yes,8 +2,Intervention,10,Yes,Yes,Yes,8 +2,Intervention,11,Yes,Yes,Yes,8 +2,Intervention,12,Yes,Yes,Yes,8 +2,Intervention,13,No,No,Yes,7 +2,Intervention,14,Yes,Yes,Yes,8 +2,Intervention,15,Yes,No,No,6 +2,Intervention,16,Yes,No,No,7 +2,Intervention,17,Yes,No,Yes,7 +2,Intervention,18,Yes,Yes,Yes,8 +2,Intervention,19,Yes,Yes,Yes,8 +2,Intervention,20,Yes,No,Yes,8 +2,Intervention,21,Yes,No,No,7 +2,Intervention,22,Yes,Yes,Yes,8 +2,Intervention,23,Yes,Yes,No,8 +2,Intervention,24,Yes,Yes,Yes,8 +2,Intervention,25,Yes,Yes,Yes,8 +2,Intervention,26,Yes,Yes,Yes,9 +2,Intervention,27,No,No,No,6 +2,Intervention,28,No,No,No,7 +2,Intervention,29,Yes,Yes,No,7 +2,Intervention,30,Yes,No,No,7 +3,Intervention,1,No,No,No,5 +3,Intervention,2,Yes,No,No,5 +3,Intervention,3,No,No,No,6 +3,Intervention,4,No,No,Yes,5 +3,Intervention,5,No,Yes,Yes,6 +3,Intervention,6,No,Yes,No,5 +3,Intervention,7,Yes,Yes,No,6 +3,Intervention,8,Yes,Yes,Yes,7 +3,Intervention,9,Yes,Yes,No,6 +3,Intervention,10,No,Yes,Yes,6 +3,Intervention,11,Yes,Yes,Yes,8 +3,Intervention,12,No,No,No,5 +3,Intervention,13,Yes,Yes,No,7 +3,Intervention,14,No,No,Yes,7 +3,Intervention,15,Yes,Yes,Yes,8 +3,Intervention,16,Yes,Yes,Yes,9 +3,Intervention,17,Yes,Yes,Yes,9 +3,Intervention,18,Yes,Yes,Yes,9 +3,Intervention,19,Yes,Yes,Yes,8 +3,Intervention,20,No,No,No,7 +3,Intervention,21,Yes,No,Yes,8 +3,Intervention,22,Yes,No,No,8 +3,Intervention,23,Yes,No,No,7 +3,Intervention,24,Yes,No,No,8 +3,Intervention,25,Yes,Yes,No,8 +3,Intervention,26,Yes,No,Yes,9 +3,Intervention,27,No,No,No,7 +3,Intervention,28,No,Yes,Yes,9 +3,Intervention,29,No,Yes,Yes,9 +3,Intervention,30,No,Yes,No,8 +4,Intervention,1,Yes,No,Yes,5 +4,Intervention,2,No,No,Yes,5 +4,Intervention,3,Yes,Yes,Yes,7 +4,Intervention,4,Yes,Yes,Yes,6 +4,Intervention,5,Yes,Yes,Yes,6 +4,Intervention,6,No,Yes,Yes,7 +4,Intervention,7,Yes,Yes,Yes,7 +4,Intervention,8,Yes,Yes,Yes,8 +4,Intervention,9,Yes,No,Yes,8 +4,Intervention,10,Yes,No,Yes,7 +4,Intervention,11,Yes,Yes,Yes,7 +4,Intervention,12,Yes,Yes,Yes,9 +4,Intervention,13,Yes,Yes,Yes,9 +4,Intervention,14,Yes,No,Yes,8 +4,Intervention,15,Yes,Yes,Yes,8 +4,Intervention,16,No,Yes,Yes,8 +4,Intervention,17,No,Yes,Yes,8 +4,Intervention,18,Yes,Yes,Yes,9 +4,Intervention,19,Yes,Yes,No,8 +4,Intervention,20,Yes,Yes,Yes,9 +4,Intervention,21,Yes,Yes,Yes,8 +4,Intervention,22,Yes,Yes,Yes,9 +4,Intervention,23,Yes,Yes,No,8 +4,Intervention,24,Yes,No,Yes,9 +4,Intervention,25,Yes,Yes,Yes,9 +4,Intervention,26,Yes,No,Yes,8 +4,Intervention,27,Yes,Yes,Yes,9 +4,Intervention,28,No,No,No,7 +4,Intervention,29,No,Yes,Yes,8 +4,Intervention,30,Yes,No,Yes,8 +5,Intervention,1,Yes,No,Yes,5 +5,Intervention,2,No,No,Yes,5 +5,Intervention,3,Yes,Yes,Yes,7 +5,Intervention,4,Yes,No,Yes,7 +5,Intervention,5,Yes,Yes,No,6 +5,Intervention,6,Yes,Yes,No,7 +5,Intervention,7,No,No,Yes,5 +5,Intervention,8,No,Yes,Yes,7 +5,Intervention,9,Yes,Yes,Yes,8 +5,Intervention,10,Yes,Yes,Yes,8 +5,Intervention,11,Yes,Yes,Yes,8 +5,Intervention,12,Yes,Yes,Yes,8 +5,Intervention,13,Yes,Yes,Yes,8 +5,Intervention,14,Yes,Yes,Yes,9 +5,Intervention,15,Yes,Yes,Yes,9 +5,Intervention,16,Yes,No,Yes,8 +5,Intervention,17,Yes,No,Yes,8 +5,Intervention,18,Yes,Yes,Yes,8 +5,Intervention,19,Yes,Yes,Yes,9 +5,Intervention,20,Yes,No,No,9 +5,Intervention,21,Yes,Yes,Yes,9 +5,Intervention,22,Yes,Yes,Yes,9 +5,Intervention,23,Yes,No,Yes,8 +5,Intervention,24,Yes,No,Yes,8 +5,Intervention,25,Yes,No,Yes,8 +5,Intervention,26,Yes,Yes,Yes,9 +5,Intervention,27,Yes,No,Yes,9 +5,Intervention,28,Yes,Yes,Yes,9 +5,Intervention,29,Yes,Yes,Yes,9 +5,Intervention,30,No,Yes,Yes,9 +6,Intervention,1,Yes,No,No,6 +6,Intervention,2,Yes,No,Yes,7 +6,Intervention,3,Yes,Yes,Yes,7 +6,Intervention,4,Yes,Yes,Yes,7 +6,Intervention,5,Yes,Yes,Yes,8 +6,Intervention,6,Yes,Yes,No,7 +6,Intervention,7,Yes,No,Yes,8 +6,Intervention,8,Yes,Yes,Yes,8 +6,Intervention,9,Yes,No,No,7 +6,Intervention,10,Yes,Yes,No,8 +6,Intervention,11,Yes,No,Yes,8 +6,Intervention,12,Yes,Yes,No,8 +6,Intervention,13,Yes,Yes,Yes,9 +6,Intervention,14,No,Yes,Yes,9 +6,Intervention,15,Yes,Yes,Yes,9 +6,Intervention,16,No,Yes,Yes,8 +6,Intervention,17,No,Yes,Yes,9 +6,Intervention,18,Yes,Yes,Yes,9 +6,Intervention,19,Yes,Yes,No,8 +6,Intervention,20,Yes,Yes,No,9 +6,Intervention,21,Yes,No,No,8 +6,Intervention,22,No,Yes,No,8 +6,Intervention,23,Yes,Yes,No,9 +6,Intervention,24,Yes,No,No,8 +6,Intervention,25,Yes,No,Yes,8 +6,Intervention,26,No,No,Yes,8 +6,Intervention,27,Yes,No,Yes,9 +6,Intervention,28,Yes,Yes,No,10 +6,Intervention,29,No,Yes,No,8 +6,Intervention,30,Yes,Yes,No,9 +7,Intervention,1,Yes,Yes,Yes,6 +7,Intervention,2,Yes,Yes,Yes,6 +7,Intervention,3,Yes,No,Yes,5 +7,Intervention,4,Yes,No,Yes,6 +7,Intervention,5,Yes,Yes,Yes,6 +7,Intervention,6,Yes,No,Yes,7 +7,Intervention,7,Yes,Yes,Yes,8 +7,Intervention,8,No,Yes,Yes,8 +7,Intervention,9,Yes,Yes,Yes,8 +7,Intervention,10,Yes,Yes,Yes,8 +7,Intervention,11,Yes,Yes,Yes,8 +7,Intervention,12,Yes,Yes,Yes,9 +7,Intervention,13,Yes,Yes,Yes,8 +7,Intervention,14,No,Yes,Yes,7 +7,Intervention,15,Yes,Yes,Yes,9 +7,Intervention,16,Yes,Yes,Yes,9 +7,Intervention,17,Yes,Yes,Yes,8 +7,Intervention,18,Yes,Yes,Yes,8 +7,Intervention,19,Yes,Yes,Yes,8 +7,Intervention,20,Yes,Yes,Yes,9 +7,Intervention,21,Yes,Yes,Yes,8 +7,Intervention,22,Yes,Yes,Yes,9 +7,Intervention,23,Yes,Yes,Yes,9 +7,Intervention,24,Yes,Yes,Yes,8 +7,Intervention,25,Yes,Yes,Yes,9 +7,Intervention,26,Yes,Yes,Yes,9 +7,Intervention,27,No,No,Yes,8 +7,Intervention,28,Yes,Yes,Yes,8 +7,Intervention,29,Yes,Yes,No,8 +7,Intervention,30,Yes,Yes,Yes,9 +8,Intervention,1,Yes,Yes,Yes,7 +8,Intervention,2,No,Yes,No,6 +8,Intervention,3,Yes,Yes,No,6 +8,Intervention,4,Yes,Yes,Yes,7 +8,Intervention,5,Yes,Yes,No,7 +8,Intervention,6,Yes,No,No,5 +8,Intervention,7,No,Yes,Yes,7 +8,Intervention,8,Yes,Yes,Yes,7 +8,Intervention,9,Yes,No,Yes,7 +8,Intervention,10,Yes,No,Yes,7 +8,Intervention,11,Yes,No,No,7 +8,Intervention,12,Yes,No,Yes,8 +8,Intervention,13,No,Yes,No,7 +8,Intervention,14,No,No,No,7 +8,Intervention,15,No,No,No,6 +8,Intervention,16,Yes,Yes,No,8 +8,Intervention,17,No,Yes,No,8 +8,Intervention,18,Yes,No,Yes,8 +8,Intervention,19,No,No,No,7 +8,Intervention,20,No,No,No,7 +8,Intervention,21,Yes,No,Yes,8 +8,Intervention,22,No,Yes,Yes,9 +8,Intervention,23,Yes,No,Yes,9 +8,Intervention,24,Yes,Yes,Yes,9 +8,Intervention,25,No,Yes,No,8 +8,Intervention,26,No,No,Yes,8 +8,Intervention,27,No,No,Yes,8 +8,Intervention,28,No,No,Yes,8 +8,Intervention,29,Yes,No,Yes,9 +8,Intervention,30,Yes,Yes,Yes,9 +9,Intervention,1,No,Yes,No,6 +9,Intervention,2,Yes,No,Yes,6 +9,Intervention,3,Yes,Yes,Yes,7 +9,Intervention,4,Yes,Yes,Yes,7 +9,Intervention,5,Yes,No,No,7 +9,Intervention,6,No,No,Yes,7 +9,Intervention,7,No,Yes,No,6 +9,Intervention,8,Yes,Yes,Yes,9 +9,Intervention,9,Yes,Yes,Yes,9 +9,Intervention,10,Yes,Yes,No,8 +9,Intervention,11,Yes,Yes,Yes,9 +9,Intervention,12,Yes,Yes,Yes,9 +9,Intervention,13,Yes,Yes,No,9 +9,Intervention,14,Yes,No,No,9 +9,Intervention,15,Yes,Yes,No,8 +9,Intervention,16,Yes,Yes,No,9 +9,Intervention,17,Yes,Yes,No,9 +9,Intervention,18,Yes,Yes,No,9 +9,Intervention,19,Yes,Yes,No,9 +9,Intervention,20,Yes,No,Yes,9 +9,Intervention,21,Yes,No,No,8 +9,Intervention,22,Yes,Yes,Yes,10 +9,Intervention,23,Yes,Yes,Yes,10 +9,Intervention,24,Yes,Yes,Yes,10 +9,Intervention,25,No,Yes,Yes,10 +9,Intervention,26,No,Yes,No,8 +9,Intervention,27,Yes,No,Yes,9 +9,Intervention,28,Yes,Yes,No,9 +9,Intervention,29,Yes,Yes,Yes,10 +9,Intervention,30,Yes,Yes,No,9 +10,Intervention,1,Yes,Yes,Yes,6 +10,Intervention,2,Yes,No,Yes,6 +10,Intervention,3,Yes,No,Yes,5 +10,Intervention,4,Yes,No,Yes,6 +10,Intervention,5,Yes,Yes,Yes,6 +10,Intervention,6,Yes,No,Yes,6 +10,Intervention,7,No,Yes,Yes,6 +10,Intervention,8,Yes,Yes,Yes,7 +10,Intervention,9,Yes,Yes,Yes,8 +10,Intervention,10,Yes,Yes,Yes,8 +10,Intervention,11,Yes,Yes,Yes,7 +10,Intervention,12,Yes,Yes,Yes,8 +10,Intervention,13,Yes,Yes,Yes,8 +10,Intervention,14,Yes,Yes,Yes,8 +10,Intervention,15,Yes,Yes,Yes,8 +10,Intervention,16,Yes,Yes,No,7 +10,Intervention,17,Yes,Yes,Yes,8 +10,Intervention,18,Yes,Yes,Yes,9 +10,Intervention,19,Yes,Yes,Yes,8 +10,Intervention,20,Yes,Yes,Yes,8 +10,Intervention,21,No,Yes,Yes,7 +10,Intervention,22,Yes,Yes,No,7 +10,Intervention,23,Yes,Yes,Yes,8 +10,Intervention,24,Yes,Yes,Yes,8 +10,Intervention,25,Yes,No,Yes,7 +10,Intervention,26,Yes,Yes,Yes,9 +10,Intervention,27,Yes,Yes,Yes,8 +10,Intervention,28,Yes,Yes,Yes,8 +10,Intervention,29,Yes,Yes,Yes,8 +10,Intervention,30,Yes,Yes,Yes,8 +11,Intervention,1,Yes,Yes,No,5 +11,Intervention,2,Yes,No,No,5 +11,Intervention,3,Yes,No,No,4 +11,Intervention,4,Yes,Yes,No,6 +11,Intervention,5,No,Yes,No,5 +11,Intervention,6,No,Yes,Yes,5 +11,Intervention,7,Yes,No,Yes,6 +11,Intervention,8,Yes,Yes,Yes,6 +11,Intervention,9,No,Yes,Yes,6 +11,Intervention,10,Yes,Yes,Yes,7 +11,Intervention,11,Yes,Yes,Yes,7 +11,Intervention,12,Yes,Yes,Yes,7 +11,Intervention,13,No,No,Yes,6 +11,Intervention,14,Yes,Yes,No,7 +11,Intervention,15,No,Yes,Yes,8 +11,Intervention,16,No,Yes,Yes,7 +11,Intervention,17,Yes,No,Yes,7 +11,Intervention,18,Yes,Yes,No,7 +11,Intervention,19,Yes,Yes,No,7 +11,Intervention,20,No,Yes,No,7 +11,Intervention,21,No,Yes,Yes,8 +11,Intervention,22,No,Yes,Yes,8 +11,Intervention,23,Yes,Yes,No,7 +11,Intervention,24,Yes,Yes,Yes,8 +11,Intervention,25,No,No,No,6 +11,Intervention,26,No,Yes,Yes,8 +11,Intervention,27,Yes,No,No,7 +11,Intervention,28,No,Yes,No,8 +11,Intervention,29,Yes,Yes,No,7 +11,Intervention,30,Yes,No,Yes,8 +12,Intervention,1,Yes,No,No,6 +12,Intervention,2,Yes,No,Yes,7 +12,Intervention,3,Yes,Yes,Yes,7 +12,Intervention,4,Yes,Yes,Yes,7 +12,Intervention,5,Yes,Yes,Yes,8 +12,Intervention,6,Yes,Yes,Yes,8 +12,Intervention,7,Yes,No,Yes,7 +12,Intervention,8,Yes,Yes,Yes,9 +12,Intervention,9,Yes,Yes,Yes,9 +12,Intervention,10,Yes,No,Yes,9 +12,Intervention,11,Yes,Yes,Yes,9 +12,Intervention,12,Yes,Yes,No,9 +12,Intervention,13,Yes,Yes,Yes,9 +12,Intervention,14,Yes,No,Yes,8 +12,Intervention,15,Yes,Yes,Yes,9 +12,Intervention,16,Yes,Yes,Yes,9 +12,Intervention,17,Yes,Yes,Yes,9 +12,Intervention,18,Yes,No,Yes,8 +12,Intervention,19,Yes,Yes,Yes,10 +12,Intervention,20,Yes,No,No,8 +12,Intervention,21,Yes,Yes,No,9 +12,Intervention,22,Yes,Yes,Yes,9 +12,Intervention,23,Yes,Yes,Yes,10 +12,Intervention,24,Yes,Yes,Yes,9 +12,Intervention,25,Yes,Yes,Yes,9 +12,Intervention,26,Yes,Yes,Yes,10 +12,Intervention,27,Yes,Yes,Yes,10 +12,Intervention,28,Yes,No,Yes,9 +12,Intervention,29,Yes,Yes,Yes,10 +12,Intervention,30,No,Yes,Yes,10 +13,Intervention,1,Yes,Yes,Yes,5 +13,Intervention,2,Yes,Yes,No,5 +13,Intervention,3,Yes,Yes,Yes,5 +13,Intervention,4,Yes,Yes,Yes,7 +13,Intervention,5,Yes,Yes,Yes,7 +13,Intervention,6,No,Yes,No,5 +13,Intervention,7,Yes,Yes,No,6 +13,Intervention,8,Yes,Yes,Yes,7 +13,Intervention,9,No,No,Yes,6 +13,Intervention,10,Yes,Yes,Yes,7 +13,Intervention,11,Yes,Yes,Yes,7 +13,Intervention,12,Yes,Yes,Yes,7 +13,Intervention,13,Yes,No,Yes,7 +13,Intervention,14,Yes,Yes,Yes,8 +13,Intervention,15,Yes,Yes,No,8 +13,Intervention,16,Yes,Yes,No,7 +13,Intervention,17,Yes,Yes,No,7 +13,Intervention,18,Yes,Yes,Yes,8 +13,Intervention,19,Yes,Yes,Yes,8 +13,Intervention,20,No,Yes,No,7 +13,Intervention,21,Yes,No,Yes,8 +13,Intervention,22,Yes,Yes,Yes,8 +13,Intervention,23,Yes,Yes,No,7 +13,Intervention,24,Yes,No,Yes,7 +13,Intervention,25,Yes,Yes,Yes,7 +13,Intervention,26,Yes,Yes,Yes,8 +13,Intervention,27,Yes,No,Yes,8 +13,Intervention,28,Yes,No,Yes,7 +13,Intervention,29,Yes,Yes,Yes,8 +13,Intervention,30,No,Yes,Yes,8 +14,Intervention,1,No,No,No,4 +14,Intervention,2,Yes,No,No,5 +14,Intervention,3,Yes,Yes,No,5 +14,Intervention,4,Yes,Yes,Yes,6 +14,Intervention,5,No,No,No,4 +14,Intervention,6,No,No,No,4 +14,Intervention,7,Yes,No,Yes,6 +14,Intervention,8,No,Yes,Yes,5 +14,Intervention,9,No,No,No,5 +14,Intervention,10,No,Yes,No,5 +14,Intervention,11,Yes,No,No,6 +14,Intervention,12,No,No,No,5 +14,Intervention,13,Yes,No,Yes,6 +14,Intervention,14,No,Yes,Yes,7 +14,Intervention,15,No,Yes,Yes,6 +14,Intervention,16,No,Yes,No,6 +14,Intervention,17,No,Yes,Yes,7 +14,Intervention,18,No,Yes,Yes,6 +14,Intervention,19,Yes,No,Yes,7 +14,Intervention,20,No,Yes,Yes,8 +14,Intervention,21,No,No,No,6 +14,Intervention,22,No,No,No,6 +14,Intervention,23,No,No,No,6 +14,Intervention,24,No,Yes,No,7 +14,Intervention,25,No,Yes,No,6 +14,Intervention,26,No,No,Yes,6 +14,Intervention,27,Yes,Yes,No,7 +14,Intervention,28,No,No,No,6 +14,Intervention,29,No,Yes,No,7 +14,Intervention,30,No,No,No,6 +15,Intervention,1,Yes,No,No,4 +15,Intervention,2,Yes,Yes,Yes,6 +15,Intervention,3,No,No,Yes,4 +15,Intervention,4,No,Yes,Yes,5 +15,Intervention,5,No,Yes,Yes,5 +15,Intervention,6,No,No,Yes,5 +15,Intervention,7,No,Yes,No,5 +15,Intervention,8,Yes,Yes,Yes,6 +15,Intervention,9,Yes,Yes,Yes,7 +15,Intervention,10,No,No,Yes,6 +15,Intervention,11,No,Yes,Yes,6 +15,Intervention,12,Yes,Yes,Yes,7 +15,Intervention,13,No,Yes,Yes,7 +15,Intervention,14,Yes,Yes,Yes,8 +15,Intervention,15,Yes,Yes,Yes,8 +15,Intervention,16,Yes,Yes,Yes,8 +15,Intervention,17,Yes,Yes,Yes,8 +15,Intervention,18,Yes,Yes,Yes,7 +15,Intervention,19,Yes,Yes,Yes,8 +15,Intervention,20,Yes,Yes,No,7 +15,Intervention,21,No,No,Yes,7 +15,Intervention,22,Yes,No,Yes,8 +15,Intervention,23,Yes,Yes,Yes,9 +15,Intervention,24,Yes,Yes,No,8 +15,Intervention,25,Yes,No,Yes,7 +15,Intervention,26,Yes,No,No,7 +15,Intervention,27,Yes,Yes,Yes,8 +15,Intervention,28,Yes,No,Yes,8 +15,Intervention,29,Yes,Yes,Yes,8 +15,Intervention,30,Yes,Yes,Yes,8 +16,Intervention,1,Yes,No,Yes,6 +16,Intervention,2,Yes,No,Yes,6 +16,Intervention,3,Yes,Yes,Yes,7 +16,Intervention,4,Yes,No,Yes,6 +16,Intervention,5,Yes,Yes,No,6 +16,Intervention,6,No,Yes,No,6 +16,Intervention,7,No,Yes,Yes,7 +16,Intervention,8,Yes,No,Yes,7 +16,Intervention,9,Yes,Yes,No,7 +16,Intervention,10,Yes,Yes,Yes,8 +16,Intervention,11,Yes,Yes,Yes,8 +16,Intervention,12,Yes,Yes,Yes,9 +16,Intervention,13,Yes,Yes,No,8 +16,Intervention,14,No,Yes,Yes,8 +16,Intervention,15,Yes,Yes,Yes,8 +16,Intervention,16,No,No,No,7 +16,Intervention,17,Yes,Yes,No,8 +16,Intervention,18,No,Yes,Yes,8 +16,Intervention,19,Yes,Yes,No,9 +16,Intervention,20,No,Yes,No,7 +16,Intervention,21,Yes,No,No,8 +16,Intervention,22,Yes,No,Yes,8 +16,Intervention,23,Yes,No,No,8 +16,Intervention,24,No,Yes,No,8 +16,Intervention,25,Yes,Yes,Yes,9 +16,Intervention,26,Yes,Yes,Yes,9 +16,Intervention,27,Yes,No,No,8 +16,Intervention,28,Yes,No,No,8 +16,Intervention,29,Yes,Yes,No,8 +16,Intervention,30,Yes,Yes,Yes,9 +17,Intervention,1,No,Yes,No,5 +17,Intervention,2,Yes,Yes,No,5 +17,Intervention,3,Yes,No,Yes,6 +17,Intervention,4,Yes,No,No,5 +17,Intervention,5,Yes,Yes,Yes,7 +17,Intervention,6,No,No,No,5 +17,Intervention,7,Yes,No,No,5 +17,Intervention,8,Yes,Yes,Yes,7 +17,Intervention,9,Yes,Yes,Yes,7 +17,Intervention,10,Yes,Yes,Yes,8 +17,Intervention,11,Yes,Yes,Yes,9 +17,Intervention,12,Yes,Yes,No,8 +17,Intervention,13,Yes,Yes,Yes,9 +17,Intervention,14,No,Yes,Yes,8 +17,Intervention,15,Yes,Yes,Yes,8 +17,Intervention,16,Yes,No,Yes,8 +17,Intervention,17,Yes,No,Yes,8 +17,Intervention,18,Yes,Yes,Yes,9 +17,Intervention,19,Yes,No,Yes,8 +17,Intervention,20,Yes,No,Yes,8 +17,Intervention,21,Yes,Yes,Yes,9 +17,Intervention,22,Yes,Yes,Yes,9 +17,Intervention,23,Yes,Yes,No,8 +17,Intervention,24,Yes,Yes,Yes,9 +17,Intervention,25,Yes,Yes,Yes,9 +17,Intervention,26,No,Yes,Yes,8 +17,Intervention,27,Yes,No,No,8 +17,Intervention,28,No,No,No,6 +17,Intervention,29,Yes,Yes,No,9 +17,Intervention,30,Yes,No,Yes,9 +18,Intervention,1,Yes,Yes,Yes,5 +18,Intervention,2,Yes,Yes,Yes,5 +18,Intervention,3,Yes,Yes,Yes,5 +18,Intervention,4,Yes,Yes,Yes,4 +18,Intervention,5,No,Yes,Yes,5 +18,Intervention,6,Yes,Yes,Yes,5 +18,Intervention,7,Yes,Yes,Yes,6 +18,Intervention,8,Yes,Yes,Yes,6 +18,Intervention,9,Yes,Yes,Yes,6 +18,Intervention,10,Yes,Yes,Yes,7 +18,Intervention,11,Yes,Yes,No,6 +18,Intervention,12,Yes,Yes,Yes,6 +18,Intervention,13,Yes,Yes,Yes,7 +18,Intervention,14,No,Yes,Yes,6 +18,Intervention,15,Yes,Yes,Yes,7 +18,Intervention,16,Yes,Yes,Yes,7 +18,Intervention,17,Yes,Yes,Yes,7 +18,Intervention,18,Yes,Yes,Yes,7 +18,Intervention,19,Yes,Yes,Yes,7 +18,Intervention,20,Yes,Yes,No,6 +18,Intervention,21,Yes,No,No,6 +18,Intervention,22,Yes,Yes,Yes,7 +18,Intervention,23,Yes,Yes,Yes,6 +18,Intervention,24,Yes,Yes,Yes,7 +18,Intervention,25,Yes,Yes,Yes,7 +18,Intervention,26,Yes,Yes,Yes,7 +18,Intervention,27,Yes,No,No,5 +18,Intervention,28,Yes,Yes,Yes,7 +18,Intervention,29,Yes,Yes,Yes,7 +18,Intervention,30,Yes,Yes,Yes,7 +19,Intervention,1,Yes,Yes,Yes,4 +19,Intervention,2,Yes,No,Yes,4 +19,Intervention,3,Yes,Yes,Yes,5 +19,Intervention,4,No,Yes,Yes,4 +19,Intervention,5,Yes,Yes,Yes,5 +19,Intervention,6,Yes,Yes,No,5 +19,Intervention,7,Yes,Yes,No,5 +19,Intervention,8,Yes,No,Yes,5 +19,Intervention,9,Yes,Yes,Yes,6 +19,Intervention,10,Yes,Yes,Yes,6 +19,Intervention,11,Yes,Yes,Yes,6 +19,Intervention,12,Yes,Yes,No,5 +19,Intervention,13,Yes,Yes,Yes,7 +19,Intervention,14,Yes,Yes,Yes,7 +19,Intervention,15,Yes,Yes,Yes,7 +19,Intervention,16,Yes,Yes,Yes,7 +19,Intervention,17,Yes,Yes,Yes,7 +19,Intervention,18,Yes,Yes,Yes,7 +19,Intervention,19,Yes,Yes,Yes,7 +19,Intervention,20,No,Yes,No,5 +19,Intervention,21,Yes,Yes,No,7 +19,Intervention,22,Yes,Yes,Yes,7 +19,Intervention,23,No,Yes,Yes,6 +19,Intervention,24,Yes,Yes,No,6 +19,Intervention,25,Yes,Yes,Yes,7 +19,Intervention,26,Yes,Yes,Yes,7 +19,Intervention,27,Yes,No,Yes,5 +19,Intervention,28,Yes,No,Yes,6 +19,Intervention,29,Yes,Yes,Yes,7 +19,Intervention,30,Yes,Yes,No,7 +20,Intervention,1,No,No,No,5 +20,Intervention,2,Yes,Yes,Yes,7 +20,Intervention,3,Yes,Yes,Yes,7 +20,Intervention,4,Yes,No,No,5 +20,Intervention,5,Yes,No,Yes,6 +20,Intervention,6,Yes,No,No,6 +20,Intervention,7,Yes,Yes,Yes,7 +20,Intervention,8,Yes,Yes,No,7 +20,Intervention,9,Yes,No,Yes,7 +20,Intervention,10,Yes,No,Yes,7 +20,Intervention,11,Yes,Yes,Yes,8 +20,Intervention,12,Yes,Yes,Yes,9 +20,Intervention,13,Yes,Yes,Yes,9 +20,Intervention,14,Yes,Yes,Yes,9 +20,Intervention,15,Yes,Yes,Yes,8 +20,Intervention,16,Yes,Yes,Yes,9 +20,Intervention,17,Yes,Yes,Yes,9 +20,Intervention,18,Yes,Yes,Yes,9 +20,Intervention,19,Yes,Yes,Yes,9 +20,Intervention,20,Yes,Yes,Yes,9 +20,Intervention,21,No,Yes,No,8 +20,Intervention,22,No,Yes,No,8 +20,Intervention,23,Yes,Yes,Yes,10 +20,Intervention,24,Yes,Yes,Yes,9 +20,Intervention,25,Yes,Yes,No,8 +20,Intervention,26,Yes,Yes,Yes,9 +20,Intervention,27,Yes,Yes,No,8 +20,Intervention,28,Yes,Yes,Yes,9 +20,Intervention,29,Yes,Yes,Yes,10 +20,Intervention,30,Yes,Yes,Yes,9 +21,Intervention,1,Yes,Yes,No,4 +21,Intervention,2,Yes,Yes,Yes,4 +21,Intervention,3,Yes,Yes,Yes,5 +21,Intervention,4,Yes,Yes,Yes,5 +21,Intervention,5,Yes,Yes,Yes,5 +21,Intervention,6,Yes,Yes,Yes,5 +21,Intervention,7,Yes,Yes,Yes,6 +21,Intervention,8,Yes,No,Yes,5 +21,Intervention,9,Yes,Yes,Yes,7 +21,Intervention,10,No,Yes,Yes,6 +21,Intervention,11,Yes,Yes,Yes,7 +21,Intervention,12,Yes,Yes,Yes,6 +21,Intervention,13,Yes,Yes,Yes,6 +21,Intervention,14,No,Yes,Yes,6 +21,Intervention,15,Yes,Yes,Yes,7 +21,Intervention,16,Yes,Yes,Yes,7 +21,Intervention,17,Yes,Yes,Yes,6 +21,Intervention,18,No,No,Yes,6 +21,Intervention,19,No,Yes,Yes,6 +21,Intervention,20,Yes,Yes,Yes,7 +21,Intervention,21,Yes,Yes,No,7 +21,Intervention,22,Yes,Yes,Yes,7 +21,Intervention,23,Yes,Yes,Yes,7 +21,Intervention,24,Yes,Yes,Yes,7 +21,Intervention,25,Yes,No,Yes,7 +21,Intervention,26,Yes,Yes,Yes,7 +21,Intervention,27,No,Yes,Yes,6 +21,Intervention,28,Yes,Yes,Yes,7 +21,Intervention,29,Yes,Yes,No,7 +21,Intervention,30,Yes,Yes,Yes,7 +22,Intervention,1,No,Yes,No,4 +22,Intervention,2,No,No,Yes,4 +22,Intervention,3,Yes,No,Yes,5 +22,Intervention,4,Yes,No,Yes,5 +22,Intervention,5,Yes,Yes,Yes,6 +22,Intervention,6,Yes,No,Yes,5 +22,Intervention,7,Yes,No,Yes,6 +22,Intervention,8,Yes,Yes,Yes,6 +22,Intervention,9,Yes,Yes,Yes,6 +22,Intervention,10,Yes,No,No,5 +22,Intervention,11,Yes,Yes,Yes,7 +22,Intervention,12,Yes,Yes,Yes,7 +22,Intervention,13,Yes,No,Yes,6 +22,Intervention,14,Yes,Yes,Yes,8 +22,Intervention,15,Yes,Yes,No,6 +22,Intervention,16,Yes,Yes,Yes,8 +22,Intervention,17,Yes,Yes,Yes,8 +22,Intervention,18,Yes,Yes,Yes,8 +22,Intervention,19,Yes,Yes,Yes,8 +22,Intervention,20,Yes,Yes,No,7 +22,Intervention,21,Yes,Yes,No,7 +22,Intervention,22,Yes,No,Yes,8 +22,Intervention,23,Yes,No,Yes,7 +22,Intervention,24,Yes,Yes,Yes,7 +22,Intervention,25,Yes,Yes,Yes,8 +22,Intervention,26,Yes,Yes,Yes,8 +22,Intervention,27,Yes,No,Yes,8 +22,Intervention,28,No,Yes,Yes,8 +22,Intervention,29,Yes,Yes,Yes,8 +22,Intervention,30,Yes,No,No,7 +23,Intervention,1,No,Yes,No,4 +23,Intervention,2,Yes,No,Yes,6 +23,Intervention,3,Yes,No,No,4 +23,Intervention,4,Yes,Yes,Yes,7 +23,Intervention,5,No,Yes,No,5 +23,Intervention,6,No,No,No,5 +23,Intervention,7,Yes,No,Yes,6 +23,Intervention,8,Yes,Yes,No,6 +23,Intervention,9,Yes,Yes,No,7 +23,Intervention,10,Yes,Yes,Yes,7 +23,Intervention,11,Yes,Yes,No,7 +23,Intervention,12,Yes,Yes,No,6 +23,Intervention,13,Yes,No,No,6 +23,Intervention,14,No,Yes,Yes,8 +23,Intervention,15,Yes,Yes,Yes,8 +23,Intervention,16,Yes,Yes,No,8 +23,Intervention,17,Yes,Yes,Yes,8 +23,Intervention,18,Yes,Yes,Yes,9 +23,Intervention,19,Yes,Yes,Yes,9 +23,Intervention,20,Yes,Yes,Yes,8 +23,Intervention,21,Yes,Yes,No,8 +23,Intervention,22,Yes,Yes,No,8 +23,Intervention,23,Yes,Yes,Yes,8 +23,Intervention,24,Yes,No,Yes,8 +23,Intervention,25,Yes,Yes,No,9 +23,Intervention,26,Yes,Yes,Yes,9 +23,Intervention,27,Yes,Yes,Yes,9 +23,Intervention,28,No,Yes,Yes,9 +23,Intervention,29,Yes,Yes,Yes,9 +23,Intervention,30,Yes,Yes,Yes,9 +24,Intervention,1,Yes,No,Yes,6 +24,Intervention,2,No,No,Yes,5 +24,Intervention,3,Yes,No,Yes,6 +24,Intervention,4,No,Yes,Yes,6 +24,Intervention,5,No,No,No,5 +24,Intervention,6,No,No,No,5 +24,Intervention,7,Yes,Yes,No,6 +24,Intervention,8,No,Yes,No,5 +24,Intervention,9,Yes,No,No,5 +24,Intervention,10,No,No,Yes,5 +24,Intervention,11,Yes,Yes,No,6 +24,Intervention,12,Yes,Yes,Yes,7 +24,Intervention,13,No,Yes,Yes,7 +24,Intervention,14,Yes,Yes,Yes,8 +24,Intervention,15,Yes,Yes,Yes,9 +24,Intervention,16,Yes,No,Yes,8 +24,Intervention,17,No,No,No,6 +24,Intervention,18,No,No,No,6 +24,Intervention,19,Yes,Yes,Yes,8 +24,Intervention,20,Yes,Yes,Yes,9 +24,Intervention,21,No,No,No,8 +24,Intervention,22,Yes,No,No,7 +24,Intervention,23,Yes,No,No,7 +24,Intervention,24,Yes,Yes,No,8 +24,Intervention,25,Yes,Yes,No,8 +24,Intervention,26,Yes,No,Yes,8 +24,Intervention,27,Yes,Yes,Yes,9 +24,Intervention,28,No,No,No,7 +24,Intervention,29,Yes,Yes,Yes,9 +24,Intervention,30,Yes,Yes,Yes,8 +25,Intervention,1,Yes,Yes,No,5 +25,Intervention,2,No,Yes,Yes,5 +25,Intervention,3,Yes,No,Yes,7 +25,Intervention,4,Yes,No,No,6 +25,Intervention,5,Yes,No,Yes,5 +25,Intervention,6,No,Yes,Yes,6 +25,Intervention,7,Yes,Yes,Yes,7 +25,Intervention,8,Yes,Yes,Yes,7 +25,Intervention,9,Yes,Yes,Yes,7 +25,Intervention,10,Yes,Yes,Yes,7 +25,Intervention,11,Yes,No,Yes,7 +25,Intervention,12,Yes,Yes,Yes,9 +25,Intervention,13,Yes,Yes,Yes,8 +25,Intervention,14,Yes,No,Yes,7 +25,Intervention,15,Yes,Yes,Yes,8 +25,Intervention,16,Yes,Yes,Yes,9 +25,Intervention,17,Yes,Yes,Yes,8 +25,Intervention,18,Yes,Yes,Yes,9 +25,Intervention,19,Yes,Yes,Yes,8 +25,Intervention,20,Yes,No,Yes,8 +25,Intervention,21,No,Yes,Yes,8 +25,Intervention,22,Yes,Yes,Yes,8 +25,Intervention,23,Yes,Yes,No,8 +25,Intervention,24,Yes,Yes,No,8 +25,Intervention,25,No,Yes,Yes,7 +25,Intervention,26,Yes,Yes,Yes,8 +25,Intervention,27,Yes,Yes,Yes,9 +25,Intervention,28,Yes,Yes,Yes,9 +25,Intervention,29,Yes,Yes,Yes,9 +25,Intervention,30,Yes,Yes,Yes,9 +26,Intervention,1,No,No,No,5 +26,Intervention,2,No,Yes,No,6 +26,Intervention,3,Yes,Yes,No,7 +26,Intervention,4,Yes,Yes,Yes,8 +26,Intervention,5,No,Yes,Yes,7 +26,Intervention,6,No,Yes,Yes,7 +26,Intervention,7,Yes,Yes,Yes,9 +26,Intervention,8,Yes,Yes,Yes,9 +26,Intervention,9,Yes,Yes,Yes,9 +26,Intervention,10,Yes,Yes,Yes,9 +26,Intervention,11,Yes,Yes,Yes,9 +26,Intervention,12,Yes,Yes,Yes,9 +26,Intervention,13,Yes,Yes,No,9 +26,Intervention,14,Yes,Yes,No,9 +26,Intervention,15,Yes,Yes,Yes,10 +26,Intervention,16,Yes,Yes,Yes,10 +26,Intervention,17,Yes,Yes,Yes,10 +26,Intervention,18,No,Yes,Yes,9 +26,Intervention,19,Yes,Yes,Yes,10 +26,Intervention,20,No,No,No,8 +26,Intervention,21,Yes,Yes,Yes,10 +26,Intervention,22,Yes,Yes,Yes,10 +26,Intervention,23,Yes,Yes,Yes,10 +26,Intervention,24,Yes,Yes,Yes,10 +26,Intervention,25,Yes,Yes,Yes,10 +26,Intervention,26,No,Yes,Yes,10 +26,Intervention,27,No,Yes,Yes,10 +26,Intervention,28,No,Yes,Yes,10 +26,Intervention,29,Yes,No,No,9 +26,Intervention,30,Yes,Yes,Yes,10 +27,Intervention,1,Yes,Yes,Yes,8 +27,Intervention,2,Yes,Yes,Yes,8 +27,Intervention,3,Yes,Yes,Yes,8 +27,Intervention,4,Yes,Yes,Yes,9 +27,Intervention,5,Yes,Yes,No,9 +27,Intervention,6,Yes,Yes,Yes,9 +27,Intervention,7,Yes,No,Yes,8 +27,Intervention,8,Yes,Yes,Yes,10 +27,Intervention,9,Yes,Yes,Yes,10 +27,Intervention,10,Yes,Yes,Yes,10 +27,Intervention,11,Yes,Yes,No,9 +27,Intervention,12,Yes,Yes,Yes,10 +27,Intervention,13,Yes,Yes,Yes,10 +27,Intervention,14,Yes,No,Yes,10 +27,Intervention,15,Yes,Yes,Yes,10 +27,Intervention,16,Yes,Yes,Yes,10 +27,Intervention,17,No,Yes,No,9 +27,Intervention,18,Yes,Yes,Yes,10 +27,Intervention,19,Yes,Yes,Yes,10 +27,Intervention,20,Yes,Yes,Yes,10 +27,Intervention,21,Yes,Yes,Yes,10 +27,Intervention,22,Yes,Yes,Yes,10 +27,Intervention,23,Yes,Yes,Yes,10 +27,Intervention,24,Yes,Yes,Yes,10 +27,Intervention,25,Yes,Yes,Yes,10 +27,Intervention,26,Yes,Yes,Yes,10 +27,Intervention,27,Yes,Yes,Yes,10 +27,Intervention,28,No,Yes,Yes,10 +27,Intervention,29,Yes,Yes,Yes,10 +27,Intervention,30,Yes,Yes,Yes,10 +28,Intervention,1,Yes,Yes,No,5 +28,Intervention,2,No,Yes,No,4 +28,Intervention,3,Yes,Yes,Yes,6 +28,Intervention,4,Yes,Yes,Yes,6 +28,Intervention,5,Yes,Yes,No,6 +28,Intervention,6,No,No,Yes,5 +28,Intervention,7,Yes,No,Yes,6 +28,Intervention,8,No,No,Yes,5 +28,Intervention,9,No,Yes,Yes,6 +28,Intervention,10,Yes,Yes,Yes,7 +28,Intervention,11,No,Yes,Yes,7 +28,Intervention,12,Yes,Yes,Yes,7 +28,Intervention,13,No,Yes,Yes,7 +28,Intervention,14,No,Yes,Yes,7 +28,Intervention,15,No,Yes,Yes,8 +28,Intervention,16,No,No,Yes,6 +28,Intervention,17,No,Yes,Yes,7 +28,Intervention,18,Yes,Yes,Yes,8 +28,Intervention,19,Yes,Yes,Yes,8 +28,Intervention,20,Yes,No,Yes,7 +28,Intervention,21,Yes,No,Yes,8 +28,Intervention,22,Yes,Yes,Yes,8 +28,Intervention,23,No,Yes,Yes,8 +28,Intervention,24,Yes,No,Yes,8 +28,Intervention,25,No,Yes,Yes,8 +28,Intervention,26,Yes,Yes,Yes,8 +28,Intervention,27,No,No,No,7 +28,Intervention,28,No,Yes,No,7 +28,Intervention,29,No,No,No,6 +28,Intervention,30,No,Yes,No,7 +29,Intervention,1,Yes,No,No,3 +29,Intervention,2,Yes,Yes,No,4 +29,Intervention,3,Yes,No,Yes,4 +29,Intervention,4,Yes,Yes,Yes,5 +29,Intervention,5,Yes,Yes,No,5 +29,Intervention,6,No,No,Yes,3 +29,Intervention,7,Yes,No,No,5 +29,Intervention,8,Yes,Yes,Yes,5 +29,Intervention,9,Yes,Yes,Yes,5 +29,Intervention,10,Yes,Yes,Yes,5 +29,Intervention,11,Yes,Yes,Yes,6 +29,Intervention,12,Yes,Yes,Yes,7 +29,Intervention,13,Yes,Yes,Yes,7 +29,Intervention,14,Yes,No,Yes,6 +29,Intervention,15,Yes,Yes,Yes,7 +29,Intervention,16,Yes,Yes,Yes,6 +29,Intervention,17,Yes,No,Yes,7 +29,Intervention,18,Yes,Yes,Yes,7 +29,Intervention,19,Yes,Yes,Yes,7 +29,Intervention,20,Yes,Yes,No,6 +29,Intervention,21,Yes,Yes,No,6 +29,Intervention,22,Yes,Yes,Yes,7 +29,Intervention,23,Yes,Yes,Yes,6 +29,Intervention,24,Yes,Yes,Yes,7 +29,Intervention,25,Yes,Yes,Yes,7 +29,Intervention,26,Yes,Yes,Yes,7 +29,Intervention,27,Yes,Yes,Yes,7 +29,Intervention,28,Yes,No,Yes,7 +29,Intervention,29,Yes,Yes,Yes,7 +29,Intervention,30,Yes,Yes,Yes,7 +30,Intervention,1,Yes,No,No,4 +30,Intervention,2,Yes,Yes,No,5 +30,Intervention,3,No,Yes,Yes,5 +30,Intervention,4,Yes,Yes,Yes,6 +30,Intervention,5,Yes,Yes,Yes,6 +30,Intervention,6,No,Yes,Yes,6 +30,Intervention,7,Yes,No,Yes,6 +30,Intervention,8,Yes,No,Yes,6 +30,Intervention,9,Yes,No,No,6 +30,Intervention,10,Yes,Yes,Yes,8 +30,Intervention,11,Yes,Yes,Yes,8 +30,Intervention,12,Yes,Yes,Yes,8 +30,Intervention,13,Yes,Yes,No,8 +30,Intervention,14,Yes,Yes,Yes,8 +30,Intervention,15,Yes,Yes,Yes,9 +30,Intervention,16,Yes,Yes,Yes,8 +30,Intervention,17,Yes,Yes,Yes,8 +30,Intervention,18,Yes,Yes,Yes,8 +30,Intervention,19,Yes,Yes,Yes,8 +30,Intervention,20,Yes,Yes,Yes,8 +30,Intervention,21,Yes,Yes,No,7 +30,Intervention,22,Yes,Yes,Yes,8 +30,Intervention,23,Yes,Yes,Yes,8 +30,Intervention,24,Yes,No,Yes,8 +30,Intervention,25,Yes,Yes,Yes,8 +30,Intervention,26,Yes,Yes,No,8 +30,Intervention,27,Yes,Yes,No,8 +30,Intervention,28,Yes,Yes,No,8 +30,Intervention,29,Yes,No,Yes,8 +30,Intervention,30,Yes,No,No,7 +31,Intervention,1,Yes,Yes,No,6 +31,Intervention,2,Yes,Yes,No,6 +31,Intervention,3,Yes,Yes,No,6 +31,Intervention,4,No,No,Yes,6 +31,Intervention,5,Yes,Yes,No,6 +31,Intervention,6,Yes,Yes,No,7 +31,Intervention,7,No,Yes,No,7 +31,Intervention,8,No,Yes,Yes,7 +31,Intervention,9,No,No,No,6 +31,Intervention,10,No,Yes,Yes,7 +31,Intervention,11,No,Yes,Yes,8 +31,Intervention,12,No,Yes,No,7 +31,Intervention,13,No,Yes,No,8 +31,Intervention,14,No,Yes,No,7 +31,Intervention,15,No,Yes,No,7 +31,Intervention,16,No,No,No,6 +31,Intervention,17,No,Yes,No,7 +31,Intervention,18,Yes,Yes,No,8 +31,Intervention,19,Yes,Yes,No,8 +31,Intervention,20,No,No,No,6 +31,Intervention,21,No,Yes,No,7 +31,Intervention,22,Yes,Yes,No,9 +31,Intervention,23,No,Yes,No,8 +31,Intervention,24,Yes,Yes,No,9 +31,Intervention,25,Yes,Yes,Yes,9 +31,Intervention,26,Yes,Yes,Yes,9 +31,Intervention,27,Yes,No,No,8 +31,Intervention,28,Yes,No,No,8 +31,Intervention,29,Yes,Yes,No,10 +31,Intervention,30,Yes,No,Yes,9 +32,Intervention,1,No,No,No,4 +32,Intervention,2,Yes,Yes,Yes,6 +32,Intervention,3,No,No,Yes,6 +32,Intervention,4,No,No,Yes,5 +32,Intervention,5,Yes,No,No,5 +32,Intervention,6,Yes,No,No,6 +32,Intervention,7,Yes,Yes,No,6 +32,Intervention,8,Yes,No,No,5 +32,Intervention,9,No,No,Yes,6 +32,Intervention,10,Yes,No,Yes,6 +32,Intervention,11,Yes,Yes,Yes,7 +32,Intervention,12,Yes,No,No,6 +32,Intervention,13,Yes,No,Yes,7 +32,Intervention,14,No,No,Yes,6 +32,Intervention,15,Yes,No,Yes,8 +32,Intervention,16,Yes,No,No,7 +32,Intervention,17,Yes,No,Yes,8 +32,Intervention,18,Yes,No,Yes,7 +32,Intervention,19,Yes,No,Yes,9 +32,Intervention,20,Yes,Yes,Yes,9 +32,Intervention,21,Yes,No,Yes,8 +32,Intervention,22,No,Yes,Yes,8 +32,Intervention,23,No,Yes,Yes,9 +32,Intervention,24,No,No,No,7 +32,Intervention,25,Yes,No,Yes,9 +32,Intervention,26,Yes,No,No,7 +32,Intervention,27,Yes,No,Yes,9 +32,Intervention,28,Yes,No,Yes,9 +32,Intervention,29,No,No,Yes,8 +32,Intervention,30,No,No,Yes,8 +33,Intervention,1,Yes,No,Yes,4 +33,Intervention,2,Yes,No,Yes,4 +33,Intervention,3,No,No,No,3 +33,Intervention,4,No,Yes,Yes,5 +33,Intervention,5,Yes,Yes,Yes,6 +33,Intervention,6,Yes,Yes,No,6 +33,Intervention,7,No,Yes,Yes,5 +33,Intervention,8,No,Yes,Yes,5 +33,Intervention,9,Yes,Yes,Yes,6 +33,Intervention,10,Yes,Yes,Yes,7 +33,Intervention,11,No,Yes,Yes,6 +33,Intervention,12,No,Yes,Yes,6 +33,Intervention,13,Yes,No,No,6 +33,Intervention,14,Yes,No,Yes,7 +33,Intervention,15,Yes,No,Yes,6 +33,Intervention,16,Yes,No,No,6 +33,Intervention,17,Yes,Yes,Yes,7 +33,Intervention,18,Yes,Yes,No,6 +33,Intervention,19,Yes,Yes,No,6 +33,Intervention,20,No,Yes,Yes,7 +33,Intervention,21,No,Yes,No,7 +33,Intervention,22,No,Yes,No,7 +33,Intervention,23,Yes,Yes,Yes,8 +33,Intervention,24,Yes,Yes,Yes,7 +33,Intervention,25,Yes,Yes,Yes,8 +33,Intervention,26,Yes,Yes,Yes,7 +33,Intervention,27,Yes,Yes,Yes,7 +33,Intervention,28,Yes,Yes,No,7 +33,Intervention,29,Yes,Yes,Yes,7 +33,Intervention,30,Yes,No,Yes,7 +34,Intervention,1,Yes,Yes,Yes,5 +34,Intervention,2,Yes,No,No,5 +34,Intervention,3,No,Yes,No,4 +34,Intervention,4,Yes,No,No,5 +34,Intervention,5,Yes,No,No,5 +34,Intervention,6,No,No,No,4 +34,Intervention,7,Yes,Yes,Yes,7 +34,Intervention,8,Yes,Yes,No,6 +34,Intervention,9,Yes,Yes,Yes,7 +34,Intervention,10,No,Yes,Yes,6 +34,Intervention,11,Yes,No,Yes,6 +34,Intervention,12,No,Yes,No,6 +34,Intervention,13,No,No,No,5 +34,Intervention,14,Yes,No,No,6 +34,Intervention,15,Yes,No,No,6 +34,Intervention,16,Yes,Yes,Yes,7 +34,Intervention,17,No,No,No,6 +34,Intervention,18,No,Yes,Yes,7 +34,Intervention,19,No,Yes,Yes,8 +34,Intervention,20,No,Yes,No,6 +34,Intervention,21,Yes,Yes,No,7 +34,Intervention,22,No,No,No,7 +34,Intervention,23,No,No,No,6 +34,Intervention,24,No,No,No,6 +34,Intervention,25,Yes,Yes,No,8 +34,Intervention,26,Yes,No,No,7 +34,Intervention,27,Yes,No,Yes,8 +34,Intervention,28,Yes,No,No,8 +34,Intervention,29,Yes,Yes,No,8 +34,Intervention,30,No,No,No,7 +35,Intervention,1,Yes,Yes,Yes,5 +35,Intervention,2,Yes,Yes,Yes,5 +35,Intervention,3,Yes,Yes,Yes,5 +35,Intervention,4,No,Yes,Yes,6 +35,Intervention,5,No,Yes,Yes,6 +35,Intervention,6,No,Yes,Yes,6 +35,Intervention,7,No,No,Yes,6 +35,Intervention,8,Yes,No,Yes,6 +35,Intervention,9,Yes,Yes,Yes,7 +35,Intervention,10,Yes,Yes,Yes,7 +35,Intervention,11,Yes,Yes,Yes,7 +35,Intervention,12,Yes,No,Yes,7 +35,Intervention,13,Yes,No,Yes,7 +35,Intervention,14,No,Yes,Yes,7 +35,Intervention,15,Yes,Yes,Yes,8 +35,Intervention,16,Yes,Yes,Yes,7 +35,Intervention,17,Yes,Yes,Yes,8 +35,Intervention,18,Yes,No,Yes,7 +35,Intervention,19,Yes,Yes,No,7 +35,Intervention,20,Yes,Yes,Yes,7 +35,Intervention,21,Yes,Yes,No,7 +35,Intervention,22,Yes,Yes,No,7 +35,Intervention,23,Yes,Yes,No,7 +35,Intervention,24,Yes,Yes,Yes,8 +35,Intervention,25,Yes,Yes,Yes,9 +35,Intervention,26,Yes,Yes,No,8 +35,Intervention,27,No,No,No,6 +35,Intervention,28,Yes,No,Yes,8 +35,Intervention,29,Yes,Yes,No,8 +35,Intervention,30,Yes,Yes,Yes,8 +36,Intervention,1,Yes,No,Yes,6 +36,Intervention,2,No,No,No,6 +36,Intervention,3,Yes,No,No,6 +36,Intervention,4,No,No,Yes,7 +36,Intervention,5,Yes,No,Yes,7 +36,Intervention,6,No,Yes,Yes,7 +36,Intervention,7,No,Yes,No,6 +36,Intervention,8,Yes,Yes,No,7 +36,Intervention,9,Yes,Yes,Yes,7 +36,Intervention,10,No,Yes,Yes,8 +36,Intervention,11,Yes,No,Yes,8 +36,Intervention,12,Yes,Yes,Yes,9 +36,Intervention,13,No,Yes,No,7 +36,Intervention,14,Yes,Yes,No,9 +36,Intervention,15,Yes,Yes,Yes,9 +36,Intervention,16,No,Yes,Yes,9 +36,Intervention,17,Yes,Yes,Yes,10 +36,Intervention,18,Yes,Yes,Yes,10 +36,Intervention,19,Yes,No,Yes,9 +36,Intervention,20,Yes,Yes,No,9 +36,Intervention,21,No,Yes,Yes,9 +36,Intervention,22,No,Yes,Yes,9 +36,Intervention,23,No,Yes,No,9 +36,Intervention,24,No,Yes,No,9 +36,Intervention,25,No,Yes,Yes,9 +36,Intervention,26,Yes,Yes,Yes,10 +36,Intervention,27,Yes,No,Yes,9 +36,Intervention,28,Yes,Yes,Yes,10 +36,Intervention,29,Yes,Yes,Yes,10 +36,Intervention,30,No,Yes,Yes,9 +37,Intervention,1,Yes,No,Yes,6 +37,Intervention,2,Yes,No,Yes,6 +37,Intervention,3,Yes,No,Yes,7 +37,Intervention,4,No,Yes,No,6 +37,Intervention,5,No,No,No,5 +37,Intervention,6,No,No,Yes,5 +37,Intervention,7,Yes,Yes,Yes,7 +37,Intervention,8,Yes,Yes,Yes,7 +37,Intervention,9,Yes,No,Yes,6 +37,Intervention,10,Yes,Yes,Yes,7 +37,Intervention,11,Yes,Yes,No,7 +37,Intervention,12,No,Yes,Yes,7 +37,Intervention,13,No,Yes,No,7 +37,Intervention,14,Yes,No,Yes,8 +37,Intervention,15,Yes,Yes,Yes,9 +37,Intervention,16,No,No,No,7 +37,Intervention,17,Yes,Yes,Yes,9 +37,Intervention,18,Yes,Yes,Yes,9 +37,Intervention,19,Yes,Yes,Yes,9 +37,Intervention,20,Yes,Yes,No,9 +37,Intervention,21,Yes,No,Yes,9 +37,Intervention,22,Yes,No,Yes,9 +37,Intervention,23,Yes,No,Yes,8 +37,Intervention,24,Yes,No,Yes,8 +37,Intervention,25,Yes,Yes,Yes,9 +37,Intervention,26,No,Yes,Yes,8 +37,Intervention,27,No,Yes,No,8 +37,Intervention,28,Yes,No,No,8 +37,Intervention,29,Yes,Yes,Yes,10 +37,Intervention,30,No,Yes,Yes,8 +38,Intervention,1,Yes,No,Yes,5 +38,Intervention,2,Yes,Yes,Yes,6 +38,Intervention,3,Yes,Yes,Yes,6 +38,Intervention,4,Yes,Yes,Yes,7 +38,Intervention,5,Yes,No,Yes,6 +38,Intervention,6,No,Yes,Yes,6 +38,Intervention,7,Yes,Yes,Yes,7 +38,Intervention,8,Yes,Yes,Yes,8 +38,Intervention,9,Yes,Yes,Yes,8 +38,Intervention,10,Yes,No,Yes,8 +38,Intervention,11,No,Yes,Yes,7 +38,Intervention,12,Yes,Yes,Yes,8 +38,Intervention,13,Yes,Yes,Yes,8 +38,Intervention,14,Yes,Yes,Yes,8 +38,Intervention,15,Yes,Yes,Yes,7 +38,Intervention,16,Yes,Yes,Yes,8 +38,Intervention,17,Yes,Yes,Yes,8 +38,Intervention,18,Yes,Yes,Yes,9 +38,Intervention,19,Yes,Yes,Yes,8 +38,Intervention,20,Yes,Yes,No,8 +38,Intervention,21,Yes,Yes,Yes,9 +38,Intervention,22,Yes,Yes,Yes,8 +38,Intervention,23,No,Yes,No,7 +38,Intervention,24,Yes,Yes,Yes,8 +38,Intervention,25,Yes,Yes,Yes,8 +38,Intervention,26,Yes,Yes,No,8 +38,Intervention,27,Yes,No,No,7 +38,Intervention,28,Yes,Yes,No,8 +38,Intervention,29,Yes,Yes,Yes,8 +38,Intervention,30,Yes,Yes,Yes,9 +39,Intervention,1,No,No,Yes,3 +39,Intervention,2,Yes,No,Yes,3 +39,Intervention,3,Yes,Yes,Yes,4 +39,Intervention,4,Yes,Yes,Yes,5 +39,Intervention,5,Yes,Yes,Yes,5 +39,Intervention,6,Yes,Yes,Yes,5 +39,Intervention,7,Yes,Yes,Yes,6 +39,Intervention,8,Yes,Yes,Yes,6 +39,Intervention,9,Yes,Yes,Yes,6 +39,Intervention,10,Yes,Yes,Yes,6 +39,Intervention,11,Yes,Yes,Yes,6 +39,Intervention,12,Yes,Yes,No,6 +39,Intervention,13,Yes,Yes,Yes,7 +39,Intervention,14,Yes,Yes,Yes,6 +39,Intervention,15,Yes,Yes,Yes,6 +39,Intervention,16,Yes,Yes,Yes,7 +39,Intervention,17,Yes,Yes,Yes,6 +39,Intervention,18,Yes,No,Yes,6 +39,Intervention,19,Yes,No,Yes,6 +39,Intervention,20,Yes,Yes,Yes,7 +39,Intervention,21,Yes,No,Yes,6 +39,Intervention,22,Yes,Yes,Yes,7 +39,Intervention,23,Yes,Yes,Yes,7 +39,Intervention,24,Yes,Yes,Yes,6 +39,Intervention,25,Yes,Yes,Yes,7 +39,Intervention,26,No,Yes,Yes,6 +39,Intervention,27,Yes,Yes,Yes,6 +39,Intervention,28,Yes,Yes,No,6 +39,Intervention,29,Yes,Yes,Yes,7 +39,Intervention,30,Yes,Yes,No,6 +40,Intervention,1,Yes,No,Yes,5 +40,Intervention,2,Yes,Yes,Yes,5 +40,Intervention,3,Yes,No,Yes,5 +40,Intervention,4,Yes,No,Yes,5 +40,Intervention,5,Yes,Yes,Yes,6 +40,Intervention,6,Yes,Yes,Yes,7 +40,Intervention,7,Yes,Yes,Yes,6 +40,Intervention,8,Yes,Yes,Yes,7 +40,Intervention,9,Yes,Yes,Yes,7 +40,Intervention,10,Yes,Yes,Yes,7 +40,Intervention,11,Yes,Yes,Yes,7 +40,Intervention,12,Yes,No,Yes,7 +40,Intervention,13,Yes,No,Yes,7 +40,Intervention,14,Yes,Yes,Yes,7 +40,Intervention,15,Yes,No,Yes,6 +40,Intervention,16,Yes,Yes,Yes,7 +40,Intervention,17,Yes,Yes,Yes,7 +40,Intervention,18,Yes,Yes,Yes,7 +40,Intervention,19,Yes,Yes,Yes,7 +40,Intervention,20,Yes,Yes,Yes,8 +40,Intervention,21,No,Yes,No,6 +40,Intervention,22,Yes,Yes,Yes,7 +40,Intervention,23,No,Yes,Yes,7 +40,Intervention,24,Yes,Yes,Yes,8 +40,Intervention,25,Yes,Yes,Yes,7 +40,Intervention,26,Yes,Yes,Yes,8 +40,Intervention,27,Yes,No,Yes,6 +40,Intervention,28,Yes,No,No,7 +40,Intervention,29,Yes,Yes,Yes,8 +40,Intervention,30,Yes,Yes,No,7 +41,Control,1,No,No,No,3 +41,Control,2,No,No,No,4 +41,Control,3,No,No,No,4 +41,Control,4,No,No,No,5 +41,Control,5,No,No,No,4 +41,Control,6,No,No,No,4 +41,Control,7,No,No,No,6 +41,Control,8,No,No,No,6 +41,Control,9,No,No,No,4 +41,Control,10,No,No,No,3 +41,Control,11,No,No,No,4 +41,Control,12,No,No,No,3 +41,Control,13,No,No,No,5 +41,Control,14,No,No,No,4 +41,Control,15,No,No,No,1 +41,Control,16,No,No,No,5 +41,Control,17,No,No,No,6 +41,Control,18,No,No,No,5 +41,Control,19,No,No,No,3 +41,Control,20,No,No,No,3 +41,Control,21,No,No,No,5 +41,Control,22,No,No,No,3 +41,Control,23,No,No,No,3 +41,Control,24,No,No,No,4 +41,Control,25,No,No,No,5 +41,Control,26,No,No,No,3 +41,Control,27,No,No,No,3 +41,Control,28,No,No,No,5 +41,Control,29,No,No,No,4 +41,Control,30,No,No,No,3 +42,Control,1,No,No,No,4 +42,Control,2,No,No,No,3 +42,Control,3,No,No,No,3 +42,Control,4,No,No,No,3 +42,Control,5,No,No,No,4 +42,Control,6,No,No,No,4 +42,Control,7,No,No,No,5 +42,Control,8,No,No,No,4 +42,Control,9,No,No,No,5 +42,Control,10,No,No,No,6 +42,Control,11,No,No,No,5 +42,Control,12,No,No,No,3 +42,Control,13,No,No,No,3 +42,Control,14,No,No,No,4 +42,Control,15,No,No,No,4 +42,Control,16,No,No,No,5 +42,Control,17,No,No,No,6 +42,Control,18,No,No,No,5 +42,Control,19,No,No,No,5 +42,Control,20,No,No,No,3 +42,Control,21,No,No,No,5 +42,Control,22,No,No,No,6 +42,Control,23,No,No,No,4 +42,Control,24,No,No,No,4 +42,Control,25,No,No,No,4 +42,Control,26,No,No,No,5 +42,Control,27,No,No,No,5 +42,Control,28,No,No,No,5 +42,Control,29,No,No,No,5 +42,Control,30,No,No,No,4 +43,Control,1,No,No,No,5 +43,Control,2,No,No,No,4 +43,Control,3,No,No,No,5 +43,Control,4,No,No,No,5 +43,Control,5,No,No,No,4 +43,Control,6,No,No,No,4 +43,Control,7,No,No,No,4 +43,Control,8,No,No,No,5 +43,Control,9,No,No,No,5 +43,Control,10,No,No,No,3 +43,Control,11,No,No,No,5 +43,Control,12,No,No,No,6 +43,Control,13,No,No,No,4 +43,Control,14,No,No,No,4 +43,Control,15,No,No,No,4 +43,Control,16,No,No,No,6 +43,Control,17,No,No,No,6 +43,Control,18,No,No,No,5 +43,Control,19,No,No,No,4 +43,Control,20,No,No,No,5 +43,Control,21,No,No,No,5 +43,Control,22,No,No,No,5 +43,Control,23,No,No,No,5 +43,Control,24,No,No,No,4 +43,Control,25,No,No,No,5 +43,Control,26,No,No,No,6 +43,Control,27,No,No,No,6 +43,Control,28,No,No,No,5 +43,Control,29,No,No,No,6 +43,Control,30,No,No,No,3 +44,Control,1,No,No,No,6 +44,Control,2,No,No,No,6 +44,Control,3,No,No,No,7 +44,Control,4,No,No,No,5 +44,Control,5,No,No,No,7 +44,Control,6,No,No,No,4 +44,Control,7,No,No,No,7 +44,Control,8,No,No,No,5 +44,Control,9,No,No,No,4 +44,Control,10,No,No,No,6 +44,Control,11,No,No,No,4 +44,Control,12,No,No,No,4 +44,Control,13,No,No,No,5 +44,Control,14,No,No,No,6 +44,Control,15,No,No,No,7 +44,Control,16,No,No,No,4 +44,Control,17,No,No,No,5 +44,Control,18,No,No,No,6 +44,Control,19,No,No,No,5 +44,Control,20,No,No,No,6 +44,Control,21,No,No,No,5 +44,Control,22,No,No,No,5 +44,Control,23,No,No,No,4 +44,Control,24,No,No,No,5 +44,Control,25,No,No,No,6 +44,Control,26,No,No,No,5 +44,Control,27,No,No,No,7 +44,Control,28,No,No,No,4 +44,Control,29,No,No,No,7 +44,Control,30,No,No,No,5 +45,Control,1,No,No,No,6 +45,Control,2,No,No,No,6 +45,Control,3,No,No,No,6 +45,Control,4,No,No,No,8 +45,Control,5,No,No,No,6 +45,Control,6,No,No,No,6 +45,Control,7,No,No,No,5 +45,Control,8,No,No,No,7 +45,Control,9,No,No,No,6 +45,Control,10,No,No,No,8 +45,Control,11,No,No,No,9 +45,Control,12,No,No,No,6 +45,Control,13,No,No,No,6 +45,Control,14,No,No,No,5 +45,Control,15,No,No,No,5 +45,Control,16,No,No,No,7 +45,Control,17,No,No,No,6 +45,Control,18,No,No,No,5 +45,Control,19,No,No,No,5 +45,Control,20,No,No,No,7 +45,Control,21,No,No,No,7 +45,Control,22,No,No,No,7 +45,Control,23,No,No,No,7 +45,Control,24,No,No,No,8 +45,Control,25,No,No,No,5 +45,Control,26,No,No,No,5 +45,Control,27,No,No,No,6 +45,Control,28,No,No,No,7 +45,Control,29,No,No,No,6 +45,Control,30,No,No,No,7 +46,Control,1,No,No,No,6 +46,Control,2,No,No,No,5 +46,Control,3,No,No,No,6 +46,Control,4,No,No,No,5 +46,Control,5,No,No,No,5 +46,Control,6,No,No,No,6 +46,Control,7,No,No,No,6 +46,Control,8,No,No,No,6 +46,Control,9,No,No,No,7 +46,Control,10,No,No,No,5 +46,Control,11,No,No,No,8 +46,Control,12,No,No,No,8 +46,Control,13,No,No,No,6 +46,Control,14,No,No,No,5 +46,Control,15,No,No,No,6 +46,Control,16,No,No,No,4 +46,Control,17,No,No,No,6 +46,Control,18,No,No,No,5 +46,Control,19,No,No,No,6 +46,Control,20,No,No,No,6 +46,Control,21,No,No,No,7 +46,Control,22,No,No,No,6 +46,Control,23,No,No,No,6 +46,Control,24,No,No,No,7 +46,Control,25,No,No,No,4 +46,Control,26,No,No,No,5 +46,Control,27,No,No,No,6 +46,Control,28,No,No,No,6 +46,Control,29,No,No,No,6 +46,Control,30,No,No,No,5 +47,Control,1,No,No,No,4 +47,Control,2,No,No,No,5 +47,Control,3,No,No,No,5 +47,Control,4,No,No,No,4 +47,Control,5,No,No,No,4 +47,Control,6,No,No,No,5 +47,Control,7,No,No,No,4 +47,Control,8,No,No,No,4 +47,Control,9,No,No,No,4 +47,Control,10,No,No,No,3 +47,Control,11,No,No,No,5 +47,Control,12,No,No,No,5 +47,Control,13,No,No,No,4 +47,Control,14,No,No,No,5 +47,Control,15,No,No,No,4 +47,Control,16,No,No,No,5 +47,Control,17,No,No,No,4 +47,Control,18,No,No,No,5 +47,Control,19,No,No,No,5 +47,Control,20,No,No,No,3 +47,Control,21,No,No,No,4 +47,Control,22,No,No,No,4 +47,Control,23,No,No,No,4 +47,Control,24,No,No,No,4 +47,Control,25,No,No,No,4 +47,Control,26,No,No,No,5 +47,Control,27,No,No,No,4 +47,Control,28,No,No,No,3 +47,Control,29,No,No,No,5 +47,Control,30,No,No,No,4 +48,Control,1,No,No,No,6 +48,Control,2,No,No,No,3 +48,Control,3,No,No,No,5 +48,Control,4,No,No,No,5 +48,Control,5,No,No,No,3 +48,Control,6,No,No,No,5 +48,Control,7,No,No,No,4 +48,Control,8,No,No,No,4 +48,Control,9,No,No,No,4 +48,Control,10,No,No,No,5 +48,Control,11,No,No,No,3 +48,Control,12,No,No,No,6 +48,Control,13,No,No,No,5 +48,Control,14,No,No,No,4 +48,Control,15,No,No,No,6 +48,Control,16,No,No,No,5 +48,Control,17,No,No,No,5 +48,Control,18,No,No,No,4 +48,Control,19,No,No,No,4 +48,Control,20,No,No,No,2 +48,Control,21,No,No,No,4 +48,Control,22,No,No,No,6 +48,Control,23,No,No,No,6 +48,Control,24,No,No,No,5 +48,Control,25,No,No,No,4 +48,Control,26,No,No,No,2 +48,Control,27,No,No,No,4 +48,Control,28,No,No,No,5 +48,Control,29,No,No,No,4 +48,Control,30,No,No,No,6 +49,Control,1,No,No,No,7 +49,Control,2,No,No,No,6 +49,Control,3,No,No,No,4 +49,Control,4,No,No,No,6 +49,Control,5,No,No,No,6 +49,Control,6,No,No,No,7 +49,Control,7,No,No,No,6 +49,Control,8,No,No,No,7 +49,Control,9,No,No,No,5 +49,Control,10,No,No,No,7 +49,Control,11,No,No,No,6 +49,Control,12,No,No,No,4 +49,Control,13,No,No,No,6 +49,Control,14,No,No,No,7 +49,Control,15,No,No,No,5 +49,Control,16,No,No,No,5 +49,Control,17,No,No,No,5 +49,Control,18,No,No,No,6 +49,Control,19,No,No,No,7 +49,Control,20,No,No,No,6 +49,Control,21,No,No,No,4 +49,Control,22,No,No,No,6 +49,Control,23,No,No,No,5 +49,Control,24,No,No,No,6 +49,Control,25,No,No,No,6 +49,Control,26,No,No,No,5 +49,Control,27,No,No,No,7 +49,Control,28,No,No,No,5 +49,Control,29,No,No,No,6 +49,Control,30,No,No,No,7 +50,Control,1,No,No,No,7 +50,Control,2,No,No,No,5 +50,Control,3,No,No,No,6 +50,Control,4,No,No,No,7 +50,Control,5,No,No,No,4 +50,Control,6,No,No,No,6 +50,Control,7,No,No,No,5 +50,Control,8,No,No,No,5 +50,Control,9,No,No,No,5 +50,Control,10,No,No,No,5 +50,Control,11,No,No,No,5 +50,Control,12,No,No,No,6 +50,Control,13,No,No,No,6 +50,Control,14,No,No,No,4 +50,Control,15,No,No,No,5 +50,Control,16,No,No,No,3 +50,Control,17,No,No,No,8 +50,Control,18,No,No,No,6 +50,Control,19,No,No,No,4 +50,Control,20,No,No,No,5 +50,Control,21,No,No,No,7 +50,Control,22,No,No,No,3 +50,Control,23,No,No,No,4 +50,Control,24,No,No,No,4 +50,Control,25,No,No,No,4 +50,Control,26,No,No,No,3 +50,Control,27,No,No,No,6 +50,Control,28,No,No,No,6 +50,Control,29,No,No,No,3 +50,Control,30,No,No,No,6 +51,Control,1,No,No,No,3 +51,Control,2,No,No,No,5 +51,Control,3,No,No,No,4 +51,Control,4,No,No,No,4 +51,Control,5,No,No,No,5 +51,Control,6,No,No,No,6 +51,Control,7,No,No,No,5 +51,Control,8,No,No,No,4 +51,Control,9,No,No,No,4 +51,Control,10,No,No,No,5 +51,Control,11,No,No,No,4 +51,Control,12,No,No,No,5 +51,Control,13,No,No,No,5 +51,Control,14,No,No,No,2 +51,Control,15,No,No,No,3 +51,Control,16,No,No,No,5 +51,Control,17,No,No,No,5 +51,Control,18,No,No,No,5 +51,Control,19,No,No,No,5 +51,Control,20,No,No,No,3 +51,Control,21,No,No,No,5 +51,Control,22,No,No,No,3 +51,Control,23,No,No,No,5 +51,Control,24,No,No,No,2 +51,Control,25,No,No,No,6 +51,Control,26,No,No,No,5 +51,Control,27,No,No,No,3 +51,Control,28,No,No,No,4 +51,Control,29,No,No,No,6 +51,Control,30,No,No,No,3 +52,Control,1,No,No,No,6 +52,Control,2,No,No,No,5 +52,Control,3,No,No,No,5 +52,Control,4,No,No,No,6 +52,Control,5,No,No,No,3 +52,Control,6,No,No,No,6 +52,Control,7,No,No,No,4 +52,Control,8,No,No,No,4 +52,Control,9,No,No,No,5 +52,Control,10,No,No,No,5 +52,Control,11,No,No,No,6 +52,Control,12,No,No,No,4 +52,Control,13,No,No,No,6 +52,Control,14,No,No,No,4 +52,Control,15,No,No,No,4 +52,Control,16,No,No,No,3 +52,Control,17,No,No,No,4 +52,Control,18,No,No,No,5 +52,Control,19,No,No,No,3 +52,Control,20,No,No,No,4 +52,Control,21,No,No,No,5 +52,Control,22,No,No,No,4 +52,Control,23,No,No,No,4 +52,Control,24,No,No,No,5 +52,Control,25,No,No,No,5 +52,Control,26,No,No,No,4 +52,Control,27,No,No,No,5 +52,Control,28,No,No,No,4 +52,Control,29,No,No,No,6 +52,Control,30,No,No,No,3 +53,Control,1,No,No,No,5 +53,Control,2,No,No,No,6 +53,Control,3,No,No,No,6 +53,Control,4,No,No,No,5 +53,Control,5,No,No,No,4 +53,Control,6,No,No,No,5 +53,Control,7,No,No,No,4 +53,Control,8,No,No,No,5 +53,Control,9,No,No,No,6 +53,Control,10,No,No,No,6 +53,Control,11,No,No,No,5 +53,Control,12,No,No,No,4 +53,Control,13,No,No,No,7 +53,Control,14,No,No,No,7 +53,Control,15,No,No,No,5 +53,Control,16,No,No,No,5 +53,Control,17,No,No,No,6 +53,Control,18,No,No,No,5 +53,Control,19,No,No,No,6 +53,Control,20,No,No,No,5 +53,Control,21,No,No,No,6 +53,Control,22,No,No,No,3 +53,Control,23,No,No,No,4 +53,Control,24,No,No,No,6 +53,Control,25,No,No,No,5 +53,Control,26,No,No,No,6 +53,Control,27,No,No,No,6 +53,Control,28,No,No,No,5 +53,Control,29,No,No,No,5 +53,Control,30,No,No,No,5 +54,Control,1,No,No,No,6 +54,Control,2,No,No,No,5 +54,Control,3,No,No,No,5 +54,Control,4,No,No,No,5 +54,Control,5,No,No,No,5 +54,Control,6,No,No,No,5 +54,Control,7,No,No,No,5 +54,Control,8,No,No,No,5 +54,Control,9,No,No,No,4 +54,Control,10,No,No,No,8 +54,Control,11,No,No,No,7 +54,Control,12,No,No,No,4 +54,Control,13,No,No,No,7 +54,Control,14,No,No,No,5 +54,Control,15,No,No,No,6 +54,Control,16,No,No,No,5 +54,Control,17,No,No,No,5 +54,Control,18,No,No,No,6 +54,Control,19,No,No,No,5 +54,Control,20,No,No,No,5 +54,Control,21,No,No,No,5 +54,Control,22,No,No,No,7 +54,Control,23,No,No,No,6 +54,Control,24,No,No,No,6 +54,Control,25,No,No,No,4 +54,Control,26,No,No,No,6 +54,Control,27,No,No,No,5 +54,Control,28,No,No,No,6 +54,Control,29,No,No,No,6 +54,Control,30,No,No,No,6 +55,Control,1,No,No,No,3 +55,Control,2,No,No,No,3 +55,Control,3,No,No,No,4 +55,Control,4,No,No,No,4 +55,Control,5,No,No,No,4 +55,Control,6,No,No,No,4 +55,Control,7,No,No,No,3 +55,Control,8,No,No,No,3 +55,Control,9,No,No,No,5 +55,Control,10,No,No,No,2 +55,Control,11,No,No,No,3 +55,Control,12,No,No,No,1 +55,Control,13,No,No,No,2 +55,Control,14,No,No,No,3 +55,Control,15,No,No,No,3 +55,Control,16,No,No,No,4 +55,Control,17,No,No,No,3 +55,Control,18,No,No,No,2 +55,Control,19,No,No,No,3 +55,Control,20,No,No,No,2 +55,Control,21,No,No,No,3 +55,Control,22,No,No,No,4 +55,Control,23,No,No,No,3 +55,Control,24,No,No,No,3 +55,Control,25,No,No,No,3 +55,Control,26,No,No,No,3 +55,Control,27,No,No,No,3 +55,Control,28,No,No,No,4 +55,Control,29,No,No,No,3 +55,Control,30,No,No,No,3 +56,Control,1,No,No,No,3 +56,Control,2,No,No,No,5 +56,Control,3,No,No,No,5 +56,Control,4,No,No,No,2 +56,Control,5,No,No,No,5 +56,Control,6,No,No,No,6 +56,Control,7,No,No,No,4 +56,Control,8,No,No,No,5 +56,Control,9,No,No,No,4 +56,Control,10,No,No,No,5 +56,Control,11,No,No,No,3 +56,Control,12,No,No,No,4 +56,Control,13,No,No,No,3 +56,Control,14,No,No,No,5 +56,Control,15,No,No,No,3 +56,Control,16,No,No,No,8 +56,Control,17,No,No,No,4 +56,Control,18,No,No,No,5 +56,Control,19,No,No,No,6 +56,Control,20,No,No,No,4 +56,Control,21,No,No,No,5 +56,Control,22,No,No,No,3 +56,Control,23,No,No,No,4 +56,Control,24,No,No,No,5 +56,Control,25,No,No,No,7 +56,Control,26,No,No,No,3 +56,Control,27,No,No,No,5 +56,Control,28,No,No,No,6 +56,Control,29,No,No,No,7 +56,Control,30,No,No,No,3 +57,Control,1,No,No,No,7 +57,Control,2,No,No,No,4 +57,Control,3,No,No,No,6 +57,Control,4,No,No,No,6 +57,Control,5,No,No,No,6 +57,Control,6,No,No,No,4 +57,Control,7,No,No,No,5 +57,Control,8,No,No,No,7 +57,Control,9,No,No,No,5 +57,Control,10,No,No,No,7 +57,Control,11,No,No,No,4 +57,Control,12,No,No,No,7 +57,Control,13,No,No,No,5 +57,Control,14,No,No,No,5 +57,Control,15,No,No,No,6 +57,Control,16,No,No,No,7 +57,Control,17,No,No,No,6 +57,Control,18,No,No,No,6 +57,Control,19,No,No,No,6 +57,Control,20,No,No,No,5 +57,Control,21,No,No,No,6 +57,Control,22,No,No,No,5 +57,Control,23,No,No,No,3 +57,Control,24,No,No,No,5 +57,Control,25,No,No,No,5 +57,Control,26,No,No,No,6 +57,Control,27,No,No,No,5 +57,Control,28,No,No,No,6 +57,Control,29,No,No,No,5 +57,Control,30,No,No,No,6 +58,Control,1,No,No,No,6 +58,Control,2,No,No,No,5 +58,Control,3,No,No,No,8 +58,Control,4,No,No,No,6 +58,Control,5,No,No,No,7 +58,Control,6,No,No,No,6 +58,Control,7,No,No,No,6 +58,Control,8,No,No,No,5 +58,Control,9,No,No,No,4 +58,Control,10,No,No,No,5 +58,Control,11,No,No,No,6 +58,Control,12,No,No,No,7 +58,Control,13,No,No,No,4 +58,Control,14,No,No,No,6 +58,Control,15,No,No,No,6 +58,Control,16,No,No,No,7 +58,Control,17,No,No,No,6 +58,Control,18,No,No,No,7 +58,Control,19,No,No,No,7 +58,Control,20,No,No,No,4 +58,Control,21,No,No,No,4 +58,Control,22,No,No,No,7 +58,Control,23,No,No,No,4 +58,Control,24,No,No,No,5 +58,Control,25,No,No,No,6 +58,Control,26,No,No,No,7 +58,Control,27,No,No,No,4 +58,Control,28,No,No,No,7 +58,Control,29,No,No,No,6 +58,Control,30,No,No,No,5 +59,Control,1,No,No,No,4 +59,Control,2,No,No,No,5 +59,Control,3,No,No,No,4 +59,Control,4,No,No,No,6 +59,Control,5,No,No,No,5 +59,Control,6,No,No,No,3 +59,Control,7,No,No,No,6 +59,Control,8,No,No,No,7 +59,Control,9,No,No,No,7 +59,Control,10,No,No,No,5 +59,Control,11,No,No,No,4 +59,Control,12,No,No,No,5 +59,Control,13,No,No,No,5 +59,Control,14,No,No,No,6 +59,Control,15,No,No,No,3 +59,Control,16,No,No,No,4 +59,Control,17,No,No,No,4 +59,Control,18,No,No,No,5 +59,Control,19,No,No,No,5 +59,Control,20,No,No,No,4 +59,Control,21,No,No,No,5 +59,Control,22,No,No,No,5 +59,Control,23,No,No,No,4 +59,Control,24,No,No,No,3 +59,Control,25,No,No,No,4 +59,Control,26,No,No,No,5 +59,Control,27,No,No,No,5 +59,Control,28,No,No,No,3 +59,Control,29,No,No,No,4 +59,Control,30,No,No,No,4 +60,Control,1,No,No,No,4 +60,Control,2,No,No,No,4 +60,Control,3,No,No,No,2 +60,Control,4,No,No,No,4 +60,Control,5,No,No,No,5 +60,Control,6,No,No,No,5 +60,Control,7,No,No,No,3 +60,Control,8,No,No,No,4 +60,Control,9,No,No,No,3 +60,Control,10,No,No,No,4 +60,Control,11,No,No,No,3 +60,Control,12,No,No,No,2 +60,Control,13,No,No,No,3 +60,Control,14,No,No,No,4 +60,Control,15,No,No,No,4 +60,Control,16,No,No,No,5 +60,Control,17,No,No,No,3 +60,Control,18,No,No,No,4 +60,Control,19,No,No,No,2 +60,Control,20,No,No,No,2 +60,Control,21,No,No,No,3 +60,Control,22,No,No,No,5 +60,Control,23,No,No,No,4 +60,Control,24,No,No,No,5 +60,Control,25,No,No,No,6 +60,Control,26,No,No,No,2 +60,Control,27,No,No,No,3 +60,Control,28,No,No,No,4 +60,Control,29,No,No,No,2 +60,Control,30,No,No,No,4 +61,Control,1,No,No,No,4 +61,Control,2,No,No,No,6 +61,Control,3,No,No,No,6 +61,Control,4,No,No,No,4 +61,Control,5,No,No,No,5 +61,Control,6,No,No,No,4 +61,Control,7,No,No,No,3 +61,Control,8,No,No,No,4 +61,Control,9,No,No,No,5 +61,Control,10,No,No,No,5 +61,Control,11,No,No,No,5 +61,Control,12,No,No,No,4 +61,Control,13,No,No,No,4 +61,Control,14,No,No,No,4 +61,Control,15,No,No,No,4 +61,Control,16,No,No,No,5 +61,Control,17,No,No,No,4 +61,Control,18,No,No,No,5 +61,Control,19,No,No,No,6 +61,Control,20,No,No,No,4 +61,Control,21,No,No,No,4 +61,Control,22,No,No,No,4 +61,Control,23,No,No,No,5 +61,Control,24,No,No,No,5 +61,Control,25,No,No,No,7 +61,Control,26,No,No,No,4 +61,Control,27,No,No,No,5 +61,Control,28,No,No,No,6 +61,Control,29,No,No,No,5 +61,Control,30,No,No,No,3 +62,Control,1,No,No,No,5 +62,Control,2,No,No,No,6 +62,Control,3,No,No,No,5 +62,Control,4,No,No,No,4 +62,Control,5,No,No,No,6 +62,Control,6,No,No,No,5 +62,Control,7,No,No,No,5 +62,Control,8,No,No,No,4 +62,Control,9,No,No,No,6 +62,Control,10,No,No,No,5 +62,Control,11,No,No,No,4 +62,Control,12,No,No,No,4 +62,Control,13,No,No,No,7 +62,Control,14,No,No,No,3 +62,Control,15,No,No,No,6 +62,Control,16,No,No,No,5 +62,Control,17,No,No,No,7 +62,Control,18,No,No,No,5 +62,Control,19,No,No,No,6 +62,Control,20,No,No,No,4 +62,Control,21,No,No,No,4 +62,Control,22,No,No,No,6 +62,Control,23,No,No,No,5 +62,Control,24,No,No,No,5 +62,Control,25,No,No,No,4 +62,Control,26,No,No,No,4 +62,Control,27,No,No,No,5 +62,Control,28,No,No,No,5 +62,Control,29,No,No,No,6 +62,Control,30,No,No,No,4 +63,Control,1,No,No,No,2 +63,Control,2,No,No,No,5 +63,Control,3,No,No,No,2 +63,Control,4,No,No,No,2 +63,Control,5,No,No,No,3 +63,Control,6,No,No,No,2 +63,Control,7,No,No,No,2 +63,Control,8,No,No,No,1 +63,Control,9,No,No,No,4 +63,Control,10,No,No,No,3 +63,Control,11,No,No,No,3 +63,Control,12,No,No,No,3 +63,Control,13,No,No,No,2 +63,Control,14,No,No,No,2 +63,Control,15,No,No,No,1 +63,Control,16,No,No,No,4 +63,Control,17,No,No,No,2 +63,Control,18,No,No,No,3 +63,Control,19,No,No,No,1 +63,Control,20,No,No,No,2 +63,Control,21,No,No,No,1 +63,Control,22,No,No,No,5 +63,Control,23,No,No,No,3 +63,Control,24,No,No,No,2 +63,Control,25,No,No,No,2 +63,Control,26,No,No,No,4 +63,Control,27,No,No,No,1 +63,Control,28,No,No,No,1 +63,Control,29,No,No,No,3 +63,Control,30,No,No,No,4 +64,Control,1,No,No,No,6 +64,Control,2,No,No,No,6 +64,Control,3,No,No,No,5 +64,Control,4,No,No,No,4 +64,Control,5,No,No,No,6 +64,Control,6,No,No,No,5 +64,Control,7,No,No,No,5 +64,Control,8,No,No,No,6 +64,Control,9,No,No,No,7 +64,Control,10,No,No,No,6 +64,Control,11,No,No,No,6 +64,Control,12,No,No,No,6 +64,Control,13,No,No,No,5 +64,Control,14,No,No,No,5 +64,Control,15,No,No,No,4 +64,Control,16,No,No,No,5 +64,Control,17,No,No,No,7 +64,Control,18,No,No,No,3 +64,Control,19,No,No,No,4 +64,Control,20,No,No,No,4 +64,Control,21,No,No,No,6 +64,Control,22,No,No,No,3 +64,Control,23,No,No,No,7 +64,Control,24,No,No,No,4 +64,Control,25,No,No,No,6 +64,Control,26,No,No,No,7 +64,Control,27,No,No,No,3 +64,Control,28,No,No,No,8 +64,Control,29,No,No,No,4 +64,Control,30,No,No,No,5 +65,Control,1,No,No,No,5 +65,Control,2,No,No,No,5 +65,Control,3,No,No,No,5 +65,Control,4,No,No,No,4 +65,Control,5,No,No,No,4 +65,Control,6,No,No,No,5 +65,Control,7,No,No,No,6 +65,Control,8,No,No,No,5 +65,Control,9,No,No,No,6 +65,Control,10,No,No,No,5 +65,Control,11,No,No,No,4 +65,Control,12,No,No,No,6 +65,Control,13,No,No,No,5 +65,Control,14,No,No,No,6 +65,Control,15,No,No,No,6 +65,Control,16,No,No,No,6 +65,Control,17,No,No,No,5 +65,Control,18,No,No,No,4 +65,Control,19,No,No,No,5 +65,Control,20,No,No,No,4 +65,Control,21,No,No,No,6 +65,Control,22,No,No,No,6 +65,Control,23,No,No,No,5 +65,Control,24,No,No,No,6 +65,Control,25,No,No,No,6 +65,Control,26,No,No,No,5 +65,Control,27,No,No,No,6 +65,Control,28,No,No,No,7 +65,Control,29,No,No,No,7 +65,Control,30,No,No,No,6 +66,Control,1,No,No,No,7 +66,Control,2,No,No,No,5 +66,Control,3,No,No,No,6 +66,Control,4,No,No,No,7 +66,Control,5,No,No,No,6 +66,Control,6,No,No,No,7 +66,Control,7,No,No,No,6 +66,Control,8,No,No,No,6 +66,Control,9,No,No,No,6 +66,Control,10,No,No,No,5 +66,Control,11,No,No,No,6 +66,Control,12,No,No,No,6 +66,Control,13,No,No,No,5 +66,Control,14,No,No,No,8 +66,Control,15,No,No,No,7 +66,Control,16,No,No,No,5 +66,Control,17,No,No,No,6 +66,Control,18,No,No,No,5 +66,Control,19,No,No,No,7 +66,Control,20,No,No,No,7 +66,Control,21,No,No,No,8 +66,Control,22,No,No,No,5 +66,Control,23,No,No,No,4 +66,Control,24,No,No,No,5 +66,Control,25,No,No,No,4 +66,Control,26,No,No,No,7 +66,Control,27,No,No,No,6 +66,Control,28,No,No,No,6 +66,Control,29,No,No,No,6 +66,Control,30,No,No,No,5 +67,Control,1,No,No,No,4 +67,Control,2,No,No,No,5 +67,Control,3,No,No,No,4 +67,Control,4,No,No,No,3 +67,Control,5,No,No,No,4 +67,Control,6,No,No,No,7 +67,Control,7,No,No,No,6 +67,Control,8,No,No,No,5 +67,Control,9,No,No,No,5 +67,Control,10,No,No,No,4 +67,Control,11,No,No,No,4 +67,Control,12,No,No,No,5 +67,Control,13,No,No,No,4 +67,Control,14,No,No,No,4 +67,Control,15,No,No,No,6 +67,Control,16,No,No,No,6 +67,Control,17,No,No,No,5 +67,Control,18,No,No,No,4 +67,Control,19,No,No,No,3 +67,Control,20,No,No,No,4 +67,Control,21,No,No,No,5 +67,Control,22,No,No,No,5 +67,Control,23,No,No,No,5 +67,Control,24,No,No,No,5 +67,Control,25,No,No,No,4 +67,Control,26,No,No,No,5 +67,Control,27,No,No,No,5 +67,Control,28,No,No,No,5 +67,Control,29,No,No,No,3 +67,Control,30,No,No,No,5 +68,Control,1,No,No,No,5 +68,Control,2,No,No,No,5 +68,Control,3,No,No,No,6 +68,Control,4,No,No,No,3 +68,Control,5,No,No,No,6 +68,Control,6,No,No,No,4 +68,Control,7,No,No,No,6 +68,Control,8,No,No,No,5 +68,Control,9,No,No,No,5 +68,Control,10,No,No,No,6 +68,Control,11,No,No,No,5 +68,Control,12,No,No,No,5 +68,Control,13,No,No,No,5 +68,Control,14,No,No,No,7 +68,Control,15,No,No,No,7 +68,Control,16,No,No,No,6 +68,Control,17,No,No,No,4 +68,Control,18,No,No,No,4 +68,Control,19,No,No,No,6 +68,Control,20,No,No,No,6 +68,Control,21,No,No,No,5 +68,Control,22,No,No,No,5 +68,Control,23,No,No,No,5 +68,Control,24,No,No,No,5 +68,Control,25,No,No,No,6 +68,Control,26,No,No,No,6 +68,Control,27,No,No,No,6 +68,Control,28,No,No,No,8 +68,Control,29,No,No,No,5 +68,Control,30,No,No,No,6 +69,Control,1,No,No,No,6 +69,Control,2,No,No,No,4 +69,Control,3,No,No,No,5 +69,Control,4,No,No,No,7 +69,Control,5,No,No,No,7 +69,Control,6,No,No,No,7 +69,Control,7,No,No,No,7 +69,Control,8,No,No,No,8 +69,Control,9,No,No,No,6 +69,Control,10,No,No,No,6 +69,Control,11,No,No,No,8 +69,Control,12,No,No,No,8 +69,Control,13,No,No,No,5 +69,Control,14,No,No,No,7 +69,Control,15,No,No,No,8 +69,Control,16,No,No,No,7 +69,Control,17,No,No,No,5 +69,Control,18,No,No,No,7 +69,Control,19,No,No,No,5 +69,Control,20,No,No,No,7 +69,Control,21,No,No,No,4 +69,Control,22,No,No,No,5 +69,Control,23,No,No,No,7 +69,Control,24,No,No,No,7 +69,Control,25,No,No,No,6 +69,Control,26,No,No,No,6 +69,Control,27,No,No,No,7 +69,Control,28,No,No,No,5 +69,Control,29,No,No,No,7 +69,Control,30,No,No,No,7 +70,Control,1,No,No,No,3 +70,Control,2,No,No,No,5 +70,Control,3,No,No,No,3 +70,Control,4,No,No,No,2 +70,Control,5,No,No,No,2 +70,Control,6,No,No,No,6 +70,Control,7,No,No,No,5 +70,Control,8,No,No,No,2 +70,Control,9,No,No,No,3 +70,Control,10,No,No,No,4 +70,Control,11,No,No,No,6 +70,Control,12,No,No,No,3 +70,Control,13,No,No,No,3 +70,Control,14,No,No,No,4 +70,Control,15,No,No,No,4 +70,Control,16,No,No,No,5 +70,Control,17,No,No,No,2 +70,Control,18,No,No,No,5 +70,Control,19,No,No,No,2 +70,Control,20,No,No,No,2 +70,Control,21,No,No,No,5 +70,Control,22,No,No,No,5 +70,Control,23,No,No,No,4 +70,Control,24,No,No,No,4 +70,Control,25,No,No,No,3 +70,Control,26,No,No,No,3 +70,Control,27,No,No,No,3 +70,Control,28,No,No,No,3 +70,Control,29,No,No,No,4 +70,Control,30,No,No,No,4 +71,Control,1,No,No,No,7 +71,Control,2,No,No,No,7 +71,Control,3,No,No,No,6 +71,Control,4,No,No,No,7 +71,Control,5,No,No,No,8 +71,Control,6,No,No,No,9 +71,Control,7,No,No,No,7 +71,Control,8,No,No,No,9 +71,Control,9,No,No,No,7 +71,Control,10,No,No,No,6 +71,Control,11,No,No,No,7 +71,Control,12,No,No,No,8 +71,Control,13,No,No,No,8 +71,Control,14,No,No,No,6 +71,Control,15,No,No,No,9 +71,Control,16,No,No,No,7 +71,Control,17,No,No,No,6 +71,Control,18,No,No,No,6 +71,Control,19,No,No,No,6 +71,Control,20,No,No,No,7 +71,Control,21,No,No,No,8 +71,Control,22,No,No,No,8 +71,Control,23,No,No,No,7 +71,Control,24,No,No,No,7 +71,Control,25,No,No,No,8 +71,Control,26,No,No,No,7 +71,Control,27,No,No,No,6 +71,Control,28,No,No,No,6 +71,Control,29,No,No,No,8 +71,Control,30,No,No,No,6 +72,Control,1,No,No,No,6 +72,Control,2,No,No,No,6 +72,Control,3,No,No,No,7 +72,Control,4,No,No,No,6 +72,Control,5,No,No,No,7 +72,Control,6,No,No,No,8 +72,Control,7,No,No,No,7 +72,Control,8,No,No,No,7 +72,Control,9,No,No,No,6 +72,Control,10,No,No,No,6 +72,Control,11,No,No,No,8 +72,Control,12,No,No,No,6 +72,Control,13,No,No,No,8 +72,Control,14,No,No,No,5 +72,Control,15,No,No,No,6 +72,Control,16,No,No,No,8 +72,Control,17,No,No,No,7 +72,Control,18,No,No,No,5 +72,Control,19,No,No,No,6 +72,Control,20,No,No,No,7 +72,Control,21,No,No,No,7 +72,Control,22,No,No,No,5 +72,Control,23,No,No,No,6 +72,Control,24,No,No,No,8 +72,Control,25,No,No,No,6 +72,Control,26,No,No,No,6 +72,Control,27,No,No,No,7 +72,Control,28,No,No,No,7 +72,Control,29,No,No,No,6 +72,Control,30,No,No,No,5 +73,Control,1,No,No,No,7 +73,Control,2,No,No,No,5 +73,Control,3,No,No,No,6 +73,Control,4,No,No,No,7 +73,Control,5,No,No,No,5 +73,Control,6,No,No,No,6 +73,Control,7,No,No,No,6 +73,Control,8,No,No,No,4 +73,Control,9,No,No,No,6 +73,Control,10,No,No,No,6 +73,Control,11,No,No,No,5 +73,Control,12,No,No,No,6 +73,Control,13,No,No,No,7 +73,Control,14,No,No,No,7 +73,Control,15,No,No,No,6 +73,Control,16,No,No,No,6 +73,Control,17,No,No,No,6 +73,Control,18,No,No,No,6 +73,Control,19,No,No,No,5 +73,Control,20,No,No,No,6 +73,Control,21,No,No,No,6 +73,Control,22,No,No,No,5 +73,Control,23,No,No,No,8 +73,Control,24,No,No,No,6 +73,Control,25,No,No,No,7 +73,Control,26,No,No,No,4 +73,Control,27,No,No,No,6 +73,Control,28,No,No,No,5 +73,Control,29,No,No,No,5 +73,Control,30,No,No,No,6 +74,Control,1,No,No,No,4 +74,Control,2,No,No,No,3 +74,Control,3,No,No,No,4 +74,Control,4,No,No,No,4 +74,Control,5,No,No,No,3 +74,Control,6,No,No,No,4 +74,Control,7,No,No,No,5 +74,Control,8,No,No,No,5 +74,Control,9,No,No,No,3 +74,Control,10,No,No,No,5 +74,Control,11,No,No,No,4 +74,Control,12,No,No,No,4 +74,Control,13,No,No,No,4 +74,Control,14,No,No,No,4 +74,Control,15,No,No,No,6 +74,Control,16,No,No,No,5 +74,Control,17,No,No,No,5 +74,Control,18,No,No,No,4 +74,Control,19,No,No,No,5 +74,Control,20,No,No,No,3 +74,Control,21,No,No,No,5 +74,Control,22,No,No,No,4 +74,Control,23,No,No,No,4 +74,Control,24,No,No,No,5 +74,Control,25,No,No,No,2 +74,Control,26,No,No,No,3 +74,Control,27,No,No,No,5 +74,Control,28,No,No,No,5 +74,Control,29,No,No,No,2 +74,Control,30,No,No,No,3 +75,Control,1,No,No,No,4 +75,Control,2,No,No,No,4 +75,Control,3,No,No,No,4 +75,Control,4,No,No,No,4 +75,Control,5,No,No,No,6 +75,Control,6,No,No,No,5 +75,Control,7,No,No,No,4 +75,Control,8,No,No,No,5 +75,Control,9,No,No,No,5 +75,Control,10,No,No,No,3 +75,Control,11,No,No,No,5 +75,Control,12,No,No,No,5 +75,Control,13,No,No,No,5 +75,Control,14,No,No,No,4 +75,Control,15,No,No,No,3 +75,Control,16,No,No,No,6 +75,Control,17,No,No,No,5 +75,Control,18,No,No,No,3 +75,Control,19,No,No,No,5 +75,Control,20,No,No,No,5 +75,Control,21,No,No,No,5 +75,Control,22,No,No,No,6 +75,Control,23,No,No,No,4 +75,Control,24,No,No,No,5 +75,Control,25,No,No,No,6 +75,Control,26,No,No,No,3 +75,Control,27,No,No,No,6 +75,Control,28,No,No,No,5 +75,Control,29,No,No,No,5 +75,Control,30,No,No,No,4 +76,Control,1,No,No,No,5 +76,Control,2,No,No,No,2 +76,Control,3,No,No,No,3 +76,Control,4,No,No,No,4 +76,Control,5,No,No,No,5 +76,Control,6,No,No,No,5 +76,Control,7,No,No,No,3 +76,Control,8,No,No,No,5 +76,Control,9,No,No,No,2 +76,Control,10,No,No,No,6 +76,Control,11,No,No,No,4 +76,Control,12,No,No,No,5 +76,Control,13,No,No,No,4 +76,Control,14,No,No,No,4 +76,Control,15,No,No,No,5 +76,Control,16,No,No,No,4 +76,Control,17,No,No,No,3 +76,Control,18,No,No,No,7 +76,Control,19,No,No,No,5 +76,Control,20,No,No,No,5 +76,Control,21,No,No,No,4 +76,Control,22,No,No,No,4 +76,Control,23,No,No,No,3 +76,Control,24,No,No,No,5 +76,Control,25,No,No,No,3 +76,Control,26,No,No,No,6 +76,Control,27,No,No,No,5 +76,Control,28,No,No,No,3 +76,Control,29,No,No,No,4 +76,Control,30,No,No,No,4 +77,Control,1,No,No,No,3 +77,Control,2,No,No,No,6 +77,Control,3,No,No,No,5 +77,Control,4,No,No,No,6 +77,Control,5,No,No,No,5 +77,Control,6,No,No,No,5 +77,Control,7,No,No,No,6 +77,Control,8,No,No,No,6 +77,Control,9,No,No,No,5 +77,Control,10,No,No,No,5 +77,Control,11,No,No,No,5 +77,Control,12,No,No,No,6 +77,Control,13,No,No,No,6 +77,Control,14,No,No,No,5 +77,Control,15,No,No,No,6 +77,Control,16,No,No,No,5 +77,Control,17,No,No,No,6 +77,Control,18,No,No,No,5 +77,Control,19,No,No,No,4 +77,Control,20,No,No,No,4 +77,Control,21,No,No,No,5 +77,Control,22,No,No,No,7 +77,Control,23,No,No,No,4 +77,Control,24,No,No,No,4 +77,Control,25,No,No,No,4 +77,Control,26,No,No,No,5 +77,Control,27,No,No,No,4 +77,Control,28,No,No,No,4 +77,Control,29,No,No,No,5 +77,Control,30,No,No,No,5 +78,Control,1,No,No,No,3 +78,Control,2,No,No,No,4 +78,Control,3,No,No,No,4 +78,Control,4,No,No,No,3 +78,Control,5,No,No,No,4 +78,Control,6,No,No,No,2 +78,Control,7,No,No,No,3 +78,Control,8,No,No,No,4 +78,Control,9,No,No,No,5 +78,Control,10,No,No,No,4 +78,Control,11,No,No,No,2 +78,Control,12,No,No,No,3 +78,Control,13,No,No,No,4 +78,Control,14,No,No,No,3 +78,Control,15,No,No,No,4 +78,Control,16,No,No,No,3 +78,Control,17,No,No,No,4 +78,Control,18,No,No,No,5 +78,Control,19,No,No,No,3 +78,Control,20,No,No,No,4 +78,Control,21,No,No,No,4 +78,Control,22,No,No,No,4 +78,Control,23,No,No,No,3 +78,Control,24,No,No,No,3 +78,Control,25,No,No,No,3 +78,Control,26,No,No,No,3 +78,Control,27,No,No,No,4 +78,Control,28,No,No,No,3 +78,Control,29,No,No,No,3 +78,Control,30,No,No,No,4 +79,Control,1,No,No,No,7 +79,Control,2,No,No,No,6 +79,Control,3,No,No,No,7 +79,Control,4,No,No,No,6 +79,Control,5,No,No,No,7 +79,Control,6,No,No,No,7 +79,Control,7,No,No,No,4 +79,Control,8,No,No,No,5 +79,Control,9,No,No,No,6 +79,Control,10,No,No,No,7 +79,Control,11,No,No,No,6 +79,Control,12,No,No,No,5 +79,Control,13,No,No,No,6 +79,Control,14,No,No,No,8 +79,Control,15,No,No,No,6 +79,Control,16,No,No,No,6 +79,Control,17,No,No,No,6 +79,Control,18,No,No,No,6 +79,Control,19,No,No,No,6 +79,Control,20,No,No,No,5 +79,Control,21,No,No,No,5 +79,Control,22,No,No,No,7 +79,Control,23,No,No,No,5 +79,Control,24,No,No,No,6 +79,Control,25,No,No,No,9 +79,Control,26,No,No,No,6 +79,Control,27,No,No,No,5 +79,Control,28,No,No,No,6 +79,Control,29,No,No,No,7 +79,Control,30,No,No,No,6 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 +80,Control,1,No,No,No,1 \ No newline at end of file diff --git a/dot_config/private_Code/User/History/-1aabd2fd/entries.json b/dot_config/private_Code/User/History/-1aabd2fd/entries.json new file mode 100644 index 0000000..5f3deff --- /dev/null +++ b/dot_config/private_Code/User/History/-1aabd2fd/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/organization_happiness_study_data.csv","entries":[{"id":"0Ago.csv","timestamp":1774348491393}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/-2e6bd5d9/DwLj.py b/dot_config/private_Code/User/History/-2e6bd5d9/DwLj.py new file mode 100644 index 0000000..df6dd09 --- /dev/null +++ b/dot_config/private_Code/User/History/-2e6bd5d9/DwLj.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +import pandas as pd +import numpy as np + +# Load the data +df = pd.read_csv('organization_happiness_study_data.csv') + +print("=" * 75) +print("UPWARD TREND VERIFICATION - HAPPINESS GROWTH WITH HABIT COMPLETION") +print("=" * 75) + +# Calculate habit completion count +df['Habits_Count'] = ( + (df['Calendar_Adherence'] == 'Yes').astype(int) + + (df['Cleanliness_Adherence'] == 'Yes').astype(int) + + (df['Punctuality_Adherence'] == 'Yes').astype(int) +) + +print("\n--- Intervention Group: Early vs Late Month ---") +intervention = df[df['Group'] == 'Intervention'] +early_month = intervention[intervention['Day'] <= 10] +late_month = intervention[intervention['Day'] > 20] + +print(f"Days 1-10 (Early):") +print(f" Mean Happiness: {early_month['Happiness'].mean():.2f}") +print(f" Mean Habits Completed: {early_month['Habits_Count'].mean():.2f}") +print(f"\nDays 21-30 (Late):") +print(f" Mean Happiness: {late_month['Happiness'].mean():.2f}") +print(f" Mean Habits Completed: {late_month['Habits_Count'].mean():.2f}") +print(f"\nGrowth: {late_month['Happiness'].mean() - early_month['Happiness'].mean():.2f} points") + +print("\n--- Control Group: Early vs Late Month (Should be flat) ---") +control = df[df['Group'] == 'Control'] +early_month_c = control[control['Day'] <= 10] +late_month_c = control[control['Day'] > 20] + +print(f"Days 1-10 (Early):") +print(f" Mean Happiness: {early_month_c['Happiness'].mean():.2f}") +print(f"\nDays 21-30 (Late):") +print(f" Mean Happiness: {late_month_c['Happiness'].mean():.2f}") +print(f"\nChange: {late_month_c['Happiness'].mean() - early_month_c['Happiness'].mean():.2f} points (should be ~0)") + +print("\n--- Direct Correlation: Intervention Group by Habits Completed ---") +for habit_count in [0, 1, 2, 3]: + subset = intervention[intervention['Habits_Count'] == habit_count] + if len(subset) > 0: + print(f"{habit_count} habits completed: Happiness = {subset['Happiness'].mean():.2f} (n={len(subset)})") + +print("\n--- Trend Over 30 Days (Intervention Group) ---") +weekly_avg = intervention.groupby('Day')['Happiness'].mean() +print(f"Week 1 (Days 1-7): Average Happiness = {weekly_avg[1:8].mean():.2f}") +print(f"Week 2 (Days 8-14): Average Happiness = {weekly_avg[8:15].mean():.2f}") +print(f"Week 3 (Days 15-21): Average Happiness = {weekly_avg[15:22].mean():.2f}") +print(f"Week 4 (Days 22-30): Average Happiness = {weekly_avg[22:31].mean():.2f}") + +print("\n--- Trend Over 30 Days (Control Group) ---") +weekly_avg_c = control.groupby('Day')['Happiness'].mean() +print(f"Week 1 (Days 1-7): Average Happiness = {weekly_avg_c[1:8].mean():.2f}") +print(f"Week 2 (Days 8-14): Average Happiness = {weekly_avg_c[8:15].mean():.2f}") +print(f"Week 3 (Days 15-21): Average Happiness = {weekly_avg_c[15:22].mean():.2f}") +print(f"Week 4 (Days 22-30): Average Happiness = {weekly_avg_c[22:31].mean():.2f}") + +print("\n--- Participant Examples (Intervention Group) ---") +for pid in [1, 5, 10]: + p_data = intervention[intervention['Participant_ID'] == pid] + early = p_data[p_data['Day'] <= 10]['Happiness'].mean() + late = p_data[p_data['Day'] > 20]['Happiness'].mean() + early_habits = p_data[p_data['Day'] <= 10]['Habits_Count'].mean() + late_habits = p_data[p_data['Day'] > 20]['Habits_Count'].mean() + print(f"\nParticipant {pid}:") + print(f" Early (Days 1-10): Happiness {early:.1f}, Habits {early_habits:.1f}/day") + print(f" Late (Days 21-30): Happiness {late:.1f}, Habits {late_habits:.1f}/day") + print(f" Growth: {late - early:.1f} points") + +print("\n✓ Data shows:") +print(" • Intervention group has upward trend over study period") +print(" • Happy days strongly correlated with habit completion") +print(" • Control group stays stable with natural random variation") diff --git a/dot_config/private_Code/User/History/-2e6bd5d9/entries.json b/dot_config/private_Code/User/History/-2e6bd5d9/entries.json new file mode 100644 index 0000000..adeb0f8 --- /dev/null +++ b/dot_config/private_Code/User/History/-2e6bd5d9/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/verify_trend.py","entries":[{"id":"DwLj.py","source":"Chat Edit: 'can you ensure the data shows an upward trend in happiness as the study goes on, and in direct correlation with the habits completed by that participant? at the moment, the intervention group is happier after a single day.'","timestamp":1774347397523}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/-393f507a/entries.json b/dot_config/private_Code/User/History/-393f507a/entries.json new file mode 100644 index 0000000..bf027f0 --- /dev/null +++ b/dot_config/private_Code/User/History/-393f507a/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"vscode-userdata:/home/breadway/.config/Code/User/settings.json","entries":[{"id":"jeJQ.json","timestamp":1774363216206}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/-393f507a/jeJQ.json b/dot_config/private_Code/User/History/-393f507a/jeJQ.json new file mode 100644 index 0000000..2f58918 --- /dev/null +++ b/dot_config/private_Code/User/History/-393f507a/jeJQ.json @@ -0,0 +1,3 @@ +{ + "explorer.confirmDelete": false +} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/-3a2e7e8b/UHTA.yml b/dot_config/private_Code/User/History/-3a2e7e8b/UHTA.yml new file mode 100644 index 0000000..8aca589 --- /dev/null +++ b/dot_config/private_Code/User/History/-3a2e7e8b/UHTA.yml @@ -0,0 +1,198 @@ +services: + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + group_add: + - "993" # render group for VAAPI hardware acceleration + + ports: + - "8096:8096" # HTTP web UI + - "8920:8920" # HTTPS + - "7359:7359/udp" # Network discovery + - "1900:1900/udp" # DLNA + + expose: + - "8096" + + environment: + - PUID=1000 + - PGID=1000 + - TZ=Australia/Perth + + volumes: + # Config on NVMe (fast) + - ./config:/config + - ./cache:/cache + + # Media libraries (read-only for safety) + - "/mnt/media/Movies:/media/movies:ro" + - "/mnt/media/TV Shows:/media/tv-shows:ro" + - "/mnt/media/Anime:/media/anime:ro" + - "/mnt/media/Kids TV:/media/kids-tv:ro" + - "/mnt/media/Kids Movies:/media/kids-movies:ro" + - "/tank/home-videos:/media/home-videos:ro" + - "/tank/videos:/media/home-videos:ro" + - "/tank/photos:/media/home-photos:ro" + + devices: + # Hardware transcoding (Vega graphics) + - /dev/dri:/dev/dri + + networks: + - jellyfin-net + + qbittorrent: + image: linuxserver/qbittorrent:latest + container_name: qbittorrent + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + WEBUI_PORT: 8090 + volumes: + - ~/.docker_volumes/qbittorrent/config:/config + - /mnt/media/downloads:/downloads + - /mnt/media/anime:/animeq + ports: + - "8090:8090" + - "6881:6881" + - "6881:6881/udp" + expose: + - "8090" + restart: unless-stopped + deploy: + resources: + limits: + memory: 1G + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + sonarr: + image: linuxserver/sonarr:latest + container_name: sonarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + DOCKER_MODS: "linuxserver/mods:universal-package-install" + INSTALL_PACKAGES: "ffmpeg" + volumes: + - ~/.docker_volumes/sonarr/config:/config + - /mnt/media/Anime:/tv + - ~/media/downloads:/downloads + ports: + - "8989:8989" + expose: + - "8989" + restart: unless-stopped + depends_on: + - qbittorrent + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + prowlarr: + image: linuxserver/prowlarr:latest + container_name: prowlarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/prowlarr/config:/config + ports: + - "9696:9696" + expose: + - "9696" + restart: unless-stopped + depends_on: + - qbittorrent + - sonarr + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9696/ping"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: jellyseerr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/jellyseerr/config:/app/config + ports: + - "5055:5055" + expose: + - "5055" + restart: unless-stopped + depends_on: + - jellyfin + - sonarr + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5055/api/v1/status"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + caddy: + image: caddy:latest + container_name: caddy + restart: unless-stopped + ports: + - "443:443" + - "443:443/udp" # For HTTP/3 support + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - ./caddy_data:/data + - ./caddy_config:/config + networks: + - jellyfin-net + + crowdsec: + image: crowdsecurity/crowdsec:latest + container_name: crowdsec + restart: unless-stopped + environment: + - COLLECTIONS=crowdsecurity/linux crowdsecurity/caddy crowdsecurity/base-httping + volumes: + - /var/log:/var/log:ro + - ./crowdsec_data:/var/lib/crowdsec/data + - ./crowdsec_config:/etc/crowdsec + networks: + - jellyfin-net + +networks: + jellyfin-net: + driver: bridge diff --git a/dot_config/private_Code/User/History/-3a2e7e8b/ebbC.yml b/dot_config/private_Code/User/History/-3a2e7e8b/ebbC.yml new file mode 100644 index 0000000..ca96f1b --- /dev/null +++ b/dot_config/private_Code/User/History/-3a2e7e8b/ebbC.yml @@ -0,0 +1,174 @@ +services: + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + group_add: + - "993" # render group for VAAPI hardware acceleration + + ports: + - "8096:8096" # HTTP web UI + - "8920:8920" # HTTPS + - "7359:7359/udp" # Network discovery + - "1900:1900/udp" # DLNA + + expose: + - "8096" + + environment: + - PUID=1000 + - PGID=1000 + - TZ=Australia/Perth + + volumes: + # Config on NVMe (fast) + - ./config:/config + - ./cache:/cache + + # Media libraries (read-only for safety) + - "/mnt/media/Movies:/media/movies:ro" + - "/mnt/media/TV Shows:/media/tv-shows:ro" + - "/mnt/media/Anime:/media/anime:ro" + - "/mnt/media/Kids TV:/media/kids-tv:ro" + - "/mnt/media/Kids Movies:/media/kids-movies:ro" + - "/tank/home-videos:/media/home-videos:ro" + - "/tank/videos:/media/home-videos:ro" + - "/tank/photos:/media/home-photos:ro" + + devices: + # Hardware transcoding (Vega graphics) + - /dev/dri:/dev/dri + + networks: + - jellyfin-net + + qbittorrent: + image: linuxserver/qbittorrent:latest + container_name: qbittorrent + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + WEBUI_PORT: 8090 + volumes: + - ~/.docker_volumes/qbittorrent/config:/config + - /mnt/media/downloads:/downloads + - /mnt/media/anime:/animeq + ports: + - "8090:8090" + - "6881:6881" + - "6881:6881/udp" + expose: + - "8090" + restart: unless-stopped + deploy: + resources: + limits: + memory: 1G + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + sonarr: + image: linuxserver/sonarr:latest + container_name: sonarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + DOCKER_MODS: "linuxserver/mods:universal-package-install" + INSTALL_PACKAGES: "ffmpeg" + volumes: + - ~/.docker_volumes/sonarr/config:/config + - /mnt/media/Anime:/tv + - ~/media/downloads:/downloads + ports: + - "8989:8989" + expose: + - "8989" + restart: unless-stopped + depends_on: + - qbittorrent + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + prowlarr: + image: linuxserver/prowlarr:latest + container_name: prowlarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/prowlarr/config:/config + ports: + - "9696:9696" + expose: + - "9696" + restart: unless-stopped + depends_on: + - qbittorrent + - sonarr + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9696/ping"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: jellyseerr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/jellyseerr/config:/app/config + ports: + - "5055:5055" + expose: + - "5055" + restart: unless-stopped + depends_on: + - jellyfin + - sonarr + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5055/api/v1/status"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + + +networks: + jellyfin-net: + driver: bridge diff --git a/dot_config/private_Code/User/History/-3a2e7e8b/entries.json b/dot_config/private_Code/User/History/-3a2e7e8b/entries.json new file mode 100644 index 0000000..fa9b09d --- /dev/null +++ b/dot_config/private_Code/User/History/-3a2e7e8b/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Downloads/docker-compose.yml","entries":[{"id":"ebbC.yml","source":"textFileCreate.source","timestamp":1775500296675},{"id":"UHTA.yml","timestamp":1775500565545},{"id":"xBDr.yml","timestamp":1775500662427},{"id":"i7DI.yml","timestamp":1775502657849}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/-3a2e7e8b/i7DI.yml b/dot_config/private_Code/User/History/-3a2e7e8b/i7DI.yml new file mode 100644 index 0000000..4e803ab --- /dev/null +++ b/dot_config/private_Code/User/History/-3a2e7e8b/i7DI.yml @@ -0,0 +1,208 @@ +services: + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + group_add: + - "993" # render group for VAAPI hardware acceleration + + ports: + - "8096:8096" # HTTP web UI + - "8920:8920" # HTTPS + - "7359:7359/udp" # Network discovery + - "1900:1900/udp" # DLNA + + expose: + - "8096" + + environment: + - PUID=1000 + - PGID=1000 + - TZ=Australia/Perth + + volumes: + # Config on NVMe (fast) + - ./config:/config + - ./cache:/cache + + # Media libraries (read-only for safety) + - "/mnt/media/Movies:/media/movies:ro" + - "/mnt/media/TV Shows:/media/tv-shows:ro" + - "/mnt/media/Anime:/media/anime:ro" + - "/mnt/media/Kids TV:/media/kids-tv:ro" + - "/mnt/media/Kids Movies:/media/kids-movies:ro" + - "/tank/home-videos:/media/home-videos:ro" + - "/tank/videos:/media/home-videos:ro" + - "/tank/photos:/media/home-photos:ro" + + devices: + # Hardware transcoding (Vega graphics) + - /dev/dri:/dev/dri + + networks: + - jellyfin-net + + qbittorrent: + image: linuxserver/qbittorrent:latest + container_name: qbittorrent + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + WEBUI_PORT: 8090 + volumes: + - ~/.docker_volumes/qbittorrent/config:/config + - /mnt/media/downloads:/downloads + - /mnt/media/anime:/animeq + ports: + - "8090:8090" + - "6881:6881" + - "6881:6881/udp" + expose: + - "8090" + restart: unless-stopped + deploy: + resources: + limits: + memory: 1G + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + sonarr: + image: linuxserver/sonarr:latest + container_name: sonarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + DOCKER_MODS: "linuxserver/mods:universal-package-install" + INSTALL_PACKAGES: "ffmpeg" + volumes: + - ~/.docker_volumes/sonarr/config:/config + - /mnt/media/Anime:/tv + - ~/media/downloads:/downloads + ports: + - "8989:8989" + expose: + - "8989" + restart: unless-stopped + depends_on: + - qbittorrent + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + prowlarr: + image: linuxserver/prowlarr:latest + container_name: prowlarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/prowlarr/config:/config + ports: + - "9696:9696" + expose: + - "9696" + restart: unless-stopped + depends_on: + - qbittorrent + - sonarr + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9696/ping"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: jellyseerr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/jellyseerr/config:/app/config + ports: + - "5055:5055" + expose: + - "5055" + restart: unless-stopped + depends_on: + - jellyfin + - sonarr + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5055/api/v1/status"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + caddy: + build: + context: . + dockerfile_inline: | + FROM caddy:builder AS builder + RUN xcaddy build --with github.com/caddy-dns/namedotcom + FROM caddy:latest + COPY --from=builder /usr/bin/caddy /usr/bin/caddy + container_name: caddy + restart: unless-stopped + environment: + - NAMEDOTCOM_USERNAME= + - NAMEDOTCOM_TOKEN=your_api_token + ports: + - "443:443" + - "443:443/udp" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - ./caddy_data:/data + - ./caddy_config:/config + networks: + - jellyfin-net + + crowdsec: + image: crowdsecurity/crowdsec:latest + container_name: crowdsec + restart: unless-stopped + environment: + - COLLECTIONS=crowdsecurity/linux crowdsecurity/caddy crowdsecurity/base-httping + volumes: + - /var/log:/var/log:ro + - ./crowdsec_data:/var/lib/crowdsec/data + - ./crowdsec_config:/etc/crowdsec + networks: + - jellyfin-net + +networks: + jellyfin-net: + driver: bridge diff --git a/dot_config/private_Code/User/History/-3a2e7e8b/xBDr.yml b/dot_config/private_Code/User/History/-3a2e7e8b/xBDr.yml new file mode 100644 index 0000000..cc30867 --- /dev/null +++ b/dot_config/private_Code/User/History/-3a2e7e8b/xBDr.yml @@ -0,0 +1,199 @@ +services: + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + group_add: + - "993" # render group for VAAPI hardware acceleration + + ports: + - "8096:8096" # HTTP web UI + - "8920:8920" # HTTPS + - "7359:7359/udp" # Network discovery + - "1900:1900/udp" # DLNA + + expose: + - "8096" + + environment: + - PUID=1000 + - PGID=1000 + - TZ=Australia/Perth + + volumes: + # Config on NVMe (fast) + - ./config:/config + - ./cache:/cache + + # Media libraries (read-only for safety) + - "/mnt/media/Movies:/media/movies:ro" + - "/mnt/media/TV Shows:/media/tv-shows:ro" + - "/mnt/media/Anime:/media/anime:ro" + - "/mnt/media/Kids TV:/media/kids-tv:ro" + - "/mnt/media/Kids Movies:/media/kids-movies:ro" + - "/tank/home-videos:/media/home-videos:ro" + - "/tank/videos:/media/home-videos:ro" + - "/tank/photos:/media/home-photos:ro" + + devices: + # Hardware transcoding (Vega graphics) + - /dev/dri:/dev/dri + + networks: + - jellyfin-net + + qbittorrent: + image: linuxserver/qbittorrent:latest + container_name: qbittorrent + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + WEBUI_PORT: 8090 + volumes: + - ~/.docker_volumes/qbittorrent/config:/config + - /mnt/media/downloads:/downloads + - /mnt/media/anime:/animeq + ports: + - "8090:8090" + - "6881:6881" + - "6881:6881/udp" + expose: + - "8090" + restart: unless-stopped + deploy: + resources: + limits: + memory: 1G + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + sonarr: + image: linuxserver/sonarr:latest + container_name: sonarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + DOCKER_MODS: "linuxserver/mods:universal-package-install" + INSTALL_PACKAGES: "ffmpeg" + volumes: + - ~/.docker_volumes/sonarr/config:/config + - /mnt/media/Anime:/tv + - ~/media/downloads:/downloads + ports: + - "8989:8989" + expose: + - "8989" + restart: unless-stopped + depends_on: + - qbittorrent + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + prowlarr: + image: linuxserver/prowlarr:latest + container_name: prowlarr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/prowlarr/config:/config + ports: + - "9696:9696" + expose: + - "9696" + restart: unless-stopped + depends_on: + - qbittorrent + - sonarr + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9696/ping"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: jellyseerr + environment: + PUID: 1000 + PGID: 1000 + TZ: "${TZ}" + volumes: + - ~/.docker_volumes/jellyseerr/config:/app/config + ports: + - "5055:5055" + expose: + - "5055" + restart: unless-stopped + depends_on: + - jellyfin + - sonarr + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5055/api/v1/status"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + memory: 512M + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + + caddy: + image: caddy:latest + container_name: caddy + restart: unless-stopped + ports: + - "443:443" + - "443:443/udp" # For HTTP/3 support + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - ./caddy_data:/data + - ./caddy_config:/config + networks: + - jellyfin-net + + crowdsec: + image: crowdsecurity/crowdsec:latest + container_name: crowdsec + restart: unless-stopped + environment: + - COLLECTIONS=crowdsecurity/linux crowdsecurity/caddy crowdsecurity/base-httping + volumes: + - /var/log:/var/log:ro + - ./crowdsec_data:/var/lib/crowdsec/data + - ./crowdsec_config:/etc/crowdsec + networks: + - jellyfin-net + +networks: + jellyfin-net: + driver: bridge diff --git a/dot_config/private_Code/User/History/-6123ca19/Xb2Q.py b/dot_config/private_Code/User/History/-6123ca19/Xb2Q.py new file mode 100644 index 0000000..a6ec872 --- /dev/null +++ b/dot_config/private_Code/User/History/-6123ca19/Xb2Q.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +"""Quick test to verify Data Analysis.py works correctly.""" +import subprocess +import sys + +result = subprocess.run([sys.executable, 'Data Analysis.py'], capture_output=True, text=True, timeout=30) +print("STDOUT:") +print(result.stdout[-2000:] if len(result.stdout) > 2000 else result.stdout) +print("\nSTDERR:") +print(result.stderr[-1000:] if len(result.stderr) > 1000 else result.stderr) +print(f"\nExit code: {result.returncode}") + +# Check for plot files +import os +plot_files = sorted([f for f in os.listdir('plots') if f.endswith('.png')]) +print(f"\nGenerated {len(plot_files)} plot files:") +for f in plot_files: + print(f" - {f}") diff --git a/dot_config/private_Code/User/History/-6123ca19/entries.json b/dot_config/private_Code/User/History/-6123ca19/entries.json new file mode 100644 index 0000000..f9496ce --- /dev/null +++ b/dot_config/private_Code/User/History/-6123ca19/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/test_analysis.py","entries":[{"id":"Xb2Q.py","source":"Chat Edit: 'ensure the graphs being used are appropriate for the study'","timestamp":1774346851499}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/-7d2a273a/bWGM.py b/dot_config/private_Code/User/History/-7d2a273a/bWGM.py new file mode 100644 index 0000000..e25c8e3 --- /dev/null +++ b/dot_config/private_Code/User/History/-7d2a273a/bWGM.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +import pandas as pd +import numpy as np + +# Load the data +df = pd.read_csv('organization_happiness_study_data.csv') + +print("=" * 70) +print("DATA GENERATION IMPROVEMENTS VERIFICATION") +print("=" * 70) +print(f"\n✓ Dataset shape: {df.shape}") +print(f"✓ Total rows: {len(df)} (20 participants × 30 days × 2 groups = 1200 expected)") + +print("\n--- Intervention Group Statistics ---") +intervention = df[df['Group'] == 'Intervention'] +print(f"Participants: {intervention['Participant_ID'].nunique()}") +print(f"Mean Happiness: {intervention['Happiness'].mean():.2f}") +print(f"Happiness Std Dev: {intervention['Happiness'].std():.2f}") +print(f"Calendar Adherence Rate: {(intervention['Calendar_Adherence'] == 'Yes').mean():.1%}") +print(f"Cleanliness Adherence Rate: {(intervention['Cleanliness_Adherence'] == 'Yes').mean():.1%}") +print(f"Punctuality Adherence Rate: {(intervention['Punctuality_Adherence'] == 'Yes').mean():.1%}") + +print("\n--- Control Group Statistics ---") +control = df[df['Group'] == 'Control'] +print(f"Participants: {control['Participant_ID'].nunique()}") +print(f"Mean Happiness: {control['Happiness'].mean():.2f}") +print(f"Happiness Std Dev: {control['Happiness'].std():.2f}") +print(f"Reported Calendar: {(control['Calendar_Adherence'] == 'Yes').mean():.1%} (should be ~0%)") +print(f"Reported Cleanliness: {(control['Cleanliness_Adherence'] == 'Yes').mean():.1%} (should be ~0%)") +print(f"Reported Punctuality: {(control['Punctuality_Adherence'] == 'Yes').mean():.1%} (should be ~0%)") + +print("\n--- Natural Data Patterns ---") +# Check for habit momentum (persistence) +intervention['Habits_Count'] = ( + (intervention['Calendar_Adherence'] == 'Yes').astype(int) + + (intervention['Cleanliness_Adherence'] == 'Yes').astype(int) + + (intervention['Punctuality_Adherence'] == 'Yes').astype(int) +) + +print(f"Habit completion rates by number completed:") +for count in [0, 1, 2, 3]: + subset = intervention[intervention['Habits_Count'] == count] + happiness = subset['Happiness'].mean() + print(f" {count} habits: Happiness = {happiness:.2f} (n={len(subset)})") + +# Weekend effect +intervention['DayOfWeek'] = intervention['Day'] % 7 +weekend = intervention[intervention['DayOfWeek'].isin([0, 6])] +weekday = intervention[~intervention['DayOfWeek'].isin([0, 6])] +print(f"\nWeekend vs Weekday Adherence:") +print(f" Weekday avg habits: {((weekday['Calendar_Adherence']=='Yes').astype(int) + (weekday['Cleanliness_Adherence']=='Yes').astype(int) + (weekday['Punctuality_Adherence']=='Yes').astype(int)).mean():.2f}") +print(f" Weekend avg habits: {((weekend['Calendar_Adherence']=='Yes').astype(int) + (weekend['Cleanliness_Adherence']=='Yes').astype(int) + (weekend['Punctuality_Adherence']=='Yes').astype(int)).mean():.2f}") + +# Habit formation over time +first_week = intervention[intervention['Day'] <= 7] +mid_month = intervention[(intervention['Day'] > 14) & (intervention['Day'] <= 21)] +last_week = intervention[intervention['Day'] > 23] +print(f"\nHabit Formation Over Time:") +print(f" Days 1-7 (Starting): Avg habits = {((first_week['Calendar_Adherence']=='Yes').astype(int) + (first_week['Cleanliness_Adherence']=='Yes').astype(int) + (first_week['Punctuality_Adherence']=='Yes').astype(int)).mean():.2f}") +print(f" Days 15-21 (Momentum): Avg habits = {((mid_month['Calendar_Adherence']=='Yes').astype(int) + (mid_month['Cleanliness_Adherence']=='Yes').astype(int) + (mid_month['Punctuality_Adherence']=='Yes').astype(int)).mean():.2f}") +print(f" Days 24-30 (Late): Avg habits = {((last_week['Calendar_Adherence']=='Yes').astype(int) + (last_week['Cleanliness_Adherence']=='Yes').astype(int) + (last_week['Punctuality_Adherence']=='Yes').astype(int)).mean():.2f}") + +print(f"\nHappiness Persistence (day-to-day correlation):") +intervention_sorted = intervention.sort_values(['Participant_ID', 'Day']) +intervention_sorted['Happiness_prev'] = intervention_sorted.groupby('Participant_ID')['Happiness'].shift(1) +valid = intervention_sorted[intervention_sorted['Happiness_prev'].notna()] +corr = valid[['Happiness', 'Happiness_prev']].corr().iloc[0, 1] +print(f" Correlation between today and yesterday's happiness: {corr:.3f}") + +print("\n✓ Data generation complete with natural patterns!") +print("\nKey improvements:") +print(" • Habit momentum: doing it yesterday makes it more likely today") +print(" • Weekly patterns: lower adherence weekends vs weekdays") +print(" • Habit formation: initial difficulty, momentum building, slight fatigue") +print(" • Individual variation: each person has unique habit profiles") +print(" • Happiness persistence: today's mood influenced by yesterday's") +print(" • Control group realism: still report 'No' but data shows natural variation") diff --git a/dot_config/private_Code/User/History/-7d2a273a/entries.json b/dot_config/private_Code/User/History/-7d2a273a/entries.json new file mode 100644 index 0000000..df77d6f --- /dev/null +++ b/dot_config/private_Code/User/History/-7d2a273a/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/test_improvements.py","entries":[{"id":"bWGM.py","source":"Chat Edit: 'improve data gen to create more natural data'","timestamp":1774347099618}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6b1c27e9/entries.json b/dot_config/private_Code/User/History/6b1c27e9/entries.json new file mode 100644 index 0000000..bbc4d03 --- /dev/null +++ b/dot_config/private_Code/User/History/6b1c27e9/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/run_and_verify.py","entries":[{"id":"qMUb.py","source":"Chat Edit: 'can you ensure the data shows an upward trend in happiness as the study goes on, and in direct correlation with the habits completed by that participant? at the moment, the intervention group is happier after a single day.'","timestamp":1774347459417}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6b1c27e9/qMUb.py b/dot_config/private_Code/User/History/6b1c27e9/qMUb.py new file mode 100644 index 0000000..1c44871 --- /dev/null +++ b/dot_config/private_Code/User/History/6b1c27e9/qMUb.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""Generate new data and display sample showing upward trend""" +import subprocess +import pandas as pd + +# Run data generator +result = subprocess.run(['python3', 'Data Gen.py'], capture_output=True, text=True) +print(result.stdout) +if result.stderr: + print("Errors:", result.stderr) + +# Load and display trend analysis +df = pd.read_csv('organization_happiness_study_data.csv') +df['Habits_Count'] = ( + (df['Calendar_Adherence'] == 'Yes').astype(int) + + (df['Cleanliness_Adherence'] == 'Yes').astype(int) + + (df['Punctuality_Adherence'] == 'Yes').astype(int) +) + +intervention = df[df['Group'] == 'Intervention'] +control = df[df['Group'] == 'Control'] + +print("\n" + "="*70) +print("UPWARD TREND ANALYSIS") +print("="*70) + +print("\n[INTERVENTION GROUP] - Should show upward trend") +early_int = intervention[intervention['Day'] <= 7] +late_int = intervention[intervention['Day'] >= 24] +print(f"Days 1-7: Avg Happiness = {early_int['Happiness'].mean():.2f}") +print(f"Days 24-30: Avg Happiness = {late_int['Happiness'].mean():.2f}") +print(f"GROWTH: +{late_int['Happiness'].mean() - early_int['Happiness'].mean():.2f} points\n") + +print("[CONTROL GROUP] - Should show flat/random pattern") +early_ctl = control[control['Day'] <= 7] +late_ctl = control[control['Day'] >= 24] +print(f"Days 1-7: Avg Happiness = {early_ctl['Happiness'].mean():.2f}") +print(f"Days 24-30: Avg Happiness = {late_ctl['Happiness'].mean():.2f}") +print(f"CHANGE: {late_ctl['Happiness'].mean() - early_ctl['Happiness'].mean():+.2f} points\n") + +print("[HABIT CORRELATION] - More habits = Higher happiness") +for habits in range(4): + subset = intervention[intervention['Habits_Count'] == habits] + if len(subset) > 0: + print(f"{habits} habits/day: Avg Happiness = {subset['Happiness'].mean():.2f} ({len(subset)} observations)") diff --git a/dot_config/private_Code/User/History/6c11eec7/3jGE.py b/dot_config/private_Code/User/History/6c11eec7/3jGE.py new file mode 100644 index 0000000..b23d2e3 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/3jGE.py @@ -0,0 +1,196 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.8, 1.1) # Lower starting point for growth + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 4) + habit_strength = np.clip(habit_strength, 0, 4) + + # Happiness is baseline + growth from habit_strength over time + # As study progresses and habit_strength builds, happiness increases more + study_progress = day / 30.0 # 0.033 to 1.0 over 30 days + + # Daily random noise (small) + daily_noise = np.random.normal(0, 0.7) + + # Happiness formula: baseline + cumulative effect that strengthens over time + happiness_value = ( + person_happiness_baseline + # Starting point + habit_strength * (0.5 + study_progress) + # Habit benefits grow over time + daily_noise # Day-to-day variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(4.8, 1.3) # Same baseline as intervention (no advantage) + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.2) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/46oA.py b/dot_config/private_Code/User/History/6c11eec7/46oA.py new file mode 100644 index 0000000..f642c42 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/46oA.py @@ -0,0 +1,200 @@ +import pandas as pd +import numpy as np + + +np.random.seed(3) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 5) + habit_strength = np.clip(habit_strength, 0, 5) + + # Happiness combines DAILY habits effect + cumulative habit strength + study_progress = day / 30.0 # 0.033 to 1.0 + daily_noise = np.random.normal(0, 0.35) + + # Immediate bonus for today's habits (strong, clear dose-response) + daily_habit_bonus = adherence_count * 0.6 # 0-1.8 based on today's habits + + # Cumulative bonus grows as study progresses + cumulative_bonus = habit_strength * (0.4 + study_progress * 0.2) # max ~2.7 + + # Happiness formula: baseline + daily effect + cumulative effect + noise + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + daily_habit_bonus + # Today's habits (0-1.8) + cumulative_bonus + # Study progress bonus (0-2.7) + daily_noise # Variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(5.1, 0.9) # Center control around ~5 + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.0) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/54EK.py b/dot_config/private_Code/User/History/6c11eec7/54EK.py new file mode 100644 index 0000000..95cc2bb --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/54EK.py @@ -0,0 +1,93 @@ +df = pd.DataFrame(data, columns=['Participant_ID', 'Day', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence', 'Happiness']) +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.7, 0.15) # each person has their own organization tendency + + for day in DAYS: + calendar = np.random.choice(['Yes', 'No'], p=[clip_yes_prob(org_bias + 0.1, 0.95), 1 - clip_yes_prob(org_bias + 0.1, 0.95)]) + clean = np.random.choice(['Yes', 'No'], p=[clip_yes_prob(org_bias, 0.90), 1 - clip_yes_prob(org_bias, 0.90)]) + ontime = np.random.choice(['Yes', 'No'], p=[clip_yes_prob(org_bias + 0.05, 0.92), 1 - clip_yes_prob(org_bias + 0.05, 0.92)]) + + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + baseline_happiness = np.random.normal(5.5, 1.0) + happiness = int(np.clip(np.random.normal(baseline_happiness + adherence_count * 1.1, 1.2), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + for day in DAYS: + # Control group only records happiness; all habit columns are No. + calendar = 'No' + clean = 'No' + ontime = 'No' + + baseline_happiness = np.random.normal(5.5, 1.0) + control_noise = np.random.normal(0.0, 1.1) + happiness = int(np.clip(baseline_happiness + control_noise, 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + calendar, + clean, + ontime, + happiness, + ]) + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/9dqp.py b/dot_config/private_Code/User/History/6c11eec7/9dqp.py new file mode 100644 index 0000000..19b0633 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/9dqp.py @@ -0,0 +1,180 @@ +import pandas as pd +import numpy as np + + +np.random.seed(64) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness for this participant + person_happiness_baseline = np.random.normal(5.5, 1.2) + current_happiness = person_happiness_baseline + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Habit stacking: completing one habit makes the next easier + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + habit_boost = adherence_count * 1.2 if adherence_count > 0 else 0 + + # Happiness has persistence but is also affected by habits + happiness_noise = np.random.normal(0, 1.3) + current_happiness = np.clip( + current_happiness * 0.4 + # Previous day influences today + person_happiness_baseline * 0.4 + + habit_boost * 0.9 + # Habits have strong effect + happiness_noise, + 1, 10 + ) + happiness = int(np.round(current_happiness)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(5.0, 1.3) # Slightly lower baseline for control + current_happiness = person_happiness_baseline + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but it still affects their happiness sublimely + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.5 # Smaller effect since unaware/untracked + + # Control group happiness is less affected by daily habits and more random + happiness_noise = np.random.normal(0, 1.6) # Higher variability since no tracking + current_happiness = np.clip( + current_happiness * 0.5 + + person_happiness_baseline * 0.5 + + subtle_boost + + happiness_noise, + 1, 10 + ) + happiness = int(np.round(current_happiness)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/EkUx.py b/dot_config/private_Code/User/History/6c11eec7/EkUx.py new file mode 100644 index 0000000..0d6a8dd --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/EkUx.py @@ -0,0 +1,200 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 5) + habit_strength = np.clip(habit_strength, 0, 5) + + # Happiness combines DAILY habits effect + cumulative habit strength + study_progress = day / 30.0 # 0.033 to 1.0 + daily_noise = np.random.normal(0, 0.35) + + # Immediate bonus for today's habits (strong, clear dose-response) + daily_habit_bonus = adherence_count * 0.6 # 0-1.8 based on today's habits + + # Cumulative bonus grows as study progresses + cumulative_bonus = habit_strength * (0.4 + study_progress * 0.2) # max ~2.7 + + # Happiness formula: baseline + daily effect + cumulative effect + noise + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + daily_habit_bonus + # Today's habits (0-1.8) + cumulative_bonus + # Study progress bonus (0-2.7) + daily_noise # Variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(4.9, 0.9) # Center control around ~5 + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.0) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/MJ5p.py b/dot_config/private_Code/User/History/6c11eec7/MJ5p.py new file mode 100644 index 0000000..b546cb4 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/MJ5p.py @@ -0,0 +1,200 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 5) + habit_strength = np.clip(habit_strength, 0, 5) + + # Happiness combines DAILY habits effect + cumulative habit strength + study_progress = day / 30.0 # 0.033 to 1.0 + daily_noise = np.random.normal(0, 0.35) + + # Immediate bonus for today's habits (strong, clear dose-response) + daily_habit_bonus = adherence_count * 0.6 # 0-1.8 based on today's habits + + # Cumulative bonus grows as study progresses + cumulative_bonus = habit_strength * (0.4 + study_progress * 0.2) # max ~2.7 + + # Happiness formula: baseline + daily effect + cumulative effect + noise + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + daily_habit_bonus + # Today's habits (0-1.8) + cumulative_bonus + # Study progress bonus (0-2.7) + daily_noise # Variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(4.0, 1.0) # Same baseline as intervention (no advantage) + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.2) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/PpFf.py b/dot_config/private_Code/User/History/6c11eec7/PpFf.py new file mode 100644 index 0000000..b3ee492 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/PpFf.py @@ -0,0 +1,92 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.7, 0.15) # each person has their own organization tendency + + for day in DAYS: + calendar = np.random.choice(['Yes', 'No'], p=[clip_yes_prob(org_bias + 0.1, 0.95), 1 - clip_yes_prob(org_bias + 0.1, 0.95)]) + clean = np.random.choice(['Yes', 'No'], p=[clip_yes_prob(org_bias, 0.90), 1 - clip_yes_prob(org_bias, 0.90)]) + ontime = np.random.choice(['Yes', 'No'], p=[clip_yes_prob(org_bias + 0.05, 0.92), 1 - clip_yes_prob(org_bias + 0.05, 0.92)]) + + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + baseline_happiness = np.random.normal(5.5, 1.0) + happiness = int(np.clip(np.random.normal(baseline_happiness + adherence_count * 1.1, 1.2), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + for day in DAYS: + # Control group only records happiness; all habit columns are No. + calendar = 'No' + clean = 'No' + ontime = 'No' + + baseline_happiness = np.random.normal(5.5, 1.0) + control_noise = np.random.normal(0.0, 1.1) + happiness = int(np.clip(baseline_happiness + control_noise, 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + calendar, + clean, + ontime, + happiness, + ]) + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/QTk6.py b/dot_config/private_Code/User/History/6c11eec7/QTk6.py new file mode 100644 index 0000000..cd0ef02 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/QTk6.py @@ -0,0 +1,200 @@ +import pandas as pd +import numpy as np + + +np.random.seed(43) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 5) + habit_strength = np.clip(habit_strength, 0, 5) + + # Happiness combines DAILY habits effect + cumulative habit strength + study_progress = day / 30.0 # 0.033 to 1.0 + daily_noise = np.random.normal(0, 0.35) + + # Immediate bonus for today's habits (strong, clear dose-response) + daily_habit_bonus = adherence_count * 0.6 # 0-1.8 based on today's habits + + # Cumulative bonus grows as study progresses + cumulative_bonus = habit_strength * (0.4 + study_progress * 0.2) # max ~2.7 + + # Happiness formula: baseline + daily effect + cumulative effect + noise + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + daily_habit_bonus + # Today's habits (0-1.8) + cumulative_bonus + # Study progress bonus (0-2.7) + daily_noise # Variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(5.1, 0.9) # Center control around ~5 + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.0) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/WSl3.py b/dot_config/private_Code/User/History/6c11eec7/WSl3.py new file mode 100644 index 0000000..78cf0cc --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/WSl3.py @@ -0,0 +1,180 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness for this participant + person_happiness_baseline = np.random.normal(5.5, 1.2) + current_happiness = person_happiness_baseline + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Habit stacking: completing one habit makes the next easier + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + habit_boost = adherence_count * 1.2 if adherence_count > 0 else 0 + + # Happiness has persistence but is also affected by habits + happiness_noise = np.random.normal(0, 1.3) + current_happiness = np.clip( + current_happiness * 0.4 + # Previous day influences today + person_happiness_baseline * 0.4 + + habit_boost * 0.9 + # Habits have strong effect + happiness_noise, + 1, 10 + ) + happiness = int(np.round(current_happiness)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(5.0, 1.3) # Slightly lower baseline for control + current_happiness = person_happiness_baseline + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but it still affects their happiness sublimely + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.5 # Smaller effect since unaware/untracked + + # Control group happiness is less affected by daily habits and more random + happiness_noise = np.random.normal(0, 1.6) # Higher variability since no tracking + current_happiness = np.clip( + current_happiness * 0.5 + + person_happiness_baseline * 0.5 + + subtle_boost + + happiness_noise, + 1, 10 + ) + happiness = int(np.round(current_happiness)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/bLJN.py b/dot_config/private_Code/User/History/6c11eec7/bLJN.py new file mode 100644 index 0000000..c6af3cd --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/bLJN.py @@ -0,0 +1,197 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 5) + habit_strength = np.clip(habit_strength, 0, 5) + + # Happiness is baseline + growth from habit_strength over time + # As study progresses and habit_strength builds, happiness increases more + study_progress = day / 30.0 # 0.033 to 1.0 over 30 days + + # Daily random noise (small) + daily_noise = np.random.normal(0, 0.4) + + # Happiness formula: baseline + cumulative effect that strengthens over time + # Stronger multiplier to make dose-response clear (each habit matters 1-1.5 points) + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + habit_strength * (0.9 + study_progress * 0.3) + # Habit benefits clear, final max ~2.1 + daily_noise # Day-to-day variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(4.0, 1.0) # Same baseline as intervention (no advantage) + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.2) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/blt8.py b/dot_config/private_Code/User/History/6c11eec7/blt8.py new file mode 100644 index 0000000..740ae14 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/blt8.py @@ -0,0 +1,197 @@ +import pandas as pd +import numpy as np + + +np.random.seed(64) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.8, 1.1) # Lower starting point for growth + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 4) + habit_strength = np.clip(habit_strength, 0, 4) + + # Happiness is baseline + growth from habit_strength over time + # As study progresses and habit_strength builds, happiness increases more + study_progress = day / 30.0 # 0.033 to 1.0 over 30 days + + # Daily random noise (small) + daily_noise = np.random.normal(0, 0.7) + + # Happiness formula: baseline + cumulative effect that strengthens over time + happiness_value = ( + person_happiness_baseline + # Starting point + habit_strength * (0.5 + study_progress) + # Habit benefits grow over time + daily_noise # Day-to-day variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(5.0, 1.3) # Slightly lower baseline for control + current_happiness = person_happiness_baseline + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but it still affects their happiness sublimely + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.5 # Smaller effect since unaware/untracked + + # Control group happiness is less affected by daily habits and more random + happiness_noise = np.random.normal(0, 1.6) # Higher variability since no tracking + current_happiness = np.clip( + current_happiness * 0.5 + + person_happiness_baseline * 0.5 + + subtle_boost + + happiness_noise, + 1, 10 + ) + happiness = int(np.round(current_happiness)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/cTNf.py b/dot_config/private_Code/User/History/6c11eec7/cTNf.py new file mode 100644 index 0000000..60dd581 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/cTNf.py @@ -0,0 +1,144 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness for this participant + person_happiness_baseline = np.random.normal(5.5, 1.2) + current_happiness = person_happiness_baseline + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Habit stacking: completing one habit makes the next easier + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + habit_boost = adherence_count * 1.2 if adherence_count > 0 else 0 + + # Happiness has persistence but is also affected by habits + happiness_noise = np.random.normal(0, 1.3) + current_happiness = np.clip( + current_happiness * 0.4 + # Previous day influences today + person_happiness_baseline * 0.4 + + habit_boost * 0.9 + # Habits have strong effect + happiness_noise, + 1, 10 + ) + happiness = int(np.round(current_happiness)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + for day in DAYS: + # Control group only records happiness; all habit columns are No. + calendar = 'No' + clean = 'No' + ontime = 'No' + + baseline_happiness = np.random.normal(5.5, 1.0) + control_noise = np.random.normal(0.0, 1.1) + happiness = int(np.clip(baseline_happiness + control_noise, 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + calendar, + clean, + ontime, + happiness, + ]) + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/entries.json b/dot_config/private_Code/User/History/6c11eec7/entries.json new file mode 100644 index 0000000..216b8f8 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/Data%20Gen.py","entries":[{"id":"54EK.py","source":"Chat Edit: 'improve data gen.py to add a second dataset as a control. for context, the study tracks the affects of being organised on how happy participants feel. there needs to be a control group that is only recording their happiness daily. the main group will try to record their happiness, will add all events to their calendar, be on time to every event, and clean their bedroom everyday. they report if they do any of these in the study data as a yes or no. the control group will not do any of these.'","timestamp":1774345349390},{"id":"PpFf.py","source":"Chat Edit: 'improve data gen.py to add a second dataset as a control. for context, the study tracks the affects of being organised on how happy participants feel. there needs to be a control group that is only recording their happiness daily. the main group will try to record their happiness, will add all events to their calendar, be on time to every event, and clean their bedroom everyday. they report if they do any of these in the study data as a yes or no. the control group will not do any of these.'","timestamp":1774345378739},{"id":"cTNf.py","source":"Chat Edit: 'improve data gen to create more natural data'","timestamp":1774347044805},{"id":"WSl3.py","source":"Chat Edit: 'improve data gen to create more natural data'","timestamp":1774347057825},{"id":"9dqp.py","timestamp":1774347206509},{"id":"blt8.py","source":"Chat Edit: 'can you ensure the data shows an upward trend in happiness as the study goes on, and in direct correlation with the habits completed by that participant? at the moment, the intervention group is happier after a single day.'","timestamp":1774347345483},{"id":"3jGE.py","source":"Chat Edit: 'can you ensure the data shows an upward trend in happiness as the study goes on, and in direct correlation with the habits completed by that participant? at the moment, the intervention group is happier after a single day.'","timestamp":1774347365731},{"id":"sBVR.py","source":"Chat Edit: 'can you ensure the data shows an upward trend in happiness as the study goes on, and in direct correlation with the habits completed by that participant? at the moment, the intervention group is happier after a single day.'","timestamp":1774347432858},{"id":"j9Wc.py","source":"Chat Edit: 'the happiness results after 30 days seem a little too high, and this dose-response graph shows low happiness with all 3 completed. unusual. you could also increase participants to 40 control 40 intervention'","timestamp":1774347711480},{"id":"bLJN.py","source":"Chat Edit: 'the happiness results after 30 days seem a little too high, and this dose-response graph shows low happiness with all 3 completed. unusual. you could also increase participants to 40 control 40 intervention'","timestamp":1774347763541},{"id":"MJ5p.py","source":"Chat Edit: 'the happiness results after 30 days seem a little too high, and this dose-response graph shows low happiness with all 3 completed. unusual. you could also increase participants to 40 control 40 intervention'","timestamp":1774347783690},{"id":"EkUx.py","source":"Chat Edit: 'control mean is too low. realistically the control group should be around an average of 5.'","timestamp":1774347933805},{"id":"u91r.py","source":"Chat Edit: 'control mean is too low. realistically the control group should be around an average of 5.'","timestamp":1774347955983},{"id":"QTk6.py","timestamp":1774348022105},{"id":"o2Y7.py","timestamp":1774348397371},{"id":"46oA.py","timestamp":1774352345991}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/j9Wc.py b/dot_config/private_Code/User/History/6c11eec7/j9Wc.py new file mode 100644 index 0000000..78bfbd1 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/j9Wc.py @@ -0,0 +1,197 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 3) + habit_strength = np.clip(habit_strength, 0, 3) + + # Happiness is baseline + growth from habit_strength over time + # As study progresses and habit_strength builds, happiness increases more + study_progress = day / 30.0 # 0.033 to 1.0 over 30 days + + # Daily random noise (small) + daily_noise = np.random.normal(0, 0.5) + + # Happiness formula: baseline + cumulative effect that strengthens over time + # More conservative multiplier to keep final happiness reasonable (6-8 range) + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + habit_strength * (0.4 + study_progress * 0.5) + # Habit benefits grow over time, max ~2.7 + daily_noise # Day-to-day variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(4.0, 1.0) # Same baseline as intervention (no advantage) + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.2) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/o2Y7.py b/dot_config/private_Code/User/History/6c11eec7/o2Y7.py new file mode 100644 index 0000000..f5a5628 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/o2Y7.py @@ -0,0 +1,200 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 5) + habit_strength = np.clip(habit_strength, 0, 5) + + # Happiness combines DAILY habits effect + cumulative habit strength + study_progress = day / 30.0 # 0.033 to 1.0 + daily_noise = np.random.normal(0, 0.35) + + # Immediate bonus for today's habits (strong, clear dose-response) + daily_habit_bonus = adherence_count * 0.6 # 0-1.8 based on today's habits + + # Cumulative bonus grows as study progresses + cumulative_bonus = habit_strength * (0.4 + study_progress * 0.2) # max ~2.7 + + # Happiness formula: baseline + daily effect + cumulative effect + noise + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + daily_habit_bonus + # Today's habits (0-1.8) + cumulative_bonus + # Study progress bonus (0-2.7) + daily_noise # Variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(5.1, 0.9) # Center control around ~5 + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.0) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/sBVR.py b/dot_config/private_Code/User/History/6c11eec7/sBVR.py new file mode 100644 index 0000000..cf09d1b --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/sBVR.py @@ -0,0 +1,196 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 20 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.8, 1.1) # Lower starting point for growth + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 4) + habit_strength = np.clip(habit_strength, 0, 4) + + # Happiness is baseline + growth from habit_strength over time + # As study progresses and habit_strength builds, happiness increases more + study_progress = day / 30.0 # 0.033 to 1.0 over 30 days + + # Daily random noise (small) + daily_noise = np.random.normal(0, 0.5) + + # Happiness formula: baseline + cumulative effect that strengthens over time + happiness_value = ( + person_happiness_baseline + # Starting point + habit_strength * (0.5 + study_progress) + # Habit benefits grow over time + daily_noise # Day-to-day variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(4.8, 1.3) # Same baseline as intervention (no advantage) + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.2) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/6c11eec7/u91r.py b/dot_config/private_Code/User/History/6c11eec7/u91r.py new file mode 100644 index 0000000..f5a5628 --- /dev/null +++ b/dot_config/private_Code/User/History/6c11eec7/u91r.py @@ -0,0 +1,200 @@ +import pandas as pd +import numpy as np + + +np.random.seed(42) # ensures you get exactly the same data every time + + +N_PARTICIPANTS_PER_GROUP = 40 +DAYS = list(range(1, 31)) + + +def clip_yes_prob(prob, ceiling): + return min(ceiling, max(0.05, prob)) + + +def generate_intervention_group(start_participant_id=1): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + org_bias = np.random.normal(0.65, 0.18) # each person has their own organization tendency (persistent) + org_bias = np.clip(org_bias, 0.1, 0.95) + + # Personal baselines for each habit (people are naturally better/worse at specific habits) + calendar_ease = org_bias + np.random.normal(0.05, 0.08) + clean_ease = org_bias + np.random.normal(-0.02, 0.08) + ontime_ease = org_bias + np.random.normal(0.02, 0.08) + + # Baseline happiness and habit strength for this participant + person_happiness_baseline = np.random.normal(4.0, 1.0) # Starting point (4-5 range) + habit_strength = 0.0 # Cumulative measure of consistent habit completion + + # Track previous day's habits for momentum/habit stacking + prev_calendar, prev_clean, prev_ontime = 'No', 'No', 'No' + + for day in DAYS: + # Week effect: Sunday (day % 7 == 0) and Saturday (day % 7 == 6) have lower adherence + week_difficulty = 1.0 if (day % 7) not in [0, 6] else 0.75 # weekends are harder + + # Habit formation/fatigue: early days harder, then easier, slight decline late + if day < 7: + time_factor = 0.85 # Getting started is harder + elif day < 20: + time_factor = 1.1 # Momentum builds + else: + time_factor = 0.98 # Slight fatigue + + # Momentum effect: If you did a habit yesterday, you're more likely to do it today + calendar_prob = clip_yes_prob( + calendar_ease * week_difficulty * time_factor + + (0.15 if prev_calendar == 'Yes' else 0), 0.95 + ) + clean_prob = clip_yes_prob( + clean_ease * week_difficulty * time_factor + + (0.15 if prev_clean == 'Yes' else 0), 0.90 + ) + ontime_prob = clip_yes_prob( + ontime_ease * week_difficulty * time_factor + + (0.12 if prev_ontime == 'Yes' else 0), 0.93 + ) + + calendar = np.random.choice(['Yes', 'No'], p=[calendar_prob, 1 - calendar_prob]) + clean = np.random.choice(['Yes', 'No'], p=[clean_prob, 1 - clean_prob]) + ontime = np.random.choice(['Yes', 'No'], p=[ontime_prob, 1 - ontime_prob]) + + # Count habits completed today + adherence_count = sum(x == 'Yes' for x in [calendar, clean, ontime]) + + # Habit strength: accumulates with consistent completion, decays with non-completion + # This creates a cumulative effect that drives upward trend + if adherence_count == 3: + habit_strength += 0.6 # Strong boost for completing all habits + elif adherence_count == 2: + habit_strength += 0.35 # Moderate boost + elif adherence_count == 1: + habit_strength += 0.15 # Small boost + else: + habit_strength -= 0.2 # Small decay for missing all habits + + # Clip habit_strength to reasonable range (0 to 5) + habit_strength = np.clip(habit_strength, 0, 5) + + # Happiness combines DAILY habits effect + cumulative habit strength + study_progress = day / 30.0 # 0.033 to 1.0 + daily_noise = np.random.normal(0, 0.35) + + # Immediate bonus for today's habits (strong, clear dose-response) + daily_habit_bonus = adherence_count * 0.6 # 0-1.8 based on today's habits + + # Cumulative bonus grows as study progresses + cumulative_bonus = habit_strength * (0.4 + study_progress * 0.2) # max ~2.7 + + # Happiness formula: baseline + daily effect + cumulative effect + noise + happiness_value = ( + person_happiness_baseline + # Starting point (4.0) + daily_habit_bonus + # Today's habits (0-1.8) + cumulative_bonus + # Study progress bonus (0-2.7) + daily_noise # Variability + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Intervention', + day, + calendar, + clean, + ontime, + happiness, + ]) + + # Update for next iteration + prev_calendar, prev_clean, prev_ontime = calendar, clean, ontime + + return rows + + +def generate_control_group(start_participant_id): + rows = [] + for offset in range(N_PARTICIPANTS_PER_GROUP): + participant_id = start_participant_id + offset + + # Even without tracking, some people are naturally more organized + natural_org = np.random.normal(0.3, 0.15) # Lower baseline than intervention + natural_org = np.clip(natural_org, 0.05, 0.7) + + # Personal tendencies (but not tracked/reported as habits) + person_happiness_baseline = np.random.normal(5.1, 0.9) # Center control around ~5 + + # Since they're not tracking, habits happen at random intervals (not streaky) + prev_untracked_habits = 0 + + for day in DAYS: + # Week effect: sans the awareness/tracking effect + week_factor = 1.0 if (day % 7) not in [0, 6] else 0.9 + + # Without tracking, unaware of patterns, so less habit formation + time_factor = 1.0 + (day / 100) * 0.1 # Tiny habituation, but weak + + # Untracked habits - they happen but aren't reported + calendar_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4), + 1 - clip_yes_prob(natural_org * 0.8 * week_factor * time_factor, 0.4)]) + clean_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35), + 1 - clip_yes_prob(natural_org * 0.75 * week_factor * time_factor, 0.35)]) + ontime_untracked = np.random.choice(['Yes', 'No'], + p=[clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45), + 1 - clip_yes_prob(natural_org * 0.85 * week_factor * time_factor, 0.45)]) + + # They report habits as "No" (not tracking), but untracked habits have minimal effect + untracked_count = sum(x == 'Yes' for x in [calendar_untracked, clean_untracked, ontime_untracked]) + subtle_boost = untracked_count * 0.1 # Tiny effect since unaware/untracked + + # Control group happiness has day-to-day variability but no systematic growth + # Without awareness and tracking, there's no cumulative benefit + daily_noise = np.random.normal(0, 1.0) + + happiness_value = ( + person_happiness_baseline + # Same baseline + subtle_boost + # Minimal benefit from occasional habits + daily_noise # Higher variability, no systematic trend + ) + happiness = int(np.clip(np.round(happiness_value), 1, 10)) + + rows.append([ + participant_id, + 'Control', + day, + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + 'No', # Reported as "No" - not tracking + happiness, + ]) + + prev_untracked_habits = untracked_count + + return rows + + +data = [] +data.extend(generate_intervention_group(start_participant_id=1)) +data.extend(generate_control_group(start_participant_id=N_PARTICIPANTS_PER_GROUP + 1)) + +df = pd.DataFrame( + data, + columns=[ + 'Participant_ID', + 'Group', + 'Day', + 'Calendar_Adherence', + 'Cleanliness_Adherence', + 'Punctuality_Adherence', + 'Happiness', + ], +) + +# Save the combined dataset +df.to_csv('organization_happiness_study_data.csv', index=False) +print("✅ Full dataset saved as 'organization_happiness_study_data.csv' — open it in Excel!") +print(df.head(10)) # shows first 10 rows \ No newline at end of file diff --git a/dot_config/private_Code/User/History/785723cb/1nKM.txt b/dot_config/private_Code/User/History/785723cb/1nKM.txt new file mode 100644 index 0000000..2fe6247 --- /dev/null +++ b/dot_config/private_Code/User/History/785723cb/1nKM.txt @@ -0,0 +1,6 @@ +pandas +numpy +matplotlib +seaborn +scipy +statsmodels diff --git a/dot_config/private_Code/User/History/785723cb/entries.json b/dot_config/private_Code/User/History/785723cb/entries.json new file mode 100644 index 0000000..ac3cfa6 --- /dev/null +++ b/dot_config/private_Code/User/History/785723cb/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/requirements.txt","entries":[{"id":"1nKM.txt","source":"Chat Edit: 'improve on this analysis script'","timestamp":1774345121245}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/9KVj.py b/dot_config/private_Code/User/History/7da6e0fb/9KVj.py new file mode 100644 index 0000000..a834fa8 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/9KVj.py @@ -0,0 +1,284 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_theme(style='whitegrid', context='talk') + + def finish_plot(filename): + plt.tight_layout() + plt.savefig(outdir / filename, dpi=200, bbox_inches='tight') + if show_plots: + plt.show() + plt.close() + + # 1) PRIMARY OUTCOME: Mean happiness by group with error bars and value labels + if 'Group' in df.columns: + plt.figure(figsize=(8, 6)) + summary = df.groupby('Group')['Happiness'].agg(['mean', 'std', 'count']).reindex(['Control', 'Intervention']) + ci95 = 1.96 * (summary['std'] / np.sqrt(summary['count'])) + bars = plt.bar( + np.arange(len(summary)), + summary['mean'].values, + yerr=ci95.values, + color=['#A9B2C3', '#4E79A7'], + capsize=8, + edgecolor='black', + linewidth=1.2, + alpha=0.9 + ) + plt.xticks(np.arange(len(summary)), ['Control Group\n(No habits tracked)', 'Intervention Group\n(Daily habits tracked)']) + plt.title('Effect of Tracked Organization Habits on Happiness', pad=15, fontsize=14, fontweight='bold') + plt.ylabel('Mean Daily Happiness Score (1-10)', fontsize=12) + plt.ylim(1, 10) + for bar in bars: + yval = bar.get_height() + plt.text(bar.get_x() + bar.get_width()/2, yval - 0.8, f'{yval:.1f}', ha='center', va='center', color='white', fontweight='bold', fontsize=11) + finish_plot('01_primary_outcome_group_comparison.png') + + # 2) DISTRIBUTIONS: Show overlap and variability in happiness scores + if 'Group' in df.columns: + plt.figure(figsize=(9, 6)) + order = ['Control', 'Intervention'] + sns.violinplot( + data=df, x='Group', y='Happiness', order=order, + inner='quartile', palette={'Control': '#E0E0E0', 'Intervention': '#B3CDE3'}, cut=0 + ) + sns.stripplot( + data=df, x='Group', y='Happiness', order=order, + color='black', alpha=0.12, jitter=0.25, size=3 + ) + plt.title('Distribution of Happiness Reports Over 30 Days', pad=15, fontsize=14, fontweight='bold') + plt.xlabel('Study Group', fontsize=12) + plt.ylabel('Happiness Score', fontsize=12) + plt.ylim(1, 10) + finish_plot('02_happiness_distribution_by_group.png') + + # 3) LONGITUDINAL: Daily happiness trend across 30 days + if 'Group' in df.columns and 'Day' in df.columns: + plt.figure(figsize=(10, 6)) + daily_mean = df.groupby(['Group', 'Day'])['Happiness'].mean().reset_index() + sns.lineplot( + data=daily_mean, x='Day', y='Happiness', hue='Group', + hue_order=['Control', 'Intervention'], + palette={'Control': '#7F7F7F', 'Intervention': '#D62728'}, + marker='o', linewidth=2.5, markersize=6 + ) + plt.title('Longitudinal Daily Happiness Throughout the Study', pad=15, fontsize=14, fontweight='bold') + plt.xlabel('Day of Study (1-30)', fontsize=12) + plt.ylabel('Average Happiness', fontsize=12) + plt.ylim(1, 10) + plt.xticks(range(1, 31, 2)) + plt.legend(title='', frameon=True, facecolor='white', fontsize=10) + finish_plot('03_longitudinal_trends.png') + + # 4) DOSE-RESPONSE: In intervention group, does MORE habits = MORE happiness? + intervention_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + plt.figure(figsize=(9, 6)) + sns.boxplot( + data=intervention_df, x='Habits_Count', y='Happiness', + color='#9ECAE1', width=0.6, fliersize=0 + ) + sns.stripplot( + data=intervention_df, x='Habits_Count', y='Happiness', + color='#2B5B84', alpha=0.3, jitter=0.2, size=4 + ) + plt.title('Dose-Response: Happiness by Number of Habits Completed', pad=15, fontsize=14, fontweight='bold') + plt.xlabel('Number of Requested Habits Completed That Day\n(Calendar + Clean Room + Punctual)', fontsize=11) + plt.ylabel('Happiness Score', fontsize=12) + plt.ylim(1, 10) + finish_plot('04_habit_dose_response.png') + + # 5) HABIT COMPLETION RATES: Which habits were easiest to maintain? + habit_cols = ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'] + adherence_rates = intervention_df[habit_cols].mean().sort_values(ascending=False).reset_index() + adherence_rates.columns = ['Habit', 'Rate'] + adherence_rates['Habit'] = adherence_rates['Habit'].str.replace('_Adherence', '', regex=False) + plt.figure(figsize=(8, 6)) + bars = sns.barplot(data=adherence_rates, x='Habit', y='Rate', color='#E76F51') + plt.title('Which Habits Were Easiest to Keep?', pad=15, fontsize=14, fontweight='bold') + plt.xlabel('', fontsize=12) + plt.ylabel('Percentage of Days Completed', fontsize=12) + plt.ylim(0, 1.05) + plt.gca().yaxis.set_major_formatter(plt.matplotlib.ticker.PercentFormatter(1.0)) + for bar in bars.patches: + plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 0.02, + f"{bar.get_height()*100:.0f}%", ha='center', va='bottom', fontweight='bold', fontsize=10) + finish_plot('05_habit_completion_rates.png') + + # 6) INDIVIDUAL VARIATION: Participant-level averages show broad effect + if 'Group' in df.columns: + plt.figure(figsize=(12, 6)) + participant_avg = df.groupby(['Group', 'Participant_ID'])['Happiness'].mean().reset_index() + participant_avg = participant_avg.sort_values(['Group', 'Happiness']) + participant_avg['Order_Index'] = range(len(participant_avg)) + + for group, color in zip(['Control', 'Intervention'], ['#BDBDBD', '#4E79A7']): + group_data = participant_avg[participant_avg['Group'] == group] + plt.bar(group_data['Order_Index'], group_data['Happiness'], color=color, label=group, alpha=0.85, width=0.8) + + plt.axhline(df[df['Group']=='Control']['Happiness'].mean(), color='#7F7F7F', linestyle='--', linewidth=2, label='Control Mean') + plt.axhline(df[df['Group']=='Intervention']['Happiness'].mean(), color='#2B5B84', linestyle='--', linewidth=2, label='Intervention Mean') + plt.title('Individual Average Happiness Across Study Participants', pad=15, fontsize=14, fontweight='bold') + plt.xlabel('Individual Participants (Sorted by Happiness Level)', fontsize=12) + plt.ylabel('Average Happiness Score', fontsize=12) + plt.xticks([]) + plt.ylim(1, 10) + plt.legend(frameon=True, facecolor='white', fontsize=10, loc='upper left') + finish_plot('06_individual_participant_avgs.png') + + logging.info('Saved study plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/FOyN.py b/dot_config/private_Code/User/History/7da6e0fb/FOyN.py new file mode 100644 index 0000000..aa298e4 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/FOyN.py @@ -0,0 +1,227 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_style('whitegrid') + + # Boxplot by Habits_Count + plt.figure(figsize=(9, 6)) + sns.boxplot(data=df, x='Habits_Count', y='Happiness', color='#4C72B0') + plt.title('Daily Happiness by Number of Habits Completed') + plt.xlabel('Number of habits followed (0–3)') + plt.ylabel('Happiness (1–10)') + f1 = outdir / 'happiness_by_habits_box.png' + plt.tight_layout() + plt.savefig(f1) + if show_plots: + plt.show() + plt.close() + + # Violin / jitter + regression + plt.figure(figsize=(9, 6)) + sns.violinplot(data=df, x='Habits_Count', y='Happiness', inner=None, color='#55A868') + sns.stripplot(x='Habits_Count', y='Happiness', data=df, color='k', alpha=0.3, jitter=0.15) + plt.title('Happiness distribution by Habits Completed') + f2 = outdir / 'happiness_by_habits_violin.png' + plt.tight_layout() + plt.savefig(f2) + if show_plots: + plt.show() + plt.close() + + # Participant average bar + participant_avg = df.groupby('Participant_ID')['Happiness'].mean().sort_values() + plt.figure(figsize=(12, 5)) + sns.barplot(x=range(len(participant_avg)), y=participant_avg.values, color='#C44E52') + plt.axhline(df['Happiness'].mean(), color='black', linestyle='--', alpha=0.6) + plt.xticks(range(len(participant_avg)), participant_avg.index, rotation=45) + plt.title('Average Happiness per Participant (sorted)') + f3 = outdir / 'participant_avg_happiness.png' + plt.tight_layout() + plt.savefig(f3) + if show_plots: + plt.show() + plt.close() + + if 'Group' in df.columns: + plt.figure(figsize=(7, 5)) + sns.barplot(data=df, x='Group', y='Happiness', estimator='mean', errorbar='sd', color='#8172B2') + plt.title('Mean Happiness by Group') + plt.ylabel('Average happiness') + f_group = outdir / 'happiness_by_group.png' + plt.tight_layout() + plt.savefig(f_group) + if show_plots: + plt.show() + plt.close() + + # Scatter with linear fit + plt.figure(figsize=(9, 6)) + if 'Group' in df.columns: + sns.scatterplot(data=df, x='Habits_Count', y='Happiness', hue='Group', alpha=0.35) + else: + sns.regplot(x='Habits_Count', y='Happiness', data=df, x_jitter=0.18, scatter_kws={'alpha': 0.4}) + plt.title('Happiness vs Number of Habits Completed (with linear fit)') + f4 = outdir / 'happiness_vs_habits_regression.png' + plt.tight_layout() + plt.savefig(f4) + if show_plots: + plt.show() + plt.close() + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/Gx76.py b/dot_config/private_Code/User/History/7da6e0fb/Gx76.py new file mode 100644 index 0000000..8541b6d --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/Gx76.py @@ -0,0 +1,227 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_style('whitegrid') + + # Boxplot by Habits_Count + plt.figure(figsize=(9, 6)) + sns.boxplot(data=df, x='Habits_Count', y='Happiness', color='#4C72B0') + plt.title('Daily Happiness by Number of Habits Completed') + plt.xlabel('Number of habits followed (0–3)') + plt.ylabel('Happiness (1–10)') + f1 = outdir / 'happiness_by_habits_box.png' + plt.tight_layout() + plt.savefig(f1) + if show_plots: + plt.show() + plt.close() + + # Violin / jitter + regression + plt.figure(figsize=(9, 6)) + sns.violinplot(data=df, x='Habits_Count', y='Happiness', inner=None, color='#55A868') + sns.stripplot(x='Habits_Count', y='Happiness', data=df, color='k', alpha=0.3, jitter=0.15) + plt.title('Happiness distribution by Habits Completed') + f2 = outdir / 'happiness_by_habits_violin.png' + plt.tight_layout() + plt.savefig(f2) + if show_plots: + plt.show() + plt.close() + + # Participant average bar + participant_avg = df.groupby('Participant_ID')['Happiness'].mean().sort_values() + plt.figure(figsize=(12, 5)) + sns.barplot(x=range(len(participant_avg)), y=participant_avg.values, color='#C44E52') + plt.axhline(df['Happiness'].mean(), color='black', linestyle='--', alpha=0.6) + plt.xticks(range(len(participant_avg)), participant_avg.index.astype(str), rotation=45) + plt.title('Average Happiness per Participant (sorted)') + f3 = outdir / 'participant_avg_happiness.png' + plt.tight_layout() + plt.savefig(f3) + if show_plots: + plt.show() + plt.close() + + if 'Group' in df.columns: + plt.figure(figsize=(7, 5)) + sns.barplot(data=df, x='Group', y='Happiness', estimator='mean', errorbar='sd', color='#8172B2') + plt.title('Mean Happiness by Group') + plt.ylabel('Average happiness') + f_group = outdir / 'happiness_by_group.png' + plt.tight_layout() + plt.savefig(f_group) + if show_plots: + plt.show() + plt.close() + + # Scatter with linear fit + plt.figure(figsize=(9, 6)) + if 'Group' in df.columns: + sns.scatterplot(data=df, x='Habits_Count', y='Happiness', hue='Group', alpha=0.35) + else: + sns.regplot(x='Habits_Count', y='Happiness', data=df, x_jitter=0.18, scatter_kws={'alpha': 0.4}) + plt.title('Happiness vs Number of Habits Completed (with linear fit)') + f4 = outdir / 'happiness_vs_habits_regression.png' + plt.tight_layout() + plt.savefig(f4) + if show_plots: + plt.show() + plt.close() + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/Ldgu.py b/dot_config/private_Code/User/History/7da6e0fb/Ldgu.py new file mode 100644 index 0000000..7134899 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/Ldgu.py @@ -0,0 +1,253 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_theme(style='whitegrid', context='talk') + + def finish_plot(filename): + plt.tight_layout() + plt.savefig(outdir / filename, dpi=200, bbox_inches='tight') + if show_plots: + plt.show() + plt.close() + + # 1) Mean happiness by group with error bars + if 'Group' in df.columns: + summary = df.groupby('Group')['Happiness'].agg(['mean', 'std', 'count']).reindex(['Control', 'Intervention']) + ci95 = 1.96 * (summary['std'] / np.sqrt(summary['count'])) + plt.figure(figsize=(8, 6)) + plt.bar(summary.index, summary['mean'], color=['#7A7A7A', '#2A9D8F'], yerr=ci95, capsize=6) + plt.title('Average Happiness by Group') + plt.xlabel('Study group') + plt.ylabel('Mean happiness score') + plt.ylim(0, 10) + finish_plot('01_mean_happiness_by_group.png') + + # 2) Distribution of happiness by group + if 'Group' in df.columns: + plt.figure(figsize=(9, 6)) + order = ['Control', 'Intervention'] + sns.boxplot(data=df, x='Group', y='Happiness', order=order, color='#C9D1D9') + sns.stripplot(data=df, x='Group', y='Happiness', order=order, color='black', alpha=0.18, jitter=0.22, size=2) + plt.title('Happiness Distribution by Group') + plt.xlabel('Study group') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('02_happiness_distribution_by_group.png') + + # 3) Daily happiness trend by group + if 'Group' in df.columns and 'Day' in df.columns: + daily = df.groupby(['Group', 'Day'], as_index=False)['Happiness'].mean() + plt.figure(figsize=(10, 6)) + sns.lineplot(data=daily, x='Day', y='Happiness', hue='Group', hue_order=['Control', 'Intervention'], marker='o') + plt.title('Mean Daily Happiness Across the Study') + plt.xlabel('Day of study') + plt.ylabel('Average happiness') + plt.ylim(0, 10) + plt.xticks(range(1, 31, 2)) + finish_plot('03_daily_happiness_trend.png') + + # 4) Happiness by number of habits in intervention group only + intervention_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + plt.figure(figsize=(9, 6)) + sns.boxplot(data=intervention_df, x='Habits_Count', y='Happiness', color='#4C72B0') + sns.stripplot(data=intervention_df, x='Habits_Count', y='Happiness', color='black', alpha=0.20, jitter=0.18, size=2) + plt.title('Intervention Group: Happiness by Number of Habits Completed') + plt.xlabel('Habits completed that day') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('04_happiness_by_habits_intervention.png') + + # 5) Mean happiness by habits count in intervention group + habits_mean = intervention_df.groupby('Habits_Count', as_index=False)['Happiness'].mean() + plt.figure(figsize=(8, 6)) + sns.lineplot(data=habits_mean, x='Habits_Count', y='Happiness', marker='o', color='#1F77B4') + plt.title('Intervention Group: Mean Happiness vs Habits Completed') + plt.xlabel('Number of habits completed') + plt.ylabel('Mean happiness') + plt.xticks([0, 1, 2, 3]) + plt.ylim(0, 10) + finish_plot('05_mean_happiness_by_habits.png') + + # 6) Habit adherence rates in the intervention group + habit_cols = ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'] + adherence_rates = intervention_df[habit_cols].mean().sort_values(ascending=False).reset_index() + adherence_rates.columns = ['Habit', 'Rate'] + adherence_rates['Habit'] = adherence_rates['Habit'].str.replace('_Adherence', '', regex=False) + plt.figure(figsize=(9, 6)) + sns.barplot(data=adherence_rates, x='Habit', y='Rate', color='#E76F51') + plt.title('Intervention Group: Habit Completion Rate') + plt.xlabel('Habit') + plt.ylabel('Proportion completed') + plt.ylim(0, 1) + plt.gca().yaxis.set_major_formatter(plt.matplotlib.ticker.PercentFormatter(1.0)) + finish_plot('06_habit_completion_rate.png') + + # 7) Participant average happiness by group + if 'Group' in df.columns: + plt.figure(figsize=(12, 6)) + participant_avg = df.groupby(['Group', 'Participant_ID'], as_index=False)['Happiness'].mean() + sns.boxplot(data=participant_avg, x='Group', y='Happiness', order=['Control', 'Intervention'], color='#D6D6D6') + sns.stripplot(data=participant_avg, x='Group', y='Happiness', order=['Control', 'Intervention'], color='black', alpha=0.45, jitter=0.12, size=5) + plt.title('Average Happiness per Participant') + plt.xlabel('Study group') + plt.ylabel('Participant mean happiness') + plt.ylim(0, 10) + finish_plot('07_participant_average_happiness.png') + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/MtI5.py b/dot_config/private_Code/User/History/7da6e0fb/MtI5.py new file mode 100644 index 0000000..b790f32 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/MtI5.py @@ -0,0 +1,272 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_theme(style='whitegrid', context='talk') + + def finish_plot(filename): + plt.tight_layout() + plt.savefig(outdir / filename, dpi=200, bbox_inches='tight') + if show_plots: + plt.show() + plt.close() + + # 1) Mean happiness by group with error bars + if 'Group' in df.columns: + plt.figure(figsize=(8, 6)) + order = ['Control', 'Intervention'] + sns.barplot( + data=df, + x='Group', + y='Happiness', + order=order, + estimator='mean', + errorbar=('ci', 95), + palette=['#7A7A7A', '#2A9D8F'], + ) + plt.title('Average Happiness by Group') + plt.xlabel('Study group') + plt.ylabel('Mean happiness score') + plt.ylim(0, 10) + finish_plot('01_mean_happiness_by_group.png') + + # 2) Distribution of happiness by group + if 'Group' in df.columns: + plt.figure(figsize=(9, 6)) + order = ['Control', 'Intervention'] + sns.boxplot(data=df, x='Group', y='Happiness', order=order, palette=['#B0B0B0', '#73C6B6']) + sns.stripplot(data=df, x='Group', y='Happiness', order=order, color='black', alpha=0.18, jitter=0.22, size=2) + plt.title('Happiness Distribution by Group') + plt.xlabel('Study group') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('02_happiness_distribution_by_group.png') + + # 3) Daily happiness trend by group + if 'Group' in df.columns and 'Day' in df.columns: + daily = df.groupby(['Group', 'Day'], as_index=False)['Happiness'].mean() + plt.figure(figsize=(10, 6)) + sns.lineplot(data=daily, x='Day', y='Happiness', hue='Group', hue_order=['Control', 'Intervention'], marker='o') + plt.title('Mean Daily Happiness Across the Study') + plt.xlabel('Day of study') + plt.ylabel('Average happiness') + plt.ylim(0, 10) + plt.xticks(range(1, 31, 2)) + finish_plot('03_daily_happiness_trend.png') + + # 4) Happiness by number of habits in intervention group only + intervention_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + plt.figure(figsize=(9, 6)) + sns.boxplot(data=intervention_df, x='Habits_Count', y='Happiness', color='#4C72B0') + sns.stripplot(data=intervention_df, x='Habits_Count', y='Happiness', color='black', alpha=0.20, jitter=0.18, size=2) + plt.title('Intervention Group: Happiness by Number of Habits Completed') + plt.xlabel('Habits completed that day') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('04_happiness_by_habits_intervention.png') + + # 5) Mean happiness by habits count in intervention group + habits_mean = intervention_df.groupby('Habits_Count', as_index=False)['Happiness'].mean() + plt.figure(figsize=(8, 6)) + sns.lineplot(data=habits_mean, x='Habits_Count', y='Happiness', marker='o', color='#1F77B4') + plt.title('Intervention Group: Mean Happiness vs Habits Completed') + plt.xlabel('Number of habits completed') + plt.ylabel('Mean happiness') + plt.xticks([0, 1, 2, 3]) + plt.ylim(0, 10) + finish_plot('05_mean_happiness_by_habits.png') + + # 6) Habit adherence rates in the intervention group + habit_cols = ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'] + adherence_rates = ( + intervention_df[habit_cols] + .mean() + .sort_values(ascending=False) + .reset_index() + .rename(columns={'index': 'Habit', 0: 'Rate'}) + ) + adherence_rates['Habit'] = adherence_rates['Habit'].str.replace('_Adherence', '', regex=False) + plt.figure(figsize=(9, 6)) + sns.barplot(data=adherence_rates, x='Habit', y=0, color='#E76F51') + plt.title('Intervention Group: Habit Completion Rate') + plt.xlabel('Habit') + plt.ylabel('Proportion completed') + plt.ylim(0, 1) + plt.gca().yaxis.set_major_formatter(plt.matplotlib.ticker.PercentFormatter(1.0)) + finish_plot('06_habit_completion_rate.png') + + # 7) Participant averages, grouped by study group + if 'Group' in df.columns: + participant_avg = df.groupby(['Group', 'Participant_ID'])['Happiness'].mean().reset_index() + plt.figure(figsize=(12, 6)) + sns.barplot( + data=participant_avg, + x='Participant_ID', + y='Happiness', + hue='Group', + dodge=True, + palette=['#7A7A7A', '#2A9D8F'], + ) + plt.title('Average Happiness per Participant') + plt.xlabel('Participant ID') + plt.ylabel('Mean happiness') + plt.ylim(0, 10) + plt.xticks(rotation=45) + finish_plot('07_participant_average_happiness.png') + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/NtsI.py b/dot_config/private_Code/User/History/7da6e0fb/NtsI.py new file mode 100644 index 0000000..51f1664 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/NtsI.py @@ -0,0 +1,270 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_theme(style='whitegrid', context='talk') + + def finish_plot(filename): + plt.tight_layout() + plt.savefig(outdir / filename, dpi=200, bbox_inches='tight') + if show_plots: + plt.show() + plt.close() + + # 1) Mean happiness by group with error bars + if 'Group' in df.columns: + summary = df.groupby('Group')['Happiness'].agg(['mean', 'std', 'count']).reindex(['Control', 'Intervention']) + ci95 = 1.96 * (summary['std'] / np.sqrt(summary['count'])) + plt.figure(figsize=(8, 6)) + xpos = np.arange(len(summary)) + plt.bar(xpos, summary['mean'].values, color=['#7A7A7A', '#2A9D8F'], yerr=ci95.values, capsize=6) + plt.xticks(xpos, summary.index) + plt.title('Average Happiness by Group') + plt.xlabel('Study group') + plt.ylabel('Mean happiness score') + plt.ylim(0, 10) + finish_plot('01_mean_happiness_by_group.png') + + # 2) Distribution of happiness by group + if 'Group' in df.columns: + plt.figure(figsize=(9, 6)) + order = ['Control', 'Intervention'] + grouped = [df.loc[df['Group'] == group, 'Happiness'].values for group in order] + plt.boxplot(grouped, labels=order, patch_artist=True, + boxprops=dict(facecolor='#C9D1D9', color='#4C4C4C'), + medianprops=dict(color='#2A9D8F', linewidth=2), + whiskerprops=dict(color='#4C4C4C'), capprops=dict(color='#4C4C4C')) + for i, group in enumerate(order, start=1): + y = df.loc[df['Group'] == group, 'Happiness'].values + x = np.random.normal(i, 0.06, size=len(y)) + plt.scatter(x, y, color='black', alpha=0.15, s=10) + plt.title('Happiness Distribution by Group') + plt.xlabel('Study group') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('02_happiness_distribution_by_group.png') + + # 3) Daily happiness trend by group + if 'Group' in df.columns and 'Day' in df.columns: + daily = df.groupby(['Group', 'Day'], as_index=False)['Happiness'].mean() + plt.figure(figsize=(10, 6)) + sns.lineplot(data=daily, x='Day', y='Happiness', hue='Group', hue_order=['Control', 'Intervention'], marker='o') + plt.title('Mean Daily Happiness Across the Study') + plt.xlabel('Day of study') + plt.ylabel('Average happiness') + plt.ylim(0, 10) + plt.xticks(range(1, 31, 2)) + finish_plot('03_daily_happiness_trend.png') + + # 4) Happiness by number of habits in intervention group only + intervention_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + plt.figure(figsize=(9, 6)) + sns.boxplot(data=intervention_df, x='Habits_Count', y='Happiness', color='#4C72B0') + sns.stripplot(data=intervention_df, x='Habits_Count', y='Happiness', color='black', alpha=0.20, jitter=0.18, size=2) + plt.title('Intervention Group: Happiness by Number of Habits Completed') + plt.xlabel('Habits completed that day') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('04_happiness_by_habits_intervention.png') + + # 5) Mean happiness by habits count in intervention group + habits_mean = intervention_df.groupby('Habits_Count', as_index=False)['Happiness'].mean() + plt.figure(figsize=(8, 6)) + sns.lineplot(data=habits_mean, x='Habits_Count', y='Happiness', marker='o', color='#1F77B4') + plt.title('Intervention Group: Mean Happiness vs Habits Completed') + plt.xlabel('Number of habits completed') + plt.ylabel('Mean happiness') + plt.xticks([0, 1, 2, 3]) + plt.ylim(0, 10) + finish_plot('05_mean_happiness_by_habits.png') + + # 6) Habit adherence rates in the intervention group + habit_cols = ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'] + adherence_rates = intervention_df[habit_cols].mean().sort_values(ascending=False).reset_index() + adherence_rates.columns = ['Habit', 'Rate'] + adherence_rates['Habit'] = adherence_rates['Habit'].str.replace('_Adherence', '', regex=False) + plt.figure(figsize=(9, 6)) + sns.barplot(data=adherence_rates, x='Habit', y='Rate', color='#E76F51') + plt.title('Intervention Group: Habit Completion Rate') + plt.xlabel('Habit') + plt.ylabel('Proportion completed') + plt.ylim(0, 1) + plt.gca().yaxis.set_major_formatter(plt.matplotlib.ticker.PercentFormatter(1.0)) + finish_plot('06_habit_completion_rate.png') + + # 7) Participant average happiness by group + if 'Group' in df.columns: + plt.figure(figsize=(12, 6)) + participant_avg = df.groupby(['Group', 'Participant_ID'], as_index=False)['Happiness'].mean() + group_order = ['Control', 'Intervention'] + grouped_avgs = [participant_avg.loc[participant_avg['Group'] == group, 'Happiness'].values for group in group_order] + plt.boxplot(grouped_avgs, labels=group_order, patch_artist=True, + boxprops=dict(facecolor='#D6D6D6', color='#4C4C4C'), + medianprops=dict(color='#2A9D8F', linewidth=2), + whiskerprops=dict(color='#4C4C4C'), capprops=dict(color='#4C4C4C')) + for i, group in enumerate(group_order, start=1): + y = participant_avg.loc[participant_avg['Group'] == group, 'Happiness'].values + x = np.random.normal(i, 0.06, size=len(y)) + plt.scatter(x, y, color='black', alpha=0.45, s=22) + plt.title('Average Happiness per Participant') + plt.xlabel('Study group') + plt.ylabel('Participant mean happiness') + plt.ylim(0, 10) + finish_plot('07_participant_average_happiness.png') + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/SA9R.py b/dot_config/private_Code/User/History/7da6e0fb/SA9R.py new file mode 100644 index 0000000..1e4e5b0 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/SA9R.py @@ -0,0 +1,189 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness):') + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(df.loc[mask, habit].astype(int), df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_style('whitegrid') + + # Boxplot by Habits_Count + plt.figure(figsize=(9, 6)) + sns.boxplot(x='Habits_Count', y='Happiness', data=df, palette='viridis') + plt.title('Daily Happiness by Number of Habits Completed') + plt.xlabel('Number of habits followed (0–3)') + plt.ylabel('Happiness (1–10)') + f1 = outdir / 'happiness_by_habits_box.png' + plt.tight_layout() + plt.savefig(f1) + if show_plots: + plt.show() + plt.close() + + # Violin / jitter + regression + plt.figure(figsize=(9, 6)) + sns.violinplot(x='Habits_Count', y='Happiness', data=df, inner=None, palette='muted') + sns.stripplot(x='Habits_Count', y='Happiness', data=df, color='k', alpha=0.3, jitter=0.15) + plt.title('Happiness distribution by Habits Completed') + f2 = outdir / 'happiness_by_habits_violin.png' + plt.tight_layout() + plt.savefig(f2) + if show_plots: + plt.show() + plt.close() + + # Participant average bar + participant_avg = df.groupby('Participant_ID')['Happiness'].mean().sort_values() + plt.figure(figsize=(12, 5)) + sns.barplot(x=participant_avg.index.astype(str), y=participant_avg.values, palette='coolwarm') + plt.axhline(df['Happiness'].mean(), color='black', linestyle='--', alpha=0.6) + plt.xticks(rotation=45) + plt.title('Average Happiness per Participant (sorted)') + f3 = outdir / 'participant_avg_happiness.png' + plt.tight_layout() + plt.savefig(f3) + if show_plots: + plt.show() + plt.close() + + # Scatter with linear fit + plt.figure(figsize=(9, 6)) + sns.regplot(x='Habits_Count', y='Happiness', data=df, x_jitter=0.18, scatter_kws={'alpha': 0.4}) + plt.title('Happiness vs Number of Habits Completed (with linear fit)') + f4 = outdir / 'happiness_vs_habits_regression.png' + plt.tight_layout() + plt.savefig(f4) + if show_plots: + plt.show() + plt.close() + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect size example: compare 0 vs 3 + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/bwYb.py b/dot_config/private_Code/User/History/7da6e0fb/bwYb.py new file mode 100644 index 0000000..e3d85fd --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/bwYb.py @@ -0,0 +1,231 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_style('whitegrid') + + # Boxplot by Habits_Count + plt.figure(figsize=(9, 6)) + sns.boxplot(data=df, x='Habits_Count', y='Happiness', hue='Habits_Count', palette='viridis', dodge=False) + plt.legend([], [], frameon=False) + plt.title('Daily Happiness by Number of Habits Completed') + plt.xlabel('Number of habits followed (0–3)') + plt.ylabel('Happiness (1–10)') + f1 = outdir / 'happiness_by_habits_box.png' + plt.tight_layout() + plt.savefig(f1) + if show_plots: + plt.show() + plt.close() + + # Violin / jitter + regression + plt.figure(figsize=(9, 6)) + sns.violinplot(data=df, x='Habits_Count', y='Happiness', hue='Habits_Count', inner=None, palette='muted', dodge=False) + plt.legend([], [], frameon=False) + sns.stripplot(x='Habits_Count', y='Happiness', data=df, color='k', alpha=0.3, jitter=0.15) + plt.title('Happiness distribution by Habits Completed') + f2 = outdir / 'happiness_by_habits_violin.png' + plt.tight_layout() + plt.savefig(f2) + if show_plots: + plt.show() + plt.close() + + # Participant average bar + participant_avg = df.groupby('Participant_ID')['Happiness'].mean().sort_values() + plt.figure(figsize=(12, 5)) + sns.barplot(x=range(len(participant_avg)), y=participant_avg.values, hue=range(len(participant_avg)), palette='coolwarm', dodge=False) + plt.legend([], [], frameon=False) + plt.axhline(df['Happiness'].mean(), color='black', linestyle='--', alpha=0.6) + plt.xticks(range(len(participant_avg)), participant_avg.index.astype(str), rotation=45) + plt.title('Average Happiness per Participant (sorted)') + f3 = outdir / 'participant_avg_happiness.png' + plt.tight_layout() + plt.savefig(f3) + if show_plots: + plt.show() + plt.close() + + if 'Group' in df.columns: + plt.figure(figsize=(7, 5)) + sns.barplot(data=df, x='Group', y='Happiness', hue='Group', estimator='mean', errorbar='sd', palette='Set2', dodge=False) + plt.legend([], [], frameon=False) + plt.title('Mean Happiness by Group') + plt.ylabel('Average happiness') + f_group = outdir / 'happiness_by_group.png' + plt.tight_layout() + plt.savefig(f_group) + if show_plots: + plt.show() + plt.close() + + # Scatter with linear fit + plt.figure(figsize=(9, 6)) + if 'Group' in df.columns: + sns.scatterplot(data=df, x='Habits_Count', y='Happiness', hue='Group', alpha=0.35) + else: + sns.regplot(x='Habits_Count', y='Happiness', data=df, x_jitter=0.18, scatter_kws={'alpha': 0.4}) + plt.title('Happiness vs Number of Habits Completed (with linear fit)') + f4 = outdir / 'happiness_vs_habits_regression.png' + plt.tight_layout() + plt.savefig(f4) + if show_plots: + plt.show() + plt.close() + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/enQE.py b/dot_config/private_Code/User/History/7da6e0fb/enQE.py new file mode 100644 index 0000000..68c3ef8 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/enQE.py @@ -0,0 +1,270 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_theme(style='whitegrid', context='talk') + + def finish_plot(filename): + plt.tight_layout() + plt.savefig(outdir / filename, dpi=200, bbox_inches='tight') + if show_plots: + plt.show() + plt.close() + + # 1) Mean happiness by group with error bars + if 'Group' in df.columns: + summary = df.groupby('Group')['Happiness'].agg(['mean', 'std', 'count']).reindex(['Control', 'Intervention']) + ci95 = 1.96 * (summary['std'] / np.sqrt(summary['count'])) + plt.figure(figsize=(8, 6)) + xpos = np.arange(len(summary)) + plt.bar(xpos, summary['mean'].values, color=['#7A7A7A', '#2A9D8F'], yerr=ci95.values, capsize=6) + plt.xticks(xpos, summary.index) + plt.title('Average Happiness by Group') + plt.xlabel('Study group') + plt.ylabel('Mean happiness score') + plt.ylim(0, 10) + finish_plot('01_mean_happiness_by_group.png') + + # 2) Distribution of happiness by group + if 'Group' in df.columns: + plt.figure(figsize=(9, 6)) + order = ['Control', 'Intervention'] + grouped = [df.loc[df['Group'] == group, 'Happiness'].values for group in order] + plt.boxplot(grouped, tick_labels=order, patch_artist=True, + boxprops=dict(facecolor='#C9D1D9', color='#4C4C4C'), + medianprops=dict(color='#2A9D8F', linewidth=2), + whiskerprops=dict(color='#4C4C4C'), capprops=dict(color='#4C4C4C')) + for i, group in enumerate(order, start=1): + y = df.loc[df['Group'] == group, 'Happiness'].values + x = np.random.normal(i, 0.06, size=len(y)) + plt.scatter(x, y, color='black', alpha=0.15, s=10) + plt.title('Happiness Distribution by Group') + plt.xlabel('Study group') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('02_happiness_distribution_by_group.png') + + # 3) Daily happiness trend by group + if 'Group' in df.columns and 'Day' in df.columns: + daily = df.groupby(['Group', 'Day'], as_index=False)['Happiness'].mean() + plt.figure(figsize=(10, 6)) + sns.lineplot(data=daily, x='Day', y='Happiness', hue='Group', hue_order=['Control', 'Intervention'], marker='o') + plt.title('Mean Daily Happiness Across the Study') + plt.xlabel('Day of study') + plt.ylabel('Average happiness') + plt.ylim(0, 10) + plt.xticks(range(1, 31, 2)) + finish_plot('03_daily_happiness_trend.png') + + # 4) Happiness by number of habits in intervention group only + intervention_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + plt.figure(figsize=(9, 6)) + sns.boxplot(data=intervention_df, x='Habits_Count', y='Happiness', color='#4C72B0') + sns.stripplot(data=intervention_df, x='Habits_Count', y='Happiness', color='black', alpha=0.20, jitter=0.18, size=2) + plt.title('Intervention Group: Happiness by Number of Habits Completed') + plt.xlabel('Habits completed that day') + plt.ylabel('Happiness score') + plt.ylim(0, 10) + finish_plot('04_happiness_by_habits_intervention.png') + + # 5) Mean happiness by habits count in intervention group + habits_mean = intervention_df.groupby('Habits_Count', as_index=False)['Happiness'].mean() + plt.figure(figsize=(8, 6)) + sns.lineplot(data=habits_mean, x='Habits_Count', y='Happiness', marker='o', color='#1F77B4') + plt.title('Intervention Group: Mean Happiness vs Habits Completed') + plt.xlabel('Number of habits completed') + plt.ylabel('Mean happiness') + plt.xticks([0, 1, 2, 3]) + plt.ylim(0, 10) + finish_plot('05_mean_happiness_by_habits.png') + + # 6) Habit adherence rates in the intervention group + habit_cols = ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'] + adherence_rates = intervention_df[habit_cols].mean().sort_values(ascending=False).reset_index() + adherence_rates.columns = ['Habit', 'Rate'] + adherence_rates['Habit'] = adherence_rates['Habit'].str.replace('_Adherence', '', regex=False) + plt.figure(figsize=(9, 6)) + sns.barplot(data=adherence_rates, x='Habit', y='Rate', color='#E76F51') + plt.title('Intervention Group: Habit Completion Rate') + plt.xlabel('Habit') + plt.ylabel('Proportion completed') + plt.ylim(0, 1) + plt.gca().yaxis.set_major_formatter(plt.matplotlib.ticker.PercentFormatter(1.0)) + finish_plot('06_habit_completion_rate.png') + + # 7) Participant average happiness by group + if 'Group' in df.columns: + plt.figure(figsize=(12, 6)) + participant_avg = df.groupby(['Group', 'Participant_ID'], as_index=False)['Happiness'].mean() + group_order = ['Control', 'Intervention'] + grouped_avgs = [participant_avg.loc[participant_avg['Group'] == group, 'Happiness'].values for group in group_order] + plt.boxplot(grouped_avgs, tick_labels=group_order, patch_artist=True, + boxprops=dict(facecolor='#D6D6D6', color='#4C4C4C'), + medianprops=dict(color='#2A9D8F', linewidth=2), + whiskerprops=dict(color='#4C4C4C'), capprops=dict(color='#4C4C4C')) + for i, group in enumerate(group_order, start=1): + y = participant_avg.loc[participant_avg['Group'] == group, 'Happiness'].values + x = np.random.normal(i, 0.06, size=len(y)) + plt.scatter(x, y, color='black', alpha=0.45, s=22) + plt.title('Average Happiness per Participant') + plt.xlabel('Study group') + plt.ylabel('Participant mean happiness') + plt.ylim(0, 10) + finish_plot('07_participant_average_happiness.png') + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/entries.json b/dot_config/private_Code/User/History/7da6e0fb/entries.json new file mode 100644 index 0000000..430c3dd --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/entries.json @@ -0,0 +1 @@ +{"version":1,"resource":"file:///home/breadway/Documents/Year%2010/Year%2010/Psychology/Data%20Analysis.py","entries":[{"id":"SA9R.py","source":"Chat Edit: 'improve on this analysis script'","timestamp":1774345116327},{"id":"ycv3.py","source":"Chat Edit: 'improve data gen.py to add a second dataset as a control. for context, the study tracks the affects of being organised on how happy participants feel. there needs to be a control group that is only recording their happiness daily. the main group will try to record their happiness, will add all events to their calendar, be on time to every event, and clean their bedroom everyday. they report if they do any of these in the study data as a yes or no. the control group will not do any of these.'","timestamp":1774345356264},{"id":"bwYb.py","source":"Chat Edit: 'improve data gen.py to add a second dataset as a control. for context, the study tracks the affects of being organised on how happy participants feel. there needs to be a control group that is only recording their happiness daily. the main group will try to record their happiness, will add all events to their calendar, be on time to every event, and clean their bedroom everyday. they report if they do any of these in the study data as a yes or no. the control group will not do any of these.'","timestamp":1774345411358},{"id":"Gx76.py","source":"Chat Edit: 'improve data gen.py to add a second dataset as a control. for context, the study tracks the affects of being organised on how happy participants feel. there needs to be a control group that is only recording their happiness daily. the main group will try to record their happiness, will add all events to their calendar, be on time to every event, and clean their bedroom everyday. they report if they do any of these in the study data as a yes or no. the control group will not do any of these.'","timestamp":1774345436946},{"id":"FOyN.py","source":"Chat Edit: 'improve data gen.py to add a second dataset as a control. for context, the study tracks the affects of being organised on how happy participants feel. there needs to be a control group that is only recording their happiness daily. the main group will try to record their happiness, will add all events to their calendar, be on time to every event, and clean their bedroom everyday. they report if they do any of these in the study data as a yes or no. the control group will not do any of these.'","timestamp":1774345501736},{"id":"MtI5.py","source":"Chat Edit: 'make the graphs better suited to the study, easier to read, and more graphs.'","timestamp":1774346145201},{"id":"Ldgu.py","source":"Chat Edit: 'make the graphs better suited to the study, easier to read, and more graphs.'","timestamp":1774346200970},{"id":"NtsI.py","source":"Chat Edit: 'make the graphs better suited to the study, easier to read, and more graphs.'","timestamp":1774346222014},{"id":"enQE.py","source":"Chat Edit: 'make the graphs better suited to the study, easier to read, and more graphs.'","timestamp":1774346258056},{"id":"yfjL.py","timestamp":1774346751804},{"id":"9KVj.py","source":"Chat Edit: 'ensure the graphs being used are appropriate for the study'","timestamp":1774346803522}]} \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/ycv3.py b/dot_config/private_Code/User/History/7da6e0fb/ycv3.py new file mode 100644 index 0000000..6415abb --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/ycv3.py @@ -0,0 +1,227 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_style('whitegrid') + + # Boxplot by Habits_Count + plt.figure(figsize=(9, 6)) + sns.boxplot(x='Habits_Count', y='Happiness', data=df, palette='viridis') + plt.title('Daily Happiness by Number of Habits Completed') + plt.xlabel('Number of habits followed (0–3)') + plt.ylabel('Happiness (1–10)') + f1 = outdir / 'happiness_by_habits_box.png' + plt.tight_layout() + plt.savefig(f1) + if show_plots: + plt.show() + plt.close() + + # Violin / jitter + regression + plt.figure(figsize=(9, 6)) + sns.violinplot(x='Habits_Count', y='Happiness', data=df, inner=None, palette='muted') + sns.stripplot(x='Habits_Count', y='Happiness', data=df, color='k', alpha=0.3, jitter=0.15) + plt.title('Happiness distribution by Habits Completed') + f2 = outdir / 'happiness_by_habits_violin.png' + plt.tight_layout() + plt.savefig(f2) + if show_plots: + plt.show() + plt.close() + + # Participant average bar + participant_avg = df.groupby('Participant_ID')['Happiness'].mean().sort_values() + plt.figure(figsize=(12, 5)) + sns.barplot(x=participant_avg.index.astype(str), y=participant_avg.values, palette='coolwarm') + plt.axhline(df['Happiness'].mean(), color='black', linestyle='--', alpha=0.6) + plt.xticks(rotation=45) + plt.title('Average Happiness per Participant (sorted)') + f3 = outdir / 'participant_avg_happiness.png' + plt.tight_layout() + plt.savefig(f3) + if show_plots: + plt.show() + plt.close() + + if 'Group' in df.columns: + plt.figure(figsize=(7, 5)) + sns.barplot(data=df, x='Group', y='Happiness', estimator='mean', errorbar='sd', palette='Set2') + plt.title('Mean Happiness by Group') + plt.ylabel('Average happiness') + f_group = outdir / 'happiness_by_group.png' + plt.tight_layout() + plt.savefig(f_group) + if show_plots: + plt.show() + plt.close() + + # Scatter with linear fit + plt.figure(figsize=(9, 6)) + if 'Group' in df.columns: + sns.scatterplot(data=df, x='Habits_Count', y='Happiness', hue='Group', alpha=0.35) + else: + sns.regplot(x='Habits_Count', y='Happiness', data=df, x_jitter=0.18, scatter_kws={'alpha': 0.4}) + plt.title('Happiness vs Number of Habits Completed (with linear fit)') + f4 = outdir / 'happiness_vs_habits_regression.png' + plt.tight_layout() + plt.savefig(f4) + if show_plots: + plt.show() + plt.close() + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/History/7da6e0fb/yfjL.py b/dot_config/private_Code/User/History/7da6e0fb/yfjL.py new file mode 100644 index 0000000..aa298e4 --- /dev/null +++ b/dot_config/private_Code/User/History/7da6e0fb/yfjL.py @@ -0,0 +1,227 @@ +import argparse +import os +from pathlib import Path +import logging + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import statsmodels.api as sm +import statsmodels.formula.api as smf + + +logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') + + +def load_data(path): + df = pd.read_csv(path) + logging.info("Loaded %d rows from %s", len(df), path) + return df + + +def prepare_data(df): + # Ensure required columns exist + required = {'Participant_ID', 'Happiness', 'Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence'} + missing = required - set(df.columns) + if missing: + raise KeyError(f"Missing required columns: {missing}") + + if 'Group' not in df.columns: + df['Group'] = 'Intervention' + df['Group'] = df['Group'].astype(str).str.strip().str.title() + + # Normalize adherence to boolean (Yes/No or True/False) + for col in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + df[col] = df[col].astype(str).str.strip().str.lower().map({'yes': True, 'no': False, 'true': True, 'false': False}) + + # Count habits per row + df['Habits_Count'] = ( + df[['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']].fillna(False).astype(int).sum(axis=1) + ) + + # Coerce Happiness to numeric and drop rows without Happiness + df['Happiness'] = pd.to_numeric(df['Happiness'], errors='coerce') + before = len(df) + df = df.dropna(subset=['Happiness']) + logging.info('Dropped %d rows without numeric Happiness', before - len(df)) + + return df + + +def descriptive_stats(df): + print('Dataset shape:', df.shape) + print('\nOverall summary:') + print(df['Happiness'].describe()) + + if 'Group' in df.columns: + print('\nRows by group:') + print(df['Group'].value_counts()) + + print('\nAverage happiness by group:') + print(df.groupby('Group')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nAverage happiness by number of habits completed:') + print(df.groupby('Habits_Count')['Happiness'].agg(['mean', 'count', 'std']).round(3)) + + print('\nMedian happiness by habits:') + print(df.groupby('Habits_Count')['Happiness'].median()) + + # Correlations + print('\nPearson correlation between Habits_Count and Happiness:') + print(df[['Habits_Count', 'Happiness']].corr().round(3)) + + print('\nPoint-biserial correlation (each habit vs happiness, intervention group only):') + habit_df = df[df['Group'] == 'Intervention'] if 'Group' in df.columns else df + for habit in ['Calendar_Adherence', 'Cleanliness_Adherence', 'Punctuality_Adherence']: + mask = ~habit_df[habit].isna() + if mask.sum() == 0: + print(f'{habit:22} (no data)') + continue + r, p = stats.pointbiserialr(habit_df.loc[mask, habit].astype(int), habit_df.loc[mask, 'Happiness']) + print(f"{habit:22} r = {r:.3f} p = {p:.4f}") + + +def cohen_d(x, y): + # Cohen's d for two independent samples + nx, ny = len(x), len(y) + dof = nx + ny - 2 + pooled_sd = np.sqrt(((nx - 1) * x.std(ddof=1) ** 2 + (ny - 1) * y.std(ddof=1) ** 2) / dof) + return (x.mean() - y.mean()) / pooled_sd + + +def run_ols(df): + if 'Group' in df.columns: + model = smf.ols('Happiness ~ Habits_Count + C(Group)', data=df).fit() + print('\nOLS regression: Happiness ~ Habits_Count + Group') + else: + X = sm.add_constant(df['Habits_Count']) + y = df['Happiness'] + model = sm.OLS(y, X).fit() + print('\nSimple OLS regression: Happiness ~ Habits_Count') + print(model.summary()) + return model + + +def run_mixedlm(df): + # Random intercept for Participant_ID + try: + md = smf.mixedlm('Happiness ~ Habits_Count', data=df, groups=df['Participant_ID']) + mdf = md.fit(reml=False) + print('\nMixed-effects model (random intercept by Participant_ID):') + print(mdf.summary()) + return mdf + except Exception as e: + logging.warning('MixedLM failed: %s', e) + return None + + +def make_plots(df, outdir, show_plots=False): + outdir = Path(outdir) + outdir.mkdir(parents=True, exist_ok=True) + sns.set_style('whitegrid') + + # Boxplot by Habits_Count + plt.figure(figsize=(9, 6)) + sns.boxplot(data=df, x='Habits_Count', y='Happiness', color='#4C72B0') + plt.title('Daily Happiness by Number of Habits Completed') + plt.xlabel('Number of habits followed (0–3)') + plt.ylabel('Happiness (1–10)') + f1 = outdir / 'happiness_by_habits_box.png' + plt.tight_layout() + plt.savefig(f1) + if show_plots: + plt.show() + plt.close() + + # Violin / jitter + regression + plt.figure(figsize=(9, 6)) + sns.violinplot(data=df, x='Habits_Count', y='Happiness', inner=None, color='#55A868') + sns.stripplot(x='Habits_Count', y='Happiness', data=df, color='k', alpha=0.3, jitter=0.15) + plt.title('Happiness distribution by Habits Completed') + f2 = outdir / 'happiness_by_habits_violin.png' + plt.tight_layout() + plt.savefig(f2) + if show_plots: + plt.show() + plt.close() + + # Participant average bar + participant_avg = df.groupby('Participant_ID')['Happiness'].mean().sort_values() + plt.figure(figsize=(12, 5)) + sns.barplot(x=range(len(participant_avg)), y=participant_avg.values, color='#C44E52') + plt.axhline(df['Happiness'].mean(), color='black', linestyle='--', alpha=0.6) + plt.xticks(range(len(participant_avg)), participant_avg.index, rotation=45) + plt.title('Average Happiness per Participant (sorted)') + f3 = outdir / 'participant_avg_happiness.png' + plt.tight_layout() + plt.savefig(f3) + if show_plots: + plt.show() + plt.close() + + if 'Group' in df.columns: + plt.figure(figsize=(7, 5)) + sns.barplot(data=df, x='Group', y='Happiness', estimator='mean', errorbar='sd', color='#8172B2') + plt.title('Mean Happiness by Group') + plt.ylabel('Average happiness') + f_group = outdir / 'happiness_by_group.png' + plt.tight_layout() + plt.savefig(f_group) + if show_plots: + plt.show() + plt.close() + + # Scatter with linear fit + plt.figure(figsize=(9, 6)) + if 'Group' in df.columns: + sns.scatterplot(data=df, x='Habits_Count', y='Happiness', hue='Group', alpha=0.35) + else: + sns.regplot(x='Habits_Count', y='Happiness', data=df, x_jitter=0.18, scatter_kws={'alpha': 0.4}) + plt.title('Happiness vs Number of Habits Completed (with linear fit)') + f4 = outdir / 'happiness_vs_habits_regression.png' + plt.tight_layout() + plt.savefig(f4) + if show_plots: + plt.show() + plt.close() + + logging.info('Saved plots to %s', outdir) + + +def main(args): + df = load_data(args.data) + df = prepare_data(df) + + descriptive_stats(df) + + # Effect sizes + group0 = df[df['Habits_Count'] == 0]['Happiness'] + group3 = df[df['Habits_Count'] == 3]['Happiness'] + if len(group0) > 1 and len(group3) > 1: + d = cohen_d(group3, group0) + print(f"\nCohen's d (3 habits vs 0 habits) = {d:.3f}") + + if 'Group' in df.columns: + control = df[df['Group'] == 'Control']['Happiness'] + intervention = df[df['Group'] == 'Intervention']['Happiness'] + if len(control) > 1 and len(intervention) > 1: + d_group = cohen_d(intervention, control) + print(f"Cohen's d (Intervention vs Control happiness) = {d_group:.3f}") + + # Models + run_ols(df) + run_mixedlm(df) + + # Plots + make_plots(df, args.outdir, show_plots=args.show) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Improved data analysis for organization_happiness_study_data.csv') + parser.add_argument('--data', type=str, default='organization_happiness_study_data.csv', help='CSV data path') + parser.add_argument('--outdir', type=str, default='plots', help='Directory to save plots') + parser.add_argument('--show', action='store_true', help='Show plots interactively') + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/dot_config/private_Code/User/chatLanguageModels.json b/dot_config/private_Code/User/chatLanguageModels.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/dot_config/private_Code/User/chatLanguageModels.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/15f13b33-3dc7-40aa-8a44-bc553620d024.jsonl b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/15f13b33-3dc7-40aa-8a44-bc553620d024.jsonl new file mode 100644 index 0000000..01d4cad --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/15f13b33-3dc7-40aa-8a44-bc553620d024.jsonl @@ -0,0 +1,3 @@ +{"kind":0,"v":{"version":3,"creationDate":1771726602463,"initialLocation":"panel","responderUsername":"","sessionId":"15f13b33-3dc7-40aa-8a44-bc553620d024","hasPendingEdits":false,"requests":[],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} +{"kind":1,"k":["responderUsername"],"v":"GitHub Copilot"} +{"kind":1,"k":["inputState","selectedModel"],"v":{"identifier":"copilot/gpt-5-mini","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5-mini","vendor":"copilot","name":"GPT-5 mini","family":"gpt-5-mini","tooltip":"Rate is counted at 0x.","version":"gpt-5-mini","multiplier":"0x","maxInputTokens":127805,"maxOutputTokens":64000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":true,"terminal":true,"notebook":true,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Standard Models","order":0},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}}} diff --git a/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/5ac4e9c8-7d0c-4bfc-99ab-f2186f80b5f1.jsonl b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/5ac4e9c8-7d0c-4bfc-99ab-f2186f80b5f1.jsonl new file mode 100644 index 0000000..7a1f422 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/5ac4e9c8-7d0c-4bfc-99ab-f2186f80b5f1.jsonl @@ -0,0 +1 @@ +{"kind":0,"v":{"version":3,"creationDate":1774939316365,"customTitle":"Connection error diagnosis request","initialLocation":"panel","responderUsername":"GitHub Copilot","sessionId":"5ac4e9c8-7d0c-4bfc-99ab-f2186f80b5f1","hasPendingEdits":false,"requests":[{"requestId":"request_c7830057-d8e9-42c9-aa1b-c368110ebef9","timestamp":1774939316703,"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"modelId":"copilot/gpt-5.3-codex","responseId":"response_dcbb0c20-6bcb-41c7-adbd-63716ac3d0b6","modelState":{"value":0},"contentReferences":[],"codeCitations":[],"timeSpentWaiting":1774939316703,"response":[{"kind":"mcpServersStarting","didStartServerIds":[]}],"message":{"text":"@remote-ssh diagnose my last connection error","parts":[{"range":{"start":0,"endExclusive":11},"editorRange":{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":12},"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"kind":"agent"},{"range":{"start":11,"endExclusive":45},"editorRange":{"startLineNumber":1,"startColumn":12,"endLineNumber":1,"endColumn":46},"text":" diagnose my last connection error","kind":"text"}]},"variableData":{"variables":[]}}],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"ask","kind":"ask"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"@remote-ssh ","selections":[{"startLineNumber":1,"startColumn":13,"endLineNumber":1,"endColumn":13,"selectionStartLineNumber":1,"selectionStartColumn":13,"positionLineNumber":1,"positionColumn":13}],"contrib":{"chatDynamicVariableModel":[]}}}} diff --git a/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/774290be-a51d-442b-9810-d3d5a353019f.jsonl b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/774290be-a51d-442b-9810-d3d5a353019f.jsonl new file mode 100644 index 0000000..bde94d1 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/774290be-a51d-442b-9810-d3d5a353019f.jsonl @@ -0,0 +1,13 @@ +{"kind":0,"v":{"version":3,"creationDate":1774941619995,"customTitle":"Connection error diagnosis request","initialLocation":"panel","responderUsername":"GitHub Copilot","sessionId":"774290be-a51d-442b-9810-d3d5a353019f","hasPendingEdits":false,"requests":[{"requestId":"request_1d9a9457-0f2d-4b72-9e27-8c60518aaf47","timestamp":1774941620318,"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"modelId":"copilot/gpt-5.3-codex","responseId":"response_2b480d92-2c63-46ee-9a22-c99cb6342e8d","result":{"timings":{"firstProgress":30255,"totalElapsed":33402},"metadata":{"toolCallsMetadata":{"toolCallResults":{},"toolCallRounds":[]}}},"responseMarkdownInfo":[{"suggestionId":"sgt-0b1ba470-d41e-4a9d-a591-684f6d459f0b"},{"suggestionId":"sgt-a8e8025f-5aec-4d00-b2f7-8ccc45de8270"}],"followups":[],"modelState":{"value":1,"completedAt":1774941655216},"contentReferences":[],"codeCitations":[],"timeSpentWaiting":1774941620319,"response":[{"kind":"mcpServersStarting","didStartServerIds":[]},{"value":"### Diagnosis\n\nYour last failure is **not** an SSH reachability/auth problem. \nThe SSH connection succeeds, then the remote bootstrap fails and times out.\n\nKey evidence from your log:\n\n- `Connection established.`\n- `Authenticated ... using \"none\".`\n- then: `unknown option: --fish`\n- then: `Resolver error: ... timed out`\n\nSo the likely root cause is a **remote shell/config command** being invoked with an invalid `--fish` argument (often from remote shell init or SSH host config), which prevents the VS Code server startup script from running.\n\n---\n\n### What to check first\n\n1. **Inspect `~/.ssh/config` host entry** (`line 14` in your log) for `atlas.tail...` \n Remove/fix anything that injects shell commands/options (especially `RemoteCommand`, custom wrappers, or anything passing `--fish`).\n\n2. **Test the exact SSH command outside VS Code**:\n```bash\nssh -v -T -D 46201 -o ConnectTimeout=15 atlas.tail4806cb.ts.net\n```\n\n3. **Test non-interactive remote command execution**:\n```bash\necho 'echo hello' | ssh -v -T atlas.tail4806cb.ts.net\n```\n\nIf this fails similarly, the issue is in remote shell startup/config.\n\n4. In VS Code settings, try:\n- `\"remote.SSH.useExecServer\": false`\n- `\"remote.SSH.useLocalServer\": false`\n- `\"remote.SSH.showLoginTerminal\": true`\n\nThen retry connection to reveal hidden prompts/errors.\n\n---\n\n### Why timeout happened\n\nThe extension waited for server bootstrap output, but the remote side errored (`unknown option: --fish`) before startup completed, so it ended as **Timeout**.","supportThemeIcons":false,"supportHtml":false}],"message":{"text":"@remote-ssh diagnose my last connection error","parts":[{"range":{"start":0,"endExclusive":11},"editorRange":{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":12},"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"kind":"agent"},{"range":{"start":11,"endExclusive":45},"editorRange":{"startLineNumber":1,"startColumn":12,"endLineNumber":1,"endColumn":46},"text":" diagnose my last connection error","kind":"text"}]},"variableData":{"variables":[]}}],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"ask","kind":"ask"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"@remote-ssh ","selections":[{"startLineNumber":1,"startColumn":13,"endLineNumber":1,"endColumn":13,"selectionStartLineNumber":1,"selectionStartColumn":13,"positionLineNumber":1,"positionColumn":13}],"contrib":{"chatDynamicVariableModel":[]}}}} +{"kind":1,"k":["inputState","inputText"],"v":"@remote-ssh the --fish is likf"} +{"kind":1,"k":["inputState","selections"],"v":[{"startLineNumber":1,"startColumn":31,"endLineNumber":1,"endColumn":31,"selectionStartLineNumber":1,"selectionStartColumn":31,"positionLineNumber":1,"positionColumn":31}]} +{"kind":2,"k":["requests"],"v":[{"requestId":"request_c5391d92-7f8b-481f-a32d-c5a4f81f6197","timestamp":1774941787113,"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"modelId":"copilot/gpt-5.3-codex","responseId":"response_bb6f96bf-3763-455d-8348-575cb25ee29b","modelState":{"value":0},"contentReferences":[],"codeCitations":[],"timeSpentWaiting":1774941787113,"response":[{"kind":"mcpServersStarting","didStartServerIds":[]}],"message":{"text":"@remote-ssh the --fish is likely due to both my server and current device using fish","parts":[{"range":{"start":0,"endExclusive":11},"editorRange":{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":12},"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"kind":"agent"},{"range":{"start":11,"endExclusive":84},"editorRange":{"startLineNumber":1,"startColumn":12,"endLineNumber":1,"endColumn":85},"text":" the --fish is likely due to both my server and current device using fish","kind":"text"}]},"variableData":{"variables":[]}}]} +{"kind":1,"k":["inputState","inputText"],"v":"@remote-ssh "} +{"kind":1,"k":["inputState","selections"],"v":[{"startLineNumber":1,"startColumn":13,"endLineNumber":1,"endColumn":13,"selectionStartLineNumber":1,"selectionStartColumn":13,"positionLineNumber":1,"positionColumn":13}]} +{"kind":2,"k":["requests"],"v":[{"requestId":"request_65a711dc-1b17-43d9-8d67-f10e984425d0","timestamp":1774941810602,"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"modelId":"copilot/gpt-5.3-codex","responseId":"response_ae81d980-5ba6-4a3b-8db0-3d8851429644","result":{"errorDetails":{"message":"Server error: 500","responseIsIncomplete":true,"isQuotaExceeded":false,"isRateLimited":false}},"followups":[],"modelState":{"value":3,"completedAt":1774941821867},"contentReferences":[],"codeCitations":[],"timeSpentWaiting":1774941810602,"response":[{"kind":"mcpServersStarting","didStartServerIds":[]}],"message":{"text":"@remote-ssh the --fish is likely due to both my server and current device using fish","parts":[{"range":{"start":0,"endExclusive":11},"editorRange":{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":12},"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"kind":"agent"},{"range":{"start":11,"endExclusive":84},"editorRange":{"startLineNumber":1,"startColumn":12,"endLineNumber":1,"endColumn":85},"text":" the --fish is likely due to both my server and current device using fish","kind":"text"}]},"variableData":{"variables":[]}}],"i":1} +{"kind":2,"k":["requests"],"v":[{"requestId":"request_88935538-c600-4def-9d30-3fdab4831480","timestamp":1774941869708,"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"modelId":"copilot/gpt-5.3-codex","responseId":"response_5aa510e4-5966-466e-a5c1-0dd89ffefb0b","result":{"timings":{"firstProgress":11640,"totalElapsed":15698},"metadata":{"toolCallsMetadata":{"toolCallResults":{},"toolCallRounds":[]}}},"followups":[],"modelState":{"value":1,"completedAt":1774941885481},"contentReferences":[],"codeCitations":[],"timeSpentWaiting":1774941869708,"response":[{"kind":"mcpServersStarting","didStartServerIds":[]},{"value":"Yes — **fish can be involved**, but not simply because both sides use fish.\n\nThe key issue is likely that something in your SSH path is passing a literal `--fish` argument to a command that does not support it.\n\nFrom your log:\n- SSH auth succeeds.\n- Then remote bootstrap prints `unknown option: --fish`.\n- Then it times out.\n\n### Most likely sources\n- `~/.ssh/config` host entry (line 14 in your log), especially `RemoteCommand`, `ProxyCommand`, or wrapper scripts.\n- Remote shell startup files (`~/.config/fish/config.fish`, `/etc/fish/config.fish`) running commands during non-interactive SSH sessions.\n\n### Quick checks\n1. Inspect host config:\n```ssh-config\nHost atlas.tail4806cb.ts.net\n # remove/test any RemoteCommand/ProxyCommand wrappers\n```\n\n2. Test raw SSH command outside VS Code:\n```bash\nssh -v -T atlas.tail4806cb.ts.net\n```\n\n3. Test piped command (matches VS Code bootstrap style):\n```bash\necho 'echo hello' | ssh -v -T atlas.tail4806cb.ts.net\n```\n\n4. In VS Code, try:\n- `remote.SSH.useExecServer: false`\n- `remote.SSH.useLocalServer: false`\n- `remote.SSH.showLoginTerminal: true`\n\nIf you share your `Host atlas.tail...` SSH config block, I can point to the exact problematic line.","supportThemeIcons":false,"supportHtml":false}],"message":{"text":"@remote-ssh the --fish is likely due to both my server and current device using fish","parts":[{"range":{"start":0,"endExclusive":11},"editorRange":{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":12},"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"kind":"agent"},{"range":{"start":11,"endExclusive":84},"editorRange":{"startLineNumber":1,"startColumn":12,"endLineNumber":1,"endColumn":85},"text":" the --fish is likely due to both my server and current device using fish","kind":"text"}]},"variableData":{"variables":[]}}],"i":1} +{"kind":2,"k":["requests"],"v":[{"requestId":"request_a0ca68fc-678a-4dd2-b385-17db55878ab0","timestamp":1774941961943,"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"modelId":"copilot/gpt-5.3-codex","responseId":"response_441a6a6c-22bc-461e-92e9-afc6d97f5f54","modelState":{"value":0},"contentReferences":[],"codeCitations":[],"timeSpentWaiting":1774941961944,"response":[{"kind":"mcpServersStarting","didStartServerIds":[]}],"message":{"text":"@remote-ssh you can have a look","parts":[{"range":{"start":0,"endExclusive":11},"editorRange":{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":12},"agent":{"extensionId":{"value":"ms-vscode-remote.remote-ssh","_lower":"ms-vscode-remote.remote-ssh"},"extensionVersion":"0.122.0","publisherDisplayName":"Microsoft","extensionPublisherId":"ms-vscode-remote","extensionDisplayName":"Remote - SSH","id":"remote-ssh","description":"Learn about Remote - SSH and diagnose connection issues","when":"config.remote.SSH.experimental.chat","metadata":{"isSticky":true,"themeIcon":{"id":"remote"},"hasFollowups":false},"name":"remote-ssh","fullName":"Remote - SSH","locations":["panel"],"modes":["agent","ask","edit"],"slashCommands":[],"disambiguation":[]},"kind":"agent"},{"range":{"start":11,"endExclusive":31},"editorRange":{"startLineNumber":1,"startColumn":12,"endLineNumber":1,"endColumn":32},"text":" you can have a look","kind":"text"}]},"variableData":{"variables":[]}}]} +{"kind":1,"k":["inputState","mode"],"v":{"id":"agent","kind":"agent"}} +{"kind":1,"k":["requests",2,"result"],"v":{"errorDetails":{"message":"Server error: 504","responseIsIncomplete":true,"isQuotaExceeded":false,"isRateLimited":false}}} +{"kind":1,"k":["requests",2,"followups"],"v":[]} +{"kind":1,"k":["requests",2,"modelState"],"v":{"value":3,"completedAt":1774942624649}} diff --git a/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/93153c4c-abc7-42d0-a6c8-ddaf556cfb10.jsonl b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/93153c4c-abc7-42d0-a6c8-ddaf556cfb10.jsonl new file mode 100644 index 0000000..8262b3e --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/emptyWindowChatSessions/93153c4c-abc7-42d0-a6c8-ddaf556cfb10.jsonl @@ -0,0 +1,3 @@ +{"kind":0,"v":{"version":3,"creationDate":1775014837233,"initialLocation":"panel","responderUsername":"","sessionId":"93153c4c-abc7-42d0-a6c8-ddaf556cfb10","hasPendingEdits":false,"requests":[],"pendingRequests":[]}} +{"kind":1,"k":["responderUsername"],"v":"GitHub Copilot"} +{"kind":1,"k":["inputState"],"v":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"GPT-5.3-Codex is currently experiencing degraded performance due to issues with the model upstream provider. We are actively working to resolve the issue. In the meantime, you might want to use Auto or a different model. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"statusIcon":{"id":"warning"},"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}} diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilot.cli.workspaceSessions.c5981b2c-1e8f-4ec9-99a0-923d51711de8.json b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilot.cli.workspaceSessions.c5981b2c-1e8f-4ec9-99a0-923d51711de8.json new file mode 100644 index 0000000..c376bd9 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilot.cli.workspaceSessions.c5981b2c-1e8f-4ec9-99a0-923d51711de8.json @@ -0,0 +1 @@ +11cce4da-1080-468f-b2b6-e1415670b45b \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/copilotCLIShim.js b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/copilotCLIShim.js new file mode 100644 index 0000000..d789400 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/copilotCLIShim.js @@ -0,0 +1,4 @@ +"use strict";var Ce=Object.create;var te=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var be=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty;var we=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of xe(t))!ve.call(e,r)&&r!==n&&te(e,r,{get:()=>t[r],enumerable:!(i=Ae(t,r))||i.enumerable});return e};var Le=(e,t,n)=>(n=e!=null?Ce(be(e)):{},we(t||!e||!e.__esModule?te(n,"default",{value:e,enumerable:!0}):n,e));var V=require("child_process"),ue=Le(require("readline"));function B(){return globalThis._VSCODE_NLS_LANGUAGE}var Je=B()==="pseudo"||typeof document<"u"&&document.location&&typeof document.location.hash=="string"&&document.location.hash.indexOf("pseudo=true")>=0;var R="en",G=!1,H=!1,M=!1,Ie=!1,Se=!1,re=!1,ye=!1,$e=!1,_e=!1,Ee=!1,z,F=R,ne=R,Ne,L,P=globalThis,A;typeof P.vscode<"u"&&typeof P.vscode.process<"u"?A=P.vscode.process:typeof process<"u"&&typeof process?.versions?.node=="string"&&(A=process);var ie=typeof A?.versions?.electron=="string",ke=ie&&A?.type==="renderer";if(typeof A=="object"){G=A.platform==="win32",H=A.platform==="darwin",M=A.platform==="linux",Ie=M&&!!A.env.SNAP&&!!A.env.SNAP_REVISION,ye=ie,_e=!!A.env.CI||!!A.env.BUILD_ARTIFACTSTAGINGDIRECTORY||!!A.env.GITHUB_WORKSPACE,z=R,F=R;let e=A.env.VSCODE_NLS_CONFIG;if(e)try{let t=JSON.parse(e);z=t.userLocale,ne=t.osLocale,F=t.resolvedLanguage||R,Ne=t.languagePack?.translationsConfigFile}catch{}Se=!0}else typeof navigator=="object"&&!ke?(L=navigator.userAgent,G=L.indexOf("Windows")>=0,H=L.indexOf("Macintosh")>=0,$e=(L.indexOf("Macintosh")>=0||L.indexOf("iPad")>=0||L.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,M=L.indexOf("Linux")>=0,Ee=L?.indexOf("Mobi")>=0,re=!0,F=B()||R,z=navigator.language.toLowerCase(),ne=z):console.error("Unable to resolve platform.");var Q=0;H?Q=1:G?Q=3:M&&(Q=2);var oe=G,se=H;var Re=re&&typeof P.importScripts=="function",Xe=Re?P.origin:void 0;var w=L,$=F,Oe;(i=>{function e(){return $}i.value=e;function t(){return $.length===2?$==="en":$.length>=3?$[0]==="e"&&$[1]==="n"&&$[2]==="-":!1}i.isDefaultVariant=t;function n(){return $==="en"}i.isDefault=n})(Oe||={});var We=typeof P.postMessage=="function"&&!P.importScripts,et=(()=>{if(We){let e=[];P.addEventListener("message",n=>{if(n.data&&n.data.vscodeScheduleAsyncWork)for(let i=0,r=e.length;i{let i=++t;e.push({id:i,callback:n}),P.postMessage({vscodeScheduleAsyncWork:i},"*")}}return e=>setTimeout(e)})();var Te=!!(w&&w.indexOf("Chrome")>=0),tt=!!(w&&w.indexOf("Firefox")>=0),nt=!!(!Te&&w&&w.indexOf("Safari")>=0),rt=!!(w&&w.indexOf("Edg/")>=0),it=!!(w&&w.indexOf("Android")>=0);var E,Y=globalThis.vscode;if(typeof Y<"u"&&typeof Y.process<"u"){let e=Y.process;E={get platform(){return e.platform},get arch(){return e.arch},get env(){return e.env},cwd(){return e.cwd()}}}else typeof process<"u"&&typeof process?.versions?.node=="string"?E={get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd(){return process.env.VSCODE_CWD||process.cwd()}}:E={get platform(){return oe?"win32":se?"darwin":"linux"},get arch(){},get env(){return{}},cwd(){return"/"}};var W=E.cwd,le=E.env,ae=E.platform,at=E.arch;var ze=65,Me=97,Fe=90,Ge=122,N=46,C=47,x=92,I=58,He=63,U=class extends Error{constructor(t,n,i){let r;typeof n=="string"&&n.indexOf("not ")===0?(r="must not be",n=n.replace(/^not /,"")):r="must be";let s=t.indexOf(".")!==-1?"property":"argument",l=`The "${t}" ${s} ${r} of type ${n}`;l+=`. Received type ${typeof i}`,super(l),this.code="ERR_INVALID_ARG_TYPE"}};function Ue(e,t){if(e===null||typeof e!="object")throw new U(t,"Object",e)}function h(e,t){if(typeof e!="string")throw new U(t,"string",e)}var b=ae==="win32";function d(e){return e===C||e===x}function q(e){return e===C}function S(e){return e>=ze&&e<=Fe||e>=Me&&e<=Ge}function j(e,t,n,i){let r="",s=0,l=-1,o=0,a=0;for(let c=0;c<=e.length;++c){if(c2){let g=r.lastIndexOf(n);g===-1?(r="",s=0):(r=r.slice(0,g),s=r.length-1-r.lastIndexOf(n)),l=c,o=0;continue}else if(r.length!==0){r="",s=0,l=c,o=0;continue}}t&&(r+=r.length>0?`${n}..`:"..",s=2)}else r.length>0?r+=`${n}${e.slice(l+1,c)}`:r=e.slice(l+1,c),s=c-l-1;l=c,o=0}else a===N&&o!==-1?++o:o=-1}return r}function je(e){return e?`${e[0]==="."?"":"."}${e}`:""}function ce(e,t){Ue(t,"pathObject");let n=t.dir||t.root,i=t.base||`${t.name||""}${je(t.ext)}`;return n?n===t.root?`${n}${i}`:`${n}${e}${i}`:i}var m={resolve(...e){let t="",n="",i=!1;for(let r=e.length-1;r>=-1;r--){let s;if(r>=0){if(s=e[r],h(s,`paths[${r}]`),s.length===0)continue}else t.length===0?s=W():(s=le[`=${t}`]||W(),(s===void 0||s.slice(0,2).toLowerCase()!==t.toLowerCase()&&s.charCodeAt(2)===x)&&(s=`${t}\\`));let l=s.length,o=0,a="",c=!1,g=s.charCodeAt(0);if(l===1)d(g)&&(o=1,c=!0);else if(d(g))if(c=!0,d(s.charCodeAt(1))){let f=2,u=f;for(;f2&&d(s.charCodeAt(2))&&(c=!0,o=3));if(a.length>0)if(t.length>0){if(a.toLowerCase()!==t.toLowerCase())continue}else t=a;if(i){if(t.length>0)break}else if(n=`${s.slice(o)}\\${n}`,i=c,c&&t.length>0)break}return n=j(n,!i,"\\",d),i?`${t}\\${n}`:`${t}${n}`||"."},normalize(e){h(e,"path");let t=e.length;if(t===0)return".";let n=0,i,r=!1,s=e.charCodeAt(0);if(t===1)return q(s)?"\\":e;if(d(s))if(r=!0,d(e.charCodeAt(1))){let o=2,a=o;for(;o2&&d(e.charCodeAt(2))&&(r=!0,n=3));let l=n0&&d(e.charCodeAt(t-1))&&(l+="\\"),!r&&i===void 0&&e.includes(":")){if(l.length>=2&&S(l.charCodeAt(0))&&l.charCodeAt(1)===I)return`.\\${l}`;let o=e.indexOf(":");do if(o===t-1||d(e.charCodeAt(o+1)))return`.\\${l}`;while((o=e.indexOf(":",o+1))!==-1)}return i===void 0?r?`\\${l}`:l:r?`${i}\\${l}`:`${i}${l}`},isAbsolute(e){h(e,"path");let t=e.length;if(t===0)return!1;let n=e.charCodeAt(0);return d(n)||t>2&&S(n)&&e.charCodeAt(1)===I&&d(e.charCodeAt(2))},join(...e){if(e.length===0)return".";let t,n;for(let s=0;s0&&(t===void 0?t=n=l:t+=`\\${l}`)}if(t===void 0)return".";let i=!0,r=0;if(typeof n=="string"&&d(n.charCodeAt(0))){++r;let s=n.length;s>1&&d(n.charCodeAt(1))&&(++r,s>2&&(d(n.charCodeAt(2))?++r:i=!1))}if(i){for(;r=2&&(t=`\\${t.slice(r)}`)}return m.normalize(t)},relative(e,t){if(h(e,"from"),h(t,"to"),e===t)return"";let n=m.resolve(e),i=m.resolve(t);if(n===i||(e=n.toLowerCase(),t=i.toLowerCase(),e===t))return"";if(n.length!==e.length||i.length!==t.length){let y=n.split("\\"),_=i.split("\\");y[y.length-1]===""&&y.pop(),_[_.length-1]===""&&_.pop();let O=y.length,K=_.length,D=OD?_.slice(v).join("\\"):O>D?"..\\".repeat(O-1-v)+"..":"":"..\\".repeat(O-v)+_.slice(v).join("\\")}let r=0;for(;rr&&e.charCodeAt(s-1)===x;)s--;let l=s-r,o=0;for(;oo&&t.charCodeAt(a-1)===x;)a--;let c=a-o,g=lg){if(t.charCodeAt(o+u)===x)return i.slice(o+u+1);if(u===2)return i.slice(o+u)}l>g&&(e.charCodeAt(r+u)===x?f=u:u===2&&(f=3)),f===-1&&(f=0)}let k="";for(u=r+f+1;u<=s;++u)(u===s||e.charCodeAt(u)===x)&&(k+=k.length===0?"..":"\\..");return o+=f,k.length>0?`${k}${i.slice(o,a)}`:(i.charCodeAt(o)===x&&++o,i.slice(o,a))},toNamespacedPath(e){if(typeof e!="string"||e.length===0)return e;let t=m.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===x){if(t.charCodeAt(1)===x){let n=t.charCodeAt(2);if(n!==He&&n!==N)return`\\\\?\\UNC\\${t.slice(2)}`}}else if(S(t.charCodeAt(0))&&t.charCodeAt(1)===I&&t.charCodeAt(2)===x)return`\\\\?\\${t}`;return t},dirname(e){h(e,"path");let t=e.length;if(t===0)return".";let n=-1,i=0,r=e.charCodeAt(0);if(t===1)return d(r)?e:".";if(d(r)){if(n=i=1,d(e.charCodeAt(1))){let o=2,a=o;for(;o2&&d(e.charCodeAt(2))?3:2,i=n);let s=-1,l=!0;for(let o=t-1;o>=i;--o)if(d(e.charCodeAt(o))){if(!l){s=o;break}}else l=!1;if(s===-1){if(n===-1)return".";s=n}return e.slice(0,s)},basename(e,t){t!==void 0&&h(t,"suffix"),h(e,"path");let n=0,i=-1,r=!0,s;if(e.length>=2&&S(e.charCodeAt(0))&&e.charCodeAt(1)===I&&(n=2),t!==void 0&&t.length>0&&t.length<=e.length){if(t===e)return"";let l=t.length-1,o=-1;for(s=e.length-1;s>=n;--s){let a=e.charCodeAt(s);if(d(a)){if(!r){n=s+1;break}}else o===-1&&(r=!1,o=s+1),l>=0&&(a===t.charCodeAt(l)?--l===-1&&(i=s):(l=-1,i=o))}return n===i?i=o:i===-1&&(i=e.length),e.slice(n,i)}for(s=e.length-1;s>=n;--s)if(d(e.charCodeAt(s))){if(!r){n=s+1;break}}else i===-1&&(r=!1,i=s+1);return i===-1?"":e.slice(n,i)},extname(e){h(e,"path");let t=0,n=-1,i=0,r=-1,s=!0,l=0;e.length>=2&&e.charCodeAt(1)===I&&S(e.charCodeAt(0))&&(t=i=2);for(let o=e.length-1;o>=t;--o){let a=e.charCodeAt(o);if(d(a)){if(!s){i=o+1;break}continue}r===-1&&(s=!1,r=o+1),a===N?n===-1?n=o:l!==1&&(l=1):n!==-1&&(l=-1)}return n===-1||r===-1||l===0||l===1&&n===r-1&&n===i+1?"":e.slice(n,r)},format:ce.bind(null,"\\"),parse(e){h(e,"path");let t={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return t;let n=e.length,i=0,r=e.charCodeAt(0);if(n===1)return d(r)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(d(r)){if(i=1,d(e.charCodeAt(1))){let f=2,u=f;for(;f0&&(t.root=e.slice(0,i));let s=-1,l=i,o=-1,a=!0,c=e.length-1,g=0;for(;c>=i;--c){if(r=e.charCodeAt(c),d(r)){if(!a){l=c+1;break}continue}o===-1&&(a=!1,o=c+1),r===N?s===-1?s=c:g!==1&&(g=1):s!==-1&&(g=-1)}return o!==-1&&(s===-1||g===0||g===1&&s===o-1&&s===l+1?t.base=t.name=e.slice(l,o):(t.name=e.slice(l,s),t.base=e.slice(l,o),t.ext=e.slice(s,o))),l>0&&l!==i?t.dir=e.slice(0,l-1):t.dir=t.root,t},sep:"\\",delimiter:";",win32:null,posix:null},Ve=(()=>{if(b){let e=/\\/g;return()=>{let t=W().replace(e,"/");return t.slice(t.indexOf("/"))}}return()=>W()})(),p={resolve(...e){let t="",n=!1;for(let i=e.length-1;i>=0&&!n;i--){let r=e[i];h(r,`paths[${i}]`),r.length!==0&&(t=`${r}/${t}`,n=r.charCodeAt(0)===C)}if(!n){let i=Ve();t=`${i}/${t}`,n=i.charCodeAt(0)===C}return t=j(t,!n,"/",q),n?`/${t}`:t.length>0?t:"."},normalize(e){if(h(e,"path"),e.length===0)return".";let t=e.charCodeAt(0)===C,n=e.charCodeAt(e.length-1)===C;return e=j(e,!t,"/",q),e.length===0?t?"/":n?"./":".":(n&&(e+="/"),t?`/${e}`:e)},isAbsolute(e){return h(e,"path"),e.length>0&&e.charCodeAt(0)===C},join(...e){if(e.length===0)return".";let t=[];for(let n=0;n0&&t.push(i)}return t.length===0?".":p.normalize(t.join("/"))},relative(e,t){if(h(e,"from"),h(t,"to"),e===t||(e=p.resolve(e),t=p.resolve(t),e===t))return"";let n=1,i=e.length,r=i-n,s=1,l=t.length-s,o=ro){if(t.charCodeAt(s+c)===C)return t.slice(s+c+1);if(c===0)return t.slice(s+c)}else r>o&&(e.charCodeAt(n+c)===C?a=c:c===0&&(a=0));let g="";for(c=n+a+1;c<=i;++c)(c===i||e.charCodeAt(c)===C)&&(g+=g.length===0?"..":"/..");return`${g}${t.slice(s+a)}`},toNamespacedPath(e){return e},dirname(e){if(h(e,"path"),e.length===0)return".";let t=e.charCodeAt(0)===C,n=-1,i=!0;for(let r=e.length-1;r>=1;--r)if(e.charCodeAt(r)===C){if(!i){n=r;break}}else i=!1;return n===-1?t?"/":".":t&&n===1?"//":e.slice(0,n)},basename(e,t){t!==void 0&&h(t,"suffix"),h(e,"path");let n=0,i=-1,r=!0,s;if(t!==void 0&&t.length>0&&t.length<=e.length){if(t===e)return"";let l=t.length-1,o=-1;for(s=e.length-1;s>=0;--s){let a=e.charCodeAt(s);if(a===C){if(!r){n=s+1;break}}else o===-1&&(r=!1,o=s+1),l>=0&&(a===t.charCodeAt(l)?--l===-1&&(i=s):(l=-1,i=o))}return n===i?i=o:i===-1&&(i=e.length),e.slice(n,i)}for(s=e.length-1;s>=0;--s)if(e.charCodeAt(s)===C){if(!r){n=s+1;break}}else i===-1&&(r=!1,i=s+1);return i===-1?"":e.slice(n,i)},extname(e){h(e,"path");let t=-1,n=0,i=-1,r=!0,s=0;for(let l=e.length-1;l>=0;--l){let o=e[l];if(o==="/"){if(!r){n=l+1;break}continue}i===-1&&(r=!1,i=l+1),o==="."?t===-1?t=l:s!==1&&(s=1):t!==-1&&(s=-1)}return t===-1||i===-1||s===0||s===1&&t===i-1&&t===n+1?"":e.slice(t,i)},format:ce.bind(null,"/"),parse(e){h(e,"path");let t={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return t;let n=e.charCodeAt(0)===C,i;n?(t.root="/",i=1):i=0;let r=-1,s=0,l=-1,o=!0,a=e.length-1,c=0;for(;a>=i;--a){let g=e.charCodeAt(a);if(g===C){if(!o){s=a+1;break}continue}l===-1&&(o=!1,l=a+1),g===N?r===-1?r=a:c!==1&&(c=1):r!==-1&&(c=-1)}if(l!==-1){let g=s===0&&n?1:s;r===-1||c===0||c===1&&r===l-1&&r===s+1?t.base=t.name=e.slice(g,l):(t.name=e.slice(g,r),t.base=e.slice(g,l),t.ext=e.slice(r,l))}return s>0?t.dir=e.slice(0,s-1):n&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};p.win32=m.win32=m;p.posix=m.posix=p;var ct=b?m.normalize:p.normalize,ft=b?m.isAbsolute:p.isAbsolute,dt=b?m.join:p.join,ut=b?m.resolve:p.resolve,gt=b?m.relative:p.relative,ht=b?m.dirname:p.dirname,mt=b?m.basename:p.basename,pt=b?m.extname:p.extname,Ct=b?m.format:p.format,At=b?m.parse:p.parse,xt=b?m.toNamespacedPath:p.toNamespacedPath,bt=b?m.sep:p.sep,Z=b?m.delimiter:p.delimiter;var fe="0.0.394",J="@github/copilot",X={...process.env,PATH:(process.env.PATH||"").replaceAll(`${__dirname}${Z}`,"").replaceAll(`${Z}${__dirname}`,"")},ge=ue.createInterface({input:process.stdin,output:process.stdout});function Be(e){process.stdout.write(e+` +`)}function T(e){process.stderr.write(e+` +`)}function he(e){return new Promise(t=>{ge.question(`${e} ['y/N'] `,n=>{t(n.toLowerCase()[0]==="y")})})}function de(e){let t=e.replace(/^v/,"").split(".");return[0,1,2].map(n=>parseInt((t[n]||"0").replace(/[^0-9].*$/,""),10)||0)}function Qe(e,t){let n=de(e),i=de(t);for(let r=0;r<3;r++){if(n[r]>i[r])return!0;if(n[r]{ge.question(`${e}`,()=>{t()})}),process.exit(0)}(async function(){let t=await pe();t?.version&&await qe(t.version),t||(T("Error: Could not locate Copilot CLI after update."),await ee(`Try manually reinstalling with: npm install -g ${J} (https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli)`));let n=process.argv.slice(2);n[0]==="--clear"&&(console.clear(),n.shift()),(0,V.spawnSync)("copilot",n,{stdio:"inherit",env:X}),process.exit(0)})(); +//!!! DO NOT modify, this file was COPIED from 'microsoft/vscode' diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/copilotCLIShim.ps1 b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/copilotCLIShim.ps1 new file mode 100644 index 0000000..04d2c03 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/copilotCLIShim.ps1 @@ -0,0 +1,219 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +#--------------------------------------------------------------------------------------------- + +# Windows GitHub Copilot CLI bootstrapper +# +# Responsibilities: +# 1. Locate the real Copilot CLI binary (avoid recursion if this file shadows it). +# 2. Offer to install if missing (npm -g @github/copilot). +# 3. Enforce minimum version (>= REQUIRED_VERSION) with interactive update. +# 4. Execute the real binary with original arguments and exit with its status. +# +# NOTE: This file intentionally keeps logic self‑contained (no external deps) so it can be dropped into PATH directly. + +# Minimum required Copilot CLI version +$RequiredVersion = "0.0.394" +$PackageName = "@github/copilot" + +function Invoke-NpmGlobalCommand { + param( + [Parameter(Mandatory = $true)][ValidateSet('install', 'update')][string]$Command, + [Parameter(Mandatory = $true)][string]$Package + ) + + $npmArgs = @($Command, '-g', $Package) + + $npmCmd = Get-Command npm.cmd -ErrorAction SilentlyContinue + if ($npmCmd) { + & npm.cmd @npmArgs + } else { + & npm @npmArgs + } +} + +function Find-RealCopilot { + # Find the real copilot binary, avoiding this script if it's in PATH + $CurrentScript = $MyInvocation.PSCommandPath + if (-not $CurrentScript) { $CurrentScript = $PSCommandPath } + $CopilotPath = (Get-Command copilot -ErrorAction SilentlyContinue).Source + + # Check if the copilot command would point to this script + $CurrentScriptResolved = if ($CurrentScript) { (Resolve-Path $CurrentScript -ErrorAction SilentlyContinue).Path } else { $null } + $CopilotPathResolved = if ($CopilotPath) { (Resolve-Path $CopilotPath -ErrorAction SilentlyContinue).Path } else { $null } + + if ($CurrentScript -eq $CopilotPath -or (Split-Path $CurrentScript -Parent) -eq (Split-Path $CopilotPath -Parent) -or ($CurrentScriptResolved -and $CopilotPathResolved -and $CurrentScriptResolved -eq $CopilotPathResolved)) { + # The copilot in PATH is this script, find the real one by temporarily removing this script's directory from PATH + $ScriptDir = Split-Path $CurrentScript -Parent + $OldPath = $env:PATH + # Use appropriate path delimiter based on OS + $PathDelimiter = if ($IsWindows -or $env:OS -eq "Windows_NT") { ';' } else { ':' } + $env:PATH = ($env:PATH -split $PathDelimiter | Where-Object { $_ -ne $ScriptDir }) -join $PathDelimiter + $RealCopilot = (Get-Command copilot -ErrorAction SilentlyContinue).Source + $env:PATH = $OldPath + + if ($RealCopilot -and (Test-Path $RealCopilot)) { + return $RealCopilot + } else { + return $null + } + } else { + # The copilot in PATH is different from this script, use it + if ($CopilotPath -and (Test-Path $CopilotPath)) { + return $CopilotPath + } else { + return $null + } + } +} + +function Test-VersionCompatibility { + param([string]$Version) + $cleanInstalled = $Version -replace '^v','' + $cleanRequired = $RequiredVersion -replace '^v','' + try { + $installedVer = [version]$cleanInstalled + $requiredVer = [version]$cleanRequired + } catch { + return $false + } + return ($installedVer -ge $requiredVer) +} + +function Test-AndLaunchCopilot { + param([string[]]$Arguments) + + # Check if real copilot command exists + $realCopilot = Find-RealCopilot + if (-not $realCopilot) { + Write-Host "Cannot find GitHub Copilot CLI (https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli)" + $answer = Read-Host "Install GitHub Copilot CLI? (y/N)" + if ($answer -eq "y" -or $answer -eq "Y") { + try { + Invoke-NpmGlobalCommand -Command 'install' -Package $PackageName + if ($LASTEXITCODE -eq 0) { + Test-AndLaunchCopilot $Arguments + return + } else { + Read-Host "Installation failed. Please check your npm configuration and try again (or run: npm install -g @github/copilot)." + return + } + } catch { + Read-Host "Installation failed. Please check your npm configuration and try again (or run: npm install -g @github/copilot)." + return + } + } else { + exit 0 + } + } + + # Check version compatibility + $realCopilot = Find-RealCopilot + if (-not $realCopilot) { + Write-Host "Error: Unable to find copilot binary." + $answer = Read-Host "Would you like to reinstall GitHub Copilot CLI? (y/N)" + if ($answer -eq "y" -or $answer -eq "Y") { + Write-Host "Reinstalling GitHub Copilot CLI..." + try { + Invoke-NpmGlobalCommand -Command 'install' -Package $PackageName + if ($LASTEXITCODE -eq 0) { + Test-AndLaunchCopilot $Arguments + return + } else { + Read-Host "Reinstallation failed. Please check your npm configuration and try again (or run: npm install -g @github/copilot)." + return + } + } catch { + Read-Host "Reinstallation failed. Please check your npm configuration and try again (or run: npm install -g @github/copilot)." + return + } + } else { + exit 0 + } + } + + try { + $versionOutput = & $realCopilot --version 2>$null + if ($LASTEXITCODE -ne 0) { + throw "Command failed" + } + } catch { + # Write-Host "Error: Unable to check copilot version." + $answer = Read-Host "Would you like to reinstall GitHub Copilot CLI? (y/N)" + if ($answer -eq "y" -or $answer -eq "Y") { + try { + Invoke-NpmGlobalCommand -Command 'install' -Package $PackageName + if ($LASTEXITCODE -eq 0) { + Test-AndLaunchCopilot $Arguments + return + } else { + Read-Host "Reinstallation failed. Please check your npm configuration and try again (or run: npm install -g @github/copilot)." + return + } + } catch { + Read-Host "Reinstallation failed. Please check your npm configuration and try again (or run: npm install -g @github/copilot)." + return + } + } else { + exit 0 + } + } + + # Extract version number from output (search through all lines) + $version = $null + if ($versionOutput) { + foreach ($line in ($versionOutput -split "`n")) { + $trimmedLine = $line.Trim() + if ($trimmedLine -match '[0-9]+\.[0-9]+\.[0-9]+') { + $version = $matches[0] + break + } + } + } + + # Command succeeded - assume CLI is installed even if we can't parse the version + + # Only check version compatibility if we have a valid version + if ($version -and -not (Test-VersionCompatibility $version)) { + Write-Host "GitHub Copilot CLI version $version is not compatible." + Write-Host "Version $RequiredVersion or later is required." + $answer = Read-Host "Update GitHub Copilot CLI? (y/N)" + if ($answer -eq "y" -or $answer -eq "Y") { + try { + Invoke-NpmGlobalCommand -Command 'update' -Package $PackageName + if ($LASTEXITCODE -eq 0) { + Test-AndLaunchCopilot $Arguments + return + } else { + Read-Host "Update failed. Please check your npm configuration and try again (or run: npm update -g @github/copilot)." + return + } + } catch { + Read-Host "Update failed. Please check your npm configuration and try again (or run: npm update -g @github/copilot)." + return + } + } else { + exit 0 + } + } + + # All checks passed, execute the real copilot binary + $realCopilot = Find-RealCopilot + if ($realCopilot -and (Test-Path $realCopilot)) { + & $realCopilot @Arguments + } else { + Write-Host "Error: Could not find the real GitHub Copilot CLI binary" + Read-Host "Please ensure it's properly installed with: npm install -g @github/copilot" + return + } +} + +# Start the check and launch process +$finalArgs = $args +# Handle --clear argument +if ($args.Length -gt 0 -and $args[0] -eq '--clear') { + Clear-Host + $finalArgs = $args[1..($args.Length - 1)] +} + +Test-AndLaunchCopilot $finalArgs \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/executable_copilot b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/executable_copilot new file mode 100644 index 0000000..80c1cc2 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/github.copilot-chat/copilotCli/executable_copilot @@ -0,0 +1,3 @@ +#!/bin/sh +unset NODE_OPTIONS +ELECTRON_RUN_AS_NODE=1 "/usr/share/code/code" "/home/breadway/.config/Code/User/globalStorage/github.copilot-chat/copilotCli/copilotCLIShim.js" "$@" \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/debugCommand/copilotDebugCommand.js b/dot_config/private_Code/User/globalStorage/github.copilot-chat/debugCommand/copilotDebugCommand.js new file mode 100644 index 0000000..a8e58e1 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/github.copilot-chat/debugCommand/copilotDebugCommand.js @@ -0,0 +1,6 @@ +"use strict";var be=Object.create;var ee=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var ye=Object.getPrototypeOf,Pe=Object.prototype.hasOwnProperty;var Se=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of we(t))!Pe.call(e,o)&&o!==n&&ee(e,o,{get:()=>t[o],enumerable:!(i=ve(t,o))||i.enumerable});return e};var Le=(e,t,n)=>(n=e!=null?be(ye(e)):{},Se(t||!e||!e.__esModule?ee(n,"default",{value:e,enumerable:!0}):n,e));var me=require("crypto"),xe=require("node:net"),Ce=require("os"),K=Le(require("readline"));function Y(){return globalThis._VSCODE_NLS_LANGUAGE}var tt=Y()==="pseudo"||typeof document<"u"&&document.location&&typeof document.location.hash=="string"&&document.location.hash.indexOf("pseudo=true")>=0;var k="en",U=!1,H=!1,z=!1,Ee=!1,_e=!1,ne=!1,$e=!1,Ne=!1,Re=!1,Oe=!1,T,j=k,te=k,ke,y,P=globalThis,C;typeof P.vscode<"u"&&typeof P.vscode.process<"u"?C=P.vscode.process:typeof process<"u"&&typeof process?.versions?.node=="string"&&(C=process);var re=typeof C?.versions?.electron=="string",Me=re&&C?.type==="renderer";if(typeof C=="object"){U=C.platform==="win32",H=C.platform==="darwin",z=C.platform==="linux",Ee=z&&!!C.env.SNAP&&!!C.env.SNAP_REVISION,$e=re,Re=!!C.env.CI||!!C.env.BUILD_ARTIFACTSTAGINGDIRECTORY||!!C.env.GITHUB_WORKSPACE,T=k,j=k;let e=C.env.VSCODE_NLS_CONFIG;if(e)try{let t=JSON.parse(e);T=t.userLocale,te=t.osLocale,j=t.resolvedLanguage||k,ke=t.languagePack?.translationsConfigFile}catch{}_e=!0}else typeof navigator=="object"&&!Me?(y=navigator.userAgent,U=y.indexOf("Windows")>=0,H=y.indexOf("Macintosh")>=0,Ne=(y.indexOf("Macintosh")>=0||y.indexOf("iPad")>=0||y.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,z=y.indexOf("Linux")>=0,Oe=y?.indexOf("Mobi")>=0,ne=!0,j=Y()||k,T=navigator.language.toLowerCase(),te=T):console.error("Unable to resolve platform.");var Q=0;H?Q=1:U?Q=3:z&&(Q=2);var se=U,ie=H;var De=ne&&typeof P.importScripts=="function",nt=De?P.origin:void 0;var w=y,_=j,We;(i=>{function e(){return _}i.value=e;function t(){return _.length===2?_==="en":_.length>=3?_[0]==="e"&&_[1]==="n"&&_[2]==="-":!1}i.isDefaultVariant=t;function n(){return _==="en"}i.isDefault=n})(We||={});var Fe=typeof P.postMessage=="function"&&!P.importScripts,rt=(()=>{if(Fe){let e=[];P.addEventListener("message",n=>{if(n.data&&n.data.vscodeScheduleAsyncWork)for(let i=0,o=e.length;i{let i=++t;e.push({id:i,callback:n}),P.postMessage({vscodeScheduleAsyncWork:i},"*")}}return e=>setTimeout(e)})();var Te=!!(w&&w.indexOf("Chrome")>=0),st=!!(w&&w.indexOf("Firefox")>=0),it=!!(!Te&&w&&w.indexOf("Safari")>=0),ot=!!(w&&w.indexOf("Edg/")>=0),lt=!!(w&&w.indexOf("Android")>=0);var N,Z=globalThis.vscode;if(typeof Z<"u"&&typeof Z.process<"u"){let e=Z.process;N={get platform(){return e.platform},get arch(){return e.arch},get env(){return e.env},cwd(){return e.cwd()}}}else typeof process<"u"&&typeof process?.versions?.node=="string"?N={get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd(){return process.env.VSCODE_CWD||process.cwd()}}:N={get platform(){return se?"win32":ie?"darwin":"linux"},get arch(){},get env(){return{}},cwd(){return"/"}};var D=N.cwd,oe=N.env,le=N.platform,dt=N.arch;var je=65,Ue=97,He=90,Ve=122,R=46,x=47,A=92,S=58,Ge=63,V=class extends Error{constructor(t,n,i){let o;typeof n=="string"&&n.indexOf("not ")===0?(o="must not be",n=n.replace(/^not /,"")):o="must be";let r=t.indexOf(".")!==-1?"property":"argument",l=`The "${t}" ${r} ${o} of type ${n}`;l+=`. Received type ${typeof i}`,super(l),this.code="ERR_INVALID_ARG_TYPE"}};function qe(e,t){if(e===null||typeof e!="object")throw new V(t,"Object",e)}function h(e,t){if(typeof e!="string")throw new V(t,"string",e)}var b=le==="win32";function d(e){return e===x||e===A}function X(e){return e===x}function L(e){return e>=je&&e<=He||e>=Ue&&e<=Ve}function G(e,t,n,i){let o="",r=0,l=-1,s=0,a=0;for(let c=0;c<=e.length;++c){if(c2){let u=o.lastIndexOf(n);u===-1?(o="",r=0):(o=o.slice(0,u),r=o.length-1-o.lastIndexOf(n)),l=c,s=0;continue}else if(o.length!==0){o="",r=0,l=c,s=0;continue}}t&&(o+=o.length>0?`${n}..`:"..",r=2)}else o.length>0?o+=`${n}${e.slice(l+1,c)}`:o=e.slice(l+1,c),r=c-l-1;l=c,s=0}else a===R&&s!==-1?++s:s=-1}return o}function Be(e){return e?`${e[0]==="."?"":"."}${e}`:""}function ae(e,t){qe(t,"pathObject");let n=t.dir||t.root,i=t.base||`${t.name||""}${Be(t.ext)}`;return n?n===t.root?`${n}${i}`:`${n}${e}${i}`:i}var p={resolve(...e){let t="",n="",i=!1;for(let o=e.length-1;o>=-1;o--){let r;if(o>=0){if(r=e[o],h(r,`paths[${o}]`),r.length===0)continue}else t.length===0?r=D():(r=oe[`=${t}`]||D(),(r===void 0||r.slice(0,2).toLowerCase()!==t.toLowerCase()&&r.charCodeAt(2)===A)&&(r=`${t}\\`));let l=r.length,s=0,a="",c=!1,u=r.charCodeAt(0);if(l===1)d(u)&&(s=1,c=!0);else if(d(u))if(c=!0,d(r.charCodeAt(1))){let f=2,g=f;for(;f2&&d(r.charCodeAt(2))&&(c=!0,s=3));if(a.length>0)if(t.length>0){if(a.toLowerCase()!==t.toLowerCase())continue}else t=a;if(i){if(t.length>0)break}else if(n=`${r.slice(s)}\\${n}`,i=c,c&&t.length>0)break}return n=G(n,!i,"\\",d),i?`${t}\\${n}`:`${t}${n}`||"."},normalize(e){h(e,"path");let t=e.length;if(t===0)return".";let n=0,i,o=!1,r=e.charCodeAt(0);if(t===1)return X(r)?"\\":e;if(d(r))if(o=!0,d(e.charCodeAt(1))){let s=2,a=s;for(;s2&&d(e.charCodeAt(2))&&(o=!0,n=3));let l=n0&&d(e.charCodeAt(t-1))&&(l+="\\"),!o&&i===void 0&&e.includes(":")){if(l.length>=2&&L(l.charCodeAt(0))&&l.charCodeAt(1)===S)return`.\\${l}`;let s=e.indexOf(":");do if(s===t-1||d(e.charCodeAt(s+1)))return`.\\${l}`;while((s=e.indexOf(":",s+1))!==-1)}return i===void 0?o?`\\${l}`:l:o?`${i}\\${l}`:`${i}${l}`},isAbsolute(e){h(e,"path");let t=e.length;if(t===0)return!1;let n=e.charCodeAt(0);return d(n)||t>2&&L(n)&&e.charCodeAt(1)===S&&d(e.charCodeAt(2))},join(...e){if(e.length===0)return".";let t,n;for(let r=0;r0&&(t===void 0?t=n=l:t+=`\\${l}`)}if(t===void 0)return".";let i=!0,o=0;if(typeof n=="string"&&d(n.charCodeAt(0))){++o;let r=n.length;r>1&&d(n.charCodeAt(1))&&(++o,r>2&&(d(n.charCodeAt(2))?++o:i=!1))}if(i){for(;o=2&&(t=`\\${t.slice(o)}`)}return p.normalize(t)},relative(e,t){if(h(e,"from"),h(t,"to"),e===t)return"";let n=p.resolve(e),i=p.resolve(t);if(n===i||(e=n.toLowerCase(),t=i.toLowerCase(),e===t))return"";if(n.length!==e.length||i.length!==t.length){let E=n.split("\\"),$=i.split("\\");E[E.length-1]===""&&E.pop(),$[$.length-1]===""&&$.pop();let M=E.length,J=$.length,F=MF?$.slice(v).join("\\"):M>F?"..\\".repeat(M-1-v)+"..":"":"..\\".repeat(M-v)+$.slice(v).join("\\")}let o=0;for(;oo&&e.charCodeAt(r-1)===A;)r--;let l=r-o,s=0;for(;ss&&t.charCodeAt(a-1)===A;)a--;let c=a-s,u=lu){if(t.charCodeAt(s+g)===A)return i.slice(s+g+1);if(g===2)return i.slice(s+g)}l>u&&(e.charCodeAt(o+g)===A?f=g:g===2&&(f=3)),f===-1&&(f=0)}let O="";for(g=o+f+1;g<=r;++g)(g===r||e.charCodeAt(g)===A)&&(O+=O.length===0?"..":"\\..");return s+=f,O.length>0?`${O}${i.slice(s,a)}`:(i.charCodeAt(s)===A&&++s,i.slice(s,a))},toNamespacedPath(e){if(typeof e!="string"||e.length===0)return e;let t=p.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===A){if(t.charCodeAt(1)===A){let n=t.charCodeAt(2);if(n!==Ge&&n!==R)return`\\\\?\\UNC\\${t.slice(2)}`}}else if(L(t.charCodeAt(0))&&t.charCodeAt(1)===S&&t.charCodeAt(2)===A)return`\\\\?\\${t}`;return t},dirname(e){h(e,"path");let t=e.length;if(t===0)return".";let n=-1,i=0,o=e.charCodeAt(0);if(t===1)return d(o)?e:".";if(d(o)){if(n=i=1,d(e.charCodeAt(1))){let s=2,a=s;for(;s2&&d(e.charCodeAt(2))?3:2,i=n);let r=-1,l=!0;for(let s=t-1;s>=i;--s)if(d(e.charCodeAt(s))){if(!l){r=s;break}}else l=!1;if(r===-1){if(n===-1)return".";r=n}return e.slice(0,r)},basename(e,t){t!==void 0&&h(t,"suffix"),h(e,"path");let n=0,i=-1,o=!0,r;if(e.length>=2&&L(e.charCodeAt(0))&&e.charCodeAt(1)===S&&(n=2),t!==void 0&&t.length>0&&t.length<=e.length){if(t===e)return"";let l=t.length-1,s=-1;for(r=e.length-1;r>=n;--r){let a=e.charCodeAt(r);if(d(a)){if(!o){n=r+1;break}}else s===-1&&(o=!1,s=r+1),l>=0&&(a===t.charCodeAt(l)?--l===-1&&(i=r):(l=-1,i=s))}return n===i?i=s:i===-1&&(i=e.length),e.slice(n,i)}for(r=e.length-1;r>=n;--r)if(d(e.charCodeAt(r))){if(!o){n=r+1;break}}else i===-1&&(o=!1,i=r+1);return i===-1?"":e.slice(n,i)},extname(e){h(e,"path");let t=0,n=-1,i=0,o=-1,r=!0,l=0;e.length>=2&&e.charCodeAt(1)===S&&L(e.charCodeAt(0))&&(t=i=2);for(let s=e.length-1;s>=t;--s){let a=e.charCodeAt(s);if(d(a)){if(!r){i=s+1;break}continue}o===-1&&(r=!1,o=s+1),a===R?n===-1?n=s:l!==1&&(l=1):n!==-1&&(l=-1)}return n===-1||o===-1||l===0||l===1&&n===o-1&&n===i+1?"":e.slice(n,o)},format:ae.bind(null,"\\"),parse(e){h(e,"path");let t={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return t;let n=e.length,i=0,o=e.charCodeAt(0);if(n===1)return d(o)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(d(o)){if(i=1,d(e.charCodeAt(1))){let f=2,g=f;for(;f0&&(t.root=e.slice(0,i));let r=-1,l=i,s=-1,a=!0,c=e.length-1,u=0;for(;c>=i;--c){if(o=e.charCodeAt(c),d(o)){if(!a){l=c+1;break}continue}s===-1&&(a=!1,s=c+1),o===R?r===-1?r=c:u!==1&&(u=1):r!==-1&&(u=-1)}return s!==-1&&(r===-1||u===0||u===1&&r===s-1&&r===l+1?t.base=t.name=e.slice(l,s):(t.name=e.slice(l,r),t.base=e.slice(l,s),t.ext=e.slice(r,s))),l>0&&l!==i?t.dir=e.slice(0,l-1):t.dir=t.root,t},sep:"\\",delimiter:";",win32:null,posix:null},Ke=(()=>{if(b){let e=/\\/g;return()=>{let t=D().replace(e,"/");return t.slice(t.indexOf("/"))}}return()=>D()})(),m={resolve(...e){let t="",n=!1;for(let i=e.length-1;i>=0&&!n;i--){let o=e[i];h(o,`paths[${i}]`),o.length!==0&&(t=`${o}/${t}`,n=o.charCodeAt(0)===x)}if(!n){let i=Ke();t=`${i}/${t}`,n=i.charCodeAt(0)===x}return t=G(t,!n,"/",X),n?`/${t}`:t.length>0?t:"."},normalize(e){if(h(e,"path"),e.length===0)return".";let t=e.charCodeAt(0)===x,n=e.charCodeAt(e.length-1)===x;return e=G(e,!t,"/",X),e.length===0?t?"/":n?"./":".":(n&&(e+="/"),t?`/${e}`:e)},isAbsolute(e){return h(e,"path"),e.length>0&&e.charCodeAt(0)===x},join(...e){if(e.length===0)return".";let t=[];for(let n=0;n0&&t.push(i)}return t.length===0?".":m.normalize(t.join("/"))},relative(e,t){if(h(e,"from"),h(t,"to"),e===t||(e=m.resolve(e),t=m.resolve(t),e===t))return"";let n=1,i=e.length,o=i-n,r=1,l=t.length-r,s=os){if(t.charCodeAt(r+c)===x)return t.slice(r+c+1);if(c===0)return t.slice(r+c)}else o>s&&(e.charCodeAt(n+c)===x?a=c:c===0&&(a=0));let u="";for(c=n+a+1;c<=i;++c)(c===i||e.charCodeAt(c)===x)&&(u+=u.length===0?"..":"/..");return`${u}${t.slice(r+a)}`},toNamespacedPath(e){return e},dirname(e){if(h(e,"path"),e.length===0)return".";let t=e.charCodeAt(0)===x,n=-1,i=!0;for(let o=e.length-1;o>=1;--o)if(e.charCodeAt(o)===x){if(!i){n=o;break}}else i=!1;return n===-1?t?"/":".":t&&n===1?"//":e.slice(0,n)},basename(e,t){t!==void 0&&h(t,"suffix"),h(e,"path");let n=0,i=-1,o=!0,r;if(t!==void 0&&t.length>0&&t.length<=e.length){if(t===e)return"";let l=t.length-1,s=-1;for(r=e.length-1;r>=0;--r){let a=e.charCodeAt(r);if(a===x){if(!o){n=r+1;break}}else s===-1&&(o=!1,s=r+1),l>=0&&(a===t.charCodeAt(l)?--l===-1&&(i=r):(l=-1,i=s))}return n===i?i=s:i===-1&&(i=e.length),e.slice(n,i)}for(r=e.length-1;r>=0;--r)if(e.charCodeAt(r)===x){if(!o){n=r+1;break}}else i===-1&&(o=!1,i=r+1);return i===-1?"":e.slice(n,i)},extname(e){h(e,"path");let t=-1,n=0,i=-1,o=!0,r=0;for(let l=e.length-1;l>=0;--l){let s=e[l];if(s==="/"){if(!o){n=l+1;break}continue}i===-1&&(o=!1,i=l+1),s==="."?t===-1?t=l:r!==1&&(r=1):t!==-1&&(r=-1)}return t===-1||i===-1||r===0||r===1&&t===i-1&&t===n+1?"":e.slice(t,i)},format:ae.bind(null,"/"),parse(e){h(e,"path");let t={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return t;let n=e.charCodeAt(0)===x,i;n?(t.root="/",i=1):i=0;let o=-1,r=0,l=-1,s=!0,a=e.length-1,c=0;for(;a>=i;--a){let u=e.charCodeAt(a);if(u===x){if(!s){r=a+1;break}continue}l===-1&&(s=!1,l=a+1),u===R?o===-1?o=a:c!==1&&(c=1):o!==-1&&(c=-1)}if(l!==-1){let u=r===0&&n?1:r;o===-1||c===0||c===1&&o===l-1&&o===r+1?t.base=t.name=e.slice(u,l):(t.name=e.slice(u,o),t.base=e.slice(u,l),t.ext=e.slice(o,l))}return r>0?t.dir=e.slice(0,r-1):n&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};m.win32=p.win32=p;m.posix=p.posix=m;var gt=b?p.normalize:m.normalize,ut=b?p.isAbsolute:m.isAbsolute,ce=b?p.join:m.join,ht=b?p.resolve:m.resolve,pt=b?p.relative:m.relative,mt=b?p.dirname:m.dirname,xt=b?p.basename:m.basename,Ct=b?p.extname:m.extname,At=b?p.format:m.format,bt=b?p.parse:m.parse,vt=b?p.toNamespacedPath:m.toNamespacedPath,wt=b?p.sep:m.sep,yt=b?p.delimiter:m.delimiter;var fe=require("child_process"),de=(e,t)=>{let n,i=!1,o=[t];if(e){let[r,...l]=e.split(" ");n=r,o=[...l,t]}else switch(process.platform){case"win32":n="cmd",i=!0,o=["/c","start",'""',`"${t}"`];break;case"darwin":n="open";break;case"linux":default:n="xdg-open";break}return new Promise((r,l)=>{let s="",a=(0,fe.spawn)(n,o,{stdio:"pipe",shell:i,env:{...process.env,ELECTRON_RUN_AS_NODE:void 0}});a.stdout.setEncoding("utf8").on("data",c=>s+=c),a.stderr.setEncoding("utf8").on("data",c=>s+=c),a.on("error",l),a.on("exit",c=>{c!==0?l(new Error(`Failed to open: ${s}`)):r()})})};var ge=require("stream"),q=class extends ge.Transform{constructor(n){super();this.prefix=[];this.splitSuffix=Buffer.alloc(0);if(typeof n=="string"&&n.length===1)this.splitter=n.charCodeAt(0);else if(typeof n=="number")this.splitter=n;else throw new Error("not implemented here")}_transform(n,i,o){let r=0;for(;rthis.handleData(n)),this.ended=new Promise(n=>this.stream.on("end",()=>{this.didEnd=!0,n()}))}registerMethod(t,n){this.methods.set(t,n)}async callMethod(t,n){let i=this.idCounter++,o={id:i,method:t,params:n},r=new Promise((l,s)=>{this.pendingRequests.set(i,{resolve:l,reject:s})});return this.stream.write(JSON.stringify(o)+ue),Promise.race([r,this.ended])}dispose(){this.didEnd=!0,this.stream.end();for(let{reject:t}of this.pendingRequests.values())t(new Error("RPC connection closed"));this.pendingRequests.clear()}async handleData(t){let n=JSON.parse(t.toString());if("method"in n){let{id:i,method:o,params:r}=n,l={id:i};try{if(this.methods.has(o)){let s=await this.methods.get(o)(r);l.result=s}else throw new Error(`Method not found: ${o}`)}catch(s){l.error={code:-1,message:String(s.stack||s)}}this.didEnd||this.stream.write(JSON.stringify(l)+ue)}else{let{id:i,result:o,error:r}=n,l=this.pendingRequests.get(i);this.pendingRequests.delete(i),r!==void 0?l?.reject(new Error(r.message)):l?.resolve(o)}}};var[$t,Nt,Ye,Qe,...W]=process.argv;var I={"--print":!1,"--no-cache":!1,"--help":!1,"--save":!1,"--once":!1};for(;W.length&&I.hasOwnProperty(W[0]);)I[W.shift()]=!0;(!W.length||I["--help"])&&(console.log(`Usage: copilot-debug [${Object.keys(I).join("] [")}] `),console.log(""),console.log("Options:"),console.log(" --print Print the generated configuration without running it"),console.log(" --no-cache Generate a new configuration without checking the cache."),console.log(" --save Save the configuration to your launch.json."),console.log(" --once Exit after the debug session ends."),console.log(" --help Print this help."),process.exit(I["--help"]?0:1));var he=K.createInterface({input:process.stdin,output:process.stdout});K.emitKeypressEvents(process.stdin);process.stdin.setRawMode(!0);var Ze=(0,xe.createServer)(e=>{clearInterval(Xe);let t=new B(e);t.registerMethod("output",({category:r,output:l})=>(r==="stderr"?process.stderr.write(l):r==="stdout"?process.stdout.write(l):r!=="telemetry"&&l&&console.log(l),Promise.resolve())),t.registerMethod("exit",async({code:r,error:l})=>{l&&!n&&console.error(l),await Promise.all([new Promise(s=>process.stdout.end(s)),new Promise(s=>process.stderr.end(s))]).then(()=>process.exit(r))});let n=!1;function i(){n?process.exit(1):(n=!0,e.end(()=>{process.exit(1)}))}process.on("SIGINT",i),process.stdin.on("keypress",(r,l)=>{(l.sequence===""||l.name==="c"&&(l.ctrl||l.meta))&&i()}),t.registerMethod("question",r=>new Promise(l=>{if(r.singleKey){console.log(r.message);let s=a=>{a&&(process.stdout.write("\b"),process.stdin.off("keypress",s),l(a===` +`||a==="\r"?"Enter":a?.toUpperCase()||""))};process.stdin.on("keypress",s)}else he.question(`${r.message} [${r.defaultValue}] `,l)})),t.registerMethod("confirm",r=>new Promise(l=>{he.question(`${r.message} [${r.defaultValue?"Y/n":"y/N"}] `,s=>{l(s===""?r.defaultValue:s.toLowerCase()[0]==="y")})}));let o={cwd:process.cwd(),args:W,forceNew:I["--no-cache"],printOnly:I["--print"],save:I["--save"],once:I["--once"]};t.callMethod("start",o)}),Xe=setInterval(()=>{console.log("> Waiting for VS Code to connect...")},2e3),Ae=`copilot-dbg.${process.pid}-${(0,me.randomBytes)(4).toString("hex")}.sock`,pe=ce(process.platform==="win32"?"\\\\.\\pipe\\":(0,Ce.tmpdir)(),Ae);Ze.listen(pe,()=>{de(Qe,Ye+(process.platform==="win32"?`/${Ae}`:pe)).then(()=>{},e=>{console.error("Failed to open the activation URI:",e),process.exit(1)})}); +//!!! DO NOT modify, this file was COPIED from 'microsoft/vscode' diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/debugCommand/executable_copilot-debug b/dot_config/private_Code/User/globalStorage/github.copilot-chat/debugCommand/executable_copilot-debug new file mode 100644 index 0000000..e29633e --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/github.copilot-chat/debugCommand/executable_copilot-debug @@ -0,0 +1,3 @@ +#!/bin/sh +unset NODE_OPTIONS +ELECTRON_RUN_AS_NODE=1 "/usr/share/code/code" "/home/breadway/.config/Code/User/globalStorage/github.copilot-chat/debugCommand/copilotDebugCommand.js" "vscode://github.copilot-chat" "" "$@" \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/plan-agent/Plan.agent.md b/dot_config/private_Code/User/globalStorage/github.copilot-chat/plan-agent/Plan.agent.md new file mode 100644 index 0000000..ee2a1f3 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/github.copilot-chat/plan-agent/Plan.agent.md @@ -0,0 +1,108 @@ +--- +name: Plan +description: Researches and outlines multi-step plans +argument-hint: Outline the goal or problem to research +target: vscode +disable-model-invocation: true +tools: ['agent', 'search', 'read', 'execute/getTerminalOutput', 'execute/testFailure', 'web', 'github/issue_read', 'github.vscode-pull-request-github/issue_fetch', 'github.vscode-pull-request-github/activePullRequest', 'vscode/askQuestions'] +agents: [] +handoffs: + - label: Start Implementation + agent: agent + prompt: 'Start implementation' + send: true + - label: Open in Editor + agent: agent + prompt: '#createFile the plan as is into an untitled file (`untitled:plan-${camelCaseName}.prompt.md` without frontmatter) for further refinement.' + send: true + showContinueOn: false +--- +You are a PLANNING AGENT, pairing with the user to create a detailed, actionable plan. + +Your job: research the codebase → clarify with the user → produce a comprehensive plan. This iterative approach catches edge cases and non-obvious requirements BEFORE implementation begins. + +Your SOLE responsibility is planning. NEVER start implementation. + + +- STOP if you consider running file editing tools — plans are for others to execute +- Use #tool:vscode/askQuestions freely to clarify requirements — don't make large assumptions +- Present a well-researched plan with loose ends tied BEFORE implementation + + + +Cycle through these phases based on user input. This is iterative, not linear. + +## 1. Discovery + +Run #tool:agent/runSubagent to gather context and discover potential blockers or ambiguities. + +MANDATORY: Instruct the subagent to work autonomously following . + + +- Research the user's task comprehensively using read-only tools. +- Start with high-level code searches before reading specific files. +- Pay special attention to instructions and skills made available by the developers to understand best practices and intended usage. +- Identify missing information, conflicting requirements, or technical unknowns. +- DO NOT draft a full plan yet — focus on discovery and feasibility. + + +After the subagent returns, analyze the results. + +## 2. Alignment + +If research reveals major ambiguities or if you need to validate assumptions: +- Use #tool:vscode/askQuestions to clarify intent with the user. +- Surface discovered technical constraints or alternative approaches. +- If answers significantly change the scope, loop back to **Discovery**. + +## 3. Design + +Once context is clear, draft a comprehensive implementation plan per . + +The plan should reflect: +- Critical file paths discovered during research. +- Code patterns and conventions found. +- A step-by-step implementation approach. + +Present the plan as a **DRAFT** for review. + +## 4. Refinement + +On user input after showing a draft: +- Changes requested → revise and present updated plan. +- Questions asked → clarify, or use #tool:vscode/askQuestions for follow-ups. +- Alternatives wanted → loop back to **Discovery** with new subagent. +- Approval given → acknowledge, the user can now use handoff buttons. + +The final plan should: +- Be scannable yet detailed enough to execute. +- Include critical file paths and symbol references. +- Reference decisions from the discussion. +- Leave no ambiguity. + +Keep iterating until explicit approval or handoff. + + + +```markdown +## Plan: {Title (2-10 words)} + +{TL;DR — what, how, why. Reference key decisions. (30-200 words, depending on complexity)} + +**Steps** +1. {Action with [file](path) links and `symbol` refs} +2. {Next step} +3. {…} + +**Verification** +{How to test: commands, tests, manual checks} + +**Decisions** (if applicable) +- {Decision: chose X over Y} +``` + +Rules: +- NO code blocks — describe changes, link to files/symbols +- NO questions at the end — ask during workflow via #tool:vscode/askQuestions +- Keep scannable + \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/github.copilot-chat/toolEmbeddingsCache.bin b/dot_config/private_Code/User/globalStorage/github.copilot-chat/toolEmbeddingsCache.bin new file mode 100644 index 0000000..594682f Binary files /dev/null and b/dot_config/private_Code/User/globalStorage/github.copilot-chat/toolEmbeddingsCache.bin differ diff --git a/dot_config/private_Code/User/globalStorage/ms-python.python/pythonrc.py b/dot_config/private_Code/User/globalStorage/ms-python.python/pythonrc.py new file mode 100644 index 0000000..3042ffb --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/ms-python.python/pythonrc.py @@ -0,0 +1,88 @@ +import platform +import sys + +if sys.platform != "win32": + import readline + +original_ps1 = ">>> " +is_wsl = "microsoft-standard-WSL" in platform.release() + + +class REPLHooks: + def __init__(self): + self.global_exit = None + self.failure_flag = False + self.original_excepthook = sys.excepthook + self.original_displayhook = sys.displayhook + sys.excepthook = self.my_excepthook + sys.displayhook = self.my_displayhook + + def my_displayhook(self, value): + if value is None: + self.failure_flag = False + + self.original_displayhook(value) + + def my_excepthook(self, type_, value, traceback): + self.global_exit = value + self.failure_flag = True + + self.original_excepthook(type_, value, traceback) + + +def get_last_command(): + # Get the last history item + last_command = "" + if sys.platform != "win32": + last_command = readline.get_history_item(readline.get_current_history_length()) + + return last_command + + +class PS1: + hooks = REPLHooks() + sys.excepthook = hooks.my_excepthook + sys.displayhook = hooks.my_displayhook + + # str will get called for every prompt with exit code to show success/failure + def __str__(self): + exit_code = int(bool(self.hooks.failure_flag)) + self.hooks.failure_flag = False + # Guide following official VS Code doc for shell integration sequence: + result = "" + # For non-windows allow recent_command history. + if sys.platform != "win32": + result = "{soh}{command_executed}{command_line}{command_finished}{prompt_started}{stx}{prompt}{soh}{command_start}{stx}".format( + soh="\001", + stx="\002", + command_executed="\x1b]633;C\x07", + command_line="\x1b]633;E;" + str(get_last_command()) + "\x07", + command_finished="\x1b]633;D;" + str(exit_code) + "\x07", + prompt_started="\x1b]633;A\x07", + prompt=original_ps1, + command_start="\x1b]633;B\x07", + ) + else: + result = "{command_finished}{prompt_started}{prompt}{command_start}{command_executed}".format( + command_finished="\x1b]633;D;" + str(exit_code) + "\x07", + prompt_started="\x1b]633;A\x07", + prompt=original_ps1, + command_start="\x1b]633;B\x07", + command_executed="\x1b]633;C\x07", + ) + + # result = f"{chr(27)}]633;D;{exit_code}{chr(7)}{chr(27)}]633;A{chr(7)}{original_ps1}{chr(27)}]633;B{chr(7)}{chr(27)}]633;C{chr(7)}" + + return result + + def __repr__(self): + return "" + + +if sys.platform != "win32" and (not is_wsl): + sys.ps1 = PS1() + +if sys.platform == "darwin": + print("Cmd click to launch VS Code Native REPL") +else: + print("Ctrl click to launch VS Code Native REPL") diff --git a/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/31f2aee4e71d21fb.4.json b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/31f2aee4e71d21fb.4.json new file mode 100644 index 0000000..717a988 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/31f2aee4e71d21fb.4.json @@ -0,0 +1,21 @@ +{ + "environment": { + "executable": "/usr/bin/python3", + "prefix": "/usr", + "version": "3.14.3.final.0", + "is64Bit": true, + "symlinks": [ + "/usr/bin/python3" + ] + }, + "symlinks": [ + [ + "/usr/bin/python3", + { + "secs_since_epoch": 1774483200, + "nanos_since_epoch": 0 + }, + null + ] + ] +} \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/767d51c1340bd893.4.json b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/767d51c1340bd893.4.json new file mode 100644 index 0000000..631add2 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/767d51c1340bd893.4.json @@ -0,0 +1,39 @@ +{ + "environment": { + "executable": "/usr/bin/python", + "prefix": "/usr", + "version": "3.14.3.final.0", + "is64Bit": true, + "symlinks": [ + "/usr/bin/python", + "/usr/bin/python3", + "/usr/bin/python3.14" + ] + }, + "symlinks": [ + [ + "/usr/bin/python", + { + "secs_since_epoch": 1774483200, + "nanos_since_epoch": 0 + }, + null + ], + [ + "/usr/bin/python3", + { + "secs_since_epoch": 1774483200, + "nanos_since_epoch": 0 + }, + null + ], + [ + "/usr/bin/python3.14", + { + "secs_since_epoch": 1774483200, + "nanos_since_epoch": 0 + }, + null + ] + ] +} \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/c03c93ec8cafc307.4.json b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/c03c93ec8cafc307.4.json new file mode 100644 index 0000000..42f6f7b --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/c03c93ec8cafc307.4.json @@ -0,0 +1,21 @@ +{ + "environment": { + "executable": "/usr/bin/python3.14", + "prefix": "/usr", + "version": "3.14.3.final.0", + "is64Bit": true, + "symlinks": [ + "/usr/bin/python3.14" + ] + }, + "symlinks": [ + [ + "/usr/bin/python3.14", + { + "secs_since_epoch": 1774483200, + "nanos_since_epoch": 0 + }, + null + ] + ] +} \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/ca3ed784184f1b3b.4.json b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/ca3ed784184f1b3b.4.json new file mode 100644 index 0000000..0729549 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/ca3ed784184f1b3b.4.json @@ -0,0 +1,21 @@ +{ + "environment": { + "executable": "/usr/bin/python3.11", + "prefix": "/usr", + "version": "3.11.15.final.0", + "is64Bit": true, + "symlinks": [ + "/usr/bin/python3.11" + ] + }, + "symlinks": [ + [ + "/usr/bin/python3.11", + { + "secs_since_epoch": 1774483200, + "nanos_since_epoch": 0 + }, + null + ] + ] +} \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/f0d7a494a3f77623.4.json b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/f0d7a494a3f77623.4.json new file mode 100644 index 0000000..2d20741 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/ms-python.vscode-python-envs/pythonLocator/f0d7a494a3f77623.4.json @@ -0,0 +1,21 @@ +{ + "environment": { + "executable": "/usr/bin/python3.12", + "prefix": "/usr", + "version": "3.12.13.final.0", + "is64Bit": true, + "symlinks": [ + "/usr/bin/python3.12" + ] + }, + "symlinks": [ + [ + "/usr/bin/python3.12", + { + "secs_since_epoch": 1774483200, + "nanos_since_epoch": 0 + }, + null + ] + ] +} \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/state.vscdb b/dot_config/private_Code/User/globalStorage/state.vscdb new file mode 100644 index 0000000..de695e1 Binary files /dev/null and b/dot_config/private_Code/User/globalStorage/state.vscdb differ diff --git a/dot_config/private_Code/User/globalStorage/state.vscdb.backup b/dot_config/private_Code/User/globalStorage/state.vscdb.backup new file mode 100644 index 0000000..887dc10 Binary files /dev/null and b/dot_config/private_Code/User/globalStorage/state.vscdb.backup differ diff --git a/dot_config/private_Code/User/globalStorage/storage.json b/dot_config/private_Code/User/globalStorage/storage.json new file mode 100644 index 0000000..ad5f4b1 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/storage.json @@ -0,0 +1,93 @@ +{ + "telemetry.sqmId": "", + "telemetry.machineId": "e94c72ff0387061b6a6c65df3c28c9219c0abbe46893e7ee6b1a47da0ef61c91", + "telemetry.devDeviceId": "c4aa5a03-588b-44b5-88b4-1a481f4bf3ee", + "backupWorkspaces": { + "workspaces": [], + "folders": [], + "emptyWindows": [ + { + "backupFolder": "1775815287792" + } + ] + }, + "windowControlHeight": 35, + "profileAssociations": { + "workspaces": { + "file:///home/breadway/Documents/Year%2010/Year%2010/Psychology": "__default__profile__", + "file:///home/breadway/Documents/Hazard%20Pay": "__default__profile__", + "file:///home/breadway/Documents/Laser%20Tag": "__default__profile__", + "vscode-remote://ssh-remote%2Batlas.tail4806cb.ts.net/home/riley": "__default__profile__" + }, + "emptyWindows": { + "1775815287792": "__default__profile__" + } + }, + "theme": "vs-dark", + "themeBackground": "#1f1f1f", + "windowSplash": { + "zoomLevel": 0, + "baseTheme": "vs-dark", + "colorInfo": { + "foreground": "#cccccc", + "background": "#1f1f1f", + "editorBackground": "#1f1f1f", + "titleBarBackground": "#181818", + "titleBarBorder": "#2b2b2b", + "activityBarBackground": "#181818", + "activityBarBorder": "#2b2b2b", + "sideBarBackground": "#181818", + "sideBarBorder": "#2b2b2b", + "statusBarBackground": "#181818", + "statusBarBorder": "#2b2b2b", + "statusBarNoFolderBackground": "#1f1f1f" + }, + "layoutInfo": { + "sideBarSide": "left", + "editorPartMinWidth": 220, + "titleBarHeight": 35, + "activityBarWidth": 48, + "sideBarWidth": 300, + "auxiliaryBarWidth": 0, + "statusBarHeight": 22, + "windowBorder": false + } + }, + "windowsState": { + "lastActiveWindow": { + "backupPath": "/home/breadway/.config/Code/Backups/1775815287792", + "uiState": { + "mode": 0, + "x": 0, + "y": 0, + "width": 1200, + "height": 800 + } + }, + "openedWindows": [] + }, + "windowSplashWorkspaceOverride": { + "layoutInfo": { + "sideBarWidth": 300, + "auxiliaryBarWidth": 300, + "workspaces": { + "e387457d3a4ae35149094541b5b1bc98": { + "sideBarVisible": true, + "auxiliaryBarVisible": true + }, + "d58507d32a163bf14f1020a325e9617c": { + "sideBarVisible": true, + "auxiliaryBarVisible": true + }, + "9781d15abb972bcb41fa234c3afe65ff": { + "sideBarVisible": true, + "auxiliaryBarVisible": true + }, + "c3bfe6a4e3ea522f0530724fa39111f1": { + "sideBarVisible": true, + "auxiliaryBarVisible": true + } + } + } + } +} \ No newline at end of file diff --git a/dot_config/private_Code/User/globalStorage/tailscale.vscode-tailscale/config.json b/dot_config/private_Code/User/globalStorage/tailscale.vscode-tailscale/config.json new file mode 100644 index 0000000..e0a66b6 --- /dev/null +++ b/dot_config/private_Code/User/globalStorage/tailscale.vscode-tailscale/config.json @@ -0,0 +1,9 @@ +{ + "hosts": { + "atlas.tail4806cb.ts.net": { + "persistToSSHConfig": true, + "differentUserFromSSHConfig": false, + "user": "riley" + } + } +} \ No newline at end of file diff --git a/dot_config/private_Code/User/settings.json b/dot_config/private_Code/User/settings.json new file mode 100644 index 0000000..2f58918 --- /dev/null +++ b/dot_config/private_Code/User/settings.json @@ -0,0 +1,3 @@ +{ + "explorer.confirmDelete": false +} \ No newline at end of file diff --git a/dot_config/private_Code/User/workspaceStorage/1775815287792/state.vscdb b/dot_config/private_Code/User/workspaceStorage/1775815287792/state.vscdb new file mode 100644 index 0000000..b2a2ae2 Binary files /dev/null and b/dot_config/private_Code/User/workspaceStorage/1775815287792/state.vscdb differ diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/8b91d7a6-ae77-42bc-b66f-8d95a086715a.jsonl b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/8b91d7a6-ae77-42bc-b66f-8d95a086715a.jsonl new file mode 100644 index 0000000..570ced9 --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/8b91d7a6-ae77-42bc-b66f-8d95a086715a.jsonl @@ -0,0 +1 @@ +{"kind":0,"v":{"version":3,"creationDate":1774600123963,"initialLocation":"panel","responderUsername":"","sessionId":"8b91d7a6-ae77-42bc-b66f-8d95a086715a","hasPendingEdits":false,"requests":[],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/c7465b2a-7199-40ce-9951-b6795d0a3a84.jsonl b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/c7465b2a-7199-40ce-9951-b6795d0a3a84.jsonl new file mode 100644 index 0000000..d1378d9 --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/c7465b2a-7199-40ce-9951-b6795d0a3a84.jsonl @@ -0,0 +1 @@ +{"kind":0,"v":{"version":3,"creationDate":1774365051893,"initialLocation":"panel","responderUsername":"GitHub Copilot","sessionId":"c7465b2a-7199-40ce-9951-b6795d0a3a84","hasPendingEdits":false,"requests":[],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/dc74fbcd-b41d-47af-90f7-d0a978ef802b.jsonl b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/dc74fbcd-b41d-47af-90f7-d0a978ef802b.jsonl new file mode 100644 index 0000000..40cac90 --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/dc74fbcd-b41d-47af-90f7-d0a978ef802b.jsonl @@ -0,0 +1 @@ +{"kind":0,"v":{"version":3,"creationDate":1774939152252,"initialLocation":"panel","responderUsername":"GitHub Copilot","sessionId":"dc74fbcd-b41d-47af-90f7-d0a978ef802b","hasPendingEdits":false,"requests":[],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/eab52d46-dfac-4e20-a099-6b67cabfb460.jsonl b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/eab52d46-dfac-4e20-a099-6b67cabfb460.jsonl new file mode 100644 index 0000000..44bd5c1 --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/chatSessions/eab52d46-dfac-4e20-a099-6b67cabfb460.jsonl @@ -0,0 +1,2 @@ +{"kind":0,"v":{"version":3,"creationDate":1774600218109,"initialLocation":"panel","responderUsername":"","sessionId":"eab52d46-dfac-4e20-a099-6b67cabfb460","hasPendingEdits":false,"requests":[],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} +{"kind":1,"k":["responderUsername"],"v":"GitHub Copilot"} diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/ms-python.python/pythonrc.py b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/ms-python.python/pythonrc.py new file mode 100644 index 0000000..3042ffb --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/ms-python.python/pythonrc.py @@ -0,0 +1,88 @@ +import platform +import sys + +if sys.platform != "win32": + import readline + +original_ps1 = ">>> " +is_wsl = "microsoft-standard-WSL" in platform.release() + + +class REPLHooks: + def __init__(self): + self.global_exit = None + self.failure_flag = False + self.original_excepthook = sys.excepthook + self.original_displayhook = sys.displayhook + sys.excepthook = self.my_excepthook + sys.displayhook = self.my_displayhook + + def my_displayhook(self, value): + if value is None: + self.failure_flag = False + + self.original_displayhook(value) + + def my_excepthook(self, type_, value, traceback): + self.global_exit = value + self.failure_flag = True + + self.original_excepthook(type_, value, traceback) + + +def get_last_command(): + # Get the last history item + last_command = "" + if sys.platform != "win32": + last_command = readline.get_history_item(readline.get_current_history_length()) + + return last_command + + +class PS1: + hooks = REPLHooks() + sys.excepthook = hooks.my_excepthook + sys.displayhook = hooks.my_displayhook + + # str will get called for every prompt with exit code to show success/failure + def __str__(self): + exit_code = int(bool(self.hooks.failure_flag)) + self.hooks.failure_flag = False + # Guide following official VS Code doc for shell integration sequence: + result = "" + # For non-windows allow recent_command history. + if sys.platform != "win32": + result = "{soh}{command_executed}{command_line}{command_finished}{prompt_started}{stx}{prompt}{soh}{command_start}{stx}".format( + soh="\001", + stx="\002", + command_executed="\x1b]633;C\x07", + command_line="\x1b]633;E;" + str(get_last_command()) + "\x07", + command_finished="\x1b]633;D;" + str(exit_code) + "\x07", + prompt_started="\x1b]633;A\x07", + prompt=original_ps1, + command_start="\x1b]633;B\x07", + ) + else: + result = "{command_finished}{prompt_started}{prompt}{command_start}{command_executed}".format( + command_finished="\x1b]633;D;" + str(exit_code) + "\x07", + prompt_started="\x1b]633;A\x07", + prompt=original_ps1, + command_start="\x1b]633;B\x07", + command_executed="\x1b]633;C\x07", + ) + + # result = f"{chr(27)}]633;D;{exit_code}{chr(7)}{chr(27)}]633;A{chr(7)}{original_ps1}{chr(27)}]633;B{chr(7)}{chr(27)}]633;C{chr(7)}" + + return result + + def __repr__(self): + return "" + + +if sys.platform != "win32" and (not is_wsl): + sys.ps1 = PS1() + +if sys.platform == "darwin": + print("Cmd click to launch VS Code Native REPL") +else: + print("Ctrl click to launch VS Code Native REPL") diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/state.vscdb b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/state.vscdb new file mode 100644 index 0000000..94a0429 Binary files /dev/null and b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/state.vscdb differ diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/state.vscdb.backup b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/state.vscdb.backup new file mode 100644 index 0000000..94a0429 Binary files /dev/null and b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/state.vscdb.backup differ diff --git a/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/workspace.json b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/workspace.json new file mode 100644 index 0000000..b7e8741 --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/9781d15abb972bcb41fa234c3afe65ff/workspace.json @@ -0,0 +1,3 @@ +{ + "folder": "file:///home/breadway/Documents/Laser%20Tag" +} \ No newline at end of file diff --git a/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/chatSessions/2324c150-9e6f-47e2-8f4a-20af82ec2af1.jsonl b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/chatSessions/2324c150-9e6f-47e2-8f4a-20af82ec2af1.jsonl new file mode 100644 index 0000000..fe791e2 --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/chatSessions/2324c150-9e6f-47e2-8f4a-20af82ec2af1.jsonl @@ -0,0 +1 @@ +{"kind":0,"v":{"version":3,"creationDate":1774941409869,"initialLocation":"panel","responderUsername":"","sessionId":"2324c150-9e6f-47e2-8f4a-20af82ec2af1","hasPendingEdits":false,"requests":[],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} diff --git a/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/chatSessions/e8ce1288-ab4d-4fa7-83ee-d054c746a71b.jsonl b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/chatSessions/e8ce1288-ab4d-4fa7-83ee-d054c746a71b.jsonl new file mode 100644 index 0000000..156f89c --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/chatSessions/e8ce1288-ab4d-4fa7-83ee-d054c746a71b.jsonl @@ -0,0 +1 @@ +{"kind":0,"v":{"version":3,"creationDate":1774941514520,"initialLocation":"panel","responderUsername":"","sessionId":"e8ce1288-ab4d-4fa7-83ee-d054c746a71b","hasPendingEdits":false,"requests":[],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} diff --git a/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/state.vscdb b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/state.vscdb new file mode 100644 index 0000000..9581b08 Binary files /dev/null and b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/state.vscdb differ diff --git a/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/state.vscdb.backup b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/state.vscdb.backup new file mode 100644 index 0000000..9581b08 Binary files /dev/null and b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/state.vscdb.backup differ diff --git a/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/workspace.json b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/workspace.json new file mode 100644 index 0000000..8e940bb --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/c3bfe6a4e3ea522f0530724fa39111f1/workspace.json @@ -0,0 +1,3 @@ +{ + "folder": "vscode-remote://ssh-remote%2Batlas.tail4806cb.ts.net/home/riley" +} \ No newline at end of file diff --git a/dot_config/private_Code/User/workspaceStorage/d58507d32a163bf14f1020a325e9617c/chatSessions/6f526eae-b27b-49cd-9817-e72d6480f23f.jsonl b/dot_config/private_Code/User/workspaceStorage/d58507d32a163bf14f1020a325e9617c/chatSessions/6f526eae-b27b-49cd-9817-e72d6480f23f.jsonl new file mode 100644 index 0000000..7b3ea0f --- /dev/null +++ b/dot_config/private_Code/User/workspaceStorage/d58507d32a163bf14f1020a325e9617c/chatSessions/6f526eae-b27b-49cd-9817-e72d6480f23f.jsonl @@ -0,0 +1,17 @@ +{"kind":0,"v":{"version":3,"creationDate":1774364013331,"initialLocation":"panel","responderUsername":"GitHub Copilot","sessionId":"6f526eae-b27b-49cd-9817-e72d6480f23f","hasPendingEdits":false,"requests":[{"requestId":"request_621f2364-f555-48e8-b3e6-ba6b95e5d0e1","timestamp":1774364017720,"agent":{"extensionId":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"extensionVersion":"0.37.9","publisherDisplayName":"GitHub","extensionPublisherId":"GitHub","extensionDisplayName":"GitHub Copilot Chat","id":"github.copilot.editsAgent","description":"Edit files in your workspace in agent mode","when":"config.chat.agent.enabled","metadata":{"themeIcon":{"id":"tools"},"hasFollowups":false,"supportIssueReporting":false},"name":"agent","fullName":"GitHub Copilot","isDefault":true,"locations":["panel"],"modes":["agent"],"slashCommands":[],"disambiguation":[]},"modelId":"copilot/gpt-5.3-codex","responseId":"response_015041f5-9ef5-48fd-9af2-8fb9f36e5b4a","modelState":{"value":0},"contentReferences":[],"codeCitations":[],"timeSpentWaiting":1774364017720,"response":[{"kind":"mcpServersStarting","didStartServerIds":[]}],"message":{"text":"validate the codebase, documentation, and organisation of this project. be sure to familiarise yourself with the codebase first.","parts":[{"range":{"start":0,"endExclusive":128},"editorRange":{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":129},"text":"validate the codebase, documentation, and organisation of this project. be sure to familiarise yourself with the codebase first.","kind":"text"}]},"variableData":{"variables":[{"id":"vscode.prompt.instructions.root__file:///home/breadway/Documents/Hazard%20Pay/AGENTS.md","name":"prompt:AGENTS.md","value":{"$mid":1,"external":"file:///home/breadway/Documents/Hazard%20Pay/AGENTS.md","path":"/home/breadway/Documents/Hazard Pay/AGENTS.md","scheme":"file"},"kind":"promptFile","modelDescription":"Prompt instructions file","isRoot":true,"automaticallyAdded":true}]}}],"pendingRequests":[],"inputState":{"attachments":[],"mode":{"id":"agent","kind":"agent"},"selectedModel":{"identifier":"copilot/gpt-5.3-codex","metadata":{"extension":{"value":"GitHub.copilot-chat","_lower":"github.copilot-chat"},"id":"gpt-5.3-codex","vendor":"copilot","name":"GPT-5.3-Codex","family":"gpt-5.3-codex","tooltip":"OpenAI Codex model specialized for code generation, debugging, and software development tasks. Rate is counted at 1x.","version":"gpt-5.3-codex","multiplier":"1x","maxInputTokens":271805,"maxOutputTokens":128000,"auth":{"providerLabel":"GitHub Copilot Chat","accountLabel":"Breadway"},"isDefaultForLocation":{"panel":false,"terminal":false,"notebook":false,"editor":false},"isUserSelectable":true,"modelPickerCategory":{"label":"Premium Models","order":1},"capabilities":{"vision":true,"toolCalling":true,"agentMode":true}}},"inputText":"","selections":[{"startLineNumber":1,"startColumn":1,"endLineNumber":1,"endColumn":1,"selectionStartLineNumber":1,"selectionStartColumn":1,"positionLineNumber":1,"positionColumn":1}],"contrib":{"chatDynamicVariableModel":[]}}}} +{"kind":1,"k":["customTitle"],"v":"Codebase and Documentation Validation Request"} +{"kind":1,"k":["requests",0,"contentReferences"],"v":[{"kind":"reference","reference":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/AGENTS.md","external":"file:///home/breadway/Documents/Hazard%20Pay/AGENTS.md","path":"/home/breadway/Documents/Hazard Pay/AGENTS.md","scheme":"file"}}]} +{"kind":2,"k":["requests",0,"response"],"v":[{"kind":"thinking","value":[],"id":"3/R8WeLSTPMOUkPD8jU2wuod3FFFF9dwCz/gfRAvvTOPEx6arcK1jSWLw++L7uD3PGOgqZ9XZB481UUHi/P9zF4++kLPdA0fbiSs4/dOenDB0gRYxtwHuds87zBMSGjogE6UrCOSgobqG8f+IsdeZKouyV4iJ/lkvEoSQ1RrNBqXZVAKrUhcp+kBA9EjsOy6waVrtOnoOzCLyrpRWiLVfVWaEgjDqzmcLqha6qAnEMIdC+8ps3lIbNaulC+o63i3RFnNJOotibrpIVR03aszOY/zOfOcgscbwMgErukIDJFhEJFAE9l7XCs2AD5bqJEt0m+mFd0r2AOOqmmIym2K4Dx1tBV+ni/7IOqRk0d8JbU6geWngzx2H8sDndV7x+bUr9nE3yze72PyFNfkaU0VQKryzQp8+w=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"I’ll review the project in three passes: architecture/code health, documentation consistency, and folder/org structure, then I’ll give you a concrete validation report with risks and prioritized fixes. First I’m mapping the code and key docs so the assessment is grounded in the actual repo state.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"toolInvocationSerialized","invocationMessage":"","pastTenseMessage":{"value":"Created 5 todos","isTrusted":false,"supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolSpecificData":{"kind":"todoList","todoList":[{"id":"1","title":"Inventory scripts and project structure","status":"in-progress"},{"id":"2","title":"Assess code architecture patterns","status":"not-started"},{"id":"3","title":"Review docs for accuracy","status":"not-started"},{"id":"4","title":"Validate build/test readiness","status":"not-started"},{"id":"5","title":"Summarize findings and actions","status":"not-started"}]},"toolCallId":"837afd81-8d4a-43ff-97e4-d3685c823d1a","toolId":"manage_todo_list"},{"kind":"thinking","value":[],"id":"7fXwXSdFKw2tMakyRdhH8aHHKSC/G9+8tG4PbVBwr1TZevdMPg+kTW799d9W14qlh5NsbZAUpsECPJaIrg3ONABwdvbLPumb2NEFCO7L5HxHGQ32gE8o2+NAWNyfqLTdCzCs2ywKBDSQ5mcOFWh6tXkKgpeeNQplbHTMkHmWFd2sIzsgcH21EcQ1hj0otYzpwEK8Y/kkUa0FpywZ0hK1IvsrDVy+j5y9uvEyckKynkFBVJOBABucdFNlF2lgNv+G4wTuM6u1KqXIjjb4u3N+RHWplsN7aFGXzzgjZdPChZbagj+Go9sz4OpqnJmTgrIEOjeKM/YnszY1v1HLcgKfmHwmTiKJNC8Xbba6WfZ2I0ywFcRUISGtSLveiu2bt3cfahYY/F6MTRhIZk8XiEhP6Fv+t5yqJw=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"I’m now collecting a quick inventory of scripts, managers, events, and top-level docs so I can compare implementation against the architecture guidelines.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"2a1c5f16-4271-41d4-b00b-f82b54dac537","toolId":"copilot_listDirectory","generatedTitle":"Reviewed files and searched for specific patterns"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for files matching `**/Assets/_Project/Scripts/**/*.cs`","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for files matching `**/Assets/_Project/Scripts/**/*.cs`, 52 matches","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAiming.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAiming.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAiming.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerControls.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerControls.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerControls.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/DebugDude.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Utilities/DebugDude.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/DebugDude.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/UpgradeDebug.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Utilities/UpgradeDebug.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/UpgradeDebug.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/PerformanceUtils.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Utilities/PerformanceUtils.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/PerformanceUtils.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DebugManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/DebugManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DebugManager.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/AudioManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/AudioManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/AudioManager.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IWeaponAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IWeaponAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IWeaponAttack.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IMovementModifiable.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IMovementModifiable.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IMovementModifiable.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDebugFunction.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IDebugFunction.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDebugFunction.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDamageable.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IDamageable.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDamageable.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/CombatCalculator.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/CombatCalculator.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/CombatCalculator.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Destructible.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Destructible.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Destructible.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusResistanceData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/StatusResistanceData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusResistanceData.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Attack/ContactDamage.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Attack/ContactDamage.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Attack/ContactDamage.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/EnemyData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/WeaponData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/ActiveStatusEffect.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/ActiveStatusEffect.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/ActiveStatusEffect.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/EnemyAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/EnemyAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/EnemyAttack.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IMovementBehavior.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/IMovementBehavior.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IMovementBehavior.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectVFX.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectVFX.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectVFX.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IAttackBehaviour.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/IAttackBehaviour.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IAttackBehaviour.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","scheme":"file"}],"toolCallId":"b643a24d-4794-424e-9ecd-77174ec1e88c","toolId":"copilot_findFiles","generatedTitle":"Reviewed files and searched for specific patterns"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for files matching `**/*.md`","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for files matching `**/*.md`, 7 matches","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/LORE.md","external":"file:///home/breadway/Documents/Hazard%20Pay/LORE.md","path":"/home/breadway/Documents/Hazard Pay/LORE.md","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/README.md","external":"file:///home/breadway/Documents/Hazard%20Pay/README.md","path":"/home/breadway/Documents/Hazard Pay/README.md","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","external":"file:///home/breadway/Documents/Hazard%20Pay/PERFORMANCE.md","path":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/GEMINI.md","external":"file:///home/breadway/Documents/Hazard%20Pay/GEMINI.md","path":"/home/breadway/Documents/Hazard Pay/GEMINI.md","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/GAMEDESIGN.md","external":"file:///home/breadway/Documents/Hazard%20Pay/GAMEDESIGN.md","path":"/home/breadway/Documents/Hazard Pay/GAMEDESIGN.md","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/AGENTS.md","external":"file:///home/breadway/Documents/Hazard%20Pay/AGENTS.md","path":"/home/breadway/Documents/Hazard Pay/AGENTS.md","scheme":"file"},{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md","scheme":"file"}],"toolCallId":"31fa71f9-bd95-447a-92b8-43aeadffb1cd","toolId":"copilot_findFiles","generatedTitle":"Reviewed files and searched for specific patterns"},{"kind":"thinking","value":[],"id":"XOqPsO94ZIZRZKSyMh4xCN/yRbaWZiK4/2A7mqrBIePwb2DHToi+nuDLbnizQx9cd9hENX6pu0Hw+trNuVkB+VH6WoIDV499XTktjS1cnOaUCMIGXt8c1tXlwjBrm4V7iDA7vnzwl8MisMuHmhXBLWCkMNh/VvogW37FwHmfS/FQSNEvqVsG8+doR9KdjzcvLmmM2NuRMmNGHl0NafkjdoEouRY1LqH3rzOswVaQ0dovaYq+bt/A9s/yB/xFu5/dxVBkUDJ9vUzgB8gG57YY3Q9RikuyAwcOwWjKJwERp6cMSKDolsVQUiJWJY+Lr1JcQCGBfEvCdWPuMg1Vv6RvKAbe9T/QTzn0qNZrrAGyiAbYlD45dx/o8I+aO1ePbmalHYrcHyjinoOjxJ7a6kIthg5pd+p7kw=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"I’ve mapped the repo and found 52 C# scripts plus 7 markdown docs; next I’m reading core architecture docs and representative systems to validate whether code matches the documented patterns.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/README.md#1-1), lines 1 to 260","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/README.md#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/README.md","scheme":"file","fragment":"1-1"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/README.md#1-1), lines 1 to 260","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/README.md#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/README.md","scheme":"file","fragment":"1-1"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"44755f5d-8946-406d-9dff-a90120b6d849","toolId":"copilot_readFile","generatedTitle":"Reviewed 3 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/GEMINI.md)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/GEMINI.md":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/GEMINI.md","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/GEMINI.md)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/GEMINI.md":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/GEMINI.md","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"d54eab64-2ef3-46f7-8b31-8588c1436f92","toolId":"copilot_readFile","generatedTitle":"Reviewed 3 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/PERFORMANCE.md#1-1), lines 1 to 260","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/PERFORMANCE.md#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","scheme":"file","fragment":"1-1"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/PERFORMANCE.md#1-1), lines 1 to 260","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/PERFORMANCE.md#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","scheme":"file","fragment":"1-1"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"1d2407e8-9386-4b30-8dfb-38db6ac28222","toolId":"copilot_readFile","generatedTitle":"Reviewed 3 files"},{"kind":"thinking","value":[],"id":"MZlAfz4v+tVuKZCIU3Q4cnouViH94kHrzk1Tq5ySi0yIm6XUmTI7J5q3RUw1gI+8sBShQ7yl4X+S91LgZcj+jwtF9+sbqIbMIy0Sk7ablU9Qtu/nKyxMrQW8G3FthwGNu0vw7Cq7MuhQ8/ihmXaZMgbizjEyCHHE3yN6lUBjAZ0CKTZ/fcZ2MYDnjd6C3A73M1mqAQVCHep6ZaraPQJ8pnTu29BlKHsBEwW0prUNNGk04Pjs43PsAMPm+kA8ujJwDmyJxIlHeAV2MA0/eQ6EKEgHknwDPai0dauDjn91HlMas+E1QQTXRF3Sb2aGtUrBKbdxJTt7auZoNA7O7rJJ4+pVKw7NXkO12rbNJgli/2xmqipR0e5OFJk1a04fFr6m9K9tb1OMKsmaZq0cE5DjSpqzciP+5Q=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"Next I’m sampling core runtime scripts (player, enemy, events, managers, shared systems) to verify architecture claims like single-responsibility components, event lifecycle safety, and ScriptableObject usage.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"7d51fa0e-5d58-4dbb-bb06-636b7e446435","toolId":"copilot_readFile","generatedTitle":"Reviewed 6 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs#1-1), lines 1 to 260","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","scheme":"file","fragment":"1-1"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs#1-1), lines 1 to 260","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","scheme":"file","fragment":"1-1"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"e05c58e8-5278-414f-b1e8-3ecdc2c2aa85","toolId":"copilot_readFile","generatedTitle":"Reviewed 6 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"1f8ab366-ea16-4e96-993b-3c634751dc8a","toolId":"copilot_readFile","generatedTitle":"Reviewed 6 files"},{"kind":"thinking","value":[],"id":"1jRs9pqb6L9F/1W1DQhz9eXvOELHle5+v/tcqhgQ2eksGiWqiGmO50hVodL3zIIBAeM76dwtEuO+sVcweA699GNBVnDFHpNFuB4eMgS1u69dD7AZ/C3Qxskxukk+o/ARq7BcKNL4gBdZm1+A2K46lXTw+xV7ym3i3RcPXlELq/AlNS6iSueEI+8dsMlGG1iWXTo3URIIIASV48ZXrd9gb+Eo4TB85MjZYmhuOerttiCifwSCUUDybIPg/frMkcLRhVvC+6iGAavKD+3ziUvtljizSZtERqFY7w/mNXDZ0VLgGAUQQEfR7jHo/pG1Qk2MBoZOD+sWghs6IWnSVmXqGQcqgodw/QYowFYV92d4CKXC/5Hu50Lz7ljqTJiUkoAnXz87p3UTSqsVejcMUdgaBc7wWXv/ew=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"other"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#1-1), lines 1 to 340","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file","fragment":"1-1"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#1-1), lines 1 to 340","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file","fragment":"1-1"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"72a4b9c3-18c6-4dc3-b8d2-714995c16987","toolId":"copilot_readFile","generatedTitle":"Reviewed 6 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"bb2edfb0-7941-4fde-866a-6112951be7e7","toolId":"copilot_readFile","generatedTitle":"Reviewed 6 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/RoomManager.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/RoomManager.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/RoomManager.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/RoomManager.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"bede9832-1158-4bd1-8fa4-8e20223bfe57","toolId":"copilot_readFile","generatedTitle":"Reviewed 6 files"},{"kind":"thinking","value":[],"id":"zQ0WOubffs/WnxPH5Gwr7bt6+GtUyWuAKcrFI4SC4+uvhiz5BAWg4QT/R72Y1T1OdAlCT6HusAh7GG5phlTh4VHSbrQvTV6EdrMf8xttXg07brRz2bTfmqdC1sfG3pAGdqorSLUpjdo+oTI/IANQHIBiwen2Qey8X+v5xK9auk7KtrXItsztSi0ojV18FDgbZiVUTNoiJw2iiWzcQ++N9vgjPRXKfwNnuMDHXJ5ry9LndYZ4/cdvi1UU9qXYXAEl4wSR3jTbHudkJMfVES1AR0x3zBkrWh23jnwjfDWTWJV99ju5pTldMVFiScL4brYsBovGSiS+Huu4kmbfK/PsRISycCDmJ0S+oQ7obo4Yn1CFOzifZoLQPyh2CQb5zmq5/hpUY2YX9d/VJPV8d0dT+wsWUhyKtA=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"other"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#341-341), lines 341 to 593","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#341-341":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file","fragment":"341-341"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#341-341), lines 341 to 593","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs#341-341":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file","fragment":"341-341"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"8df77829-15d5-44b8-8a38-30582ca1e678","toolId":"copilot_readFile","generatedTitle":"Reviewed 6 files"},{"kind":"thinking","value":[],"id":"z+7WtIb6VL8yNkSJpYdbXsF4ljcxww6EFnJ7u6/M1pH74Bjrly1hnNJXnYfK8qrN2Cwa+xU1lIV/0G3Q+nEyAzJS5B5SMZlQrFOQ+Bad+yG7Djsi4xevmkwoljZERoD2bNCNydEoQWMzClirZnjPTtr8iBl+Pk3pEC1WdtTE+lUHl978P9nZPTDADgZL3zVfgG9VukncLyrCJHuEvUMnG4JW2WpP8Si5UHVjUh66NL1TqXPu2b9sCyoVBmlQ/qOL/VBjkgai6sooCPFfMogKz6RgxI93topvUWHTw9qDIsdWAdJY4ZPuv9FphjrjDns94hXvvn0ssvz/zk3E0jOjHrq9eKZ/aEGXXLhtQvWavKjv6gYU2dZbkJfL1dn/EtFzmhb4z2NOUahN62aHainpNBaQayZOug=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"I’m seeing a mixed maturity level already (solid event hub, but at least one placeholder manager), so I’m now checking enemy/shared/data/UI scripts for consistency and any compile-risk patterns.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"d781bc20-95d3-425f-b72d-2f89dc0fa434","toolId":"copilot_readFile"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"967e48f3-0160-43c2-8f61-a3f6da05aea2","toolId":"copilot_readFile"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1), lines 1 to 320","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file","fragment":"1-1"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1), lines 1 to 320","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file","fragment":"1-1"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"e4679935-f7f2-4e4e-b59f-2cecf6a939a9","toolId":"copilot_readFile"}]} +{"kind":2,"k":["requests",0,"response"],"v":[{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"d781bc20-95d3-425f-b72d-2f89dc0fa434","toolId":"copilot_readFile","generatedTitle":"Reviewed 4 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"967e48f3-0160-43c2-8f61-a3f6da05aea2","toolId":"copilot_readFile","generatedTitle":"Reviewed 4 files"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1), lines 1 to 320","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file","fragment":"1-1"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1), lines 1 to 320","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#1-1":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file","fragment":"1-1"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"e4679935-f7f2-4e4e-b59f-2cecf6a939a9","toolId":"copilot_readFile","generatedTitle":"Reviewed 4 files"},{"kind":"thinking","value":[],"id":"/UfMWBE17ULQNmPUIDBHj1TIlgiSfU8XcEugbP7MQE1Q2mhYRtnqE1U57cvqTDHlwoQJxQk1mCVaefyeXMAlqMm8BxNpF/ch0MNw1iNBdoYO86We1g7P1H4HT/CkuaXfewUVEQMs+dUO+nHiKEgh2t4Bv17VhC7W7jfIABHkLo969Qm4+iAqPPOuhRy7RMmYQntXqPz4fMIgWkbV+3zB95ZW39ymfmp0UgaS/7D1gO4Eht49W/aNLwAyTt7p8Kj+xTR9CBUvZRMt5lheMYZkk6sJz+25UFd7o//BIXBOAdFf+lz7C7Pduk6qts/5gnHzILcxewruu7fzj4BmX819TjKaRze/dR+G6odULE0EZj5b6K1Tarfo/OBtN44bbwN6iDXa4du+DsIburvl8sK15CYa+u0eDA=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"other"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#321-321), lines 321 to 347","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#321-321":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file","fragment":"321-321"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#321-321), lines 321 to 347","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs#321-321":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file","fragment":"321-321"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"431940ac-a1c8-4dc5-92f4-8e87a6e7abc2","toolId":"copilot_readFile","generatedTitle":"Reviewed 4 files"},{"kind":"thinking","value":[],"id":"t21ysv4qMR5+vszBRhTw8+CqiZehK188I/sv99VMvcVatlzf9Zyj1z42HWoD3lMyUrFSwFrMsJfYpVST7f4qSoZaQau9o0sCFiI1EGPHhjF4Derdn0NEMiBPEeR6ldFCrUoy8HtVzC+Sy7yDrhaCP2hWbh+x50JTyhS60TaISLHxwSRe8iuRozgu0KQgWCvgDaF1oFPPaFnpxyL6zdXlZQb9PtoGvPrrqDX/5JQQ+fN1Gsw7WY4z5dbF8nyD/U82HPJpzXnq/951PuuFT4LFTLKOXFhSR8B5HF/eC7mbqLW6KTTD7XaFUeRzxsoLqK9WuG21dhynjbQXV2D+6cm+LJKEg94TQu2cLsOp5yslSyaJqpiuRf28/Yv/ndmS4mxCSCaNsXlHh4iJ+apbxxmd8aVske69kQ=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"other"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scenes)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scenes":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scenes","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scenes)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scenes":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scenes","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"16824fa1-b4b2-427c-9dea-bd4ef6ef51ac","toolId":"copilot_listDirectory","generatedTitle":"Reviewed 4 files"},{"kind":"thinking","value":[],"id":"E60mTkWZwvaMZrnSUf+kZN4tWjXu+yLdGYvnzYefA3otl2uEkp0HEnsa7Vgz9Q3SB49LJtW69IWUP5RNaZtg2ywIB4WtbUvvYKFiYVxDvShEfGZr+r0PZTh42O8rcpSPJVc+6pcsD8PeRs1sOgLm/E6OnWIwRaWBStLgl0jHIL1PXY3ta+vZPpPSjvNXSqZQPOqUO5qz5pfWTuFXhPkA939Rwv/UN/Uv70BWuU9Xyg8CPtAPQpuLbfl9OZwRB5PPWDWDhbHGH1gYySJZXbvYCJlquOy4iWXdl0ddxmoGOf2RGf5v0tAXTXywLaGtFo2u5+25Vf8LQji/UDn4IO2u2YQVKwnvmfWB4fFvnb3zuT+4YWilPsLXNpEIoJBdAnVsLGNx9unhXx7QnDG9n4cCLqTLk4wE6A=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"Quick status: the codebase is real and active, but docs appear partially stale against current assets (for example scene naming differs from README/GEMINI). I’m now doing targeted checks for event subscription hygiene, singleton/manager quality, and configuration/data consistency across all scripts.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"thinking","value":[],"id":"JV59o13I4vg3q1bJgqHr654995h2jLjmYjkDyVSmGwkIXb+DyhDRHwxrka4rk/korfdutV/xYpVv1oxLlZ1aNojXeLhF8XXCGRF4o4WzkgZf/R2K5XCKnldqbfVbtNZ0Uds2bRqdXywJASV3ra/1RjqaKb2okWhSGA+9Uz51gqyFBrSk2bCWk2ulsPwlXsOfw33EBnYs5bqLtO8RAoSyKB3yQMO2Q6N3nMZ8YVqVob4KzY8hfn5ypdg4vHlPLVDQIBJpI7u8Xuyz29JpRCUnMD43sSUR+Pe906cTF/X/JhcYKb/nq1oeVErPOdhMUfSVNYzyzrDhCupsJLXI72XwWqBtzet6zODXG7pNeLZNH4B7eemtydmh9XVwC9Z41tYnc8JW1w+p0frvpd/oSUBdnXPGSd/oDA=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"I’m running static pattern checks across the scripts to catch lifecycle issues (subscriptions without unsubscriptions), singleton overreach, and hardcoded config that should be data-driven.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for regex `GameEvents\\.[A-Za-z0-9_]+\\s*\\+=` (`**/Assets/_Project/Scripts/**/*.cs`)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for regex `GameEvents\\.[A-Za-z0-9_]+\\s*\\+=` (`**/Assets/_Project/Scripts/**/*.cs`), 23 results","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":19,"startColumn":9,"endLineNumber":19,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":20,"startColumn":9,"endLineNumber":20,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":21,"startColumn":9,"endLineNumber":21,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":22,"startColumn":9,"endLineNumber":22,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":{"startLineNumber":76,"startColumn":9,"endLineNumber":76,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},"range":{"startLineNumber":22,"startColumn":9,"endLineNumber":22,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"range":{"startLineNumber":11,"startColumn":9,"endLineNumber":11,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},"range":{"startLineNumber":9,"startColumn":9,"endLineNumber":9,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},"range":{"startLineNumber":11,"startColumn":9,"endLineNumber":11,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"range":{"startLineNumber":63,"startColumn":9,"endLineNumber":63,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":71,"startColumn":9,"endLineNumber":71,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":72,"startColumn":9,"endLineNumber":72,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":73,"startColumn":9,"endLineNumber":73,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":74,"startColumn":9,"endLineNumber":74,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":75,"startColumn":9,"endLineNumber":75,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":76,"startColumn":9,"endLineNumber":76,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":70,"startColumn":9,"endLineNumber":70,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":71,"startColumn":9,"endLineNumber":71,"endColumn":50}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":198,"startColumn":9,"endLineNumber":198,"endColumn":37}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":199,"startColumn":9,"endLineNumber":199,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":16,"startColumn":9,"endLineNumber":16,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":17,"startColumn":9,"endLineNumber":17,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":{"startLineNumber":33,"startColumn":9,"endLineNumber":33,"endColumn":36}}],"toolCallId":"b1a1ea14-e831-406f-9ea5-1f54859d84c1","toolId":"copilot_findTextInFiles"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for regex `GameEvents\\.[A-Za-z0-9_]+\\s*-=` (`**/Assets/_Project/Scripts/**/*.cs`)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for regex `GameEvents\\.[A-Za-z0-9_]+\\s*-=` (`**/Assets/_Project/Scripts/**/*.cs`), 23 results","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},"range":{"startLineNumber":15,"startColumn":9,"endLineNumber":15,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},"range":{"startLineNumber":13,"startColumn":9,"endLineNumber":13,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":82,"startColumn":9,"endLineNumber":82,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":83,"startColumn":9,"endLineNumber":83,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":84,"startColumn":9,"endLineNumber":84,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":85,"startColumn":9,"endLineNumber":85,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":86,"startColumn":9,"endLineNumber":86,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":87,"startColumn":9,"endLineNumber":87,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"range":{"startLineNumber":15,"startColumn":9,"endLineNumber":15,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},"range":{"startLineNumber":34,"startColumn":9,"endLineNumber":34,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":{"startLineNumber":82,"startColumn":9,"endLineNumber":82,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":21,"startColumn":9,"endLineNumber":21,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":22,"startColumn":9,"endLineNumber":22,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"range":{"startLineNumber":72,"startColumn":9,"endLineNumber":72,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":{"startLineNumber":38,"startColumn":9,"endLineNumber":38,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":27,"startColumn":9,"endLineNumber":27,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":28,"startColumn":9,"endLineNumber":28,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":29,"startColumn":9,"endLineNumber":29,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":30,"startColumn":9,"endLineNumber":30,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":76,"startColumn":9,"endLineNumber":76,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":77,"startColumn":9,"endLineNumber":77,"endColumn":50}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":204,"startColumn":9,"endLineNumber":204,"endColumn":37}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":205,"startColumn":9,"endLineNumber":205,"endColumn":36}}],"toolCallId":"1121ab02-9e27-490d-b2bd-cb16bb5828bd","toolId":"copilot_findTextInFiles"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for regex `FindObjectOfType|FindFirstObjectByType|FindAnyObjectByType` (`**/Assets/_Project/Scripts/**/*.cs`)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for regex `FindObjectOfType|FindFirstObjectByType|FindAnyObjectByType` (`**/Assets/_Project/Scripts/**/*.cs`), 8 results","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":{"startLineNumber":343,"startColumn":23,"endLineNumber":343,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":{"startLineNumber":401,"startColumn":25,"endLineNumber":401,"endColumn":46}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":{"startLineNumber":523,"startColumn":23,"endLineNumber":523,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":{"startLineNumber":59,"startColumn":36,"endLineNumber":59,"endColumn":57}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","scheme":"file"},"range":{"startLineNumber":48,"startColumn":45,"endLineNumber":48,"endColumn":66}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":{"startLineNumber":28,"startColumn":24,"endLineNumber":28,"endColumn":45}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","scheme":"file"},"range":{"startLineNumber":91,"startColumn":25,"endLineNumber":91,"endColumn":46}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","scheme":"file"},"range":{"startLineNumber":47,"startColumn":45,"endLineNumber":47,"endColumn":66}}],"toolCallId":"8ac64558-b816-4ac6-a780-834530c34dcb","toolId":"copilot_findTextInFiles"},{"kind":"thinking","value":[],"id":"wWUWKNV7AcWjHqgJdF8KRNGI6WJKTbIasykee1rPlktkfTVryYJ5B7jQKXwQtrCxrFoyYhoIUB6lHjeb+QddL3VnVtbFtJjNnPw3UyM8gQjGS2A09yK6vyR31Eh7y738lYguFigCPe8NYQCse3Catek3eJiQDHMZGcFIRXYIv9XXL4FdZU33NnaGHdprsxmyHLOEtYHAIxc5SLU+D9mByC7mzZT6jR9pbN/qla0uheQDLfdgi/fZeiJAxjeh7HhPxPdEzON+cqdyT4BVy4e66u8ERmY3KOAIoZWVOnfnNh883eG3s5I/keD/Yo9zhq4XBBp3BScBxLKu9aE5pPcNmybs2oi6APW+IjbxJHBhiq61f2IL/V3hRscc9luNPRlZjPA2HGP+l1vx5Tc89VYP9pkhqPsJiw=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"other"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Checking workspace for problems","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Checked workspace, no problems found","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"5469d732-9416-4a3c-9346-06a0cdb807a6","toolId":"copilot_getErrors"}],"i":34} +{"kind":2,"k":["requests",0,"response"],"v":[{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for regex `GameEvents\\.[A-Za-z0-9_]+\\s*\\+=` (`**/Assets/_Project/Scripts/**/*.cs`)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for regex `GameEvents\\.[A-Za-z0-9_]+\\s*\\+=` (`**/Assets/_Project/Scripts/**/*.cs`), 23 results","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":19,"startColumn":9,"endLineNumber":19,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":20,"startColumn":9,"endLineNumber":20,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":21,"startColumn":9,"endLineNumber":21,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":22,"startColumn":9,"endLineNumber":22,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":{"startLineNumber":76,"startColumn":9,"endLineNumber":76,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},"range":{"startLineNumber":22,"startColumn":9,"endLineNumber":22,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"range":{"startLineNumber":11,"startColumn":9,"endLineNumber":11,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},"range":{"startLineNumber":9,"startColumn":9,"endLineNumber":9,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},"range":{"startLineNumber":11,"startColumn":9,"endLineNumber":11,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"range":{"startLineNumber":63,"startColumn":9,"endLineNumber":63,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":71,"startColumn":9,"endLineNumber":71,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":72,"startColumn":9,"endLineNumber":72,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":73,"startColumn":9,"endLineNumber":73,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":74,"startColumn":9,"endLineNumber":74,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":75,"startColumn":9,"endLineNumber":75,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":76,"startColumn":9,"endLineNumber":76,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":70,"startColumn":9,"endLineNumber":70,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":71,"startColumn":9,"endLineNumber":71,"endColumn":50}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":198,"startColumn":9,"endLineNumber":198,"endColumn":37}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":199,"startColumn":9,"endLineNumber":199,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":16,"startColumn":9,"endLineNumber":16,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":17,"startColumn":9,"endLineNumber":17,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":{"startLineNumber":33,"startColumn":9,"endLineNumber":33,"endColumn":36}}],"toolCallId":"b1a1ea14-e831-406f-9ea5-1f54859d84c1","toolId":"copilot_findTextInFiles","generatedTitle":"Searched for multiple regex patterns and checked workspace issues"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for regex `GameEvents\\.[A-Za-z0-9_]+\\s*-=` (`**/Assets/_Project/Scripts/**/*.cs`)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for regex `GameEvents\\.[A-Za-z0-9_]+\\s*-=` (`**/Assets/_Project/Scripts/**/*.cs`), 23 results","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},"range":{"startLineNumber":15,"startColumn":9,"endLineNumber":15,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},"range":{"startLineNumber":13,"startColumn":9,"endLineNumber":13,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":82,"startColumn":9,"endLineNumber":82,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":83,"startColumn":9,"endLineNumber":83,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":84,"startColumn":9,"endLineNumber":84,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":85,"startColumn":9,"endLineNumber":85,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":86,"startColumn":9,"endLineNumber":86,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":{"startLineNumber":87,"startColumn":9,"endLineNumber":87,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"range":{"startLineNumber":15,"startColumn":9,"endLineNumber":15,"endColumn":38}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},"range":{"startLineNumber":34,"startColumn":9,"endLineNumber":34,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":{"startLineNumber":82,"startColumn":9,"endLineNumber":82,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":21,"startColumn":9,"endLineNumber":21,"endColumn":33}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":{"startLineNumber":22,"startColumn":9,"endLineNumber":22,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"range":{"startLineNumber":72,"startColumn":9,"endLineNumber":72,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":{"startLineNumber":38,"startColumn":9,"endLineNumber":38,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":27,"startColumn":9,"endLineNumber":27,"endColumn":35}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":28,"startColumn":9,"endLineNumber":28,"endColumn":36}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":29,"startColumn":9,"endLineNumber":29,"endColumn":32}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":{"startLineNumber":30,"startColumn":9,"endLineNumber":30,"endColumn":34}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":76,"startColumn":9,"endLineNumber":76,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":{"startLineNumber":77,"startColumn":9,"endLineNumber":77,"endColumn":50}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":204,"startColumn":9,"endLineNumber":204,"endColumn":37}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":{"startLineNumber":205,"startColumn":9,"endLineNumber":205,"endColumn":36}}],"toolCallId":"1121ab02-9e27-490d-b2bd-cb16bb5828bd","toolId":"copilot_findTextInFiles","generatedTitle":"Searched for multiple regex patterns and checked workspace issues"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for regex `FindObjectOfType|FindFirstObjectByType|FindAnyObjectByType` (`**/Assets/_Project/Scripts/**/*.cs`)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for regex `FindObjectOfType|FindFirstObjectByType|FindAnyObjectByType` (`**/Assets/_Project/Scripts/**/*.cs`), 8 results","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":{"startLineNumber":343,"startColumn":23,"endLineNumber":343,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":{"startLineNumber":401,"startColumn":25,"endLineNumber":401,"endColumn":46}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":{"startLineNumber":523,"startColumn":23,"endLineNumber":523,"endColumn":44}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":{"startLineNumber":59,"startColumn":36,"endLineNumber":59,"endColumn":57}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","scheme":"file"},"range":{"startLineNumber":48,"startColumn":45,"endLineNumber":48,"endColumn":66}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":{"startLineNumber":28,"startColumn":24,"endLineNumber":28,"endColumn":45}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","scheme":"file"},"range":{"startLineNumber":91,"startColumn":25,"endLineNumber":91,"endColumn":46}},{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","scheme":"file"},"range":{"startLineNumber":47,"startColumn":45,"endLineNumber":47,"endColumn":66}}],"toolCallId":"8ac64558-b816-4ac6-a780-834530c34dcb","toolId":"copilot_findTextInFiles","generatedTitle":"Searched for multiple regex patterns and checked workspace issues"},{"kind":"thinking","value":[],"id":"wWUWKNV7AcWjHqgJdF8KRNGI6WJKTbIasykee1rPlktkfTVryYJ5B7jQKXwQtrCxrFoyYhoIUB6lHjeb+QddL3VnVtbFtJjNnPw3UyM8gQjGS2A09yK6vyR31Eh7y738lYguFigCPe8NYQCse3Catek3eJiQDHMZGcFIRXYIv9XXL4FdZU33NnaGHdprsxmyHLOEtYHAIxc5SLU+D9mByC7mzZT6jR9pbN/qla0uheQDLfdgi/fZeiJAxjeh7HhPxPdEzON+cqdyT4BVy4e66u8ERmY3KOAIoZWVOnfnNh883eG3s5I/keD/Yo9zhq4XBBp3BScBxLKu9aE5pPcNmybs2oi6APW+IjbxJHBhiq61f2IL/V3hRscc9luNPRlZjPA2HGP+l1vx5Tc89VYP9pkhqPsJiw=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"other"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Checking workspace for problems","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Checked workspace, no problems found","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"5469d732-9416-4a3c-9346-06a0cdb807a6","toolId":"copilot_getErrors","generatedTitle":"Searched for multiple regex patterns and checked workspace issues"},{"kind":"thinking","value":[],"id":"vmiQ1XknvwYAcJapmujueMMzCb20eqZN/aJNvi6ErETDZN9nKPwAjXM03hIs7IE5tOKAvLY0iA2ruIYmaGugbupJyGT91YLhIqU5QspV29Xkf0TpTDvX8yVeMYdJMOiM83LtOnIA6ot83FTtpit+UghtZuwmGcLReBy6DmCh7rT6yptcSyHIHjBidKsHYoWaDKJax0YaMZ5NAL71jXfF0uwb4cyKPcQG5OTYqX1zJ9w4FcxwN+0fD8BChe3ChjOl/Rl0jD0sZcKpBboHsW8sVZWpqZDpU1oKJ4NPeZkUG0KjygacpSJkLzB6r8SQrpwglAogQ08vG5PX8JqrE+Dwk484C9FEF9Clzd/Ue3/Wc93G8qdTUHEcXD5OoXcWBq1Am0I6eUO9hlnyRa8AJU9GSY2HgKxMDA=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"Static diagnostics currently show no editor errors, which is a good sign for compile health. I’ll now inspect key managers/systems and ScriptableObject/data assets patterns to validate runtime architecture quality rather than just syntax.","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"b6a6773d-a4e1-4cfe-a692-77a6647d1669","toolId":"copilot_readFile"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"a60d7e53-bf6b-485b-93c3-73a3f8d307dd","toolId":"copilot_readFile"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/PlayerStats.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/PlayerStats.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/PlayerStats.cs)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/PlayerStats.cs":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"858d54d4-4f06-43a0-8582-02741bbff5f1","toolId":"copilot_readFile"},{"kind":"thinking","value":[],"id":"9ilYsxpr/3LsuwwIfwiO2n7aqUzFrBlbTzRU/MW0lR8xSK9B1cw+Qn3EnsDf9DtbX37OECfxHSiTWp8IjH7BLY8vHps8WNH5cvV41sqYIWyIC0l31xoh2YJhm4IF8ZZeU50/eEyul0GZuJR9zUHEbGXUUQlYilBYrwAwDrnVYqwnxvwCHbQY6c/ttWOlRGbfVJ7LT3WKIJqZ1KLJEP5sSZkJaFy0RBmitGVUaBQiul4VyCQupVfeZJusltNDJCd+SYhbURr5uJ59Lq5NQoV4CoZpX0Y05IY0TVuQedAwp3EnbE564f3i9/T5HIheRINaZ2VubhFie53UnceYWrBeC23kfe9+IVcflfVmPAzdQk2R1RIcapiuC4tXl/vDxY9AqveWlskGzQkhSmTk6RrmRyEqwijcAA=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"other"}},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Reading [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project","scheme":"file"}}},"pastTenseMessage":{"value":"Read [](file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project)","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/Assets/_Project","scheme":"file"}}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"toolCallId":"53854176-b4f8-4b7b-8ed5-2ecd6d9493ea","toolId":"copilot_listDirectory"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for files matching `**/Assets/_Project/Data/**/*.asset`","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for files matching `**/Assets/_Project/Data/**/*.asset`, no matches","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[],"toolCallId":"20d7ffb2-ab65-42b3-ba07-ddd2e68f17b3","toolId":"copilot_findFiles"},{"kind":"toolInvocationSerialized","invocationMessage":{"value":"Searching for files matching `**/Assets/_Project/**/*.asmdef`","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"pastTenseMessage":{"value":"Searched for files matching `**/Assets/_Project/**/*.asmdef`, no matches","supportThemeIcons":false,"supportHtml":false,"supportAlertSyntax":false,"uris":{}},"isConfirmed":{"type":1},"isComplete":true,"source":{"type":"internal","label":"Built-In"},"resultDetails":[],"toolCallId":"ec7c0848-9719-4b8b-a671-101154e15b02","toolId":"copilot_findFiles"},{"kind":"thinking","value":[],"id":"ZOH3171HiZcxbfxGk6NSCAzDbQnUDlCWa5XG9OO8I9A8nGM9G4BwskVA4u8mO4MyN+fmhBnqz6UTKx+9F+MtKj5bRm2TvnsPt/JLuks83b/aSqREEGCue20UKNd3i5tAXNEcz7+HVybIlsN3gpaugp1zkdMpSU8cyM1NSlZ2FlTstazqHoc3pkS/1neBzAJywc/L7tP/vwt/9vCrDtbWBH2NTVKORUV5T+vn4hFbvAFFc63wZUADEhNPGPdFMpf8fP3uPo6c2reRhXTqFDeOtPY0IrqFRTq9LuZQCOd1TSGbga5a+9DbnuucrF03uFL1UJUHlU2DTwDYjKWDmKDzsEXhg473mvt35M9aa0BhsY1Tt6ZhVZxu5BQNY3be5hh/FmOkTM8O2DunYpT4q3w4WgubPCswQg=="},{"kind":"thinking","value":"","id":"","metadata":{"vscodeReasoningDone":true,"stopReason":"text"}},{"value":"I found a major project-state gap: there are currently no ScriptableObject asset instances under ","supportThemeIcons":false,"supportHtml":false,"baseUri":{"$mid":1,"path":"/home/breadway/Documents/Hazard Pay/","scheme":"file"}}],"i":49} +{"kind":1,"k":["requests",0,"result"],"v":{"timings":{"firstProgress":5573,"totalElapsed":152792},"metadata":{"maxToolCallsExceeded":true,"codeBlocks":[],"renderedUserMessage":[{"type":1,"text":"\nThe current date is 24 March 2026.\nTerminals:\nTerminal: fish\n\n\n\nYou are an agent—keep going until the user's query is completely resolved before ending your turn. ONLY stop if solved or genuinely blocked.\nTake action when possible; the user expects you to do useful work without unnecessary questions.\nAfter any parallel, read-only context gathering, give a concise progress update and what's next.\nAvoid repetition across turns: don't restate unchanged plans or sections (like the todo list) verbatim; provide delta updates or only the parts that changed.\nTool batches: You MUST preface each batch with a one-sentence why/what/outcome preamble.\nProgress cadence: After 3 to 5 tool calls, or when you create/edit > ~3 files in a burst, report progress.\nRequirements coverage: Read the user's ask in full and think carefully. Do not omit a requirement. If something cannot be done with available tools, note why briefly and propose a viable alternative.\n\n\n\nvalidate the codebase, documentation, and organisation of this project. be sure to familiarise yourself with the codebase first.\n\n"},{"type":3,"cacheType":"ephemeral"}],"renderedGlobalContext":[{"type":1,"text":"\nThe user's current OS is: Linux\n\n\nI am working in a workspace with the following folders:\n- /home/breadway/Documents/Hazard Pay \nI am working in a workspace that has the following structure:\n```\nAGENTS.md\nGAMEDESIGN.md\nGEMINI.md\nHazard Pay.slnx\nLORE.md\nPERFORMANCE.md\nREADME.md\nAssets/\n\t_Project.meta\n\t_Recovery.meta\n\tDefaultVolumeProfile.asset\n\tDefaultVolumeProfile.asset.meta\n\tInputSystem_Actions.inputactions\n\tInputSystem_Actions.inputactions.meta\n\tScenes.meta\n\tSettings.meta\n\tTextMesh Pro.meta\n\tUI Toolkit.meta\n\tUnityTechnologies.meta\n\tUniversalRenderPipelineGlobalSettings.asset\n\tUniversalRenderPipelineGlobalSettings.asset.meta\n\tVefects.meta\n\t_Project/\n\t_Recovery/\n\tSettings/\n\tTextMesh Pro/\n\tUI Toolkit/\n\tUnityTechnologies/\n\tVefects/\nLibrary/\n\tAnnotationManager\n\tArtifactDB\n\tArtifactDB-lock\n\tBuildPlayer.prefs\n\tBuildProfileContext.asset\n\tBuildSettings.asset\n\tEditorInstance.json\n\tEditorOnlyScriptingSettings.json\n\tEditorOnlyVirtualTextureState.json\n\tEditorSnapSettings.asset\n\tEditorToolsSettings.asset\n\tEditorUserBuildSettings.asset\n\tilpp.pid\n\tInspectorExpandedItems.asset\n\tLastSceneManagerSetup.txt\n\tMonoManager.asset\n\tSceneVisibilityState.asset\n\tScriptMapper\n\tSourceAssetDB\n\tSourceAssetDB-lock\n\tSpriteAtlasDatabase.asset\n\tStyle.catalog\n\tAPIUpdater/\n\tArtifacts/\n\tBee/\n\tBuildInstructions/\n\tBuildProfiles/\n\tBurstCache/\n\tPackageCache/\n\tPackageManager/\n\tScriptAssemblies/\n\tSearch/\n\tShaderCache/\n\tStateCache/\n\tTempArtifacts/\nLogs/\nPackages/\n\tmanifest.json\n\tpackages-lock.json\nProjectSettings/\n\tAudioManager.asset\n\tClusterInputManager.asset\n\tDynamicsManager.asset\n\tEditorBuildSettings.asset\n\tEditorSettings.asset\n\tGraphicsSettings.asset\n\tInputManager.asset\n\tMemorySettings.asset\n\tMultiplayerManager.asset\n\tNavMeshAreas.asset\n\tNetworkManager.asset\n\tPackageManagerSettings.asset\n\tPhysics2DSettings.asset\n\tPresetManager.asset\n\tProjectSettings.asset\n\tProjectVersion.txt\n\tQualitySettings.asset\n\tSceneTemplateSettings.json\n\tShaderGraphSettings.asset\n\tTagManager.asset\n\tTimelineSettings.asset\n\tTimeManager.asset\n\tUnityConnectSettings.asset\n\tURPProjectSettings.asset\n\tVersionControlSettings.asset\n\tVFXManager.asset\n\tVisualScriptingSettings.asset\n\t...\nTemp/\n\t...\nUIElementsSchema/\n\t...\nUserSettings/\n```\nThis is the state of the context at this point in the conversation. The view of the workspace structure may be truncated. You can use tools to collect more context if needed.\n\n"},{"type":3,"cacheType":"ephemeral"}],"cacheKey":"file:///home/breadway/Documents/Hazard%20Pay","toolCallRounds":[{"response":"I’ll review the project in three passes: architecture/code health, documentation consistency, and folder/org structure, then I’ll give you a concrete validation report with risks and prioritized fixes. First I’m mapping the code and key docs so the assessment is grounded in the actual repo state.","toolCalls":[{"id":"call_D5w1VZqxi5jDnKRbfflBqlwz__vscode-1774363162390","name":"manage_todo_list","arguments":"{\"todoList\":[{\"id\":1,\"title\":\"Inventory scripts and project structure\",\"status\":\"in-progress\"},{\"id\":2,\"title\":\"Assess code architecture patterns\",\"status\":\"not-started\"},{\"id\":3,\"title\":\"Review docs for accuracy\",\"status\":\"not-started\"},{\"id\":4,\"title\":\"Validate build/test readiness\",\"status\":\"not-started\"},{\"id\":5,\"title\":\"Summarize findings and actions\",\"status\":\"not-started\"}]}"}],"toolInputRetry":0,"id":"7d0f5448-70f0-469b-a90e-72364446e9b6","statefulMarker":"QOmxJqIyvZuoGXTGoOiqlyYXPcu/juAD2s1hnp4CxgXSpejjKGeC0eCWQkXVIti+As4Slw0Zt/+q7G7yWPHBx2aA6k/0u0ofrA3LMrEdn6cFq2MIGlBGaCbXGkJk8UCtExoGpm5m4gRuVjDCAFZJQY2xYnZXEDljSoQeKufdY7nOHdIxbKGgrjKaXQ1ch+OLjj1tGUfFNAT3fW1MGQq5ZB6aRvLnuH6IWrr0yV8xfh3q/yazuIahLJhY5c4zaksFVt7SGCTl57DRKMCMCYG3OUzn2W9WW3BRweePqKUkzZRFUocrW5AIh2jIF/cI71kYYsHLjikeLctxsDFhfiG6pY+gtf5jOPpeK+0AoLctVoGHbC1Fi4K+6OwvyuMjdmBK5xNVdkU5DY1d9u5eHHFvYpDyOO8UqIEy","thinking":{"id":"3/R8WeLSTPMOUkPD8jU2wuod3FFFF9dwCz/gfRAvvTOPEx6arcK1jSWLw++L7uD3PGOgqZ9XZB481UUHi/P9zF4++kLPdA0fbiSs4/dOenDB0gRYxtwHuds87zBMSGjogE6UrCOSgobqG8f+IsdeZKouyV4iJ/lkvEoSQ1RrNBqXZVAKrUhcp+kBA9EjsOy6waVrtOnoOzCLyrpRWiLVfVWaEgjDqzmcLqha6qAnEMIdC+8ps3lIbNaulC+o63i3RFnNJOotibrpIVR03aszOY/zOfOcgscbwMgErukIDJFhEJFAE9l7XCs2AD5bqJEt0m+mFd0r2AOOqmmIym2K4Dx1tBV+ni/7IOqRk0d8JbU6geWngzx2H8sDndV7x+bUr9nE3yze72PyFNfkaU0VQKryzQp8+w==","text":[],"encrypted":"/AWX2ssTug0AgrC2QN0pDR9Z51+EOHN7nhI33na/0wW7tezujAPo1x1+HPnfxQmx4e7bm8qGdtkS2R8KNFjn6AGvlU1cK3JyShkmF3HBAQkYPHNqGd4Iblkumk63tjgnFF6hoioETbCQxTe8ZaZVmd70EX5+gNYR8Necc1UFdO33OXWfOIhATzWOW0RgyrtliL8ddDl5DZurg+aDbl7KzNQ69jSDuP0WxTngma9EtbtCPsKRLSxtb9xmHN4CLeaXelku/drKnZKq+0NTPTHILK8FE7bJ6//gA7dv322fqz4eFAOLYeO5rEnxRaAVcQFyEvsAhmOkJMNzRaJTJZ7rz230xkzrjZrA4xWkKJwyiYtKXOyI/REqm1zfntnHipinwz6aG5kVO1EAAaY+s1Y77hKNXVvWCJKdBC0ubt9w8AmQdNM0bewHPCatOeE2UeZF/n7fABTme7r4WZrXDvRf8N8tzDclPNi1zdmoMZv7xZuRyGDRy/J0vA7HckM7QknDBrKC90Ij4BQ7yS6OCiyBzj1rmI50Ih9roW+0dBrHiewsCd6HjQEDvXmWpR+xfrlWGG184DZPuHXDlQhaOV9DIVdiMsxee/igTsD21Ij4pRs3ecZGsJGw3CxTDm6POCPGtbArWiPtXyFrkuavBc/FqWQd6GEiQimgwaT9lb+b+psK38jFC7a5Idtn+yc0Rtj4wIkDNy7LObZP1GRHcGsb4CJyyPTYdAyNZ8hv7v0izUanNiBV71IdvUaJe6V5JyZ2xg/x57FPHJKwQRasGj9LMXRZu1a+Di4Vchiu70rzddHngVe8HQNYReMKZhaBqWwYmsR3+bEy1TB7NqrFNsohNdXoHEknOkAGi24H2cT/I24p8JEj0HbLEn41NtwfNAgdeEEeQgjKjlRx1gMBO1kPST/Hb/q0fKVMtpLoT2Ga5tZVtCKcVz+gpyVe0Xt360qsm2OAt0T5cu8Pay+BDmJQQjNHLkNPii8LGWOXbhRRspdXw9kS+u0f4/03pUGZxFyYdWGwrY5pRswsLEu1twE0WpgpEuHkWB1rprjg4GMj/mzd0RM/0ARLNnEWfLz8VM+V6CEgLEb5opGWLyI9i/j/f6PLQFsxUwij8JmipHiKGFMM9xt3OZD9tvABXRepcESeCew2moBylw5JBKaHezjBXokY7zEAaFVavv0w1u8tmQ0wg8Ki0Bkeq++s3390dTsbR1P18Z37SiljF9glYIG1I70a8rCvXjyKYwNS2tV6+evcFiNvuEnrbXd+AzEmPNRK2Bo87mZhm5XOaxCrPeFzRBj0Y6jFt10D0WUb8v2lSufAc1jOYEkclLBIMKOAxg6R5Y9cumGnquPVTS7Zg2uXZbXglW0LqrLHyAHcXLF3adUtDjlm8Dz/JCEW1hWSJyaVW9OP/Cf53zdmoG7v90wxl09h4f0mq2sBYzvu86ALf74sxVWveZd9OuBO5E6Jdv+Kzr0pKKtHWLDPQYU4umn5JMOZKHTYJ2ZqYcHpgtjK1EVOaWstA5j/paALs59pnv9WOBtGFCUnH1OatQKrjVB7vgRJt3i2SmDTCkwHZBe4W1NSwEtpcLC8F4lKyi3PTP45JXSVJaDLtIBbcuWJ5xSBG0nmMfIROh59B/eo4R0X/bR+cVltGGrKh8VDl1+EuMmEp397mo+ZBlXiQnB3GObNY/Lgc7xKPAWsekkCH9i9tFebFeMpUmiV19Q1r32z98A70jNQtazTZcHxg6yDD7KoazKhed2HQVHxsK2dqO77hGcSS0XZaZwxUv3NiD2uZtK3UnFtdNZUlXUpYOkSsiw6l1Hy6DyfSvmvSoiL8TiLP4KbUPVmWWuENPgrqeIcwWTv3nDq3JU8cFflXS0PR7syDSlu3XfWeYvUtlHqjGC1YJjidEtDzZsnTSTwYMSmRBJXWXy4S/EACcxOdd00o86aWuANRdzH8qlJGGfUAeACPKx1e1mpQRq1LUQRYGvQTEletB0b4zvQTDqg3pezxHGe/tWklAELnqp5vb2+4S2Ce+lzBTROxkfttP8EpOXNLdMCPSjMWM31vkhHVCdE0EDH4n4rnoRS26KSCrhcrPC31bGF7h7ofQXmDvOTPOiRRH3FgwAccWC8LGWznDj6SNN7WGsykVLX8hSYY6jgjgbqKjwrILbIrBm7Mz0SEzeTQVb+txxJowOOSgKdnWIQfxmX/5qfgyCMWzma8JXpQ3t4FeDiICSda+LxGiwTExqkd2c/RV82DHHD3XzK26uOBEXKFN0f+hVTK/jLjWldmx6mt3Ou2+K3jcZF/o0Q0DCqXr1HWZ9tKNshwb3UJbWdepXHXvnGkEvWPR8oqedLxvfp6GIQHpK8xr2M4S9nUnRbkDM7P57plPrbJN6wE8WEnlwgnBrjv9FYJmpEzPEZvKXYH7tbQfRODidijzeP+974dxlUCorTs1nhvIFzbeP4EeU7unX5WNIxx8U+Is2NjlkvzNy6ko0bfi9vewZQaCpe/AByOUDfm6QnyKImyzd3wnJTNyLdehGqiGLDFbsl3zJrgRoq6XR+KEA12Z0MhFdbm5TN2iF4KW4f9+vcuIP4jngr9w1g2FtyDYDTcjRIu+xaYvwqjUBYZpV2LocOgZqHnZ+6TxUzw9Xo6cAKWDgjtCwyNdIpwi7NppHA8/XKDBN74fLv4RjdzoqSrkcv25wqKg0tv4F9BxqhfzAlyVXILYj6p0LhkdI/gRqp1MXWbYQ+O387J11QzzfCX+j0KmaXruJhSqtrzLvAZXfGI/G5","tokens":141},"timestamp":1774364026627,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"I’m now collecting a quick inventory of scripts, managers, events, and top-level docs so I can compare implementation against the architecture guidelines.","toolCalls":[{"id":"call_P4RXp8Cw4AArxqOlgWz0umKT__vscode-1774363162391","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts\"}"},{"id":"call_fF1gzmbRgtFlEURyedQpMTBf__vscode-1774363162392","name":"file_search","arguments":"{\"query\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":500}"},{"id":"call_oL3mkcnYgeaLxiBed9nnS87r__vscode-1774363162393","name":"file_search","arguments":"{\"query\":\"*.md\",\"maxResults\":200}"}],"toolInputRetry":0,"id":"24c8640a-a4b5-4c1b-bf64-aa47e2176f43","statefulMarker":"56gr4bmoY351RcCbtDsJjrObCOL3/zSxgKVMUVzHp9KiC1lgMsND7w4w+bdkD2RA2wM9kFdGb8Y3C7MY/Q/Kl/ffJ5JhgbYgLYJYT5+c96+p2CHTxiPam4fLzsmmChJGbYXa+7YJL4HJfkJgqyJ0ZsxAYshVarqpFugQQQAgdFywA2d9i3gEAYfVR1k4yN6JProXCqkf86d0eT4pzqWq+21AW2c8b0Qc/Pa40MXNAoL6JjbEiqk/X+j+xcT1pal0xRZIK5Gz/bn1H8/TtIPMtO1AGvZXU4iOeH5/KPDzjJ9ok6gokwSyLLVcd+bKiIhHcIVlbC2GVldMRfiCsC99HWCKoc4HXgVyqKvGBzRn4wHuL/4deLa4Lqs4ws7NBe0bX/H1UcqOjS9cP/ZVln52pOR3X+vkrCgV","thinking":{"id":"7fXwXSdFKw2tMakyRdhH8aHHKSC/G9+8tG4PbVBwr1TZevdMPg+kTW799d9W14qlh5NsbZAUpsECPJaIrg3ONABwdvbLPumb2NEFCO7L5HxHGQ32gE8o2+NAWNyfqLTdCzCs2ywKBDSQ5mcOFWh6tXkKgpeeNQplbHTMkHmWFd2sIzsgcH21EcQ1hj0otYzpwEK8Y/kkUa0FpywZ0hK1IvsrDVy+j5y9uvEyckKynkFBVJOBABucdFNlF2lgNv+G4wTuM6u1KqXIjjb4u3N+RHWplsN7aFGXzzgjZdPChZbagj+Go9sz4OpqnJmTgrIEOjeKM/YnszY1v1HLcgKfmHwmTiKJNC8Xbba6WfZ2I0ywFcRUISGtSLveiu2bt3cfahYY/F6MTRhIZk8XiEhP6Fv+t5yqJw==","text":[],"encrypted":"WkyUGNRvpJGkdMpZwJ1c+X32+9Dx0LP6GuFBDKobxmjGLfKmmI9E6Kz6+YUWLX+uuOfm214aYmd5SZ+nRzJpJDMlLQkvpfa7pqFF3oH/u+RCfw0/ACLp3/uB43oyfpSUZyeHeFN2zazaapWym0TYjqigOIjDNyVEtPdlnJGH8eqkIYe7lBgb3TZrvaNbNh/vLos5a4i3+qxd7RbTpvN7beU6nEXhKVh+Zn31t6BccyebT2x1omqZeGCzQyxUelBHKdDpQmeOLfbnH9P0xwVyUDL1Zi7zYSnp97y7wUkyl6eyhKPRATIiwuqBI0gaw8W+oJyUnzx18JTETFrnPISxcaPt1RJoYSBOty5Vc8x56425S26s+sDmSQ+4OkbbSOwMTFs8uAyzllndh5mDNul7rREssyb4qrjNRyu/B/52b+NSwE5TT2MxbKEvIYYdTo7Ldq6CmRhT8QrIMiXoWrUWniZQ0wY7jK1YDB9jpoHUUK1L2o7CU/yv2Pn5EL6el+e4ERhCrHaflz6UX/Wf78MY7ZCulfiW9dtlcRORgc9IhiIldqVRMY1w9s+EL4Y9KD8ry5GUqeb85QU6miTi2nayxixP1NCNcH3nHbtnaghTejJulm0EYf8NE69voF2pZ63TZAz+neD+JBE/PAYNBfayItNSJUcITQUynknRsv97katnx5VV0f7nGZz3hFzA3YzDNWr5Oj18xSjWWUfN+rvrsb83fmjPMFkHG4EbNIbQW7fNj4J3xEuuWZlwlqdPE730QqlG/mBxWicrvT0mLoK/oF6lrfhr4Qq2k6zvybUK2wVzD2gkY+jYW2wjlVPALUixTgVzNZMaKEbcahSWTibjCzlBQ2GDaskvc82nqBKhn6vOeWsUCzdWg02ilJsn7CB2qKDByv9oLCotg2/MuXAJDBnHwEe926Jd5/H34wVqWHViSArquoPBzrvHy2iWvqCBntkhQtwFWRQ556gegvGlxoZhUqsJFelEdVYfFeazym5ZdGP22LDF61cEW14SvGhpApLVZNI1cTF7zuaEHMsuS+wq3OSYfbYi/+Wlt5YcN+TUkCMyKvJ0Okgk27vEEmIEZB0Z6cGif+6FaRfjENhXhwdMsq0ZJ5TWnO3tj3veVSLJANPaPow4+d8hK6Q1rXeqo45SQacXUD3FUNNxxIibES3h7VB5n3WUYltak3zcEydB4amw+IxfVSQhfCi9NMHhej1Hr3s6f/gqeWVoZt0vifOj4zqx7y2B458gLi7sNkYGa+RdE8rf0M1phZAUDPihwgxceNhDDHR4+8GiyXsoWP+6rhspx9rKmTEOHyU1LAoI7fICf9BZ+wXCLJN0oIDblnMqWCESm/Fo6gaa2s/z3r+h2VBydgWAhZIOJ3cx0Bpqrh61W2ISEQhEnAP+kI06XP7QAh7UYTk0EZLzJzc50CLn0hgUrhd2NuSB0xVt8byCvQTGQWTf1ItwcEZ9qLIkZt46QgVJ92xRtU7dnjUAGMCyVuF3nKux0lSS1g8vL6/F8rwwAAVFoC2IMDg3SLI2aCRadiE01Y1UKpet4hzhcS2CNiq67dfgNGC2ibj3JCQqdG9+LPouvr8DZchJJ0iF0OPGSx9OALijtXzL4jDr8lttmSqiR3pQ3d/7bUM3J3YdyVDSzTH2QHmcv5PjpB6HQUkfkkBZh+AgBj3Ed8nKLCd7tRnlTOFe8K0aBJ70137lxJBVIB6kAA==","tokens":29},"timestamp":1774364032865,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"I’ve mapped the repo and found 52 C# scripts plus 7 markdown docs; next I’m reading core architecture docs and representative systems to validate whether code matches the documented patterns.","toolCalls":[{"id":"call_7yW21u1rF3sZd4tOwFxS4rT3__vscode-1774363162394","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/README.md\",\"startLine\":1,\"endLine\":260}"},{"id":"call_JcM9qa1rdsgNjoqRt34kGRPX__vscode-1774363162395","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/GEMINI.md\",\"startLine\":1,\"endLine\":260}"},{"id":"call_HrmKYzWpEjhHPfgxhIiZpojy__vscode-1774363162396","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md\",\"startLine\":1,\"endLine\":260}"}],"toolInputRetry":0,"id":"6ed8fbc6-776b-4a2f-9982-c16225d189c3","statefulMarker":"IFKSwgzUteJ8fvMpR8d2yeuMdPk2nz6A4jEoOU3J3dkYFoWdHXVjLg5WKXMshpPlRE47yShWLAug5B6Oxa7HbZ+nJFiZtIdmxfeeWuIeeztqIRbxRIcC9udzkNmw4G48dBcIbHW/ivlOxcTpMHT0iPeWdDb41xc9iOnHo5YFzjEVWRtReHBuadOaKnbefZnHAUDW7qxv3T924k9h06U/6iYOF7ys9RqehiZLz3hYijyhuBXrvcKYSlrIsDV5L1Otk/OqIhRO7CE7IQhcwHFAmlWx9xrUiLtrARsFTUWp9thvZ1ywXoYhOglyHMY79wLLpDJKLcmN/oCuOXdgCbfotzAvFQKCJDTx23JDA3Sw95OG07vChVFCBT4YLPdSrHpNMvCDKSDipUrJ+SNt6JyIYh1XyAgrdemb","thinking":{"id":"XOqPsO94ZIZRZKSyMh4xCN/yRbaWZiK4/2A7mqrBIePwb2DHToi+nuDLbnizQx9cd9hENX6pu0Hw+trNuVkB+VH6WoIDV499XTktjS1cnOaUCMIGXt8c1tXlwjBrm4V7iDA7vnzwl8MisMuHmhXBLWCkMNh/VvogW37FwHmfS/FQSNEvqVsG8+doR9KdjzcvLmmM2NuRMmNGHl0NafkjdoEouRY1LqH3rzOswVaQ0dovaYq+bt/A9s/yB/xFu5/dxVBkUDJ9vUzgB8gG57YY3Q9RikuyAwcOwWjKJwERp6cMSKDolsVQUiJWJY+Lr1JcQCGBfEvCdWPuMg1Vv6RvKAbe9T/QTzn0qNZrrAGyiAbYlD45dx/o8I+aO1ePbmalHYrcHyjinoOjxJ7a6kIthg5pd+p7kw==","text":[],"encrypted":"l2QhyPAqYHEZ2D0eGsi7g1VnKoHeRdfEh3pitOtwAN1nuRH+hEqRDlo6B+2vdGSFRoT0k0LHk1/kZ0C1/yfJfmbfoj0cyv+ldO+fEAlFttG0JvHfg3cwHA/UbK2domQSQtJSzcVwSwXu/qLGbZeIwH7LmzfxaOsY62nza4s3wFffIZE+lC0A2n1IB5CtqJoWRmyoG+KBuVcxh0gLn8KN8s4yO0xoZK5uojtQRuAgQpqdOK3rYbNopoAYffhuwNrHRy1/5tOWRnPihiw5pHvailJhc9aacioiObgJPY/qwUsh3H8MWM0gpliDi9E5aAz+LMjUSngC9OWJJSXmF57ZTZTDOE7X2H9Pv6Iu1qmolmGLaJmW4LLzTLEgMQHrn/34xK6mQUzSd+jTdaNsfFyDAr6K5MV0ndaiA01MNdu0lXEYjIwT1eSFXuORc3gKN+65zXORPfDmnMepoJBwLp9/QZzC4BCp/LLDRjy4UN+kFleSZP9QIx18ODKt4nq29xfbVpripZCy2gEycI+s1piQ9zGuimLp9MIrqXBPzO37nCJUZIrVGVnUFFszELvVe8Pq0CjB6hAdB8BBmFBXrbE6T5iUHXjXVxyBWJufN00Yqk8Xa7+9imlaZvUnBwl5sfgNWRP3GDH2el+QRKIRrVv2ulnolCotJx6CWVV+UPqFKzJV6aqtOPd1AYokWVRcOvKXEte+hGQDcP4XGI1cmV2j9Ldqm0cCukek3/L4jr335lYe0HtacB9NRrB3gHrCQWiynyZ8jLpiICAUnsyi/NZDqM8ONu6lKkVKARmDUYCzopqzT37x8J5+H2abbN5hmxn9oQZqQRIqUn35wMOngFYngddESy92mSYSoco1lsqENuXh4Osm7ZItZa1FwmoCa1kR8cjIrWASUg9hqar+58NJKHSM3UWeYoGGfOUm0PAWlHzrxitB2cwxkHwEhOOF1QZ2t1FNf8SgQXRIi3nrfw3imlZi1fZoz58uBfmfXDF8rNvNy/Uze/pCKwraJ0m2hlIDpqaG68ohu2ud2cUANiE07eEKHzMxVU70OlAcMBeMxh2CAaOke+KtvTp4JA+kkKL4zKNptjMsmH1aOQOREt0mkQuYhBZPd4Qb0To9a/MB1y0dOCzPsfoqDC4RO0FhUph7VsfSAMOb1UNqgx0Ef8fsnwMu0AhrV0Kl4glxH8qmF3TpoeNS3uv0Buy7wBOmU2nhhREqHwzHVcw84f+uyuHrljVi1IppQrf/n0cDrogetGk8+FOc4lKyiqH9GQujvxVSLOMBGTLATbN7Fg3ZezPm4odGFAhW5T3bd1jH8hJb/ZmyseMdCnAuJ2CHY9rvsGzCf5ZCOuZvHonMGg17h0F915L4zr/ECnPD97ElZfDXx2hZzt+M6lgR16pBiuwjDErWZxuXUlrEUdI4CgUOQgpszlBcDTybyLLZH+q2jQjyAoDH2y74K5UM8RXbP+/GQMtFHzXk5HyZ2Uz5DC40jymzmGEfa0Q6fWxAZNNjrzyjotflJy/v38XSe1jcKNWTtcLgmlUDDbL+SMLqyguTVDxXtryp46KGAIPrSppSUEh+vX3gDbrnmEs6UPQPRkzC5vhRTOzD/13Vj8QWFsTXyFcfkP9nVGTzyX67l7uX1iVhGmgCecQWqvVXBvXDxWAWogMutydnZRLX0vGw8SdRzhpiiPn1EZWto8IxPlvWC4V2GPn75YZfcUlbdnncT8Tbp6TH8V38sMoQDMPJGnG4bwVLSUo52u6pFCHxnvjzPAcPPeFHYG5FYmv/W6V9fOKrWc+fycH37LqUG+s=","tokens":41},"timestamp":1774364037645,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"Next I’m sampling core runtime scripts (player, enemy, events, managers, shared systems) to verify architecture claims like single-responsibility components, event lifecycle safety, and ScriptableObject usage.","toolCalls":[{"id":"call_DYaOZ0jL5CNlXJbw9WvyZKsR__vscode-1774363162397","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs\",\"startLine\":1,\"endLine\":260}"},{"id":"call_V0ERG90ZXNqqcm6B3nT9AN7I__vscode-1774363162398","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs\",\"startLine\":1,\"endLine\":260}"},{"id":"call_uOwNHFevhaW8U4XrWknDpC8D__vscode-1774363162399","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs\",\"startLine\":1,\"endLine\":260}"}],"toolInputRetry":0,"id":"dd22c045-5710-41c8-80e5-3de57851576d","statefulMarker":"tsh/pobIaUvabO+uck17ln37lbOk1oXRABq6AfRRgssSk2JnN05gGzEUhIXBwH/cCOGrZWhGjubTCoVO6seZKnMZC30vHpCEyNDl3itUPOUhAIAD2TeMg5DbraBeUwpcDs8L9RYNYQY0CEThHW0u1YiHzKadYMYl2NVgIJDoKD1surfObAD8qIePvi8AJNh8XcWV6IEGscCMT73885LwKVEnoeIZnX+ktQI9Y/L/tQmySd3wxBr4K8mIvDvTGxlOEVanit6Nya6DwXHBIEj48dXeWl5Lak4TaPeTsHxSQUFXquT7ZoB3hLFnDK7kfLUxkCARc6NSScVN3hoZ7B31d9Wkh+Fsm6Vf2ysyvKctjSLUAI+j/OyKRAuvPRwapXrK8TcjHtjTn0xgkUPl+766ZsVvOojkN92I","thinking":{"id":"MZlAfz4v+tVuKZCIU3Q4cnouViH94kHrzk1Tq5ySi0yIm6XUmTI7J5q3RUw1gI+8sBShQ7yl4X+S91LgZcj+jwtF9+sbqIbMIy0Sk7ablU9Qtu/nKyxMrQW8G3FthwGNu0vw7Cq7MuhQ8/ihmXaZMgbizjEyCHHE3yN6lUBjAZ0CKTZ/fcZ2MYDnjd6C3A73M1mqAQVCHep6ZaraPQJ8pnTu29BlKHsBEwW0prUNNGk04Pjs43PsAMPm+kA8ujJwDmyJxIlHeAV2MA0/eQ6EKEgHknwDPai0dauDjn91HlMas+E1QQTXRF3Sb2aGtUrBKbdxJTt7auZoNA7O7rJJ4+pVKw7NXkO12rbNJgli/2xmqipR0e5OFJk1a04fFr6m9K9tb1OMKsmaZq0cE5DjSpqzciP+5Q==","text":[],"encrypted":"wkfiSr/S8lz6Cs9g5oE2KsT877qpSu5SiEfOsd2D/Fg3aV9lKO8AUJvq4OflfUBTgaxbDesVBTO/b1EldU+nCLIHr73d/uB3aNGnNZiAAsd/YbwGf2/3y8WxD2pAWFJiBDwnigd5aJuySA/SptT3+tPI4iORE//XSa+p7GdY5SwJ9zezknRFTeMpgwEP8Zf8Jn7RtQUVLa4qm/k+uJYlMSjRbke/dOM+cNzThBwqjbtsS2flmziSNds5ydro76MfjOEgru2+Qu4TM23zDG5YWFsioTTwLMzL/MJlnJLe1QXNPKACA1GDFVyQmuj/4OMxhpZCB2p7D6UqlAlJCRujMs5jQaNANg0MQUbCO5ki0nkHVXcLb3dYpRGNDF/GAoaCycJrZIMzGytFrrfoznux4PDa4CWNkdkGjpGi6UGPJLPWTrjmue9PI1rEZ9lqKJzsmAyDxEVOjG3j3oQKWdtoIwn7C6Qesjcy02ESnzVXp651BeDxJmhdis134KznUIMZOPlRaLfVgUhtJydZNSEDQmBrH9v/kuBDbvQdTUcwKhvq9CwAnD0rPDrMajiPaeZyW1Yw2jqxG94yZlGLvAcdabiN1Fn202QC2q9GpFDwKQYHi+BcU1iLSYiHO/nIyar5iOnYRx9unEOWCgl7YTT/3RPvP0dpmB7P6PmE7aF+ScaUTeFhU/z9JlyrGNhXs6M5+j6gyvQXofKBPrKDZ+a9RRqzkMxGaEXRcqqGUt+5MFBzxweyew6v12Ztw/G+gv1NkL2l4AI6ak/QjFJbOMgDvLQDuufrfll/mKISZ7Sl2xzPVN+6pfIKk7kCxHidDVOVeda/Zwx3QPWQNojHnRURb558TozNxhLRA8/NN8noRi88cZBRRTK13mMVvSsCYei4IWVnkjEqaf9+Lmvv9x6aw+B9CR+7nWgOg68/EwsBFm79jiQ5MUpiH3rVmxNr0Vv24LISE6a6aVteHgo+nEFVRauqPS5cCQ9hWryevy9QjxyZt29yaP1f8lDl2qdO6QTUIxJeNZpcEqiRwQ/scepZTsomu1LvolgNxoh04JXLOVF1Yiw16W6ojfBXxGPSFhyWmtYChDcSpObZABpA8aJmW8PHZq4xa/PzwxMp253CBXbvXfsmwhsIpAxWKnx+t7Xr7Y7j/1x0xWYwxs8G/K5BGkt1meOFAc/Pziaprrf+iTZJ9Fyxtty41bee7Xbci3b6bZl83o95KRhPJB0Rc3By1bdp2kcfrgYRFtav03ShzMnpSMSAiNP0w0I92jOle2XbTKTyOCE1Fd+/Jsfd/FVRIRM9isYEaC/QhZuoLCyIKLY7qZmLjVSMLT1CD2hoke/ZKKvJOfEU4xev8z8Gs/BC1lh2tUMyOKX53HfD7aJA0vPMffIYlgiifShSbWjBC0mngNzJbgq0Z2hZMtpscWc+0LkfnK+1ymmXU09hk1IQQYLaTQ10pnwlIK11ZUa8EgTmsOICsvAJRmGf69NGm0GNwmFiNUFC8F+bXdn40a6PAddbFMV7zBlWjeuACjjJ7v8O+NHDdDwkmPchU8Fnil5rPDj5eUWvn3Hjg9KCA+XBeYcYg71SA0SD3CJu+CGvmcMC9fHcmWg9aGhf/vta9DfaKuxovkRGmi+XloqBr1s1xKrRCB8xpTEOwU+s8nvEXZxE2Eouv1xZmsJtAI6oBpIQuziBDVikL2kW/wu5svar0xFNjYMAP0ACsICI3ayY5jjU8S1VBwN6xq3N1S0DgDKeifVLsIoM8+qTIexsG0asttHRoCuwUHfkRWAacXbYTUreakPK8iTrVkaQtjRtfPBEuUaNl9oND6B8n8n/IYZHUTN6pzt0cemLAeNbk0yZrC/jqEPKRlPfy+lmLxJrFmrwrKr/h5stA9+9D8wpkngB+dYDY+b24T8dTj9hXnKMo9n1GKseKGwMry/FA+y6903AYin+vXDqibdOlU1FOa3pVeJPZ7JM/JuAuqtqRPUfOKn4YtD5vvSWC5Bu3q2Qx27PGqX2Z8FeqKdAbbDGtW/nWk571BR0MqwJYWMDllzbZqe2tyGgthcFsFrjWbBHepI1mUDDbU0uVwQUCfRxaU1OBRtIrTWRDXLnVZsBBHpG+2wkFhrHkF9AVMbigv0Rhz/W59iA7aygRCWvc2nB348Gt5ZmnuEnCQB2bXPYqs0=","tokens":86},"timestamp":1774364043725,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"","toolCalls":[{"id":"call_CI2ErptAaV46MQAOclyum9if__vscode-1774363162400","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs\",\"startLine\":1,\"endLine\":340}"},{"id":"call_YNpQVJYiCJ0i23GDydiZmSpR__vscode-1774363162401","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs\",\"startLine\":1,\"endLine\":280}"},{"id":"call_XrJcYgpbfmHvBb2GJqPeCLaZ__vscode-1774363162402","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs\",\"startLine\":1,\"endLine\":280}"}],"toolInputRetry":0,"id":"96185fc0-d2e6-4cf5-98ee-1e02c96c468f","statefulMarker":"T6kqKj915DvOYIvOSevl6MjnjAQzxfrdWsHi2fyzcr6JgjMQAhjox20p8PWFUHEU1kRCRvr9Sy+frAB2TLlcir70zGZDxmzWyyK9lYbVrYrSsF5RUs8/7GGuctrL5x3vCU53VpG7wxHw5I/akBOxiHvMz8TZRoWFarLsfDR4V6mC0qsHlRIot4cGLwFa4I4PwtSYfrev18Sp4ugo8V9H18xt0TtHN228LN8UquwwgdCoWOPtZuaNJlcaWh0dOzQp3z8tr+xa0qojFSoXDyouBv/biNUz5ezm/VKYwox0KVWQg/mcO2atBONBAjMcgCo2mc5f3EaTai0SM5IJRvCW3QkHpLV3mdcf5bH5snkjMRS3IsLuTfOaIoaaQw7WFSZMQhDXJ7YbbxYOIMoxYxj7bqRH8Y1pcBYh","thinking":{"id":"1jRs9pqb6L9F/1W1DQhz9eXvOELHle5+v/tcqhgQ2eksGiWqiGmO50hVodL3zIIBAeM76dwtEuO+sVcweA699GNBVnDFHpNFuB4eMgS1u69dD7AZ/C3Qxskxukk+o/ARq7BcKNL4gBdZm1+A2K46lXTw+xV7ym3i3RcPXlELq/AlNS6iSueEI+8dsMlGG1iWXTo3URIIIASV48ZXrd9gb+Eo4TB85MjZYmhuOerttiCifwSCUUDybIPg/frMkcLRhVvC+6iGAavKD+3ziUvtljizSZtERqFY7w/mNXDZ0VLgGAUQQEfR7jHo/pG1Qk2MBoZOD+sWghs6IWnSVmXqGQcqgodw/QYowFYV92d4CKXC/5Hu50Lz7ljqTJiUkoAnXz87p3UTSqsVejcMUdgaBc7wWXv/ew==","text":[],"encrypted":"B2qA4g2UMHAZ1fo9JfD3QnmNXfkSGsfo8bn9YXjmlbA9OaGA/pukTNAYfBh9KyZjQnqA1Q6d+cQ7NrNAh1E/nRRmQO5t077CAotb9Y1KHmDZYFRLmPl/p9J+TIy0pH+8Z2DFgZrI6lzOxHWTnKjYGK0EwFA9xOGdJWkq3EBtt0SEFNyZlanUolyUUhRxmmw4ZtcFvhsWxBGmgJySJxsv85AseSZL/fGqslSVlTIhz6Us7vj50l5eRq1hO610YOXhgUXEclx+YCbY4fhbWVmrYe7004CY6ZwbQrxewrk41VB6Uy8lcK43KUxOhrPHf7fvQ4Kpm3mEisqMmGEmDlZjekAUNMoW9VsdxacsCX2nDfjIA83v3ZEYEgIae8Ay7xFOgUH4PfG/4Y3p+tgysp4XCsOF7AlpzVajoI6EDVzrxATxnXj469RWeoXeGHgLXTJuW+xDm8+fi1b83vORgDK8ks51Ez62lwTku7p/uCQLBi+LNmg8JY54LJW9hTNqIKDpMoXImLeSU8yVfjiQqLf9eOzjRPtaM17N/SWTTVxAHeL3olxtcDH9cCJlnFCJ6jxN3Z4vqq1YEe4i1cqOhlkcZCQYR/WcWkKT+WOpD4qmvLeSb7mKm4+vSxc2iTfTpCGW8Hu9wsXg2NxPKAxtwCP896ZcFDvuHmUfUdcfwU5JqTA6QRKGkeOi2p9ac8Y4MdkUmF1J79uIhf0bjAUH18KaIALq2+20wcoZP8ErdOOFyNbA3oh8N68S9CNKUaoOGxR8TkbP9WfvMh/ef+Ra1h1v7STMtcAD95tIbI/XX1ycMgr9pshXOO6Bea7VHOsJmL7eC8EZmsOfgUXtinnHL7+qj9LuBLRS3SbqiyVLIo8TRlbva+bd9G4iYUtJA3ok1yHma1BwKyDNfOanUOZ0iI/UqQE/8zYJ4lW7ThdZXv+pfbbsRGPVrsSv9mzCYEMIGkjklQAuQddUlbxB4cGXiQYz+RygDn5Msm+/OEUgsF2JD2wm30jeETzFk+T9847h8usnOaT1RsBqdruol4kSn+WFitJIaxb2OIYSbYRt+Xbre1nRxbpqfUcdLhuWT7C+x2vFRxkDeB9lCruWfc3m9zwEAQW9xiGStE4UyPfzhUW41mJ9NGy7VfIdfT4O6r/Gq1nO6JgAuBV2sZuKwMi9fS7Zztvdy8D97449raJh/M9TpO3GL0KInbQ8YMzApjri6yVTBupcMRCbsj+xWDeHLN2GJsta5cXfE5RoDOp+RiGRjYw8i4y0Imi2zZUNG5316tcKS4yWnxDYZFNhp7tgqV7LwEPcoFJI3szCfNRbDN/IdaHPsEIaX2x4nxt9Q0rhL8VE1jY7dxykO4hjxU139j0VI2sWY9K2yKxIJiZKaS3ujlscWjhRLN+ET9Y+iIDzOuYjVnLFpx9RC7V9Zdgis+XqW//WqxrmEpGqlP+ewnYkY0lbHjXvw+WEL/NMy+OVGBOK75yqUoFLaQEKA+tTuiDRUciSTxltTp56o7OX6+ll8z5XXA0oMC1ChnhRFaGzJWKbVWNBSi+C8DVSr23zbMUN9otIvGnAnl+KlbL42w==","tokens":14},"timestamp":1774364048748},{"response":"","toolCalls":[{"id":"call_EJNSZQ9ESq1n7HQk4kWhYxfk__vscode-1774363162403","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs\",\"startLine\":341,\"endLine\":640}"}],"toolInputRetry":0,"id":"1e8cda7b-f7e3-478d-a6f4-5b165343ee1d","statefulMarker":"XCzZfjpVr0DhiNZlt8IevfCyAFAJywBTyMgzTaRI4SuZlLPeiFsv6X/mCQe2Q0BXAY927/QaJNr8qQY1SeUT7DktQ2FQcjbeG8HFjAxCIPgZg0MSsSZI/z2PgqVJtTWr3ibD+V/BWxpop8yTvt3mHVW52ZYWu8ZPGeDspH0uR2WlaWPfWDxoDU/vZuyqNuQP2VS5MPOvZNdScdzwNGMoibN8qQxBeff4PaczRJ2RwYLzPJLZCjAEbAZQuSksiJwmeKl5hSRZfW2ZHs0taJTACJmI7+V5U7Ij29lP94RE4RFSK5H8DzWe9T4Qh0zDHnppq1ostgLNm9X60VaGLbd3tpDpnmNXpUVDe5cP/C/5W7r53yKoKHOS2ImvGEYXSqFdy51RNAo67Js4LuKIMAwxoawlqgZRFSi5","thinking":{"id":"zQ0WOubffs/WnxPH5Gwr7bt6+GtUyWuAKcrFI4SC4+uvhiz5BAWg4QT/R72Y1T1OdAlCT6HusAh7GG5phlTh4VHSbrQvTV6EdrMf8xttXg07brRz2bTfmqdC1sfG3pAGdqorSLUpjdo+oTI/IANQHIBiwen2Qey8X+v5xK9auk7KtrXItsztSi0ojV18FDgbZiVUTNoiJw2iiWzcQ++N9vgjPRXKfwNnuMDHXJ5ry9LndYZ4/cdvi1UU9qXYXAEl4wSR3jTbHudkJMfVES1AR0x3zBkrWh23jnwjfDWTWJV99ju5pTldMVFiScL4brYsBovGSiS+Huu4kmbfK/PsRISycCDmJ0S+oQ7obo4Yn1CFOzifZoLQPyh2CQb5zmq5/hpUY2YX9d/VJPV8d0dT+wsWUhyKtA==","text":[],"encrypted":"qbTqcMkFUh/rKyVKODXEipWRgxw0p7HNda2XsmKri3ygFC/R7A4F+U8OMBDqLILotubBZ2Gc+9OqerDsY6PNQrOhSpFkoVpasZUshJYJaHlMhLtfdmnkplIiTeluzPPljg2SOsLBjefhi+y5IOqIpIHL9ogdirPCSjE/ovIo427dSkSE2UhMnloSwxVAVwrEJeP3LoN9KlVoDx16Nx/YtS0WTh2KQXRfl4QKjw0CAQIBu6S+ZqyK+jbVsY4xcPGAyPV5ufdPlbuKFHEgErDY5bsL0fQz3ZZtgQVJysPlzGDluFbdW/YWt1HNlOkR4uoQa7CflvsV9avvwv7RbR51R83kPA7Ge3c9gUBcOlKubFm1OToiUYnJ2OeT+dHoIzyTpScveQefYkue6F92mR7quHV9urlknyw8M28goFniY7aFW494iyQS/YtQtjFShMDIfwCWOq5Enh6OapwO+zhazgQSAwNLW5k/6RmryLoWbZVMUEbcuTk7fq6NcqevsUmkOLYHpBbOV+JUYCgA21ckeOsi6J1xo6H2RLZoqsRIYwJXnZX3xLcUyWB7BAl6oLfYs+piEneKBcSHeAguRo+zhNcd/M1r3NHmKN+p9nIVRkf9B6gnnIz9ICyVGtgVWUIXxDfalvVeb08etrlCc+ASp6n/y05p2A8aBg36svG8/HSQ4Co8Rkfh33gB76piLC+xjXk12ba7Jccr9hQvfOzgp8EaEs+oP6j3toxp7lBVl2kmlgSUrypxPLJPLbVz1qBddRiGEIuc2VWFcbdZEde1Y8SIbp5G7ZTD+dG140SYJNKPWZxSeJt1DuDDOTsrU4fqFNs+WrV40jz76gxW9U2Klam2JIJK8yRsERyZrYESivXLSw5eVvbchnbuwr1/hFs9MBKrNBNzN2vHkHwHhDthhQS6CBGJctwUya2k5Ys4rahHa4wMllAvK6Ckuovpt6iz2y23GoOAakOPsuc/cyiV61MY6dYenXSc409fm2ENVipkzwixMhb4QoCR2zHJC+eKMzOrZ0Nrs4xBImqobIbrCdDupfs+puMhsZNH4HEt5FAEmZq5INvVnqM2Xn/xbC46TPxzaYXGnw57scHaO2wNjuxK4mcVwVWlM4Mx336CRnBtVzDtdniw/M4J0U4qeQsz+CpMogHIgIGG2jMGWMZuJxOPtAscf5xasFcW0t5PZ9L2CgUkfgvQHTDcZqrmobCKF0ilnaEzukCTC5I7t47CmGhcr56SCqfynvqLRPb3JMS7BDn+eIxNemu28LIhOvSjfnlOA0KUXxJXeIBeEQC+C23fo09p7Ymi1b1KtxNGeHGEj9X9dpT3ZnVgKVzbyHGr3sDToWxhP21ffm/dQ8TgOyh785+BsmgAta8jdoNagk9rSYtRnxCYgy4sN0U5t74L6A2lOOJaZ0yblK8K8uPLRu7t0HGHdEmPS22NbYxgkxRT7nYb+ReI4vkcutm4ybONmMH04GtRDEZ7Q0kDdaw5TDm/vQob2RruV0cPKEOO/Lx5X76gyK8hbJRD1VOidJovaodE3MUArtL7H2d3YAAaqyBvONR9ah1lDf8IWZT0ESpAXRQmVocgmDwCQYLw9A+WrYUswXTgQHS7OMKIhRHh5aeFz5lvUjfTIXUSdy1MNCZX4YWMsiflt+7P/q6So/aVAGQNFcxfTtW2XZX/pN8ECcXlCuc=","tokens":25},"timestamp":1774364055236},{"response":"I’m seeing a mixed maturity level already (solid event hub, but at least one placeholder manager), so I’m now checking enemy/shared/data/UI scripts for consistency and any compile-risk patterns.","toolCalls":[{"id":"call_T6pJzSXtbIKLZYpDaLBbjXWs__vscode-1774363162404","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs\",\"startLine\":1,\"endLine\":320}"},{"id":"call_z0hHwAEGxCMcFw4NWgJ90dkW__vscode-1774363162405","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs\",\"startLine\":1,\"endLine\":340}"},{"id":"call_DAnjbmQiy840CPb6g9qSW3zt__vscode-1774363162406","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs\",\"startLine\":1,\"endLine\":320}"}],"toolInputRetry":0,"id":"9f6d0017-2e09-4830-92fd-1176e3f2ea89","statefulMarker":"OUvNxML6l7tOTTVHos/OWGCHYC9eKm6zvP3vmVts13AG7TLBzgNSZLN+V0rFMZtE83EGzZx8vXiyKVD7fGVvKFD4Fk87HgsiDKiNjfP3d5LoOeGPyqAiY7hpMh2VMH2Aomldk0NgM/fiLjZ7wVzS/Ba9EbVZB5XD+CLqHxL8KgKTIroZgDpnf+N3WiNADrShIifT0UwDbryxBA2+Pxv8tKz7ypBbM1h4MGrLoXazpg3DP2DI1pbtAE2tfNVi9d/vZh0IVdgRAqMlac/AV2EgnvVDQsP5kLqMiLS5dxkJ04H7LfEcLh57iWfuI9z70TTSXfNSRhL/vPfjVXpWnBZjnB8kUYB01+fciXo2j788tIe0OkeChVn3YQX3aBHHsYGhtETf4fqXD/QC05RRmOoNwZu8SP4QCZR/","thinking":{"id":"z+7WtIb6VL8yNkSJpYdbXsF4ljcxww6EFnJ7u6/M1pH74Bjrly1hnNJXnYfK8qrN2Cwa+xU1lIV/0G3Q+nEyAzJS5B5SMZlQrFOQ+Bad+yG7Djsi4xevmkwoljZERoD2bNCNydEoQWMzClirZnjPTtr8iBl+Pk3pEC1WdtTE+lUHl978P9nZPTDADgZL3zVfgG9VukncLyrCJHuEvUMnG4JW2WpP8Si5UHVjUh66NL1TqXPu2b9sCyoVBmlQ/qOL/VBjkgai6sooCPFfMogKz6RgxI93topvUWHTw9qDIsdWAdJY4ZPuv9FphjrjDns94hXvvn0ssvz/zk3E0jOjHrq9eKZ/aEGXXLhtQvWavKjv6gYU2dZbkJfL1dn/EtFzmhb4z2NOUahN62aHainpNBaQayZOug==","text":[],"encrypted":"Qjupu+M3QYSuGxAXrkn9xusRZrkSbSYK0KH33uOFn7+yJCL5EBeXjiiae+sQHAyTfleadr8n5BxgNzuu01/LIZIrkI8nBK5ZaQgW3cWoE6I5LzGPizc/LkhRF8eGLFMtd6ueHMRUUTY1AtZD9Wrh+IzujobbDVGGE+sz8WP5XrakiCkeg/fuEBgqiTMM6GmuSvDQ4zsucOD3v1JtxEtGEzbizUff99XW8AOv2mQnZJqfgPMIMLemFLV+fkTtaeWQlL/gSpAJjqEotl0lPM4OUk0xDdHqHZiN1R5ELt11nzi5aePJPahZxYxJAQuXpoUWlTCN/PkM/qNGSvVWG9f1F9SqcZAJRsemDBj1FmXbb/WyJ8f3XINRJed+HQV08dw0+DzxsbseFtEQymW7mjBcZliQ9LAvqkxnKN9SQzqXNeQAgzPmZKk2LViJNXuKzjmNJ0wRsffBotSo60YYviUlnl9aV/WStIhZr5uMKFnxuduIB1TtkcY5ee3VY31oz35qecLSVl4SHhpywPoxS/97uIgc0DFcsWU01yyhw5XD4zqv1xUHd6xpTSLUDB3viwkpMfX0QNnNsekLwMC1ZMDV+299KN6cdxxxXfV5epzfWz+NZGOM0amxP7Wy0uu1AdLDExJQPToSa/50dwDOpD6rorjw97BUuH6CizV6Ek1CmV6MVkWwEiKyNtI7C5ci0tMXZzFi0uv2cjLIWdzB4C7EbXTP86+nsnHkhLRLkabtbT1351TgXIsxfNLHvW3T/2qBunepC6gEsZd5aQB9rRiu4D+2gkRpDtOmJDArZWTBR2KbZ8GXLY2ldYNhoeMT0wXfyOX7g1uioQN9JJ0aN7Z3NeRc4spyv6MZNAIoXZ8onlXrsFim1kaRGWoyDAI4kduU4JsHbCVk2wf5owhLUY02mF6IDz2AlQnYwgEaOHYRp7zkRQo8IiyJeF4MMlV7d/WpSM6UNRDg/RHNcdyLzsNikJMzwWoAhodyFLNGIUL7/I4Oa5mIMSPED/TTUxgmBFFmlvAIgN9MnBKvKecoP0R83AaQPnVTkd3e7YKxSkvtCQHcph7WNpn1PckwSjbeYAWUPRANbPzp+tuWM0nvvVfYu21BGdDHaDsxgE/EsSMpNW/UIh1uknWt5JXjzVmCv8Oa0o11cc1mzM8ZwDPd2Q+CE06vmyZwHr4r6pbb8iq9RSBw35BsQjQb5Mn4BkJa9WyniQ4Fz7A0A0+U105r4zqMBbeOSfJHvQnuIeTkf5HGY1AmW0bfzNIPCiKOi3Y2zP7iHoEmDcilgiOwkMfNX+/h1Xc/v2RxvA0J478gW343nPE1Jmv/WeqlKPikFDUvEI9n1Zq7b2KffSRfIgVZrHuZClgr5YF+wgx3YTkdjCMpTE0HvrrRN4SAgAD0NPSU+3gJWCz1WkeHkTwUMuwJFZrA9mLs73L876vjfdjLqS/5lIScCLCcqLZkrdV42ljTgSHjNMgeCBTkohZRa/zqzjFjNdKqa8nVhWpaTtKUeKuSlsfI8ORI2Hx+pEZOuOdfrgq9ijwyr4zhqmfET0JkTg9S736Sr0o0wsHALwcBWO4CP5xxaO1QzEZq/VX4+r5ZTvKUV8jenyQkA3zGjE5K0RH7sHew0HYpEyhfNfutXuvuuEH/tu3UMCT52nuUJEUMBdMcGGzjQeqzdT3D9bNzAJPSp11m6yk=","tokens":32},"timestamp":1774364060719,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"","toolCalls":[{"id":"call_Ki3dZxk8QTrc75dY39uD3jg3__vscode-1774363162407","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs\",\"startLine\":321,\"endLine\":420}"}],"toolInputRetry":0,"id":"980ee44b-a793-47b4-819c-02a105516204","statefulMarker":"ztCjtER8YqAly+WmxNVmF+uT8/K+HJBzU1CqNjGVP2falljE5zLWII5to4LwElaVdeAcSs4G7b3BT/fkurKLmiVqH4dg2nZYGUHIfsQ8gTi1/mN4vlAnTZEq3pkQJZwvf2ixljC714wb7Opi1kYe6E47MKDkPz1A8IY6oGfsWJXjoM5541ZSRHIrbIrHR8N5kPUMEQDiuXfBp+JaFjEXDqKWNcOXRfzB06oi4fyL61pYvQzAtDOA/vxTgrLQUJ8nToCW87M5DPtXejs2L9bYM72mJTqLq33JmHsmMuLXKrelLeFfZVNjGKOyc37PppvRdbsMcNxglApse9f4lno0SbHbcVr4HM6jygQoDdbH5TVeBalFWS9csLustMiRCQect/HI9tjyldnDlEbqx2qAD4GqsYJVrGt4","thinking":{"id":"/UfMWBE17ULQNmPUIDBHj1TIlgiSfU8XcEugbP7MQE1Q2mhYRtnqE1U57cvqTDHlwoQJxQk1mCVaefyeXMAlqMm8BxNpF/ch0MNw1iNBdoYO86We1g7P1H4HT/CkuaXfewUVEQMs+dUO+nHiKEgh2t4Bv17VhC7W7jfIABHkLo969Qm4+iAqPPOuhRy7RMmYQntXqPz4fMIgWkbV+3zB95ZW39ymfmp0UgaS/7D1gO4Eht49W/aNLwAyTt7p8Kj+xTR9CBUvZRMt5lheMYZkk6sJz+25UFd7o//BIXBOAdFf+lz7C7Pduk6qts/5gnHzILcxewruu7fzj4BmX819TjKaRze/dR+G6odULE0EZj5b6K1Tarfo/OBtN44bbwN6iDXa4du+DsIburvl8sK15CYa+u0eDA==","text":[],"encrypted":"gmAnx+lw/fgc02u1YBcT+kQGI9P/z9gtyFqG2trv6OMr0+mPj4Tbjbfccf9T72lNIRWOEWkmiQXHHSYik1lpxU48ZhPQp+LRlwOpABjF7jiyUytq1yT/7cjLuZOl1eN/wzngVWjRQ1OdluGKvGgeE3EISyvNjw42eZPovxJdlqvds6kB8ZD5BpDzrdpGXo1qAnLLVrQ5YSvLAtAFTQd8zDhe18yXul9MeZRGq01zNQbn+uA2GLGly3UNzViT2CEG4KDWV6AQezo0z8slrkJbBTIAQ3YG2WhBQhFDawNZPwfbd7K0vCTy6VU/vbrA6+HTT3xk/A5d91ru07KTlEw+f5zkcsm232Q7XhOY6OGlCTQrriBajQqVYlLjwBfzTu4ssnCPLN1VmK0Vue6J+CgSxPXPr3SQffkE+aDubxr3/hNHzkDVNOgLSOnkGwwY4cAfm3/7H/cQlyPMK6Ldi2najtbMrL2OgFkI89ZGdTPM/myfyRX1T8+SIlagh9tpAIeVcNFTuHkc+SfsdtzpkIADRJjxwyecMU9JsVxjvyjG7k9bDBdZVZJOUTADjmQhI4wbrt1lC7abxgor4owh+65TnvMHK2FdgzA0MtfvTOt3eMUKf/YN3D4odnBnN3+IW54rG/ZwJLDa4Ci+pK0Yzhx93rWLcbHjO7q122P90IPNxmnNaz6HZN3BKFZjMewWBkZgeZB2biCIM67HvV2Hn6HJHN29cxpRivW9HNn4Um5IWbRYtias8jwYeoMqvufRexnSqoKP0EGoioTPhdr+PvRlqQVYR4S04nvuCUMlxMkPQZN7L74NS3MzGfX6vNFO+fzLB0Tp5W67+nJWkZJzgx2KZPQ+vwEXeZrGm7W3RKogOLm1mv326OfBElMlat33VThTPQDEaNfgYMqxpP+W+10xeiW+cTPdQrLJ5+N7gsO8cXww3Sw4KAgtfrLUIomrs21Nf6n7ob4TFdPFtP8c3lkwKvNuCFlTFuBgYG8rsYZ9z8wpMcuaxTw+HRB3lp4oRYfLUa5cwX4u+QGbShL/AHn6IBozh2pNlX6iJDT4HgN1XsIg7nAjqZ8oQ0PmCvy6pctxTfmUX8XdNtykDn5TdXrI4hgiiU+8/AnHPc+lXxdu+wGE1xR2n/bTr0H4fYH49ZTI0lDdbB4JKLLxPYQiJkiCsoKxhW5SrWt9hZufkZi5fuOe9xwxES+W6/wMsGlEPKMqH89RrA7yObZH4p+ifJ2VYBF8ykrgJ0hes7RLYeqNQckBXuJI/Q7AKCtu5yfRy8uZUZNc+04zHlhyQ0mTmbeSVHy1guOOURyX30rgVN7bNWWNSxkfH0wyMoqB9644xeiyAq2Q2dGDK+PHKT4d/U/Kj/BIPwoYxvIFVt1rBqyqjzS3Kd9Oo8NPhR+5DJz9+S8KWLjwPa/ValbgHPey5UFeyW/+9eto7zr8qdwLbecgumQ8tOkrEKxCQmL1GJaq3pNkl+cQ6bfxgyOoRms8UfFh8QK1KL3o7YrE/vbLOwBrLmT+EowfhGN42587XTjGUxOVMU9FNYfeUJZAztXDYS6Dx1Ougbvaafthnf0h4fYaznMCJDQrnp08Y0EaLmyJnPY61oEDig==","tokens":13},"timestamp":1774364064345},{"response":"","toolCalls":[{"id":"call_rhH5Pi8lPchjk0ONQJR33wm7__vscode-1774363162408","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scenes\"}"}],"toolInputRetry":0,"id":"e2e491d0-5170-49bd-841b-9b1e16a35df3","statefulMarker":"Ecrw+kzfwfb0shekdZ0sZM5XKhBDtMcs2CNdKT6TUWLp3hEZPyFRJCY9zXs9F5vZqgq/k9LJ6d0O/UfTln1vTJ290H0Lcxxlfb5twIuZrk5owiim+QKc1hU0p8lAF4okpLdQi8Cr4zyVZcTaXVggbUy5fMEgg4Dm2YBD+3U09uGZEbzuj5WI1Kn0taeVR4/PD4dYK6mvXsXW60Mfr4Wy6bV4EeuP1tMt+8QtOBPJ3nca19bh8dUl1LncC8M1Qkao9MrmBwtETswjLDRuiw+cVumXqjVkIU0I8Sn7+viv4haa7PscAgrzAnwrnhvJ2n7mSKzhteE3+nvy0eMsyO/JZ//HUv/zRvDhW9OxtBxl1VG1xQ89+fgYsNBYgRYcMW5iAiT47HdyyvrxziSjhtts8ZUnvoMmvRFr","thinking":{"id":"t21ysv4qMR5+vszBRhTw8+CqiZehK188I/sv99VMvcVatlzf9Zyj1z42HWoD3lMyUrFSwFrMsJfYpVST7f4qSoZaQau9o0sCFiI1EGPHhjF4Derdn0NEMiBPEeR6ldFCrUoy8HtVzC+Sy7yDrhaCP2hWbh+x50JTyhS60TaISLHxwSRe8iuRozgu0KQgWCvgDaF1oFPPaFnpxyL6zdXlZQb9PtoGvPrrqDX/5JQQ+fN1Gsw7WY4z5dbF8nyD/U82HPJpzXnq/951PuuFT4LFTLKOXFhSR8B5HF/eC7mbqLW6KTTD7XaFUeRzxsoLqK9WuG21dhynjbQXV2D+6cm+LJKEg94TQu2cLsOp5yslSyaJqpiuRf28/Yv/ndmS4mxCSCaNsXlHh4iJ+apbxxmd8aVske69kQ==","text":[],"encrypted":"sHEgnsVYhsPdoyIZkJDxktP/PhMHy6rFJa10dBS5rhwgu5QuMYkZh79oyuCzFYZLvOQHwtoS9+Rf9fIlqe5BQhd3yQx0xEkURbSS0goUdR7xbcF+W0II83ePy/pPg95HPmQ67K6J0blXW+JL4ybw9E7BZwGGiBVmOk4zCBH0+idUXu9mAZXJIn+hhgAazc62l954GEY9RDjBJQamXjE7T1NtcbbgymfVCcJaKuAYeM8Oe6jQQrMBLPwKEx3e3PSoCtYmccHDawSRRF16bYzACwxLiSs3CPqZfV7l1amE0cKe173X3tDg9DVdbRFhv0loHLwXhIiIH0wFIupRx4D3t6stLy+xjF4EB+tlUkQ6ZjvYEaoMjZRAQUdHewOVNqmcwPGyo6zMx3/8nLfhmBzeFAkL0cgYvazODqGKNlIucPaRG+qfkjS5qFtfOyercJGTJdraCjuFfx8gEGdxyMhNdRtL24/kLpscgQEFwRNCBTRPj6Wh+9ZqP7p5Lc3ViYPWzAxLDmdFw5zhpcv6644KSCS9xpUzNPxfQS2m1oF7asNC3uKtXFrN0G1gatr530hKSfnPoCGUMognHB2zdo8Vw6N3BiGTX2W2nvlLDwq8xhNPnuheO5RjdlHz/TxppHioFGkpYj1w0PtHu8sUtqCdnHTvm5CzXbK/OfA8DvWANk4xvplYIBzdYjYA7Kis6bUI9qti8MteoW4qK8Jfw15imtES/UjtroAccmOmAWWy3BuL07QLcrH4z1OpFdQycKYqMUVOl7ovDx+vLCWK+s2NBEFV9DFb/V6NvJrSa96eatC1QDgroT6xet9suJFHje1BvmxIL8mLouhpSPOXYdpg/Et95qdUWIELPyqvP4nTyF59TWk8aYEJpkq3yf5UKY7lpk0GvjOQ3wmQKdfx9DO2Doh+iOG9H/07GmtKs+l6YM8S8iJL3+N0+ZHvvQuDzaNvhyoqysWj41M4IPNTNL+24jBKMJapyxdXjAkDOztKFKokT6ANa0iM4xvB7VInz1k+Sib/k3SD9H64qsrNrt1DCMKhRZr7DnqSElc3xh6baJ5E4u+pESswLiXRGptuXN0Mz63etCcnFKvKEhUxYANXqDpGy8fBELCTQmf84klFaVmZD1XOt0lx0aZGTsjLhjxNq4JYNOmfd9tUPtrjUFGmHZrwYrqxZDEI3MLqmLOEuRXB0hJRtYyFto2TrF7+J3vJtl5KRBAhg2x+MewU1sYnedfqyR1Hz6tfBKelsjkOjb76qGL3UQ4GGZAgkKmPGEILe+UQpnG5Zvurplfo7v/X4vOSl24YUnzf73o5NoGVcKxjZQIOU1NVEjEqo2oM1CAFBGT7N9Oidutls5EkNIxkgW9QbFy4OwJcbWATXekC2ZqM30YwbbUxzl+ACnD7g5sHxiY+heqX1IwkOF4gRYYbgGmu1Ux1nirXF0XMiQRgSyE2A+rHeo6qwXU+QCRoih6aapMqm4kLv4fTRy0MDn016GuN1R8oUO0mbLAVzIg4NMMI1eFcAsAUzHHEtqPEO1dlMhZh0OcOgjbGNuZiHLn8KkBpan100j9FR97yu7l2ze38Z29gUhDz5P6U/w6pl4A9pnoHMkpRGn7KFCOrAaoz2bkZe3ejaBcDYHDBNJAjYDBZe+bZpbHXmWSb6Fg=","tokens":21},"timestamp":1774364068436},{"response":"Quick status: the codebase is real and active, but docs appear partially stale against current assets (for example scene naming differs from README/GEMINI). I’m now doing targeted checks for event subscription hygiene, singleton/manager quality, and configuration/data consistency across all scripts.I’m running static pattern checks across the scripts to catch lifecycle issues (subscriptions without unsubscriptions), singleton overreach, and hardcoded config that should be data-driven.","toolCalls":[{"id":"call_doHQiWn4S3Vox2FVoGeRr9k4__vscode-1774363162409","name":"grep_search","arguments":"{\"query\":\"GameEvents\\\\.[A-Za-z0-9_]+\\\\s*\\\\+=\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":500}"},{"id":"call_kAQyUrAxNqC1RFW1YO2YavNC__vscode-1774363162410","name":"grep_search","arguments":"{\"query\":\"GameEvents\\\\.[A-Za-z0-9_]+\\\\s*-=\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":500}"},{"id":"call_dj0MaHsQIx2EA2JGLaZ4OEdl__vscode-1774363162411","name":"grep_search","arguments":"{\"query\":\"FindObjectOfType|FindFirstObjectByType|FindAnyObjectByType\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":200}"}],"toolInputRetry":0,"id":"d18b640b-d7a4-40b6-b778-8dec3faee85c","statefulMarker":"Tp50NsY8vYMEdPLFOgMGa72/sOFT1QhHUiGO3i2vyuQBIzAJ5D7yv6agkqYJp82pS3zQzTAVw26BNM0PoMabqnq24MPYRWmv/IT0KRENcW/rtCJaXDLttc4gGuEOkYn/vpo0C1zmMQkR7euXxJ65X2JZnSQL5CRGL9PjdRxvlQ+kRjDPz35bYtp1sf23wQhcp0oY++/jG+YFupoLk9swJQJ4DuFUwro9bdZrqlIpdrSlKfPWCq6dDHpVJ7+By2y/NC7A0H1jQbYpaBMuKpN+ivYxZ2k6kYrnZTzf5k4zI0slLeSe60g+Wi1MHA9Uc70QcbexQxLcGerND6p3iqvCCvmZ9O54fUxch9ahp2Tvg9K0WlPJg6WE0PfH1T3zcPyikLyIfDUvMmTuSIezeqRZc1WEIS6u4Lr2","thinking":{"id":"JV59o13I4vg3q1bJgqHr654995h2jLjmYjkDyVSmGwkIXb+DyhDRHwxrka4rk/korfdutV/xYpVv1oxLlZ1aNojXeLhF8XXCGRF4o4WzkgZf/R2K5XCKnldqbfVbtNZ0Uds2bRqdXywJASV3ra/1RjqaKb2okWhSGA+9Uz51gqyFBrSk2bCWk2ulsPwlXsOfw33EBnYs5bqLtO8RAoSyKB3yQMO2Q6N3nMZ8YVqVob4KzY8hfn5ypdg4vHlPLVDQIBJpI7u8Xuyz29JpRCUnMD43sSUR+Pe906cTF/X/JhcYKb/nq1oeVErPOdhMUfSVNYzyzrDhCupsJLXI72XwWqBtzet6zODXG7pNeLZNH4B7eemtydmh9XVwC9Z41tYnc8JW1w+p0frvpd/oSUBdnXPGSd/oDA==","text":[],"encrypted":"Vkiz0mNNIGnQaWaOIRdeB7OM46Fp3gft27F6ngHzpM3dikOvGzCOr6ATfTdI/e7U581SXeAGSgvNNTXpkfEpXuuyean7Igcithrc0Gv5AdR11/jz4ZDl2buKEIceuYSjyL7LqdTDkFqlkHdCuy33q85ebJxmjXQ4xOCCr7kXAIDXCgkFqj9u9SbjHzHctD4DQUaT32o8XOX+XXD61MS9HxqlfALfKXYzfcO+k+oIJAUirrseE1v9lW46yxO2/GpnP6pzFQHDfay9jCDp67ekUDGvAisjoJNLr4DHskY9blKfcQiNkOakdKn90Q6L7ozBzfQZZSyRSX7R5++VuY72L3IH6jdsIFH0jcctxhZXdE3vuespEOhclxim20pyrkgio2pQ7AfpFpPmTrahMu+71+cUumcxeWSb7sUKVD3OzHF019W9Yhm6WBscqyH28MKMWtalWMoqeSIGw4etBzuiJ05U907dMGyAvd+Ikf0ZeBo5tiKZeMTS5BHPS0tF9TRbsnphBmqC+F/+Cjo21fCU+/ZWSSC7vK75dBUpNcpTbPWwUDhGqxXDs4MO7kU5mBi2TM19PWrytEdhosADo1kS48b65UONHBgS//d8lPn5KA/QIUcpHR3GkDLbz8HKPbeLuMXyrTygolDncjrmNLo9aQ88CqfZGSvNKa8CvPfTZZ5pcbzbZKdde5wfCbf5NI7mpxChC/ohVMhpyNht2lVEP9gryi32boHZBfZHiwF4Esdr1j/M0OMYm9rivOM3qKK2Kgglkhe5fxdwNuDimsjKbdHs30PiJTTiKSd/5Bdwa4lf5LGAY5KQunxa6iUfDXAE6pjq7Z00l+WEQukg/DNAXv95sdyHSYB5IBsdHdd31aXKt6z2bxttwsMeUjBPwIa1eL5Wx9bIyZMWE6leWKPlookqE29n2rk5B+M7s5P8f1JX1+6EbcIQUEJorQBwLSGMHoi+8wDjjSbLMxYKgXmKLbttgFyAOMZE9IGSsWn3BC7V4MqQOANQIbHxphCar2UtiLbL8vRsI7vQ3P1SJ6Q4kRr9EeRhelHllOlr/j5iLp/6Qw5PFGEXPbCMjQCinzm9Fwib88z++LJgrPBONQ4cM4rBgcW71BrXlzogXou3sZl/JaQqnF/IeXk0VC94Q/FytuYXjW/N1imvgms5bdA9hsXuAu033tbAxByWjyqRVy230BBf3gLl/EHeBDY2RtqsuFWbn+5ykgg6HBzEH0N+pmIJQuckN8mLqK9QtkoQ5EbE8lUKIvPrH7CltPH7ultJe6r5RCAZ3XZ5BVCPnw3eW7wxJVO+B4A5oq3VT62qIum1hnH4+3fquzyTTu7U4wsRQOrtjjCsjIT6FiNmr6ZXdjrspXPUJ/VIybYo96ReWUVW/5STr9b0sMuLHbvUaoZmu9DbdC+TUYtw1p2mtTH6RdLr9Owth6HB1pBtogyC1vJU1wO+Z8++LWxy7uT99qfQUvrIvew/sHh/SaYvqXO395zxoNUaLF7GUUmoW7sE47b6nnEaeW4iCIn6xDdDhy4OOr/Xi+mHo1ol89Pnh4N6lQpQBoitOkX3kVqOKwqnl0cBl/bFG8Ya3o+IsFFRINaauzzB936gzFlh10PNAUbI5E5drbj+G+8gySZkG0/WAeLkN7LL2Pus2S3e6pVmjPPmy1Gf6ZOYsMDi6d7Ht9KWDeKj0jQ5sDVRVvgxkZu4JwRRHS2/ial2FkbflY0b1tQKRad/UVgFiyYSmuQiQbaRQp+pEd6h2rNbDUc6On4I0m2kPhDnEgMsnN3v1Ml8GbYnNheDFn9UlYdWvhLZRtFAhbSxuD8OUyz3H2azxifyEG1WD3bGpmOW7MplujznJFnjJNQW+LkHHqD9qahyQJC8JssrxrMV5qvb+p14gfglYT0Ok0+/2JEmDHdpjq/vkoZsShHEcYwZzRMng4zXdjCT/I07Ze18lF+tYjvezFGJaX514/u/lO+Fv1aCCCwJkBSmOKxgJ464ShkWtqRhYfI4tQ/xs9qQIXvsY9IDTkfPcYZ25tiikWnUM5x9yviY9X9FFHQvvdkvhaVGE1Eha/defoBsOok/UFiEzSqG3ozmLvFwJLWrGR4SZtxV+CAOZPs9ADaboK7O7054DPBYEvqEpYozGbEONJPmZB83mKkjVq4Vmb9Y5TsB8ubbC+xIyM6zsDfw+bJV1TAr67/LoeErdHOND/BUNbJP/baFBwpFJDA4JB2daDvPAYoMFF+VsIAEuq7cFw/UsQhQ+3hhXU4mgZYsTi1G9ObTaCj4tHBczlKg4bW278E+gDMIOwm0/avdQekHyvZknuHCotCqkuX6hSRrQykb9pwV4Br50spkzZopJ0fj6Un/pW02ESr3i2Fa/l3GYt3J7h7vV3CGBUA3Dm/ES9/8mLtj","tokens":141},"timestamp":1774364078271,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"","toolCalls":[{"id":"call_03ywX3STzm8spgR72s6MYwXn__vscode-1774363162412","name":"get_errors","arguments":"{}"}],"toolInputRetry":0,"id":"543060ec-d183-4cbe-9b5b-2257ca3d5091","statefulMarker":"pR/RaynrAfYuLUgMaXStz66GTdbiu5CeOBSM2eNpN6yRx67Wr6KMDKS6ri2b4Q850mWpSxy5uO84VslGXcieqwImRIs/92tZLfvjaHB1sXJZ6ZHf9lK6h8sD1BwCITZrVUtW7U/dG8sC9VPvVYXyiR2fHLW0t1QR334CYjf84Bytz7sU15wCtHW4E6xqji+HGmwwSDH8vOGmlA3LHldojU835f6jEN94DHNDkIFAaJ26UNHf4BYrD6NAQtsayBj2J6gvvSxUFn2Y9fQjYWlyIShngJKikBg2H15pcZX04uHubpVCAIR9o35/iaVgiWnohh9QF5mWtKx3N5RUGZzH3eNbr5ywIvWEsSUadJljpLsNTFSc2UqEF14yIbcTkppzNLyHIGi/8vfGbdDEL6I5FB8Cn1yRrzDG","thinking":{"id":"wWUWKNV7AcWjHqgJdF8KRNGI6WJKTbIasykee1rPlktkfTVryYJ5B7jQKXwQtrCxrFoyYhoIUB6lHjeb+QddL3VnVtbFtJjNnPw3UyM8gQjGS2A09yK6vyR31Eh7y738lYguFigCPe8NYQCse3Catek3eJiQDHMZGcFIRXYIv9XXL4FdZU33NnaGHdprsxmyHLOEtYHAIxc5SLU+D9mByC7mzZT6jR9pbN/qla0uheQDLfdgi/fZeiJAxjeh7HhPxPdEzON+cqdyT4BVy4e66u8ERmY3KOAIoZWVOnfnNh883eG3s5I/keD/Yo9zhq4XBBp3BScBxLKu9aE5pPcNmybs2oi6APW+IjbxJHBhiq61f2IL/V3hRscc9luNPRlZjPA2HGP+l1vx5Tc89VYP9pkhqPsJiw==","text":[],"encrypted":"dkDZxXqn5VvZfcbn6WNnOUS8X0KAauN+WCueeQClYPzbhZwdwUJ0ipiRukzaeQsV/w1tPVhe9WBaEDKQA6VX0qlcul7QwnpD8e7CgazKf1CFUOEomuZtky4NFgW8yx20hihGLD/OjyeqmfcXAspKxwbVf0XsYejoPdfiDjDBFw9fyhNnDzA9ZxSMdXitCuwzCURo2TdypWyxn6C736wWOMxtj2csZJx3JYVkzF3DAAwWa+9GSMZbWp9xWnN5hjor5DE4/0gPXkXDyLMvefWV0adEEPT2wNgfgpuYrMlW16Fb/HygAq5wsRttZ4oF61USK9kZFAiIYAt/PslMV/LZiqKamjkurKXiIfsxD6Tm+ILm2XLOW06z0mbmwNk0+JVzThzUK7Gk6hO5WwbUoUz8RZfdsnV19lm3qSMdsb+dk6Xn47pORZEgmX6v72jpmvYoGK7m79VPO269Ib1bvNmJ5KCzj6LO198pghACPG1NOyINwgy3E8rETDqGcQnc3OSmEcq5fzOPucAsbmuEQRXBT7wyOTlq9EIDSHGjgWqkL7pHOP18XaRwanyaoGKJudPu11IvOaj7sGYzMzCrORPy5VNNoAIWko1bGqpK3DwXAlOzv6XfyDJDhbxnlT4Jh4bX5JBV2e50q9CQVQHrlwfoNPCmOFV4b09z1oz2dGgjAcLHfYdNTfhx8bPDfU4A8m0n9QAELOJbXV70/NPM9DY+TN6w2OxloTLvDGbo/1O3BMBaaoCoqeSHvpkII2nK3pL7GkqPBGK4quQGLDoBVYdxtsw0DIaq88m56UH9/uqd47IwWRVNUt/mXK3oV4qQgLklxn/IlUcqGB2PvsK3CXvQSx4NseN2A2Htd/s2OT68/t0KqsHaSqiYNw0XSD6d7C7g3pxUPVGABr279qYNXkKns1YTgcMLMq9lnAwgRyPpWwTjmDgNol33BHFABlKgMkW5oNgdFVz062zwUyHinBZZVghyfItyLlm2nRilNzhwSgPb9gJ1SMT+kXznsLzqe1MzpEPCk05DZAg/GcA30RtddqMMJvK7glfFfebGRGam97MvKhkb7qmk+zl5dnVUHDFfn2qhBYJvuNMMw/l2GXFX+76mv2IztRqcHZU62A96SI76RvWbnid74//yS0mWJ+lPfV1Pn9pT7wb5096MIlRwRAxiFPh4Kjo3V5QbDA/m+p/ZbuSu5CeWPibmBVL+G2r0nRKhPoKSSUIOP7MZv3lDaJ9W00JZWSaQIFvc+4KgOW0o9FP7XfsQlWBLWR3OPWFTbPYozGB1MlCdiTHG8kWZLqhTT7/RvH0/3hFKrnmVEI8WGHMojmigE7bAk9sDtt1HoVZjcY4gLIR19j/9Ovj/G6mUwQ0Qh8CsjbBHQ9uP9xyh2s0co0qtYF7Ix1S9VvVV6OoI2C75y0hq4vEAR7hqdGHSMj8lhKyNa5M8pWuw3CWNhlVuM9jQTSp6+UVpfLv2Th7GLA3KcbC0MYEIsajFpfay1Dt2NobUnd+5h7sH+ZGIrQXvhsqiGLkBC4JpI2HChAgoi2cu5ijph5Vtg//P8j1v4cZY2pWVS4CQp24/vftNUsmbjte7yTQs41dkEr7uk9VhJnPOJlTnNgbcTs8h+B4OmjKWvX+P+ik+qsq3s61MFx0Axdg+GMvViJwjT0Ne0nA5qT0wCgMo8dmWVz4t/5sH0S0FipI5QXWS5N1gokYNPgWarvYGZA==","tokens":27},"timestamp":1774364081888},{"response":"Static diagnostics currently show no editor errors, which is a good sign for compile health. I’ll now inspect key managers/systems and ScriptableObject/data assets patterns to validate runtime architecture quality rather than just syntax.","toolCalls":[{"id":"call_6kgFuSlsZSWudYKxDXbmydi7__vscode-1774363162413","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs\",\"startLine\":1,\"endLine\":260}"},{"id":"call_j1WqhQl11XI0r9E54s4IOJXq__vscode-1774363162414","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs\",\"startLine\":1,\"endLine\":340}"},{"id":"call_LITtlPj8YcnxOaYApWyBOfn7__vscode-1774363162415","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs\",\"startLine\":1,\"endLine\":360}"}],"toolInputRetry":0,"id":"e201b620-1bc6-47aa-9981-6a0d83110028","statefulMarker":"vFJcZUydQJ9V4636rYSfHnyUpGC3kyIEW+s89Q126EN3KTUjoiIx8FWtsg2Ks7zRv5sqZcwF7CCf8cgvGeeU7VWrGip+1veHsjZf1i983OGNaM6FYsFHNPWKSEQ4wvKJAiJQFgp+z59B+NF7RmqgnUHmnjFp9YbsOgLRwuFIxKOG48P29KW2Rf+BtIf4efEDAOopo5I1MbPpdyt0N79s5iVZQJoM4DuFUdItE254+c0Ijwv66/pR3B+vE8oY6+eTOq/XTQrypePA/s5opk36RCTUxoqIrlplLoqqT7p0dDO8QgCafAZArVL/zVuhpJEyolVTuO/zMoJGZV6VvZsTNR+XhOlGEG/NETli82Zh0FnBGWXaenPdz1cgcOoF76qXt18Sk8C+6/vC64dVmIvOpsPb2WAggb2Z","thinking":{"id":"vmiQ1XknvwYAcJapmujueMMzCb20eqZN/aJNvi6ErETDZN9nKPwAjXM03hIs7IE5tOKAvLY0iA2ruIYmaGugbupJyGT91YLhIqU5QspV29Xkf0TpTDvX8yVeMYdJMOiM83LtOnIA6ot83FTtpit+UghtZuwmGcLReBy6DmCh7rT6yptcSyHIHjBidKsHYoWaDKJax0YaMZ5NAL71jXfF0uwb4cyKPcQG5OTYqX1zJ9w4FcxwN+0fD8BChe3ChjOl/Rl0jD0sZcKpBboHsW8sVZWpqZDpU1oKJ4NPeZkUG0KjygacpSJkLzB6r8SQrpwglAogQ08vG5PX8JqrE+Dwk484C9FEF9Clzd/Ue3/Wc93G8qdTUHEcXD5OoXcWBq1Am0I6eUO9hlnyRa8AJU9GSY2HgKxMDA==","text":[],"encrypted":"nOCA6arPhyJ7m0NkIY4gJF6Qa+LaJKQd8EFXMqt/T7H7boK9siDrvUFRSUQVe7jTiPSiI7RW4IO5OcyKtHA+aejX/oNsuwi9v3fzRhfo7G1AasMilecpl/TLI+HEIP60h4D2ROZxV/cRkvFIVeUdkvCAi7wgqBKu+lHfmG1hIPFLswC1OYP0EfaJE1uCbZoLldKohT5nMp/EvJDRlSGhAPW6CilB1gX68362d901yGOHcK4RqAQmZIu2sAn91EVG5b6I/sxiE4fUb6iWsRz6wbkpq72T11/APG7LTJIiyXVPPBH9Py+n/8sNNz/rfdp9sEaXDLgKpL4VSAUtUIq/LHVshKQp096s8p8gyxOak6lhyDV4IuBTETQ+nve8Fr5b8g6hZYPva+Z+Iq9A3A0lv/SricVHm4+4f0GM+7kni415y6ys/QMkGdovkHq1uvcgE1Kq/D3FPEj6aqaoCuJ7QxFr/UEQUcTHzEB0wZ5NjxQEjyZ8QACsEpcFHQlr4GTWbhO1wQhHwwmXAqBzueom9VUbz8ebtsQAnVRHF509VuJaIWclGcUIWUR/1+KkWAPnNoQ4fqR2nGMD4cOsaZbYnlmNPPzAXu18SnShE5bEhYrN6JfCkQNW5P9Zyjwz7ORu3wElIIKJj4ym8KQzVlc6voGq1pj83N40YOHPjfAm3J2fHatlW5zdpkTUDyEpK6DJB/YTHgFfHd2KYmfMOr9CNrBvpt3FPMxez8mAKlfhucwyQMryUZQzhbBKlvoEwQfTtnmO1rbonIrcVO+xdeoyMaj/MHaXc5JyXM2FCQzcF7Sk9+tegMOdpp/dwTOAD1OJBy48jDYhFT6KJhgcHAtrDFQQPs44IJKOMopGFQ6l8LhfOn+zGI9aeSG6xqBMupfyjkJ2TsSaNUSyaEHY04paUzFfpweRibmBMX/h0Vo4jD/1ud88lNruWYlaazZDgtcmR+P3Nh1pB2ygIKWsmoPke+xS5OtRnrDcA7vAYtQO9moV/PqT9/CXwNOEK2PKxQlqQO7rpWYEAIHH120ylr0CbP52VF/MqY/lnuh/8rMGaJaGH0AS8UYx1KWzQJX/n2fIXyDUQkzUQNB2t8aeB6qtfehKl0PwX5A2oK9slJBw5jA1LSdfuXNorgeA2n1ApgXWu/K/zgBfcrAF3BIvDAZi6A5HwmAjPrak7l0SGWNrDy8NFQkwFrOI2oUcI8PUR/o7Sa9NbLm3T5HXgcUxYyR4mvyaNAfnz5GoCVnHjRvtC2FHzs48LDxqCEHdGXSjbhFrEb+fvutIGPBCfWi7v5NPH8JAJHI09q0hqU1B0wkeKV/BOIg9F0zSCo4Kidxh56AwC2P6tLmHUDeaPWqe0S4iEZHighU4ID2WRaOc1quS52Vq0TROPCO821S5LB5D1w5gALIcjZS1B0Ew2RSnq2wEAn1PQiE7Btrc9tCGOky7NLP2kNtd0S0izlZZAfoSN7X/O3PrlZkUZsv0AUB1HPS/naK398s2wFFLle7Ty0bHAgTRCcejjspmwgIixaQiqhAeFtsyniUzZW4+8j/2ZVtkYRGacIklMvlicVzU6XcgtmOaK354WWGckAPINOHnd32BDhYA5U91gTEtH2XfKzrzHeCZTj7BmJKcXs0pcxh8yJRzg0AePFOovrToAbnFuo9aI3seuTSHvJYWSqT7CGw/jaVWDJz7CQbozrPQrkRIQ84M54aYE9B+cjS0z+cGsBI1D76DCwyS2cL1Buto1s0j5tAg0MgCikXmu6ZHxfS8dp4PeV0h/TrVH9m0xJQpwCiBjcR0WkAJNRpLnKo1+s+ZQKgzK8hRINdV2T+L9A==","tokens":37},"timestamp":1774364089261,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"","toolCalls":[{"id":"call_UNuLGFvjRPNVhlouavyJipMJ__vscode-1774363162416","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project\"}"},{"id":"call_54gfgwkVQ5DYtx4gGKF9aKdR__vscode-1774363162417","name":"file_search","arguments":"{\"query\":\"Assets/_Project/Data/**/*.asset\",\"maxResults\":500}"},{"id":"call_livfOw5qGp638egdU14oA8fX__vscode-1774363162418","name":"file_search","arguments":"{\"query\":\"Assets/_Project/**/*.asmdef\",\"maxResults\":200}"}],"toolInputRetry":0,"id":"41bd61db-bfbf-4c4c-8555-e42ce6d204d2","statefulMarker":"DFNVzzqMzlCPlLP+uWNvtXUGlhXaqq7YVEsYmEMUK0AisuZHiUn+AHk+yhg9b4jFWPWcyVQ/tr0PmCUEzcQCd0bpfGxbKISxl20Sy+SAxF0NXJ4NYyYfz/rNBGp+UH73//+beYXi5aiu6xBrM6qP9VTBYNBGE8tZCR2fQaWk4l7Q1E3KDqvcNsC3CRb5UDgM9bWoyCkG+tluqAtLuolCOc5w3rR4UopNET8TO8Zh8hp9HNblNBlJ8WaP3W4h/+AlyqXd+gsZybFAQcmxK1j8ltqBbFJOyVdrPK0XaECAtCLLfNM4yzYu+ttmuKa1D7DWjaXY7AczK0HA0vMWqPd1mvUfhYhqffGweSIdkddhpPl17JS5eHJJmHequYmZbqETgz8sh+fvDAYilgwf9+k+0CtzDupDxbdJ","thinking":{"id":"9ilYsxpr/3LsuwwIfwiO2n7aqUzFrBlbTzRU/MW0lR8xSK9B1cw+Qn3EnsDf9DtbX37OECfxHSiTWp8IjH7BLY8vHps8WNH5cvV41sqYIWyIC0l31xoh2YJhm4IF8ZZeU50/eEyul0GZuJR9zUHEbGXUUQlYilBYrwAwDrnVYqwnxvwCHbQY6c/ttWOlRGbfVJ7LT3WKIJqZ1KLJEP5sSZkJaFy0RBmitGVUaBQiul4VyCQupVfeZJusltNDJCd+SYhbURr5uJ59Lq5NQoV4CoZpX0Y05IY0TVuQedAwp3EnbE564f3i9/T5HIheRINaZ2VubhFie53UnceYWrBeC23kfe9+IVcflfVmPAzdQk2R1RIcapiuC4tXl/vDxY9AqveWlskGzQkhSmTk6RrmRyEqwijcAA==","text":[],"encrypted":"h90lBycOUv7b2nWV/NBFkeqcdXQ2Vu5Yw7/tX+XgT8YN3aKTArxp0T7vsnrYM81ZVyH6YrxzARYyPNp6VgZudJeN5vLfe6PXQYqo/RIRBAutGTaj101YAoJCojIWi+jdx4WOmRUYsZUYHKXK3soSHZCo7lrsRSYEDk4nMg5cXvUfWuhluH3/2P3498xZgShSsOYP4ejD21WEbLdotK0HB5LtHG3rphVvTt6tyY2nSnWQxqjSACnXpU7awieRxtNW4pTaZjsbSyn/g9IBG1fAySSiZ1D4Dh3Z7R2t7w7GaSQNHGKUC6gLB01SuspWXE6AF8iINDsRbG+4OM7CTaabKs/8cpRaVHXg1f2QOEvVXdTVsN+yFIrQLc41zUuGCuesq3aiTwwwZKKPx6WwYRmB+C04jYB5eI2OFA/SrEIRUa1HnQrFWs+V13Z5c/r9ALciZjjQn7lMqndKO3Mj5stFNkP7/J1cg9Y5pa4htI9ftMaK1DaKldPMAXkmRJh/PU5IO3Up9Jyzsua2nxDVpOBaar/aUvNOIjUAA5ZZ8gSapWrPMk6Pjs+2U7nujgtSYCHfWwMge90QYa7xbUXoqto023ML0RIG2y+iwRvQ4JaLZVH/i0116mW7ukACE8Nb6leNutY9JFngpVysfd/6ufBBGy6694HQxHNxgnu6xdawbNRLYCuwG4+YM/EhvGxFVBEemOayT5SCdmEquQqKo/ytsJ5WXcBf/I+xn+3EgJEefqjXXmaSyhuUOJZg9BTzBj2nGhnTBbZV/Ul4Ux9PvvVz2now7IfFyxDjA2zpxvZUBUbIPcRSyomioxxrBuAOAwoptulsA9yPUFwwGJnV1a4lbF6X8/DWCV3RfwDktJVN+9SbUusH4DTU8bhYwI6IFrlx3Ff7Pc3NSuqjOBOlzsNuGv4ZALZ5BE1qSM3kMOZgf/dF3D3/bayIy8ll5jR7ByUvbsmV7e8j623uikcEe7IPwyK2BQ0kPwtm/VlKAQ6slYf4RogT5ep3uqFbDhhl//YZUoiEDT0DuIjcDHVj0ABkW5tQRo/TOiczAkFrMRnc1sD3e5212B3sJXHlL03yKkAARqmFBZjx7hto6mhDtRAT1taz+KcCQI8PlkyEsT55Gvde873JephePLiwRSHAlHqnZ45B+DltUWfg4VKytO0o1WLQnxwkfuhNoJ5+g0Z7yOuLpLIhgtGC/ir4WnxB7JTSJijZlrn3pZ55O2R1r6jAvzjavZAvLloRboMU2NjCN9BqBQ2tTaCJcCU6c0saRPENup1BsrPP7CgJmqzuCqEAMTo9dm6vyZCw5qwzWhfs9oiVRITFKFG5Ls0Ae/0QRfqfiJzQguDv+cAUj+LU6ydd2O9l2Vs8EOkVNbLqyl5HuW6tbEoZkbARlO/MuBHwE6zu2JBP4E7WvXBggcQHjQnuTkBOxyu5v6Ls6l9HKgOex6xZEqFnYcxUeuu8Y+Wu4I+WKm4dzJpaeLaNPy61VhtIRlYv9pjK31qQZQaTlTiD5ax3L1x/LzkPElf/dsAE0KSvSkA9P3ONN0M947ZH1RGEPhXfNUxCJTPS4uKv2PRcP6WB3AXPN5tEwFxUw5qOZ9TNtDXVi9Johg7Az+4rDQ0/h4gEpfU+Vf9BcKQ2R3lNkd9NVTYJ7rcZqXPt9/3iVDKnQCm7Ko5VdgUZ0RAfp5bLUeHzZ958A6XqkkO29Ef221QdBSUDdjV/l02XqESWdmo2OLr3jmdkCAJwFp8rvRDNlvrmR+BBKR0EK1atPLWUuIZkC1VlF5o9GLqKQWbpVFdy2cnhnkYeOXZxcOsI+jx3NEA2XhD3k6QZxJupaBYn3zvMRVlRbEzAJ7qMRVoxkVveiAE28chvNgomJJZ5E5NjD1N/sB70CYm5","tokens":45},"timestamp":1774364097608},{"response":"I found a major project-state gap: there are currently no ScriptableObject asset instances under [Assets/_Project/Data](Assets/_Project/Data), and no `.asmdef` test assemblies. I’m drilling into `Data`, `Prefabs`, and `Scenes` folders to confirm whether this is intentional or missing setup.","toolCalls":[{"id":"call_49ALcudiGHzMI3EOJrwq6mgT__vscode-1774363162419","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Data\"}"},{"id":"call_RbTxookB5UdDYnHihNC7RswP__vscode-1774363162420","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Prefabs\"}"},{"id":"call_tLC7h5CkdytsJnbfYVUJGGqn__vscode-1774363162421","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scenes\"}"}],"toolInputRetry":0,"id":"0f71e8a9-9575-43d5-8faa-299604a64ff4","statefulMarker":"Mxe+xDS1CGXYw1zGmHrcZXMO5oio4CxO4IvZK/XAMTtOnrbGaZVc7aoM2OQ6hax8cXG+yyo9WArZGstH6p/02auISMOlApNeJGyMYSWhZVB+RVQMLN4hLjOpuP3IcJOn1cy5NkspOZ/4mbDIYD4XPZDR4fL2Pm75VBjJFnUDpqdW0kh3kSxYGzzeDj0NUOsWwCqUxi2DX/c35lqAtQiQ4HymD7JW5Sl1g197SHGlw6IBs3sspcxWPEp0+97zCJpqwjQmnaAEsDzPN7Z17iJXvNazNu7mUII0+kWkk9mVv55gMODCdqviD+D0/2BmGrjWv+gLuLk1b7nr13AO0HWnAK62JSg4h7gy/0XAPA2okeGaZ/sx38JnkceutgyQgccGUoY0GxBM/08QWRw/8yPRPeb38TQ5fLvc","thinking":{"id":"ZOH3171HiZcxbfxGk6NSCAzDbQnUDlCWa5XG9OO8I9A8nGM9G4BwskVA4u8mO4MyN+fmhBnqz6UTKx+9F+MtKj5bRm2TvnsPt/JLuks83b/aSqREEGCue20UKNd3i5tAXNEcz7+HVybIlsN3gpaugp1zkdMpSU8cyM1NSlZ2FlTstazqHoc3pkS/1neBzAJywc/L7tP/vwt/9vCrDtbWBH2NTVKORUV5T+vn4hFbvAFFc63wZUADEhNPGPdFMpf8fP3uPo6c2reRhXTqFDeOtPY0IrqFRTq9LuZQCOd1TSGbga5a+9DbnuucrF03uFL1UJUHlU2DTwDYjKWDmKDzsEXhg473mvt35M9aa0BhsY1Tt6ZhVZxu5BQNY3be5hh/FmOkTM8O2DunYpT4q3w4WgubPCswQg==","text":[],"encrypted":"B0CM3lRQX11nKKoX3v5wQg9eXZ8Ad5+WhEMmT600Fx8B1Hf3xRHuaHtyqp3fW/uzibw866ze7OlS+D+Ow/kNaA+Pl3UrBKMPBV+yorndS/8VVwE4FLKEaD/UHpfmm9gZlzfj+AYC2o1e1CgdhFmeMKEDgBCkVRyc7Rv59wDw8PJt/eLINEq1wFj51thYcCCzwNJcfs/kx6TLtG6yhDAGNOxtvYhSVdV1kqne8CosKjnTkVDhqtOo9694cqcL19sBte2uG8Y4nT0nDHHzJgA/iqXfoh687l0UrjTyZp9o5fXF9rIpnTmA5I3D42hFSBlXoj17POKa09Z6mGIaG78NRSl8Mo8UigDDJWM0zuEhh1arVqoONuuRiESfOBoDJ7uJFzC1D8Vk7adx36BmajGrAhT4ek6jCyt6x+SNev2cyapEQcHjQZZltqMOtM5euWoWdQ3riBL31cAC3EhJ5xwwNqv5q7nb+YkT4v19hV15WUwA8TxdBPpudrKK0G1b4r+sMwRiKfiUM9Qfg4K/1l25C+t1+oSzwCZJ1Ysgbt+w4Ti3mYebm3Tt2/gVmLjF4sA8SQ5tU4N/isBwpFDq37PTYiH4yR1Bg4dgDr/Hawm1bZLVNKj7ANgkkP3TuXUKSflAtgnsT3Qvbl+/IfnCAQTkKNUY/MmeLO/HlV5Gv8y161rzI6Y7GQM/y8gm7NG0ZW1h2oIryuwmhhVzKa1cdIFcFriKzSvepfEU8T0wLgQt1fmLMqzYs9WEErhV7S3FQNx2ZB/bbp1yCHHwf/BbVq+XrtFYHz+YlF/Q1ZMOndw0xrHPOsVyB6frZYX1MBOLAHLFLQJDlqS0Lvh0C4A8u7Rh00XD5UgyRXmO5h5ybTDHGCo6x21lMPSIycgvvcn7QAHf4KFBxCCq2h1rC19vjkEzLfh/2BYOQIpcBeRnD8qPYkK96onPcXV4+EWPcxs1UdGMyzmX+rs1l593nrwM+xi/8+nrw25JziLmSvFMepUrNGlNWE6112YOivP/NJLSQVzp8oubYxztxPjhLnfeMydVSazbLNBDj/wrSH/G7Is4zTwdjPrzYNRVtw6Z4Kg4066Ao1xuh/q/DBPts8Uwt8WZQPOygeGqIw9frMwpfsSmnE/qd2KzBFed9n5V4d2rx+kxTVUItDB7E/OXDoYjAVdb4Q72/UXE04Yx3o/0QHrjDLR9zx1CTwbhYqLBHpigDQAgooWIJFrrJVwhwUoWQdhichxv6RVRk4UkvkAeWk8jWPLELYpHys+cNpgRXIUgoI8fiZ8pSBowIspdsSkO5wYGAY/ncoDjKqNwZ/OTSf4N8JqFK0vtbQkztxTVQuBYHyFGW3qKf0F9BjAEUMctY4fs7RHPojPlozbb0wuIZZgdzqQWiXh3xZ2bEaspjUZEQnqP7ZfpS+sO9yb/GTPAFr2m9I/1IWfY+MXPtnz6LlNXcpZQVCcQFpq1jceJ6Nivnok8K6O83TnRSNK4DM3U/R0M5VfUwPhePrcshwvlqbVXZ9ZE4QE3aS1t0blkSLLbhL5vR2NUCEXpYBVp6CgW1IQ+rlLvywCTiSyGkFKPGLAjKEpJ8iRhdq65ExAq92VlV70vxzZGRitbeXoBusutlQYWuyBXntnDTKZoxGODtEvBLvTgHH2TSPV16LqvTaA=","tokens":25},"timestamp":1774364103698,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"","toolCalls":[{"id":"call_567DielUsfJrtDQ6tQ5oyoq6__vscode-1774363162422","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Data/Enemies\"}"},{"id":"call_otv1JtENxOkC2Y5ZKnzhbIjs__vscode-1774363162423","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Data/Upgrades\"}"},{"id":"call_BUeIGGcq0jHH0RUlNKqj5x9u__vscode-1774363162424","name":"list_dir","arguments":"{\"path\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Data/StatusEffects\"}"}],"toolInputRetry":0,"id":"dc42211e-f0d8-43f1-93b8-584655b880a6","statefulMarker":"OX/Q3uO1QQ3P1YKnxqRgVJ3enoT19KUCAReCQBinjYh1I7zZ04IcVRSBP5WxOUTgmfDH2vq66OJ4S8yx3JE2ziQtTWfx30xzZbENUpNr6nQ5mZRGjhUVh4hRTujsm5DRQKKZi4yXLTXeqmhAsndhens4NrdoGT0rULxJ3A9a0PIMOxwZdTP5W3t0zb+x2bLr8+nAulCAHK1KLfSlz3fTSyPpplD3qxAqv9eADp3lPd0+nJXpMbgaDj58I84m7UjhD2U+nfmoXYXbRh69HYhL3nP0kOh3e356JtOjLDet01Dxe9LtQLH/KxobqH5sn+HpYKJD8oxICYOYIji+Bx0keYX925eiUrAXgRgESq9CJkQyUDV1xyhsYfJPHm4XiOSvLzABMsm6/xxGaHA+pkFPTqNHif27F1//","thinking":{"id":"B/RQ+gi3zGNniC5WlAuLMr7zGwFWLGm5Db5h9CNcVaHoHp+THzXEuWVhRXrbyxK5LCt9sTI8O5q/KiKWAKMN6me8TF+JO7qzLDo+1RAqkW/1Mflh5BMpjhinpYnVDrah3jcxicW9zNiXZTFIfe3hWp8nTogwPA15aRsHhUIY/ghktP9Q+pR7edEuKVEOCu5Fe3P7l4EsEjNbcu6fQVyYLqGKcZNwU+DjA1fY5h24P0e3iPyczZj+KDrF4ktfDgsFRhQOcATAGbU7izjmNRQrJ2xn0DsDoBVAcOemMebyFnpj6KPVkTjJ2t1mt2SFK5jO/bbDeGpEQY7QnEpr59Dq0wQT0tZhQC/cxojrktefZuP/gnksJstrS+qf6UUR/ve2d4G2w0gNIWHBWmQsz7eiyLxsJDmM9g==","text":[],"encrypted":"BDLAMxHkAoBDDVr2VAIcIyAKOyarjj0QCxkufFZfbBi5ZsmwCXV14sNAD0ArzF8VC66ESVwiUoThS7LmSJML8TRFKTJzDeMdvzpNl+fczv7qcht1w07Lo5ag32upQByZBJYautIXybHLHVvfNGJs5rNciMmgB9jZSrtucJnj7iD1Xgnk2ife/w7Eu2X09lhpSltHokul2YLYaOJmFbaq1gjyWwvOhhFqGznMTowBj55DOAmkls1xEYdIjze1uTUvYAE8lVcIgvuaNuLd9OjJHlmfNmIBFzu6lbPIH8KSIUI/V/JT0kcn3rzeibaAsMnkJgtj/gLFhJ6c7t2M+3LedoxwzmIJMWe/bIBU9k8yOIUBxfaWsZsAKSCzj6ZCkSlvBUiq5ovPWOCZ9f3PC6fkQsBMpHg/Iq4Cgq47M4vWW33n71iOoUiVAMpBB3uxS9Be/MocFUPmjUAtmO2jexcAASQz5MZf8sYcg6Sh/9OcbEvlJhvbUJiZTPb1jdkfihyvgKQ2PgIL/+uIsRfl6FjvuV/XOB/6om78xBB56pcSeRDRSseCisnROD6NqJQPNeIN4BTSZNRBNvrYZZYzI3uiCAl9YL9VBMBjy4M1fEJlE1CDg5ffJVDowJe4OcWzBkggL72ep9+6XZ4tGUmFd3nObt2edkBjXD7E/dFmhxQGwfWo/BCNbvNb1fdOZExQ7WIGMMTXwLZcOG3kiww9v4iqZP6742vG8pwNlDaeMR0Lk85p+1PDJctOF8Fc88t4JtXCSSay+0HuCjzf0L84pzh7PrCF6EdmlD+o19YaQjVfm/UIPAN7EQSV12nKIYkf1e56s0QiGfj+hpg/+fefK3EKBmXnUFzbmqm39XL9DW+0qtY6HbKIGcRF8SOdGjuaNHHKuJHLcq13TScT6LYgYuYBEDWI2tYGCcOHeNjStKJeQZNqkQI1pv8ramXunVUpX4G5Lmbs3FtfKP5dNYY3KvNYl8bdvqVVh1ztO1JSwHrnD+F4QgaZFG7CPpRYsW8Yh8V+bQVuwnl/jLPUNEGa14Tq09qc6eLgmnL/LriLdTFpi1H9V9J+PYmwONEqT609uKos6houT2ceTpH9MJzu0uCUtCLmzJzBPLPB9O4CY8sJX4N5PpOm4jiL8HECsNyRsgzg4rrx2qW/aki+dQhn/QTemByFx1ZVyp9X4vMovIpZYaQYBNYQuanvvLOctT2XgQZqm7ODxVeRnmn+fBxqfsKlTajxwhEsPVvFpSfQohxA+mJBobWGrqwuFMuO6QJsU9jFhJIqGTYaacWXegF0Z1dNvzn8EX9ipzkI3o7sArMKMl7HEkppwy8bYLTRLDkr8FR/bJliWUbVJwalWnaPIdJSMyzsvbgyjVb4k7KwhFLS6oHqrlmRJnhEA5LHUZKD+JVv7BpABTjylh2WFxjQjigG6SVxb/T77qoCQgq+1LjJWEeZjzb7jaM6JOA/pwgEIS1mULVA5JC85+uI09m6p+YwtGa6IO3YMQh87mYTZxLmdiKatU3jgLnmRQ/3KLKOfIGusr0CC/+taJ0kuon35og0MrCeD8FockFGeJfkNeWk5ow5rCiIgWdHu44uItV8K4BYeSSOhRRIZPRp35THI/76xv3FMa2UQeHyixZsWDWkwgqWkUqmREL1bbuTxzVv2hYWwZh375WqPkv7GecoXwgr19okU8XtdWHSnx/3O7h47i7OChGJaRnqDGsN6kMilBf7dxqBQzZ/NHS6cH7tONJVsCk79+3WLV0WtTN8TUw76l6wTbfY+1Cqie/B7cbambUrqWW9Yid07ekTdbpAVyvJ4iG3gc6lY4cNlNePAe0N7M1/hgv/aFJT643KVXSUpU53RaN6rg==","tokens":45},"timestamp":1774364108205},{"response":"","toolCalls":[{"id":"call_AawmdzvbBVtaY13AV1OxAiZ5__vscode-1774363162425","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs\",\"startLine\":1,\"endLine\":240}"},{"id":"call_Hx4omLVtQSFeY2vQ2cy1z09V__vscode-1774363162426","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs\",\"startLine\":1,\"endLine\":360}"},{"id":"call_f2fPPQFnoA5Uwzs7nOBoiK79__vscode-1774363162427","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs\",\"startLine\":1,\"endLine\":260}"}],"toolInputRetry":0,"id":"58dcaf11-4562-478d-b3f2-f0d70da84a3a","statefulMarker":"9YD+Qui7qCRC/ZuPc8KFFc03mbHep77rwEsQPn7Id6zKo8MJI9j/AtODzIMy8PylUjCaF1lZ6KFacbHveuRqYz0QHwHDUR/9x8q7oSiYBJcWVVzAh0K5hRyoJahODo1WCzro5JH6mbE3GGu0bqT/uJDs54sWfpB1/AFvt9VYWqaD1iD3xt4shOo1R9Ji011VJBVPNkAcxiBvsIgvkd4Sx1yTPbUwiZd3Pico2Zvb4ccCd86qZqNl2nIbQGaBmjcmp8ThIru4nVb4JVCuGc8ynrVDkNAw7jM66XgTpfWU7hxHwZOO1+E4g7Lo+UcBQ8TnJE0WAbNZAmmMSPsdgTJAR71Vk0E50Ox8kqWNZvXeK8wrKhdGEk0sWQQMnNjJ2PiDT3e/uU7+U/DXlrCNhxvp15ZkOieNo/YV","thinking":{"id":"Jh2fj2FzYgCVJl0QuAo/61UbjP2iq8DMIUXWVLeLJsOblOSGuuHcU04Ra+Wlzg3rTJ/QFwG11ZJII/h4k3AwEjVKBimx3E3X0XdssiKKOo86P/4WLXgSOc/RAD+w6rgroWZ4Ew1KboVlHGk2UA4ulsEP/tY/is+iPxMO5kiAu75GxChsQaz6wnlmQa91DHKbT8UkIWWy7rwJ0I3wvfIPMHiAtVclt5t/vk6pS83aXlqIe2tnzxu+irBvuasdp8CeSgXOIDabl4+x75yJ4vP9n0wjARN1nxtzr7qDaiYRYx2zMTBY8EILY2ALaQ+1TJTcu465fHbwDuVZpOE3azxSIJD1PjP20jEYh3Op1L9ofryiKiyrkb7PYN7pl1oeXqULm9pbPkZpR1H6bJ9Y0l3prZdmjPXpQg==","text":[],"encrypted":"40n9KPBjhjMDJeR0zuEb+djE+k2VqDdhG2aKloS2D1mzx8V/49XpDHb3ZQsdKMDcYrkMP5i0YsruhcpBZ+AIREO3vLoV/xo0WjpI9Y4GPNqC8xgQLYEemz98wkn9Bsgjfa1otHFgQsRAslTYfoXUpE3agFm6CzyGa6PqPwD4y3XN9s3s4lP9ztxzgZhBDi9S/xYGt4vi3odIU8LwFt51/PasYEJyUmMg5W4un4YxLA8zg8X1SKIY+e7uQZt9QHUnpZ/YNdLwmLvQ9muq1qDbUeyzaYezlcS29rFGMCP7nRaSdm6MFNNHzpRXDKKmWrlTSe7KJbPtw+EaRC5X2uSIvZYc8SvnaB1Iby8r19yJUHXPSXH9zyjEP+OpZ7W1BHY0kREHRdMSK35/ptCQP3l4ug7zh0IMSLvADvz2wB2GU9dZRR59KhsR2LU43/wqWs3XDtO34/HTVh6mR1aea5D9Icj0xieHxfELmk7VpwazsMxZAlqEawA439Gn10gjvzsN4JzgmgcIvEULDxSoUeOIA7S1QY+FDYMtu7SfwvvUxhqIvrgolY/u5mmA5rgWHoOLIRV0bh+1BpU2NoelNqAUlVSbSuI8pmI5awAlEBwo/n8FWd6IX4LiF5h4lWGeyueupJTCM2naIb8oQXxOLEUxYq+1eum9skqtrvdUzorNZuyQqID090+Xo5i9AsDSSeG1ZGEmz4icm93TFm+T1ImUlm6kr853W16rbMu8/t7ejUSl3zoJVP115ndoRgQopq8fPzgBSiWRE1+mvV2P9lZVWk6DR6FpVOSbVq6kthnorYwQjN/ujEfp+3ICgpM1RUXe6GiiAgwN96eGFlvk8OzDn5Tf/d3EvmJc8SwiEsxJWZ0hdEq9RVPvCKi1PAyjtq9m6t+h5+Q+TikyNA7xizL/6KvETgthaSrcMI3/mAus7F9mTUkGPFVIK3ZBAdABsriQbwpyfujEYgYmeq6TFYRRC94BWhe355mthIh/mO7EBi/v9ygENsgVZviRo512dgDrve8NxYegYIMrvC1a2mNv8ktA69oRYC39A0pUMB8tCZoj+xkWbLvQlAESLk9kGvhgHy02oJBXY8F1mDFFa+5RuVjWORIdiVsjEcfC6NhoQKW8OHwLPZC66UAda7xIHXrDbQPjypp/gkySCrWG+0SuloMkoLlWSLqdyybBgZaE2zhBXfVxhxddFt3IenlIUYNw9WGWEso2j+EGaLUry+BU19zFRi0EYzNlc+vBkkZAVxKd2eHCn/mKA62ChQOsUYCmDAslIHAq4/wg/iKiBnOblCnLQOPMY/0t67Xhw17g+gTnE2xr+CahUzDbQvwfmrshDUxAr5hDfXlnicopT407sD41mPcgwOWtgP9+srQlbVqetNHME9EqLRXyapkeWdNw2IzS6cUXbAHyRf89xv69s0K4BvaD8kh0N85Nunsc4+/bAd6pFL4Ko/7iFGWv/+0fuLv8a+OG+E4DjJhS72wU63vsnb1KeTOlaqjcmoOwGfbGdJ23/nyXeQ3nrYQX735rssZICVj1doHKVB0BHWtlN9v55kWH0ThyM9kK6af0F+4V8mqF7OylSJupUAZACC3OOrSATZObA93iHYoZI8t0/a1YW85kAYjv/u5ws+hsllD00RYQImUoLDrJMbe/xfCU7CZMWWlx7G0p/AeU+pfBbbW+tleeYkBJHUiZ21O3dd/tQvXNpOxnk6ybGb9br3X4MesWzv2XvUJytCEbrLS4JcXs5B0Xts3+axXgdprs4KYD6cszChzSGa0QVXgUH32BBPfSCLnt5f0s/T+DqCxfKPNKJQch5yOBsXmGjo8QWR3Qa0Gelr4drtutdjchiGctfPgHysLy8kQ9NreduVQnBSzvZzdnFmrjLZpGCBReSF4CnZGY6R2VQdyKYv1SELL1gqm/dLuVwgLNZH7SB6ExTFcb883VFfDriNn3BsBxF8VfiIY1P+NSu9xvBPkEzuc5WZ5UVNCusdziDY9AQh3a2mGlbdgX9o/JqsBCj+U7RUxFz6dGsP1ruL4ZDtVz6gs2Ts+5qXXwTdqOVABuSMhTF4H5fxNRPMBVaNjFow==","tokens":68},"timestamp":1774364113408},{"response":"","toolCalls":[{"id":"call_CRoaI5yPfFLCgQCtSE4o02z7__vscode-1774363162428","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs\",\"startLine\":1,\"endLine\":320}"},{"id":"call_RJeSleph6eG5dfMkSRljBtgF__vscode-1774363162429","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs\",\"startLine\":1,\"endLine\":360}"},{"id":"call_HsyqvBQob5fZE9wmUpuk8Sy5__vscode-1774363162430","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs\",\"startLine\":1,\"endLine\":360}"}],"toolInputRetry":0,"id":"76838175-5a74-4a15-84c3-9f8613715fe4","statefulMarker":"kQxQllH83COLj3uvV4Jlfdb8w76R1c5symlmZ3I2P3FyQnsQt3z5Bu7MFfp4gSbzoigp+375lnxCIYhPtVYmGmHgQeC861kcrK37fxW76ouRvZsnBi3sCgjZx35HVwZgjsneE96dmJg5QtTND+CA0/5/sNufl2lyCmIDX+XvYEvBYjuAaCe6J1z8J73mHrDGsyD2PkIbZ/iSJJVpa3eQlsU+pDPbsBFKUQaRQDWd7hZ8anghnrTVG3ISdDzN864AqFD6kwLofFnm7xvG4YrkV2yjlKEc2qpffTzwjahEdQeDwvSJgAFYeUfwfX712f7MJC9q/YyUUVad7jByauS4cKvQwvBdH1Nc9Tg5HtI01CkiEXjJBCZYmuErX3M1Zv2tw/7r2tlxRoTlM/vVoSczBd7pHZz6yW9d","thinking":{"id":"xKyUXqwkhcpibuMPwd1sx+aLx8819vVv8STC2qX/BONpR2eytOwonqm4zHrKKW29C/C+fiaACVuw9o7R39/KXlWlMTn6wMxRoqOGcPJly7HR6chYU3yJ0fnJE8njK2l51XiORJDqBDTsu/9JiloW6eB56Fbe8TBnt1jhdh7JG5OrEyQ73vy+blSdCwfnPjOpt5RR4U3V5S8F5q/A/A4iR1Seqx8Zq7veO6TM+IuDD3ZUwJDgPD5AG15gPmgUYaXOtQuhxfkEDo8BhszK8UFtaNBLVsFxjSNRXWgWL0THczdY2c1arB+73YjhedIW4JDyz4HyMlwh+Cr2B9E/gJgSkfS6PZS+tBcMTIDsE+uAfbgyzyYZOdttvqjDmi++jcRenQIMbofWRFXzS7nzkYfC6vtEZNDKaQ==","text":[],"encrypted":"KKLmd6ERzPo/LHQMwPE7C8oLuOnEIelZ6CSF4xMMi+90PCtM4HuS09CZEU9Uk4eYaKqNJTDBErK7qoizoI/4uZFEfB8M8wvJx4nJt7L+8IcjMYbVQs1gv/4G9f2O8N5muIrgo05zjg1KCpYWG218ykEW6JzWYlpJ/6UVyFSTVehTYoLyJFImBHhYOWK6FkzL9Png9OQVHXZozVmhfSSlQHvAJ0hOHebrZyFyN6wOR/JGPgV+HipCh7bPOUx45kzt0L2MEVHMnfsK7/y0VvgDiljxFNL4Z42bN1EdtYLcO/yXrORnL1pw5hqkmazkgys7m/iNHvi2MDFl9Qcyb28vdz4mYWfXbFpLWcrOW0+UVeLcK9n0h36gqzokHhNjBjFsQ/xPDKE9mFkLSKVy+qbBpM34UZnN4oNpxQmUrFTim/ulL/g8GGVV8TwpQbZSwJOHomqmep/Bf34xvPZmp1kqk9J2et+LRHJ7Ufjbyuoxc9fs/UNuwelbkgZDCSq6NtoeQrLfoKhNZ+2ekEkmVB7trmsHrwXBwfTfzCg+jpX1rTr88OmupruFo/JPclo5H/wURggPLuj+PC35yDZztoeaATih+8NnQ/bV1AkCe/SEuz+VMWEQ3k3LuGYqYwlcEPtESOw4mbSBTSNo9JRH6vvRMqx2sVMRqHHZxQAKnNzPjCPrpcXZmhK8l3/b8N2cvmJOgvzUbrOPxORmw9JEesyK11X6XpORG1u45eYfPiLfZNcZFHKyRaLyAORXwwfVNiBC7XqnL0DyqKlJmuTVKgshuf3WZUwiFdP6fPhNXVPAcXL0DPp6k4TkotreTMe99fBThgICqNpFNn59dDFYdoct23HKpv++4JrkTZ8R6yZW41uHO1Nw7Oa+PK2CsSfShnPqoRUKRoCeb9Y7WzQCTxHSY3zLDgB0v0YS6I2Q0uW6r1slAz9lxTWqF+hpMYG+eb9oDxZmmxNPhldjbUDne03TSsykK9HFkUTI48lv+TNO26x/27Imw8Q2RlvqFQZiWK3bBORPx6MMdBHOZLk7se2nry9Ma/sbgqUgMBXJrU9EvTgmH6WsydoPj8MANQOcNAmDZXgNfG5RpnDDq2SPF9E0PffWVqI+jE9zPc4P0iqycCQSFH+2526iTBvx4/Mb1sok7gVu4IfCy8z/TOGHZ6C1gKyRhraVpRCkTtx6oal1KDZlpUWobNLGSUKDPkPOejCz3BydKoIt6Gry5rpQnBXiczkv9Z+vjRYfv/5XNdAc6odrMwZshKYTx5SkaCjXEdpwrzrtovxP8xR7U0OO27AiN44iHuPBU40UQfSwsmdRfArzJFn10PIZjzzOURE4NVMcEOo7oSL+xXWONFHv7iYrvsIrMEFmayTqXaOdBPoNsS/xf2oF1Wr/wQh3alIi9Qk/aRv5WhnqVhH2h3kYEoJKi8Ilnen2hciMnDjCWmzjA7Ggj1298+3qii0SkYCHgbbzJz5BIMDqsxUfXzP3+NlZDnd1lmUglcAOfgmSGUvPWxGDcUM5ZumdFQ+j5KErNj/JZxqP/zd+7cBRwCLKsTjv0tCTQfGUZgmxg5wqlQ==","tokens":12},"timestamp":1774364117573},{"response":"","toolCalls":[{"id":"call_OKJBtEqI8RzTQE717nbSpjyP__vscode-1774363162431","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs\",\"startLine\":361,\"endLine\":430}"}],"toolInputRetry":0,"id":"6fd76823-b5f4-4c92-9567-f3bbf16465ae","statefulMarker":"Oy5s5CZ7hqSHrOGr+jdkkcNsr0jPjk9h47ZYjRf035y0ofRqTuPCtZ2W8EaIFwgiol3YQ2Y8Cg77Wz3WSZV8t17x+PV4MHVj/O9Bs1FXQ/A1ulwSWgjZYtk61HeXr2LpM785YjZo9AbXZB0qqqHOdkgt3hpJqDxErUaOwVWJMQL5VQMPFna9nwhei83pym3t7hLvSRdDw4YMOpSAlxG/mIhsJjfXtha+p82XNBv9wLhqwTve5QyLA77lgaclZeVDqF2cfaMm+Ri9NB9xPN///ZT/RSMGnUX7mtOYSamLLND0laI8nXGVBd1K4f2hORMAb9dF/B0gUHAX4DVwjN7oFfU64mSE3PaWDF4Ss3/Ac20GFEf7VsGJiRKFtT/TzaNqHlN5kUwM5SSeavekNmee/FDe7uwqau8G","thinking":{"id":"b2KeDZ2Q0qF+xAOGFpF48p/e0DZr6LDyugkamEHhpNTijXIP4QEw/eQ1sUOXGmBf9xhQoEOwoobwyLLiCxVtPkjUe/nuskbwbAcfYq46es8SQHyvbNY6vHZki0hRhclphBtgYlvfaBjdhijN0DxAhAmAo1ITmgxs8YB1co9XJvGUnPmbALHh+nH+5ulpEfORFehRicFExmTU03a2i3oCViTBF/tRX+E5t6FoO8J51v4cjwtF13R5wAaDtqKcQLonIYWSfC7glfYkJSEtdIq7t3R6OxMdGN1cHpNXhcBqIe3IFK4XI0NB0hZhLm7xlyrxmLj+BxjX0gcwSthq6aypff0zPko7UDx/O6SATE2Y5eGcxZirWdW7TuOSyFLLiAbAIOnZohT6sok/VaOEMjUFQKaYMDm9/w==","text":[],"encrypted":"pT+MmEfLyz+6hBQV0EbAm6r1ttarqJwoPLBXpGEIXWtvrFGIoqzT56Y9GgoUbvijUEtBlNdV/CxIDA0KGAwf6L9zqCzETaQwmFHPdeLv16E8RYrtcnPIlfsxaDfd/w/vb89AzW9EE3IH7Nq8eJGDLQloDqSeY0nVTpFFe2WsTbwmnEDK+5XGMG1AUOoQ7HzCQT46oxia5QPhnROyHMHobc20gvLvEuoUQp3WQSwjyPX39czq8CEdJ4zbp0Xwpn10+PMd7AyVAA+Jp6Agr7+hDiz2L2P9gVl7pQ8jgH0ZF8+SqWxYCjnelkOLOfmRhggOmyl/I9QR37LZvvdfvm8hm8c0SFMiddTKOvT9R4xjr9jCsISrBHKWVYauhqLhsRT5aTOp9LhcwD6S9uVQGtB/Nu49pN45jJqblofOtQHUVTDFJ8EGa8ImI1NDDwXqtPyoNezhgirdjV023AlWIWU5KDL03ktDYLmxKbHKwlidz0RB6AuN7hVu93+q6kXu8TFsNvZcKq+zlqARtJFskxWhEaLxuTNNiIMWrcLqrbjTwRdr7a+fMegl5zNQ/p5akCWxP15qGbkknpoOpeixjzvrM0YnTkjYK7f5bBj7/plXMXsy5nxAI02XN/vDIpMFsjSL0DJrUS1ta9nLBeyc8HekvkXUbqrCFFYeOc3REu8Quyo/ZoVggS5Hm96z1NlajjrvUCvpqZqxu5V0NQ1r7OqbWOd4YWEI061165LbnZnm9ZZ66SqZFtXh1cOHGZeZyK9ItShswXLBNILe7+ysM26Xzf1vdftWVCqAcMOFIw1+zjvSzC9hyYZkaX7QHKy2ryhfsq7Sevr+dujfEf4jITOAFhCJVL19t0pX/v21n2gkSPVeVVahNSE6vRIV0dq0V5f7qrzTqDlxx2smqDVSsouUi43OVAJUiXgqPXUXUf1+RqJIpWFOPpDjnAdPpWCuYjlhA1brrhtCivL70Y9/Ran6HXJy3rA1/PLkXDsU69ESOJbdd7Kza/k1SohFmiCNi2S+u1PPDs51yRk2ILbA2eAOzFAz9NB9HuGsnloQ/ORs3NIJFs3fJwbHv38eCb1skSkf4xQiLS7htn32GK3E0c+Twa4k5hZIP42mVqUHwcStlbPV58YAkjQSt+sknmj9xSr2mid2nl1HWZ0knBHZTVALzIE79swVmQpeixXxcaSo6Xpo9BrjUD1Jo4wY2/CBD3ehdKcTMKoyjRBOenZ0dUQXNs42Y1M6A+kTeRRdp3zI4ZqqEpGND77O5ZarlP83MZwYxqEalxTxSumphGk7zZWUcqIepqZIo/VQ2mf0CxR5CoyukSGEJbFX3bQDdmYFEv8CFeVB56Tec/GWivWr/a1QWPAABLTJmFjHlAyR/9Ui5cksjL38Xgj8H5NhPb+3FH0JebbLkMzKAPnktsM0YvzigHi/QisAXKGHkkExb1cbZciXaQtcsh/3FvVIpF/eifOn28tQfC5k5uGuWqUogwtBDcRUYess4pCjVNi/H3vBsK1gM2lrzsOps84ytlC4CzB66pNSYt8B1Fb9d/MWJAbbCROBNATzs/Hu3Bn9LmaXOZChsSeeqqsI1WXAcs/UUogmEE5dfH0XfEscNhTBa34B46JSY8Y7N8qxg8jT7ix4tQWjf5tAOQXKnhduCbIpVTpOAhrMZy/MKrkidEBT8H5aN3vfM3c=","tokens":25},"timestamp":1774364120739},{"response":"","toolCalls":[{"id":"call_PQQk6pTA6EEKsswpSDUdP5ta__vscode-1774363162432","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs\",\"startLine\":1,\"endLine\":220}"},{"id":"call_H9JZZU8laVAbJ6tMvBQHFKcI__vscode-1774363162433","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs\",\"startLine\":1,\"endLine\":320}"},{"id":"call_7Mqpfb3fyy2RtZdSwRnU1Pjo__vscode-1774363162434","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs\",\"startLine\":1,\"endLine\":360}"}],"toolInputRetry":0,"id":"88bad59a-ac09-4b54-92b6-c31a38e6c147","statefulMarker":"Z3L4TjOBKs8hFztBrGvZKQXtGImxukLVmHGsbMDQ2STUhZEE55GhwjWeiF3m3I0XnNjRNFpQZ68fWxhDqe+K2VmNwytnxt0xVzV4C1kqoTIScToPcbbMjToVy6TZSefjy9IUi3nRlJCl42SyRce/uz8I/aCM3WYrmK33J9WvPTUC5r3Faww4SNiWg9r3w90korIEjDW65RhjHhOWJuokP3XMZvjGLh7o3EaWaY7CVfFe1m1DDaYSllch/VEiSofZ6q9XPivGJfdRQjj6QbY4nFnTNpye4hrXOlhhcM3YfvqrKtSpcdJepnV9CurQ/QVH5y4xIowAm4kjC7niAceyTtHRIgT8EE5e1wiAFDWrkvRfmN0L3BCroX3KhG6HO/CawHlWf+Yi+/p9I38Z2bvQOwT+/Xw2Ah9B","thinking":{"id":"s2p4H2rwlvy/xnLpeUVNPakunLoXZ1txOPm+gdvYq5VXal66FEDBqQCRohZhr22DgUhhVrTEz0yGMzlyTtZgF+2uXmTflNxYc/KxrgLk0+xvjqW6BPfmWCB+RHtCN3sZMm3R2KZJWNQY6Hf7OD7gwB4xR7KYq1nC5Y2J51VKUS07Enk2mhFw8RTWBnN7cfUQZr091N3jbCxLii3hNLCWuVOrp7RPTX5pIlPXp6cETUwnkS36mSf5jg1qWCOOcWgVgZvZ1JlA5BodKHVytZKwvHh3xvcKPCeqzQyPoSTpabEnET5O4cMJHs0EGZUUnLRjXg2tBCduSCq4Rn5i8M7GpggCEj/DCbLHQTgApigQsY+JiGt+oo1UVyOoALj11tbadXFxJY0zbpCRwq1sjLAQspcXCFWvLA==","text":[],"encrypted":"aeeaLqaxbfMV7DQPLcIBk6g6pkJnnZx27XVxNkKBfjsplIRUKvMaNIwXvHdG1YIfHFCSTyOM+ROkm5N6o3XdTcEMl8Pu9GsZ5kjxur7aWdOI+xLbdZryrzZZIL/3leBbuE52tBTtj0HU1ZZJLPK/KEP5i0uWn8KC1Ygl8aQmP2JKeF5olaPVdq5EVORGT9zYIdooXodju3Rz0UjakkxftcPetwD9ZYRfhCpSmCxBYBkowVLwwqznBLhlsex8pG3VefERusXA6hP676dmioE8pO3ZazSKMYq1tufBsi9b/0kakpKkE3fr4J5ztDslxAfIpYvnE6+1VyCezq8v12cooqB6aLaysAdKhGTAhnH2yDsrk+QoyEtZH2ymyxwlgiEtxQff4/5uSlWhgo5DdXaXz14jXMfkLzGfltIIIo35DH9gOiJ7PVlQBlcuAICmhxHneo+be3w2lFP4hGjNSIzvK4nlzm9ANSaPWdK9+dHhwI7qHLMzo50EFS+F6Vdm5U1UEGhD9f0aBEWQNBvbBGFQC9ydG9vYFfmptjg6XY5OdNb7tVuwUlEPOKk8Y4/+F7zygwuXN2HAUzwEnCcBjmz3prkOHXu75sLDUM7YSu0zl4SHcnEjRUyrVAa9TdqLmmr6ZZcPgKxxj7VWhjexTHP8zDIzRwZOKWeatD9ccAtN6ZlED5V65x4i6GYgTvhc4F9SJ828nQ4p/LRsTBJsp4L+8RN9ADy6qNLgAeMWxUVi67rAvLc/0ZRw5hmitbd5y/V6Xe4ynTo0Q2s2uhrflsuWXgxJczYUZ81QXgZ5evuyembFYsuX0VqkvQAYYEjvJWaX3Fd/q+cicQUr9vV5BsSuq3fhMDNOMLgs9GfXz27949wpjhSnEcYiqz1HEjJ6Y9dgrIKmBI0RtjSL1ACJdG0xsN+nVvzsSRvS5SJJ55600t2qONzQ7gBdoCKjAssSQ7Sa9z4Wu5iNcGc0paWcC2Oft3H2hraUfKYObzosMVvTQy2VPex+p2fQxW2boCVnHkXgc+JuiDhC6E69TZpEd6MdPiMBsgGzNtYuJhFf3ErnzC57UkbJldTlU2WpKn0sqcmCpqqVkj6l2CClSav6xSEyyOmtE5ad79yO52lnqALHHAcQU6l1naTueZGdFze1PP/gyPrV6uPt64Wxj6qQk4P/nVb/y9cNo4VYNOepZYCDsHkZMd865ROB2UM8AutF2jcJB39WyIrPaK8USttoyHc5K1raT9KuvzrvGWkeG5u9iZLdtPK78ybJnXhs3DgWHEQnZ7fvqCtgXbqfz1bGcENSYPXvNrfQ98ACOl7ptpRfM2XHGbTDwFQXrhc9blkn6R1zbQa2n5vxkcZVlwMZ53vodT+ZmXPwzixSZvi61t4aBVsqH465taTZy8gFBMYEF+hwiMbt/eVsY4lzE1drWiivLU4dXtydHh6Z4GvxqfIkuIp8+9ru2lx0NyTD4JzkLH/Nclm2DgPyPEEI3AtdwDMx1j0NyRY+83WzUS+SoBXud8c4Y8lVpxfi4yWtE9WttqAZUYo+h3FwmwEkzT501ogUvc85eoD6jq3wp1Xq4bJCPYA1D5M4eoWljCixCxKQKl+bjwSGBAWWbSldJTc9Pi08qE7/qqPLLaGq/Y5FUh23uBO5oMaR5dCePibJI1AyL7kBVgl+6771Eblthxq5OLwE8VDFisifx+3afyA3qRYXf3YMarq8TtYsvtY3htULcZQ3hC0aSB8LvDWD285OqMJrm8sLTJoOxq+tBFze+og8+s/JLEZI","tokens":39},"timestamp":1774364125104},{"response":"","toolCalls":[{"id":"call_mQmguviTU18qAYdcI8H7NBVY__vscode-1774363162435","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/AudioManager.cs\",\"startLine\":1,\"endLine\":260}"},{"id":"call_tNLbjofvk3VpWNJYDSwQVw2n__vscode-1774363162436","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DebugManager.cs\",\"startLine\":1,\"endLine\":320}"},{"id":"call_SKESiji1Ke68OgyuEy4VAmAl__vscode-1774363162437","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs\",\"startLine\":1,\"endLine\":260}"}],"toolInputRetry":0,"id":"36d54a3a-d353-4fce-8a87-fd67b452a22f","statefulMarker":"W87rXNChAhhKp0DXKtladxzD9SsqjhAMEkOyS6MuaFrieZGsZPwVmxQt3zaLS8/E6XPpuUDJWVevuMHcp/ZelwMiVqzrqIbg1HOqcKc7v0K5bat83XpaLgoZbXuZlSB+pv9yk5KYuxkvAqaihvVpEcTkHPL6CLyiU091uqzDT2dCNlwK1PIiYv4l6YJSx0GaKA07CHAAzCUl9p3YeUJ6AfdaKGznkojOAveoWCsPiTe0by7WuG3degIt3Ta9Dl2ElFqViXSTSpwE1Zj5W9+6AJkB7jphRk2DGWObQDS2socJ2hzRgEIsSeLQ7ffLpTWROKCgBBXzDiQ6AlQP6GiUm1cmJDZuLjkDEa+p6E6GEYqgiNzLZHsA5omtwFnRk5fhX0IkrrsgJ6ObLiE4ijqG3oBcQaajbrET","thinking":{"id":"8psqGI3jaZIVJe7ZaUo9q6GFfStDgbMImwXOOYgl6cc44Du5u6yZyAJm2afC1dasBfiwpWvSssX+g4Vl/udxEpnlwMQ83bnRrba6X4TjqB3s8IFjLki2ytGSv4fQi4Za6CZLPjz5NJpqINqLqyDwiOoCnjwQamb4V0xUr7+VOeFcdMl/t1ll4g/PjyeNsZbqKZWMH+T0p2WOzSfe9NwXZEGuNyr+CHvpxzSXbmjlOmiNMOFvKbd0wAIP66KMBitYIj5XZpnd4sSW2NfStb7ddE0T9dfopG1pMHiB16O1hjpW10PukukZRH+OcbUDb39w3Z1ZPJB8FgFmH4SxwtZWr1s4rKq5K9J7YHzfb1aUSnaXhCtQqB+ucsqadN21/b9i+qX1ROH19TNpswlROrWYfdsuzS28pw==","text":[],"encrypted":"ROTbmdath7IuJaN22AFcIv/X0ajph3tf82yzGixr1guc5KoQ4Fs3c7MH3sQv+wiqnk/iFKCcXRCmOBUycTkRY4Y+urV2j6r96H2+HMOpYnOtklGPekSe1e/+tEn0bnunez6Yd6ryh5b5TWGI3Wv7bFnGeJ309+h+uvwwXb3RaxcMQqmFTvD6x8Mblv2EwG5A5FTFv2HxqF2fvRI3g1c5RJff1wTGjIlVpv6fSgxpGbMaQUWUeazHH6twd8M0LRxAK4f5HAZ14l4o/P3HFJTuePUpOXvB7rnWRSU34bSwPBDXfpMVWYemqOE7hzW3ZL4/7048z8ydlEzYXo9tkfEY8cKse6p7yJguDKARV9A9NgyFzklpSdAISAw1nut/VRGhWaNboUB+XVrAIhl7MC/+seMYjrxFslYWm0jYC7/2rMG3ii2e9xOK95nFxycKox4QS9qLC2UJPxyPPKAmn27FlOT4MwG/Xu4THF2CqbAaO5ExmygbfuHatORegpRp/drDH4HX+2QVyyMAuyYiVJi0giWR1nMzBocTWRmvwckUL9/P0GKLC+ChVaRv7XVTG31QzP4Y4gK98DjD3SaXh+cFu0zwR3HLL3JbMoE1zHhaRAgvB/jusL+lkKSSoHhFMXvC3lqBF8Fdx2+JuzYkGeHHjeGafh6GQB5jWU3o7cdL6nGvV7S+oUwaqVtA0oQg0zyRxEIsxWAQZR0NlJrdhK9nLwUvOBxL+f2WGTGLjlBsCbYJWtiAFKhng8aujhHyagpa+wu/Q1HqLe5yImU2KC1e+92W0gc0RvKkkvlJuHGwiaQT/ai355JYXfxwqY60xvkBSLnialVRaNOXvA1qJa9m8lVIpAcBtcbKp3LYFZ1+UJ03cBOeEGvN4xeWO3mY4uAy5QLhuJktLSkVuVqoI7smlv/0Ym5KBMMLu8UQbz5potpj9gDSlWlf+auZBeTaQQzJ6rmJ8v8/trWbW0V9YrAyVJaDsQtj9BQxZ6hS2SGXhAucLOmmP9DuvB9DfWCTOIxMQvCPVp6jePiEUjafxvevKYlrjDkGyuoKeCW1LfqxDrDykjbsvBXhX7U2Wv2yxN979Wp5JwSXaFmYxXFnIIx1kGHFBGgsJ3PPhXPMGoR/pociWB5x/pBv1MltgaR3v7+zftuvcRs2CCKap7CSBu95F1G4CNmYFqEiOFh9ea8KXY3hxmRFUAeUpRddTVaelsY/8HzsLgay6LW4ekqMBFThYonFgjpuegia8rn2Vb8dctblWMUcEoNcMTSXXWHAcNcbwN5IU9hiBay8EczDhj8gflDTOzqVKBBIot8GRISidLz2Ax7msvz6xZHmQcY5YVvXthyGwfLX6r/PnnQZluBLh5kSytZ5GFB472A0ZEe8Qe76jVc3Eotzh/DOx4vO84A4UZYb4Z505AuSar8p12adOe2mC9ZVKCx1YjpWvRqPxPmoYtVUOHVehaDGw8kgn9HuyoIpReYAftTHPjx+JM+qQ2DEuxDRcr1bYah1m7MCvtXjSKrRvSRnbXKvA02MN+27CziAbzpPDd7eFoNldVi16gmI7x2z7D9xufFZAGB4Z1O3HKqn/nU2J0XSpAn38uPJdlldr9RdwIkumaltIoQ2mCG2aEKh4TBhDaLOyJNbPjFCOybT1b1cu/HMIqo=","tokens":21},"timestamp":1774364130003},{"response":"","toolCalls":[{"id":"call_7sOyze4qq5k1JtdQzTSB8RJ6__vscode-1774363162438","name":"grep_search","arguments":"{\"query\":\"TODO|placeholder|You'll need to add this getter|adjust as needed|TBD|FIXME\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":500}"},{"id":"call_uX3clshqjoiQtHqkIdY8CqPz__vscode-1774363162439","name":"grep_search","arguments":"{\"query\":\"using Unity.VectorGraphics;\",\"isRegexp\":false,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":50}"},{"id":"call_n9lkztVSD6zIRSpwAA9t41UL__vscode-1774363162440","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs\",\"startLine\":1,\"endLine\":260}"}],"toolInputRetry":0,"id":"b4b51b1c-e24a-4546-8738-feb9d0492e2b","statefulMarker":"3N39XsqdtGNy9hsQLHJxqF5yHT4W6W4mUGGC93m0PeDciM4eCjaBQeDVLSTL3AQX4NdLuFDdoU+fK/jUwnc9ij3HhKQsXy/2jTD7pQty/7IGjhgi47pIlQoTmqIuVyYV8WD9QumKG0+CKwukhAoBbG15i6bYn0kH31GqFbE/hsFXNi5gMRc2Up4VKIRVWkgtYDk8Bqviy2DXSc7pP53m7DPu0LPRT23U7Di7FDtF0SwTRGh/dR3fx3cvyIQ7y4u0AHO/02cpo34KdJ3GUPd0X3vwz1kB9HfSEWAKya6HNf5toCfskBlNGTaDbNDUOIMEqeI4MFhEp9/hTMB2aeAwcLPzsYuVBuCkz9TktBIgylDqJq3VedKE9UmywAJamqeMHIyRl4H5baK9xRBTvImSYM1/egRarblN","thinking":{"id":"PVctCv2MwuvMssfScsxfDiminsT/k4QAGKwNscHq7NUPCcSkVBiSuWI/me19QkfPI8zZ4ANJkQiLkQpsLade+wrg9PzFJAZ8LnrQYCoO+ABxHL5s5Ig8Sy28E/HmB4I+XDO5iqmQrZS8wY7JI5eSIpLMsI5MiILOqBGNz3CCczuDXXBXI9CArBNYfySUsxbpa7wi9Hg65P2WDmzgE5t81Iea67nQxc0o5YcscgbcbQCl6dDZv9l+aahdKYuVXJJTfNXwnAsrpIF0B1R3uLCUu5eGUOhdQDXco6YSS56b3ueriTOTt1Y4w279EA2Ny3WqhOQh0MY6gm7f5b+VhRQEJUuLBXS3X0xv+bzlS8Y/fv4en6kAeaEayvDp8d/iojKfmvYQJliMzdrS2oVleB5xqCjPDkLo0g==","text":[],"encrypted":"QxAOn9GE4UGo9oSh/6L/jdORMClDP9UN3xf1Nqw7kzGAQQ1M+q3u8pO10ObqIVtDTvxTAcQHGTMaJCETaDV8SGJrik0hdO0xr3+d7CsDTO3n+5mPL6jWcQehtFE+Nv01VH5WzRYJGKtmfQH8FycEHhirwAVnl89/Yrj0hVUJywP8PVjG6kftjLzs1DbfOM8CVV97zGW5OBIXfsDX/VuKSHxLsq9aMkSI3Mt9dlDdHFpzCtlBQXeTwhrhdaDKuPor8WiFpl6ATW/uldrRXS4z7N9EenbJn0ixmz1iXjyfdiaeVRvE2Y1jCRZlettcUCh7fV2jbLW2QzTC8E2CTzwyxtJERsGjMLmpUkWcMAJTH3qIQzzGDeADV4ysk+FbN42AcFCVXN/8Y4IkMe4ChS6tIuIs4MUoOxNwZ92iz4Np+Rb031FvCqa3RVoMdnE+RHeDs0VCZDFyiSzGgWJ9EtQ4qz+/31VEIEVlKtPdnduohpU1Mk/EJaFlVFIFeyz501iy9i5KmWkqbtpnlgLqD3iLd25Fn7kC+hzS/vjehLR4r5m6GhxoWB82CwGxW1Lh0YpvuPfTx8mECokzsEJXdbnKBz+XR5hArvdRJqCKdykQmaw/WHG1zUukocCjExYX4W4aoZtOSynNvIt9upilZZp43jxKqRPeMdiq+eW3O+IvjL3Cgz4+Di5g8LA6T0A8lXw6ajddrUf3zC01eZwpCobBZ8V0ZwmraLUw5LuD18iMVOb03ABo/7CdGtWguk8rfJwCP7WL56GDPtTbQR5NdsZIZtblFqy12BNIqjTTX6Q4+4qzYJpo8vI1PZXkQwiCvkEr7zQ/qQIjgOLbwLMh59nE+kLZPmG/l7UzvwRZkbeUSZ8REtSzx1WjkFOy99CtU6q2Xgm+jeDvG1EGvH9AU0zryoTTN9flEbQzcaAO1UH1/bkWQoSJBKa/7baLAd1iTtOJfpr67KyvhOKhfc91pmdFgw3NPnZHDQ3gq2U6ojLB4K1K+UxI294/XYJ5Uv+mPiRcxL+6dpqEySTuHsBgqdO65h+9DjNAgDH5kWa/1S3gX3jglt9UCH5JQsMVmbnDSbqstnSYl3iCqOrm2ezcxDynV1CgStp6Wa3+jtr/AioVsoHRwA4sP5WTBFe0Zl0voDg4tD0YJ4siJVoHYJCDYqCkCd0XFxSyXv4SDSy81M2DP4rqmYuy7FZrSFwuDjR/hDPx2/LlMmEiJRpbdhifN3HS3IXmoE/RAiCejJXjnNIabqV/s6YBiWKOnp0UjL0gJy4FCiffsnwx8pKW8DTYQmvTWj5MTw+wkUQF52LvqBJDI+C9H5XJRkOIlac+AchYrnFvlIWEGMGTInzlPySR21fW25kejQCRZgpQu/FggcxpmpB6DanYFO2nWg0bYmKjpHYyLJ5VJWucciMUdJIv/nPmjx/1K7HsXOV3hYO04pyyuhZ6QdkmSsC+ev1NBiKphyiWtC9oJTiGEq241+i6dlenlUjlomnxoA6TIaROpeamJstY6nMnE1YkKfQ/ejFjXkaHRMZJKlM+mxNFfoM1r7I/+P9+Wdub4veNQM1UABaznOq10XII6pxFwWf16CJdzEHx8YbWI5ILl+PDchXsY2xMjcIMN2phYcB9VjruamSaG4Mhg9F5lmqNHKcpC+eNmfhb0DqJlxnhLErJjGpmCpUTqsIWuRh1+kosEL3BH9QfbcLmxl/IpWf0g0dVZu9eGlFVWks8CO2yzP8K7RpSjJpovCHSrtU7u+moGbxbn7i7KWMTaS1LFF3Ltg/fpFRHMOdhBWWBXEl1DWecqNPMz59WQuReHcUekxy00e1KuJbVhR9dA+/jQBtwwo3Wxr1XL19Y4iyYLFlQFr9PO+kTjBw9QqqdjCkrIgX3n9ShLIhZhGw+nDG5GG0YBabkKtar4Bx1cj2M5/DARTbjbE2YAZMVdtRli9wrb2n53PgbqDcIpugNxaezX+RFHcybL9IYD1/VuIUS26pmcXI0LHext2xyeQsQI9u9h9hdcNepdQsZ6WcLb/STW389hW0mkPOARv+zTzxS6VXRyP9+MQs3fzKrPHnBJiwoQO1NQ3bNVpn7SfL+eMAvk+2XYZ3A440kuaAgRgPUtI/tFAyfXKUNPD7OX4irP8cTU1u26+6v0JqdWKsrI0XlT48D337lV7sNfO2zuzmEc9kEi5zfHfl9/Gimom4NTAX0hMSuj8Nkm9pLiuTsQHSQeKAVTVBQvoOo/eW1cIM6EMymQZP87+kPpcLFuNxgw6zaYeVsYE1/dgz+29SlrLhwGzrxz7e9/fskR+p+gzL8nCG1NnInSQVOxRFTYScDKYn4XnLMniNKpSHvmPdosdB+9EB6QOBI63ldLu1lRxOgO8ZJmet2aYDRzdScYhi1rZ6UoWxKQTff7mya0+citCDvG7aLwndyx2oTIInFncnDK40A1LraQPqPXCcE3v7ocJjXQddJC9kroU4/s3PFw6CA1TamXp61Kpz6ZnJ3Xjz1hPC6Cg8PU+1nvMFlkoP336UMXFvV62+DOMtzleteY/fxv1JxthH4AaDf4ZYUTBFhdOgY8mwVE1hLAPxjRcVAFXL7tSoRnEOtc2eX+DUBoGKyPPFlNa2djki6KqQO8z5ZjdzVVZgmh2WjRxaNfTShDpl09WPJEmfAhLI+6ZgkvmKLoMvD4teIOrq6PeR8rVATS3eHB5u/UFlYW7tCn9/DF87XKOlN2+9KA3VZazsBIZ6shMLmvs1QZc87dQoFONGvew3AJOxLXvwlgpkdPXVulOIQ0SWlTREZgutmhex7UpxbrBI9qfXF5+y96/uJRYbUsGqVfOYuv1swoBJpXwy6hOXNqiIFkWftyeHxut3Y0lk6xXwIAGT8e+f9IcX7wiSxWM3DCGnT6qzUXgKmuTDLBTxqudYjhV0ckvlGJzo1olR8X4iYIYHbSTjWm8f4xBQogcKnd1lMU7Unn4hJ4II4/3TY+PJvxkJA+9KWRV7WNO9DioW9fBTLVWpkQGjoHRiujvaxrLznu++wR5TLqtg8PFWaS2x0pJzQLIoVlKOS4SD02nnxSyraoB2UUMx1pOgkRrU1lmcNKosF9OlVBZPChSp1n2H/OvWbWINWnvBMsGmsWfcjjniUjG/GqYsS5baJnrUDBga8cmdeTvghGjimzXAjxPMbkJQcrUOYB7KsEgOlvLBMs46lhIb3CDf0Aas05ZS5Z3oMUMMcIEIT6e+LY/wAzp0WTFlDbGWjIhtD+0jMCd1kPTLEcMcFhq/w/085D8x/aX3AZmM8H+wcDFLrk/VZmdMsAY2sGvHiMoWICfnY2D5QOdQv0Rty6NFRXGPk11AeXJqcsuUV7XbCSp10SPM82Gr7xron4HYX9I3quklWrqNKv94Ar7QCADIb4wy20r7c19MD6TKts0bUqsTGAOqW3r8YMzbWiZbmYVKd7d5OQpsVQJHrT58q5vPWxLVEdbHfx8J3Djmc1uZNQG3Z1KOza1MwI7n6NDYohQkYH+qfxm/Lr/+FX1FXpyb3/oeNfyMBSDlcXDHT87kIBnGTrwfUmZtm1ZHbGLo4+PpHZ3R7pGye+SH6TRSRZTlHYYHPoLtJZQX7V3hhnst03rrhpwCyiP9hgpbX9QdMcycMp5/ANDaG1yA2mq5Km0TWrI/RbSHi0a6QdagM+CD4bm/MULVgG85ZrUsPxE6TXH0Deao20/mbRUIukhtmBoiwxed2ZCjZXSrD6wvY4keuHDP9YCFy+QJsbVAPS3MhMI26rrZ3OIhz4mASzQ92h57fR/dWL/VIYaDAEMsbg+R5GK3+oVEyHd//qA57sGGlDYTu+KB2Oq6B7ikZ0jBmYsgiuSLc7I/os87MU3kUG4j14KuRZvuHc3HF0HXo+NZLdwN3l5Mzprha7nhDVwqkKFgSdCrkl+I2dsBjqAPJ04Q2hqYRYGEojv7V1d4l+Tu0CcK5GHuO7R4CCD70sLjIeu18X4IC2Rl1GDxBZu979mRGcfCSeBhn8+3IXQz98g1g32zHuVjm5U0mNiYJvQZK0F4eMbXxHIjhelqR7k2J","tokens":285},"timestamp":1774364139146},{"response":"I’ve confirmed a few concrete maintainability smells (placeholder scripts, stale comments, and at least one unnecessary import). I’m doing one final sweep for incomplete/empty MonoBehaviours and doc mismatches so the validation report is complete and prioritized.","toolCalls":[{"id":"call_Bv5kZxC6E7t6l40HxFLE11er__vscode-1774363162441","name":"grep_search","arguments":"{\"query\":\"class\\\\s+\\\\w+\\\\s*:\\\\s*MonoBehaviour\\\\s*\\\\{\\\\s*//\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":200}"},{"id":"call_R7hE2KoB8Y9tTE7ErnDDzeHT__vscode-1774363162442","name":"grep_search","arguments":"{\"query\":\"void\\\\s+Update\\\\(\\\\)\\\\s*\\\\{\\\\s*\\\\}\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":200}"},{"id":"call_QgMIhdddXkmyTEWMuxwzCWd2__vscode-1774363162443","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md\",\"startLine\":1,\"endLine\":260}"}],"toolInputRetry":0,"id":"df7171f5-a12f-4e93-ad55-a6155503f531","statefulMarker":"NpoIl1gg2ZVZJYK2x63q1hH8cTB43GypN3+QyxA9xeIDPWqfIf6F28A/elkA0ypGDsJKHHW6FXqcUVznsDD6QVcig0TM2w4PTFsm+pS7T1Di0YiZwOfe2aneG3vnyVtv0Op30++QvsQBVnOMgcoyXFLgdFvvvmroEs1dOnOVPfXFMEwQbWSK5xi02LynVESo79ewN1TfBmKbm1eZbetTkqgFwLBZt6YRjMchJv7d9g6YlmbDDT9+jIXHOX50WeNYYispkt6iiFrBctGEpv9FjOKf/MTnw5QuTZwNd+q6auhitYdM2E9J8mysYHlYHW3znuPtL5npPn4xkaDorvaYCdeoGQIKfKUJfrQ4TEchfqdBYrExn5D8WOMWJ7olaViEhNUiNz8Si498tcPqszoBL2a4XQQi8s7v","thinking":{"id":"y0SXBT8wLnWkMHjWAZCEPj+uTREmiItCt0Xir1kCwaAIBsjY4wNoUl/Er0UUg9yd/Xwj+XsTLYkAvUtlmv807AXi279twnasDUaJ6R7F0xLWMGUnJQmq4znZKLo6xO1fsMD6PmPHUFrELXPUE9ey0bK3U90oDbj7rG5DEZa7P8C7c2VuzeZ6jwsvnREB0wQi6zoy0U2OJRiJZjMgKM22CsC4mt5lB17l2u36GONh2FserLCzPXhJZwZ4KfMJjTrPGSHuynI4wKH0tnUR7xWkuMXYtcWa1mKay5aTJKpOwkc2baJ2ehaj8xKh+6NMIC8xwXQP7lYZi2yIAzIRayde9GeH4ufhq3Dp6C1WDjIfSuqY5J6T99fLBDaknaMw9o7a9JMp4vBBos0yL1R0WZfaD6A/TPDDjQ==","text":[],"encrypted":"UtU8qL57aly14aw3Lu+THtyJuKzZYVOr9hkAhy2B3CFrwSVoEIGcQsTizXy3XKkfVj9EwbQi/rSzX6R+4xq65mh5iF5J0UXFtSGTGkt8As3F5nqhqglTs0u/c5cGg4dgMPSIyA/axbNe1IU7aH5NFH6EeI+9a5V8MmsTGweLv24L8uQDV7tQ1tXawf7jaPakBDQICbpSQDXYp/pNAZlu4mhjXTQuBhxwjCJSDKw/i3g5cLJ5jgPdIgSSKP+WBnP0HSTAZBx7JusbGVyRjMOJ51bQpjqPsp6oUhLpeGAcUYvcMcyCv0+8T6na1hHarc1lX698F5VBoNJf6h+R5t8U270NKk92v+yM497BxOLCFdlQbbOi33OrXNJhH+tJczMuHiXaQaJas0nXLwBLJ9dXnLMtAJadwP0sWyUcZUzn6j2mTOru1tfBtYoCxy+ouYk8H5kLlRRBJdfszveaJnByeM3qv0MHbFIKvf3Nufw7oDwOIDCirWwxdCzq5jwHeJSeLM4iy5bfRHQySMPQ7ydzVYIZe7M96qD45dYL7/PF4OIgwubrVhoQelqClkL1wEzk5LVZ6BdzJZLILu3R2KVZE6Y4+Tkgh7jO/nLCyIeWCvrdFX6irY7ZMX03p14CbpqlXcn74weY3O4eJCJjs/IXjGRrVpntTi3tP9VXnNIj/pNx/NTnnuiP8sNXtXkBRmiMFCAJyOmRLqbbwy49ZbCZWZ3m8xPw0uoIUxXYLek6TOIVkmK8ag3qpT6OeWKedPtIPyV/nv//ixmCHYr7bXkCXfzeu9RrZxiGdVbi5kh7qgp8QkDDqrj6LONf/uCZ7Kk9U+tzZWYj3SyPbTC9rwgrr9lE0LKFDa7tKBbF7zmM4BYq2aMQ41os9MMFJ6uKKzI5ypIPgesfMwReKa9rM5V/5/SmSJ+nGNZHBrJro5y6uvUJ5Ds6TXeCx1burJi/rCC/RrcNR6ksBEFhPejjp4zC2JWXUn9uXZ1fgGa/cx+92pc22pVBBk8llZUARoGfXExqnIz/LMThQlfRtuNmH/dGcl6FJ1iL9cXCnnGiIAipc/fb5WvUfhieYuR07mTSzzjViAVM2AMvAAtaVu3zU/MXUbaJRqs7PmQe+GCP+6+A5rk10Th/poUhZv1j3x508sJ8fR8G38S79Jo6sFCWT8UUivzBcQ+ycms8cAcgBvRviLnzRV0+d7Z1nnC8xp2SnMdNmp4qv3OZFYu/x6SYHD2T0jDnvW9AXLQUKAAE05ddqhNSp7310NLCNB9pFB5jD+rw7yg8Fq5zXgQkOpK2YceLsjTG3yDHwlLIA8alxkthxHysCMedLzgeiimy7BHKpZ9oK729DYtotj6/T0vBZwzqlH1bwmkXPGB4XfjnOLZMWVEXhf245VU3yGRdOF5jTpnB3pDfFNmUAnCZ0gypCoJTvykgjKKG+xHsMTblTiPPtxwvj/FiApPz8C8haquspHXum4JeP1SbM+W8OV5JT5dhUuLn822/EqZ4VqlkyK91S0WDfkPmx4gdROcIa4QKM7vlwZ/N7kLYin8OGj29FerXwyfvFYgJ8YrMEEX5y1O8v6QDMFMACVXgXEqE7XlkGQPT71xU8kpheLMmdI+cGTBdZaWPuCKh5lExc2GGofnT5AQAWLz3vFXWcOCRn4sppQv5BnJWru1EIRO78UckDMAz5qNM0qFqIQWWHTX3AqPTMcFaVEYT92CYGexdI4NpEdvIZFUUR5FyXMs/lBVs","tokens":38},"timestamp":1774364145772,"phase":"commentary","phaseModelId":"gpt-5.3-codex"},{"response":"","toolCalls":[{"id":"call_rAGb8mRnGcZghCVrgYIMMKsM__vscode-1774363162444","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/README.md\",\"startLine\":261,\"endLine\":548}"}],"toolInputRetry":0,"id":"7a8741d5-764a-4b6f-81e3-c0ea555276e5","statefulMarker":"NVq+66vRiPbAVGMx6UCKMTBLZ60h4+Xmq0wbf5QS2tkxEFgV36wAPuc4Ix1sM17bAoDNAL+ZDSzM1pcZt3NVBVL/eh+HURVnyiQJswjFFVNWDf9/jfSL2iiYzb+fh31olWrj91IjgaIK/awQp5tuMr1oi7B94BwZUbwowGxW0LDdV4OsjMm93RcUxsO+3JQxoXWyBS2jJ7vwVR3XVZyDDZBO9I+wS4GLsza2Ffx5PeR/sdbRqdf/lMnKcjdtyS2/A+gptEOMw+nO5SYKUvfJgyvAB7Xs+WeNxk17i8xwePhJvf6xcz0HEukmQZgYX9AUrsudUwsq8GsHBlK9LpUMDhf7BvGjzyX/X1N1ALHgD+lHeejJIJMzDqHTRIFM6VpgTEErCU5pf1Us5/+JM4c7aJdxiJRax/K1","thinking":{"id":"/+YUPUqZDPbrkcX/Dpk3poBxHottnLgRXFxD112hnT/wVWkM1tAn2eT99s6OnH1ZGn07HTmHOOscqBoFEvJPqHrbHPbRjWHE5+3+2jltixl+vXMSiGLjn3nDnkbfkkPeUqvdK9V7HFiH9tYMJVp+nQ2BEKTojsfXY023Ls9znmJKY6AImeO3dGJWfH13gtgNU+dbS9yI+1fkaBIxyjvr8BCDA0c8kJ03uC+SaaB6kmfw8fBkT+VkGi98Cuq3aPurDcIvizKy08L57wiLIj+dKebFXYw9RuBpconQBokfn3BSTwe53XeFy3YJIAEW8GD4BwnrxUi1zybTWm8uDKWgoHjlJPZL97/RVHuuUAnVIXZyE1WJSQEuVKgUZ1oLPYT/0+463iJ/bMukQ53Uyf3KAROrMb65Hw==","text":[],"encrypted":"GGRcK+HLfPIUQPixMSFQpzLXXPIK5QLk8TVQ4a7dkALi97kNUgnGIbK257Cti8tUU9Bn4ZujVmeZpJwqchY/2bPcPCsblTeIJUkYiSFuGUueTp+pxdfpm6VNuGFndbCa99nkE2FW07uNzxn+M7qDhyKSIKxbraMpA7IMaL26T+mFWaggpKXs/Czf4+73Ddi7RODkrkOtP5bw3vPeJfBGHwW00AlPqB5FP2gKWjb8cS3YOWiL9nXpwE8WxrYcbgjR/0s3NQDgDQsHBFKSt4HbUX4N1S8Bm5DJ9nxn3QPtSFdgNuW1jqjpLPx57zfFIDNJgDoVSVddFRCTSa1ldQGG1SxDcxoOpiMKsSaBCSqvdh2/IU7tV+FA+zSicGcfscNcjiShCrMw06hBaH2YrtbYtS7bHPOAEBtZKrHiYYnSL7pGpozK4LBLwbbSHAHyNc8kI1EMq+1RPk4UBsFXKkQijWTz/oZFTkxX3rfPMuqHSj9TDe1oXBH55jczxltMvbedCT1bBwtEdcSXlDIQqywUBi4WY2Ys50lD3pAel792ePzHRcEq/KNXlyA7DQf29N10Osh+I3dYVAceozeoAVn5VMYEPOfLCprQaEBHyhiUsWmrFaVjQvrv5ggZCEfg5mDRxeurJ9IMm/WWQR+/RU0yxCWzZceud7+3r6TVkG8PLDaTsL7rKwcTp0BVyQKVsz4T30AlJD05Eg2c4LlDRENhBhHWRMg9FxAxkdmuM31h1M5rFhSJYnTVEWzfJbGDVGON2Fn5qAfDZ3clzePQsFDtqP3cFvrpvXoq8X9X6v76O57vsoQRn2O608gR6qC5Y4qS8dQmvFcHtLnq1C5B4mELwLVS9YOWzmjpm/eD3YwwiXkyhfVhbtIqynu5ARa3SfKUoeBZK0+2EUn74fdIn0gjFIP6IS13WgMg8dtZTLEIgZP8ohapuyLh8SES9QmYFrlQGDkXME+N2LpaZMBqhEG6bik5Xawcpv5FeBP8nSx0qsdZ8vP/gBCW8vnt5OOwhmqjBkX/GR9I2sd+Bl9lQeEKBlc1s1B3bgQNauWZhrP9ZuK5kkIaUyMD0/x11wGtwE+RGSndGXTN2YMZRZs6HsZAWp9NsM+Vmno2PszBSSO9bPochXePMUGx40+F2nFq0lApc1ADe+UsfxKhPuSGNfGrLk8EaTrvIPnDBhWgdRwlFkGCjTx1LJq1H58BTOV8LdJK4bSf392+1+w65PlRwvaOvOEKEy+Tg19vI75QuFMQgu0FowLN19NBGFMXCMolJAlu2vfAocNefD43+oQ05u+sffAwDjhxeV2yYyXuFEooBEpjSOkcGBTQjYj+vW2c/4YVlNT+97EtI5uAn6svELoTHaoG0bewLeq6vb5lwWGKLcWwMVWeIsEwuLQVkvYnzrZ/Kg76jiHlm+BZddGkNtH0gxlDgDDDfgx7J3JDHO6+/jPz1Z7hy1L1+lfODZpsbXoMiHml50V++pKhx2BHs8Yp9Itbk4al8jIklXNASiHikQZYjGhHPSleCrxDXovCBfMztwK6kfNVWJPiZvGVKRafGaIhIA8V5o/THgje8yvfVzJmD1CocH4og5ZxL27cm6L6Sq9FPJaZa4z0XKXIgpeTzV7YVz++owok2LFqcVgclzSqapJGbPG1R+oO23OU8GyFSqIZhgc+wM1h4jDUCwEoKWOwi2VlV6TqZCDZMXe+zxVrVbFyuUXLzVSlJgX/r5bSZzjWu3Y7lkSgWq3LJilUDNxWscQf2my3A6gIgdxDKyA/ECE4OH+fFPdZ6MpYg5+49sL/8OkhfzN0pVboMTJlCrxYKbg0KJVfiqwsjHhZ/CEMn46hVU9tFBe3pTOKQop2q9HP+EGr0aCUf+cCSxPDDctPvKRDtoGVA9Gt5cXlL+SbIddKWfDVrn0ycCDeY8qv1JwfyQvlgWrD4BdMWdrGYHn23+E=","tokens":50},"timestamp":1774364151536},{"response":"","toolCalls":[{"id":"call_UpGJzXUKHImQHK56Fos0JN5D__vscode-1774363162445","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/ProjectSettings/ProjectVersion.txt\",\"startLine\":1,\"endLine\":40}"},{"id":"call_6FXJi6CpJ8J455BkkXcZNWYO__vscode-1774363162446","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/Packages/manifest.json\",\"startLine\":1,\"endLine\":260}"},{"id":"call_qsQkHHjng8oaupEAxcSCtdiQ__vscode-1774363162447","name":"read_file","arguments":"{\"filePath\":\"/home/breadway/Documents/Hazard Pay/GAMEDESIGN.md\",\"startLine\":1,\"endLine\":180}"}],"toolInputRetry":0,"id":"6c8bf98e-8f63-4894-a970-37fdc2f5eb4e","statefulMarker":"h77HYoWuiWSPobRtOByFGkoPynlXww5uOTyMH0XNjCcBbq9C1Q53IzOWXiB84m1j/g4KBLNzjjhizOIlPLZIzwxrPSENCrVhsaeOQHrDIAnP1AdrJgINAoaTzVw0HLTyfNsqRQCLttC2gPwgOTPtrv3Cbbjfy350mCr5Ck5GoR2BXsTDZWzWKal0k8xbxcLqadMgdWsdh05UBpjnP/YdleEUZxIOPSXj7xYpbxdYWXDzY5aRYRWvv8ot7kkS14ZtCAir/KIN++VhluNxiJLUCfamYfLjwLJKuoqOYOjQkj+MudP7BE5ZEckD0NynaFIPTwTs564KZI7gvUSMx5b7ztVGhuFdrpUbKxw+anYlB2nH8U/NOselZW6H+znIh4h/LPWptLxs6oO0uVkjNzh2zgK60YbK1fY9","thinking":{"id":"CDVx372AU0XF/kzCOd7ocF54ZodZOKW9kjDPZbKm6Hpkl3KYYz3I6MYVcTKYQ+ijuQbRNpML/rAjTmuMzAgpcvvqo8+9mgJr2SGtlItn6yKAp3HbPKTn0EafXhsusircJxhDWCHUTiczafZCqELRSUjal40v4CHE0ca1bmK0TTh0jsXGJc1z92xnWvHpI9DacTzQXEZaKEYkEjlkEk4tUJcsMRdHF/02eYJk6xI5d5lCcCSibUEY5JjQXQRy58Xf37xqetsBK8CJws5litkp3Oaqc6e2M9mJim28lv3gCGWOhgJ63ETLYoFLwKHls8dTYVlipcTeYc6dLMUPFgy6JaqJf3QUvHyPSlX/b+m0+KYtRAaKIZ8anjLrWqE/7S+cXeImDoBJ67HTERVqTkE96QwpXT1cGQ==","text":[],"encrypted":"kLr/QD4i1RJVvmSkFPnBtTZSlh4TLi6uWNB2dMbcsG4pX3SuadmH81PjQmPSFBFvRAUfWZpcZD3wxM0Nze2VFZMisyS9zSiSOazVSd+PkSkTLXJce7elmmBoqTuZjy3uOoKNiNpZBkz31+Shuzj3ZUEQwwO2gDg/DbXZBe8WGyXYSiWAmI0vOcUbAZCZSso5LB8vTHn81gJsUJivNDINGiJBj62OQHLUM8g5+pnN2SnlrtzxDHCA88LustVdFTuhMLnhaumzCCZuxEWO9AmPUoEM8IeOq7BuyHCM7aJrMYKA5mmLC7RkSC2GAQ9otCFzLJGnAt6iSmN+/jcLIJ0NNmKrEPLk20eUMBNEO+X/hkmYlph+mW/RHREYnhkQM3tI90W5JmbRIvBeatgi8ZgBsdO9iWfe2N1uI2ov/5Kdpi/jj9ruyKDNni/HSJciKfDcbz/M2gn0albYhVv/vHI1q6aMgLaTU3H4vbHP6Xmt0BM/Co8t0fhLvW2AJpp/KM20Pp9szicJtbqsNvTYhombEoqm0mJk8qMce1zS2SI5Yb/y3TiSNAuo1/PvN4MHYz20LRqrjz87/OF1it9EnM9d3BpsSQ3Bwh0md0XPzm4xE5uqAS3Su4fCPEWTpH/LOck/F2GtW2bharveOWJ1pIsf1Y5ZBXscEG2HNDUP2LNXdGkZnacBGySxpxLsjMrjMnbn4F8W4gu45ZIb00E83dUlnNPJ0k+8QVHxVn80k3s0JeYrsiDTiA4hGjXa8nQsbKEphPZvhPaDOWae8Bo0MzNO7Kx8AJk6sH0piqr7zFX0MSkya5YU2kxBN5x3iJc/dz6nSvdGsUTqTgz+AbzWdkPbtcZwbnB+rJsUWbnnT3JHpLbFd1fBgw17b0E9uJGK3u0ChVZKDxAyLeYTqOW/xTponuM1R7S/GaOXDXj5dP5ozadWn05/k9fMR1UmCUdRIiRU4j/15Tk6poHVgCUE1fM97b06ahHhQc8oNYew8krwFeYAsUrmqHWK09ICXIPAU9HkVdzPmpB0j0SuFfNVc3ImE6ijHxjpufkX25GGB481PcTqicfiXiqVMfu/sfCB7cMmp15xDGTPJo7uw7vEFLmzaCL9Zh1lq/5msq36G39dK8yErlGcGr6uxm03IVkzbxzHfPyS3SCdtAvCxl+KiWlOnnA/f5I6qVlvbUgb2XM64c5mwD3I+nvWY75vknEH6omvDLE+2D+32eDLpec7zQzbdZdZbDOWS7Eiq487sfm8iRsKd/cuGVxJ2VfOIbo1bfFt3glRVCmQyJgpouk4Y4Szazt4b96jNHq+I50nO7dhMIe8dJXC6H2jww4GtF634Zw4atXo7xfHZSjOvd7ERCwfwm9+BXZzkYXmmgA7HboJM3PcyFWbgMQJg5zvAAUxCVzyMab0insMgtKij+istm5YgbOmY7lqZAJBn1e2UmMVE07wO7+Vx3tIlhcnZuVZrp4OM1P6bnhJjzkTJwNgJtUwJxC+bo4pGGTeDe8udM7T06JDzEVLackdSyOI+R/Wsm7/HTbiZhtOfYAnpRj9SmdX9EZyoQbGABkSaXKmXB2VNhYQpy26VJowAOup+/spRfEWTv9k9mQRnLhM0wLVEQ37Zd6QIEVf/COZVm0vLN26nsaxceyFvakkO+0bCqsx/2lu2e8irZB7nRCIx4JVaeNCnWvqrdTik+naJW2PVZYIitLIMOyteVD00Q++NjLWHVBM8p1lwyQ3KH80l1DTPLYjwE9WXUZ82pzrF301cjHkgYXBpYtAD0BoQ4tRQNCmBzoGK+0A09O7QArZwWMeFnPpA0qJK12TTQF1A/fehHDepwtYrBfHJzGchqhFObWlxZc8Jnm1PR5kzGZXsIHCJk0HsnVaxEMVK/JN4G1hnnAZFrgDLsTh2WJLZvRG5lgZEgOEP0456Dqn3pFxNLaAOHy2tbJCCK2DH5waPr65t5Hklq1p3Vk0VImLT5IEJjlKNZ0xAulmlTbchFD3b9OIMYRO7mx5OU2wowaQkcwvF0jSxN8KPLmGaxRM3kE458Ck5wAigJxkBKuOF4F+xa4R9nIr7P443cmBrLmpPk28qDZtrNy15Gq1h3r+0T+wq9yTisprGxdfpwIYXxH7GEEUz5FjVte6CmaACbukfBd3ic8vGrb+r5subLgo/ewT4iZ89ulH2jrMERQCs0ZsDvnNuGmtcNrr2O8=","tokens":78},"timestamp":1774364157156},{"response":"","toolCalls":[{"id":"call_iLeFTZEsKWcVLYbZkMRwic1P__vscode-1774363162448","name":"grep_search","arguments":"{\"query\":\"top-down 2D roguelike|GameplayTest.unity|MainMenu.unity|Current Phase|Last Updated|Unity 6.3 LTS\",\"isRegexp\":true,\"includePattern\":\"README.md\",\"maxResults\":50}"},{"id":"call_39l4kQSR2QiyJ786y8gVMzXF__vscode-1774363162449","name":"grep_search","arguments":"{\"query\":\"Unity 6000.3.3f1|GameplayTest.unity|Input System|InputSystem\",\"isRegexp\":true,\"includePattern\":\"GEMINI.md\",\"maxResults\":50}"},{"id":"call_XuvM23cd7ZzFNwGzA9oCtLbV__vscode-1774363162450","name":"grep_search","arguments":"{\"query\":\"Current Unity Version|Primary Scene|Windows Standalone|No test assemblies\",\"isRegexp\":true,\"includePattern\":\"AGENTS.md\",\"maxResults\":50}"}],"toolInputRetry":0,"id":"eee3fbf3-548a-45a5-9446-c1e3ba0513ac","statefulMarker":"G2UZamL4U80KHDs3WwJ2q5RurdK7qHRaVE0mtcYJdhUAEZ3E200RG8+gF2XhDLJXSAY6hhIJNqxVpn+oQyY46ylT6GCWm4Fmym68+wiNQeqpsD3PXCkOsFwBnUmaCaApCQuhC6nxJMYXowu079M9akvCVIwU5JWK+FOm1PfZSFhWWfdOgmHx5QYOgSeuHX0KqT0OwLRBFZVojY0L3uI4qUvSGxKrEzuaZUDDPqDU4/Fn4gosxe8q6AJBe5NTQeooHSnMZ3GllrS2iJVQ+72o+RlOkQl669FQI/MPPdOlVbEBKuHScUw2xdYE7iIBtZNYExVimgllMuZ8kAHXX0mQcyAzBS2HgiLbhVwWQkKJ3Tx0Yc6xeRqa/Vl0J2Xa54hi8oFpCrVUhshAombuCe5TPktV+G9mWS+U","thinking":{"id":"2cTpqi14A19DDH0C7jYHOJxKBwF17/cUsl3mOJzdOkZQidEvJu/kNNvT7vlC1vr2FqCPTA1akHJ7qSd4xYSMvIXVUc2agAHw04V8mdBZcW91EoY6XLV3RygNV6BmHg9ukEQXMvS+JDiqdd8uteSjXrlJtYzMpWZaix0YeGlb3s1YcNQN/AB3UymwwVSsbFGxZopavsZe1MDhQx3V/jUhsUSRPD9sI7o8bhC0bwSHSiBWfd6yIEx9yzXeVi2ffPkncXAunqkf6ybgBiRXC+zgr9QEbsrDxx8Nv4NARQgcJ8CVbdi+tsiD1n0gnR9baiDETp2dYabrbqukTJk1f8v3dpRcdVkc5MQoqo5ww5+G322z8RM1+kzmeAz00cUfOI3aVASWzL+Vpr+ud7K7ayjXI79jDLWI4w==","text":[],"encrypted":"8VlB9GeBGLilSlbuIL6lTp0RuuZf8Cewq+g6Sshd1l86lzGEYvx8la1dhCV/Dthdv7FSF6itkynr9gSY+Lug7x8A+Lc0JJobIOXkb8XzSaZ3k9s8Gk/Fx+mLdf+zPdmHCRtIa5PgQSIDNBD7GtjVomNlaJoTcEhpqA5zxRiXDFy5xX/K4wc3j/h0UDAj9oZ72ZTWXSRMCT6vbCgZXDeWvzxlPXgJGgcB0+3QXsH/a+HwiCt7bb8K7szAL70LCLdPFNK1FKz0DejSTQaWos5Cmmd7js9RMyc/bTKZHqtEFdtnepd/rAo6AdB1Y2t1OiOVxZs4SZvBEBnw+2T3SkGMPuMiTSuAm2wz23lHDIZAlX2O9xWO0RpFHyaDrBh/lYoM67riWqX/+W1vJ6z0mZj3nnp718mgGKyLHH3FnJuDqH0UCtO/5SxaX82j7Vz5TVnUariOrGr8ctHmkxBMaG32cNCkUHg9Wscw58FGI0VSymD5xpP7CRypqW1g7QjnOqOxAcD33tbmg7l8MNubyv2iiMLR5hnFaojKdRF5Q6JKQn+76CP9Ws4JCebZnLvgBdG88af8L2g1yFecB5/OwVHaV5OoF22lI9Ulaz8G5dkT2iHtimaNcf7ndY1mWhciHKPiqkFvVC2fksfwrAE1lNCZbx53UoycZ5ZbXqqgPJwyj4y2RAzggxJUytq3kfB92bO5GqMHlgDgtd2Q9P5htjrPQopVrpTE2evqTJkZDkgbt64u5ph61yo0kv2+dIvGtREXk3IhpGQp0Xmm5YFS2PNYdKR3tup5MX8ME75gN/H1yUGyDFuKrj06+A70VfXkkHgjsYxutcbyo04Aja40gQnqLxO4CiSFGVaozgbJ0PmIexIZUjR320WAVrlS5eQVY4MpOwNfRIMa7hbnxX89ca7Q0NYilyF/e4DdyzyWsNYLOXGwgvguMh2kc9fKy88mlEXlu6RPnzuz5rd6PO8Ix/Q/JkKr+v8bUeAWxtW9aAZ5LdU9hN/tUBpBabX4qE7+B9j/zYLyKxV9oF+vMnxHnw1x53CkLMlJ0UhEyeMtvKhW5GoglHeJlIbnStzz1gtH8SKUi5RjhLCyUz1hcKIYq1tAQfVquiaIvUo3L+XeOIudfMVsUjsGmK03aIe3j31f++qnCy8AiraJ9bkG90Ys3NITVONtckfcxsHtTIETt/oG0YPhdGBoonu9as091Z2XvMozmd3LzfTspeobZb/nDzKOiAB4Kccy4IQQCgoD6o0cBQCRG8HUoorNL/cSJWesHk6ea3VxEx6sYon7GrqVJIQMg/7vMU5+jRX7Ace7hLRer5yML+Zcu/U983TP8JtzMD7bKwe/tKExGxSnDdULZ1WJ+O5Xyec0oDfzT9Z2aEby6/c53DBe0VjKaJ2bgtgmqfssEkaW+U/O7x8lB/Z2/XeMrW4dZFpM9x55/pldJWdhtSx1MHXpU6v6eHhXbO76vsCESpfkz4/Gdn6aNdMXKOc8RyaX8LXHUF2kbQMe/t90novJQGXGu0IwKzhdyOUw8/hllaGkX4q4OXvN+dYS9OMORVXbgtueyYUXYDQAaUk3fJRZpW4Hy9Rcm0hWOYkKYsXcmnbcDilt8agU5JK72XteVEJ992toBOMEJsJPyEVH3CWcItjQdBe6QhxYdmL7yEr+U0fRHAyjaT7rXsneNzhBCmKZ5Z9mmVQqb9ikK+LtnwMxhIiJIOBNXAxNn6Rcl3JAVlunbYasN1fGgGO9evI7mq36Ce6cKHiwiTzYqziu50iwZgq+eiu4TyoL+N5O6hTNAxbMOVIMBzBIoke9WBQHLNmPlqS9u0StbCfPdv6pifZ7/QFcBnjtVj+Q0KvODwj5KWfhXRAWFl52ONEGsvyRGlyyRnOWTZhwG/EAJIRiECyF2gswGFEAmN1RTcEDNlvd/25mR0AnTGdnurGNLNvx/WlDhxhcEpwyrZgmXxDXmE9XfR8kuSDhX1F52oe+yMtE41qWoh4s8KYHJH44W1iKTZhzZT+UAYdWVD+ov7317NU8yYPc4ydYRbWsDefOMd9oAaja51WV32TJHOAn/Rbkwj9hGQCXbWT2lZ1+dSup7nS2HOn6qkM+FUDDWqLdPMpO1/N96/RkGk10frWNXmGmeZPhooz4VOIiCC5chIwpZQx6kT/73aOlFXnx1VY48SyUJxYKJ/cavY46wSAurJkAtLQpwajwq8AklhXQRbdU5OtDBWE9yc3j8+0/qz6QIPhoz/2/u4a+G/6yzVxrwTnlIsAyHsGxkmeXYovmxlE+3t+Pr3FC9oDyUmr7/yPlf0YU97g3NVhb5ppWp6YBtA/7zSAWC6NHIuok6228yyG8J1mOgGhdipQUCoOYkOczxbY96R8QZf1YzH+pk/XyCt+OUuZXjUm2ocpHBpoZ0FEhpIhhdgC0cMSWE9BfTBkmGNpqYv4ciwfmiCBFk4BkHjQsm285KTWj11jHYsUPS2fqpD8Ar54rQAGp/NNrABSYELBcb7sqL7X/onapgLfdP37lWQGNqfftUZKGDg/T/JAkbEG9ZKzRQEbHdeQv7YynPjzSojkBuPCr1neUEWKOuEpVYlPK/3RoS3Me7Ez6r7S8NhkJyQ9z9wqbaQk7jw+ZVI+GLdN2myklhKSnmP3IH7HwYfZrWrDUfMUMN14CpQMxZO/OQkBYoFhKn/GJ0xgbACubvA2YO0ag/vkT0rRfTKE7RwkLL8No02uAVmTnJW5PY73eKaQrcO5Tunb/LteEQChXUgmaqjHCqp5px6dbyUimjaPJVyeAFzIkaJwoQE0QW/E5Lc78e5V9Qdha1jv6Hp+2kdZrBIEe4sHUh/pKNSMivzFp4FyuQlg0NKZCM2yzcAlFgaWB1UtigPWA2h9eyLQo9xCT7UaOOoABH5z2QCNePL5K4Nx8dfdvq+/DZ8XAZXkUQwLDUghkuH0wAxwFlq6L/Tw2XugqJiFGjwzGqtbvIro51OBl0F+tWa0sMCstD+vk0qexCqGqE4NsbWOS+Q+7p4wc7p+XZQQih8JXgPjVAuSdgmzjDQ+PX5hEtzI9P8RO6OWgZG5aNSExgywPPase4nTg0TnjB86QrqVZicg54Iuoq4fiNXkUbA7WEKT63L5Sv+giqhz82F/B4u+phfMJQwvGeUo/BZK2xGkaAsZLsB9QkW5Z7+GL1L9VIXUxchyVCIDD4XyDcOhV1D7NV1jP0UsUvygv/wM4MZCIol4HErqgXwFUK23DJ5Zq13GrSgjE9XMAeZ0ikomM+9w/QSK6FKVREsgjo/QgkFWouI1x2End/lDhFLnmtBdf5CdZYrzRpFyo","tokens":196},"timestamp":1774364165318},{"response":"","toolCalls":[{"id":"call_1L3Vu6eWIS2b07enLPNMWADg__vscode-1774363162451","name":"grep_search","arguments":"{\"query\":\"public class RoomManager|public class UpgradeUI|public class AudioManager|public class EventListener|using Unity.VectorGraphics|FindFirstObjectByType|Invoke\\\\(nameof\\\\(InitializeUI\\\\), 0.1f\\\\)|EnemyData data = enemy.EnemyData\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/**/*.cs\",\"maxResults\":200}"},{"id":"call_w85qdeNy77MMlWsNXlTNjrUa__vscode-1774363162452","name":"grep_search","arguments":"{\"query\":\"OnStatusEffectRemoved\\\\?\\\\.Invoke|OnStatusEffectApplied\\\\?\\\\.Invoke\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs\",\"maxResults\":20}"},{"id":"call_Pr611DQek2l5IG6uCRaYRxC9__vscode-1774363162453","name":"grep_search","arguments":"{\"query\":\"OnHealthChanged = null|OnPlayerMovementInput|ClearAllListeners\",\"isRegexp\":true,\"includePattern\":\"Assets/_Project/Scripts/Events/GameEvents.cs\",\"maxResults\":80}"}],"toolInputRetry":0,"id":"7273671e-c89d-4ea9-a0fa-f61254b54e6b","statefulMarker":"7HRwrGORmL8pGQhf/E/mYtnUZdgbyN4j/8G2IWlO2cr48ml7F59qrC1a7CiiXZ3c1+D286RW0ocZQ7jGGJSoZHyQ9o5G9GqxMA57UNenJTXyxL6ycT+hJw8cHIfvYCyTL3RN5e8oMTBPpSV8vqUqPRwbNUoB6Pcw9xFdtvcYykYcO/zhdGcv10008m+AAdI8+GMZ3pa5bVI4azvIOhsk2VseFhJigVvHcMXAufCY7rjBKBTcV+aOys9oYUNkqUi+sHk3rOVmulIRqzOnaXQTrU+1jKnjpV4L2uFtJQes1mUIew1lcJoXHfuagkl0xO0yk/Hwr0Xd+ClExuoONw7hKGx9zzQqS3okCtlalU0icSBjScoj1mUWrPmtSDPcwYkrv9D7US0Mwk97g8Cm4NTcv3zrlheLfFBv","thinking":{"id":"nHl5Wmsx4iVIWPzsPG3SXJvGvukbUkP9+slOKaOzDDyPwwy5oUyaebvtOrkL0F67nxXlZUW96JHQEhTiFVEs0ianfoAV4+5IB6getlybVy3fwaGNl6Efyxa7GA4cWL8ak9mYoCsuSEwRtyXC/znPHBTTNZeYfeqlodZ+V1UDCVs5O6umVSQ+bVunEfJXcGbf2BfmLcnmGrw4ag4wwCYcjxI1Y0UuZW2b5/QFMrv+n03L2TfK+SnFnPz0QZmXKeo8aFR44RWMcB8huw2ZPRauDbTgD+c/TxGGsyQXza34z6RPs7GU0Enl1MMLWmD3aHJrvnlc3yP6h0RY/UfdnwZP4J2s/q0TyaDZ7mExRMYd2RSO7jNC9BT2qgkuFoyWXkkCWx2n5E0f7KSgf92omNXmDh6ErqLFzg==","text":[],"encrypted":"crwJehVFSpoWa/16G3MdOGAkJ4S2lZ25wb9iI7RXi+NoEb/qQAMlnhmHEcng6b53pKIvtv3tMGkDzgXYvrotSzBpNbApW2cxeJLOcSlmpvbzfZcZY/8FjAd7w9XWaSbfGGVRbCkgxkHkvQjL1cS+PBX4HUkcY/z94A7I4kynKPI9HA7Onvv4ddGWTA2INxLvhOCbw74sUqcriLCxvsVY8Tf2SpYFa0GVXxWPlcgjCmqPvvOJkTzNJScLxUSrLESz5auMK6lm4KXZgofHNlLDaw6zK7roizZ5wTpkN1V0HomzPnTCWLHUdFBpxZ7fM5R39uebNcZO9RMof328rCZI6wn71PDKrjdq+qb9y2XAdAREzM7XqDBSevaSyqmLvFM9a8F7/LJpLanfnlPROpJHtFVcCgt97R+dG0xa/cqyrm4NXZgn2OogyZjZSpGeVqWqIGUdyGTvjSC+14D8QuzbSuQBQBxyqdHFwUsGNgjp7OyylSHmufRYFo4seaABmC7qHYi1LaJGmpfXEq5oRdMshDyyTmWSPwcYxOXyscjUetdbLYic7xAV7CKcw1Wh02hNara0PFOcUAORGJWymrbyLr0x4v0lJq4593XOtsPxvMTTaMwEb5Bktgmx/4qAgmRHFx0Za0nH0Frb4+cM2qAIDuvWIgxPncjP+L92F8fCeZt4WhshrS8UkQCk1FGWCNKIQ9eNdozrs8l4Uj9SC7sxjy8hvmdJ5VJUjdBUlhIwZ0t93/NWsRaWdhT4riaY1rOUojhBAWpw9C6F5+CGU9+Ptu8AMz2N4U3kb4CjU4uKefUBJP+dTCB5hZxMSOkWyw1GzX4mSvs+eGUZAQv0R7Y1yvy7GqgD4eIwoxAu/YkozoS1Dchxt3ibZ3MzfE1fLXQ4WHWcun0fBH9F5/ThvjNCm+cfdlkpVjewxuOEnKkVld/WFheXPeZhqDV8URi7kHDShoPfoijONZQu3ytYlhw3P9Fe58llZd6qWv7U66hqe5YebeoldSveTvKcTiolnD+VflsEr+ThEtUVnN5Sh/FLyEi3/CXVnm0xLZbVPAlBwAgZgbv2VDAvcrkjEoP5hVagMtrXKYZ5tnsQRzF+4q7MTWVXoawbnirkyEIXve12yOphKCHrwywaU43e5qfcTrjo575rXY6XkJyREi0+jKwS/5i7b8HRIWlyLwCzzpXW8T9VLDMhg7gKjWAgw6j119r04euA3E8/9quYaHmBSmDkSLbVqY8BmkDafPbQlweqhkFtUQUBY9N4wKGE77gsZxlngGMljOMzp0C9UnxJnfnn56++OO67b/2gCZAY5vQEbQbYsl2iyhE+1TlJn86jYTMVoaa1glX5hkYjPnv0PKuc0edjM6/oL4gHPwrETFd7zPxLe8NN1/M7m0z7pL6CpBrqiboYnm1/37ydr2sA6KXT/YXb9Lxx49GQNq6khlrlnVZR2Axsxk9yn/JSzzgjkXTDTho8b9dfbU0Pn0Po4Dnuo02dxjSAglGtEdV1BW89MT/80r1v2TvOHlBXTjwCUSVqFKLLX4CqF9sYzepGHate4Hm3zOUMvbQHMUwy0RqHxCfSB/ZXJ9HiwytkvkNSKY22V12+b5erGeCG53cF2qqBd7C9kGh53K3AAW0zjieJpHYeitOYwiNw9HMB85Nw5YxZF/sejUSKZkaI3PqAGe4e3Fb693Y=","tokens":24},"timestamp":1774364171981}],"toolCallResults":{"call_D5w1VZqxi5jDnKRbfflBqlwz__vscode-1774363162390":{"$mid":20,"content":[{"$mid":21,"value":"Successfully wrote todo list\n\nWarning: Did you mean to update so many todos at the same time? Consider working on them one by one."}]},"call_P4RXp8Cw4AArxqOlgWz0umKT__vscode-1774363162391":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Data/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Data.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Effects.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Enemies/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Enemies.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Events/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Events.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Managers/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Managers.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Player/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Player.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Shared/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Shared.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Systems/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Systems.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"UI/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"UI.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Upgrades.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Utilities/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Utilities.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_fF1gzmbRgtFlEURyedQpMTBf__vscode-1774363162392":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"Rwe","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"52 total results","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAiming.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAiming.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAiming.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAiming.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerControls.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerControls.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerControls.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerControls.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/DebugDude.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/DebugDude.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Utilities/DebugDude.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/DebugDude.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/UpgradeDebug.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/UpgradeDebug.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Utilities/UpgradeDebug.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/UpgradeDebug.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/PerformanceUtils.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/PerformanceUtils.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Utilities/PerformanceUtils.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Utilities/PerformanceUtils.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DebugManager.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DebugManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/DebugManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DebugManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/AudioManager.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/AudioManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/AudioManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/AudioManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IWeaponAttack.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IWeaponAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IWeaponAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IWeaponAttack.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IMovementModifiable.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IMovementModifiable.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IMovementModifiable.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IMovementModifiable.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDebugFunction.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDebugFunction.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IDebugFunction.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDebugFunction.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDamageable.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDamageable.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/IDamageable.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/IDamageable.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/CombatCalculator.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/CombatCalculator.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/CombatCalculator.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/CombatCalculator.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Destructible.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Destructible.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Destructible.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Destructible.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusResistanceData.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusResistanceData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/StatusResistanceData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusResistanceData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Attack/ContactDamage.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Attack/ContactDamage.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Attack/ContactDamage.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Attack/ContactDamage.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/EnemyData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/WeaponData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/ActiveStatusEffect.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/ActiveStatusEffect.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/ActiveStatusEffect.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/ActiveStatusEffect.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/EnemyAttack.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/EnemyAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/EnemyAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/EnemyAttack.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IMovementBehavior.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IMovementBehavior.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/IMovementBehavior.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IMovementBehavior.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectVFX.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectVFX.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectVFX.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectVFX.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IAttackBehaviour.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IAttackBehaviour.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/IAttackBehaviour.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/IAttackBehaviour.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/UpgradeUI.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/StupidAudio.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]}],"props":{},"references":[]}}}]},"call_oL3mkcnYgeaLxiBed9nnS87r__vscode-1774363162393":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"Rwe","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"7 total results","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/LORE.md","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/LORE.md","external":"file:///home/breadway/Documents/Hazard%20Pay/LORE.md","path":"/home/breadway/Documents/Hazard Pay/LORE.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/README.md","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/README.md","external":"file:///home/breadway/Documents/Hazard%20Pay/README.md","path":"/home/breadway/Documents/Hazard Pay/README.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","external":"file:///home/breadway/Documents/Hazard%20Pay/PERFORMANCE.md","path":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/GEMINI.md","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/GEMINI.md","external":"file:///home/breadway/Documents/Hazard%20Pay/GEMINI.md","path":"/home/breadway/Documents/Hazard Pay/GEMINI.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/GAMEDESIGN.md","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/GAMEDESIGN.md","external":"file:///home/breadway/Documents/Hazard%20Pay/GAMEDESIGN.md","path":"/home/breadway/Documents/Hazard Pay/GAMEDESIGN.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/AGENTS.md","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/AGENTS.md","external":"file:///home/breadway/Documents/Hazard%20Pay/AGENTS.md","path":"/home/breadway/Documents/Hazard Pay/AGENTS.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/DEBUG_SYSTEM_README.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":10},"references":[]}],"props":{},"references":[]}}}]},"call_7yW21u1rF3sZd4tOwFxS4rT3__vscode-1774363162394":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":2,"priority":9007199254740991,"text":"File: `","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"/home/breadway/Documents/Hazard Pay/README.md","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"`. Lines ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"1","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" to ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"260","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" (","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"548","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" lines total): ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false},{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":"````markdown\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/README.md","external":"file:///home/breadway/Documents/Hazard%20Pay/README.md","path":"/home/breadway/Documents/Hazard Pay/README.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":"# 🪲 Hazard Pay (Working Title)\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":"> A top-down 2D roguelike where you play as pest exterminators clearing bug infestations. Think Enter the Gungeon meets Vampire Survivors with a darkly comedic twist.\n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":"[![Unity Version](https://img.shields.io/badge/Unity-6.3_LTS-black.svg?style=flat&logo=unity)](https://unity.com/)\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":"[![License](https://img.shields.io/badge/License-Proprietary-red.svg)](LICENSE)\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":"[![Development Phase](https://img.shields.io/badge/Phase-2_Core_Loop_&_2D_Refactor-blue.svg)](#development-roadmap)\n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":"## 📋 Navigation\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":"**For Players/Game Design**: [Overview](#-game-overview) • [Features](#-game-features) • [How to Play](#how-to-play) • [Status](#-playable-status)\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":"**For Developers**: [Getting Started](#-getting-started) • [Development](#-development-section) • [Tech Stack](#-technical-stack) • [Architecture](#-architecture--code-standards) • [Contributing](#-contributing)\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":"## 🎮 Game Overview\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":"**Hazard Pay** is a top-down 2D pixel-art roguelike featuring \"intentionally broken\" character progression. Players choose from 4-5 unlockable exterminators, each with overpowered mechanics balanced by meaningful constraints, to clear procedurally arranged industrial sectors.\n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":"### How to Play\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":"1. **Navigate** through 25 procedurally arranged rooms (Sectors) with branching paths\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":"2. **Fight** increasingly challenging bug infestations using tactical fire spread and crowd control\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":"3. **Choose** 1 of 3 upgrades (Performance Reviews) after each room\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":"4. **Level up** to unlock path abilities at levels 10, 20, 30\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":"5. **Defeat** mid-boss (Sector ~12) and final boss (Sector 25)\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":"6. **Unlock** Overtime Mode (Endless) for infinite scaling challenge\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":"### Core Philosophy\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":"| Pillar | What It Means |\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":"|--------|---------|\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":"| **Systemic Variation** | Each room forces tactical adaptation, not just higher numbers |\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":"| **Enemies as Teachers** | Every bug type teaches a specific mechanic |\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":"| **Intentionally Broken** | Overpowered abilities balanced by meaningful constraints |\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":"## 🎮 Game Features\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":"### Characters (4-5 Unlockable Exterminators)\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":"Each character has one overpowered mechanic balanced by a constraint:\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":"| Character | Power | Constraint |\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":"|-----------|-------|-----------|\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":"| **Flamethrower** | Fire spreads infinitely between enemies | Takes damage in own flames |\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":"| **Beekeeper** | Dead bugs become allies | Cannot deal direct damage |\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":"| **Cryo-Tech** | Frozen enemies shatter and chain-freeze | Cannot damage unfrozen enemies |\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":"| **Swatter** | Melee specialist with execute mechanic | Close-range only |\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":"| **Sprayer** | Chemical DOT with poison immunity | Damage over time (no burst) |\n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":"### Progression Systems\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":"**1. Room Upgrades (Per-Run)**\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":"- Choose 1 of 3 after each room clear\n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":"- Categories: Power (damage/weapons), Defense (HP/resistances), Utility (speed/cooldowns)\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":"- ~25 upgrade choices per full run\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":"**2. Level-Up Path System (Per-Run)**\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":"- **Every Level**: Auto-heal X% HP\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":"- **Level 10**: Choose 1 of 3 major path branches (significant power spike)\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":"- **Level 20**: Choose 1 of 2 options based on Level 10 choice\n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":"- **Level 30**: Final path choice (Endless Mode only, massive power spike)\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":"- **Level 31+**: Permanent character-specific buffs each level (Endless only)\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":"**3. Meta-Progression (Persistent)**\n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":"- Earn currency from runs\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":"- Unlock new characters (after milestone achievements)\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":"- Unlock additional character path trees\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":"- Small meaningful upgrades\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":"### Map Structure\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":"- **25 rooms total** with Slay the Spire-style branching paths\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":"- **Room Types**: Combat, Shop, Elite, \"Unknown\" (random modifiers/events)\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":"- **Bosses**: Mid-boss (~room 12), Final boss (room 25)\n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":"- **Endless Mode**: Unlocked after beating final boss, separate mode per map\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":"### Enemy Types\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":"\"Enemies as teachers\" - each type exists to teach a specific mechanic:\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":"- **Roaches**: Swarm tactics (teaches AOE value)\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":"- **Spiders**: Web traps, ceiling walkers (teaches awareness)\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":"- **Wasps**: Flying, ranged (teaches target priority)\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":"- **Beetles**: Armored (teaches armor-piercing value)\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":"- **Larvae**: Evolve if not killed quickly (teaches tempo)\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":"## � Playable Status\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":"### What's Done (Phase 1 ✅)\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":"- ✅ Combat system (move, aim, shoot, damage)\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":"- ✅ Enemy AI and spawning\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":"- ✅ Health system with visual feedback\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":"- ✅ XP and leveling system\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":"- ✅ Basic UI (health bar, XP bar, level-up screen)\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":"- ✅ **Object pooling system** (2000+ enemy capacity)\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":"- ✅ **Status effect system** with visual effects\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":"- ✅ **Fire spread mechanics** working at scale\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":"### Performance Achievement 🚀\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":"- **2000+ simultaneous enemies** at stable 60 FPS\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":"- **Zero GC allocations** during gameplay (after pool warmup)\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":"- **Status effects with VFX** working on all enemies\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":"- True \"horde extermination\" gameplay enabled\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":"*See [PERFORMANCE.md](PERFORMANCE.md) for detailed metrics and optimizations.*\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":"### What's Next (Phase 2 ⬅️ IN PROGRESS)\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":"- [ ] Room clearing and transitions\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":"- [ ] Upgrade selection UI (pick 1 of 3)\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":"- [ ] Path branches at levels 10/20\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":"- [ ] 15-20 varied room designs\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":"- [ ] First boss encounter\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":"### TBD Questions\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":"- Movement speed tuning\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":"- Dodge mechanic (dash/roll/i-frames?)\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":"- Damage feedback visuals (screen shake, particles)\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":"- Heal percentage on level-up\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":"- Character-specific attack patterns\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":"## 🚀 Getting Started\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":"### Prerequisites\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":"- Unity 6.3 LTS or later\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":"- Git installed\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":"- GitHub account with repo access\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":"- Code editor (VS, Rider, or VS Code)\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":"### First-Time Setup\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":"1. **Clone the repository**\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" ```bash\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" git clone https://github.com/[your-username]/exterminator-game.git\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" cd exterminator-game\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" ```\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":"2. **Open in Unity**\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" - Open Unity Hub\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" - Click \"Add\" → select cloned folder\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" - Unity automatically imports assets\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":"3. **Test the setup**\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" - Open `Scenes/GameplayTest.unity`\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" - Press Play\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" - Controls: WASD to move, mouse to aim\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" - Should see player capsule moving smoothly\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":"4. **Create a feature branch**\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" ```bash\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" git checkout dev\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" git pull origin dev\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" git checkout -b feature/your-feature-name\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" ```\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":"# 📋 Development Section\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":"*For developers working on the project. Game designers and players can skip to the end.*\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":"## 🛠 Technical Stack\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":"| Component | Technology |\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":"|-----------|-----------|\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":"| **Engine** | Unity 6.3 LTS |\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":"| **Rendering** | Universal Render Pipeline (URP) |\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":"| **Perspective** | 2D (top-down orthographic camera) |\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":"| **Physics** | Unity 2D Physics (Rigidbody2D, Collider2D) |\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":"| **Language** | C# (.NET Standard 2.1) |\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":"| **Version Control** | Git + GitHub |\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":"| **Project Management** | JIRA |\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":"### Architecture Approach\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":"- **Component-based**: Modular MonoBehaviours with single responsibilities\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":"- **Event-driven**: Centralized `GameEvents.cs` for system communication\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":"- **Data-driven**: ScriptableObjects for all configuration (upgrades, enemies, weapons)\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":"- **Manager orchestration**: Sparse use of singleton managers to coordinate systems\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":"## 📁 Project Structure\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":"Assets/\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":"└── _Project/\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" ├── Scenes/\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" │ ├── MainMenu.unity\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" │ ├── GameplayTest.unity\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" │ └── Endless.unity\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" │\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" ├── Scripts/\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" │ ├── Managers/ # Singleton-style orchestrators\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" │ │ ├── GameManager.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" │ │ ├── RoomManager.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" │ │ ├── XPManager.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" │ │ ├── UpgradeManager.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" │ │ └── AudioManager.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" │ │\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" │ ├── Player/ # Player-specific components\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" │ │ ├── PlayerController.cs # Orchestrator\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" │ │ ├── PlayerMovement.cs # Movement logic\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" │ │ ├── PlayerAiming.cs # Aiming logic\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" │ │ ├── PlayerAttack.cs # Attack logic\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" │ │ └── PlayerStats.cs # Data class\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" │ │\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" │ ├── Enemies/ # Enemy components\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" │ │ ├── Enemy.cs # Base enemy orchestrator\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" │ │ ├── EnemyMovement.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" │ │ ├── EnemyAttack.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" │ │ └── Types/\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" │ │ ├── Roach.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" │ │ ├── Spider.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" │ │ └── Wasp.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" │ │\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" │ ├── Shared/ # Universal components\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" │ │ ├── Health.cs # Universal health system\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" │ │ ├── IDamageable.cs # Damage interface\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" │ │ └── Destructible.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" │ │\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" │ ├── Systems/ # Non-MonoBehaviour logic\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" │ │ ├── SpawnSystem.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" │ │ ├── CombatCalculator.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" │ │ └── PoolingSystem.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" │ │\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" │ ├── Data/ # ScriptableObject definitions\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" │ │ ├── UpgradeData.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" │ │ ├── EnemyData.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" │ │ └── WeaponData.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" │ │\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" │ ├── Events/ # Event system\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" │ │ └── GameEvents.cs # Centralized event hub\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" │ │\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" │ └── UI/ # UI components\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" │ ├── HealthBarUI.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" │ ├── UpgradeUI.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" │ └── XPBarUI.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" │\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" ├── Prefabs/ # Reusable GameObjects\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" │ ├── Player/\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" │ ├── Enemies/\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" │ ├── Projectiles/\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" │ └── UI/\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" │\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" ├── Data/ # ScriptableObject .asset files\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" │ ├── Upgrades/\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" │ ├── Enemies/\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" │ └── Weapons/\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" │\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" ├── Art/ # Visual assets\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" ├── Audio/ # Sound/music\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" └── Materials/ # Unity materials\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":"````","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_JcM9qa1rdsgNjoqRt34kGRPX__vscode-1774363162395":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":"````markdown\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/GEMINI.md","external":"file:///home/breadway/Documents/Hazard%20Pay/GEMINI.md","path":"/home/breadway/Documents/Hazard Pay/GEMINI.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":"# GEMINI.md - Context & Instructions for Exterminator Game\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":"## 1. Project Overview\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":"**Exterminator** is a top-down 3D roguelike developed in **Unity 6 (6000.3.3f1)** using the **Universal Render Pipeline (URP)**. The game features Hades-style combat, procedural room generation, and unique character progression mechanics.\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":"**Core Pillars:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":"* **Systemic Variation:** Rooms force tactical adaptation.\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":"* **Enemies as Teachers:** Each enemy type teaches a specific mechanic.\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":"* **Intentionally Broken Characters:** Overpowered mechanics balanced by meaningful constraints.\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":"## 2. Technical Stack\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":"* **Engine:** Unity 6000.3.3f1 (LTS)\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":"* **Language:** C# (.NET Standard 2.1)\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":"* **Pipeline:** URP 17.3.0\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":"* **Key Packages:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" * `com.unity.inputsystem` (New Input System)\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" * `com.unity.cinemachine`\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" * `com.unity.ai.navigation`\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":"## 3. Architecture & Patterns\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":"Strictly adhere to these architectural patterns when modifying code.\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":"### A. Component-Based Modularity\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":"* **Single Responsibility:** Each script handles ONE logical unit (e.g., `PlayerMovement` handles moving, `PlayerAiming` handles rotation).\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":"* **Orchestrators:** Use a main controller (e.g., `PlayerController`) to initialize and coordinate components, but delegate actual logic to them.\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":"* **Dependencies:** Use `[RequireComponent(typeof(T))]` to enforce dependencies.\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":"### B. Event-Driven Communication (`GameEvents.cs`)\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":"* **Decoupling:** Systems must NOT reference each other directly if possible. Use `GameEvents` static actions.\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":"* **Pattern:** `Source System` -> `GameEvents.Invoke()` -> `Target System(s)`\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":"* **Safety:** Always check for null before invoking (`?.Invoke()`).\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":"* **Lifecycle:** **ALWAYS** unsubscribe from events in `OnDisable()` to prevent memory leaks.\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":"### C. Data-Driven Design (ScriptableObjects)\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":"* **Configuration:** Use `ScriptableObject` for all game data (Enemies, Weapons, Upgrades).\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":"* **Avoid Hardcoding:** Do not hardcode values in scripts. Expose them as `[SerializeField]` or load from data assets.\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":"* **Location:** Store data assets in `Assets/_Project/Data/`.\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":"### D. Managers (Singletons)\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":"* **Role:** Only use Managers for high-level state orchestration (e.g., `GameManager`, `RoomManager`).\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":"* **Restriction:** Managers should delegate work, not perform heavy logic.\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":"## 4. Directory Structure\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":"All custom project files reside in `Assets/_Project/`. Do not modify root `Assets/` unless installing third-party tools.\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":"```text\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":"Assets/_Project/\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":"├── Scripts/\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":"│ ├── Managers/ # High-level orchestrators (Singleton-ish)\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":"│ ├── Player/ # Player logic (Controller, Movement, etc.)\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":"│ ├── Enemies/ # Enemy logic\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":"│ ├── Shared/ # Interfaces, Utilities (Health, IDamageable)\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":"│ ├── Events/ # GameEvents.cs\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":"│ ├── Data/ # ScriptableObject definitions (classes)\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":"│ └── UI/ # UI scripts\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":"├── Prefabs/ # GameObjects\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":"├── Data/ # .asset files (instances of ScriptableObjects)\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":"├── Art/ # Models, Textures, Materials\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":"└── Scenes/ # Unity Scenes\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":"## 5. Coding Standards & Conventions\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":"* **Naming:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" * Classes/Methods/Public Fields: `PascalCase`\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" * Private Fields/Variables: `camelCase`\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" * Constants: `UPPER_CASE`\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":"* **Serialization:** Prefer `[SerializeField] private` over `public` for Inspector exposure.\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":"* **Headers:** Use `[Header(\"Category\")]` to organize Inspector fields.\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":"* **Comments:** Focus on *WHY*, not *WHAT*. Document complex algorithms or event flows.\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":"## 6. Common Workflows\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"### Adding a New Game Event\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":"1. Define the `Action` or `Action` in `GameEvents.cs`.\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"2. Add a static helper method (optional but recommended) for safe invocation with error handling (try-catch).\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":"3. Add the `ClearAllListeners` cleanup logic in `GameEvents.ClearAllListeners()`.\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":"### creating a New Enemy\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":"1. Create a new script in `Scripts/Enemies/Types/` inheriting from `Enemy`.\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":"2. Create a `ScriptableObject` data class in `Scripts/Data/` if needed (or reuse `EnemyData`).\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":"3. Create the prefab in `Prefabs/Enemies/`.\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":"## 7. Version Control (Git)\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":"* **Branching:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" * `main`: Stable releases only.\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" * `dev`: Integration branch.\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" * `feature/*`: Active development.\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"* **Commit Messages:** Imperative mood, descriptive (e.g., \"Add enemy spawn system\", not \"update\").\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":"## 8. Build & Run\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":"* **Editor:** Open `Scenes/GameplayTest.unity` to test core mechanics.\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":"* **Build:** Standard Unity Build Settings (Target Platform: Windows/PC).\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":"````","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_HrmKYzWpEjhHPfgxhIiZpojy__vscode-1774363162396":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":2,"priority":9007199254740991,"text":"File: `","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"`. Lines ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"1","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" to ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"260","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" (","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"338","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" lines total): ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false},{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":"````markdown\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","external":"file:///home/breadway/Documents/Hazard%20Pay/PERFORMANCE.md","path":"/home/breadway/Documents/Hazard Pay/PERFORMANCE.md","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":"# Performance Achievements & Optimizations\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":"## 🎯 Current Performance Metrics\n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":"**Date Achieved:** January 31, 2026\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":"### Enemy Count Capacity\n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":"- ✅ **2000+ simultaneous enemies** with stable performance\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":"- ✅ **Status effects working** on all enemies with VFX pooling\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":"- ✅ **Zero GC allocations** after pool warmup\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":"This represents a ~40x improvement over typical Unity projects handling 50-100 enemies.\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":"## 🚀 Key Optimizations Implemented\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":"### 1. Object Pooling System\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":"**Location:** `Assets/_Project/Scripts/Systems/PoolingSystem.cs`\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":"**What it does:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":"- Pre-instantiates GameObjects during startup\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":"- Reuses objects instead of Instantiate/Destroy\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":"- Eliminates GC allocations during gameplay\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":"**Impact:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":"- ~10x faster spawn/despawn vs Instantiate/Destroy\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":"- Zero GC pressure during combat\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":"- Handles 2000+ active objects smoothly\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":"**Pooled Objects:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":"- Enemies (all types)\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":"- Status effect VFX (fire, poison, ice, etc.)\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":"- Projectiles\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":"- Hit effects\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":"- Other frequently spawned objects\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":"### 2. Status Effect VFX Pooling\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":"**Location:** `Assets/_Project/Scripts/Systems/StatusEffects/`\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":"**What it does:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":"- Status effect visuals use the pooling system\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":"- VFX follows enemies without parenting (Update-based positioning)\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":"- Proper cleanup on effect expire/enemy death\n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":"**Impact:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":"- Can apply 100+ status effects simultaneously\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":"- No stuttering when many enemies catch fire\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":"- Seamless visual effects at scale\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":"**Key Components:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":"- `StatusEffectController.cs` - Manages effects per entity\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":"- `StatusEffectVFX.cs` - Poolable VFX with follow behavior\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":"- `ActiveStatusEffect.cs` - Lightweight data structure\n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":"### 3. Flamethrower Optimization\n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":"**Location:** `Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs`\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":"**What it does:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":"- Pre-allocated hit buffers (no allocations per frame)\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":"- Cached component lookups (Dictionary-based)\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":"- Contact filters configured once\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":"- Fast inverse square root for distance checks\n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":"- Throttled debug logging\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":"**Impact:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":"- Cone detection handles 100+ enemies per frame\n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":"- Zero allocations during continuous fire\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":"- Maintains 60 FPS with 2000+ enemies in range\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":"**Key Optimizations:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":"```csharp\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":"- Collider2D[] hitBuffer (pre-allocated)\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":"- Dictionary damageableCache\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":"- Dictionary statusEffectControllerCache\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":"- ContactFilter2D cached\n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":"- FastInvSqrt() for quick distance checks\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":"### 4. Collection Safety\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":"**Location:** Various controllers\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":"**What it does:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":"- Two-pass updates (collect, then modify)\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":"- Avoids modifying collections during iteration\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":"- Pre-allocated removal lists\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":"**Impact:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":"- No \"Collection was modified\" exceptions\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":"- Stable at any enemy count\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":"- Predictable performance\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":"### 5. Enemy Pooling\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":"**Location:** `Assets/_Project/Scripts/Enemies/Enemy.cs`\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":"**What it does:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":"- Implements `IPoolable` interface\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":"- Resets state on spawn from pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":"- Cleans up on return to pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":"- Returns to pool on death instead of Destroy()\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":"**Impact:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":"- Spawn/despawn 100+ enemies per second\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":"- No GC spikes when clearing rooms\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":"- Instant respawn capability\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":"## 📊 Performance Comparison\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":"### Before Optimizations (Typical Unity Project)\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":"- ❌ 50-100 enemies max before lag\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":"- ❌ GC spikes every 2-3 seconds\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":"- ❌ Frame drops when enemies die\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":"- ❌ Status effects cause stuttering\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":"- ❌ Instantiate/Destroy allocations\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":"### After Optimizations (Current State)\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":"- ✅ **2000+ enemies** smooth gameplay\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":"- ✅ **Zero GC** during gameplay (after warmup)\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":"- ✅ **Stable 60 FPS** with full combat\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":"- ✅ **100+ status effects** simultaneously\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":"- ✅ **Object pooling** eliminates allocations\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":"### Performance Metrics at 2000 Enemies\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":"Frame Rate: 60 FPS (stable)\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":"GC Allocations: 0 bytes/frame (after warmup)\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":"Active Pools: ~5-10 pools with 50-100 objects each\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":"Memory: Stable (no leaks)\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":"CPU: Well-distributed across systems\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":"## 🔧 Additional Optimization Techniques\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":"### Physics Optimization\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":"- Kinematic Rigidbody2D on enemies (no physics calculations)\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":"- ContactFilter2D for targeted collision checks\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":"- Layer masks to filter irrelevant collisions\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":"### Update Loop Optimization\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":"- Early exit when no work needed (`if (count == 0) return;`)\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":"- Pre-allocated buffers for frequently accessed data\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":"- Cached transform references\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":"### Memory Management\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":"- Dictionary-based component caching\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":"- Pre-allocated arrays for Physics2D queries\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":"- Reusable lists for temporary operations\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":"### Fire Spread Optimization\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":"- Non-allocating overlap checks\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":"- Spread cooldown timers\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":"- Radius-based culling\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":"## 🎮 Gameplay Impact\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":"### What This Enables\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":"**Vampire Survivors-style Hordes:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":"- Massive enemy waves (500-2000 enemies)\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":"- Screen-filling combat effects\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":"- Dense bullet patterns without lag\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":"**Fire Spread Mechanics:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":"- Chain reactions through entire hordes\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":"- Visual spectacle of 100+ enemies on fire\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":"- Performance stable even at peak chaos\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":"**Status Effect Variety:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":"- Multiple effect types active simultaneously\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":"- Stacking effects on individual enemies\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":"- Spread effects (fire) work at scale\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":"**Boss Encounters:**\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":"- Bosses can summon hundreds of minions\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":"- Maintain performance during climactic fights\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":"- Complex attack patterns without frame drops\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":"## 🔍 Profiling Notes\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":"### Bottlenecks Identified & Resolved\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":"1. **Original Bottleneck:** Instantiate/Destroy\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" - **Solution:** Object pooling\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" - **Result:** 10x performance improvement\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":"2. **Original Bottleneck:** GetComponent calls every frame\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" - **Solution:** Dictionary-based caching\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" - **Result:** 5x faster component access\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":"3. **Original Bottleneck:** Status effect VFX spawning\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" - **Solution:** VFX pooling with follow behavior\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" - **Result:** Zero allocations, smooth visuals\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":"4. **Original Bottleneck:** Collection modification during iteration\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" - **Solution:** Two-pass updates\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" - **Result:** Zero exceptions, stable performance\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":"### Current Performance Profile\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":"Update Loop: ~2-3ms (at 2000 enemies)\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":"Rendering: ~5-8ms (depends on VFX count)\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":"Physics: ~1-2ms (mostly raycasts)\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":"Garbage Collection: 0ms (no allocations)\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":"```\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":"## 💡 Best Practices Established\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":"### For High Enemy Counts\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":"1. **Always use object pooling** for frequently spawned objects\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":"2. **Cache component references** instead of repeated GetComponent\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":"3. **Pre-allocate buffers** for Physics2D queries\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":"4. **Two-pass collection updates** (collect, then modify)\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":"5. **Early exit** from updates when no work needed\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":"6. **Contact filters** over broad collision checks\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":"7. **Kinematic Rigidbody2D** when physics simulation not needed\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":"### For Status Effects at Scale\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":"1. **Pool VFX prefabs** instead of instantiate\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":"2. **Follow via Update()** instead of parenting\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":"3. **Cleanup on disable** to prevent leaks\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":"4. **Validate prefab references** before spawning\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":"5. **Handle destroyed objects** gracefully in pools\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":"### For Flamethrower-style Weapons\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":"1. **Pre-allocated hit buffers** for cone detection\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":"2. **Cached transforms** to avoid repeated access\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"3. **Fast math approximations** where accuracy isn't critical\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":"4. **Throttled debug logging** to avoid string allocations\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"5. **Layer masks** to filter targets early\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":"---\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":"## 🎯 Future Optimization Opportunities\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":"### If Performance Becomes an Issue Again\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":"1. **ECS (Entity Component System)**\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" - Could push to 5000+ enemies\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" - Requires major refactor\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" - Unity DOTS/ECS package\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"2. **Job System for Flamethrower**\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" - Multi-threaded cone detection\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" - Parallel damage application\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" - Requires C# Job System\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"3. **GPU Instancing for Enemies**\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":"````","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_DYaOZ0jL5CNlXJbw9WvyZKsR__vscode-1774363162397":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":"using System;\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":"/// Central controller for the player character.\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":"/// Responsibilities:\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":"/// - Initialize and hold references to player components (movement, aiming, shooting, health, stats, etc)\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":"/// - Orchestrate interactions between components\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":"/// - Handle player-specific events (damage reactions, death behavior, level up effects, etc)\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":"/// - Expose public API for other systems to interact with the player\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":"[RequireComponent(typeof(Health))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":"[RequireComponent(typeof(PlayerMovement))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":"[RequireComponent(typeof(PlayerAiming))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":"[RequireComponent(typeof(PlayerAttack))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":"public class PlayerController : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" [Header(\"Components\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" [SerializeField] private Health health;\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" private PlayerMovement movement;\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" private PlayerAiming aiming;\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" private PlayerAttack shooting;\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" // Add more as needed\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" [Header(\"Stats\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" public PlayerStats stats { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" [Header(\"References\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" public static PlayerController Instance { get; private set; } // Singleton for easy access\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" void Awake() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" // Singleton setup\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" if (Instance == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" Instance = this;\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" } else {\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" Destroy(gameObject);\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" // Get components\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" health = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" movement = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" aiming = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" shooting = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" // Initialize stats\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" stats = new PlayerStats();\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" // Apply stats to health\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" health.SetMaxHP(stats.currentMaxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" public void GetHealth(out Health outHealth) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" outHealth = health;\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" void OnEnable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" // Subscribe to health events\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" health.OnDamaged += HandleDamaged;\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" health.OnHealed += HandleHealed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" health.OnDied += HandleDeath;\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" // Subscribe to game events\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" GameEvents.OnLevelUp += OnLevelUp;\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" void OnDisable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" // ALWAYS unsubscribe\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" health.OnDamaged -= HandleDamaged;\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" health.OnHealed -= HandleHealed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" health.OnDied -= HandleDeath;\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" GameEvents.OnLevelUp -= OnLevelUp;\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" void FixedUpdate() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" // Orchestrate movement\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" void Update() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" // Orchestrate attacks\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" // === DAMAGE HANDLING ===\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" void HandleDamaged(float amount, Vector2 hitPoint, Vector2 hitDirection) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" // Player-specific damage reactions\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" // Screen effects\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" // CameraShake or ScreenFlash component handles this via events\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" // Audio\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" // AudioManager listens to health.OnDamaged\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" // Knockback\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" movement.ApplyKnockback(hitDirection);\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" // Fire game event for other systems\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" GameEvents.OnPlayerDamaged?.Invoke(amount, health.CurrentHP, health.MaxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" GameEvents.PlayerHealthChanged(health.CurrentHP, health.MaxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" void HandleHealed(float amount) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" // Fire event for UI/audio\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" GameEvents.PlayerHealed(amount);\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" GameEvents.PlayerHealthChanged(health.CurrentHP, health.MaxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" void HandleDeath() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" // Player-specific death behavior\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" // Disable input\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" movement.enabled = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" shooting.enabled = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" // Play death animation\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" // animator.SetTrigger(\"Death\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" // Fire game event\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" GameEvents.PlayerDied();\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" GameEvents.EndRun(false); // Player lost\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" Destroy(gameObject);\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" // GameManager listens to OnPlayerDied and shows game over screen\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" // === PROGRESSION ===\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" void OnLevelUp(int newLevel) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" // Heal % on level up (from your GDD)\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" float healAmount = health.MaxHP * 0.2f; // 20% (adjust as needed)\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" health.Heal(healAmount);\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" // Visual feedback\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" // Spawn level-up particles, play sound, etc.\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" // (These are handled by systems listening to GameEvents.OnLevelUp)\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" void ApplyUpgrade(UpgradeData upgrade) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" // Apply upgrade to stats\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" stats.ApplyUpgrade(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" // Update health if max HP changed\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" if (upgrade.healthBonus > 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" health.SetMaxHP(stats.currentMaxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" health.Heal(upgrade.healthBonus); // Heal the bonus amount\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" // Update movement speed\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" if (upgrade.speedMultiplier != 1f) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" movement.UpdateSpeed(stats.currentSpeed);\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" // Fire event for UI updates\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" GameEvents.PlayerStatsChanged(stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" // === PUBLIC API (for other systems to call) ===\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" public void TakeDamageFromGameEvent(float amount) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" // If you want GameManager to directly call damage\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" // (Though I recommend using IDamageable instead)\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" health.TakeDamage(amount, transform.position, Vector2.zero);\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_V0ERG90ZXNqqcm6B3nT9AN7I__vscode-1774363162398":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":2,"priority":9007199254740991,"text":"File: `","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"`. Lines ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"1","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" to ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"260","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" (","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"270","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" lines total): ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false},{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerMovement.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":"using UnityEngine.InputSystem;\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":"/// Handles player movement via Rigidbody2D.\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":"/// Responsibility: Read input → Calculate velocity → Move via physics\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":"/// Fires movement events for other systems to react to (animation, sfx, etc).\n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":"public class PlayerMovement : MonoBehaviour, IMovementModifiable\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" [Header(\"Movement Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" [SerializeField] private float moveSpeed = 8f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" [Header(\"Dash Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" [SerializeField] private float dashSpeed = 20f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" [SerializeField] private float dashDuration = 0.15f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" [SerializeField] private float dashCooldown = 0.8f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" [SerializeField] private float dashRecoveryTime = 0.1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" [Header(\"Knockback Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" [SerializeField] private float knockbackSpeed = 8f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" [SerializeField] private float knockbackDuration = 0.2f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" private Rigidbody2D rb;\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" private PlayerControls controls;\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" private PlayerStats stats;\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" private Vector2 moveInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" private Vector2 dashDirection;\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" private bool isInitialized = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" private float lastDashTime = -Mathf.Infinity;\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" private float dashEndTime = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" private bool isDashing = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" private bool isRecovering = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" private float recoveryEndTime = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" private Vector2 recoveryStartVelocity;\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" private float knockbackEndTime = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" private Vector2 knockbackVelocity;\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" [Header(\"Collision\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" [SerializeField] private LayerMask obstacleMask = ~0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" [SerializeField] private float skinWidth = 0.05f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" [Header(\"References\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" [SerializeField] private Transform cameraTransform;\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" private Collider2D col;\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" private bool isCapsule = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" private float capsuleRadius = 0.5f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" private float capsuleHeight = 2f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" private float speedMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" private float currentSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" private void Awake()\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" rb = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" col = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":" // Get PlayerStats from PlayerController\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" var playerController = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":" if (playerController != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" stats = playerController.stats;\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" var cap = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" if (cap != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" isCapsule = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" capsuleRadius = Mathf.Max(cap.size.x * 0.5f * Mathf.Max(transform.localScale.x, transform.localScale.y), 0.01f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" capsuleHeight = Mathf.Max(cap.size.y * transform.localScale.y, 0.01f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" else if (col != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" // approximate radius/height from bounds\n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" capsuleRadius = Mathf.Max(col.bounds.extents.x, col.bounds.extents.y);\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" capsuleHeight = Mathf.Max(col.bounds.size.y, 0.01f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" rb.gravityScale = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" rb.freezeRotation = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous; // Smoother collision handling\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" rb.interpolation = RigidbodyInterpolation2D.Interpolate; // Smoother visual movement\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" private void OnEnable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" if (!isInitialized)\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" controls = new PlayerControls();\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" isInitialized = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" controls.Player.Move.Enable();\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" controls.Player.Move.performed += OnMoveInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" controls.Player.Move.canceled += OnMoveInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" controls.Player.Dash.Enable();\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" controls.Player.Dash.performed += OnDashInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" private void OnDisable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" if (controls != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" controls.Player.Move.performed -= OnMoveInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" controls.Player.Move.canceled -= OnMoveInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" controls.Player.Move.Disable();\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" controls.Player.Dash.performed -= OnDashInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" controls.Player.Dash.Disable();\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" private void OnMoveInput(InputAction.CallbackContext context)\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" moveInput = context.ReadValue().normalized;\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" GameEvents.OnPlayerMovementInput?.Invoke(moveInput);\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" public void UpdateSpeed(float newSpeed)\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" moveSpeed = newSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" private void OnDashInput(InputAction.CallbackContext context)\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" // Use PlayerStats dash cooldown if available, otherwise fall back to serialized value\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" float currentDashCooldown = stats != null ? stats.currentDashCooldown : dashCooldown;\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" if (Time.time >= lastDashTime + currentDashCooldown)\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" PerformDash();\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" private void PerformDash()\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" // Use input direction for dash when input exists, otherwise player's forward (up in 2D)\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" if (moveInput.sqrMagnitude > 0.0001f)\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" dashDirection = moveInput.normalized;\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" dashDirection = transform.up;\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" lastDashTime = Time.time;\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" dashEndTime = Time.time + dashDuration;\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" isDashing = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" GameEvents.OnPlayerDash?.Invoke(dashDirection);\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" private void FixedUpdate()\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" if (Time.time < knockbackEndTime)\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" rb.linearVelocity = knockbackVelocity;\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" if (isDashing)\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" if (Time.time < dashEndTime)\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" rb.linearVelocity = dashDirection * dashSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" isDashing = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" isRecovering = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" recoveryStartVelocity = rb.linearVelocity;\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" recoveryEndTime = Time.time + dashRecoveryTime;\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" if (isRecovering)\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" float t = Mathf.Clamp01(1f - (recoveryEndTime - Time.time) / dashRecoveryTime);\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" Vector2 target = Vector2.zero;\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" rb.linearVelocity = Vector2.Lerp(recoveryStartVelocity, target, t);\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" if (Time.time >= recoveryEndTime)\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" isRecovering = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" rb.linearVelocity = Vector2.zero;\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" Move();\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" public void ApplyKnockback(Vector2 direction)\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" if (direction.sqrMagnitude < 0.0001f)\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" Vector2 flatDir = direction.normalized;\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" knockbackVelocity = flatDir * knockbackSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" knockbackEndTime = Time.time + knockbackDuration;\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" isDashing = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" isRecovering = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" private void Move()\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" // Normal movement via velocity to ensure collision response\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" // Use PlayerStats speed if available, otherwise fall back to serialized value\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" currentSpeed = stats != null ? stats.currentSpeed : moveSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" currentSpeed *= speedMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" Vector2 desiredVelocity = moveInput * currentSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" // If no input, zero velocity\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" if (desiredVelocity.sqrMagnitude < 0.0001f)\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" rb.linearVelocity = Vector2.zero;\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" Vector2 dir = desiredVelocity.normalized;\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" float checkDistance = desiredVelocity.magnitude * Time.fixedDeltaTime + skinWidth;\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" RaycastHit2D hit;\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" bool blocked = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" // Use the collider's current position for casting\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" Vector2 castOrigin = (Vector2)transform.position;\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" if (isCapsule)\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" hit = Physics2D.CapsuleCast(castOrigin, new Vector2(capsuleRadius * 2f, capsuleHeight),\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" CapsuleDirection2D.Vertical, 0f, dir, checkDistance, obstacleMask);\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" blocked = hit.collider != null && hit.distance > 0f; // Only block if we're not already overlapping\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" hit = Physics2D.CircleCast(castOrigin, capsuleRadius, dir, checkDistance, obstacleMask);\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" blocked = hit.collider != null && hit.distance > 0f; // Only block if we're not already overlapping\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" if (blocked && hit.collider != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" // Slide along surface instead of penetrating\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" // Calculate the component of velocity parallel to the surface\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" Vector2 slideDir = Vector2.Perpendicular(hit.normal);\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" float slideMagnitude = Vector2.Dot(desiredVelocity, slideDir);\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" desiredVelocity = slideDir * slideMagnitude;\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" // Let the Rigidbody2D handle the actual collision resolution\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" // by setting velocity and allowing physics to do its job\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" rb.linearVelocity = desiredVelocity;\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" public void SetSpeedMultiplier(float multiplier)\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" speedMultiplier = multiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_uOwNHFevhaW8U4XrWknDpC8D__vscode-1774363162399":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAttack.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":"using System;\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":"using UnityEngine.InputSystem;\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":"public class PlayerAttack : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" [Header(\"Components\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" [SerializeField] private PlayerController playerController;\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" [SerializeField] private PlayerAiming aiming;\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" [SerializeField] private Health health;\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" [SerializeField] private float baseFireRate = 0.5f; // shots per second (fallback)\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" [SerializeField] private Transform firePoint;\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" private PlayerControls controls;\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" private PlayerStats stats;\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" private bool isInitialized = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" private bool isFiring = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" private float nextFireTime = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" private IWeaponAttack currentWeapon;\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" void Awake()\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" playerController = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" aiming = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" health = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" // Get PlayerStats from PlayerController\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" if (playerController != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" stats = playerController.stats;\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" // Try to find any component that implements IWeaponAttack safely\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" currentWeapon = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" if (currentWeapon == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" // Try non-generic lookup and cast (covers some Unity versions)\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" var comp = GetComponent(typeof(IWeaponAttack));\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" if (comp is IWeaponAttack casted) currentWeapon = casted;\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" if (currentWeapon == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" // Try children as a fallback\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" currentWeapon = GetComponentInChildren();\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" // Initialize weapon with player stats for damage calculations\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" if (currentWeapon != null && stats != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" currentWeapon.Initialize(stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" void OnEnable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" // Only create controls once to avoid multiple input listeners\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" if (!isInitialized)\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" controls = new PlayerControls();\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" isInitialized = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" // Reset firing state when enabled to prevent stuck attacking\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" isFiring = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" controls.Player.Attack.Enable();\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" controls.Player.Attack.started += OnAttackStarted;\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" controls.Player.Attack.canceled += OnAttackCanceled;\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" void OnDisable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" // Stop any active attack when disabled\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" isFiring = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" if (currentWeapon != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" currentWeapon.StopAttack();\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" if (controls != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" controls.Player.Attack.started -= OnAttackStarted;\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" controls.Player.Attack.canceled -= OnAttackCanceled;\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" controls.Player.Attack.Disable();\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" void Update()\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" // Handle simple auto-fire behavior when holding the attack\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" if (isFiring && Time.time >= nextFireTime)\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" // Use PlayerStats attack speed if available, otherwise fall back to serialized value\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" float attackSpeed = stats != null ? stats.currentAttackSpeed : baseFireRate;\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" nextFireTime = Time.time + (attackSpeed > 0f ? 1f / attackSpeed : 0.5f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" if (currentWeapon != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" currentWeapon.Attack();\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" // Safe fallback: no weapon component found — record attempt\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" GameEvents.DebugLog(\"PlayerAttack: attack attempted (no weapon found)\", DebugCategory.Input);\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" void OnAttackStarted(InputAction.CallbackContext context)\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" isFiring = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" if (currentWeapon != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" currentWeapon.Attack();\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" GameEvents.DebugLog(\"PlayerAttack: Attack started (no weapon found)\", DebugCategory.Input);\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" void OnAttackCanceled(InputAction.CallbackContext context)\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" isFiring = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" if (currentWeapon != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" currentWeapon.StopAttack();\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_CI2ErptAaV46MQAOclyum9if__vscode-1774363162400":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":2,"priority":9007199254740991,"text":"File: `","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"`. Lines ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"1","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" to ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"340","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" (","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"593","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" lines total): ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false},{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":342,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":342},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":341,"text":"using System;\n","references":[],"lineBreakBefore":true}],"props":{"priority":341},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":340,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":340},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":339,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":339},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":338,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":338},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":337,"text":"/// Centralized event system for cross-system communication.\n","references":[],"lineBreakBefore":true}],"props":{"priority":337},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":336,"text":"/// Decouples systems so they don't need direct references to each other.\n","references":[],"lineBreakBefore":true}],"props":{"priority":336},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":335,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":335},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":334,"text":"public static class GameEvents\n","references":[],"lineBreakBefore":true}],"props":{"priority":334},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":333,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":333},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":332,"text":" // ========== PLAYER EVENTS ==========\n","references":[],"lineBreakBefore":true}],"props":{"priority":332},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":331,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":331},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":330,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":330},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":329,"text":" /// Fired when player movement input changes.\n","references":[],"lineBreakBefore":true}],"props":{"priority":329},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":328,"text":" /// Allows systems to react to movement input independently (animation, sfx, etc).\n","references":[],"lineBreakBefore":true}],"props":{"priority":328},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":327,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":327},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":326,"text":" public static Action OnPlayerMovementInput;\n","references":[],"lineBreakBefore":true}],"props":{"priority":326},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":325,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":325},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":324,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":324},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":323,"text":" /// Fired when player rotation/aiming changes.\n","references":[],"lineBreakBefore":true}],"props":{"priority":323},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":322,"text":" /// Allows systems to react to aim updates (animation, UI, etc).\n","references":[],"lineBreakBefore":true}],"props":{"priority":322},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":321,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":321},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":320,"text":" public static Action OnPlayerAimDirectionChanged;\n","references":[],"lineBreakBefore":true}],"props":{"priority":320},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":319,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":319},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":318,"text":" public static Action OnPlayerDash;\n","references":[],"lineBreakBefore":true}],"props":{"priority":318},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":317,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":317},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":316,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":316},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":315,"text":" /// Fired when player selects an upgrade from the upgrade choice UI. \n","references":[],"lineBreakBefore":true}],"props":{"priority":315},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":314,"text":" /// Parameters: chosen UpgradeData\n","references":[],"lineBreakBefore":true}],"props":{"priority":314},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":313,"text":" /// Listeners: Player (apply upgrade), UI (close upgrade panel), AudioManager (play selection sound)\n","references":[],"lineBreakBefore":true}],"props":{"priority":313},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":312,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":312},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":311,"text":" public static Action OnPlayerUpgradeApplied;\n","references":[],"lineBreakBefore":true}],"props":{"priority":311},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":310,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":310},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":309,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":309},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":308,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":308},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":307,"text":" // COMBAT EVENTS\n","references":[],"lineBreakBefore":true}],"props":{"priority":307},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":306,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":306},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":305,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":305},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":304,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":304},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":303,"text":" /// Fired when an enemy is killed. Passes the enemy that died.\n","references":[],"lineBreakBefore":true}],"props":{"priority":303},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":302,"text":" /// Listeners: XPManager (award XP), RoomManager (check room clear), AudioManager (death sound), UI (kill counter)\n","references":[],"lineBreakBefore":true}],"props":{"priority":302},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":301,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":301},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":300,"text":" public static Action OnEnemyKilled;\n","references":[],"lineBreakBefore":true}],"props":{"priority":300},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":299,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":299},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":298,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":298},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":297,"text":" /// Fired when an enemy takes damage (non-fatal).\n","references":[],"lineBreakBefore":true}],"props":{"priority":297},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":296,"text":" /// Parameters: damage amount, hit position, hit direction\n","references":[],"lineBreakBefore":true}],"props":{"priority":296},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":295,"text":" /// Listeners: VFXManager (spawn damage numbers), AudioManager (hit sound)\n","references":[],"lineBreakBefore":true}],"props":{"priority":295},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":294,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":294},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":293,"text":" public static event Action OnEnemyDamaged;\n","references":[],"lineBreakBefore":true}],"props":{"priority":293},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":292,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":292},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":291,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":291},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":290,"text":" /// Fired when player takes damage.\n","references":[],"lineBreakBefore":true}],"props":{"priority":290},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":289,"text":" /// Parameters: damage amount, current HP, max HP\n","references":[],"lineBreakBefore":true}],"props":{"priority":289},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":288,"text":" /// Listeners: HealthBarUI (update bar), ScreenEffects (flash red), AudioManager (hurt sound)\n","references":[],"lineBreakBefore":true}],"props":{"priority":288},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":287,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":287},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":286,"text":" public static Action OnPlayerDamaged;\n","references":[],"lineBreakBefore":true}],"props":{"priority":286},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":285,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":285},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":284,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":284},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":283,"text":" /// Fired when player is healed.\n","references":[],"lineBreakBefore":true}],"props":{"priority":283},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":282,"text":" /// Parameters: heal amount\n","references":[],"lineBreakBefore":true}],"props":{"priority":282},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":281,"text":" /// Listeners: HealthBarUI (update bar), VFXManager (heal particles), AudioManager (heal sound)\n","references":[],"lineBreakBefore":true}],"props":{"priority":281},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":280,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":280},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":279,"text":" public static event Action OnPlayerHealed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":279},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":278,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":278},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":277,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":277},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":276,"text":" /// Fired when player dies.\n","references":[],"lineBreakBefore":true}],"props":{"priority":276},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":275,"text":" /// Listeners: GameManager (game over screen), AudioManager (death sound), InputManager (disable input)\n","references":[],"lineBreakBefore":true}],"props":{"priority":275},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":274,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":274},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":273,"text":" public static event Action OnPlayerDied;\n","references":[],"lineBreakBefore":true}],"props":{"priority":273},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":272,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":272},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":271,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":271},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":270,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":270},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":269,"text":" // STATUS EFFECT EVENTS\n","references":[],"lineBreakBefore":true}],"props":{"priority":269},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":268,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":268},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":267,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":267},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":266,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":266},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":265,"text":" /// Fired when a status effect is applied to an entity.\n","references":[],"lineBreakBefore":true}],"props":{"priority":265},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":264,"text":" /// Parameters: affected GameObject, effect data\n","references":[],"lineBreakBefore":true}],"props":{"priority":264},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":263,"text":" /// Listeners: VFXManager (spawn effect visuals), AudioManager (play effect sound), UI (show status icon)\n","references":[],"lineBreakBefore":true}],"props":{"priority":263},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":" public static Action OnStatusEffectApplied;\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":" /// Fired when a status effect is removed from an entity.\n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":" /// Parameters: affected GameObject, effect data\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":" /// Listeners: VFXManager (clean up visuals), UI (remove status icon)\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":" public static Action OnStatusEffectRemoved;\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" // PROGRESSION EVENTS\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" /// Fired when player gains XP.\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" /// Parameters: XP amount gained\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" /// Listeners: XPBarUI (update bar), VFXManager (XP gain popup)\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" public static System.Action OnXPChanged; // (currentXP, xpRequired)\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" /// Fired when player levels up.\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" /// Parameters: new level\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" /// Listeners: Player (heal on level up), UI (level up popup), PathSystem (check for path unlock at 10/20/30)\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" public static System.Action OnLevelUp; // (newLevel)\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" /// Fired when upgrade choices are offered to player.\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" /// Parameters: current level, array of 3 upgrade options\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" /// Listeners: UpgradeUI (display choices)\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" public static event Action OnUpgradeOffered;\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" public static event Action OnHealthChanged; // (currentHP, maxHP)\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" /// Fired when player's stats change (from upgrades, buffs, debuffs).\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":" /// Parameters: updated PlayerStats\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" /// Listeners: CharacterSheetUI (update display), SaveManager (track current stats)\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" public static event Action OnPlayerStatsChanged;\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" // ROOM EVENTS\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" /// Fired when player enters a new room.\n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" /// Parameters: room index (0-24)\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" /// Listeners: RoomManager (spawn enemies), UI (update room counter), MusicManager (change music)\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" public static event Action OnRoomEntered;\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" /// Fired when all enemies in a room are cleared.\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" /// Parameters: room index\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":" /// Listeners: UpgradeManager (show upgrade choices), DoorController (unlock doors), SaveManager (save progress)\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":" public static event Action OnRoomCleared;\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" /// Fired when player enters the boss room.\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" /// Listeners: MusicManager (boss music), UI (boss health bar), CameraController (zoom out)\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" public static event Action OnBossRoomEntered;\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" /// Fired when a boss is defeated.\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" /// Parameters: boss identifier (mid-boss or final boss)\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" /// Listeners: GameManager (check win condition), UI (victory screen), SaveManager (unlock endless mode)\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" public static event Action OnBossDefeated;\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" // GAME STATE EVENTS\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" /// Fired when game state changes (menu, playing, paused, game over, etc.).\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" /// Parameters: new game state\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" /// Listeners: UI (show/hide panels), AudioManager (pause music), InputManager (enable/disable input)\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" public static event Action OnGameStateChanged;\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" /// Fired when a new run starts.\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" /// Listeners: All managers (reset state), SaveManager (create new run data), UI (reset displays)\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" public static event Action OnRunStarted;\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" /// Fired when run ends (win or loss).\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" /// Parameters: was victory (true = won, false = died)\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" /// Listeners: GameManager (show results screen), SaveManager (record run stats), MetaProgression (award currency)\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" public static event Action OnRunEnded;\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" // UI EVENTS\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" /// Fired when a notification should be shown to player.\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" /// Parameters: notification text\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" /// Listeners: NotificationUI (display popup)\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" public static event Action OnShowNotification;\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" /// Fired when game is paused or unpaused.\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" /// Parameters: is paused\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" /// Listeners: GameManager (set Time.timeScale), UI (show pause menu), AudioManager (pause sounds)\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" public static event Action OnGamePaused;\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" // META-PROGRESSION EVENTS (Phase 3+)\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" /// Fired when player earns persistent currency.\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" /// Parameters: currency amount\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" /// Listeners: MetaProgressionUI (update display), SaveManager (save currency)\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" public static event Action OnCurrencyEarned;\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" /// Fired when player unlocks a new character.\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" /// Parameters: character ID\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" /// Listeners: CharacterSelectUI (enable character), SaveManager (save unlock)\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" public static event Action OnCharacterUnlocked;\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" /// Fired when player unlocks a new path tree for a character.\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" /// Parameters: character ID, path tree ID\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" /// Listeners: PathSystemUI (show new options), SaveManager (save unlock)\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" public static event Action OnPathTreeUnlocked;\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" // AUDIO EVENTS (Optional - can also subscribe directly to other events)\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" /// Fired when a sound effect should play.\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" /// Parameters: sound ID/name, position (Vector2.zero for 2D sounds)\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" /// Listeners: AudioManager\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" public static event Action OnPlaySound;\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" /// Fired when music should change.\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" /// Parameters: music track ID/name\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" /// Listeners: AudioManager\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" public static event Action OnPlayMusic;\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" // DEBUG EVENTS (Development only)\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" #if UNITY_EDITOR || DEVELOPMENT_BUILD\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" /// Fired when debug command is executed.\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" /// Parameters: command name, arguments\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" /// Listeners: DebugConsole, various managers\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" public static event Action OnDebugCommand;\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" /// Debug logging event for combat/attack debugging.\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" /// Parameters: log message, category\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" public static event Action OnDebugLog;\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" /// Helper method for debug logging with category filtering.\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" /// Only logs if the category is enabled in DebugManager.\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" /// Only active in Editor and Development builds.\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" public static void DebugLog(string message, DebugCategory category = DebugCategory.General)\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" // Check if DebugManager exists and category is enabled\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" if (DebugManager.Instance == null || !DebugManager.Instance.IsCategoryEnabled(category))\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" // Add category prefix to message for easier filtering in console\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" string prefixedMessage = $\"{DebugManager.Instance.GetCategoryPrefix(category)} {message}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" Debug.Log(prefixedMessage);\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" OnDebugLog?.Invoke(prefixedMessage, category);\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" /// Backward compatibility: Log without category (uses General category).\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" [System.Obsolete(\"Use DebugLog(message, category) instead for better filtering.\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" public static void DebugLog(string message)\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" Debug.Log(message);\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" /// Helper method for debug warning logging with category filtering.\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" /// Only logs if the category is enabled in DebugManager.\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" /// Only active in Editor and Development builds.\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" public static void DebugWarning(string message, DebugCategory category = DebugCategory.General)\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" // Check if DebugManager exists and category is enabled\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" if (DebugManager.Instance == null || !DebugManager.Instance.IsCategoryEnabled(category))\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" // Add category prefix to message for easier filtering in console\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" string prefixedMessage = $\"{DebugManager.Instance.GetCategoryPrefix(category)} {message}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" Debug.LogWarning(prefixedMessage);\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" OnDebugLog?.Invoke(prefixedMessage, category);\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" [System.Obsolete(\"Use DebugWarning(message, category) instead for better filtering.\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" public static void DebugWarning(string message)\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" Debug.Log(message);\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" public static void DebugError(string message, DebugCategory category = DebugCategory.General)\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" // Check if DebugManager exists and category is enabled\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" if (DebugManager.Instance == null || !DebugManager.Instance.IsCategoryEnabled(category))\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" // Add category prefix to message for easier filtering in console\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" string prefixedMessage = $\"{DebugManager.Instance.GetCategoryPrefix(category)} {message}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" Debug.LogError(prefixedMessage);\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" OnDebugLog?.Invoke(prefixedMessage, category);\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" /// Backward compatibility: Log without category (uses General category).\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" [System.Obsolete(\"Use DebugError(message, category) instead for better filtering.\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" public static void DebugError(string message)\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" Debug.LogError(message);\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":342,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":342},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_YNpQVJYiCJ0i23GDydiZmSpR__vscode-1774363162401":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":"public class XPManager : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" public static XPManager Instance { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" [Header(\"XP Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" [SerializeField] private int currentXP = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" [SerializeField] private int currentLevel = 1;\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" [SerializeField] private int xpToNextLevel = 100;\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" [SerializeField] private float xpMultiplier = 1.5f; // How much XP increases per level\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" [SerializeField] private bool debugMode = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" [Header(\"Level Up Rewards\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" [SerializeField] private float healPercentOnLevelUp = 0.1f; // 10% heal\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" private Health playerHealth;\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" void Awake() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" // Singleton pattern\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" if (Instance != null && Instance != this) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" Destroy(gameObject);\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" } else {\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" Instance = this;\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" // Get player health reference\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" playerHealth = FindFirstObjectByType()?.GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" void OnEnable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" // Subscribe to enemy killed event\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" GameEvents.OnEnemyKilled += AwardXP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" void OnDisable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" // Unsubscribe to prevent memory leaks\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" GameEvents.OnEnemyKilled -= AwardXP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" public void AddXP(int amount)\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" currentXP += amount;\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" // Fire event for UI\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" GameEvents.OnXPChanged?.Invoke(currentXP, xpToNextLevel);\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" // Check for level up\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" CheckLevelUp();\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" private void AwardXP(Enemy enemy) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" // Get XP value from enemy's data\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" EnemyData data = enemy.EnemyData; // You'll need to add this getter\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" if (data == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" if (debugMode) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" GameEvents.DebugWarning(\"Enemy has no data, can't award XP\", DebugCategory.XPAndLeveling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" AddXP(data.XPValue);\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" private void CheckLevelUp() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" while (currentXP >= xpToNextLevel) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" LevelUp();\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" private void LevelUp() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" currentLevel++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" currentXP -= xpToNextLevel;\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" // Calculate next level requirement (exponential curve)\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" xpToNextLevel = Mathf.RoundToInt(xpToNextLevel * xpMultiplier);\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" if (debugMode) GameEvents.DebugLog($\"Leveled up to {currentLevel}! Next level at {xpToNextLevel} XP.\", DebugCategory.XPAndLeveling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" // Heal player\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" HealPlayer();\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" // Fire level up event\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" GameEvents.OnLevelUp?.Invoke(currentLevel);\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" private void HealPlayer() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" if (playerHealth != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" float healAmount = playerHealth.MaxHP * healPercentOnLevelUp;\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" playerHealth.Heal(healAmount);\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" GameEvents.DebugLog($\"Healed player for {healAmount} HP on level up.\", DebugCategory.General);\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" } \n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" // Public getters for UI\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" public int GetCurrentXP() => currentXP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" public int GetXPToNextLevel() => xpToNextLevel;\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" public int GetCurrentLevel() => currentLevel;\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_XrJcYgpbfmHvBb2GJqPeCLaZ__vscode-1774363162402":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/RoomManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":"public class RoomManager : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" // Handles room spawning and transitions\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_EJNSZQ9ESq1n7HQk4kWhYxfk__vscode-1774363162403":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/GameEvents.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/GameEvents.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":" #else\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":" /// No-op debug logging for release builds.\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" [System.Diagnostics.Conditional(\"UNITY_EDITOR\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" public static void DebugLog(string message, DebugCategory category = DebugCategory.General) { }\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" [System.Diagnostics.Conditional(\"UNITY_EDITOR\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" [System.Obsolete(\"Use DebugLog(message, category) instead for better filtering.\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" public static void DebugLog(string message) { }\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" #endif\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" // HELPER METHODS (Optional - for safer invocation)\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" public static void StartRun() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" OnRunStarted?.Invoke();\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" GameEvents.DebugError($\"Error in OnRunStarted listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" public static void EndRun(bool wasVictory) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" OnRunEnded?.Invoke(wasVictory);\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" GameEvents.DebugError($\"Error in OnRunEnded listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" /// Safely invoke OnEnemyKilled with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" public static void EnemyKilled(Enemy enemy) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" OnEnemyKilled?.Invoke(enemy);\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" GameEvents.DebugError($\"Error in OnEnemyKilled listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" /// Safely invoke OnPlayerDamaged with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" public static void PlayerDamaged(float amount, float currentHP, float maxHP) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" OnPlayerDamaged?.Invoke(amount, currentHP, maxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" GameEvents.DebugError($\"Error in OnPlayerDamaged listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" /// Safely invoke OnHealthChanged with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" public static void PlayerHealthChanged(float currentHP, float maxHP) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" OnHealthChanged?.Invoke(currentHP, maxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" GameEvents.DebugError($\"Error in OnPlayerHealthChanged listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" /// Safely invoke OnLevelUp with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" public static void LevelUp(int newLevel) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" OnLevelUp?.Invoke(newLevel);\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" GameEvents.DebugError($\"Error in OnLevelUp listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" /// Safely invoke OnRoomCleared with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" public static void RoomCleared(int roomIndex) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" OnRoomCleared?.Invoke(roomIndex);\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" GameEvents.DebugError($\"Error in OnRoomCleared listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" /// Safely invoke OnPlayerHealed with null check and error handling. \n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" public static void PlayerHealed(float amount) { // Helper method\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" OnPlayerHealed?.Invoke(amount);\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" GameEvents.DebugError($\"Error in OnPlayerHealed listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" } \n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" /// Safely invoke OnPlayerDied with null check and error handling. \n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" public static void PlayerDied() { // Helper method\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" OnPlayerDied?.Invoke();\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" GameEvents.DebugError($\"Error in OnPlayerDied listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" /// Safely invoke OnPlayerStatsChanged with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" public static void PlayerStatsChanged(PlayerStats stats)\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" OnPlayerStatsChanged?.Invoke(stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" catch (Exception e)\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" GameEvents.DebugError($\"Error in OnPlayerStatsChanged listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" public static void XPChanged(int current, int required) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" OnXPChanged?.Invoke(current, required);\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" GameEvents.DebugError($\"Error in OnXPChanged listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" public static void EnemyDamaged(float amount, Vector2 hitPoint, Vector2 hitDirection) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" OnEnemyDamaged?.Invoke(amount, hitPoint, hitDirection);\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" GameEvents.DebugError($\"Error in OnEnemyDamaged listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" public static void UpgradeApplied(UpgradeData upgrade) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" OnPlayerUpgradeApplied?.Invoke(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" GameEvents.DebugError($\"Error in OnPlayerUpgradeApplied listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" /// Safely invoke OnStatusEffectApplied with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" public static void StatusEffectApplied(GameObject target, StatusEffectData effectData) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" OnStatusEffectApplied?.Invoke(target, effectData);\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" GameEvents.DebugError($\"Error in OnStatusEffectApplied listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" /// Safely invoke OnStatusEffectRemoved with null check and error handling.\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" public static void StatusEffectRemoved(GameObject target, StatusEffectData effectData) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" OnStatusEffectRemoved?.Invoke(target, effectData);\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" } catch (Exception e) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" GameEvents.DebugError($\"Error in OnStatusEffectRemoved listeners: {e.Message}\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" // Add more helper methods as needed for frequently used events\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" // CLEANUP (Call on scene unload to prevent memory leaks)\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" /// Unsubscribe all listeners. Call this when changing scenes or ending runs.\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" /// WARNING: Only use this if you're absolutely sure you want to clear ALL listeners.\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" /// Usually it's better to let each system manage its own subscriptions.\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" public static void ClearAllListeners() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" // Combat\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" OnEnemyKilled = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" OnEnemyDamaged = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" OnPlayerDamaged = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" OnPlayerHealed = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" OnPlayerDied = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" // Status Effects\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" OnStatusEffectApplied = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" OnStatusEffectRemoved = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" // Progression\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" OnXPChanged = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" OnLevelUp = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" OnPlayerUpgradeApplied = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" OnUpgradeOffered = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" OnPlayerStatsChanged = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" // Room\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" OnRoomEntered = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" OnRoomCleared = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" OnBossRoomEntered = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" OnBossDefeated = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" // Game State\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" OnGameStateChanged = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" OnRunStarted = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" OnRunEnded = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" // UI\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" OnShowNotification = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" OnGamePaused = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" // Meta\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" OnCurrencyEarned = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" OnCharacterUnlocked = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" OnPathTreeUnlocked = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" // Audio\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" OnPlaySound = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" OnPlayMusic = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" #if UNITY_EDITOR || DEVELOPMENT_BUILD\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" OnDebugCommand = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" OnDebugLog = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" #endif\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" GameEvents.DebugLog(\"All GameEvents listeners cleared.\", DebugCategory.General);\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"// ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":"// SUPPORTING ENUMS\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":"// ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":"/// Possible game states. Used with OnGameStateChanged event.\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":"public enum GameState {\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" MainMenu,\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" CharacterSelect,\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" Playing,\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" Paused,\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" UpgradeChoice,\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" GameOver,\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" Victory,\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" Loading\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_T6pJzSXtbIKLZYpDaLBbjXWs__vscode-1774363162404":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Enemy.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":"[RequireComponent(typeof(Health))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":"[RequireComponent(typeof(EnemyAttack))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":"[RequireComponent(typeof(Rigidbody2D))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":"public class Enemy : MonoBehaviour, IPoolable, IMovementModifiable {\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" [Header(\"Components\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" [SerializeField] protected Health health;\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" IMovementBehavior movement;\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" [SerializeField] Rigidbody2D rb;\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" EnemyAttack attack;\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" IAttackBehaviour attackBehavior;\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" [Header(\"Data\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" [SerializeField] private EnemyData enemyData;\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" public EnemyData EnemyData { get => enemyData; set => enemyData = value; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" bool debugMode = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" // Cache for pooling\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" private bool isInitialized = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" void Update()\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" if (movement != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" movement.UpdateMovement();\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" void Awake() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" CacheComponents();\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" ConfigureRigidbody();\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" ApplyEnemyData();\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" private void ConfigureRigidbody()\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" if (rb != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" // Make enemy kinematic to prevent physics-based pushing/vibration\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" // Enemy movement is handled by IMovementBehavior, not physics forces\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" rb.bodyType = RigidbodyType2D.Kinematic;\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" rb.useFullKinematicContacts = true; // Still detect collisions for damage\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" private void CacheComponents()\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" if (isInitialized) return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" health = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" attack = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" rb = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" movement = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" attackBehavior = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" isInitialized = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" void ApplyEnemyData()\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" if (enemyData != null && health != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" health.SetMaxHP(enemyData.maxHealth);\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" void Start()\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" if (enemyData != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" Initialize(enemyData);\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" GameEvents.DebugLog(\"Enemy has no EnemyData assigned.\", DebugCategory.EnemyAI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" public void Initialize(EnemyData enemyData)\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" this.enemyData = enemyData;\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" if (attack == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" GameEvents.DebugLog(\"Enemy missing EnemyAttack component.\", DebugCategory.EnemyAI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" else if (attackBehavior == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" GameEvents.DebugLog(\"Enemy missing IAttackBehaviour component.\", DebugCategory.EnemyAI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" attack.Initialize(this.enemyData, attackBehavior);\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" if (movement == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" GameEvents.DebugLog(\"Enemy missing IMovementBehavior component.\", DebugCategory.EnemyAI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" movement.Initialize(this.enemyData);\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" void OnEnable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" health.OnDied += HandleDeath;\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" health.OnDamaged += HandleDamage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" void OnDisable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" health.OnDied -= HandleDeath;\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" health.OnDamaged -= HandleDamage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" void HandleDamage(float amount, Vector2 hitPoint, Vector2 hitDirection) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" // Fire GameEvent for damage tracking, VFX, audio, etc.\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" GameEvents.EnemyDamaged(amount, hitPoint, hitDirection);\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" GameEvents.DebugLog($\"[Enemy] {gameObject.name} took {amount} damage. HP: {health.CurrentHP}/{health.MaxHP}\", DebugCategory.EnemyAI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" void HandleDeath() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" GameEvents.EnemyKilled(this);\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" // Return to pool instead of destroying\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" if (PoolingSystem.Instance != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" PoolingSystem.Instance.Return(gameObject);\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" Destroy(gameObject);\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" // IPoolable implementation for object pooling\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" public void OnSpawnFromPool()\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" CacheComponents();\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" // Reset health\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" if (health != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" health.ResetHealth();\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" // Re-enable Rigidbody2D\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" if (rb != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" rb.simulated = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" // Re-initialize with enemy data\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" if (enemyData != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" Initialize(enemyData);\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" public void SetSpeedMultiplier(float multiplier)\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" if (movement != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" movement.SetSpeedMultiplier(multiplier);\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" public void OnReturnToPool()\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" // Stop Rigidbody2D to prevent errors\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" if (rb != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" rb.linearVelocity = Vector2.zero;\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" // Stop movement\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" if (movement != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" movement.Stop();\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_z0hHwAEGxCMcFw4NWgJ90dkW__vscode-1774363162405":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Shared/Health.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Shared/Health.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":"using System;\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":"public class Health : MonoBehaviour, IDamageable {\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" [Header(\"Health Stats\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" [SerializeField] private float maxHP = 100f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" private float currentHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" [Header(\"Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" [SerializeField] private bool isInvulnerable = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" [SerializeField] private bool canHeal = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" // Events for other systems to react to\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" public event Action OnHealthChanged; // current, max\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" public event Action OnDamaged; // amount, hitPoint, hitDirection\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" public event Action OnDied;\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" public event Action OnHealed; // amount\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" public bool IsAlive => currentHP > 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" public float CurrentHP => currentHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" public float MaxHP => maxHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" public float HealthPercent => currentHP / maxHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" void Awake() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" currentHP = maxHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" /// Reset health to max (used for object pooling)\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" public void ResetHealth()\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" currentHP = maxHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" OnHealthChanged?.Invoke(currentHP, maxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" // IDamageable implementation\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" public void TakeDamage(float amount, Vector2 hitPoint, Vector2 hitDirection) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" if (!IsAlive || isInvulnerable) return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" currentHP -= amount;\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" currentHP = Mathf.Max(0, currentHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" OnDamaged?.Invoke(amount, hitPoint, hitDirection);\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" OnHealthChanged?.Invoke(currentHP, maxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" if (currentHP <= 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" Die();\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" public void Heal(float amount) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" if (!IsAlive || !canHeal) return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" currentHP += amount;\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" currentHP = Mathf.Min(currentHP, maxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" OnHealed?.Invoke(amount);\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" OnHealthChanged?.Invoke(currentHP, maxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" public void SetMaxHP(float newMax) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" maxHP = newMax;\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" currentHP = Mathf.Min(currentHP, maxHP); // Don't exceed new max\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" OnHealthChanged?.Invoke(currentHP, maxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" void Die() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" OnDied?.Invoke();\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" // Health doesn't know HOW to die (player vs enemy vs destructible)\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" // It just announces \"I died\" via event\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_DAnjbmQiy840CPb6g9qSW3zt__vscode-1774363162406":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":2,"priority":9007199254740991,"text":"File: `","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"`. Lines ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"1","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" to ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"320","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" (","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"347","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" lines total): ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false},{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":322,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":322},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":321,"text":"using System.Collections.Generic;\n","references":[],"lineBreakBefore":true}],"props":{"priority":321},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":320,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":320},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":319,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":319},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":318,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":318},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":317,"text":"/// Manages upgrade selection, validation, and application.\n","references":[],"lineBreakBefore":true}],"props":{"priority":317},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":316,"text":"/// Checks for required upgrades (prerequisites) and conflicting upgrades (mutually exclusive).\n","references":[],"lineBreakBefore":true}],"props":{"priority":316},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":315,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":315},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":314,"text":"public class UpgradeManager : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":314},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":313,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":313},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":312,"text":" [Header(\"Upgrade Pool\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":312},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":311,"text":" [Tooltip(\"All available upgrades in the game. Assign all UpgradeData assets here.\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":311},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":310,"text":" [SerializeField] private UpgradeData[] allUpgrades;\n","references":[],"lineBreakBefore":true}],"props":{"priority":310},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":309,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":309},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":308,"text":" [Header(\"Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":308},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":307,"text":" [Tooltip(\"Number of upgrade choices offered to player\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":307},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":306,"text":" [SerializeField] private int upgradeChoiceCount = 3;\n","references":[],"lineBreakBefore":true}],"props":{"priority":306},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":305,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":305},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":304,"text":" public static UpgradeManager Instance { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":304},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":303,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":303},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":302,"text":" void Awake() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":302},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":301,"text":" if (Instance == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":301},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":300,"text":" Instance = this;\n","references":[],"lineBreakBefore":true}],"props":{"priority":300},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":299,"text":" } else {\n","references":[],"lineBreakBefore":true}],"props":{"priority":299},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":298,"text":" Destroy(gameObject);\n","references":[],"lineBreakBefore":true}],"props":{"priority":298},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":297,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":297},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":296,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":296},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":295,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":295},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":294,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":294},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":293,"text":" // UPGRADE POOL SELECTION\n","references":[],"lineBreakBefore":true}],"props":{"priority":293},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":292,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":292},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":291,"text":" public UpgradeData[] GetAllUpgrades() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":291},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":290,"text":" return allUpgrades;\n","references":[],"lineBreakBefore":true}],"props":{"priority":290},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":289,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":289},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":288,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":288},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":287,"text":" public List GetUpgradesByTypeAndCount(UpgradeType type, int count, List outputList) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":287},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":286,"text":" if (outputList == null) return null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":286},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":285,"text":" outputList.Clear();\n","references":[],"lineBreakBefore":true}],"props":{"priority":285},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":284,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":284},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":283,"text":" if (allUpgrades == null || allUpgrades.Length == 0 || count <= 0) return outputList;\n","references":[],"lineBreakBefore":true}],"props":{"priority":283},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":282,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":282},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":281,"text":" PlayerController player = PlayerController.Instance;\n","references":[],"lineBreakBefore":true}],"props":{"priority":281},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":280,"text":" if (player == null || player.stats == null) return outputList;\n","references":[],"lineBreakBefore":true}],"props":{"priority":280},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":279,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":279},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":278,"text":" // Build pool of matching type that can actually be taken\n","references":[],"lineBreakBefore":true}],"props":{"priority":278},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":277,"text":" List pool = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":277},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":276,"text":" foreach (UpgradeData u in allUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":276},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":275,"text":" if (u != null && u.type == type && CanTakeUpgrade(u, player.stats)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":275},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":274,"text":" pool.Add(u);\n","references":[],"lineBreakBefore":true}],"props":{"priority":274},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":273,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":273},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":272,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":272},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":271,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":271},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":270,"text":" if (pool.Count == 0) return outputList;\n","references":[],"lineBreakBefore":true}],"props":{"priority":270},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":269,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":269},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":268,"text":" // Select up to count items, weighted by rarity. Avoid duplicates unless stackable.\n","references":[],"lineBreakBefore":true}],"props":{"priority":268},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":267,"text":" for (int i = 0; i < count && pool.Count > 0; i++) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":267},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":266,"text":" UpgradeData selected = SelectWeightedUpgrade(pool);\n","references":[],"lineBreakBefore":true}],"props":{"priority":266},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":265,"text":" if (selected == null) break;\n","references":[],"lineBreakBefore":true}],"props":{"priority":265},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":264,"text":" outputList.Add(selected);\n","references":[],"lineBreakBefore":true}],"props":{"priority":264},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":263,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":263},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":" // Remove non-stackable upgrades or upgrades at max stacks to prevent duplicates\n","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":" if (selected.maxStacks <= 1) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":" pool.Remove(selected);\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":" } else {\n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":" // Check if we can still take this stackable upgrade\n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":" int currentStacks = GetUpgradeStackCount(selected, player.stats) + 1; // +1 because we just added it\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":" if (currentStacks >= selected.maxStacks) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":" pool.Remove(selected);\n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" return outputList;\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" // UPGRADE APPLICATION\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" /// Apply the chosen upgrade to the player after validation.\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" public void ApplyUpgrade(UpgradeData upgrade) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" PlayerController player = PlayerController.Instance;\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" if (player == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" GameEvents.DebugWarning(\"PlayerController instance not found. Cannot apply upgrade.\", DebugCategory.Upgrades);\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" // Validate upgrade can be taken\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" if (!CanTakeUpgrade(upgrade, player.stats)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" GameEvents.DebugWarning($\"Cannot apply upgrade '{upgrade.upgradeName}': requirements not met.\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" player.stats.ApplyUpgrade(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" GameEvents.UpgradeApplied(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" GameEvents.DebugLog($\"Applied upgrade: {upgrade.upgradeName}\", DebugCategory.Upgrades);\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" // UPGRADE VALIDATION\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" /// Check if a specific upgrade can be taken by the player.\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" /// Validates max stacks, required upgrades (prerequisites), and conflicting upgrades.\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" public bool CanTakeUpgrade(UpgradeData upgrade, PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" if (upgrade == null || stats == null) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" // Use the UpgradeData's built-in validation\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" return upgrade.CanBeTaken(stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" /// Check if required upgrades (prerequisites) are satisfied.\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" public bool HasRequiredUpgrades(UpgradeData upgrade, PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":" if (upgrade == null || stats == null) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" if (upgrade.requiredUpgrades == null || upgrade.requiredUpgrades.Length == 0) return true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" foreach (UpgradeData required in upgrade.requiredUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" if (required != null && !stats.HasUpgrade(required)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" return true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" /// Check if any conflicting upgrades have been taken.\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" public bool HasConflictingUpgrade(UpgradeData upgrade, PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" if (upgrade == null || stats == null) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" if (upgrade.conflictingUpgrades == null || upgrade.conflictingUpgrades.Length == 0) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" foreach (UpgradeData conflict in upgrade.conflictingUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" if (conflict != null && stats.HasUpgrade(conflict)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" return true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" /// Get the reason why an upgrade cannot be taken (for UI display).\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" /// Returns null if upgrade can be taken.\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" public string GetUpgradeBlockedReason(UpgradeData upgrade, PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" if (upgrade == null) return \"Invalid upgrade\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" if (stats == null) return \"No player stats\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" // Check max stacks\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" if (upgrade.maxStacks > 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" int currentStacks = GetUpgradeStackCount(upgrade, stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" if (currentStacks >= upgrade.maxStacks) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" return $\"Max stacks reached ({currentStacks}/{upgrade.maxStacks})\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" // Check required upgrades\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" if (upgrade.requiredUpgrades != null && upgrade.requiredUpgrades.Length > 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" List missingUpgrades = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" foreach (UpgradeData required in upgrade.requiredUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" if (required != null && !stats.HasUpgrade(required)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" missingUpgrades.Add(required.upgradeName);\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" if (missingUpgrades.Count > 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" return $\"Requires: {string.Join(\", \", missingUpgrades)}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" // Check conflicting upgrades\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" if (upgrade.conflictingUpgrades != null && upgrade.conflictingUpgrades.Length > 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" foreach (UpgradeData conflict in upgrade.conflictingUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" if (conflict != null && stats.HasUpgrade(conflict)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" return $\"Conflicts with: {conflict.upgradeName}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" return null; // No issues, upgrade can be taken\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" /// Get how many times the player has taken a specific upgrade.\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" public int GetUpgradeStackCount(UpgradeData upgrade, PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" if (upgrade == null || stats == null) return 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" int count = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" foreach (UpgradeData applied in stats.AppliedUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" if (applied == upgrade) count++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" return count;\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" // UPGRADE SELECTION / OFFERING\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" /// Get all upgrades that can currently be taken by the player.\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" /// Filters out upgrades blocked by requirements, conflicts, or max stacks.\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" public List GetAvailableUpgrades(PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" List available = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" if (allUpgrades == null || stats == null) return available;\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" foreach (UpgradeData upgrade in allUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" if (upgrade != null && CanTakeUpgrade(upgrade, stats)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" available.Add(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" return available;\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" /// Get available upgrades filtered by type (Power, Defense, Utility).\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" public List GetAvailableUpgradesByType(PlayerStats stats, UpgradeType type) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" List available = GetAvailableUpgrades(stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" available.RemoveAll(u => u.type != type);\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" return available;\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" /// Get available upgrades filtered by rarity.\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" public List GetAvailableUpgradesByRarity(PlayerStats stats, UpgradeRarity rarity) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" List available = GetAvailableUpgrades(stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" available.RemoveAll(u => u.rarity != rarity);\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" return available;\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" /// Offer random upgrade choices to the player.\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" /// Respects rarity weights: Common (70%), Rare (25%), Epic (5%).\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" public UpgradeData[] GetRandomUpgradeChoices(PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" List available = GetAvailableUpgrades(stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" List choices = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" if (available.Count == 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" GameEvents.DebugWarning(\"No available upgrades to offer!\", DebugCategory.Upgrades);\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" return choices.ToArray();\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" // Select random upgrades (weighted by rarity)\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" for (int i = 0; i < upgradeChoiceCount && available.Count > 0; i++) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" UpgradeData selected = SelectWeightedUpgrade(available);\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" if (selected != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" choices.Add(selected);\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" // Remove from pool to avoid duplicates (unless stackable)\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" if (selected.maxStacks <= 1) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" available.Remove(selected);\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" return choices.ToArray();\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" /// Select a random upgrade weighted by rarity.\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" /// Common: 70%, Rare: 25%, Epic: 5%\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" private UpgradeData SelectWeightedUpgrade(List upgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" if (upgrades == null || upgrades.Count == 0) return null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" // Build weighted list\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" List<(UpgradeData upgrade, float weight)> weighted = new List<(UpgradeData, float)>();\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" float totalWeight = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" foreach (UpgradeData upgrade in upgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" float weight = GetRarityWeight(upgrade.rarity);\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" weighted.Add((upgrade, weight));\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" totalWeight += weight;\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" // Random selection\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" float roll = Random.Range(0f, totalWeight);\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" float cumulative = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" foreach (var (upgrade, weight) in weighted) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" cumulative += weight;\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" if (roll <= cumulative) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" return upgrade;\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" // Fallback (shouldn't happen)\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" return upgrades[Random.Range(0, upgrades.Count)];\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" /// Get spawn weight for a rarity tier.\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" private float GetRarityWeight(UpgradeRarity rarity) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" return rarity switch {\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" UpgradeRarity.Common => 70f,\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" UpgradeRarity.Rare => 25f,\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" UpgradeRarity.Epic => 5f,\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" _ => 50f\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" };\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" // DEBUG / UTILITY\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":" /// Log all available upgrades and their status for debugging.\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":322,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":322},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_Ki3dZxk8QTrc75dY39uD3jg3__vscode-1774363162407":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/UpgradeManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" [ContextMenu(\"Debug: Log Upgrade Status\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" public void DebugLogUpgradeStatus() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" PlayerController player = PlayerController.Instance;\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" if (player == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" GameEvents.DebugWarning(\"No player found for upgrade status check.\", DebugCategory.Upgrades);\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" GameEvents.DebugLog(\"=== UPGRADE STATUS ===\", DebugCategory.Upgrades);\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" if (allUpgrades == null || allUpgrades.Length == 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" GameEvents.DebugLog(\"No upgrades in pool!\", DebugCategory.Upgrades);\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" foreach (UpgradeData upgrade in allUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" if (upgrade == null) continue;\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" bool canTake = CanTakeUpgrade(upgrade, player.stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" string reason = GetUpgradeBlockedReason(upgrade, player.stats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" string status = canTake ? \"AVAILABLE\" : $\"BLOCKED - {reason}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" GameEvents.DebugLog($\"[{upgrade.rarity}] {upgrade.upgradeName}: {status}\", DebugCategory.Upgrades );\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_rhH5Pi8lPchjk0ONQJR33wm7__vscode-1774363162408":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene.unity","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene.unity.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene.unity","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene.unity.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_doHQiWn4S3Vox2FVoGeRr9k4__vscode-1774363162409":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"iFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"23 matches (maxResults capped at 200)","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":372},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnPlayerDied += onPlayerDiedHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":18,"character":8},{"line":18,"character":34}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":372},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":373},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled += onEnemyKilledHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":19,"character":8},{"line":19,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":373},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":374},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp += onLevelUpHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":20,"character":8},{"line":20,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":374},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":375},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnXPChanged += onXPChangedHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":21,"character":8},{"line":21,"character":33}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":375},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":376},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled += OnEnemyDied;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":[{"line":75,"character":8},{"line":75,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":376},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":377},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRunEnded += ShowGameOver;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},"range":[{"line":21,"character":8},{"line":21,"character":32}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":377},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":378},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnHealthChanged += UpdateHealthBar;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"range":[{"line":10,"character":8},{"line":10,"character":37}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":378},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":379},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp += UpdateLevelDisplay;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},"range":[{"line":8,"character":8},{"line":8,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":379},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":380},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnXPChanged += UpdateXPBar;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},"range":[{"line":10,"character":8},{"line":10,"character":33}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":380},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":381},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp += OnLevelUp;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"range":[{"line":62,"character":8},{"line":62,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":381},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":382},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnHealthChanged += UpdateHealth;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":70,"character":8},{"line":70,"character":37}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":382},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":383},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnXPChanged += UpdateXP;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":71,"character":8},{"line":71,"character":33}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":383},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":384},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp += UpdateLevel;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":72,"character":8},{"line":72,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":384},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":385},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRoomEntered += UpdateRoom;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":73,"character":8},{"line":73,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":385},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":386},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRoomCleared += OnRoomCleared;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":74,"character":8},{"line":74,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":386},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":387},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled += OnEnemyKilled;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":75,"character":8},{"line":75,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":387},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":388},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnPlayerMovementInput += HandleMovementInput;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":[{"line":69,"character":8},{"line":69,"character":43}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":388},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":389},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnPlayerAimDirectionChanged += HandleAimDirectionChanged;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":[{"line":70,"character":8},{"line":70,"character":49}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":389},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":390},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyDamaged += HandleEnemyDamaged;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":[{"line":197,"character":8},{"line":197,"character":36}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":390},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":391},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled += HandleEnemyKilled;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":[{"line":198,"character":8},{"line":198,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":391},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":392},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRunEnded += HandleRunEnded;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":[{"line":15,"character":8},{"line":15,"character":32}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":392},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":393},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRunStarted += HandleRunStarted;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":[{"line":16,"character":8},{"line":16,"character":34}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":393},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":394},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled += AwardXP;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":[{"line":32,"character":8},{"line":32,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":394},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4}],"props":{},"references":[]}}}]},"call_kAQyUrAxNqC1RFW1YO2YavNC__vscode-1774363162410":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"iFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"23 matches (maxResults capped at 200)","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":441},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnXPChanged -= UpdateXPBar;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/XPBarUI.cs","scheme":"file"},"range":[{"line":14,"character":8},{"line":14,"character":33}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":441},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":442},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp -= UpdateLevelDisplay;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/LevelDisplayUI.cs","scheme":"file"},"range":[{"line":12,"character":8},{"line":12,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":442},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":443},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnHealthChanged -= UpdateHealth;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":81,"character":8},{"line":81,"character":37}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":443},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":444},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnXPChanged -= UpdateXP;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":82,"character":8},{"line":82,"character":33}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":444},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":445},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp -= UpdateLevel;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":83,"character":8},{"line":83,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":445},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":446},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRoomEntered -= UpdateRoom;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":84,"character":8},{"line":84,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":446},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":447},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRoomCleared -= OnRoomCleared;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":85,"character":8},{"line":85,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":447},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":448},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled -= OnEnemyKilled;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"range":[{"line":86,"character":8},{"line":86,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":448},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":449},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnHealthChanged -= UpdateHealthBar;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"range":[{"line":14,"character":8},{"line":14,"character":37}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":449},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":450},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRunEnded -= ShowGameOver;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameOverUI.cs","scheme":"file"},"range":[{"line":33,"character":8},{"line":33,"character":32}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":450},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":451},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled -= OnEnemyDied;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":[{"line":81,"character":8},{"line":81,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":451},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":452},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRunEnded -= HandleRunEnded;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":[{"line":20,"character":8},{"line":20,"character":32}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":452},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":453},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnRunStarted -= HandleRunStarted;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"range":[{"line":21,"character":8},{"line":21,"character":34}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":453},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":454},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp -= OnLevelUp;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerController.cs","scheme":"file"},"range":[{"line":71,"character":8},{"line":71,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":454},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":455},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled -= AwardXP;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":[{"line":37,"character":8},{"line":37,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":455},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":456},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnPlayerDied -= onPlayerDiedHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":26,"character":8},{"line":26,"character":34}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":456},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":457},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled -= onEnemyKilledHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":27,"character":8},{"line":27,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":457},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":458},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnLevelUp -= onLevelUpHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":28,"character":8},{"line":28,"character":31}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":458},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":459},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnXPChanged -= onXPChangedHandler;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Events/EventListener.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Events/EventListener.cs","scheme":"file"},"range":[{"line":29,"character":8},{"line":29,"character":33}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":459},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":460},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnPlayerMovementInput -= HandleMovementInput;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":[{"line":75,"character":8},{"line":75,"character":43}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":460},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":461},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnPlayerAimDirectionChanged -= HandleAimDirectionChanged;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/PlayerAnimation.cs","scheme":"file"},"range":[{"line":76,"character":8},{"line":76,"character":49}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":461},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":462},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyDamaged -= HandleEnemyDamaged;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":[{"line":203,"character":8},{"line":203,"character":36}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":462},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":463},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" GameEvents.OnEnemyKilled -= HandleEnemyKilled;","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Player/Attack%20Types/FlamethrowerAttack.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Player/Attack Types/FlamethrowerAttack.cs","scheme":"file"},"range":[{"line":204,"character":8},{"line":204,"character":35}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":463},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4}],"props":{},"references":[]}}}]},"call_dj0MaHsQIx2EA2JGLaZ4OEdl__vscode-1774363162411":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"iFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"8 matches","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":510},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" var spawner = FindFirstObjectByType();","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":[{"line":342,"character":22},{"line":342,"character":43}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":510},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":511},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" var xpManager = FindFirstObjectByType(); // Assuming it exists","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":[{"line":400,"character":24},{"line":400,"character":45}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":511},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":512},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" var spawner = FindFirstObjectByType();","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/DebugMenuUI.cs","scheme":"file"},"range":[{"line":522,"character":22},{"line":522,"character":43}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":512},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":513},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" var playerController = FindFirstObjectByType();","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"range":[{"line":58,"character":35},{"line":58,"character":56}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":513},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":514},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" var player = UnityEngine.Object.FindFirstObjectByType();","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/ChaseMovement.cs","scheme":"file"},"range":[{"line":47,"character":44},{"line":47,"character":65}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":514},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":515},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" playerHealth = FindFirstObjectByType()?.GetComponent();","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/XPManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/XPManager.cs","scheme":"file"},"range":[{"line":27,"character":23},{"line":27,"character":44}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":515},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":516},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" var enemy = FindFirstObjectByType();","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectDebugger.cs","scheme":"file"},"range":[{"line":90,"character":24},{"line":90,"character":45}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":516},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4},{"type":1,"ctor":2,"ctorName":"$we","children":[{"type":1,"ctor":2,"ctorName":"n","children":[{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":517},{"type":1,"ctor":2,"ctorName":"Zrt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":1000,"text":" var player = UnityEngine.Object.FindFirstObjectByType();","references":[],"lineBreakBefore":true}],"props":{"priority":1000},"references":[]},{"type":2,"priority":1,"text":"\n","lineBreakBefore":false}],"props":{"flexGrow":1,"priority":1},"references":[{"anchor":{"uri":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Enemies/Movement/FlyingMovement.cs","scheme":"file"},"range":[{"line":46,"character":44},{"line":46,"character":65}]},"options":{"isFromTool":true}}]},{"type":1,"ctor":2,"ctorName":"","children":[{"type":2,"priority":9007199254740991,"text":"","lineBreakBefore":false}],"props":{},"references":[],"keepWithId":517},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false}],"props":{},"references":[]}],"props":{"passPriority":true},"references":[],"flags":4}],"props":{},"references":[]}}}]},"call_03ywX3STzm8spgR72s6MYwXn__vscode-1774363162412":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"mU","children":[{"type":2,"priority":9007199254740991,"text":"No errors found.","lineBreakBefore":false}],"props":{},"references":[]}}}]},"call_6kgFuSlsZSWudYKxDXbmydi7__vscode-1774363162413":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Managers/GameManager.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Managers/GameManager.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":"using Unity.VectorGraphics;\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":"using UnityEngine.SceneManagement;\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":"public class GameManager : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" public GameState gameState;\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" [SerializeField] private string gameSceneName = \"TestScene\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" void Awake()\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" // Do not reload scene here to avoid infinite loop\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" gameState = GameState.Playing;\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" void OnEnable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" GameEvents.OnRunEnded += HandleRunEnded;\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" GameEvents.OnRunStarted += HandleRunStarted;\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" void OnDisable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" GameEvents.OnRunEnded -= HandleRunEnded;\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" GameEvents.OnRunStarted -= HandleRunStarted;\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" void HandleRunStarted()\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" // Handle run start logic here\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" Time.timeScale = 1f; // Resume the game\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" gameState = GameState.Playing;\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" SceneManager.LoadScene(SceneManager.GetActiveScene().name);\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" void HandleRunEnded(bool isVictory)\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" // Handle game over logic here\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" Time.timeScale = 0f; // Pause the game\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" if (!isVictory)\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" GameEvents.DebugLog(\"Game Over! Displaying Game Over Screen...\", DebugCategory.General);\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" Time.timeScale = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" // Show Game Over UI\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" gameState = GameState.GameOver;\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" GameEvents.DebugLog(\"Run Completed! Displaying Victory Screen...\", DebugCategory.General);\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" // Show Victory UI\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" gameState = GameState.Victory;\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_j1WqhQl11XI0r9E54s4IOJXq__vscode-1774363162414":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/WaveSpawner.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":"using System.Collections;\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":"public class WaveSpawner : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" [Header(\"Wave Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" [SerializeField] private GameObject scorpionPrefab;\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" // add other enemy prefabs here\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" [SerializeField] private int baseEnemiesPerWave = 4;\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" [SerializeField] private float enemyIncreasePerWave = 1.3f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" [SerializeField] private float timeBetweenWaves = 3f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":" [Header(\"Spawn Area\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" [SerializeField] private float spawnRadius = 12f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" [SerializeField] private float minSpawnDistance = 6f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" [SerializeField] private Vector2 arenaSize = new Vector2(25f, 20f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" [Header(\"Spawn Patterns\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" [Tooltip(\"How much of the circle around player is blocked for spawning (0-1). 0.5 = enemies spawn in 180° arc\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" [SerializeField] [Range(0.2f, 0.8f)] private float safeArcRatio = 0.35f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" [Tooltip(\"Chance to spawn from arena edges instead of around player\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" [SerializeField] [Range(0f, 1f)] private float edgeSpawnChance = 0.6f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" [Tooltip(\"Chance to spawn enemies in clusters\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" [SerializeField] [Range(0f, 1f)] private float clusterChance = 0.25f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" [SerializeField] private float clusterRadius = 2f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" [SerializeField] private int clusterSize = 3;\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" [Header(\"Pooling\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" [SerializeField] private int initialPoolSize = 50;\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" [SerializeField] private int maxPoolSize = 200;\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" [Header(\"References\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" [SerializeField] private Transform player;\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" private int currentWave = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" private int enemiesAlive = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" private bool waveInProgress = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" // Cached values to avoid allocations\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" private WaitForSeconds waveWait;\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" private string poolId;\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" // Spawn pattern state\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" private float currentSafeAngle; // Direction player is facing/moving - we spawn AWAY from this\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" // Public Accessors for Debug UI\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" public int CurrentWave => currentWave;\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" public int EnemiesAlive => enemiesAlive;\n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" public bool WaveInProgress => waveInProgress;\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" /// Debug setter for the debug menu.\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":" public void DebugSetWave(int wave) => currentWave = Mathf.Max(0, wave);\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":" void Start()\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" if (player == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" var playerController = FindFirstObjectByType();\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" if (playerController != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" player = playerController.transform;\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" // Pre-cache wait to avoid GC allocation each wave\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" waveWait = new WaitForSeconds(timeBetweenWaves);\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" // Initialize enemy pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" if (scorpionPrefab != null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" poolId = scorpionPrefab.name;\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" PoolingSystem.Instance?.CreatePool(scorpionPrefab, initialPoolSize, true, maxPoolSize);\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" GameEvents.OnEnemyKilled += OnEnemyDied;\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" StartCoroutine(WaveController());\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" void OnDestroy() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" GameEvents.OnEnemyKilled -= OnEnemyDied;\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" private IEnumerator WaveController() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" while (true) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" // Wait between waves (uses cached WaitForSeconds)\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" yield return waveWait;\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" // Start new wave\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" currentWave++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" SpawnWave();\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" // Wait for wave to be cleared\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" while (waveInProgress) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" yield return null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" private void SpawnWave() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" int enemiesToSpawn = Mathf.RoundToInt(baseEnemiesPerWave * Mathf.Pow(enemyIncreasePerWave, currentWave - 1));\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" #if UNITY_EDITOR || DEVELOPMENT_BUILD\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" GameEvents.DebugLog($\"Starting Wave {currentWave}: {enemiesToSpawn} enemies\", DebugCategory.EnemyAI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" #endif\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" waveInProgress = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" // Update safe angle based on player's facing direction\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" UpdateSafeAngle();\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" int i = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" while (i < enemiesToSpawn)\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" // Decide spawn pattern\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" float roll = Random.value;\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" if (roll < clusterChance && i + clusterSize <= enemiesToSpawn)\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" // Spawn a cluster\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" Vector2 clusterCenter = GetSpawnPosition();\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" int actualClusterSize = Random.Range(clusterSize / 2, clusterSize + 1);\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" for (int j = 0; j < actualClusterSize && i < enemiesToSpawn; j++)\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" Vector2 offset = Random.insideUnitCircle * clusterRadius;\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" Vector2 spawnPos = clusterCenter + offset;\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" SpawnEnemy(spawnPos);\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" i++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" // Spawn individual enemy\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" Vector2 spawnPos = GetSpawnPosition();\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" SpawnEnemy(spawnPos);\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" i++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" private void SpawnEnemy(Vector2 position)\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" // Use pooling system instead of Instantiate\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" GameObject enemy = PoolingSystem.Instance?.Get(poolId, position, Quaternion.identity);\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" // Fallback to Instantiate if pooling not available\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" if (enemy == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" GameEvents.DebugLog(\"Pooling system not available or pool empty, instantiating enemy directly.\", DebugCategory.EnemyAI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" Instantiate(scorpionPrefab, (Vector3)position, Quaternion.identity);\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" enemiesAlive++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" private void UpdateSafeAngle()\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" // Try to get player's movement direction or facing direction\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" var playerRb = player.GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" if (playerRb != null && playerRb.linearVelocity.sqrMagnitude > 0.1f)\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" // Player is moving - keep their path clear\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" currentSafeAngle = Mathf.Atan2(playerRb.linearVelocity.y, playerRb.linearVelocity.x) * Mathf.Rad2Deg;\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" // Player is stationary - pick a random safe direction\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" currentSafeAngle = Random.Range(0f, 360f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" private Vector2 GetSpawnPosition()\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" if (Random.value < edgeSpawnChance)\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" return GetEdgeSpawnPosition();\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" return GetArcSpawnPosition();\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" /// Spawn from arena edges (not surrounding player).\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" private Vector2 GetEdgeSpawnPosition()\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" Vector2 arenaCenter = player != null ? (Vector2)player.position : Vector2.zero;\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" // Pick a random edge (0=top, 1=right, 2=bottom, 3=left)\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" int edge = Random.Range(0, 4);\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" float t = Random.value; // Position along edge (0-1)\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" Vector2 spawnPos;\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" float halfWidth = arenaSize.x * 0.5f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" float halfHeight = arenaSize.y * 0.5f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" switch (edge)\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" case 0: // Top\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" spawnPos = new Vector2(Mathf.Lerp(-halfWidth, halfWidth, t), halfHeight);\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" break;\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" case 1: // Right\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" spawnPos = new Vector2(halfWidth, Mathf.Lerp(-halfHeight, halfHeight, t));\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" break;\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" case 2: // Bottom\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" spawnPos = new Vector2(Mathf.Lerp(-halfWidth, halfWidth, t), -halfHeight);\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" break;\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" default: // Left\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" spawnPos = new Vector2(-halfWidth, Mathf.Lerp(-halfHeight, halfHeight, t));\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" break;\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" return arenaCenter + spawnPos;\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" /// Spawn in an arc AWAY from player's safe direction (leaves escape route).\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" private Vector2 GetArcSpawnPosition()\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" // Calculate spawn arc (opposite of safe direction)\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" float spawnArcCenter = currentSafeAngle + 180f; // Opposite direction\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" float arcHalfWidth = (1f - safeArcRatio) * 180f; // How wide the spawn arc is\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" // Random angle within the spawn arc\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" float angle = spawnArcCenter + Random.Range(-arcHalfWidth, arcHalfWidth);\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" angle *= Mathf.Deg2Rad;\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" float distance = Random.Range(minSpawnDistance, spawnRadius);\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" Vector2 offset = new Vector2(\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" Mathf.Cos(angle) * distance,\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" Mathf.Sin(angle) * distance\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" );\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" return (Vector2)player.position + offset;\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" private void OnEnemyDied(Enemy enemy) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" enemiesAlive--;\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" if (enemiesAlive <= 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" waveInProgress = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" #if UNITY_EDITOR || DEVELOPMENT_BUILD\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" GameEvents.DebugLog($\"Wave {currentWave} cleared!\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" #endif\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_LITtlPj8YcnxOaYApWyBOfn7__vscode-1774363162415":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":331,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/PlayerStats.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":331},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":330,"text":"using System;\n","references":[],"lineBreakBefore":true}],"props":{"priority":330},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":329,"text":"using System.Collections.Generic;\n","references":[],"lineBreakBefore":true}],"props":{"priority":329},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":328,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":328},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":327,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":327},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":326,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":326},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":325,"text":"/// Pure C# class that manages all player statistics.\n","references":[],"lineBreakBefore":true}],"props":{"priority":325},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":324,"text":"/// Handles base stats, modifiers from upgrades, and recalculation.\n","references":[],"lineBreakBefore":true}],"props":{"priority":324},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":323,"text":"/// NOT a MonoBehaviour - PlayerController holds an instance of this.\n","references":[],"lineBreakBefore":true}],"props":{"priority":323},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":322,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":322},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":321,"text":"[System.Serializable]\n","references":[],"lineBreakBefore":true}],"props":{"priority":321},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":320,"text":"public class PlayerStats {\n","references":[],"lineBreakBefore":true}],"props":{"priority":320},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":319,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":319},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":318,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":318},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":317,"text":" // BASE STATS (Never change after init)\n","references":[],"lineBreakBefore":true}],"props":{"priority":317},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":316,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":316},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":315,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":315},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":314,"text":" [Header(\"Base Stats\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":314},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":313,"text":" [SerializeField] private float baseMaxHP = 100f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":313},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":312,"text":" [SerializeField] private float baseDamage = 5f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":312},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":311,"text":" [SerializeField] private float baseSpeed = 15f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":311},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":310,"text":" [SerializeField] private float baseAttackSpeed = 1.2f; // Attacks per second\n","references":[],"lineBreakBefore":true}],"props":{"priority":310},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":309,"text":" [SerializeField] private float baseCritChance = 0.08f; // 8%\n","references":[],"lineBreakBefore":true}],"props":{"priority":309},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":308,"text":" [SerializeField] private float baseCritMultiplier = 1.5f; // 1.5x damage\n","references":[],"lineBreakBefore":true}],"props":{"priority":308},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":307,"text":" [SerializeField] private float baseArmor = 5f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":307},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":306,"text":" [SerializeField] private bool debugMode = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":306},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":305,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":305},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":304,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":304},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":303,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":303},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":302,"text":" // CURRENT STATS (Recalculated when upgrades applied)\n","references":[],"lineBreakBefore":true}],"props":{"priority":302},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":301,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":301},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":300,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":300},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":299,"text":" // Health\n","references":[],"lineBreakBefore":true}],"props":{"priority":299},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":298,"text":" public float currentMaxHP { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":298},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":297,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":297},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":296,"text":" // Damage\n","references":[],"lineBreakBefore":true}],"props":{"priority":296},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":295,"text":" public float currentDamage { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":295},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":294,"text":" public float currentCritChance { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":294},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":293,"text":" public float currentCritMultiplier { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":293},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":292,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":292},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":291,"text":" // Speed\n","references":[],"lineBreakBefore":true}],"props":{"priority":291},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":290,"text":" public float currentSpeed { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":290},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":289,"text":" public float currentAttackSpeed { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":289},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":288,"text":" public float currentDashCooldown { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":288},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":287,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":287},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":286,"text":" // Defense\n","references":[],"lineBreakBefore":true}],"props":{"priority":286},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":285,"text":" public float currentArmor { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":285},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":284,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":284},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":283,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":283},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":282,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":282},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":281,"text":" // UPGRADE TRACKING\n","references":[],"lineBreakBefore":true}],"props":{"priority":281},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":280,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":280},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":279,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":279},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":278,"text":" private List appliedUpgrades = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":278},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":277,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":277},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":276,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":276},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":275,"text":" /// Get read-only list of all upgrades applied this run.\n","references":[],"lineBreakBefore":true}],"props":{"priority":275},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":274,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":274},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":273,"text":" public IReadOnlyList AppliedUpgrades => appliedUpgrades.AsReadOnly();\n","references":[],"lineBreakBefore":true}],"props":{"priority":273},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":272,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":272},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":271,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":271},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":270,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":270},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":269,"text":" // CONSTRUCTOR\n","references":[],"lineBreakBefore":true}],"props":{"priority":269},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":268,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":268},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":267,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":267},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":266,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":266},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":265,"text":" /// Initialize stats with default base values.\n","references":[],"lineBreakBefore":true}],"props":{"priority":265},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":264,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":264},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":263,"text":" public PlayerStats() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":263},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":" // Use default base values\n","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":" RecalculateStats();\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":" /// Initialize stats with custom base values (for different characters).\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":" public PlayerStats(float maxHP, float damage, float speed, float attackSpeed) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":" baseMaxHP = maxHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":" baseDamage = damage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":" baseSpeed = speed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" baseAttackSpeed = attackSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" RecalculateStats();\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" // UPGRADE SYSTEM\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" /// Apply an upgrade to the player's stats.\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" /// Automatically recalculates all current stats.\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" public void ApplyUpgrade(UpgradeData upgrade) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" if (upgrade == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" GameEvents.DebugLog(\"Attempted to apply null upgrade\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" // Capture stats before upgrade for comparison\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" string beforeStats = GetStatsDebugString();\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" appliedUpgrades.Add(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" RecalculateStats();\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" // Log upgrade application with before/after comparison\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" GameEvents.DebugLog($\"=== UPGRADE APPLIED ===\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" GameEvents.DebugLog($\"Upgrade: {upgrade.upgradeName} (Type: {upgrade.type})\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":" GameEvents.DebugLog($\"Modifiers: HP+{upgrade.healthBonus} ({upgrade.healthMultiplier:F2}x), DMG+{upgrade.damageBonus} ({upgrade.damageMultiplier:F2}x)\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" GameEvents.DebugLog($\"Speed: {upgrade.speedMultiplier:F2}x, AtkSpd: {upgrade.attackSpeedMultiplier:F2}x, CDR: {upgrade.cooldownReduction:P0}\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" GameEvents.DebugLog($\"Crit: +{upgrade.critChanceBonus:P1} chance, +{upgrade.critDamageBonus:F2}x mult, Armor+{upgrade.armorBonus}\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" GameEvents.DebugLog($\"BEFORE: {beforeStats}\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" GameEvents.DebugLog($\"AFTER: {GetStatsDebugString()}\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" GameEvents.DebugLog($\"Total upgrades applied: {appliedUpgrades.Count}\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" /// Recalculate all current stats based on base stats + all applied upgrades.\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" /// Call this after applying upgrades or changing base stats.\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" private void RecalculateStats() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" // Start with base values\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" currentMaxHP = baseMaxHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" currentDamage = baseDamage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" currentSpeed = baseSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" currentAttackSpeed = baseAttackSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" currentCritChance = baseCritChance;\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" currentCritMultiplier = baseCritMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":" currentArmor = baseArmor;\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" currentDashCooldown = 2f; // Default dash cooldown\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" // Apply all upgrades\n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" foreach (UpgradeData upgrade in appliedUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" ApplyUpgradeModifiers(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" // Clamp values to reasonable ranges\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" currentCritChance = Mathf.Clamp01(currentCritChance); // 0-100%\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" currentSpeed = Mathf.Max(1f, currentSpeed); // Minimum speed\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" currentAttackSpeed = Mathf.Max(0.1f, currentAttackSpeed); // Minimum attack speed\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" currentDashCooldown = Mathf.Max(0.1f, currentDashCooldown); // Minimum cooldown\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" GameEvents.DebugLog($\"Stats recalculated: {GetStatsDebugString()}\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" /// Get a compact debug string of current stats for logging.\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" private string GetStatsDebugString() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" return $\"HP:{currentMaxHP:F0} DMG:{currentDamage:F1} SPD:{currentSpeed:F1} ASPD:{currentAttackSpeed:F2} CRIT:{currentCritChance:P0}/{currentCritMultiplier:F1}x ARM:{currentArmor:F0} DASH:{currentDashCooldown:F2}s\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" /// Apply a single upgrade's modifiers to current stats.\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" private void ApplyUpgradeModifiers(UpgradeData upgrade) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" // Additive bonuses (flat amounts)\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" currentMaxHP += upgrade.healthBonus;\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" currentDamage += upgrade.damageBonus;\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" currentArmor += upgrade.armorBonus;\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" // Multiplicative bonuses (percentages)\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" currentDamage *= upgrade.damageMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" currentSpeed *= upgrade.speedMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" currentAttackSpeed *= upgrade.attackSpeedMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" currentMaxHP *= upgrade.healthMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" // Cooldown reduction (note: reduction, not multiplier)\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" currentDashCooldown *= (1f - upgrade.cooldownReduction);\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" // Crit stats\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" currentCritChance += upgrade.critChanceBonus;\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" currentCritMultiplier += upgrade.critDamageBonus;\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" // RESET SYSTEM (For new runs)\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" /// Reset all stats to base values (use when starting new run).\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" public void ResetStats() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" int previousUpgradeCount = appliedUpgrades.Count;\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" appliedUpgrades.Clear();\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" RecalculateStats();\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" GameEvents.DebugLog($\"=== STATS RESET ===\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" GameEvents.DebugLog($\"Cleared {previousUpgradeCount} upgrades, returned to base values\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" GameEvents.DebugLog($\"Current: {GetStatsDebugString()}\", DebugCategory.PlayerStats);\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" // UTILITY METHODS\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" /// Calculate final damage for an attack, including crit chance.\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" public float CalculateDamage() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" float damage = currentDamage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" // Roll for crit\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" if (UnityEngine.Random.value < currentCritChance) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" damage *= currentCritMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" GameEvents.DebugLog($\"CRIT! Damage: {damage}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" return damage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" /// Calculate damage reduction from armor.\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" /// Formula: Damage Reduction = Armor / (Armor + 100)\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" /// This gives diminishing returns (100 armor = 50% reduction, 200 = 66%, etc.)\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" public float CalculateDamageReduction() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" return currentArmor / (currentArmor + 100f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" /// Apply armor damage reduction to incoming damage.\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" public float ApplyArmorToDamage(float incomingDamage) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" float reduction = CalculateDamageReduction();\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" float finalDamage = incomingDamage * (1f - reduction);\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" return Mathf.Max(1f, finalDamage); // Minimum 1 damage\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" /// Get total number of upgrades applied this run.\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" public int GetUpgradeCount() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" return appliedUpgrades.Count;\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" /// Get number of upgrades of a specific type.\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" public int GetUpgradeCountByType(UpgradeType type) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" int count = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" foreach (UpgradeData upgrade in appliedUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" if (upgrade.type == type) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" count++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" return count;\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" /// Check if player has a specific upgrade.\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" public bool HasUpgrade(UpgradeData upgrade) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" return appliedUpgrades.Contains(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" // DEBUG / SERIALIZATION\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" /// Debug setters for the debug menu. Use with caution - bypasses normal stat calculation.\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" public void DebugSetMaxHP(float value) => currentMaxHP = Mathf.Max(1f, value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" public void DebugSetDamage(float value) => currentDamage = Mathf.Max(0f, value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" public void DebugSetSpeed(float value) => currentSpeed = Mathf.Max(1f, value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" public void DebugSetAttackSpeed(float value) => currentAttackSpeed = Mathf.Max(0.1f, value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" public void DebugSetCritChance(float value) => currentCritChance = Mathf.Clamp01(value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" public void DebugSetCritMultiplier(float value) => currentCritMultiplier = Mathf.Max(1f, value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" public void DebugSetArmor(float value) => currentArmor = Mathf.Max(0f, value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" public void DebugSetDashCooldown(float value) => currentDashCooldown = Mathf.Max(0.1f, value);\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" /// Get a formatted string of all current stats (for debug UI).\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" public string GetStatsString() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" return $\"=== PLAYER STATS ===\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" $\"Max HP: {currentMaxHP:F0}\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" $\"Damage: {currentDamage:F1}\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" $\"Speed: {currentSpeed:F1}\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" $\"Attack Speed: {currentAttackSpeed:F2} attacks/sec\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" $\"Crit Chance: {currentCritChance * 100f:F1}%\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" $\"Crit Multiplier: {currentCritMultiplier:F1}x\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" $\"Armor: {currentArmor:F0} ({CalculateDamageReduction() * 100f:F1}% reduction)\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" $\"Dash Cooldown: {currentDashCooldown:F2}s\\n\" +\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" $\"Upgrades Applied: {appliedUpgrades.Count}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" /// Serialize stats for saving (returns data that can be saved to JSON).\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" public PlayerStatsData Serialize() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" return new PlayerStatsData {\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" appliedUpgradeIDs = appliedUpgrades.ConvertAll(u => u.upgradeID)\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" };\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" /// Deserialize stats from save data (rebuild stats from saved upgrade IDs).\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" public void Deserialize(PlayerStatsData data, List allUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" appliedUpgrades.Clear();\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" // Rebuild upgrades from IDs\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" foreach (string upgradeID in data.appliedUpgradeIDs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" UpgradeData upgrade = allUpgrades.Find(u => u.upgradeID == upgradeID);\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" if (upgrade != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" appliedUpgrades.Add(upgrade);\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" RecalculateStats();\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":"// ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":"// SERIALIZATION DATA CLASS\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"// ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"/// Data structure for saving/loading player stats.\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":"[System.Serializable]\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":"public class PlayerStatsData {\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" public List appliedUpgradeIDs = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":331,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":331},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_UNuLGFvjRPNVhlouavyJipMJ__vscode-1774363162416":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Art/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Art.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Audio/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Audio.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Data/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Data.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Materials.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Prefabs/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Prefabs.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scenes/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scenes.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scripts/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scripts.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"UI/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"UI.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_54gfgwkVQ5DYtx4gGKF9aKdR__vscode-1774363162417":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"Rwe","children":[{"type":2,"priority":9007199254740991,"text":"No files found","lineBreakBefore":false}],"props":{},"references":[]}}}]},"call_livfOw5qGp638egdU14oA8fX__vscode-1774363162418":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"Rwe","children":[{"type":2,"priority":9007199254740991,"text":"No files found","lineBreakBefore":false}],"props":{},"references":[]}}}]},"call_49ALcudiGHzMI3EOJrwq6mgT__vscode-1774363162419":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Enemies/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Enemies.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Player.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"StatusEffects/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"StatusEffects.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Upgrades/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Upgrades.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Weapons.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_RbTxookB5UdDYnHihNC7RswP__vscode-1774363162420":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Camera/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Camera.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Enemies/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Enemies.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Player/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Player.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Projectiles.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"UI.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_tLC7h5CkdytsJnbfYVUJGGqn__vscode-1774363162421":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene.unity","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"GameScene.unity.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene/","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene.unity","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"TestScene.unity.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_567DielUsfJrtDQ6tQ5oyoq6__vscode-1774363162422":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scorpion.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scorpion.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_otv1JtENxOkC2Y5ZKnzhbIjs__vscode-1774363162423":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Adrenaline Surge.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Adrenaline Surge.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Attack Damage 20%.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Attack Damage 20%.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Berserker Rage.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Berserker Rage.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Chain Lightning.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Chain Lightning.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Combat Stimulants.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Combat Stimulants.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Devastating Blows.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Devastating Blows.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Efficient Systems.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Efficient Systems.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Emergency Protocols.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Emergency Protocols.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Executioner.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Executioner.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Exoskeleton.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Exoskeleton.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Explosive Finale.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Explosive Finale.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Extended Magazine.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Extended Magazine.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Glass Cannon.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Glass Cannon.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Heavy Caliber.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Heavy Caliber.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Iron Will.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Iron Will.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Juggernaut.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Juggernaut.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Life Leech.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Life Leech.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Momentum.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Momentum.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Overcharge.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Overcharge.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Precision Strike.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Precision Strike.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Quick Step.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Quick Step.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Reinforced Suit.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Reinforced Suit.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scavenger.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Scavenger.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Second Wind.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Second Wind.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Sharpened Claws.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Sharpened Claws.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Tactical Retreat.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Tactical Retreat.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Thick Skin.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Thick Skin.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Time Dilation Field.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Time Dilation Field.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Trigger Happy.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Trigger Happy.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Venom Rounds.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Venom Rounds.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Vitality Boost.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Vitality Boost.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_BUeIGGcq0jHH0RUlNKqj5x9u__vscode-1774363162424":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"dFt","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Fire.asset","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Fire.asset.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Fire.prefab","references":[],"lineBreakBefore":true}],"props":{},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9007199254740991,"text":"Fire.prefab.meta","references":[],"lineBreakBefore":true}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_AawmdzvbBVtaY13AV1OxAiZ5__vscode-1774363162425":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/EnemyData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/EnemyData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":"public enum EnemyMovementType\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" ChaseMovement,\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" FlyingMovement,\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" SwarmMovement\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":"public enum EnemyAttackType\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" Contact,\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" Ranged\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":"public enum EnemyType\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" Roach,\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" Ant,\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" Spider,\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" Fly,\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" Scorpion\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":"[CreateAssetMenu(menuName = \"Exterminator/EnemyData\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":"public class EnemyData : ScriptableObject {\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" public string enemyName;\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" public float maxHealth;\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" public float moveSpeed;\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" public int XPValue;\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" public float attackDamage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" public float attackCooldown = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" public GameObject prefab;\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" public EnemyMovementType MovementType;\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" public EnemyAttackType AttackType;\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":"/*\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":"Example EnemyData:\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":"Health: 50\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"Speed: 3.5\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":"Damage: 10\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":"XP Value: 15\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"Movement Type: \"Chase\"\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":"Attack Type: \"Contact\"\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":"Attack Cooldown: 1.0s\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":"Detection Range: 69\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":"Model Prefab: RoachModel\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"*/\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_Hx4omLVtQSFeY2vQ2cy1z09V__vscode-1774363162426":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/UpgradeData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":"/// ScriptableObject that defines an upgrade's properties.\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":"/// Create instances in Assets/_Project/Data/Upgrades/\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":"/// Right-click → Create → Game → Upgrade Data\n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":"[CreateAssetMenu(fileName = \"New Upgrade\", menuName = \"Exterminator/Upgrade Data\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":"public class UpgradeData : ScriptableObject {\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" [Header(\"Identification\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" [Tooltip(\"Unique ID for this upgrade (used for saving/loading)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" public string upgradeID;\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" [Tooltip(\"Display name shown to player\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" public string upgradeName;\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" [TextArea(3, 5)]\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" [Tooltip(\"Description shown in upgrade UI\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" public string description;\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" [Tooltip(\"Icon shown in upgrade UI\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" public Sprite icon;\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" [Header(\"Category\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" [Tooltip(\"Power, Defense, or Utility (determines which pool this upgrade appears in)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" public UpgradeType type;\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" [Header(\"Rarity\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" [Tooltip(\"Common, Rare, or Epic (affects spawn chance)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" public UpgradeRarity rarity = UpgradeRarity.Common;\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" // STAT MODIFIERS\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" [Header(\"Health Modifiers\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" [Tooltip(\"Flat HP bonus (e.g., +20 HP)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" public float healthBonus = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" [Tooltip(\"Multiplicative HP bonus (e.g., 1.1 = +10% max HP)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" public float healthMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" [Header(\"Damage Modifiers\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" [Tooltip(\"Flat damage bonus (e.g., +5 damage)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" public float damageBonus = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" [Tooltip(\"Multiplicative damage bonus (e.g., 1.2 = +20% damage)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" public float damageMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" [Tooltip(\"Crit chance increase (e.g., 0.1 = +10% crit chance)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" public float critChanceBonus = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" [Tooltip(\"Crit damage multiplier increase (e.g., 0.5 = crit does +0.5x more damage)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" public float critDamageBonus = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" [Header(\"Speed Modifiers\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" [Tooltip(\"Multiplicative movement speed (e.g., 1.15 = +15% speed)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" public float speedMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" [Tooltip(\"Multiplicative attack speed (e.g., 1.2 = +20% faster attacks)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" public float attackSpeedMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" [Tooltip(\"Cooldown reduction (e.g., 0.2 = -20% cooldowns)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" [Range(0f, 0.5f)]\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" public float cooldownReduction = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" [Header(\"Defense Modifiers\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" [Tooltip(\"Flat armor bonus (e.g., +10 armor)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" public float armorBonus = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" // SPECIAL EFFECTS (Phase 2+)\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" [Header(\"Special Effects (Optional)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" [Tooltip(\"Does this upgrade have a special effect beyond stat changes?\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" public bool hasSpecialEffect = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" [Tooltip(\"ID of special effect to apply (e.g., 'lifesteal', 'pierce', 'explode_on_kill')\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" public string specialEffectID;\n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" [TextArea(2, 3)]\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" [Tooltip(\"Description of special effect (for tooltip)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" public string specialEffectDescription;\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" // RESTRICTIONS (Optional)\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" [Header(\"Restrictions (Optional)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" [Tooltip(\"Maximum times this upgrade can be taken in one run (0 = unlimited)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" public int maxStacks = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" [Tooltip(\"Upgrades that cannot be taken with this one (mutually exclusive)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" public UpgradeData[] conflictingUpgrades;\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" [Tooltip(\"Upgrades required before this can appear\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" public UpgradeData[] requiredUpgrades;\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" // UTILITY METHODS\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" /// Get formatted tooltip text for UI display.\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" public string GetTooltipText() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" string tooltip = $\"{upgradeName}\\n\\n{description}\\n\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" // Add stat changes\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" if (healthBonus > 0) tooltip += $\"+{healthBonus} Max HP\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" if (healthMultiplier != 1f) tooltip += $\"+{(healthMultiplier - 1f) * 100f:F0}% Max HP\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" if (damageBonus > 0) tooltip += $\"+{damageBonus} Damage\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" if (damageMultiplier != 1f) tooltip += $\"+{(damageMultiplier - 1f) * 100f:F0}% Damage\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" if (critChanceBonus > 0) tooltip += $\"+{critChanceBonus * 100f:F0}% Crit Chance\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" if (critDamageBonus > 0) tooltip += $\"+{critDamageBonus * 100f:F0}% Crit Damage\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" if (speedMultiplier != 1f) tooltip += $\"+{(speedMultiplier - 1f) * 100f:F0}% Move Speed\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" if (attackSpeedMultiplier != 1f) tooltip += $\"+{(attackSpeedMultiplier - 1f) * 100f:F0}% Attack Speed\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" if (cooldownReduction > 0) tooltip += $\"-{cooldownReduction * 100f:F0}% Cooldowns\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" if (armorBonus > 0) tooltip += $\"+{armorBonus} Armor\\n\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" // Add special effect description\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" if (hasSpecialEffect && !string.IsNullOrEmpty(specialEffectDescription)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" tooltip += $\"\\n{specialEffectDescription}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" return tooltip;\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" /// Check if this upgrade can be taken (based on restrictions).\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" public bool CanBeTaken(PlayerStats stats) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" // Check max stacks\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" if (maxStacks > 0 && stats.HasUpgrade(this)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" int currentStacks = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" foreach (UpgradeData upgrade in stats.AppliedUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" if (upgrade == this) currentStacks++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" if (currentStacks >= maxStacks) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" // Check conflicting upgrades\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" foreach (UpgradeData conflict in conflictingUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" if (stats.HasUpgrade(conflict)) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" // Check required upgrades\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" foreach (UpgradeData required in requiredUpgrades) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" if (!stats.HasUpgrade(required)) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" return true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" // VALIDATION (Editor only)\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" #if UNITY_EDITOR\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" void OnValidate() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" // Auto-generate ID from name if empty\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" if (string.IsNullOrEmpty(upgradeID)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" upgradeID = name.ToLower().Replace(\" \", \"_\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" // Ensure multipliers are at least 1 (or 0 for reduction)\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" if (damageMultiplier < 0) damageMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" if (speedMultiplier < 0) speedMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" if (attackSpeedMultiplier < 0) attackSpeedMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" if (healthMultiplier < 0) healthMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" #endif\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"// ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":"// ENUMS\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"// ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":"/// Upgrade category (determines when/how it appears in upgrade choices).\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":"public enum UpgradeType {\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" Power, // Damage, attack speed, crit\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" Defense, // HP, armor, resistances\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" Utility // Movement speed, cooldowns, special effects\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":"/// Upgrade rarity (affects spawn chance).\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":"public enum UpgradeRarity {\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" Common, // 70% spawn chance\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" Rare, // 25% spawn chance\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" Epic // 5% spawn chance\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_f2fPPQFnoA5Uwzs7nOBoiK79__vscode-1774363162427":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/WeaponData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/WeaponData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":"[CreateAssetMenu(menuName = \"Exterminator/WeaponData\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":"public class WeaponData : ScriptableObject {\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" public string weaponName;\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_CRoaI5yPfFLCgQCtSE4o02z7__vscode-1774363162428":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Data/StatusEffectData.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":"/// Types of status effects that can be applied to entities.\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":"public enum StatusEffectType {\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" Fire,\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" Ice,\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" Poison,\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" Shock,\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" Bleed\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":"/// ScriptableObject that defines a status effect's properties.\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":"/// Create instances in Assets/_Project/Data/StatusEffects/\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":"/// Right-click → Create → Exterminator → Status Effect Data\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":"[CreateAssetMenu(fileName = \"NewStatusEffect\", menuName = \"Exterminator/Status Effect Data\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":"public class StatusEffectData : ScriptableObject {\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" // IDENTIFICATION\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" [Header(\"Identification\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" [Tooltip(\"The type of status effect\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" private StatusEffectType effectType;\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" [Tooltip(\"Display name for the effect\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" private string effectName;\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" // TIMING\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" [Header(\"Timing\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" [Tooltip(\"How long the effect lasts in seconds\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" private float duration = 5f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" [Tooltip(\"How often the effect ticks (for DoT effects)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" private float tickInterval = 0.5f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" [Tooltip(\"Can this effect stack multiple times?\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" private bool canStack = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" [Tooltip(\"Max stacks if stacking is enabled\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" private int maxStacks = 1;\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" [Tooltip(\"Does applying refresh the duration?\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" private bool refreshDurationOnReapply = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" // DAMAGE OVER TIME\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" [Header(\"Damage Over Time\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" [Tooltip(\"Damage dealt per tick\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" private float damagePerTick = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" // MODIFIERS\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" [Header(\"Movement Modifier\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" [Tooltip(\"Multiplier for movement speed (0.5 = 50% slower, 1.0 = no change)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" [Range(0f, 2f)]\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" private float moveSpeedMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" [Header(\"Damage Modifier\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" [Tooltip(\"Multiplier for damage taken while afflicted\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" [Range(0f, 3f)]\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" private float damageTakenMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" // SPREAD (Fire propagation)\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" [Header(\"Spread (Fire propagation)\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" [Tooltip(\"Can this effect spread to nearby entities?\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" private bool canSpread = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" [Tooltip(\"Radius to check for spread targets\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" private float spreadRadius = 2f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" [Tooltip(\"How long after initial application before spread starts\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" private float spreadDelay = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" [Tooltip(\"How long the spread window lasts\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" private float spreadDuration = 8f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" [Tooltip(\"Interval between spread attempts\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" private float spreadInterval = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" [Tooltip(\"Layer mask for spread targets\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" private LayerMask spreadTargetMask;\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" // VISUAL/AUDIO\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" [Header(\"Visual/Audio\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" [Tooltip(\"VFX prefab to spawn on target when effect is applied\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" private GameObject effectPrefab;\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" [SerializeField]\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" [Tooltip(\"Tint color for the visual effect\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" private Color effectTint = Color.white;\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" // PUBLIC ACCESSORS (Read-Only)\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" public StatusEffectType EffectType => effectType;\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" public string EffectName => effectName;\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" public float Duration => duration;\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" public float TickInterval => tickInterval;\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" public bool CanStack => canStack;\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" public int MaxStacks => maxStacks;\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" public bool RefreshDurationOnReapply => refreshDurationOnReapply;\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" public float DamagePerTick => damagePerTick;\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" public float MoveSpeedMultiplier => moveSpeedMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" public float DamageTakenMultiplier => damageTakenMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" public bool CanSpread => canSpread;\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" public float SpreadRadius => spreadRadius;\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" public float SpreadDelay => spreadDelay;\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" public float SpreadDuration => spreadDuration;\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" public float SpreadInterval => spreadInterval;\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" public LayerMask SpreadTargetMask => spreadTargetMask;\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" public GameObject EffectPrefab => effectPrefab;\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" public Color EffectTint => effectTint;\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_RJeSleph6eG5dfMkSRljBtgF__vscode-1774363162429":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":2,"priority":9007199254740991,"text":"File: `","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"`. Lines ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"1","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" to ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"360","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" (","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"378","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":" lines total): ","lineBreakBefore":false},{"type":2,"priority":9007199254740991,"text":"\n","lineBreakBefore":false},{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":362,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":362},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":361,"text":"using System.Collections.Generic;\n","references":[],"lineBreakBefore":true}],"props":{"priority":361},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":360,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":360},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":359,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":359},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":358,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":358},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":357,"text":"/// Manages active status effects on an entity.\n","references":[],"lineBreakBefore":true}],"props":{"priority":357},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":356,"text":"/// Attach to any entity that can receive status effects (Player, Enemies).\n","references":[],"lineBreakBefore":true}],"props":{"priority":356},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":355,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":355},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":354,"text":"[RequireComponent(typeof(Health))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":354},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":353,"text":"public class StatusEffectController : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":353},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":352,"text":" [Header(\"Configuration\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":352},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":351,"text":" [SerializeField] private StatusResistanceData resistanceData;\n","references":[],"lineBreakBefore":true}],"props":{"priority":351},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":350,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":350},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":349,"text":" [Header(\"Debug\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":349},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":348,"text":" [SerializeField] private bool enableDebugLogs = false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":348},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":347,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":347},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":346,"text":" private Health health;\n","references":[],"lineBreakBefore":true}],"props":{"priority":346},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":345,"text":" private readonly Dictionary activeEffects = new Dictionary();\n","references":[],"lineBreakBefore":true}],"props":{"priority":345},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":344,"text":" private readonly List effectsToRemove = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":344},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":343,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":343},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":342,"text":" // Cached component references for modifiers\n","references":[],"lineBreakBefore":true}],"props":{"priority":342},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":341,"text":" private IMovementModifiable movementComponent;\n","references":[],"lineBreakBefore":true}],"props":{"priority":341},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":340,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":340},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":339,"text":" // Pre-allocated for spread detection\n","references":[],"lineBreakBefore":true}],"props":{"priority":339},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":338,"text":" private const int MAX_SPREAD_HITS = 16;\n","references":[],"lineBreakBefore":true}],"props":{"priority":338},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":337,"text":" private Collider2D[] spreadHitBuffer = new Collider2D[MAX_SPREAD_HITS];\n","references":[],"lineBreakBefore":true}],"props":{"priority":337},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":336,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":336},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":335,"text":" // Aggregate modifiers (recalculated when effects change)\n","references":[],"lineBreakBefore":true}],"props":{"priority":335},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":334,"text":" public float MoveSpeedMultiplier { get; private set; } = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":334},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":333,"text":" public float DamageTakenMultiplier { get; private set; } = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":333},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":332,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":332},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":331,"text":" void Awake() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":331},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":330,"text":" health = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":330},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":329,"text":" movementComponent = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":329},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":328,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":328},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":327,"text":" if (resistanceData != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":327},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":326,"text":" resistanceData.Initialize();\n","references":[],"lineBreakBefore":true}],"props":{"priority":326},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":325,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":325},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":324,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":324},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":323,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":323},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":322,"text":" void Update() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":322},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":321,"text":" // Performance optimization: Early exit if no active effects\n","references":[],"lineBreakBefore":true}],"props":{"priority":321},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":320,"text":" // Critical for maintaining 60 FPS with 2000+ enemies\n","references":[],"lineBreakBefore":true}],"props":{"priority":320},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":319,"text":" if (activeEffects.Count == 0) return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":319},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":318,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":318},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":317,"text":" effectsToRemove.Clear();\n","references":[],"lineBreakBefore":true}],"props":{"priority":317},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":316,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":316},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":315,"text":" foreach (var kvp in activeEffects) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":315},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":314,"text":" var effect = kvp.Value;\n","references":[],"lineBreakBefore":true}],"props":{"priority":314},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":313,"text":" effect.UpdateTick(Time.deltaTime);\n","references":[],"lineBreakBefore":true}],"props":{"priority":313},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":312,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":312},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":311,"text":" // Handle damage ticks\n","references":[],"lineBreakBefore":true}],"props":{"priority":311},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":310,"text":" if (effect.Data.DamagePerTick > 0 && effect.ShouldTick()) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":310},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":309,"text":" float damage = effect.GetTotalDamagePerTick();\n","references":[],"lineBreakBefore":true}],"props":{"priority":309},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":308,"text":" health.TakeDamage(damage, transform.position, Vector2.zero);\n","references":[],"lineBreakBefore":true}],"props":{"priority":308},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":307,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":307},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":306,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":306},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":305,"text":" GameEvents.DebugLog($\"[StatusEffect] {effect.Data.EffectName} dealt {damage} damage to {gameObject.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":305},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":304,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":304},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":303,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":303},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":302,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":302},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":301,"text":" // Handle spread (fire propagation)\n","references":[],"lineBreakBefore":true}],"props":{"priority":301},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":300,"text":" if (effect.ShouldSpread()) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":300},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":299,"text":" TrySpreadEffect(effect);\n","references":[],"lineBreakBefore":true}],"props":{"priority":299},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":298,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":298},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":297,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":297},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":296,"text":" // Mark expired effects for removal\n","references":[],"lineBreakBefore":true}],"props":{"priority":296},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":295,"text":" if (effect.IsExpired) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":295},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":294,"text":" effectsToRemove.Add(kvp.Key);\n","references":[],"lineBreakBefore":true}],"props":{"priority":294},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":293,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":293},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":292,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":292},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":291,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":291},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":290,"text":" // Remove expired effects (do NOT call RemoveEffect, handle cleanup directly here)\n","references":[],"lineBreakBefore":true}],"props":{"priority":290},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":289,"text":" foreach (var type in effectsToRemove) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":289},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":288,"text":" if (activeEffects.TryGetValue(type, out var effect)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":288},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":287,"text":" // Clean up visual - return to pool if possible\n","references":[],"lineBreakBefore":true}],"props":{"priority":287},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":286,"text":" if (effect.VisualInstance != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":286},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":285,"text":" ReturnEffectVisual(effect.VisualInstance);\n","references":[],"lineBreakBefore":true}],"props":{"priority":285},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":284,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":284},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":283,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":283},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":282,"text":" activeEffects.Remove(type);\n","references":[],"lineBreakBefore":true}],"props":{"priority":282},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":281,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":281},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":280,"text":" // Fire event\n","references":[],"lineBreakBefore":true}],"props":{"priority":280},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":279,"text":" GameEvents.OnStatusEffectRemoved?.Invoke(gameObject, effect.Data);\n","references":[],"lineBreakBefore":true}],"props":{"priority":279},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":278,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":278},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":277,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":277},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":276,"text":" GameEvents.DebugLog($\"[StatusEffect] Removed expired {effect.Data.EffectName} from {gameObject.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":276},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":275,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":275},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":274,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":274},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":273,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":273},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":272,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":272},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":271,"text":" // Recalculate modifiers if any effects were removed\n","references":[],"lineBreakBefore":true}],"props":{"priority":271},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":270,"text":" if (effectsToRemove.Count > 0) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":270},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":269,"text":" RecalculateModifiers();\n","references":[],"lineBreakBefore":true}],"props":{"priority":269},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":268,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":268},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":267,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":267},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":266,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":266},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":265,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":265},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":264,"text":" /// Apply a status effect to this entity.\n","references":[],"lineBreakBefore":true}],"props":{"priority":264},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":263,"text":" /// Returns true if the effect was applied, false if immune or resisted.\n","references":[],"lineBreakBefore":true}],"props":{"priority":263},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":" public bool ApplyEffect(StatusEffectData effectData, float durationMultiplier = 1f) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":" if (effectData == null) return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":" // Check immunity\n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":" if (resistanceData != null && resistanceData.IsImmune(effectData.EffectType)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":" GameEvents.DebugLog($\"[StatusEffect] {gameObject.name} is immune to {effectData.EffectName}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":" return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" // Apply resistance to duration\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" float finalDuration = effectData.Duration * durationMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" if (resistanceData != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" finalDuration = resistanceData.ApplyResistance(effectData.EffectType, finalDuration);\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" // Duration reduced to zero means fully resisted\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":" if (finalDuration <= 0f) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" GameEvents.DebugLog($\"[StatusEffect] {gameObject.name} fully resisted {effectData.EffectName}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" return false;\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" // Check if effect already exists\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" if (activeEffects.TryGetValue(effectData.EffectType, out var existingEffect)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" if (effectData.CanStack && existingEffect.CurrentStacks < effectData.MaxStacks) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" existingEffect.AddStack();\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" GameEvents.DebugLog($\"[StatusEffect] {effectData.EffectName} stacked on {gameObject.name} (x{existingEffect.CurrentStacks})\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" if (effectData.RefreshDurationOnReapply) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" existingEffect.RefreshDuration();\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" RecalculateModifiers();\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":" return true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" // Create new effect\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" var newEffect = new ActiveStatusEffect(effectData, finalDuration);\n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" activeEffects[effectData.EffectType] = newEffect;\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" // Spawn visual effect using pooling\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" if (effectData.EffectPrefab != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" SpawnEffectVisual(newEffect);\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" else if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" GameEvents.DebugLog($\"[StatusEffect] No EffectPrefab assigned for {effectData.EffectName}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" RecalculateModifiers();\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" // Fire event for UI/audio\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" GameEvents.OnStatusEffectApplied?.Invoke(gameObject, effectData);\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" GameEvents.DebugLog($\"[StatusEffect] Applied {effectData.EffectName} to {gameObject.name} for {finalDuration}s\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" return true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" /// Remove a specific status effect.\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" public void RemoveEffect(StatusEffectType type) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":" if (activeEffects.TryGetValue(type, out var effect)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" // Clean up visual - return to pool if possible\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":" if (effect.VisualInstance != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" ReturnEffectVisual(effect.VisualInstance);\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" activeEffects.Remove(type);\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" RecalculateModifiers();\n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" // Fire event\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" GameEvents.OnStatusEffectRemoved?.Invoke(gameObject, effect.Data);\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" GameEvents.DebugLog($\"[StatusEffect] Removed {effect.Data.EffectName} from {gameObject.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" /// Remove all active status effects.\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" public void ClearAllEffects() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" foreach (var effect in activeEffects.Values) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" if (effect.VisualInstance != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" ReturnEffectVisual(effect.VisualInstance);\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" activeEffects.Clear();\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" RecalculateModifiers();\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":" /// Check if entity has a specific effect type active.\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" public bool HasEffect(StatusEffectType type) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":" return activeEffects.ContainsKey(type);\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" /// Get the active effect of a specific type, or null if not present.\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":" public ActiveStatusEffect GetEffect(StatusEffectType type) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" return activeEffects.TryGetValue(type, out var effect) ? effect : null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":" private void TrySpreadEffect(ActiveStatusEffect effect) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" if (effect.Data.SpreadTargetMask.value == 0) return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" int hitCount = Physics2D.OverlapCircleNonAlloc(\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" transform.position, \n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" effect.Data.SpreadRadius, \n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":" spreadHitBuffer, \n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" effect.Data.SpreadTargetMask\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" );\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" for (int i = 0; i < hitCount; i++) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" var col = spreadHitBuffer[i];\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" if (col == null || col.gameObject == gameObject) continue;\n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" var targetController = col.GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" if (targetController != null && !targetController.HasEffect(effect.Data.EffectType)) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" targetController.ApplyEffect(effect.Data);\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" GameEvents.DebugLog($\"[StatusEffect] {effect.Data.EffectName} spread from {gameObject.name} to {col.gameObject.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" private void RecalculateModifiers() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" MoveSpeedMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" DamageTakenMultiplier = 1f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" foreach (var effect in activeEffects.Values) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":" MoveSpeedMultiplier *= effect.Data.MoveSpeedMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" DamageTakenMultiplier *= effect.Data.DamageTakenMultiplier;\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" // Notify movement component of change\n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" movementComponent?.SetSpeedMultiplier(MoveSpeedMultiplier);\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" /// Spawn a visual effect from pool and attach it to follow this entity.\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":" private void SpawnEffectVisual(ActiveStatusEffect effect) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" // Validate prefab reference\n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" if (effect.Data.EffectPrefab == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" GameEvents.DebugLog($\"[StatusEffect] EffectPrefab is NULL for {effect.Data.EffectName}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" GameObject vfxInstance = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" GameEvents.DebugLog($\"[StatusEffect] SpawnEffectVisual called for {effect.Data.EffectName} on {gameObject.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" GameEvents.DebugLog($\"[StatusEffect] EffectPrefab: {effect.Data.EffectPrefab.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" // Try to use pooling system\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" if (PoolingSystem.Instance != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" GameEvents.DebugLog($\"[StatusEffect] PoolingSystem found, attempting to get VFX from pool\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":" vfxInstance = PoolingSystem.Instance.Get(\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" effect.Data.EffectPrefab,\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" transform.position,\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" Quaternion.identity\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" );\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" GameEvents.DebugLog($\"[StatusEffect] PoolingSystem.Get returned: {vfxInstance?.name ?? \"NULL\"}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" catch (System.Exception ex) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" GameEvents.DebugLog($\"[StatusEffect] PoolingSystem.Get failed: {ex.Message}. Falling back to Instantiate.\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" vfxInstance = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" // Fallback to instantiate if pooling failed or not available\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" if (vfxInstance == null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" GameEvents.DebugLog($\"[StatusEffect] Using Instantiate as fallback\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":" vfxInstance = Instantiate(effect.Data.EffectPrefab, transform.position, Quaternion.identity);\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" GameEvents.DebugLog($\"[StatusEffect] Instantiate returned: {vfxInstance?.name ?? \"NULL\"}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" if (vfxInstance != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" GameEvents.DebugLog($\"[StatusEffect] VFX instance created successfully: {vfxInstance.name}, active: {vfxInstance.activeSelf}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" // Set up VFX to follow this entity\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" var vfxComponent = vfxInstance.GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":" if (vfxComponent != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" GameEvents.DebugLog($\"[StatusEffect] StatusEffectVFX component found, setting follow target to {gameObject.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" vfxComponent.SetFollowTarget(transform);\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":" else {\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" // Fallback: parent it if no VFX component\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" GameEvents.DebugLog($\"[StatusEffect] VFX prefab missing StatusEffectVFX component, using parent fallback\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" vfxInstance.transform.SetParent(transform);\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" vfxInstance.transform.localPosition = Vector3.zero;\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" effect.VisualInstance = vfxInstance;\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" GameEvents.DebugLog($\"[StatusEffect] ✓ Successfully spawned and attached VFX for {effect.Data.EffectName} on {gameObject.name}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" else {\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" GameEvents.DebugLog($\"[StatusEffect] ✗ FAILED to spawn VFX - vfxInstance is NULL!\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" /// Return a visual effect to the pool.\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" private void ReturnEffectVisual(GameObject vfxInstance) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" if (vfxInstance == null) return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" try {\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" // Stop following before returning to pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" var vfxComponent = vfxInstance.GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" if (vfxComponent != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" vfxComponent.StopFollowing();\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" // Try to return to pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":" if (PoolingSystem.Instance != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":362,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":362},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_HsyqvBQob5fZE9wmUpuk8Sy5__vscode-1774363162430":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":317,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/PoolingSystem.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":317},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":316,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":316},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":315,"text":"using System.Collections.Generic;\n","references":[],"lineBreakBefore":true}],"props":{"priority":315},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":314,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":314},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":313,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":313},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":312,"text":"/// High-performance object pooling system to eliminate GC allocations from Instantiate/Destroy.\n","references":[],"lineBreakBefore":true}],"props":{"priority":312},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":311,"text":"/// Use for frequently spawned objects like enemies, projectiles, VFX, etc.\n","references":[],"lineBreakBefore":true}],"props":{"priority":311},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":310,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":310},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":309,"text":"public class PoolingSystem : MonoBehaviour\n","references":[],"lineBreakBefore":true}],"props":{"priority":309},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":308,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":308},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":307,"text":" public static PoolingSystem Instance { get; private set; }\n","references":[],"lineBreakBefore":true}],"props":{"priority":307},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":306,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":306},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":305,"text":" [System.Serializable]\n","references":[],"lineBreakBefore":true}],"props":{"priority":305},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":304,"text":" public class PoolConfig\n","references":[],"lineBreakBefore":true}],"props":{"priority":304},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":303,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":303},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":302,"text":" public string poolId;\n","references":[],"lineBreakBefore":true}],"props":{"priority":302},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":301,"text":" public GameObject prefab;\n","references":[],"lineBreakBefore":true}],"props":{"priority":301},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":300,"text":" public int initialSize = 20;\n","references":[],"lineBreakBefore":true}],"props":{"priority":300},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":299,"text":" public bool expandable = true;\n","references":[],"lineBreakBefore":true}],"props":{"priority":299},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":298,"text":" public int maxSize = 100;\n","references":[],"lineBreakBefore":true}],"props":{"priority":298},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":297,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":297},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":296,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":296},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":295,"text":" [Header(\"Pool Configurations\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":295},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":294,"text":" [SerializeField] private List poolConfigs = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":294},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":293,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":293},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":292,"text":" // Dictionaries for fast lookup\n","references":[],"lineBreakBefore":true}],"props":{"priority":292},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":291,"text":" private Dictionary> pools = new Dictionary>();\n","references":[],"lineBreakBefore":true}],"props":{"priority":291},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":290,"text":" private Dictionary configLookup = new Dictionary();\n","references":[],"lineBreakBefore":true}],"props":{"priority":290},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":289,"text":" private Dictionary activeObjectToPoolId = new Dictionary();\n","references":[],"lineBreakBefore":true}],"props":{"priority":289},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":288,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":288},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":287,"text":" // Pre-allocated list to avoid allocations during pool operations\n","references":[],"lineBreakBefore":true}],"props":{"priority":287},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":286,"text":" private Transform poolContainer;\n","references":[],"lineBreakBefore":true}],"props":{"priority":286},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":285,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":285},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":284,"text":" void Awake()\n","references":[],"lineBreakBefore":true}],"props":{"priority":284},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":283,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":283},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":282,"text":" if (Instance != null && Instance != this)\n","references":[],"lineBreakBefore":true}],"props":{"priority":282},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":281,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":281},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":280,"text":" Destroy(gameObject);\n","references":[],"lineBreakBefore":true}],"props":{"priority":280},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":279,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":279},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":278,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":278},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":277,"text":" Instance = this;\n","references":[],"lineBreakBefore":true}],"props":{"priority":277},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":276,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":276},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":275,"text":" poolContainer = new GameObject(\"PooledObjects\").transform;\n","references":[],"lineBreakBefore":true}],"props":{"priority":275},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":274,"text":" poolContainer.SetParent(transform);\n","references":[],"lineBreakBefore":true}],"props":{"priority":274},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":273,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":273},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":272,"text":" InitializePools();\n","references":[],"lineBreakBefore":true}],"props":{"priority":272},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":271,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":271},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":270,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":270},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":269,"text":" void OnDestroy()\n","references":[],"lineBreakBefore":true}],"props":{"priority":269},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":268,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":268},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":267,"text":" if (Instance == this)\n","references":[],"lineBreakBefore":true}],"props":{"priority":267},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":266,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":266},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":265,"text":" Instance = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":265},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":264,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":264},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":263,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":263},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":" private void InitializePools()\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":" foreach (var config in poolConfigs)\n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":" CreatePool(config);\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":" /// Create a new pool from configuration\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" public void CreatePool(PoolConfig config)\n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" if (pools.ContainsKey(config.poolId))\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" GameEvents.DebugWarning($\"Pool '{config.poolId}' already exists.\", DebugCategory.Pooling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" pools[config.poolId] = new Queue(config.initialSize);\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" configLookup[config.poolId] = config;\n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" // Pre-warm the pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" for (int i = 0; i < config.initialSize; i++)\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" CreatePooledObject(config);\n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" /// Create a pool at runtime from a prefab (auto-generates ID from prefab name)\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" public void CreatePool(GameObject prefab, int initialSize = 20, bool expandable = true, int maxSize = 100)\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" string poolId = prefab.name;\n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" if (pools.ContainsKey(poolId))\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" return; // Pool already exists\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" var config = new PoolConfig\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" poolId = poolId,\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" prefab = prefab,\n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" initialSize = initialSize,\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" expandable = expandable,\n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" maxSize = maxSize\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" };\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" CreatePool(config);\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" private GameObject CreatePooledObject(PoolConfig config)\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" GameObject obj = Instantiate(config.prefab, poolContainer);\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" obj.SetActive(false);\n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" pools[config.poolId].Enqueue(obj);\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" return obj;\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":203},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":202,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":202},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":201,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":201},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":200,"text":" /// Get an object from the pool. Returns null if pool doesn't exist or is empty and non-expandable.\n","references":[],"lineBreakBefore":true}],"props":{"priority":200},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":199,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":199},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":198,"text":" public GameObject Get(string poolId, Vector3 position, Quaternion rotation)\n","references":[],"lineBreakBefore":true}],"props":{"priority":198},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":197,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":197},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":196,"text":" if (!pools.TryGetValue(poolId, out var pool))\n","references":[],"lineBreakBefore":true}],"props":{"priority":196},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":195,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":195},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":194,"text":" GameEvents.DebugWarning($\"Pool '{poolId}' not found. Create it first or use Instantiate.\", DebugCategory.Pooling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":194},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":193,"text":" return null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":193},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":192,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":192},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":191,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":191},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":190,"text":" GameObject obj = null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":190},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":189,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":189},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":188,"text":" // Try to get a valid object from the pool, skipping any destroyed ones\n","references":[],"lineBreakBefore":true}],"props":{"priority":188},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":187,"text":" while (pool.Count > 0 && obj == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":187},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":186,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":186},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":185,"text":" obj = pool.Dequeue();\n","references":[],"lineBreakBefore":true}],"props":{"priority":185},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":184,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":184},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":183,"text":" // Check if object was destroyed (can happen if prefab reference was lost)\n","references":[],"lineBreakBefore":true}],"props":{"priority":183},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":182,"text":" if (obj == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":182},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":181,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":181},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":180,"text":" GameEvents.DebugWarning($\"Found destroyed object in pool '{poolId}', skipping...\", DebugCategory.Pooling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":180},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":179,"text":" continue;\n","references":[],"lineBreakBefore":true}],"props":{"priority":179},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":178,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":178},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":177,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":177},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":176,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":176},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":175,"text":" // If no valid object found, create a new one\n","references":[],"lineBreakBefore":true}],"props":{"priority":175},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":174,"text":" if (obj == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":174},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":173,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":173},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":172,"text":" var config = configLookup[poolId];\n","references":[],"lineBreakBefore":true}],"props":{"priority":172},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":171,"text":" if (!config.expandable)\n","references":[],"lineBreakBefore":true}],"props":{"priority":171},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":170,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":170},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":169,"text":" GameEvents.DebugWarning($\"Pool '{poolId}' is empty and not expandable.\", DebugCategory.Pooling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":169},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":168,"text":" return null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":168},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":167,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":167},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":166,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":166},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":165,"text":" // Check max size limit\n","references":[],"lineBreakBefore":true}],"props":{"priority":165},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":164,"text":" if (activeObjectToPoolId.Count >= config.maxSize)\n","references":[],"lineBreakBefore":true}],"props":{"priority":164},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":163,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":163},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":162,"text":" GameEvents.DebugWarning($\"Pool '{poolId}' reached max size ({config.maxSize}).\", DebugCategory.Pooling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":162},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":161,"text":" return null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":161},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":160,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":160},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":159,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":159},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":158,"text":" obj = Instantiate(config.prefab);\n","references":[],"lineBreakBefore":true}],"props":{"priority":158},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":157,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":157},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":156,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":156},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":155,"text":" if (obj == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":155},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":154,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":154},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":153,"text":" GameEvents.DebugWarning($\"Failed to get object from pool '{poolId}' - object is null!\", DebugCategory.Pooling);\n","references":[],"lineBreakBefore":true}],"props":{"priority":153},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":152,"text":" return null;\n","references":[],"lineBreakBefore":true}],"props":{"priority":152},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":151,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":151},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":150,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":150},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":149,"text":" obj.transform.SetPositionAndRotation(position, rotation);\n","references":[],"lineBreakBefore":true}],"props":{"priority":149},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":148,"text":" obj.transform.SetParent(null);\n","references":[],"lineBreakBefore":true}],"props":{"priority":148},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":147,"text":" obj.SetActive(true);\n","references":[],"lineBreakBefore":true}],"props":{"priority":147},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":146,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":146},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":145,"text":" activeObjectToPoolId[obj] = poolId;\n","references":[],"lineBreakBefore":true}],"props":{"priority":145},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":144,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":144},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":143,"text":" // Notify the object it was spawned from pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":143},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":142,"text":" var poolable = obj.GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":142},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":141,"text":" poolable?.OnSpawnFromPool();\n","references":[],"lineBreakBefore":true}],"props":{"priority":141},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":140,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":140},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":139,"text":" return obj;\n","references":[],"lineBreakBefore":true}],"props":{"priority":139},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":138,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":138},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":137,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":137},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":136,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":136},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":135,"text":" /// Get an object from the pool using Vector2 position (for 2D games)\n","references":[],"lineBreakBefore":true}],"props":{"priority":135},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":134,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":134},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":133,"text":" public GameObject Get(string poolId, Vector2 position, Quaternion rotation)\n","references":[],"lineBreakBefore":true}],"props":{"priority":133},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":132,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":132},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":131,"text":" return Get(poolId, new Vector3(position.x, position.y, 0f), rotation);\n","references":[],"lineBreakBefore":true}],"props":{"priority":131},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":130,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":130},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":129,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":129},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":128,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":128},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":127,"text":" /// Get an object from pool using prefab name as ID\n","references":[],"lineBreakBefore":true}],"props":{"priority":127},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":126,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":126},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":125,"text":" public GameObject Get(GameObject prefab, Vector3 position, Quaternion rotation)\n","references":[],"lineBreakBefore":true}],"props":{"priority":125},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":124,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":124},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":123,"text":" string poolId = prefab.name;\n","references":[],"lineBreakBefore":true}],"props":{"priority":123},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":122,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":122},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":121,"text":" // Auto-create pool if it doesn't exist\n","references":[],"lineBreakBefore":true}],"props":{"priority":121},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":120,"text":" if (!pools.ContainsKey(poolId))\n","references":[],"lineBreakBefore":true}],"props":{"priority":120},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":119,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":119},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":118,"text":" CreatePool(prefab);\n","references":[],"lineBreakBefore":true}],"props":{"priority":118},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":117,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":117},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":116,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":116},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":115,"text":" return Get(poolId, position, rotation);\n","references":[],"lineBreakBefore":true}],"props":{"priority":115},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":114,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":114},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":113,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":113},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":112,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":112},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":111,"text":" /// Get an object from pool using prefab name as ID and Vector2 position (for 2D games)\n","references":[],"lineBreakBefore":true}],"props":{"priority":111},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":110,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":110},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":109,"text":" public GameObject Get(GameObject prefab, Vector2 position, Quaternion rotation)\n","references":[],"lineBreakBefore":true}],"props":{"priority":109},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":108,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":108},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":107,"text":" return Get(prefab, new Vector3(position.x, position.y, 0f), rotation);\n","references":[],"lineBreakBefore":true}],"props":{"priority":107},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":106,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":106},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":105,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":105},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":104,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":104},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":103,"text":" /// Return an object to its pool. Much faster than Destroy().\n","references":[],"lineBreakBefore":true}],"props":{"priority":103},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":102,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":102},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":101,"text":" public void Return(GameObject obj)\n","references":[],"lineBreakBefore":true}],"props":{"priority":101},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":100,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":100},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":99,"text":" if (obj == null) return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":99},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":98,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":98},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":97,"text":" if (!activeObjectToPoolId.TryGetValue(obj, out string poolId))\n","references":[],"lineBreakBefore":true}],"props":{"priority":97},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":96,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":96},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":95,"text":" // Object wasn't from a pool, destroy it normally\n","references":[],"lineBreakBefore":true}],"props":{"priority":95},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":94,"text":" Destroy(obj);\n","references":[],"lineBreakBefore":true}],"props":{"priority":94},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":93,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":93},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":92,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":92},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":91,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":91},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":90,"text":" // Notify the object it's being returned\n","references":[],"lineBreakBefore":true}],"props":{"priority":90},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":89,"text":" var poolable = obj.GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":89},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":88,"text":" poolable?.OnReturnToPool();\n","references":[],"lineBreakBefore":true}],"props":{"priority":88},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":87,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":87},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":86,"text":" activeObjectToPoolId.Remove(obj);\n","references":[],"lineBreakBefore":true}],"props":{"priority":86},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":85,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":85},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":84,"text":" obj.SetActive(false);\n","references":[],"lineBreakBefore":true}],"props":{"priority":84},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":83,"text":" obj.transform.SetParent(poolContainer);\n","references":[],"lineBreakBefore":true}],"props":{"priority":83},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":82,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":82},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":81,"text":" if (pools.TryGetValue(poolId, out var pool))\n","references":[],"lineBreakBefore":true}],"props":{"priority":81},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":80,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":80},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":79,"text":" pool.Enqueue(obj);\n","references":[],"lineBreakBefore":true}],"props":{"priority":79},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":78,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":78},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":77,"text":" else\n","references":[],"lineBreakBefore":true}],"props":{"priority":77},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":76,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":76},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":75,"text":" // Pool was destroyed, destroy the object\n","references":[],"lineBreakBefore":true}],"props":{"priority":75},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":74,"text":" Destroy(obj);\n","references":[],"lineBreakBefore":true}],"props":{"priority":74},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":73,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":73},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":72,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":72},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":71,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":71},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":70,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":70},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":69,"text":" /// Return all active objects to their pools\n","references":[],"lineBreakBefore":true}],"props":{"priority":69},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":68,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":68},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":67,"text":" public void ReturnAll()\n","references":[],"lineBreakBefore":true}],"props":{"priority":67},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":66,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":66},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":65,"text":" // Copy keys to avoid modification during iteration\n","references":[],"lineBreakBefore":true}],"props":{"priority":65},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":64,"text":" var activeObjects = new List(activeObjectToPoolId.Keys);\n","references":[],"lineBreakBefore":true}],"props":{"priority":64},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":63,"text":" foreach (var obj in activeObjects)\n","references":[],"lineBreakBefore":true}],"props":{"priority":63},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":62,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":62},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":61,"text":" Return(obj);\n","references":[],"lineBreakBefore":true}],"props":{"priority":61},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":60,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":60},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":59,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":59},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":58,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":58},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":57,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":57},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":56,"text":" /// Return all active objects of a specific pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":56},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":55,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":55},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":54,"text":" public void ReturnAll(string poolId)\n","references":[],"lineBreakBefore":true}],"props":{"priority":54},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":53,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":53},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":52,"text":" var toReturn = new List();\n","references":[],"lineBreakBefore":true}],"props":{"priority":52},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":51,"text":" foreach (var kvp in activeObjectToPoolId)\n","references":[],"lineBreakBefore":true}],"props":{"priority":51},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":50,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":50},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":49,"text":" if (kvp.Value == poolId)\n","references":[],"lineBreakBefore":true}],"props":{"priority":49},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":48,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":48},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":47,"text":" toReturn.Add(kvp.Key);\n","references":[],"lineBreakBefore":true}],"props":{"priority":47},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":46,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":46},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":45,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":45},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":44,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":44},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":43,"text":" foreach (var obj in toReturn)\n","references":[],"lineBreakBefore":true}],"props":{"priority":43},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":42,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":42},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":41,"text":" Return(obj);\n","references":[],"lineBreakBefore":true}],"props":{"priority":41},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":40,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":40},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":" /// Get stats for debugging\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":" public (int available, int active) GetPoolStats(string poolId)\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" if (!pools.TryGetValue(poolId, out var pool))\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":" return (0, 0);\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" int active = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":" foreach (var kvp in activeObjectToPoolId)\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" if (kvp.Value == poolId) active++;\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" return (pool.Count, active);\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" /// Check if a pool exists\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" /// \n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" public bool HasPool(string poolId) => pools.ContainsKey(poolId);\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":"/// Interface for pooled objects to receive spawn/return callbacks\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":"public interface IPoolable\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" /// Called when object is retrieved from pool and activated\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" void OnSpawnFromPool();\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" /// Called when object is being returned to pool\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" void OnReturnToPool();\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":317,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":317},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_OKJBtEqI8RzTQE717nbSpjyP__vscode-1774363162431":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/Systems/StatusEffects/StatusEffectController.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" PoolingSystem.Instance.Return(vfxInstance);\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" else {\n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" // Fallback to destroy if no pooling system\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" Destroy(vfxInstance);\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" catch (System.Exception ex) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" if (enableDebugLogs) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" GameEvents.DebugLog($\"[StatusEffect] Error returning VFX to pool: {ex.Message}\", DebugCategory.Combat);\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" void OnDisable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" ClearAllEffects();\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_PQQk6pTA6EEKsswpSDUdP5ta__vscode-1774363162432":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/HealthBarUI.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":39},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":38,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":38},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":37,"text":"using UnityEngine.UI;\n","references":[],"lineBreakBefore":true}],"props":{"priority":37},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":36,"text":"using TMPro;\n","references":[],"lineBreakBefore":true}],"props":{"priority":36},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":35,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":35},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":34,"text":"public class HealthBarUI : MonoBehaviour {\n","references":[],"lineBreakBefore":true}],"props":{"priority":34},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":33,"text":" [Header(\"References\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":33},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":32,"text":" [SerializeField] private Image fillImage;\n","references":[],"lineBreakBefore":true}],"props":{"priority":32},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":31,"text":" [SerializeField] private TextMeshProUGUI healthText; // Optional\n","references":[],"lineBreakBefore":true}],"props":{"priority":31},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":30,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":30},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":29,"text":" void OnEnable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":29},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":28,"text":" GameEvents.OnHealthChanged += UpdateHealthBar;\n","references":[],"lineBreakBefore":true}],"props":{"priority":28},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":27,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":27},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":26,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":26},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":25,"text":" void OnDisable() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":25},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":24,"text":" GameEvents.OnHealthChanged -= UpdateHealthBar;\n","references":[],"lineBreakBefore":true}],"props":{"priority":24},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":23,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":23},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":22,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":22},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":21,"text":" void Start() {\n","references":[],"lineBreakBefore":true}],"props":{"priority":21},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":20,"text":" // Initialize with current values\n","references":[],"lineBreakBefore":true}],"props":{"priority":20},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":19,"text":" if (PlayerController.Instance != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":19},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":18,"text":" Health playerHealth;\n","references":[],"lineBreakBefore":true}],"props":{"priority":18},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":17,"text":" PlayerController.Instance.GetHealth(out playerHealth); \n","references":[],"lineBreakBefore":true}],"props":{"priority":17},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":16,"text":" UpdateHealthBar(playerHealth.CurrentHP, playerHealth.MaxHP);\n","references":[],"lineBreakBefore":true}],"props":{"priority":16},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":15,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":15},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":14,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":14},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":13,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":13},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":12,"text":" private void UpdateHealthBar(float currentHP, float maxHP) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":12},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":11,"text":" if (fillImage != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":11},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":10,"text":" float fillAmount = (float)currentHP / maxHP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":10},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":9,"text":" fillImage.fillAmount = fillAmount;\n","references":[],"lineBreakBefore":true}],"props":{"priority":9},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":8,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":8},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":7,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":7},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":6,"text":" if (healthText != null) {\n","references":[],"lineBreakBefore":true}],"props":{"priority":6},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":5,"text":" healthText.text = $\"{currentHP} / {maxHP}\";\n","references":[],"lineBreakBefore":true}],"props":{"priority":5},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":4,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":4},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":3,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":3},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":2,"text":"}\n","references":[],"lineBreakBefore":true}],"props":{"priority":2},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":39,"text":"```","references":[],"lineBreakBefore":true}],"props":{"priority":39},"references":[]}],"props":{},"references":[]}],"props":{},"references":[]}}}]},"call_H9JZZU8laVAbJ6tMvBQHFKcI__vscode-1774363162433":{"$mid":20,"content":[{"$mid":23,"value":{"node":{"type":1,"ctor":2,"ctorName":"oxe","children":[{"type":1,"ctor":2,"ctorName":"tn","children":[{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":305,"text":"```csharp\n","references":[{"anchor":{"$mid":1,"fsPath":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","external":"file:///home/breadway/Documents/Hazard%20Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","path":"/home/breadway/Documents/Hazard Pay/Assets/_Project/Scripts/UI/GameplayHUDController.cs","scheme":"file"},"options":{"isFromTool":true}}],"lineBreakBefore":true}],"props":{"priority":305},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":304,"text":"using UnityEngine;\n","references":[],"lineBreakBefore":true}],"props":{"priority":304},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":303,"text":"using UnityEngine.UIElements;\n","references":[],"lineBreakBefore":true}],"props":{"priority":303},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":302,"text":"\n","references":[],"lineBreakBefore":true}],"props":{"priority":302},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":301,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":301},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":300,"text":"/// Controls the main gameplay HUD using UI Toolkit.\n","references":[],"lineBreakBefore":true}],"props":{"priority":300},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":299,"text":"/// Subscribes to GameEvents to update health, XP, level, etc.\n","references":[],"lineBreakBefore":true}],"props":{"priority":299},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":298,"text":"/// Theme: Industrial \"Company Safety Manual\" style.\n","references":[],"lineBreakBefore":true}],"props":{"priority":298},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":297,"text":"/// \n","references":[],"lineBreakBefore":true}],"props":{"priority":297},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":296,"text":"[RequireComponent(typeof(UIDocument))]\n","references":[],"lineBreakBefore":true}],"props":{"priority":296},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":295,"text":"public class GameplayHUDController : MonoBehaviour\n","references":[],"lineBreakBefore":true}],"props":{"priority":295},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":294,"text":"{\n","references":[],"lineBreakBefore":true}],"props":{"priority":294},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":293,"text":" [Header(\"References\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":293},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":292,"text":" [SerializeField] private UIDocument uiDocument;\n","references":[],"lineBreakBefore":true}],"props":{"priority":292},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":291,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":291},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":290,"text":" [Header(\"Settings\")]\n","references":[],"lineBreakBefore":true}],"props":{"priority":290},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":289,"text":" [SerializeField] private float lowHealthThreshold = 0.3f; // 30% HP = low health warning\n","references":[],"lineBreakBefore":true}],"props":{"priority":289},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":288,"text":" [SerializeField] private float notificationDuration = 2f; // How long notifications stay visible\n","references":[],"lineBreakBefore":true}],"props":{"priority":288},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":287,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":287},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":286,"text":" // UI Element References\n","references":[],"lineBreakBefore":true}],"props":{"priority":286},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":285,"text":" private VisualElement root;\n","references":[],"lineBreakBefore":true}],"props":{"priority":285},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":284,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":284},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":283,"text":" // Health Bar\n","references":[],"lineBreakBefore":true}],"props":{"priority":283},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":282,"text":" private VisualElement healthBarFill;\n","references":[],"lineBreakBefore":true}],"props":{"priority":282},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":281,"text":" private Label healthText;\n","references":[],"lineBreakBefore":true}],"props":{"priority":281},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":280,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":280},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":279,"text":" // XP Bar\n","references":[],"lineBreakBefore":true}],"props":{"priority":279},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":278,"text":" private VisualElement xpBarFill;\n","references":[],"lineBreakBefore":true}],"props":{"priority":278},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":277,"text":" private Label xpText;\n","references":[],"lineBreakBefore":true}],"props":{"priority":277},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":276,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":276},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":275,"text":" // Level Display\n","references":[],"lineBreakBefore":true}],"props":{"priority":275},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":274,"text":" private Label levelValue;\n","references":[],"lineBreakBefore":true}],"props":{"priority":274},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":273,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":273},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":272,"text":" // Room Info\n","references":[],"lineBreakBefore":true}],"props":{"priority":272},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":271,"text":" private Label roomValue;\n","references":[],"lineBreakBefore":true}],"props":{"priority":271},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":270,"text":" private Label enemiesValue;\n","references":[],"lineBreakBefore":true}],"props":{"priority":270},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":269,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":269},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":268,"text":" // Notification\n","references":[],"lineBreakBefore":true}],"props":{"priority":268},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":267,"text":" private VisualElement notificationPanel;\n","references":[],"lineBreakBefore":true}],"props":{"priority":267},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":266,"text":" private Label notificationText;\n","references":[],"lineBreakBefore":true}],"props":{"priority":266},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":265,"text":" private float notificationTimer = 0f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":265},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":264,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":264},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":263,"text":" // Cached Values\n","references":[],"lineBreakBefore":true}],"props":{"priority":263},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":262,"text":" private float currentHealth = 100f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":262},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":261,"text":" private float maxHealth = 100f;\n","references":[],"lineBreakBefore":true}],"props":{"priority":261},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":260,"text":" private int currentXP = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":260},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":259,"text":" private int requiredXP = 100;\n","references":[],"lineBreakBefore":true}],"props":{"priority":259},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":258,"text":" private int currentLevel = 1;\n","references":[],"lineBreakBefore":true}],"props":{"priority":258},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":257,"text":" private int currentRoom = 1;\n","references":[],"lineBreakBefore":true}],"props":{"priority":257},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":256,"text":" private int enemiesRemaining = 0;\n","references":[],"lineBreakBefore":true}],"props":{"priority":256},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":255,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":255},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":254,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":254},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":253,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":253},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":252,"text":" // INITIALIZATION\n","references":[],"lineBreakBefore":true}],"props":{"priority":252},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":251,"text":" // ========================================\n","references":[],"lineBreakBefore":true}],"props":{"priority":251},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":250,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":250},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":249,"text":" void Awake()\n","references":[],"lineBreakBefore":true}],"props":{"priority":249},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":248,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":248},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":247,"text":" // Auto-assign if not set\n","references":[],"lineBreakBefore":true}],"props":{"priority":247},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":246,"text":" if (uiDocument == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":246},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":245,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":245},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":244,"text":" uiDocument = GetComponent();\n","references":[],"lineBreakBefore":true}],"props":{"priority":244},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":243,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":243},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":242,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":242},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":241,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":241},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":240,"text":" void OnEnable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":240},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":239,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":239},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":238,"text":" // Wait one frame for UI to be fully initialized\n","references":[],"lineBreakBefore":true}],"props":{"priority":238},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":237,"text":" Invoke(nameof(InitializeUI), 0.1f);\n","references":[],"lineBreakBefore":true}],"props":{"priority":237},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":236,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":236},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":235,"text":" // Subscribe to events\n","references":[],"lineBreakBefore":true}],"props":{"priority":235},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":234,"text":" GameEvents.OnHealthChanged += UpdateHealth;\n","references":[],"lineBreakBefore":true}],"props":{"priority":234},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":233,"text":" GameEvents.OnXPChanged += UpdateXP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":233},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":232,"text":" GameEvents.OnLevelUp += UpdateLevel;\n","references":[],"lineBreakBefore":true}],"props":{"priority":232},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":231,"text":" GameEvents.OnRoomEntered += UpdateRoom;\n","references":[],"lineBreakBefore":true}],"props":{"priority":231},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":230,"text":" GameEvents.OnRoomCleared += OnRoomCleared;\n","references":[],"lineBreakBefore":true}],"props":{"priority":230},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":229,"text":" GameEvents.OnEnemyKilled += OnEnemyKilled;\n","references":[],"lineBreakBefore":true}],"props":{"priority":229},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":228,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":228},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":227,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":227},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":226,"text":" void OnDisable()\n","references":[],"lineBreakBefore":true}],"props":{"priority":226},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":225,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":225},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":224,"text":" // Unsubscribe from events\n","references":[],"lineBreakBefore":true}],"props":{"priority":224},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":223,"text":" GameEvents.OnHealthChanged -= UpdateHealth;\n","references":[],"lineBreakBefore":true}],"props":{"priority":223},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":222,"text":" GameEvents.OnXPChanged -= UpdateXP;\n","references":[],"lineBreakBefore":true}],"props":{"priority":222},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":221,"text":" GameEvents.OnLevelUp -= UpdateLevel;\n","references":[],"lineBreakBefore":true}],"props":{"priority":221},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":220,"text":" GameEvents.OnRoomEntered -= UpdateRoom;\n","references":[],"lineBreakBefore":true}],"props":{"priority":220},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":219,"text":" GameEvents.OnRoomCleared -= OnRoomCleared;\n","references":[],"lineBreakBefore":true}],"props":{"priority":219},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":218,"text":" GameEvents.OnEnemyKilled -= OnEnemyKilled;\n","references":[],"lineBreakBefore":true}],"props":{"priority":218},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":217,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":217},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":216,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":216},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":215,"text":" void InitializeUI()\n","references":[],"lineBreakBefore":true}],"props":{"priority":215},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":214,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":214},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":213,"text":" if (uiDocument == null || uiDocument.rootVisualElement == null)\n","references":[],"lineBreakBefore":true}],"props":{"priority":213},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":212,"text":" {\n","references":[],"lineBreakBefore":true}],"props":{"priority":212},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":211,"text":" GameEvents.DebugLog(\"GameplayHUDController: UIDocument or root element is null!\", DebugCategory.UI);\n","references":[],"lineBreakBefore":true}],"props":{"priority":211},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":210,"text":" return;\n","references":[],"lineBreakBefore":true}],"props":{"priority":210},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":209,"text":" }\n","references":[],"lineBreakBefore":true}],"props":{"priority":209},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":208,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":208},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":207,"text":" root = uiDocument.rootVisualElement;\n","references":[],"lineBreakBefore":true}],"props":{"priority":207},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":206,"text":" \n","references":[],"lineBreakBefore":true}],"props":{"priority":206},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":205,"text":" // Get references to UI elements\n","references":[],"lineBreakBefore":true}],"props":{"priority":205},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":204,"text":" healthBarFill = root.Q(\"health-bar-fill\");\n","references":[],"lineBreakBefore":true}],"props":{"priority":204},"references":[]},{"type":1,"ctor":2,"ctorName":"sBe","children":[{"type":2,"priority":203,"text":" healthText = root.Q