示例#1
0
    private void enemyteam_sim_update()
    {
        if (_current_mode == GenericFootballerMode.Stunned)
        {
            _stunned_vel.x          = Util.drpt(_stunned_vel.x, 0, 0.01f);
            _stunned_vel.y          = Util.drpt(_stunned_vel.y, 0, 0.01f);
            this.transform.position = Util.vec_add(this.transform.position, Util.vec_scale(_stunned_vel, Util.dt_scale));
            _stunned_mode_ct       -= Util.dt_scale;
            if (_stunned_mode_ct <= 0)
            {
                _current_mode = GenericFootballerMode.Idle;
            }
        }

        // Adjust facing direction.
        BotBase bot = this.GetComponent <BotBase>();

        if (bot != null)
        {
            Vector3 rts = _renderer.transform.localScale;
            if (bot.Steering.CurrentVelocity.x > 0.0f)
            {
                rts.x = Mathf.Abs(rts.x) * 1;
            }
            else if (bot.Steering.CurrentVelocity.x < 0.0f)
            {
                rts.x = Mathf.Abs(rts.x) * -1;
            }
            _renderer.transform.localScale = rts;
        }
    }
示例#2
0
    private void apply_bump(Vector3 vel, Vector3 hit_spot, bool do_sfx = false)
    {
        if (_current_mode != GenericFootballerMode.Stunned && _cannot_stun_ct <= 0)
        {
            if (do_sfx)
            {
                Main.AudioController.PlayEffect("sfx_hit");
            }
            if (vel.magnitude == 0)
            {
                vel = new Vector3(Util.rand_range(-1, 1), Util.rand_range(-1, 1));
            }
            int testct = 0;
            while (vel.magnitude < 2.0f && testct < 20)
            {
                vel = Util.vec_scale(vel, 1.1f);
                testct++;
            }
            vel = Util.vec_rotate_rad(vel, Util.rand_range(-1.0f, 1.0f));

            _cannot_stun_ct = Util.rand_range(30, 100);
            Main.LevelController.blood_anim_at(hit_spot, 4);
            Main.LevelController.collision_particle_at(this.transform.position);
            _stunned_vel         = vel;
            _stunned_mode_ct     = 55;
            _current_mode        = GenericFootballerMode.Stunned;
            _stunned_upwards_vel = 1.5f;
            if (Main.LevelController.footballer_has_ball(this))
            {
                Main.LevelController.m_commentaryManager.notify_event(CommentaryEvent.Fumbled, true);

                Main.LevelController.CreateLooseBall(
                    this.transform.position,
                    Util.vec_rotate_rad(Util.vec_scale(vel.normalized, 3.5f), Util.rand_range(-1.4f, 1.4f))
                    );
                Main.LevelController.m_playerTeamFootballersWithBall.Remove(this);
                Main.LevelController.m_enemyTeamFootballersWithBall.Remove(this);
                _ball_charging   = false;
                _throw_charge_ct = 0;
            }

            // reset previous command
            //_has_command_move_to_point = false;

            // ai event
            GetComponent <BotBase>().Msg_Stunned();
        }
    }
示例#3
0
    public void sim_initialize(FootballerAnimResource anims)
    {
        _id           = ++__alloct;
        _current_mode = GenericFootballerMode.Idle;
        Color color = _select_reticule.color;

        color.a = 0;
        _select_reticule.color = color;
        this.set_select_reticule_alpha(0);
        _throw_charge_ct = 0;
        this.update_calculated_velocity();

        _animator      = this.gameObject.AddComponent <SpriteAnimator>();
        _animator._tar = _renderer;
        anims.animations_add_to_animator(_animator);
        _animator.play_anim(FootballerAnimResource.ANIM_IDLE);
    }
示例#4
0
    public void CommandMoveTo(Vector2 pos)
    {
        if (!this.can_take_commands())
        {
            return;
        }
        _command_move_to_point = pos;

        if (_current_mode != GenericFootballerMode.Stunned)
        {
            _current_mode = GenericFootballerMode.CommandMoving;
        }
        _has_command_move_to_point = true;

        Main.LevelController.m_pathRenderer.clear_path(_id);
        Vector3 tar_pos = new Vector3(_command_move_to_point.x, _command_move_to_point.y);

        Main.LevelController.m_pathRenderer.id_draw_path(_id, this.transform.position, new Vector3[] { tar_pos });
    }
示例#5
0
    public void CommandMoveTo(Vector2 pos)
    {
        if (!this.can_take_commands()) return;
        _command_move_to_point = pos;

        if (_current_mode != GenericFootballerMode.Stunned) {
            _current_mode = GenericFootballerMode.CommandMoving;
        }
        _has_command_move_to_point = true;

        Main.LevelController.m_pathRenderer.clear_path(_id);
        Vector3 tar_pos = new Vector3(_command_move_to_point.x,_command_move_to_point.y);
        Main.LevelController.m_pathRenderer.id_draw_path(_id,this.transform.position,new Vector3[] { tar_pos });
    }
示例#6
0
    private void playerteam_sim_update()
    {
        if (Main.LevelController.footballer_has_ball(this)) {
            this.set_select_reticule_alpha(0.5f);
        } else {
            this.set_select_reticule_alpha(0.0f);
        }

        Vector3 last_pos = transform.position;

        if (!Main.LevelController.m_gameBounds.OverlapPoint(transform.position) && _stunned_mode_ct <= 0) {
            _current_mode = GenericFootballerMode.MoveBackIntoBounds;
        } else if (Main.LevelController.footballer_has_ball(this)) {
            _current_mode = GenericFootballerMode.PlayerTeamHasBall;
        } else if (_current_mode == GenericFootballerMode.PlayerTeamHasBall && !Main.LevelController.footballer_has_ball(this)) {
            _current_mode = GenericFootballerMode.Idle;
        }

        if (_current_mode == GenericFootballerMode.MoveBackIntoBounds) {
            Vector3 tar_pos = Main.LevelController.m_minGameBounds.bounds.ClosestPoint(transform.position);
            tar_pos.z = 0;
            float speed = this.get_move_speed();
            Vector3 delta =  Util.vec_sub(tar_pos,transform.position);
            if (delta.magnitude < speed) {
                transform.position = tar_pos;
            } else {
                Vector3 dir = delta.normalized;
                float mag = delta.magnitude;
                dir.Scale(Util.valv(speed));
                transform.position = Util.vec_add(transform.position,dir);
            }

            if (Main.LevelController.m_gameBounds.OverlapPoint(transform.position)) {
                if (_has_command_move_to_point) {
                    _current_mode = GenericFootballerMode.CommandMoving;
                } else {
                    _current_mode = GenericFootballerMode.Idle;
                }
            }

        } else if (_current_mode == GenericFootballerMode.Stunned) {
            Main.LevelController.m_pathRenderer.clear_path(_id);
            _stunned_vel.x = Util.drpt(_stunned_vel.x,0,0.01f);
            _stunned_vel.y = Util.drpt(_stunned_vel.y,0,0.01f);
            this.transform.position = Util.vec_add(this.transform.position,Util.vec_scale(_stunned_vel,Util.dt_scale));
            _stunned_mode_ct -= Util.dt_scale;
            if (_stunned_mode_ct <= 0) {
                if (_has_command_move_to_point) {
                    _current_mode = GenericFootballerMode.CommandMoving;
                } else {
                    _current_mode = GenericFootballerMode.Idle;
                }
            }

        } else if (_current_mode == GenericFootballerMode.CatchWait) {
            _waitdelay -= Util.dt_scale;
            if (_waitdelay < 0) _current_mode = GenericFootballerMode.Idle;

        } else if (_current_mode == GenericFootballerMode.PlayerTeamHasBall) {
            _has_command_move_to_point = false;
            Vector3 delta =  Util.vec_sub(Main.LevelController.GetLastMousePointInBallBounds(),transform.position);
            Vector3 dir = delta.normalized;
            float mag = delta.magnitude;
            Main.LevelController.m_pathRenderer.clear_path(_id);

            if (Input.GetMouseButton(0)) {
                _ball_charging = true;
                _throw_charge_ct = Mathf.Clamp(Mathf.Min(_throw_charge_ct+Util.dt_scale*10.0f,mag),0,700);

                Vector3 p0 = this.transform.position;
                Vector3 p3 = Util.vec_add(p0,Util.vec_scale(dir,_throw_charge_ct));
                Vector3 p1 = new Vector3(
                    Util.lerp(p0.x,p3.x,0.25f),
                    Util.lerp(p0.y,p3.y,0.25f),
                    -150
                );
                Vector3 p2 = new Vector3(
                    Util.lerp(p0.x,p3.x,0.75f),
                    Util.lerp(p0.y,p3.y,0.75f),
                    -150
                );
                __tmp.Clear();
                for (float i = 0; i < 1.0f; i += 0.125f) {
                    __tmp.Add(Util.bezier_val_for_t(p0,p1,p2,p3,i));
                }
                __tmp.Add(p3);
                Main.LevelController.m_pathRenderer.id_draw_path(_id,this.transform.position,__tmp.ToArray());

            } else if (!Input.GetMouseButton(0) && _ball_charging) {
                if (_throw_charge_ct > 100) {
                    throw_ball(dir, _throw_charge_ct);
                }
                _ball_charging = false;
                _throw_charge_ct = 0;

            } else {
                _throw_charge_ct = 0;
                float scf = Mathf.Clamp(mag,0,200)/200.0f;
                float speed = this.get_move_speed_active() * Util.dt_scale;
                dir.Scale(Util.valv(scf*speed));
                if (transform.position.x + dir.x > Main.LevelController._left_goal_line.transform.position.x && transform.position.x + dir.x < Main.LevelController._right_goal_line.transform.position.x){
                    transform.position = Util.vec_add(transform.position,dir);
                }
            }

        } else if (_current_mode == GenericFootballerMode.Idle) {

        } else if (_current_mode == GenericFootballerMode.CommandMoving) {
            float speed = this.get_move_speed() * Util.dt_scale;
            Vector3 delta = Util.vec_sub(new Vector3(_command_move_to_point.x,_command_move_to_point.y),transform.position);
            if (delta.magnitude <= speed) {
                transform.position = new Vector3(_command_move_to_point.x,_command_move_to_point.y);
                _current_mode = GenericFootballerMode.Idle;
                _has_command_move_to_point = false;

            } else {
                Vector3 dir = delta.normalized;
                dir.Scale(Util.valv(speed));
                transform.position = Util.vec_add(transform.position,dir);
            }

        }

        Vector3 rts = _renderer.transform.localScale;
        if (Main.LevelController.footballer_has_ball(this) && _ball_charging) {
            if (Main.LevelController.GetLastMousePointInBallBounds().x > transform.position.x) {
                rts.x = Mathf.Abs(rts.x) * 1;
            } else {
                rts.x = Mathf.Abs(rts.x) * -1;
            }

        } else if (transform.position.x > last_pos.x) {
            rts.x = Mathf.Abs(rts.x) * 1;
        } else if (transform.position.x < last_pos.x) {
            rts.x = Mathf.Abs(rts.x) * -1;
        }
        _renderer.transform.localScale = rts;
    }
示例#7
0
    private void enemyteam_sim_update()
    {
        if (_current_mode == GenericFootballerMode.Stunned) {
            _stunned_vel.x = Util.drpt(_stunned_vel.x,0,0.01f);
            _stunned_vel.y = Util.drpt(_stunned_vel.y,0,0.01f);
            this.transform.position = Util.vec_add(this.transform.position,Util.vec_scale(_stunned_vel,Util.dt_scale));
            _stunned_mode_ct -= Util.dt_scale;
            if (_stunned_mode_ct <= 0) _current_mode = GenericFootballerMode.Idle;
        }

        // Adjust facing direction.
        BotBase bot = this.GetComponent<BotBase>();
        if (bot != null) {
            Vector3 rts = _renderer.transform.localScale;
            if (bot.Steering.CurrentVelocity.x > 0.0f) {
                rts.x = Mathf.Abs(rts.x) * 1;
            } else if (bot.Steering.CurrentVelocity.x < 0.0f) {
                rts.x = Mathf.Abs(rts.x) * -1;
            }
            _renderer.transform.localScale = rts;
        }
    }
示例#8
0
    private void apply_bump(Vector3 vel, Vector3 hit_spot, bool do_sfx = false)
    {
        if (_current_mode != GenericFootballerMode.Stunned && _cannot_stun_ct <= 0) {
            if (do_sfx) {
                Main.AudioController.PlayEffect("sfx_hit");
            }
            if (vel.magnitude == 0) vel = new Vector3(Util.rand_range(-1,1),Util.rand_range(-1,1));
            int testct = 0;
            while (vel.magnitude < 2.0f && testct < 20) {
                vel = Util.vec_scale(vel,1.1f);
                testct++;
            }
            vel = Util.vec_rotate_rad(vel,Util.rand_range(-1.0f,1.0f));

            _cannot_stun_ct = Util.rand_range(30,100);
            Main.LevelController.blood_anim_at(hit_spot,4);
            Main.LevelController.collision_particle_at(this.transform.position);
            _stunned_vel = vel;
            _stunned_mode_ct = 55;
            _current_mode = GenericFootballerMode.Stunned;
            _stunned_upwards_vel = 1.5f;
            if (Main.LevelController.footballer_has_ball(this)) {
                Main.LevelController.m_commentaryManager.notify_event(CommentaryEvent.Fumbled,true);

                Main.LevelController.CreateLooseBall(
                    this.transform.position,
                    Util.vec_rotate_rad(Util.vec_scale(vel.normalized,3.5f),Util.rand_range(-1.4f,1.4f))
                );
                Main.LevelController.m_playerTeamFootballersWithBall.Remove(this);
                Main.LevelController.m_enemyTeamFootballersWithBall.Remove(this);
                _ball_charging = false;
                _throw_charge_ct = 0;
            }

            // reset previous command
            //_has_command_move_to_point = false;

            // ai event
            GetComponent<BotBase>().Msg_Stunned();
        }
    }
示例#9
0
    public void sim_initialize(FootballerAnimResource anims)
    {
        _id = ++__alloct;
        _current_mode = GenericFootballerMode.Idle;
        Color color = _select_reticule.color;
        color.a = 0;
        _select_reticule.color = color;
        this.set_select_reticule_alpha(0);
        _throw_charge_ct = 0;
        this.update_calculated_velocity();

        _animator = this.gameObject.AddComponent<SpriteAnimator>();
        _animator._tar = _renderer;
        anims.animations_add_to_animator(_animator);
        _animator.play_anim(FootballerAnimResource.ANIM_IDLE);
    }
示例#10
0
 public void set_wait_delay(float tar)
 {
     _waitdelay = tar;
     _current_mode = GenericFootballerMode.CatchWait;
 }
示例#11
0
    private void playerteam_sim_update()
    {
        if (Main.LevelController.footballer_has_ball(this))
        {
            this.set_select_reticule_alpha(0.5f);
        }
        else
        {
            this.set_select_reticule_alpha(0.0f);
        }

        Vector3 last_pos = transform.position;

        if (!Main.LevelController.m_gameBounds.OverlapPoint(transform.position) && _stunned_mode_ct <= 0)
        {
            _current_mode = GenericFootballerMode.MoveBackIntoBounds;
        }
        else if (Main.LevelController.footballer_has_ball(this))
        {
            _current_mode = GenericFootballerMode.PlayerTeamHasBall;
        }
        else if (_current_mode == GenericFootballerMode.PlayerTeamHasBall && !Main.LevelController.footballer_has_ball(this))
        {
            _current_mode = GenericFootballerMode.Idle;
        }

        if (_current_mode == GenericFootballerMode.MoveBackIntoBounds)
        {
            Vector3 tar_pos = Main.LevelController.m_minGameBounds.bounds.ClosestPoint(transform.position);
            tar_pos.z = 0;
            float   speed = this.get_move_speed();
            Vector3 delta = Util.vec_sub(tar_pos, transform.position);
            if (delta.magnitude < speed)
            {
                transform.position = tar_pos;
            }
            else
            {
                Vector3 dir = delta.normalized;
                float   mag = delta.magnitude;
                dir.Scale(Util.valv(speed));
                transform.position = Util.vec_add(transform.position, dir);
            }

            if (Main.LevelController.m_gameBounds.OverlapPoint(transform.position))
            {
                if (_has_command_move_to_point)
                {
                    _current_mode = GenericFootballerMode.CommandMoving;
                }
                else
                {
                    _current_mode = GenericFootballerMode.Idle;
                }
            }
        }
        else if (_current_mode == GenericFootballerMode.Stunned)
        {
            Main.LevelController.m_pathRenderer.clear_path(_id);
            _stunned_vel.x          = Util.drpt(_stunned_vel.x, 0, 0.01f);
            _stunned_vel.y          = Util.drpt(_stunned_vel.y, 0, 0.01f);
            this.transform.position = Util.vec_add(this.transform.position, Util.vec_scale(_stunned_vel, Util.dt_scale));
            _stunned_mode_ct       -= Util.dt_scale;
            if (_stunned_mode_ct <= 0)
            {
                if (_has_command_move_to_point)
                {
                    _current_mode = GenericFootballerMode.CommandMoving;
                }
                else
                {
                    _current_mode = GenericFootballerMode.Idle;
                }
            }
        }
        else if (_current_mode == GenericFootballerMode.CatchWait)
        {
            _waitdelay -= Util.dt_scale;
            if (_waitdelay < 0)
            {
                _current_mode = GenericFootballerMode.Idle;
            }
        }
        else if (_current_mode == GenericFootballerMode.PlayerTeamHasBall)
        {
            _has_command_move_to_point = false;
            Vector3 delta = Util.vec_sub(Main.LevelController.GetLastMousePointInBallBounds(), transform.position);
            Vector3 dir   = delta.normalized;
            float   mag   = delta.magnitude;
            Main.LevelController.m_pathRenderer.clear_path(_id);

            if (Input.GetMouseButton(0))
            {
                _ball_charging   = true;
                _throw_charge_ct = Mathf.Clamp(Mathf.Min(_throw_charge_ct + Util.dt_scale * 10.0f, mag), 0, 700);

                Vector3 p0 = this.transform.position;
                Vector3 p3 = Util.vec_add(p0, Util.vec_scale(dir, _throw_charge_ct));
                Vector3 p1 = new Vector3(
                    Util.lerp(p0.x, p3.x, 0.25f),
                    Util.lerp(p0.y, p3.y, 0.25f),
                    -150
                    );
                Vector3 p2 = new Vector3(
                    Util.lerp(p0.x, p3.x, 0.75f),
                    Util.lerp(p0.y, p3.y, 0.75f),
                    -150
                    );
                __tmp.Clear();
                for (float i = 0; i < 1.0f; i += 0.125f)
                {
                    __tmp.Add(Util.bezier_val_for_t(p0, p1, p2, p3, i));
                }
                __tmp.Add(p3);
                Main.LevelController.m_pathRenderer.id_draw_path(_id, this.transform.position, __tmp.ToArray());
            }
            else if (!Input.GetMouseButton(0) && _ball_charging)
            {
                if (_throw_charge_ct > 100)
                {
                    throw_ball(dir, _throw_charge_ct);
                }
                _ball_charging   = false;
                _throw_charge_ct = 0;
            }
            else
            {
                _throw_charge_ct = 0;
                float scf   = Mathf.Clamp(mag, 0, 200) / 200.0f;
                float speed = this.get_move_speed_active() * Util.dt_scale;
                dir.Scale(Util.valv(scf * speed));
                if (transform.position.x + dir.x > Main.LevelController._left_goal_line.transform.position.x && transform.position.x + dir.x < Main.LevelController._right_goal_line.transform.position.x)
                {
                    transform.position = Util.vec_add(transform.position, dir);
                }
            }
        }
        else if (_current_mode == GenericFootballerMode.Idle)
        {
        }
        else if (_current_mode == GenericFootballerMode.CommandMoving)
        {
            float   speed = this.get_move_speed() * Util.dt_scale;
            Vector3 delta = Util.vec_sub(new Vector3(_command_move_to_point.x, _command_move_to_point.y), transform.position);
            if (delta.magnitude <= speed)
            {
                transform.position         = new Vector3(_command_move_to_point.x, _command_move_to_point.y);
                _current_mode              = GenericFootballerMode.Idle;
                _has_command_move_to_point = false;
            }
            else
            {
                Vector3 dir = delta.normalized;
                dir.Scale(Util.valv(speed));
                transform.position = Util.vec_add(transform.position, dir);
            }
        }

        Vector3 rts = _renderer.transform.localScale;

        if (Main.LevelController.footballer_has_ball(this) && _ball_charging)
        {
            if (Main.LevelController.GetLastMousePointInBallBounds().x > transform.position.x)
            {
                rts.x = Mathf.Abs(rts.x) * 1;
            }
            else
            {
                rts.x = Mathf.Abs(rts.x) * -1;
            }
        }
        else if (transform.position.x > last_pos.x)
        {
            rts.x = Mathf.Abs(rts.x) * 1;
        }
        else if (transform.position.x < last_pos.x)
        {
            rts.x = Mathf.Abs(rts.x) * -1;
        }
        _renderer.transform.localScale = rts;
    }