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; } }
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(); } }
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); }
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 }); }
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 }); }
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; }
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; } }
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(); } }
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); }
public void set_wait_delay(float tar) { _waitdelay = tar; _current_mode = GenericFootballerMode.CatchWait; }
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; }