private void LateUpdate() { // add missing UIs for new teams for (var i = transform.childCount; i < MobTeams.GetNumberOfTeams() - 1; i++) { var newUI = Instantiate(teamStatusUI); newUI.transform.SetParent(transform, false); newUI.GetComponent <RectTransform>().offsetMax = new Vector2(0, -10 - 80 * i); } // get all flags var flags = FindObjectsOfType <Flag>(); // update the UI for each team for (var i = 0; i < transform.childCount; i++) { var team = (uint)i + 1; var teamUI = transform.GetChild(i); var mobTeam = MobTeams.GetTeam(team); teamUI.Find("MobIcon").GetComponent <Image>().color = mobTeam.teamColor; teamUI.Find("FlagIcon").GetComponent <Image>().color = mobTeam.teamColor; teamUI.Find("MobCountText").GetComponent <Text>().text = $"{mobTeam.Mobs.Count}"; teamUI.Find("FlagCountText").GetComponent <Text>().text = $"{flags.Where(flag => flag.IsCapturedByTeam(team)).Count()}"; teamUI.Find("RespawnText").GetComponent <Text>().text = $"{mobTeam.respawns}"; teamUI.Find("ScoreText").GetComponent <Text>().text = $"{mobTeam.score}"; } }
private void Update() { for (uint i = 0; i < MobTeams.GetNumberOfTeams(); i++) { var team = MobTeams.GetTeam(i); // decrease the timer team.respawnTimer -= Time.deltaTime; // respawn if zero if (team.respawnTimer <= 0 && team.respawns > 0) { var prefabRegistry = FindObjectOfType <PrefabRegistry>(); var capturedFlags = FindObjectsOfType <Flag>() .Where(flag => flag.IsCapturedByTeam(i)) .ToArray(); if (capturedFlags.Length > 0 && prefabRegistry.teamMobs[i]) { var spawn = capturedFlags[Random.Range(0, capturedFlags.Length)]; spawn.SpawnMob(prefabRegistry.teamMobs[i]).GetComponent <Mob>(); team.respawnTimer = RespawnTimerForTeam(team.Mobs.Count, capturedFlags.Length); team.respawns--; } } } }
public void Update() { for (uint i = 0; i < MobTeams.GetNumberOfTeams(); i++) { var players = MobTeams.GetTeam(i).Players; players.ForEach(player => player.Update()); } }
private void UpdateClosestEnemy() { closestEnemy = null; var numberOfTeams = MobTeams.GetNumberOfTeams(); var closestDistance = float.PositiveInfinity; for (uint i = 0; i < numberOfTeams; i++) { if (myMob.team == i && i != 0) { continue; } var team = MobTeams.GetTeam(i); if (team.Mobs.Count > 0) { foreach (var enemy in team.Mobs) { var distance = (transform.position - enemy.transform.position).sqrMagnitude; foreach (var playerInfo in MobTeams.GetTeam(myMob.team).Players) { if (!playerInfo.IsAlive()) { continue; } var player = playerInfo.mob; var playerDistance = Vector3.Distance(player.transform.position, enemy.transform.position); distance *= EnemyPlayerProximityMultiplier(playerDistance, persona); } if (enemy.IsStunned()) { distance *= persona.StunnedEnemyPenalty(); } if (distance < closestDistance) { closestDistance = distance; closestEnemy = enemy; } } } } }
/// <summary> /// Add a player for a random team. Initializes a new playerInfo. /// </summary> /// <param name="local">Whether this is the local player</param> public void CreatePlayerForRandomTeam(bool local = false) { var randomTeam = (uint)Random.Range(1, (int)MobTeams.GetNumberOfTeams() + 1); CreatePlayer(randomTeam, local); }