private IEnumerator SpawnRoundHelicopters() { int helicoptersToSpawn = Mathf.Max(1, Mathf.RoundToInt((float)maxHelicopters * ((float)currentRound / (float)rounds))); for (int i = 0; i < helicoptersToSpawn; i++) { Vector3 destination = _spawnSelectorA.GetSpawnPoint(); Vector2 random = (UnityEngine.Random.insideUnitCircle.normalized * Configuration.MaxTravelDistance); Vector3 position = destination + new Vector3(random.x, 50f, random.y); BaseHelicopter baseHelicopter = GameManager.server.CreateEntity(HELICOPTER_PREFAB, position) as BaseHelicopter; baseHelicopter.enableSaving = false; baseHelicopter.Spawn(); EventHelicopter eventHelicopter = baseHelicopter.gameObject.AddComponent <EventHelicopter>(); eventHelicopter.OnHelicopterSpawned(this, i + 1); eventHelicopter.Entity.health = heliHealth; eventHelicopter.Entity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update); eventHelicopters.Add(eventHelicopter); yield return(CoroutineEx.waitForSeconds(1f)); eventHelicopter.SetPositionDestination(position, destination); } }
internal override bool CanDealEntityDamage(EventManager.BaseEventPlayer attacker, BaseEntity entity, HitInfo hitInfo) { EventHelicopter eventHelicopter = entity.GetComponent <EventHelicopter>(); if (eventHelicopter == null) { return(false); } if (damageScaler != 1f) { hitInfo.damageTypes.ScaleAll(damageScaler); } int hitPoints; if (!eventHelicopter.DealDamage(hitInfo, out hitPoints)) { EventManager.ClearDamage(hitInfo); } (attacker as ChopperSurvivalPlayer).HitPoints += hitPoints; return(true); }
internal void OnHelicopterKilled(EventHelicopter eventHelicopter) { eventHelicopters.Remove(eventHelicopter); if (eventHelicopters.Count == 0) { EndRound(); } }
protected override void BuildScoreboard() { scoreContainer = EMInterface.CreateScoreboardBase(this); int index = -1; EMInterface.CreatePanelEntry(scoreContainer, string.Format(GetMessage("Score.RoundNumber", 0UL), currentRound, rounds), index += 1); for (int i = 0; i < eventHelicopters.Count; i++) { EventHelicopter eventHelicopter = eventHelicopters[i]; CreateHealthBar(scoreContainer, string.Format(GetMessage("Score.Heli", 0UL), eventHelicopter.ID), eventHelicopter.Entity.health / heliHealth, index += 1); } EMInterface.CreatePanelEntry(scoreContainer, string.Format(GetMessage("Score.Remaining", 0UL), eventPlayers.Count), index += 1); for (int i = 0; i < Mathf.Min(scoreData.Count, 15); i++) { EventManager.ScoreEntry score = scoreData[i]; EMInterface.CreateScoreEntry(scoreContainer, $"{score.displayName} | ({score.value1} pts)", string.Empty, string.Empty, i + index + 1); } }