Added IDisabledTrait & rewrote upgrade code using a level-based approach.

Upgradeable traits are notified whenever an upgrade of their declared types are granted or revoked.  The traits maintain their own internal level counter, which is then used to enable or disable the trait functionality.  A trait can register for multiple upgrade types which then all affect the internal level counter.

	IDisabledTrait for identifying (and filtering) disabled traits
	UpgradableTrait provides an abstract base for traits to support upgrade levels
	Added IDisabledTrait support to GlobalButtonOrderGenerator

	Includes rework by pchote with alterations.
This commit is contained in:
atlimit8
2014-10-13 18:09:16 -05:00
parent 76cf5b8b98
commit bbd54cb32f
38 changed files with 545 additions and 415 deletions

View File

@@ -34,7 +34,8 @@
GenericName: Vehicle
UpdatesPlayerStatistics:
Cloak:
RequiresUpgrade: cloak
UpgradeTypes: cloak
UpgradeMinEnabledLevel: 1
InitialDelay: 15
CloakDelay: 90
CloakSound: trans1.aud
@@ -47,7 +48,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Tank:
@@ -89,7 +91,8 @@
GenericName: Tank
UpdatesPlayerStatistics:
Cloak:
RequiresUpgrade: cloak
UpgradeTypes: cloak
UpgradeMinEnabledLevel: 1
InitialDelay: 15
CloakDelay: 90
CloakSound: trans1.aud
@@ -102,7 +105,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Helicopter:
@@ -142,7 +146,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Infantry:
@@ -201,7 +206,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: hospitalheal
UpgradeTypes: hospitalheal
UpgradeMinEnabledLevel: 1
GlobalUpgradable:
Upgrades: hospitalheal
Prerequisites: hosp
@@ -224,7 +230,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^CivInfantry:
@@ -330,7 +337,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Ship:
@@ -363,7 +371,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Building:

View File

@@ -533,7 +533,7 @@ STNK:
RevealsShroud:
Range: 7c0
Cloak:
-RequiresUpgrade:
-UpgradeTypes:
InitialDelay: 90
CloakDelay: 90
CloakSound: trans1.aud

View File

@@ -44,7 +44,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Tank:
@@ -93,7 +94,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Husk:
@@ -217,7 +219,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Plane:
@@ -249,7 +252,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Helicopter:

View File

@@ -1300,14 +1300,16 @@ Rules:
GainsExperience:
Upgrades:
InvulnerabilityUpgrade@UNKILLABLE:
RequiresUpgrade: unkillable
UpgradeTypes: unkillable
UpgradeMinEnabledLevel: 1
^Tank:
GivesBounty:
Percentage: 0
GainsExperience:
Upgrades:
InvulnerabilityUpgrade@UNKILLABLE:
RequiresUpgrade: unkillable
UpgradeTypes: unkillable
UpgradeMinEnabledLevel: 1
^Infantry:
GivesBounty:
Percentage: 0
@@ -1320,24 +1322,28 @@ Rules:
DeathSounds@ZAPPED:
VolumeMultiplier: 0.1
InvulnerabilityUpgrade@UNKILLABLE:
RequiresUpgrade: unkillable
UpgradeTypes: unkillable
UpgradeMinEnabledLevel: 1
^Ship:
GivesBounty:
Percentage: 0
GainsExperience:
Upgrades:
InvulnerabilityUpgrade@UNKILLABLE:
RequiresUpgrade: unkillable
UpgradeTypes: unkillable
UpgradeMinEnabledLevel: 1
^Plane:
GivesBounty:
Percentage: 0
InvulnerabilityUpgrade@UNKILLABLE:
RequiresUpgrade: unkillable
UpgradeTypes: unkillable
UpgradeMinEnabledLevel: 1
^Building:
GivesBounty:
Percentage: 0
InvulnerabilityUpgrade@UNKILLABLE:
RequiresUpgrade: unkillable
UpgradeTypes: unkillable
UpgradeMinEnabledLevel: 1
E7:
-Selectable:

View File

@@ -658,7 +658,8 @@ Rules:
AutoTarget:
InitialStance: Defend
InvulnerabilityUpgrade@UNKILLABLE:
RequiresUpgrade: unkillable
UpgradeTypes: unkillable
UpgradeMinEnabledLevel: 1
SPY:
Inherits: ^Infantry
Buildable:

View File

@@ -59,12 +59,16 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
UpgradeOverlay@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
InvulnerabilityUpgrade@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar:
Upgrade: invulnerability
@@ -129,12 +133,16 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
UpgradeOverlay@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
InvulnerabilityUpgrade@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar:
Upgrade: invulnerability
@@ -192,7 +200,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: hospitalheal
UpgradeTypes: hospitalheal
UpgradeMinEnabledLevel: 1
GlobalUpgradable:
Upgrades: hospitalheal
Prerequisites: hosp
@@ -221,7 +230,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
^Ship:
@@ -263,14 +273,19 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
UpgradeOverlay@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
InvulnerabilityUpgrade@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar:
Upgrade: invulnerability
UpgradeMinEnabledLevel: 1
^Plane:
AppearsOnRadar:
@@ -314,12 +329,16 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
UpgradeOverlay@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
InvulnerabilityUpgrade@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar:
Upgrade: invulnerability
@@ -382,9 +401,12 @@
ScriptTriggers:
UpgradeManager:
UpgradeOverlay@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
InvulnerabilityUpgrade@IRONCURTAIN:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar:
Upgrade: invulnerability

View File

@@ -655,7 +655,8 @@ DTRK:
DemoTruck:
-InvulnerabilityUpgrade@IRONCURTAIN:
KillsSelf:
RequiresUpgrade: invulnerability
UpgradeTypes: invulnerability
UpgradeMinEnabledLevel: 1
Chronoshiftable:
ExplodeInstead: yes

View File

@@ -45,7 +45,8 @@
WithMakeAnimation:
UpgradeManager:
Cloak@CLOAKGENERATOR:
RequiresUpgrade: cloakgenerator
UpgradeTypes: cloakgenerator
UpgradeMinEnabledLevel: 1
InitialDelay: 0
CloakDelay: 90
@@ -87,7 +88,8 @@
ScriptTriggers:
UpgradeManager:
Cloak@CLOAKGENERATOR:
RequiresUpgrade: cloakgenerator
UpgradeTypes: cloakgenerator
UpgradeMinEnabledLevel: 1
InitialDelay: 0
CloakDelay: 90
@@ -138,7 +140,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
GivesExperience:
DrawLineToTarget:
ActorLostNotification:
@@ -167,7 +170,8 @@
DeathTypes: 6
UpgradeManager:
Cloak@CLOAKGENERATOR:
RequiresUpgrade: cloakgenerator
UpgradeTypes: cloakgenerator
UpgradeMinEnabledLevel: 1
InitialDelay: 0
CloakDelay: 90
@@ -238,7 +242,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
GivesExperience:
DrawLineToTarget:
ActorLostNotification:
@@ -258,15 +263,21 @@
EmptyWeapon: UnitExplodeSmall
UpgradeManager:
UpgradeOverlay@EMPDISABLE:
RequiresUpgrade: empdisable
UpgradeTypes: empdisable
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
Palette: disabled
DisableUpgrade@EMPDISABLE:
RequiresUpgrade: empdisable
UpgradeTypes: empdisable
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar@EMPDISABLE:
Upgrade: empdisable
Color: 255,255,255
Cloak@CLOAKGENERATOR:
RequiresUpgrade: cloakgenerator
UpgradeTypes: cloakgenerator
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
InitialDelay: 0
CloakDelay: 90
@@ -310,7 +321,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
GivesExperience:
DrawLineToTarget:
ActorLostNotification:
@@ -330,15 +342,21 @@
EmptyWeapon: UnitExplodeSmall
UpgradeManager:
UpgradeOverlay@EMPDISABLE:
RequiresUpgrade: empdisable
UpgradeTypes: empdisable
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
Palette: disabled
DisableUpgrade@EMPDISABLE:
RequiresUpgrade: empdisable
UpgradeTypes: empdisable
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar@EMPDISABLE:
Upgrade: empdisable
Color: 255,255,255
Cloak@CLOAKGENERATOR:
RequiresUpgrade: cloakgenerator
UpgradeTypes: cloakgenerator
UpgradeMinEnabledLevel: 1
UpgradeMaxAcceptedLevel: 2
InitialDelay: 0
CloakDelay: 90
@@ -375,7 +393,8 @@
Ticks: 100
HealIfBelow: 1
DamageCooldown: 125
RequiresUpgrade: selfheal
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
GivesExperience:
DrawLineToTarget:
ActorLostNotification:

View File

@@ -17,10 +17,13 @@ E1:
Speed: 71
Armament@PRIMARY:
Weapon: Minigun
RestrictedByUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMaxEnabledLevel: 0
UpgradeMaxAcceptedLevel: 1
Armament@ELITE:
Weapon: M1Carbine
RequiresUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMinEnabledLevel: 1
AttackFrontal:
TakeCover:
RenderInfantry:

View File

@@ -501,12 +501,15 @@ GATICK:
Armament@PRIMARY:
Weapon: 90mm
LocalOffset: 384,0,128
RestrictedByUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMaxEnabledLevel: 0
UpgradeMaxAcceptedLevel: 1
MuzzleSequence: muzzle
Armament@ELITE:
Weapon: 120mmx
LocalOffset: 384,0,128
RequiresUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMinEnabledLevel: 1
MuzzleSequence: muzzle
AttackTurreted:
BodyOrientation:

View File

@@ -624,11 +624,14 @@ BIKE:
Range: 5c0
Armament@PRIMARY:
Weapon: BikeMissile
RestrictedByUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMaxEnabledLevel: 0
UpgradeMaxAcceptedLevel: 1
LocalOffset: -128,-170,213, -128,170,213
Armament@ELITE:
Weapon: HoverMissile
RequiresUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMinEnabledLevel: 1
LocalOffset: -128,-170,213, -128,170,213
AttackFrontal:
AutoTarget:
@@ -785,12 +788,15 @@ TTNK:
Armament@PRIMARY:
Weapon: 90mm
LocalOffset: 256,0,256
RestrictedByUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMaxEnabledLevel: 0
UpgradeMaxAcceptedLevel: 1
MuzzleSequence: muzzle
Armament@ELITE:
Weapon: 120mmx
LocalOffset: 256,0,256
RequiresUpgrade: eliteweapon
UpgradeTypes: eliteweapon
UpgradeMinEnabledLevel: 1
MuzzleSequence: muzzle
WithMuzzleFlash:
RevealsShroud: