@@ -121,6 +121,7 @@ export default class TankBody extends LivingEntity implements BarrelBase {
121121 this . children [ i ] . isChild = false ;
122122 this . children [ i ] . delete ( ) ;
123123 }
124+
124125 this . children = [ ] ;
125126 this . barrels = [ ] ;
126127 this . addons = [ ] ;
@@ -134,10 +135,10 @@ export default class TankBody extends LivingEntity implements BarrelBase {
134135 if ( ! Entity . exists ( camera ) ) throw new Error ( "No camera" ) ;
135136
136137 this . physicsData . sides = tank . sides ;
137- this . styleData . opacity = 1 ;
138+ this . styleData . opacity = 1.0 ;
138139
139140 for ( let i : Stat = 0 ; i < StatCount ; ++ i ) {
140- const { name, max} = tank . stats [ i ] ;
141+ const { name, max } = tank . stats [ i ] ;
141142
142143 camera . cameraData . statLimits [ i ] = max ;
143144 camera . cameraData . statNames [ i ] = name ;
@@ -150,6 +151,7 @@ export default class TankBody extends LivingEntity implements BarrelBase {
150151 this . baseSize = tank . baseSizeOverride ?? tank . sides === 4 ? Math . SQRT2 * 32.5 : tank . sides === 16 ? Math . SQRT2 * 25 : 50 ;
151152 this . physicsData . size = this . baseSize * this . scaleFactor ;
152153 this . physicsData . absorbtionFactor = this . isInvulnerable ? 0 : tank . absorbtionFactor ;
154+
153155 if ( tank . absorbtionFactor === 0 ) this . positionData . flags |= PositionFlags . canMoveThroughWalls ;
154156 else if ( this . positionData . flags & PositionFlags . canMoveThroughWalls ) this . positionData . flags ^= PositionFlags . canMoveThroughWalls ;
155157
@@ -181,7 +183,7 @@ export default class TankBody extends LivingEntity implements BarrelBase {
181183 camera . setFieldFactor ( tank . fieldFactor ) ;
182184
183185 this . scale ( 1 ) ; // Update addons and etc
184- this . calculateStatData ( ) ;
186+ this . calculateStatData ( ) ; // Re-calculate everything once this is done
185187 }
186188 /** See LivingEntity.onKill */
187189 public onKill ( entity : LivingEntity ) {
@@ -247,12 +249,11 @@ export default class TankBody extends LivingEntity implements BarrelBase {
247249 }
248250
249251 public calculateStatData ( ) {
250- // Damage
252+ // Body damage
251253 this . damagePerTick = this . cameraEntity . cameraData . statLevels [ Stat . BodyDamage ] + 5 + ( this . definition . bodyDamage ?? 0 ) ;
252254
253- // Max Health
255+ // Max health
254256 const maxHealthCache = this . healthData . values . maxHealth ;
255-
256257 this . healthData . maxHealth = this . definition . maxHealth + 2 * ( this . cameraEntity . cameraData . values . level - 1 ) + this . cameraEntity . cameraData . values . statLevels . values [ Stat . MaxHealth ] * 20 ;
257258 if ( this . healthData . values . health === maxHealthCache ) this . healthData . health = this . healthData . maxHealth ; // just in case
258259 else if ( this . healthData . values . maxHealth !== maxHealthCache ) {
@@ -268,6 +269,8 @@ export default class TankBody extends LivingEntity implements BarrelBase {
268269 // Movement speed
269270 this . cameraEntity . cameraData . movementSpeed =
270271 this . definition . speed * 2.55 * Math . pow ( 1.07 , this . cameraEntity . cameraData . values . statLevels . values [ Stat . MovementSpeed ] ) / Math . pow ( 1.015 , this . cameraEntity . cameraData . values . level - 1 ) ;
272+
273+ for ( const barrel of this . barrels ) barrel . calculateStatData ( ) ;
271274 }
272275
273276 /** See LivingEntity.onDeath */
0 commit comments