Exemple #1
0
    private void keyboard_switch_timeout_selected_footballer()
    {
        int tar = -1;

        if (Input.GetKey(KeyCode.Alpha1))
        {
            tar = 0;
        }
        if (Input.GetKey(KeyCode.Alpha2))
        {
            tar = 1;
        }
        if (Input.GetKey(KeyCode.Alpha3))
        {
            tar = 2;
        }
        if (Input.GetKey(KeyCode.Alpha4))
        {
            tar = 3;
        }
        if (Input.GetKey(KeyCode.Alpha5))
        {
            tar = 4;
        }
        if (tar != -1 && tar < m_playerTeamFootballers.Count)
        {
            m_timeoutSelectedFootballer = m_playerTeamFootballers[tar];
        }
    }
Exemple #2
0
    public void sim_update()
    {
        Vector3 pre_position = transform.position;
        Vector2 fvel         = Util.vec_scale(_vel, Util.dt_scale);

        transform.position = Util.vec_add(transform.position, fvel);
        if (!Main.LevelController.m_ballBounds.OverlapPoint(transform.position))
        {
            transform.position = pre_position;
            _vel.x            *= -0.15f;
            _vel.y            *= -0.15f;
        }

        _vz -= 0.05f * Util.dt_scale;
        _z  += _vz;
        if (_z <= 0)
        {
            _z      = 0;
            _vz     = Mathf.Abs(_vz) * 0.5f;
            _vel.x *= 0.5f;
            _vel.y *= 0.5f;
        }
        this.set_ball_z(_z);

        this._initial_uncatchable_ct -= Util.dt_scale;
        if (this._initial_uncatchable_ct <= 0 && _z < 50)
        {
            for (int i = 0; i < Main.LevelController.m_playerTeamFootballers.Count; i++)
            {
                GenericFootballer itr = Main.LevelController.m_playerTeamFootballers[i];
                if (itr.can_pickup_ball() && itr.collider_contains(this.GetComponent <CircleCollider2D>()))
                {
                    Main.LevelController.PickupLooseBall(this, itr);
                    Main.AudioController.PlayEffect("sfx_pickup");

                    return;
                }
            }
            for (int i = 0; i < Main.LevelController.m_enemyTeamFootballers.Count; i++)
            {
                GenericFootballer itr = Main.LevelController.m_enemyTeamFootballers[i];
                if (itr.can_pickup_ball() && itr.collider_contains(this.GetComponent <CircleCollider2D>()))
                {
                    Main.LevelController.PickupLooseBall(this, itr);
                    Main.AudioController.PlayEffect("sfx_pickup");
                    return;
                }
            }
        }

        if (_z > 1)
        {
            _particle_emit_ct -= 1;
            if (_particle_emit_ct <= 0)
            {
                Main.LevelController.ball_move_particle_at(_ball.transform.position, Util.rad2deg * Mathf.Atan2(_vel.y, _vel.x));
                _particle_emit_ct = Util.y_for_point_of_2pt_line(new Vector2(8, 1), new Vector2(2, 5), (new Vector3(_vel.x, _vel.y, _vz)).magnitude);
            }
        }
    }
Exemple #3
0
    public void sim_update_bump()
    {
        _cannot_stun_ct -= Util.dt_scale;
        for (int i = 0; i < Main.LevelController.m_playerTeamFootballers.Count; i++)
        {
            GenericFootballer itr = Main.LevelController.m_playerTeamFootballers[i];
            if (itr != this)
            {
                this.check_bump_with_target(itr);
            }
        }
        for (int i = 0; i < Main.LevelController.m_enemyTeamFootballers.Count; i++)
        {
            GenericFootballer itr = Main.LevelController.m_enemyTeamFootballers[i];
            if (itr != this)
            {
                this.check_bump_with_target(itr);
            }
        }

        Vector3 imgpos = _renderer.transform.localPosition;

        _stunned_upwards_vel -= 0.085f * Util.dt_scale;
        imgpos.y             += _stunned_upwards_vel;
        if (imgpos.y <= 0)
        {
            imgpos.y             = 0;
            _stunned_upwards_vel = Mathf.Abs(_stunned_upwards_vel) * 0.5f;
        }
        _renderer.transform.localPosition = imgpos;
    }
Exemple #4
0
    public BotBase GetBallOwner()
    {
        GenericFootballer footballer = Main.LevelController.nullableCurrentFootballerWithBall();

        if (footballer != null)
        {
            return(footballer.GetComponent <BotBase>());
        }
        return(null);
    }
Exemple #5
0
 public bool footballer_has_ball(GenericFootballer tar)
 {
     if (get_footballer_team(tar) == Team.PlayerTeam)
     {
         return(m_playerTeamFootballersWithBall.Contains(tar));
     }
     else
     {
         return(m_enemyTeamFootballersWithBall.Contains(tar));
     }
 }
Exemple #6
0
 public Team get_footballer_team(GenericFootballer tar)
 {
     if (tar == null)
     {
         return(Team.None);
     }
     if (m_playerTeamFootballers.Contains(tar))
     {
         return(Team.PlayerTeam);
     }
     if (m_enemyTeamFootballers.Contains(tar))
     {
         return(Team.EnemyTeam);
     }
     return(Team.None);
 }
Exemple #7
0
    private void DoMatchOpeningSequence()
    {
        m_currentMode = LevelControllerMode.Opening;
        _countdown_ct = 0;
        // hide cursor
        //m_mouseTargetIcon.SetActive(false);

        List <BotBase> allBots = new List <BotBase>(
            m_playerTeam.TeamMembers.Count + m_enemyTeam.TeamMembers.Count);

        allBots.AddRange(m_playerTeam.TeamMembers);
        allBots.AddRange(m_enemyTeam.TeamMembers);

        for (int i = 0; i < allBots.Count; i++)
        {
            BotBase           bot        = allBots[i];
            GenericFootballer footballer = bot.GetComponent <GenericFootballer>();
            footballer.force_play_animation(FootballerAnimResource.ANIM_RUN);
            footballer.force_facing_direction(bot.HomePosition.x >= bot.transform.position.x ? true : false);

            float d = Vector3.Distance(bot.transform.position, bot.HomePosition);
            float r = Util.rand_range(200.0f, 220.0f);
            float t = d / r;
            _countdown_ct      = Math.Max(_countdown_ct, t);
            _last_countdown_ct = _countdown_ct;

            LTDescr animDesc = LeanTween.move(
                bot.gameObject,
                bot.HomePosition,
                t)
                               .setEase(LeanTweenType.linear);
            int animId = animDesc.id;
            animDesc.setOnComplete(() => {
                footballer.force_play_animation(FootballerAnimResource.ANIM_IDLE);
                footballer.force_facing_direction(bot.Team == Team.PlayerTeam ? true : false);

                m_matchOpeningAnimIds.Remove(animId);
            });

            m_matchOpeningAnimIds.Add(animId);
        }

        {
            m_topReferee.transform.position = Main.FieldController.GetFieldCenter();
            CreateLooseBall(m_topReferee.transform.position, Vector3.zero);
        }
    }
Exemple #8
0
    private BotBase CreateFootballer(TeamBase team, Vector3 pos, FootballerAnimResource anims)
    {
        GameObject        neu_obj = Util.proto_clone(proto_genericFootballer);
        GenericFootballer rtv     = neu_obj.GetComponent <GenericFootballer>();

        rtv.transform.position = pos;
        rtv.sim_initialize(anims);
        if (team.Team == Team.PlayerTeam)
        {
            m_playerTeamFootballers.Add(rtv);
        }
        else
        {
            m_enemyTeamFootballers.Add(rtv);
        }
        return(neu_obj.GetComponent <BotBase>());
    }
Exemple #9
0
    public Vector3 currentBallPosition()
    {
        GenericFootballer ball_holder = nullableCurrentFootballerWithBall();

        if (ball_holder != null)
        {
            return(ball_holder.transform.position);
        }
        else
        {
            if (m_looseBalls.Count > 0)
            {
                return(m_looseBalls[0].transform.position);
            }
            return(Vector3.zero);
        }
    }
Exemple #10
0
    public void PickupLooseBall(LooseBall looseball, GenericFootballer tar)
    {
        m_looseBalls.Remove(looseball);
        this.catch_particle_at(looseball.transform.position);
        if (this.get_footballer_team(tar) == Team.PlayerTeam)
        {
            m_playerTeamFootballersWithBall.Add(tar);
            tar._current_mode = GenericFootballer.GenericFootballerMode.Idle;
            tar.set_wait_delay(15);
        }
        else
        {
            this.m_enemyTeamFootballersWithBall.Add(tar);
            tar._current_mode = GenericFootballer.GenericFootballerMode.Idle;
            tar.set_wait_delay(15);
        }

        // ai msg
        {
            BotBase new_ball_owner = tar.GetComponent <BotBase>();
            if (_prev_ball_owner != null)
            {
                _prev_ball_owner.Msg_LostBall();
            }
            new_ball_owner.Msg_GotBall();
            _prev_ball_owner = new_ball_owner;
        }

        if (__commentary_last_team_to_own_ball == Team.PlayerTeam)
        {
            if (__commentary_last_team_to_own_ball == this.get_footballer_team(tar))
            {
                m_commentaryManager.notify_event(CommentaryEvent.PassComplete);
            }
            else if (__commentary_last_team_to_own_ball != this.get_footballer_team(tar) && new Vector3(looseball._vel.x, looseball._vel.y, looseball._vz).magnitude > 1)
            {
                m_commentaryManager.notify_event(CommentaryEvent.Interception, true);
            }
        }

        Destroy(looseball.gameObject);
    }
Exemple #11
0
    private void check_bump_with_target(GenericFootballer tar)
    {
        if (this.collider_contains(tar.GetComponent <CircleCollider2D>()) && this.get_calculated_velocity().magnitude > 0)
        {
            Vector2 calc_vel_dir = this.get_calculated_velocity().normalized;
            float   mag          = Mathf.Max(this.get_calculated_velocity().magnitude, tar.get_calculated_velocity().magnitude);
            Vector2 bump_vel     = calc_vel_dir * mag;

            Vector3 hit_spot = new Vector3(
                (transform.position.x + tar.transform.position.x) / 2,
                (transform.position.y + tar.transform.position.y) / 2,
                (transform.position.z + tar.transform.position.z) / 2
                );
            if (Main.LevelController.get_footballer_team(this) == Team.PlayerTeam)
            {
                Main.LevelController.m_commentaryManager.notify_event(CommentaryEvent.Block);
            }
            this.apply_bump(Util.vec_scale(bump_vel, -1), hit_spot, true);
            tar.apply_bump(bump_vel, hit_spot);
        }
    }
Exemple #12
0
    private void check_bump_with_target(GenericFootballer tar)
    {
        if (this.collider_contains(tar.GetComponent<CircleCollider2D>()) && this.get_calculated_velocity().magnitude > 0) {
            Vector2 calc_vel_dir = this.get_calculated_velocity().normalized;
            float mag = Mathf.Max(this.get_calculated_velocity().magnitude,tar.get_calculated_velocity().magnitude);
            Vector2 bump_vel = calc_vel_dir * mag;

            Vector3 hit_spot = new Vector3(
                (transform.position.x + tar.transform.position.x)/2,
                (transform.position.y + tar.transform.position.y)/2,
                (transform.position.z + tar.transform.position.z)/2
            );
            if (Main.LevelController.get_footballer_team(this) == Team.PlayerTeam) {
                Main.LevelController.m_commentaryManager.notify_event(CommentaryEvent.Block);
            }
            this.apply_bump(Util.vec_scale(bump_vel,-1),hit_spot,true);
            tar.apply_bump(bump_vel,hit_spot);
        }
    }
Exemple #13
0
    public void Update()
    {
        if (Main.PanelManager.CurrentPanelId != PanelIds.Game)
        {
            return;
        }
        this.update_mouse_point();
        m_commentaryManager.i_update();

        float mouse_target_anim_speed = 0.3f;

        if (m_currentMode == LevelControllerMode.GoalZoomOut)
        {
            UiPanelGame.inst._fadein.set_target_alpha(1);
            Main.GameCamera.SetTargetPos(_goalzoomoutfocuspos);
            Main.GameCamera.SetTargetZoom(300);
            m_enemyGoal.spawn_confetti();
            m_particles.i_update(this);
            if (UiPanelGame.inst._fadein.is_transition_finished())
            {
                this.ResetLevel();
                Main.PanelManager.ChangeCurrentPanel(PanelIds.Tv);
            }
        }
        else if (m_currentMode == LevelControllerMode.GamePlay)
        {
            Team ball_owner_team = this.get_footballer_team(this.nullableCurrentFootballerWithBall());
            if (ball_owner_team != Team.None)
            {
                __commentary_last_team_to_own_ball = ball_owner_team;
            }

            _time_remaining = Math.Max(0, _time_remaining - TimeSpan.FromSeconds(Time.deltaTime).Ticks);
            if (_time_remaining <= 0)
            {
                m_currentMode = LevelControllerMode.GoalZoomOut;

                Main._current_repeat_reason = RepeatReason.Timeout;
                UiPanelGame.inst.show_popup_message(2);
                _goalzoomoutfocuspos = Main.GameCamera.GetCurrentPosition();
                return;
            }
            m_particles.i_update(this);
            if (m_playerTeamFootballersWithBall.Count > 0)
            {
                Main.GameCamera.SetTargetPos(m_playerTeamFootballersWithBall[0].transform.position);
                if (Input.GetMouseButton(0))
                {
                    Main.GameCamera.SetTargetZoom(600);
                }
                else
                {
                    Main.GameCamera.SetTargetZoom(500);
                }
                if (Input.GetMouseButton(0))
                {
                    Main.GameCamera.SetManualOffset(new Vector3(0, 0, 0));
                }
                else
                {
                    Main.GameCamera.SetManualOffset(new Vector3(150, 0, 0));
                }
            }
            else
            {
                Main.GameCamera.SetTargetPos(this.GetLastMousePointInBallBounds());
                Main.GameCamera.SetTargetZoom(600);
                Main.GameCamera.SetManualOffset(new Vector3(0, 0, 0));
            }


            mouse_target_anim_speed = 2.0f;
            mouse_target_icon_set_alpha(1.0f);
            //m_mouseTargetIcon.SetActive(true);
            Vector3 mouse_pt = GetLastMousePointInBallBounds();
            m_mouseTargetIcon.transform.position   = mouse_pt;
            m_mouseTargetIcon.transform.localScale = Util.valv(50.0f);

            for (int i = m_looseBalls.Count - 1; i >= 0; i--)
            {
                LooseBall itr = this.m_looseBalls[i];
                itr.sim_update();
            }

            for (int i = this.m_playerTeamFootballers.Count - 1; i >= 0; i--)
            {
                GenericFootballer itr = this.m_playerTeamFootballers[i];
                itr.sim_update();
            }

            for (int i = 0; i < this.m_enemyTeamFootballers.Count; i++)
            {
                GenericFootballer itr = this.m_enemyTeamFootballers[i];
                itr.sim_update();
            }

            if (Input.GetKey(KeyCode.Space))
            {
                for (int i = 0; i < this.m_playerTeamFootballers.Count; i++)
                {
                    GenericFootballer itr = this.m_playerTeamFootballers[i];
                    itr.timeout_start();
                }
                m_currentMode = LevelControllerMode.Timeout;
                m_timeoutSelectedFootballer = null;
                Main.Pause(PauseFlags.TimeOut);
                m_commentaryManager.notify_tutorial_just_pressed_space();
                Main.AudioController.PlayEffect("sfx_pause");
                UiPanelGame.inst.bgm_audio_set_paused_mode(true);
            }

            for (int i = m_looseBalls.Count - 1; i >= 0; i--)
            {
                LooseBall itr = this.m_looseBalls[i];
                if (m_enemyGoal.box_collider().OverlapPoint(itr.transform.position))
                {
                    this.blood_anim_at(itr.transform.position);
                    m_looseBalls.Remove(itr);
                    this.enemy_goal_score(itr.transform.position);
                    Destroy(itr.gameObject);
                    m_enemyGoal.play_eat_anim(40);
                    Main.AudioController.PlayEffect("sfx_checkpoint");
                }
                if (m_playerGoal.box_collider().OverlapPoint(itr.transform.position))
                {
                    this.blood_anim_at(itr.transform.position);
                    m_looseBalls.Remove(itr);
                    this.player_goal_score(itr.transform.position);
                    Destroy(itr.gameObject);
                    m_playerGoal.play_eat_anim(40);
                    UiPanelGame.inst._chats.clear_messages();
                    Main.AudioController.PlayEffect("sfx_checkpoint");
                }
            }
            m_bottomReferee.sim_update();
            m_topReferee.sim_update();
        }
        else if (m_currentMode == LevelControllerMode.Timeout)
        {
            Vector3 screen = Main.GameCamera.GetComponent <Camera>().WorldToScreenPoint(this.GetLastMousePointInBallBounds());
            screen.z = 0;

            Vector3 mouse_to_center_delta = Util.vec_sub(
                screen,
                new Vector2(Screen.width / 2, Screen.height / 2));
            float mmouse_move_rad = (Screen.width + Screen.height) / 2.0f * 0.25f;
            if (mouse_to_center_delta.magnitude > mmouse_move_rad)
            {
                Vector3 n_mouse_to_center_delta = mouse_to_center_delta.normalized;
                Vector3 tar_delta = Util.vec_scale(n_mouse_to_center_delta, (mouse_to_center_delta.magnitude - mmouse_move_rad) * 0.3f);
                Main.GameCamera.SetTargetPos(Util.vec_add(Main.GameCamera.GetCurrentPosition(), tar_delta));
            }
            else
            {
                Main.GameCamera.SetTargetPositionToCurrent();
            }

            Main.GameCamera.SetManualOffset(new Vector3(0, 0, 0));
            Main.GameCamera.SetTargetZoom(800);
            Vector3           mouse_pt   = GetLastMousePointInBallBounds();
            GenericFootballer select_tar = this.IsPointTouchFootballer(mouse_pt, m_playerTeamFootballers);
            if (!Input.GetMouseButton(0) && select_tar != null && select_tar.can_take_commands())
            {
                mouse_target_icon_set_alpha(0.4f);
                //m_mouseTargetIcon.SetActive(false);
                select_tar.SetSelectedForAFrame();
            }
            else
            {
                mouse_target_icon_set_alpha(1.0f);
                //m_mouseTargetIcon.SetActive(true);
            }
            m_mouseTargetIcon.transform.position   = mouse_pt;
            m_mouseTargetIcon.transform.localScale = Util.valv(75.0f);


            for (int i = 0; i < this.m_playerTeamFootballers.Count; i++)
            {
                GenericFootballer itr = this.m_playerTeamFootballers[i];
                itr.timeout_update();
            }

            keyboard_switch_timeout_selected_footballer();

            Vector2 click_pt;
            if (this.IsClickAndPointDown(out click_pt))
            {
                GenericFootballer clicked_footballer = IsPointTouchFootballer(click_pt, m_playerTeamFootballers);
                if (clicked_footballer != null)
                {
                    m_timeoutSelectedFootballer = clicked_footballer;
                }
            }
            else if (this.IsClickAndPoint(out click_pt))
            {
                if (m_timeoutSelectedFootballer != null && !this.footballer_has_ball(m_timeoutSelectedFootballer))
                {
                    m_commentaryManager.notify_tutorial_command_issued();

                    click_pt = this.point_to_within_goallines_point(m_timeoutSelectedFootballer.transform.position, click_pt);

                    m_timeoutSelectedFootballer.CommandMoveTo(click_pt);
                }
            }

            if (!Input.GetKey(KeyCode.Space))
            {
                m_currentMode = LevelControllerMode.GamePlay;
                for (int i = 0; i < this.m_playerTeamFootballers.Count; i++)
                {
                    GenericFootballer itr = this.m_playerTeamFootballers[i];
                    itr.timeout_end();
                }
                Main.Unpause(PauseFlags.TimeOut);
                Main.AudioController.PlayEffect("sfx_unpause");
                UiPanelGame.inst.bgm_audio_set_paused_mode(false);
            }
        }
        else if (m_currentMode == LevelControllerMode.Opening)
        {
            mouse_target_anim_speed = 2.0f;
            //m_mouseTargetIcon.SetActive(true);
            mouse_target_icon_set_alpha(1.0f);
            m_particles.i_update(this);
            _countdown_ct -= Time.deltaTime;
            if (_countdown_ct < 4f && _last_countdown_ct > 4f)
            {
                UiPanelGame.inst._chats.push_message("3...", 2);
                Main.AudioController.PlayEffect("sfx_ready");
            }
            else if (_countdown_ct < 3f && _last_countdown_ct > 3f)
            {
                UiPanelGame.inst._chats.push_message("2...", 1);
                Main.AudioController.PlayEffect("sfx_ready");
            }
            else if (_countdown_ct < 2f && _last_countdown_ct > 2f)
            {
                UiPanelGame.inst._chats.push_message("1...", 2);
                Main.AudioController.PlayEffect("sfx_ready");
            }
            _last_countdown_ct = _countdown_ct;

            Vector3 mouse_pt = GetLastMousePointInBallBounds();
            m_mouseTargetIcon.transform.position   = mouse_pt;
            m_mouseTargetIcon.transform.localScale = Util.valv(50.0f);


            if (m_matchOpeningAnimIds.Count == 0)
            {
                m_currentMode = LevelControllerMode.GamePlay;
                //m_mouseTargetIcon.SetActive(true);

                // throw it in
                if (m_looseBalls.Count > 0)
                {
                    LooseBall lb       = m_looseBalls[0];
                    Vector3   throwDir = m_playerTeamFootballers[0].transform.position - lb.transform.position;
                    throwDir.Normalize();

                    lb.sim_initialize(lb.transform.position, throwDir * 4.0f);
                    UiPanelGame.inst.show_popup_message(0);
                    Main.AudioController.PlayEffect("sfx_go");
                }
                UiPanelGame.inst._chats.push_message("And the match is underway!", 1);
                m_enemyTeam.StartMatch();
            }
        }

        m_mouseTargetIconTheta += mouse_target_anim_speed * Util.dt_scale;
        Util.transform_set_euler_world(m_mouseTargetIcon.transform, new Vector3(0, 0, m_mouseTargetIconTheta));
    }