Implement basic structure for combat system and refactor code

This commit is contained in:
2026-07-03 13:14:36 +02:00
parent 754f81eb4c
commit d98d34ec3f
78 changed files with 1212 additions and 13 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7b840cced864976439f43974b1e498d3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+1
View File
@@ -0,0 +1 @@
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7ec233d275778bf44b6acde2fd9a0cc2
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+1
View File
@@ -0,0 +1 @@
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e9c67aa99a5854f4f9d58ccc64ed036c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+1
View File
@@ -0,0 +1 @@
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c51fb03ac0aab7a4aa1e2b0a87f051a9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 59b9870361cbdec4b9419c57a3ff71df
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+20
View File
@@ -0,0 +1,20 @@
using KernelPanic.Data;
namespace KernelPanic.Combat
{
/// <summary>
/// Represents one runtime card and its per-combat mutable state.
/// </summary>
public sealed class CardInstance
{
public CardInstance(CardDefinition definition)
{
Definition = definition;
}
public CardDefinition Definition { get; }
public int TemporaryCostDelta { get; set; }
public bool IsBroken { get; set; }
public bool IsLocked { get; set; }
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c05e61a09404ee046a6771f8ac75803c
+21
View File
@@ -0,0 +1,21 @@
using System.Collections.Generic;
namespace KernelPanic.Combat
{
/// <summary>
/// Carries runtime combat references needed by card effects during resolution.
/// </summary>
public sealed class CombatContext
{
public CombatContext(CombatantState source, IReadOnlyList<CombatantState> targets, CombatManager combatManager)
{
Source = source;
Targets = targets;
CombatManager = combatManager;
}
public CombatantState Source { get; }
public IReadOnlyList<CombatantState> Targets { get; }
public CombatManager CombatManager { get; }
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2eed81ad20b42a447858691a49666804
+56
View File
@@ -0,0 +1,56 @@
using KernelPanic.Core;
using UnityEngine;
namespace KernelPanic.Combat
{
/// <summary>
/// Owns the combat turn phase state machine and coordinates combat lifecycle transitions.
/// </summary>
public sealed class CombatManager : MonoBehaviour
{
[SerializeField] private TurnPhase currentPhase = TurnPhase.Boot;
public TurnPhase CurrentPhase => currentPhase;
public void StartCombat()
{
SetPhase(TurnPhase.Boot);
}
public void AdvancePhase()
{
TurnPhase nextPhase = GetNextPhase(currentPhase);
SetPhase(nextPhase);
}
public void EndPlayerTurn()
{
SetPhase(TurnPhase.Interpret);
}
private void SetPhase(TurnPhase nextPhase)
{
TurnPhase previousPhase = currentPhase;
currentPhase = nextPhase;
GameEvents.RaisePhaseChanged(new PhaseChangedEvent(previousPhase, nextPhase));
EnterPhase(nextPhase);
}
private static TurnPhase GetNextPhase(TurnPhase phase)
{
return phase switch
{
TurnPhase.Boot => TurnPhase.Allocate,
TurnPhase.Allocate => TurnPhase.Execute,
TurnPhase.Execute => TurnPhase.Interpret,
TurnPhase.Interpret => TurnPhase.EnemyProcess,
TurnPhase.EnemyProcess => TurnPhase.GarbageCollection,
_ => TurnPhase.Allocate
};
}
private void EnterPhase(TurnPhase phase)
{
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 9f87432412de1ee46bf7d4c9c530d4c6
+28
View File
@@ -0,0 +1,28 @@
using System.Collections.Generic;
using KernelPanic.Core;
namespace KernelPanic.Combat
{
/// <summary>
/// Stores mutable combat stats and statuses for a player or enemy.
/// </summary>
public sealed class CombatantState
{
private readonly Dictionary<StatusType, int> activeStatuses = new();
public CombatantState(int maxUptime, int ram, int cycles)
{
MaxUptime = maxUptime;
CurrentUptime = maxUptime;
Ram = ram;
Cycles = cycles;
}
public int CurrentUptime { get; set; }
public int MaxUptime { get; set; }
public int Shield { get; set; }
public int Ram { get; set; }
public int Cycles { get; set; }
public IReadOnlyDictionary<StatusType, int> ActiveStatuses => activeStatuses;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 93b1080022652b542903e204d36a64f8
+49
View File
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
namespace KernelPanic.Combat
{
/// <summary>
/// Manages draw, discard, and exhaust piles for a combat deck.
/// </summary>
public sealed class DeckController
{
private readonly List<CardInstance> drawPile = new();
private readonly List<CardInstance> discardPile = new();
private readonly List<CardInstance> exhaustPile = new();
public IReadOnlyList<CardInstance> DrawPile => drawPile;
public IReadOnlyList<CardInstance> DiscardPile => discardPile;
public IReadOnlyList<CardInstance> ExhaustPile => exhaustPile;
public void Initialize(IEnumerable<CardInstance> cards)
{
throw new NotImplementedException();
}
public IReadOnlyList<CardInstance> Draw(int count)
{
throw new NotImplementedException();
}
public void Discard(CardInstance card)
{
throw new NotImplementedException();
}
public void Exhaust(CardInstance card)
{
throw new NotImplementedException();
}
public void ShuffleDrawPile()
{
throw new NotImplementedException();
}
public void ReshuffleDiscardIntoDraw()
{
throw new NotImplementedException();
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 6683933e853af334ba19e658b13c878d
+41
View File
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
namespace KernelPanic.Combat
{
/// <summary>
/// Manages cards currently held in hand with a RAM-based capacity.
/// </summary>
public sealed class HandController
{
private readonly List<CardInstance> cards = new();
public HandController(int ramCapacity)
{
RamCapacity = ramCapacity;
}
public int RamCapacity { get; private set; }
public IReadOnlyList<CardInstance> Cards => cards;
public bool CanAdd(CardInstance card)
{
throw new NotImplementedException();
}
public void Add(CardInstance card)
{
throw new NotImplementedException();
}
public bool Remove(CardInstance card)
{
throw new NotImplementedException();
}
public void Clear()
{
throw new NotImplementedException();
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bece1c6fddc2c63489bf129bf6295a31
+10
View File
@@ -0,0 +1,10 @@
namespace KernelPanic.Combat
{
/// <summary>
/// Represents a runtime card effect that can apply itself to a combat context.
/// </summary>
public interface ICardEffect
{
void Execute(CombatContext context);
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 886be8d59396e5e488eea3ea58445fb4
+11
View File
@@ -0,0 +1,11 @@
namespace KernelPanic.Combat
{
/// <summary>
/// Provides a common contract for card resolution tracks.
/// </summary>
public interface IResolutionTrack
{
void Enqueue(CardInstance card);
void Resolve(CombatContext context);
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5d296d1160df6d747adaeec9ef68c710
+30
View File
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
namespace KernelPanic.Combat
{
/// <summary>
/// Stores played cards in FIFO order for resolution during the Interpret phase.
/// </summary>
public sealed class InterpreterQueue : IResolutionTrack
{
private readonly Queue<CardInstance> queuedCards = new();
public int Count => queuedCards.Count;
public void Enqueue(CardInstance card)
{
throw new NotImplementedException();
}
public void Resolve(CombatContext context)
{
throw new NotImplementedException();
}
public void Clear()
{
throw new NotImplementedException();
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 13c99cf765e7e8b48a58afbacc8a5440
+30
View File
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
namespace KernelPanic.Combat
{
/// <summary>
/// Stores played cards in LIFO order until explicitly force-evaluated.
/// </summary>
public sealed class LazyStack : IResolutionTrack
{
private readonly Stack<CardInstance> stackedCards = new();
public int Count => stackedCards.Count;
public void Enqueue(CardInstance card)
{
throw new NotImplementedException();
}
public void Resolve(CombatContext context)
{
throw new NotImplementedException();
}
public void ForceEvaluate(CombatContext context)
{
throw new NotImplementedException();
}
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 556859e6fac10a24bb4a60165fd82157
+20
View File
@@ -0,0 +1,20 @@
using System;
namespace KernelPanic.Combat
{
/// <summary>
/// Resolves cards immediately when they are added to the native track.
/// </summary>
public sealed class NativeTrack : IResolutionTrack
{
public void Enqueue(CardInstance card)
{
throw new NotImplementedException();
}
public void Resolve(CombatContext context)
{
throw new NotImplementedException();
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b662e4e1a38b1554084a063fd3d415e2
@@ -0,0 +1,26 @@
using System;
using KernelPanic.Core;
namespace KernelPanic.Combat
{
/// <summary>
/// Applies, ticks, and expires status effects on a combatant.
/// </summary>
public sealed class StatusEffectController
{
public void Apply(CombatantState target, StatusType statusType, int stacks)
{
throw new NotImplementedException();
}
public void Tick(CombatantState target)
{
throw new NotImplementedException();
}
public void Expire(CombatantState target, StatusType statusType)
{
throw new NotImplementedException();
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5f91b8d9171889f4996bb3106d97f1f6
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d51c41fa71b1068438855f64f946cc57
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+140
View File
@@ -0,0 +1,140 @@
using System;
using KernelPanic.Combat;
namespace KernelPanic.Core
{
/// <summary>
/// Provides runtime events for gameplay systems that need to observe combat and run milestones.
/// </summary>
public static class GameEvents
{
public static event Action<CardPlayedEvent> CardPlayed;
public static event Action<CardResolvedEvent> CardResolved;
public static event Action<PhaseChangedEvent> PhaseChanged;
public static event Action<DamageDealtEvent> DamageDealt;
public static event Action<WaveClearedEvent> WaveCleared;
public static event Action<RunEndedEvent> RunEnded;
public static void RaiseCardPlayed(CardPlayedEvent payload)
{
CardPlayed?.Invoke(payload);
}
public static void RaiseCardResolved(CardResolvedEvent payload)
{
CardResolved?.Invoke(payload);
}
public static void RaisePhaseChanged(PhaseChangedEvent payload)
{
PhaseChanged?.Invoke(payload);
}
public static void RaiseDamageDealt(DamageDealtEvent payload)
{
DamageDealt?.Invoke(payload);
}
public static void RaiseWaveCleared(WaveClearedEvent payload)
{
WaveCleared?.Invoke(payload);
}
public static void RaiseRunEnded(RunEndedEvent payload)
{
RunEnded?.Invoke(payload);
}
}
/// <summary>
/// Describes a card that entered a resolution track.
/// </summary>
public readonly struct CardPlayedEvent
{
public CardPlayedEvent(CardInstance card, ResolutionTrack track)
{
Card = card;
Track = track;
}
public CardInstance Card { get; }
public ResolutionTrack Track { get; }
}
/// <summary>
/// Describes a card whose effects finished resolving.
/// </summary>
public readonly struct CardResolvedEvent
{
public CardResolvedEvent(CardInstance card, ResolutionTrack track)
{
Card = card;
Track = track;
}
public CardInstance Card { get; }
public ResolutionTrack Track { get; }
}
/// <summary>
/// Describes a transition between combat phases.
/// </summary>
public readonly struct PhaseChangedEvent
{
public PhaseChangedEvent(TurnPhase previousPhase, TurnPhase nextPhase)
{
PreviousPhase = previousPhase;
NextPhase = nextPhase;
}
public TurnPhase PreviousPhase { get; }
public TurnPhase NextPhase { get; }
}
/// <summary>
/// Describes damage applied from one combatant to another.
/// </summary>
public readonly struct DamageDealtEvent
{
public DamageDealtEvent(CombatantState source, CombatantState target, int amount, Language language)
{
Source = source;
Target = target;
Amount = amount;
Language = language;
}
public CombatantState Source { get; }
public CombatantState Target { get; }
public int Amount { get; }
public Language Language { get; }
}
/// <summary>
/// Describes a completed enemy wave.
/// </summary>
public readonly struct WaveClearedEvent
{
public WaveClearedEvent(int waveNumber)
{
WaveNumber = waveNumber;
}
public int WaveNumber { get; }
}
/// <summary>
/// Describes the end of a run and its earned meta currency.
/// </summary>
public readonly struct RunEndedEvent
{
public RunEndedEvent(bool playerDied, int entropyEarned)
{
PlayerDied = playerDied;
EntropyEarned = entropyEarned;
}
public bool PlayerDied { get; }
public int EntropyEarned { get; }
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: cf446c6fd7627294c9e2aa23c9b576e7
+21
View File
@@ -0,0 +1,21 @@
namespace KernelPanic.Core
{
/// <summary>
/// Identifies a programming language used as a card damage type.
/// </summary>
public enum Language
{
C,
CPlusPlus,
Rust,
Python,
JavaScript,
TypeScript,
Haskell,
Assembly,
Java,
Go,
Ruby,
PHP
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c06078e18f184c84cab3579c0e562dbe
+13
View File
@@ -0,0 +1,13 @@
namespace KernelPanic.Core
{
/// <summary>
/// Describes the rarity tier of cards and rewards.
/// </summary>
public enum Rarity
{
Common,
Rare,
Epic,
Legendary
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 542a3f97e8074ed428fd7019177f221b
+12
View File
@@ -0,0 +1,12 @@
namespace KernelPanic.Core
{
/// <summary>
/// Identifies the combat resolution track a card uses when played.
/// </summary>
public enum ResolutionTrack
{
Native,
InterpreterQueue,
LazyStack
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3b76dcac6b8cae447bb9079460692238
+15
View File
@@ -0,0 +1,15 @@
namespace KernelPanic.Core
{
/// <summary>
/// Identifies a combat status effect category.
/// </summary>
public enum StatusType
{
Segfault,
MemoryLeak,
RaceCondition,
Deprecated,
DependencyError,
Deadlock
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: cbdd46dffec613346ae6191f18a94225
+15
View File
@@ -0,0 +1,15 @@
namespace KernelPanic.Core
{
/// <summary>
/// Describes the high-level phases of one combat turn.
/// </summary>
public enum TurnPhase
{
Boot,
Allocate,
Execute,
Interpret,
EnemyProcess,
GarbageCollection
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e1974726f936d0640943801549b4574e
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e0a39b97df9ee0641b2bbadf5bca417c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+34
View File
@@ -0,0 +1,34 @@
using System.Collections.Generic;
using KernelPanic.Core;
using UnityEngine;
namespace KernelPanic.Data
{
/// <summary>
/// Defines immutable card data used to create runtime card instances.
/// </summary>
public sealed class CardDefinition : ScriptableObject
{
[SerializeField] private string id;
[SerializeField] private string displayName;
[SerializeField] private string description;
[SerializeField] private Language language;
[SerializeField] private Rarity rarity;
[SerializeField] private int cycleCost;
[SerializeField] private ResolutionTrack resolutionTrack;
[SerializeField] private bool distroExclusive;
[SerializeField] private CardDefinition upgradeTarget;
[SerializeField] private List<CardEffectDefinition> effects = new();
public string Id => id;
public string DisplayName => displayName;
public string Description => description;
public Language Language => language;
public Rarity Rarity => rarity;
public int CycleCost => cycleCost;
public ResolutionTrack ResolutionTrack => resolutionTrack;
public bool DistroExclusive => distroExclusive;
public CardDefinition UpgradeTarget => upgradeTarget;
public IReadOnlyList<CardEffectDefinition> Effects => effects;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5178747fac4dbfc448ff15d8a687e03c
@@ -0,0 +1,13 @@
using KernelPanic.Combat;
using UnityEngine;
namespace KernelPanic.Data
{
/// <summary>
/// Defines serialized card effect data that can create a runtime effect.
/// </summary>
public abstract class CardEffectDefinition : ScriptableObject
{
public abstract ICardEffect CreateRuntimeEffect();
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: fdb3d58d94b76834598e408448e19d2a
+30
View File
@@ -0,0 +1,30 @@
using System.Collections.Generic;
using KernelPanic.Core;
using UnityEngine;
namespace KernelPanic.Data
{
/// <summary>
/// Defines a playable distro character and its starting combat constraints.
/// </summary>
public sealed class DistroDefinition : ScriptableObject
{
[SerializeField] private string id;
[SerializeField] private string displayName;
[SerializeField] private Language primaryLanguage;
[SerializeField] private Language secondaryLanguage;
[SerializeField] private int baseUptime;
[SerializeField] private int baseRam;
[SerializeField] private int baseCyclesPerTurn;
[SerializeField] private List<CardDefinition> exclusiveCards = new();
public string Id => id;
public string DisplayName => displayName;
public Language PrimaryLanguage => primaryLanguage;
public Language SecondaryLanguage => secondaryLanguage;
public int BaseUptime => baseUptime;
public int BaseRam => baseRam;
public int BaseCyclesPerTurn => baseCyclesPerTurn;
public IReadOnlyList<CardDefinition> ExclusiveCards => exclusiveCards;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bd550368fd0c75d43a53aa4fb3b6541e
+26
View File
@@ -0,0 +1,26 @@
using System.Collections.Generic;
using KernelPanic.Core;
using UnityEngine;
namespace KernelPanic.Data
{
/// <summary>
/// Defines enemy stats and language affinities for runtime combat setup.
/// </summary>
public sealed class EnemyDefinition : ScriptableObject
{
[SerializeField] private string id;
[SerializeField] private string displayName;
[SerializeField] private int baseUptime;
[SerializeField] private List<Language> resistedLanguages = new();
[SerializeField] private List<Language> weakLanguages = new();
public string Id => id;
public string DisplayName => displayName;
public int BaseUptime => baseUptime;
public IReadOnlyList<Language> ResistedLanguages => resistedLanguages;
public IReadOnlyList<Language> WeakLanguages => weakLanguages;
// TODO: Model enemy intents once combat actions are defined.
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8b5b43b43c697c142b33fbfc5160cf90
@@ -0,0 +1,17 @@
using KernelPanic.Core;
using UnityEngine;
namespace KernelPanic.Data
{
/// <summary>
/// Defines serialized status effect metadata and future stacking behavior.
/// </summary>
public sealed class StatusEffectDefinition : ScriptableObject
{
[SerializeField] private StatusType statusType;
[SerializeField] private string stackingBehavior;
public StatusType StatusType => statusType;
public string StackingBehavior => stackingBehavior;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1470a223647d6514f9439de7ded702c9
+14
View File
@@ -0,0 +1,14 @@
{
"name": "KernelPanic.Runtime",
"rootNamespace": "KernelPanic",
"references": [],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6aad857173769044f861a0c6b1318032
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ae19044bbccbb074da1d5e38b61e5657
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+26
View File
@@ -0,0 +1,26 @@
namespace KernelPanic.Meta
{
/// <summary>
/// Tracks the player's persistent entropy currency balance.
/// </summary>
public sealed class EntropyWallet
{
public int Balance { get; private set; }
public void Add(int amount)
{
Balance += amount;
}
public bool Spend(int amount)
{
if (Balance < amount)
{
return false;
}
Balance -= amount;
return true;
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8b77d0de67282ca4181a7c53feec4343
+30
View File
@@ -0,0 +1,30 @@
using System;
namespace KernelPanic.Meta
{
/// <summary>
/// Provides the contract for spending entropy on persistent unlock pulls.
/// </summary>
public sealed class GachaService
{
public GachaPullResult PerformPull(EntropyWallet wallet, int cost)
{
throw new NotImplementedException();
}
}
/// <summary>
/// Represents the result of a persistent unlock pull.
/// </summary>
public readonly struct GachaPullResult
{
public GachaPullResult(bool success, string unlockId)
{
Success = success;
UnlockId = unlockId;
}
public bool Success { get; }
public string UnlockId { get; }
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f62e697e985a8a44ca26ccb8e853ee66
+28
View File
@@ -0,0 +1,28 @@
using System;
namespace KernelPanic.Meta
{
/// <summary>
/// Provides save and load contracts for persistent meta progression.
/// </summary>
public sealed class SaveService
{
public void Save(SaveData data)
{
throw new NotImplementedException();
}
public SaveData Load()
{
throw new NotImplementedException();
}
}
/// <summary>
/// Stores persistent progression data for serialization.
/// </summary>
public sealed class SaveData
{
public int EntropyBalance { get; set; }
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 752a83f338afd024b8e728a1921e38ee
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9ae21840b594d4147a8f5497c992b4fa
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+42
View File
@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using KernelPanic.Data;
namespace KernelPanic.Run
{
/// <summary>
/// Provides post-wave reward choice generation contracts.
/// </summary>
public sealed class RewardService
{
public IReadOnlyList<RewardChoice> GeneratePostWaveChoices(RunConfig runConfig, int waveNumber)
{
throw new NotImplementedException();
}
}
/// <summary>
/// Represents one selectable reward option after clearing a wave.
/// </summary>
public readonly struct RewardChoice
{
public RewardChoice(RewardChoiceType type, CardDefinition card)
{
Type = type;
Card = card;
}
public RewardChoiceType Type { get; }
public CardDefinition Card { get; }
}
/// <summary>
/// Identifies the type of reward choice offered after a wave.
/// </summary>
public enum RewardChoiceType
{
AddCard,
UpgradeCard,
Skip
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a06eada6fbafd6e44ae1d21238a64750
+25
View File
@@ -0,0 +1,25 @@
using System.Collections.Generic;
using KernelPanic.Core;
using KernelPanic.Data;
namespace KernelPanic.Run
{
/// <summary>
/// Describes the player choices and starting deck used to begin a run.
/// </summary>
public sealed class RunConfig
{
public RunConfig(DistroDefinition distro, Language primaryLanguage, Language secondaryLanguage, IReadOnlyList<CardDefinition> startingDeck)
{
Distro = distro;
PrimaryLanguage = primaryLanguage;
SecondaryLanguage = secondaryLanguage;
StartingDeck = startingDeck;
}
public DistroDefinition Distro { get; }
public Language PrimaryLanguage { get; }
public Language SecondaryLanguage { get; }
public IReadOnlyList<CardDefinition> StartingDeck { get; }
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 0c3d34a2ce0e53b4b8f9a77feb60fb95
+56
View File
@@ -0,0 +1,56 @@
using KernelPanic.Combat;
using KernelPanic.Core;
using UnityEngine;
namespace KernelPanic.Run
{
/// <summary>
/// Coordinates run lifecycle, wave progression, and run-level event handling.
/// </summary>
public sealed class RunManager : MonoBehaviour
{
[SerializeField] private CombatManager combatManager;
[SerializeField] private int currentWaveNumber;
[SerializeField] private bool isRunActive;
[SerializeField] private bool isPlayerDead;
public int CurrentWaveNumber => currentWaveNumber;
public bool IsRunActive => isRunActive;
public bool IsPlayerDead => isPlayerDead;
private void OnEnable()
{
GameEvents.WaveCleared += HandleWaveCleared;
GameEvents.RunEnded += HandleRunEnded;
}
private void OnDisable()
{
GameEvents.WaveCleared -= HandleWaveCleared;
GameEvents.RunEnded -= HandleRunEnded;
}
public void StartRun(RunConfig config)
{
isRunActive = true;
isPlayerDead = false;
currentWaveNumber = 1;
StartCombat();
}
public void StartCombat()
{
combatManager?.StartCombat();
}
private void HandleWaveCleared(WaveClearedEvent payload)
{
}
private void HandleRunEnded(RunEndedEvent payload)
{
isRunActive = false;
isPlayerDead = payload.PlayerDied;
}
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 234cc6c5ca577b64ea44020f5514cebe
+12 -2
View File
@@ -12,8 +12,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
m_Name: UniversalRP
m_EditorClassIdentifier:
k_AssetVersion: 12
k_AssetPreviousVersion: 12
k_AssetVersion: 13
k_AssetPreviousVersion: 13
m_RendererType: 1
m_RendererData: {fileID: 0}
m_RendererDataList:
@@ -53,6 +53,7 @@ MonoBehaviour:
m_AdditionalLightsShadowResolutionTierHigh: 2048
m_ReflectionProbeBlending: 0
m_ReflectionProbeBoxProjection: 0
m_ReflectionProbeAtlas: 1
m_ShadowDistance: 50
m_ShadowCascadeCount: 1
m_Cascade2Split: 0.25
@@ -78,6 +79,7 @@ MonoBehaviour:
m_UseAdaptivePerformance: 1
m_ColorGradingMode: 0
m_ColorGradingLutSize: 32
m_AllowPostProcessAlphaOutput: 0
m_UseFastSRGBLinearConversion: 0
m_SupportDataDrivenLensFlare: 1
m_SupportScreenSpaceLensFlare: 1
@@ -108,6 +110,7 @@ MonoBehaviour:
m_PrefilterDebugKeywords: 0
m_PrefilterWriteRenderingLayers: 0
m_PrefilterHDROutput: 0
m_PrefilterAlphaOutput: 0
m_PrefilterSSAODepthNormals: 0
m_PrefilterSSAOSourceDepthLow: 0
m_PrefilterSSAOSourceDepthMedium: 0
@@ -125,8 +128,15 @@ MonoBehaviour:
m_PrefilterSoftShadowsQualityHigh: 0
m_PrefilterSoftShadows: 0
m_PrefilterScreenCoord: 0
m_PrefilterScreenSpaceIrradiance: 0
m_PrefilterNativeRenderPass: 0
m_PrefilterUseLegacyLightmaps: 0
m_PrefilterBicubicLightmapSampling: 0
m_PrefilterReflectionProbeRotation: 0
m_PrefilterReflectionProbeBlending: 0
m_PrefilterReflectionProbeBoxProjection: 0
m_PrefilterReflectionProbeAtlas: 0
m_PrefilterPointSamplingUpsampling: 0
m_ShaderVariantLogLevel: 0
m_ShadowCascades: 0
m_Textures:
@@ -29,7 +29,6 @@ MonoBehaviour:
m_StripUnusedVariants: 1
m_StripScreenCoordOverrideVariants: 1
supportRuntimeDebugDisplay: 0
m_EnableRenderGraph: 0
m_Settings:
m_SettingsList:
m_List:
@@ -57,9 +56,20 @@ MonoBehaviour:
- rid: 3114554777721110528
- rid: 3114554777721110529
- rid: 3114554777721110530
- rid: 8545822260705886208
- rid: 8545822260705886209
- rid: 8545822260705886210
- rid: 8545822260705886211
- rid: 8545822260705886212
- rid: 8545822260705886213
- rid: 8545822260705886214
- rid: 8545822260705886215
- rid: 8545822260705886216
- rid: 8545822260705886217
- rid: 8545822260705886218
m_RuntimeSettings:
m_List: []
m_AssetVersion: 8
m_AssetVersion: 10
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
m_RenderingLayerNames:
- Default
@@ -135,20 +145,17 @@ MonoBehaviour:
m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3}
m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3}
m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3}
m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3}
m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3}
m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2}
m_DefaultMesh2DLitMaterial: {fileID: 2100000, guid: 9452ae1262a74094f8a68013fbcd1834, type: 2}
- rid: 7752762179098771458
type: {class: UniversalRenderPipelineEditorShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3}
m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, type: 3}
m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, type: 3}
m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3}
m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3}
m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3}
m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3}
m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3}
m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3}
@@ -168,7 +175,6 @@ MonoBehaviour:
type: {class: RenderGraphSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_Version: 0
m_EnableRenderCompatibilityMode: 0
- rid: 7752762179098771462
type: {class: UniversalRenderPipelineDebugShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
@@ -209,6 +215,9 @@ MonoBehaviour:
m_CoreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3}
m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3}
m_SamplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3}
m_TerrainDetailLit: {fileID: 0}
m_TerrainDetailGrassBillboard: {fileID: 0}
m_TerrainDetailGrass: {fileID: 0}
- rid: 7752762179098771467
type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime}
data:
@@ -288,3 +297,140 @@ MonoBehaviour:
m_ExportShaderVariants: 1
m_ShaderVariantLogLevel: 0
m_StripRuntimeDebugShaders: 1
- rid: 8545822260705886208
type: {class: RayTracingRenderPipelineResources, ns: UnityEngine.Rendering.UnifiedRayTracing, asm: Unity.UnifiedRayTracing.Runtime}
data:
m_Version: 1
m_GeometryPoolKernels: {fileID: 7200000, guid: 98e3d58cae7210c4786f67f504c9e899, type: 3}
m_CopyBuffer: {fileID: 7200000, guid: 1b95b5dcf48d1914c9e1e7405c7660e3, type: 3}
m_CopyPositions: {fileID: 7200000, guid: 1ad53a96b58d3c3488dde4f14db1aaeb, type: 3}
m_BitHistogram: {fileID: 7200000, guid: 8670f7ce4b60cef43bed36148aa1b0a2, type: 3}
m_BlockReducePart: {fileID: 7200000, guid: 4e034cc8ea2635c4e9f063e5ddc7ea7a, type: 3}
m_BlockScan: {fileID: 7200000, guid: 4d6d5de35fa45ef4a92119397a045cc9, type: 3}
m_BuildHlbvh: {fileID: 7200000, guid: 2d70cd6be91bd7843a39a54b51c15b13, type: 3}
m_RestructureBvh: {fileID: 7200000, guid: 56641cb88dcb31a4398a4997ef7a7a8c, type: 3}
m_Scatter: {fileID: 7200000, guid: a2eaeefdac4637a44b734e85b7be9186, type: 3}
- rid: 8545822260705886209
type: {class: PostProcessData/ShaderResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
stopNanPS: {fileID: 4800000, guid: 1121bb4e615ca3c48b214e79e841e823, type: 3}
subpixelMorphologicalAntialiasingPS: {fileID: 4800000, guid: 63eaba0ebfb82cc43bde059b4a8c65f6, type: 3}
gaussianDepthOfFieldPS: {fileID: 4800000, guid: 5e7134d6e63e0bc47a1dd2669cedb379, type: 3}
bokehDepthOfFieldPS: {fileID: 4800000, guid: 2aed67ad60045d54ba3a00c91e2d2631, type: 3}
cameraMotionBlurPS: {fileID: 4800000, guid: 1edcd131364091c46a17cbff0b1de97a, type: 3}
paniniProjectionPS: {fileID: 4800000, guid: a15b78cf8ca26ca4fb2090293153c62c, type: 3}
lutBuilderLdrPS: {fileID: 4800000, guid: 65df88701913c224d95fc554db28381a, type: 3}
lutBuilderHdrPS: {fileID: 4800000, guid: ec9fec698a3456d4fb18cf8bacb7a2bc, type: 3}
bloomPS: {fileID: 4800000, guid: 5f1864addb451f54bae8c86d230f736e, type: 3}
temporalAntialiasingPS: {fileID: 4800000, guid: 9c70c1a35ff15f340b38ea84842358bf, type: 3}
LensFlareDataDrivenPS: {fileID: 4800000, guid: 6cda457ac28612740adb23da5d39ea92, type: 3}
LensFlareScreenSpacePS: {fileID: 4800000, guid: 701880fecb344ea4c9cd0db3407ab287, type: 3}
scalingSetupPS: {fileID: 4800000, guid: e8ee25143a34b8c4388709ea947055d1, type: 3}
easuPS: {fileID: 4800000, guid: 562b7ae4f629f144aa97780546fce7c6, type: 3}
uberPostPS: {fileID: 4800000, guid: e7857e9d0c934dc4f83f270f8447b006, type: 3}
finalPostPassPS: {fileID: 4800000, guid: c49e63ed1bbcb334780a3bd19dfed403, type: 3}
m_ShaderResourcesVersion: 0
- rid: 8545822260705886210
type: {class: PostProcessData/TextureResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
blueNoise16LTex:
- {fileID: 2800000, guid: 81200413a40918d4d8702e94db29911c, type: 3}
- {fileID: 2800000, guid: d50c5e07c9911a74982bddf7f3075e7b, type: 3}
- {fileID: 2800000, guid: 1134690bf9216164dbc75050e35b7900, type: 3}
- {fileID: 2800000, guid: 7ce2118f74614a94aa8a0cdf2e6062c3, type: 3}
- {fileID: 2800000, guid: 2ca97df9d1801e84a8a8f2c53cb744f0, type: 3}
- {fileID: 2800000, guid: e63eef8f54aa9dc4da9a5ac094b503b5, type: 3}
- {fileID: 2800000, guid: 39451254daebd6d40b52899c1f1c0c1b, type: 3}
- {fileID: 2800000, guid: c94ad916058dff743b0f1c969ddbe660, type: 3}
- {fileID: 2800000, guid: ed5ea7ce59ca8ec4f9f14bf470a30f35, type: 3}
- {fileID: 2800000, guid: 071e954febf155243a6c81e48f452644, type: 3}
- {fileID: 2800000, guid: 96aaab9cc247d0b4c98132159688c1af, type: 3}
- {fileID: 2800000, guid: fc3fa8f108657e14486697c9a84ccfc5, type: 3}
- {fileID: 2800000, guid: bfed3e498947fcb4890b7f40f54d85b9, type: 3}
- {fileID: 2800000, guid: d512512f4af60a442ab3458489412954, type: 3}
- {fileID: 2800000, guid: 47a45908f6db0cb44a0d5e961143afec, type: 3}
- {fileID: 2800000, guid: 4dcc0502f8586f941b5c4a66717205e8, type: 3}
- {fileID: 2800000, guid: 9d92991794bb5864c8085468b97aa067, type: 3}
- {fileID: 2800000, guid: 14381521ff11cb74abe3fe65401c23be, type: 3}
- {fileID: 2800000, guid: d36f0fe53425e08499a2333cf423634c, type: 3}
- {fileID: 2800000, guid: d4044ea2490d63b43aa1765f8efbf8a9, type: 3}
- {fileID: 2800000, guid: c9bd74624d8070f429e3f46d161f9204, type: 3}
- {fileID: 2800000, guid: d5c9b274310e5524ebe32a4e4da3df1f, type: 3}
- {fileID: 2800000, guid: f69770e54f2823f43badf77916acad83, type: 3}
- {fileID: 2800000, guid: 10b6c6d22e73dea46a8ab36b6eebd629, type: 3}
- {fileID: 2800000, guid: a2ec5cbf5a9b64345ad3fab0912ddf7b, type: 3}
- {fileID: 2800000, guid: 1c3c6d69a645b804fa232004b96b7ad3, type: 3}
- {fileID: 2800000, guid: d18a24d7b4ed50f4387993566d9d3ae2, type: 3}
- {fileID: 2800000, guid: c989e1ed85cf7154caa922fec53e6af6, type: 3}
- {fileID: 2800000, guid: ff47e5a0f105eb34883b973e51f4db62, type: 3}
- {fileID: 2800000, guid: fa042edbfc40fbd4bad0ab9d505b1223, type: 3}
- {fileID: 2800000, guid: 896d9004736809c4fb5973b7c12eb8b9, type: 3}
- {fileID: 2800000, guid: 179f794063d2a66478e6e726f84a65bc, type: 3}
filmGrainTex:
- {fileID: 2800000, guid: 654c582f7f8a5a14dbd7d119cbde215d, type: 3}
- {fileID: 2800000, guid: dd77ffd079630404e879388999033049, type: 3}
- {fileID: 2800000, guid: 1097e90e1306e26439701489f391a6c0, type: 3}
- {fileID: 2800000, guid: f0b67500f7fad3b4c9f2b13e8f41ba6e, type: 3}
- {fileID: 2800000, guid: 9930fb4528622b34687b00bbe6883de7, type: 3}
- {fileID: 2800000, guid: bd9e8c758250ef449a4b4bfaad7a2133, type: 3}
- {fileID: 2800000, guid: 510a2f57334933e4a8dbabe4c30204e4, type: 3}
- {fileID: 2800000, guid: b4db8180660810945bf8d55ab44352ad, type: 3}
- {fileID: 2800000, guid: fd2fd78b392986e42a12df2177d3b89c, type: 3}
- {fileID: 2800000, guid: 5cdee82a77d13994f83b8fdabed7c301, type: 3}
smaaAreaTex: {fileID: 2800000, guid: d1f1048909d55cd4fa1126ab998f617e, type: 3}
smaaSearchTex: {fileID: 2800000, guid: 51eee22c2a633ef4aada830eed57c3fd, type: 3}
m_TexturesResourcesVersion: 0
- rid: 8545822260705886211
type: {class: OnTilePostProcessResource, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_Version: 0
m_UberPostShader: {fileID: 4800000, guid: fe4f13c1004a07d4ea1e30bfd0326d9e, type: 3}
- rid: 8545822260705886212
type: {class: UniversalRenderPipelineRuntimeTerrainShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_Version: 0
m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3}
m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3}
m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3}
- rid: 8545822260705886213
type: {class: URPReflectionProbeSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Universal.Runtime}
data:
version: 1
useReflectionProbeRotation: 0
- rid: 8545822260705886214
type: {class: ScreenSpaceAmbientOcclusionDynamicResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_BlueNoise256Textures:
- {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3}
- {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3}
- {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3}
- {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3}
- {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3}
- {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3}
- {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3}
m_Version: 0
- rid: 8545822260705886215
type: {class: ScreenSpaceAmbientOcclusionPersistentResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3}
m_Version: 0
- rid: 8545822260705886216
type: {class: URPTerrainShaderSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_Version: 0
m_IncludeTerrainShaders: 1
- rid: 8545822260705886217
type: {class: RenderingDebuggerRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
data:
m_version: 0
- rid: 8545822260705886218
type: {class: WorldRenderPipelineResources, ns: UnityEngine.PathTracing.Core, asm: Unity.PathTracing.Runtime}
data:
_version: 3
_blitCubemap: {fileID: 7200000, guid: 5a992812cb320d146a66cc600200cce7, type: 3}
_blitGrayScaleCookie: {fileID: 7200000, guid: 557fa399e33bf7647bda5697c5c158df, type: 3}
_setAlphaChannelShader: {fileID: 7200000, guid: 5efaea0e81c66334aa9d062d6573e6fd, type: 3}
_environmentImportanceSamplingBuild: {fileID: 7200000, guid: 5bb2534d2411d344cbc54f880232640f, type: 3}
_skyBoxMesh: {fileID: 4300000, guid: 0529e6c5f6dea8c4a8c2835ed7de57cb, type: 2}
_sixFaceSkyBoxMesh: {fileID: 4300000, guid: a80925ceebd011741b42509226cefc74, type: 2}
_buildLightGridShader: {fileID: 7200000, guid: 16e47c1641bd0104e92b624601457bb0, type: 3}
+2
View File
@@ -59,6 +59,8 @@ GraphicsSettings:
m_AlbedoSwatchInfos: []
m_RenderPipelineGlobalSettingsMap:
UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 93b439a37f63240aca3dd4e01d978a9f, type: 2}
m_ShaderBuildSettings:
keywordDeclarationOverrides: []
m_LightsUseLinearIntensity: 1
m_LightsUseColorTemperature: 1
m_LogWhenShaderIsCompiled: 0
+3 -3
View File
@@ -681,11 +681,11 @@ PlayerSettings:
activeInputHandler: 1
windowsGamepadBackendHint: 0
enableDirectStorage: 0
cloudProjectId:
cloudProjectId: f53bdd3c-833a-46a8-ad19-0180dc4af0dd
framebufferDepthMemorylessMode: 0
qualitySettingsNames: []
projectName:
organizationId:
projectName: My project 2026-07-03_09-07-05
organizationId: daefee08
cloudEnabled: 0
legacyClampBlendShapeWeights: 0
hmiLoadingImage: {fileID: 0}
@@ -13,6 +13,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
shaderVariantLimit: 128
overrideShaderVariantLimit: 0
customInterpolatorErrorThreshold: 32
customInterpolatorWarningThreshold: 16
customHeatmapValues: {fileID: 0}
+2 -1
View File
@@ -12,4 +12,5 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LastMaterialVersion: 9
m_LastMaterialVersion: 10
m_ProjectSettingFolderPath: URPDefaultResources