示例#1
0
 public MeleeBot(ContentManager content, Vector3 position, Vector3 playerPosition)
 {
     this.position = position;
     velocity      = playerPosition - position;
     velocity.Normalize();
     health  = 20;
     Model   = content.Load <Model>(@"models/meleebot");
     texture = content.Load <Texture2D>(@"textures/meleeBotTexture");
     name    = RealName.MeleeBot;
     score   = 30;
     state   = MeleeBotState.Idle;
     if (new Random().Next(2) == 0)
     {
         velDirection = 1;
     }
     else
     {
         velDirection = -1;
     }
     timeToGoBack     = TimeSpan.FromSeconds(timeToGoBackSeconds);
     timeToPause      = TimeSpan.FromSeconds(timeToPauseSeconds);
     timeToCharge     = TimeSpan.FromSeconds(timeToChargeSeconds);
     distanceToGoBack = 20;
     charging         = false;
     enabled          = true;
     //rotate(new Vector3(0, -MathHelper.ToRadians(90), 0));
 }
示例#2
0
 public override void Collision(GameEntity target)
 {
     if (target is Player && state == MeleeBotState.Attacking)
     {
         velocity     = Vector3.Zero - velocity;
         state        = MeleeBotState.Idle;
         timeToGoBack = TimeSpan.FromSeconds(timeToGoBackSeconds);
         timeToPause  = TimeSpan.FromSeconds(timeToPauseSeconds);
         timeToCharge = TimeSpan.FromSeconds(timeToChargeSeconds);
         charging     = false;
         Player p = target as Player;
         p.takeDamage(damage);
     }
     else if (target is PlayerWeapon)
     {
         target.Collision(this);
     }
     else if (target is Explosion)
     {
         target.Collision(this);
     }
     else if (target is MeleeBot)
     {
     }
 }
 public override void Collision(GameEntity target)
 {
     if (target is Player && state == MeleeBotState.Attacking)
     {
         velocity = Vector3.Zero - velocity;
         state = MeleeBotState.Idle;
         timeToGoBack = TimeSpan.FromSeconds(timeToGoBackSeconds);
         timeToPause = TimeSpan.FromSeconds(timeToPauseSeconds);
         timeToCharge = TimeSpan.FromSeconds(timeToChargeSeconds);
         charging = false;
         Player p = target as Player;
         p.takeDamage(damage);
     }
     else if (target is PlayerWeapon)
     {
         target.Collision(this);
     }
     else if (target is Explosion)
     {
         target.Collision(this);
     }
     else if (target is MeleeBot)
     {
     }
 }
 public MissileBot(ContentManager content, Vector3 position, Vector3 playerPosition)
 {
     this.position = position;
     velocity = playerPosition - position;
     velocity.Normalize();
     health = 30;
     Model = content.Load<Model>(@"models/missilebot");
     texture = content.Load<Texture2D>(@"models/rocketBotTexture");
     name = RealName.MeleeBot;
     score = 30;
     state = MeleeBotState.Idle;
     timeToFire = TimeSpan.FromSeconds(2);
     weapon = new BotMissile(content);
     enabled = true;
     rotate(new Vector3(0, -MathHelper.ToRadians(90), 0));
 }
 public MissileBot(ContentManager content, Vector3 position, Vector3 playerPosition)
 {
     this.position = position;
     velocity      = playerPosition - position;
     velocity.Normalize();
     health     = 30;
     Model      = content.Load <Model>(@"models/missilebot");
     texture    = content.Load <Texture2D>(@"models/rocketBotTexture");
     name       = RealName.MeleeBot;
     score      = 30;
     state      = MeleeBotState.Idle;
     timeToFire = TimeSpan.FromSeconds(2);
     weapon     = new BotMissile(content);
     enabled    = true;
     rotate(new Vector3(0, -MathHelper.ToRadians(90), 0));
 }
 public MeleeBot(ContentManager content, Vector3 position, Vector3 playerPosition)
 {
     this.position = position;
     velocity = playerPosition - position;
     velocity.Normalize();
     health = 20;
     Model = content.Load<Model>(@"models/meleebot");
     texture = content.Load<Texture2D>(@"textures/meleeBotTexture");
     name = RealName.MeleeBot;
     score = 30;
     state = MeleeBotState.Idle;
     if (new Random().Next(2) == 0)
     {
         velDirection = 1;
     }
     else velDirection = -1;
     timeToGoBack = TimeSpan.FromSeconds(timeToGoBackSeconds);
     timeToPause = TimeSpan.FromSeconds(timeToPauseSeconds);
     timeToCharge = TimeSpan.FromSeconds(timeToChargeSeconds);
     distanceToGoBack = 20;
     charging = false;
     enabled = true;
     //rotate(new Vector3(0, -MathHelper.ToRadians(90), 0));
 }
示例#7
0
        public void Update(GameTime gameTime, Vector3 playerPosition)
        {
            if (enabled)
            {
                Vector3 oldVel = velocity;
                oldVel.Normalize();
                if (Vector3.DistanceSquared(position, playerPosition) > 2500 && state == MeleeBotState.Idle)
                {
                    velocity = playerPosition - position;
                    velocity.Normalize();
                }
                else
                {
                    timeToPause = timeToPause.Subtract(gameTime.ElapsedGameTime);
                    if (timeToPause.TotalSeconds <= 0)
                    {
                        state = MeleeBotState.Attacking;

                        if (!charging)
                        {
                            velocity = Vector3.Zero;
                        }

                        timeToGoBack = timeToGoBack.Subtract(gameTime.ElapsedGameTime);

                        if (timeToGoBack.TotalSeconds <= 0)
                        {
                            timeToCharge = timeToCharge.Subtract(gameTime.ElapsedGameTime);
                            if (!charging)
                            {
                                velocity = position - playerPosition;
                                velocity.Normalize();
                            }

                            if (timeToCharge.TotalSeconds <= 0)
                            {
                                if (!charging)
                                {
                                    acceleration     = 1;
                                    charging         = true;
                                    positionToCharge = playerPosition;
                                }
                                else //final charge
                                {
                                    velocity = positionToCharge - position;
                                    velocity.Normalize();
                                    velocity     *= acceleration;
                                    acceleration *= 0.994f;
                                    if (Vector3.Distance(position, positionToCharge) < 4) //done charging
                                    {
                                        state        = MeleeBotState.Idle;
                                        timeToGoBack = TimeSpan.FromSeconds(timeToGoBackSeconds);
                                        timeToPause  = TimeSpan.FromSeconds(timeToPauseSeconds);
                                        timeToCharge = TimeSpan.FromSeconds(timeToChargeSeconds);
                                        charging     = false;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        velocity = Vector3.Cross(playerPosition - position, new Vector3(0, 1, 0));
                        velocity.Normalize();
                        velocity *= 0.5f;
                        velocity *= velDirection;
                        if (position.Z <= playerPosition.Z && velocity.Z < 0)
                        {
                            velDirection = 0 - velDirection;
                            velocity    *= velDirection;
                        }
                    }
                }

                position += velocity;
                velocity.Normalize();
                Vector3 newDir = playerPosition - position;
                newDir.Normalize();

                double angle = MathHelper.ToRadians(180) - Math.Atan2(newDir.Z, newDir.X);
                if (!charging)
                {
                    rotate(new Vector3(0, (float)angle - (float)rotation.Y, 0));
                }
            }
            else
            {
                position += velocity;
            }

            sphere = new BoundingSphere(position, 5);

            worldMat = Matrix.CreateScale(0.5f) * Matrix.CreateRotationY(rotation.Y - MathHelper.ToRadians(90)) * Matrix.CreateTranslation(position);
            checkBounds();
        }
        public void Update(GameTime gameTime, Vector3 playerPosition)
        {
            if (enabled)
            {
                Vector3 oldVel = velocity;
                oldVel.Normalize();
                if (Vector3.DistanceSquared(position, playerPosition) > 2500 && state == MeleeBotState.Idle)
                {
                    velocity = playerPosition - position;
                    velocity.Normalize();
                }
                else
                {
                    timeToPause = timeToPause.Subtract(gameTime.ElapsedGameTime);
                    if (timeToPause.TotalSeconds <= 0)
                    {
                        state = MeleeBotState.Attacking;

                        if (!charging)
                            velocity = Vector3.Zero;

                        timeToGoBack = timeToGoBack.Subtract(gameTime.ElapsedGameTime);

                        if (timeToGoBack.TotalSeconds <= 0)
                        {
                            timeToCharge = timeToCharge.Subtract(gameTime.ElapsedGameTime);
                            if (!charging)
                            {
                                velocity = position - playerPosition;
                                velocity.Normalize();
                            }

                            if (timeToCharge.TotalSeconds <= 0)
                            {
                                if (!charging)
                                {
                                    acceleration = 1;
                                    charging = true;
                                    positionToCharge = playerPosition;
                                }
                                else //final charge
                                {
                                    velocity = positionToCharge - position;
                                    velocity.Normalize();
                                    velocity *= acceleration;
                                    acceleration *= 0.994f;
                                    if (Vector3.Distance(position, positionToCharge) < 4) //done charging
                                    {
                                        state = MeleeBotState.Idle;
                                        timeToGoBack = TimeSpan.FromSeconds(timeToGoBackSeconds);
                                        timeToPause = TimeSpan.FromSeconds(timeToPauseSeconds);
                                        timeToCharge = TimeSpan.FromSeconds(timeToChargeSeconds);
                                        charging = false;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        velocity = Vector3.Cross(playerPosition - position, new Vector3(0, 1, 0));
                        velocity.Normalize();
                        velocity *= 0.5f;
                        velocity *= velDirection;
                        if (position.Z <= playerPosition.Z && velocity.Z < 0)
                        {
                            velDirection = 0 - velDirection;
                            velocity *= velDirection;
                        }
                    }
                }

                position += velocity;
                velocity.Normalize();
                Vector3 newDir = playerPosition - position;
                newDir.Normalize();

                double angle = MathHelper.ToRadians(180) - Math.Atan2(newDir.Z, newDir.X);
                if (!charging)
                    rotate(new Vector3(0, (float)angle - (float)rotation.Y, 0));
            }
            else
            {
                position += velocity;
            }

            sphere = new BoundingSphere(position, 5);

            worldMat = Matrix.CreateScale(0.5f) * Matrix.CreateRotationY(rotation.Y - MathHelper.ToRadians(90)) * Matrix.CreateTranslation(position);
            checkBounds();
        }