private void SpawnTarget(Player player) { // Create new target this._spawnedTarget = GameObject.Instantiate(new LevelObjectTemplate { Lot = Targets[Math.Min(this._targetsDestroyed / 2, Targets.Length - 1)], Position = this.GameObject.Transform.Position, Rotation = this._targetRotation, Scale = 1, LegoInfo = new LegoDataDictionary(), }, this.Zone); Object.Start(this._spawnedTarget); GameObject.Construct(this._spawnedTarget); var stats = this._spawnedTarget.GetComponent <DestroyableComponent>(); // Whenever the target takes damage, increase score by the amount of damage dealt. // It also increases the score when other players damage the target. // This is intentional; according to the LU wiki, this is how it worked in Live as well. Listen(stats.OnHealthChanged, (u, i) => { if (i >= 0) // Health gets reset to max when object dies { return; } this.UpdateActivityValue(player, 0, -i); this.SetNetworkVar("totalDmg", this.GetActivityValue(player, 0)); }); // If the timer hasn't ended yet, spawn a new target when this one dies. var destructibleComponent = this._spawnedTarget.GetComponent <DestructibleComponent>(); Listen(destructibleComponent.OnSmashed, (smasher, lootOwner) => { Destroy(this._spawnedTarget); this._targetsDestroyed++; if (this._active) { this.SpawnTarget(player); } }); }