Example #1
0
    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());
     }
 }
Example #4
0
    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);
    }