CheckCollision() public method

public CheckCollision ( Vector2 position ) : bool?
position Vector2
return bool?
コード例 #1
0
ファイル: Powerup.cs プロジェクト: GarethIW/LD29
        public override void Update(GameTime gameTime, Map gameMap)
        {
            Speed = Vector2.Lerp(Speed, Vector2.Zero, 0.05f);

            if (Vector2.Distance(Ship.Instance.Position, Position) < 50f)
            {
                Vector2 dir = Ship.Instance.Position - Position;
                dir.Normalize();
                Speed += dir*0.25f;
            }
                //Position = Vector2.Lerp(Position, Ship.Instance.Position, 0.1f);

            if (gameMap.CheckCollision(Position + new Vector2(Speed.X, 0)).GetValueOrDefault())
            {
                Speed.X = -(Speed.X * (0.1f + Helper.RandomFloat(0.4f)));
                Speed.Y *= 0.9f;
            }

            if (gameMap.CheckCollision(Position + new Vector2(0, Speed.Y)).GetValueOrDefault())
            {
                Speed.Y = -(Speed.Y * (0.1f + Helper.RandomFloat(0.4f)));
                Speed.X *= 0.9f;
            }

            base.Update(gameTime);
        }
コード例 #2
0
ファイル: Enemy.cs プロジェクト: GarethIW/LD29
        public virtual void CheckMapCollisions(Map gameMap)
        {
            // Check upward collision
            if (Speed.Y < 0)
                for (int x = HitBox.Left + 2; x <= HitBox.Right - 2; x += 2)
                {
                    bool? coll = gameMap.CheckCollision(new Vector2(x, HitBox.Top + Speed.Y));
                    if (coll.HasValue && coll.Value) Speed.Y = -Speed.Y;
                }

            // Check downward collision
            if (Speed.Y > 0)
                for (int x = HitBox.Left + 2; x <= HitBox.Right - 2; x += 2)
                {
                    bool? coll = gameMap.CheckCollision(new Vector2(x, HitBox.Bottom + Speed.Y));
                    if (coll.HasValue && coll.Value) Speed.Y = -Speed.Y;
                }

            // Check left collision
            if (Speed.X < 0)
                for (int y = HitBox.Top + 2; y <= HitBox.Bottom - 2; y += 2)
                {
                    bool? coll = gameMap.CheckCollision(new Vector2(HitBox.Left + Speed.X, y));
                    if (coll.HasValue && coll.Value)
                    {
                        Speed.X = -Speed.X;
                    }
                }

            // Check right collision
            if (Speed.X > 0)
                for (int y = HitBox.Top + 2; y <= HitBox.Bottom - 2; y += 2)
                {
                    bool? coll = gameMap.CheckCollision(new Vector2(HitBox.Right + Speed.X, y));
                    if (coll.HasValue && coll.Value)
                    {
                        Speed.X = -Speed.X;
                    }
                }
        }
コード例 #3
0
        void DoCollisions(Map gameMap, HeroDude gameHero)
        {
            bool LCollision = false;
            bool RCollision = false;
            bool UCollision = false;
            bool DCollision = false;

            if (Speed.X > 0f)
            {
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, 0f))) RCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, -0.4f))) RCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, 0.4f))) RCollision = true;
                for (int i = 0; i < VehicleController.Instance.Vehicles.Count; i++)
                {
                    if (Vector2.Distance(VehicleController.Instance.Vehicles[i].Position, Position) > 500f) continue;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, 0f), VehicleController.Instance.Vehicles[i].CollisionVerts)) RCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, -0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) RCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, 0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) RCollision = true;
                }
                for(int d=0;d<EnemyController.Instance.Enemies.Count;d++)
                {
                    if (Vector2.Distance(EnemyController.Instance.Enemies[d].Position, Position) > 500f) continue;
                    if (EnemyController.Instance.Enemies[d].Dead || EnemyController.Instance.Enemies[d] == this) continue;

                    if ((Helper.PointOnCircle(ref Position, 50, 0f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) RCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, -0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) RCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, 0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) RCollision = true;
                }
                if (this is AIDude)
                {
                    if ((Helper.PointOnCircle(ref Position, 50, 0f) - gameHero.Position).Length() < 40f) RCollision = true;
                if ((Helper.PointOnCircle(ref Position, 50, -0.4f) - gameHero.Position).Length() < 40f) RCollision = true;
                if ((Helper.PointOnCircle(ref Position, 50, 0.4f) - gameHero.Position).Length() < 40f) RCollision = true;
                }
            }

            if (Speed.X < 0f)
            {
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, MathHelper.Pi))) LCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, MathHelper.Pi - 0.4f))) LCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, MathHelper.Pi + 0.4f))) LCollision = true;
                for (int i = 0; i < VehicleController.Instance.Vehicles.Count; i++)
                {
                    if (Vector2.Distance(VehicleController.Instance.Vehicles[i].Position, Position) > 500f) continue;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, MathHelper.Pi), VehicleController.Instance.Vehicles[i].CollisionVerts)) LCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, MathHelper.Pi - 0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) LCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, MathHelper.Pi + 0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) LCollision = true;
                }
                for (int d = 0; d < EnemyController.Instance.Enemies.Count; d++)
                {
                    if (Vector2.Distance(EnemyController.Instance.Enemies[d].Position, Position) > 500f) continue;
                    if (EnemyController.Instance.Enemies[d].Dead || EnemyController.Instance.Enemies[d] == this) continue;

                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.Pi) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) LCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.Pi - 0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) LCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.Pi + 0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) LCollision = true;
                }
                if (this is AIDude)
                {
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.Pi) - gameHero.Position).Length() < 40f) LCollision = true;
                if ((Helper.PointOnCircle(ref Position, 50, MathHelper.Pi - 0.4f) - gameHero.Position).Length() < 40f) LCollision = true;
                if ((Helper.PointOnCircle(ref Position, 50, MathHelper.Pi + 0.4f) - gameHero.Position).Length() < 40f) LCollision = true;
                }
            }

            if (Speed.Y < 0f)
            {
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi)))) UCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) - 0.4f))) UCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) + 0.4f))) UCollision = true;
                for (int i = 0; i < VehicleController.Instance.Vehicles.Count; i++)
                {
                    if (Vector2.Distance(VehicleController.Instance.Vehicles[i].Position, Position) > 500f) continue;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi)), VehicleController.Instance.Vehicles[i].CollisionVerts)) UCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) - 0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) UCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) + 0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) UCollision = true;
                }
                for (int d = 0; d < EnemyController.Instance.Enemies.Count; d++)
                {
                    if (Vector2.Distance(EnemyController.Instance.Enemies[d].Position, Position) > 500f) continue;
                    if (EnemyController.Instance.Enemies[d].Dead || EnemyController.Instance.Enemies[d] == this) continue;

                    if ((Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi)) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) UCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) - 0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) UCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) + 0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) UCollision = true;
                }
                if (this is AIDude)
                {
                    if ((Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi)) - gameHero.Position).Length() < 40f) UCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) - 0.4f) - gameHero.Position).Length() < 40f) UCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, (MathHelper.PiOver2 + MathHelper.Pi) + 0.4f) - gameHero.Position).Length() < 40f) UCollision = true;
                }
            }

            if (Speed.Y > 0f)
            {
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2))) DCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 - 0.4f))) DCollision = true;
                if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 + 0.4f))) DCollision = true;
                for (int i = 0; i < VehicleController.Instance.Vehicles.Count; i++)
                {
                    if (Vector2.Distance(VehicleController.Instance.Vehicles[i].Position, Position) > 500f) continue;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2), VehicleController.Instance.Vehicles[i].CollisionVerts)) DCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 - 0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) DCollision = true;
                    if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 + 0.4f), VehicleController.Instance.Vehicles[i].CollisionVerts)) DCollision = true;
                }
                for(int d=0;d<EnemyController.Instance.Enemies.Count;d++)
                {
                    if (Vector2.Distance(EnemyController.Instance.Enemies[d].Position, Position) > 500f) continue;
                    if (EnemyController.Instance.Enemies[d].Dead || EnemyController.Instance.Enemies[d] == this) continue;

                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) DCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 - 0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) DCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 + 0.4f) - EnemyController.Instance.Enemies[d].Position).Length() < 40f) DCollision = true;
                }
                if (this is AIDude)
                {
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2) - gameHero.Position).Length() < 40f) DCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 - 0.4f) - gameHero.Position).Length() < 40f) DCollision = true;
                    if ((Helper.PointOnCircle(ref Position, 50, MathHelper.PiOver2 + 0.4f) - gameHero.Position).Length() < 40f) DCollision = true;
                }
            }

            if (Speed.X > 0f && RCollision) Speed.X = 0f;
            if (Speed.X < 0f && LCollision) Speed.X = 0f;
            if (Speed.Y > 0f && DCollision) Speed.Y = 0f;
            if (Speed.Y < 0f && UCollision) Speed.Y = 0f;

            if (UCollision || DCollision || LCollision || RCollision) Collided();
        }
コード例 #4
0
        internal bool LineCollision(Vector2 testPos, Map gameMap, bool ignoreVehicles)
        {
            Vector2 testVector = Position;
            Vector2 testLine = (testPos - Position);

            while ((testVector - testPos).Length() > 30f)
            {
                if (gameMap.CheckCollision(testVector)) return true;
                if(VehicleController.Instance.CheckVehicleCollision(testVector) && !ignoreVehicles) return true;
                testVector += (testLine / 50f);
            }
            return false;
        }
コード例 #5
0
ファイル: ParticleController.cs プロジェクト: GarethIW/Hunted
        public void Update(GameTime gameTime, Map gameMap)
        {
            foreach (Particle p in Particles.Where(part => part.Active))
            {
                p.Life -= gameTime.ElapsedGameTime.TotalMilliseconds;
                p.Position += p.Velocity;
                p.Rotation += p.RotationSpeed;

                if (p.CanCollide && gameMap.CheckCollision(p.Position) == true)
                {
                    p.Velocity = Vector2.Zero;
                    p.RotationSpeed = 0f;
                }

                if (p.Life <= 0)
                {
                    p.Alpha -= 0.01f;
                    if (p.Alpha < 0.05f) p.Active = false;
                }

                switch (p.Special)
                {
                    case SpecialParticle.Blood:
                        if (p.Scale > 1f) p.Scale -= 0.1f;
                        p.Velocity *= 0.9f;
                        if(p.Scale<=1f)
                        //if (p.Velocity.Length() < 0.05f)
                        {
                            p.Velocity = Vector2.Zero;
                            p.RotationSpeed = 0f;
                        }
                        break;
                    case SpecialParticle.BloodPool:
                        p.RotationSpeed = 0f;
                        p.Scale = MathHelper.Lerp(p.Scale, 8f, 0.01f);

                        break;
                    case SpecialParticle.Smoke:
                        p.Scale = MathHelper.Lerp(p.Scale, 2f, 0.01f);

                        break;
                }
            }

            Particles.RemoveAll(part => !part.Active);
        }
コード例 #6
0
ファイル: Vehicle.cs プロジェクト: GarethIW/Hunted
        internal virtual void DoCollisions(Map gameMap)
        {
            bool Collision = false;
            Vector2 test = Speed;
            test.Normalize();
            float rot = Helper.V2ToAngle(test);

            if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, rot))) Collision = true;
            if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, rot -0.2f))) Collision = true;
            if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, rot + 0.2f))) Collision = true;
            foreach (Vehicle veh in VehicleController.Instance.Vehicles)
            {
                if (veh == this) continue;
                if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, rot), veh.CollisionVerts)) Collision = true;
                if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, rot - 0.2f), veh.CollisionVerts)) Collision = true;
                if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, rot + 0.2f), veh.CollisionVerts)) Collision = true;
            }
            if (Collision)
            {
                Collided();
            }

            //bool LCollision = false;
            //bool RCollision = false;
            //bool UCollision = false;
            //bool DCollision = false;

            //if (Speed.X > 0f)
            //{
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, 0f))) RCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, -0.2f))) RCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, 0.2f))) RCollision = true;
            //    foreach (Vehicle veh in VehicleController.Instance.Vehicles)
            //    {
            //        if (veh == this) continue;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, 0f), veh.CollisionVerts)) RCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, -0.2f), veh.CollisionVerts)) RCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, 0.2f), veh.CollisionVerts)) RCollision = true;
            //    }
            //}

            //if (Speed.X < 0f)
            //{
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, MathHelper.Pi))) LCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, MathHelper.Pi - 0.2f))) LCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, MathHelper.Pi + 0.2f))) LCollision = true;
            //    foreach (Vehicle veh in VehicleController.Instance.Vehicles)
            //    {
            //        if (veh == this) continue;

            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, MathHelper.Pi), veh.CollisionVerts)) LCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, MathHelper.Pi - 0.2f), veh.CollisionVerts)) LCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, MathHelper.Pi + 0.2f), veh.CollisionVerts)) LCollision = true;
            //    }
            //}

            //if (Speed.Y < 0f)
            //{
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, (MathHelper.PiOver2 + MathHelper.Pi)))) UCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, (MathHelper.PiOver2 + MathHelper.Pi) - 0.2f))) UCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, (MathHelper.PiOver2 + MathHelper.Pi) + 0.2f))) UCollision = true;
            //    foreach (Vehicle veh in VehicleController.Instance.Vehicles)
            //    {
            //        if (veh == this) continue;

            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, (MathHelper.PiOver2 + MathHelper.Pi)), veh.CollisionVerts)) UCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, (MathHelper.PiOver2 + MathHelper.Pi) - 0.2f), veh.CollisionVerts)) UCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, (MathHelper.PiOver2 + MathHelper.Pi) + 0.2f), veh.CollisionVerts)) UCollision = true;
            //    }
            //}

            //if (Speed.Y > 0f)
            //{
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, MathHelper.PiOver2))) DCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, MathHelper.PiOver2 - 0.2f))) DCollision = true;
            //    if (gameMap.CheckCollision(Helper.PointOnCircle(ref Position, 135, MathHelper.PiOver2 + 0.2f))) DCollision = true;
            //    foreach (Vehicle veh in VehicleController.Instance.Vehicles)
            //    {
            //        if (veh == this) continue;

            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, MathHelper.PiOver2), veh.CollisionVerts)) DCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, MathHelper.PiOver2 - 0.2f), veh.CollisionVerts)) DCollision = true;
            //        if (Helper.IsPointInShape(Helper.PointOnCircle(ref Position, 135, MathHelper.PiOver2 + 0.2f), veh.CollisionVerts)) DCollision = true;
            //    }
            //}

            //if (Speed.X > 0f && RCollision) Speed.X = 0f;
            //if (Speed.X < 0f && LCollision) Speed.X = 0f;
            //if (Speed.Y > 0f && DCollision) Speed.Y = 0f;
            //if (Speed.Y < 0f && UCollision) Speed.Y = 0f;

            //if (UCollision || DCollision || LCollision || RCollision)
            //    Collided();
        }
コード例 #7
0
ファイル: Projectile.cs プロジェクト: GarethIW/LD29
        public override void Update(GameTime gameTime, Map gameMap)
        {
            Rotation = Helper.V2ToAngle(Speed);

            Life -= gameTime.ElapsedGameTime.TotalMilliseconds;
            if (Life <= 0)
            {
                Active = false;
                if(Type== ProjectileType.Bomb || Type== ProjectileType.Seeker) Explode();
            }

            bool? coll = gameMap.CheckCollision(Position);
            if (coll.HasValue && coll.Value)
            {
                Active=false;
                if (Type == ProjectileType.Bomb || Type == ProjectileType.Seeker) Explode();
                else RaiseDust();
            }

            switch (Type)
            {
                case ProjectileType.Forward1:
                    if(Position.Y>260 && Helper.Random.Next(5)==0)
                        ParticleController.Instance.Add(Position,
                                   -Speed * Helper.RandomFloat(0f,0.3f),
                                   0, 200 + Helper.Random.NextDouble() * 500, 100,
                                   false, false,
                                   new Rectangle(0, 0, 2, 2),
                                   new Color(new Vector3(1f) * (0.25f + Helper.RandomFloat(0.5f))),
                                   ParticleFunctions.Smoke,
                                   1f, 0f, 0f,
                                   1, ParticleBlend.Additive);
                    break;
                case ProjectileType.Bomb:
                    Speed.Y += (Position.Y > 260 ? 0.01f : 0.1f);
                    Rectangle particleRect = Position.Y > 260 ? new Rectangle(128, 0, 16, 16) : new Rectangle(0, 0, 16, 16);
                    ParticleController.Instance.Add(Position,
                                   new Vector2(-0.05f + Helper.RandomFloat(0.1f), -0.1f),
                                   0, Helper.Random.NextDouble() * 1000, Helper.Random.NextDouble() * 1000,
                                   false, false,
                                   particleRect,
                                   new Color(new Vector3(1f) * (0.25f + Helper.RandomFloat(0.5f))),
                                   //(Position.Y > 260) ? ParticleFunctions.FadeInOut : ParticleFunctions.Smoke,
                                   ParticleFunctions.Smoke,
                                   0.25f, 0f, 0f,
                                   1, Position.Y > 260 ? ParticleBlend.Alpha :ParticleBlend.Additive);
                    break;
                case ProjectileType.Seeker:
                    if (!EnemyOwner)
                    {
                        Enemy e =
                            EnemyController.Instance.Enemies.OrderBy(en => Vector2.Distance(en.Position, Position))
                                .FirstOrDefault();
                        if (e != null)
                            Target = e.Position;
                    }
                    else
                    {
                        Target = Ship.Instance.Position;
                    }
                    Vector2 dir = Target - Position;
                    dir.Normalize();
                    Speed += dir*0.5f;
                    Speed = Vector2.Lerp(Speed, Vector2.Zero, 0.1f);

                    Rectangle pRect = Position.Y > 260 ? new Rectangle(128, 0, 16, 16) : new Rectangle(0, 0, 8, 8);
                    ParticleController.Instance.Add(Position,
                                   new Vector2(-0.05f + Helper.RandomFloat(0.1f), -0.05f + Helper.RandomFloat(0.1f)),
                                   0, Helper.Random.NextDouble() * 1000, Helper.Random.NextDouble() * 1000,
                                   false, false,
                                   pRect,
                                   new Color(new Vector3(1f) * (0.25f + Helper.RandomFloat(0.5f))),
                                   //(Position.Y > 260) ? ParticleFunctions.FadeInOut : ParticleFunctions.Smoke,
                                   ParticleFunctions.Smoke,
                                   0.25f, 0f, 0f,
                                   1, Position.Y > 260 ? ParticleBlend.Alpha :ParticleBlend.Additive);
                    break;
                case ProjectileType.GorgerAcid:
                    Speed.X = MathHelper.Lerp(Speed.X,0f,0.1f);
                    if (Speed.X < -0.1f || Speed.X > 0.1f)
                    {
                        ParticleController.Instance.Add(Position,
                            Vector2.Zero,
                            100, 0, 100,
                            false, false,
                            new Rectangle(0, 0, 3, 3),
                            new Color(new Vector3(0f, 1f, 0f)*(0.25f + Helper.RandomFloat(0.5f))),
                            ParticleFunctions.FadeInOut,
                            1f, Helper.RandomFloat(0f, MathHelper.Pi), Helper.RandomFloat(-0.01f, 0.01f),
                            1, ParticleBlend.Alpha);
                    }
                    else
                    {
                        if (Helper.Random.Next(20) == 0)
                            ParticleController.Instance.Add(Position,
                                Vector2.Zero,
                                50, 1000, 500,
                                false, false,
                                new Rectangle(0, 0, 16, 16),
                                new Color(new Vector3(0f, 1f, 0f)*(0.25f + Helper.RandomFloat(0.5f))),
                                ParticleFunctions.Acid,
                                0.25f, Helper.RandomFloat(0f, MathHelper.Pi), Helper.RandomFloat(-0.01f, 0.01f),
                                1, ParticleBlend.Additive);
                    }
                    break;
                case ProjectileType.EyesPew:
                    if (Position.Y < 260) Active = false;
                    break;
            }

            base.Update(gameTime, gameMap);
        }
コード例 #8
0
ファイル: EnemyController.cs プロジェクト: GarethIW/LD29
        private Vector2 FindSpawnLoc(Map gameMap, bool underWater)
        {
            Vector2 returnLoc = new Vector2();

            while (true)
            {
                if (!underWater) returnLoc.Y = Helper.RandomFloat(64, 200);
                else returnLoc.Y = Helper.RandomFloat(300, (gameMap.TileHeight*gameMap.Height) - 64);

                returnLoc.X = Helper.RandomFloat(64, (gameMap.TileWidth*gameMap.Width) - 64);

                bool coll = false;
                for(float a = 0;a<MathHelper.TwoPi;a+=0.1f)
                    if (gameMap.CheckCollision(Helper.PointOnCircle(ref returnLoc, 16, a))!=null) coll = true;

                if (!coll) break;
            }

            return returnLoc;
        }
コード例 #9
0
ファイル: ParticleController.cs プロジェクト: GarethIW/LD29
        public void Update(GameTime gameTime, Map gameMap)
        {
            foreach (Particle p in Particles.Where(p => p.State != ParticleState.Done))
            {
                p.CurrentTime += gameTime.ElapsedGameTime.TotalMilliseconds;

                if (p.AffectedByGravity) p.Velocity.Y += 0.05f;

                if (p.CanCollide && gameMap != null)
                {
                    if (gameMap.CheckCollision(p.Position + new Vector2(p.Velocity.X, 0)).GetValueOrDefault())
                    {
                        p.Velocity.X = -(p.Velocity.X * (0.1f + Helper.RandomFloat(0.4f)));
                        p.Velocity.Y *= 0.9f;
                    }

                    if (gameMap.CheckCollision(p.Position + new Vector2(0, p.Velocity.Y)).GetValueOrDefault())
                    {
                        p.Velocity.Y = -(p.Velocity.Y * (0.1f + Helper.RandomFloat(0.4f)));
                        p.Velocity.X *= 0.9f;
                    }
                }

                p.Position += p.Velocity;
                p.Rotation += p.RotationSpeed;

                if (p.Position.X < 0) p.Position.X = (gameMap.Width * gameMap.TileWidth) + p.Position.X;
                if (p.Position.X >= (gameMap.Width * gameMap.TileWidth)) p.Position.X = p.Position.X - (gameMap.Width * gameMap.TileWidth);

                switch (p.State)
                {
                    case ParticleState.Attack:
                        p.AttackValue = (1f / (float)p.AttackTime) * (float)p.CurrentTime;
                        if (p.CurrentTime >= p.AttackTime)
                        {
                            p.CurrentTime = 0;
                            p.State = ParticleState.Alive;
                        }
                        break;
                    case ParticleState.Alive:
                        p.LifeValue = (1f / (float)p.LifeTime) * (float)p.CurrentTime;
                        if (p.CurrentTime >= p.LifeTime)
                        {
                            p.CurrentTime = 0;
                            p.State = ParticleState.Decay;
                        }
                        break;
                    case ParticleState.Decay:
                        p.DecayValue = (1f / (float)p.DecayTime) * (float)p.CurrentTime;
                        if (p.CurrentTime >= p.DecayTime)
                        {
                            p.CurrentTime = 0;
                            p.State = ParticleState.Done;
                        }
                        break;
                    case ParticleState.Done:
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }

                p.ParticleFunction(p);
            }
        }
コード例 #10
0
ファイル: Hero.cs プロジェクト: GarethIW/LD29
        private void CheckMapCollisions(Map gameMap)
        {
            // Check downward collision
            if(Speed.Y>0)
                for (int x = HitBox.Left+2; x <= HitBox.Right-2; x += 2)
                {
                    bool? coll = gameMap.CheckCollision(new Vector2(x, HitBox.Bottom + Speed.Y));
                    if (coll.HasValue && coll.Value) Speed.Y = 0;
                }

            // Check left collision
            if(Speed.X<0)
                for (int y = HitBox.Top+2; y <= HitBox.Bottom-2; y += 2)
                {
                    bool? coll = gameMap.CheckCollision(new Vector2(HitBox.Left - Speed.X, y));
                    if (coll.HasValue && coll.Value)
                    {
                        Speed.X = 0;
                        FaceDir = 1;
                    }
                }

            // Check right collision
            if (Speed.X > 0)
                for (int y = HitBox.Top+2; y <= HitBox.Bottom-2; y += 2)
                {
                    bool? coll = gameMap.CheckCollision(new Vector2(HitBox.Right + Speed.X, y));
                    if (coll.HasValue && coll.Value)
                    {
                        Speed.X = 0;
                        FaceDir = -1;
                    }
                }
        }
コード例 #11
0
ファイル: AIDude.cs プロジェクト: GarethIW/Hunted
        public void Update(GameTime gameTime, Map gameMap, HeroDude gameHero, bool[,] mapFog, Camera gameCamera)
        {
            checkLOSTime += gameTime.ElapsedGameTime.TotalMilliseconds;
            genPathTime += gameTime.ElapsedGameTime.TotalMilliseconds;
            checkTorchTime += gameTime.ElapsedGameTime.TotalMilliseconds;
            // Moving
            if ((Position - Target).Length() > 10f)
            {
                Vector2 dir = Target - Position;
                Move(dir);
                //if(State==AIState.Patrolling)
                if(State!=AIState.Attacking) LookAt(Target);
            }
            else
            {
                Target = Position;
                // Reached target
                switch (State)
                {
                    case AIState.Patrolling:
                        if (Helper.Random.Next(500) == 1)
                        {
                            Vector2 potentialTarget = Helper.RandomPointInCircle(Position, 100, 500);
                            if (!gameMap.CheckCollision(potentialTarget)) Target = potentialTarget;
                        }
                        break;
                }
            }

            switch (State)
            {
                case AIState.Patrolling:
                    // Chase player if in LOS

                    if (CheckLineOfSight(gameHero.Position, gameMap))
                    {
                        gameHero.HuntedLevel.Seen(gameHero.Position);
                        Target = Position; // Stop dead in tracks
                        if (gameHero.drivingVehicle == null)
                            State = AIState.Chasing; // Begin chasing player
                        else
                        {
                            if (Weapons[SelectedWeapon].GetType() != typeof(Knife)) State = AIState.Attacking;
                        }
                    }

                    // Allow the enemy to "hear" the player if player moves close to enemy
                    if ((gameHero.Speed.Length() > 0f && (gameHero.Position - Position).Length() < 250f) || (gameHero.drivingVehicle != null && (gameHero.Position - Position).Length() < 800f))
                    {
                        gameHero.HuntedLevel.Heard(gameHero.Position, false);
                        LookAt(gameHero.Position);
                    }

                    if ((gameHero.Position - Position).Length() < 800f &&
                        insideBuilding == null &&
                        gameHero.drivingVehicle is Chopper &&
                        ((Chopper)gameHero.drivingVehicle).Height >0f &&
                        !(Weapons[SelectedWeapon] is Knife)) State = AIState.Attacking;

                    break;
                case AIState.Chasing:
                    Target = gameHero.Position;
                    LookAt(gameHero.Position);
                    if(gameHero.drivingVehicle is Chopper) State = AIState.Patrolling;
                    if (((gameHero.Position - Position).Length() < 450f && CheckLineOfSight(gameHero.Position, gameMap)) || ((gameHero.Position - Position).Length() < 800f && gameHero.drivingVehicle is Chopper))
                    {
                        Target = Position;
                        State = AIState.Attacking;
                    }
                    break;
                case AIState.FollowingPath:
                    if (Target == Position)
                    {
                        if (chasePath == null || regeneratePath)
                        {
                            if (genPathTime > 1000)
                            {
                                genPathTime = 0;
                                regeneratePath = false;
                                chasePath = PathFinder.FindPath(gameMap.AStarWorld, new Point3D((int)(Position.X / gameMap.TileWidth), (int)(Position.Y / gameMap.TileHeight), 0), new Point3D((int)(gameHero.Position.X / gameMap.TileWidth), (int)(gameHero.Position.Y / gameMap.TileHeight), 0));
                                if (chasePath != null) Target = new Vector2((chasePath.position.X * gameMap.TileWidth) + (gameMap.TileWidth / 2), (chasePath.position.Y * gameMap.TileHeight) + (gameMap.TileHeight / 2));
                                else State = AIState.Patrolling;
                            }
                        }
                        else
                        {
                            chasePath = chasePath.next;
                            if (chasePath != null) Target = new Vector2((chasePath.position.X * gameMap.TileWidth) + (gameMap.TileWidth / 2), (chasePath.position.Y * gameMap.TileHeight) + (gameMap.TileHeight / 2));
                            else State = AIState.Chasing;
                        }
                    }

                        if (CheckLineOfSight(gameHero.Position, gameMap))
                        {
                            Target = Position; // Stop dead in tracks
                            State = AIState.Chasing; // Begin chasing player
                        }

                    break;
                case AIState.Attacking:
                    if (gameHero.drivingVehicle is Chopper && insideBuilding != null)
                    {
                        State = AIState.Patrolling;
                        break;
                    }

                    LookAt(gameHero.Position);
                    bool shootUp = (gameHero.drivingVehicle != null && gameHero.drivingVehicle is Chopper && ((Chopper)gameHero.drivingVehicle).Height >0f);
                    Attack(gameTime, gameHero.Position, true, gameCamera, !shootUp);
                    if (Weapons[SelectedWeapon].GetType() != typeof(Knife))
                    {
                        if ((gameHero.Position - Position).Length() > 450f)
                        {
                            if (gameHero.drivingVehicle == null)
                            {
                                Target = gameHero.Position;
                                State = AIState.Chasing;
                            }
                            else State = AIState.Patrolling;
                        }

                        if (Helper.Random.Next(100) == 1)
                        {
                            Vector2 potentialTarget = Helper.RandomPointInCircle(Position, 100, 500);
                            if (!gameMap.CheckCollision(potentialTarget)) Target = potentialTarget;
                        }
                    }
                    else
                    {
                        if (gameHero.drivingVehicle == null)
                        {
                            Target = gameHero.Position;
                            if ((gameHero.Position - Position).Length() < 100f) Target = Position;
                        }
                        else State = AIState.Patrolling;
                    }

                    break;
                case AIState.Investigating:
                    if (Target == Position)
                    {
                        if (chasePath == null || regeneratePath)
                        {
                            if (genPathTime > 1000)
                            {
                                genPathTime = 0;
                                regeneratePath = false;
                                chasePath = PathFinder.FindPath(gameMap.AStarWorld, new Point3D((int)(Position.X / gameMap.TileWidth), (int)(Position.Y / gameMap.TileHeight), 0), new Point3D((int)(gameHero.HuntedLevel.LastKnownPosition.X / gameMap.TileWidth), (int)(gameHero.HuntedLevel.LastKnownPosition.Y / gameMap.TileHeight), 0));
                                if (chasePath != null) Target = new Vector2((chasePath.position.X * gameMap.TileWidth) + (gameMap.TileWidth / 2), (chasePath.position.Y * gameMap.TileHeight) + (gameMap.TileHeight / 2));
                                else State = AIState.Patrolling;
                            }
                        }
                        else
                        {
                            chasePath = chasePath.next;
                            if (chasePath != null) Target = new Vector2((chasePath.position.X * gameMap.TileWidth) + (gameMap.TileWidth / 2), (chasePath.position.Y * gameMap.TileHeight) + (gameMap.TileHeight / 2));
                            else State = AIState.Patrolling;
                        }
                    }
                    if ((Position - gameHero.HuntedLevel.LastKnownPosition).Length() < 200f) State = AIState.Patrolling;

                        if (CheckLineOfSight(gameHero.Position, gameMap))
                        {
                            Target = Position; // Stop dead in tracks
                            State = AIState.Chasing; // Begin chasing player
                        }

                    break;
            }

            if (gameHero.Dead) State = AIState.Patrolling;

            if (Health <= 0 && !Dead)
            {
                deadTime = 5000;
                deadAlpha = 1f;
                Dead = true;
                SpawnDrops(gameMap, gameHero);
                LightingEngine.Instance.RemoveSource(HeadTorch);
                ParticleController.Instance.AddBloodPool(Position);

                if (IsGeneral)
                {
                    Hud.Instance.Ticker.AddLine("> You have eliminated a General! " + (3 - (3-EnemyController.Instance.Enemies.Count(e => e.IsGeneral && !e.Dead))) + "/" + (3));

                }
            }

            if (IsGeneral)
            {
                if ((gameHero.Position - Position).Length() < 720f && !Discovered && gameHero.drivingVehicle==null && !LineCollision(gameHero.Position, gameMap, true))
                {
                    Discovered = true;
                    Hud.Instance.Ticker.AddLine("> You have found a General!");
                }
            }

            HeadTorch.Position = Helper.PointOnCircle(ref Position, 32, Rotation - MathHelper.PiOver2);
            HeadTorch.Rotation = Rotation - MathHelper.PiOver2;

            if (checkTorchTime > 250)
            {
                checkTorchTime = 0;
                if ((Position.X < gameCamera.Position.X - ((gameCamera.Width / gameCamera.Zoom) / 2) || Position.X > gameCamera.Position.X + ((gameCamera.Width / gameCamera.Zoom) / 2) ||
                   Position.Y < gameCamera.Position.Y - ((gameCamera.Height / gameCamera.Zoom) / 2) || Position.Y > gameCamera.Position.Y + ((gameCamera.Height / gameCamera.Zoom) / 2)) &&
                   LineCollision(gameHero.Position, gameMap, false))
                {
                    HeadTorch.Active = false;
                }
            }
            else if (!Dead) HeadTorch.Active = true;

            if (IsGeneral)
                Animations["head"].XOffset = 4;
            else
                Animations["head"].XOffset = 2;

            if (Dead)
            {
                if (deadTime <= 0)
                {
                    deadAlpha -= 0.01f;
                }
            }

            if (Dead && deadTime <= 0 && deadAlpha <= 0f)
            {
                Active = false;
            }

            base.Update(gameTime, gameMap, mapFog, gameHero);
        }
コード例 #12
0
        public void Update(GameTime gameTime, Map gameMap, HeroDude gameHero)
        {
            foreach (Projectile p in Projectiles.Where(part => part.Active))
            {
                p.Life -= gameTime.ElapsedGameTime.TotalMilliseconds;
                p.Position += p.Velocity;
                //p.Rotation += p.RotationSpeed;

                if (p.CanCollide && gameMap.CheckCollision(p.Position,false) == true)
                {
                    p.Velocity = Vector2.Zero;
                    p.RotationSpeed = 0f;
                }

                foreach (Vehicle v in VehicleController.Instance.Vehicles)
                {
                    if (Helper.IsPointInShape(p.Position, v.CollisionVerts))
                    {
                        v.HitByProjectile(p);
                        p.Active = false;
                    }
                }
                if (!p.Active) continue;

                if (p.Owner.GetType() == typeof(HeroDude))
                {
                    foreach (AIDude d in EnemyController.Instance.Enemies.Where(dude => dude.Active && !dude.Dead))
                    {
                        if ((d.Position - p.Position).Length() < 60f)
                        {
                            d.HitByProjectile(p);
                            p.Active = false;
                        }
                    }
                }
                if (!p.Active) continue;

                if (p.Owner.GetType() == typeof(AIDude))
                {
                    if ((gameHero.Position - p.Position).Length() < 60f)
                    {
                        gameHero.HitByProjectile(p);

                    }
                }

                if (p.Life <= 0)
                {
                    p.Active = false;
                }

            }

            Projectiles.RemoveAll(part => !part.Active);
        }