Esempio n. 1
0
        private void HaveAttacked(SolidBody attacked, Vec2 position, float angle, IBullet bullet)
        {
            PointF locationObject = attacked.Shape.Location;
            ulong  idParent       = (Parent as Weapon).Owner.ID;

            float newDistance = VectorMethod.DefineDistance(position, new Vec2(locationObject.X, locationObject.Y));

            Parent.Model.AddOutgoingMessage(new MakedShot(idParent, angle, newDistance));

            if (attacked == null)
            {
                return;
            }

            var damageMsg = new GotDamage(idParent, bullet.Damage);

            attacked.Parent.Update(damageMsg);

            //определяем убили ли мы противника
            Healthy healthyAttacked = attacked.Parent.Components.GetComponent <Healthy>();

            if (healthyAttacked == null)
            {
                return;
            }
            //если убили засчитываем фраг
            if (healthyAttacked.HP < bullet.Damage)
            {
                (Parent as Weapon).Owner.Update(new MakedKill(idParent));
            }
        }
Esempio n. 2
0
        public static GameObject CreateGrenade(IModelForComponents model, PointF location, Vec2 startVelocity, IBullet grenadeBullet)
        {
            var      gameObject  = new GameObject(model, TypesGameObject.Grenade, TypesBehaveObjects.Active);
            ShapeDef circleShape = CreateBaseCircleDef(setupsWeapon, SizeGreanade);

            circleShape.Filter.CategoryBits = (ushort)CollideCategory.Grenade;
            circleShape.Filter.MaskBits     = (ushort)CollideCategory.Box | (ushort)CollideCategory.Stone;

            ShapeDef sensorDef = CreateBaseCircleDef(setupsWeapon, new SizeF(RadiusExplosionGrenade, RadiusExplosionGrenade));

            sensorDef.IsSensor            = true;
            sensorDef.Filter.CategoryBits = (ushort)CollideCategory.Grenade;
            sensorDef.Filter.MaskBits     = (ushort)CollideCategory.Player;

            var body = new SolidBody(gameObject, new RectangleF(location, SizeGreanade),
                                     new ShapeDef[] { circleShape, sensorDef }, setupsWeapon.linearDamping, startVelocity);

            gameObject.Components.Add(body);

            var explosion = new Explosion(gameObject, grenadeBullet);

            gameObject.Components.Add(explosion);

            model.AddOrUpdateGameObject(gameObject);

            return(gameObject);
        }
Esempio n. 3
0
        public static void CreateNewBodyForWeapon(Weapon weapon, Vec2 startVelocity, PointF location)
        {
            SolidBody body = null;

            switch (weapon.TypeWeapon)
            {
            case TypesWeapon.AssaultRifle:
                body = CreateBodyWeapon(weapon, location, setupsWeapon, SizeAssaulRiffle);
                break;

            case TypesWeapon.GrenadeCollection:
                body = CreateBodyWeapon(weapon, location, setupsWeapon, SizeGrenadeCollection);
                break;

            case TypesWeapon.Gun:
                body = CreateBodyWeapon(weapon, location, setupsWeapon, SizeGun);
                break;

            case TypesWeapon.ShotGun:
                body = CreateBodyWeapon(weapon, location, setupsWeapon, SizeShotGun);
                break;

            default: throw new Exception("Ошибка создания тела для оружия");
            }
            body.Body.SetLinearVelocity(startVelocity);
            weapon.Components.Add(body);

            weapon.Model.AddOrUpdateGameObject(weapon);
        }
Esempio n. 4
0
        /// <summary>
        /// Делаем шаг игровой карты
        /// </summary>
        /// <param name="passedTime">в миллесекундах</param>
        public void MakeStep(int passedTime)
        {
            Field.Step((float)passedTime / 1000, 8, 3);
            IMessage msg = new TimeQuantPassed(passedTime);

            for (Body list = Field.GetBodyList(); list != null; list = list.GetNext())
            {
                if (list.GetUserData() != null)
                {
                    SolidBody solidBody = (SolidBody)list.GetUserData();
                    if (!solidBody.Parent.Destroyed)
                    {
                        if (solidBody.Parent.TypeBehave == TypesBehaveObjects.Active)
                        {
                            //запускаем  обработку всех событий на этом объекте
                            solidBody.Parent.Update(msg);
                        }
                    }
                    //если объект уничтожен удаляем его
                    else
                    {
                        RemoveGameObject(solidBody.Parent);
                        if (solidBody.Parent is Gamer)
                        {
                            RemovePlayer(solidBody.Parent as Gamer);
                        }
                    }
                }
            }
            //обновляем игровую зону
            DeathZone.Update(msg);
        }
Esempio n. 5
0
        private void Handler_MakeShot(IMessage msg)
        {
            SolidBody BodyHolder = (Parent as Weapon).Owner?.Components?.GetComponent <SolidBody>();

            if (BodyHolder == null)
            {
                return;
            }
            //получаем гранату
            IBullet grenadeBullet = magazin.GetBullet();

            if (grenadeBullet == null)
            {
                return;
            }

            //получаем позицию игрока
            Vec2 position = (Vec2)BodyHolder.Body?.GetPosition();
            //определяем импульс
            float dX = msg.Location.X - position.X;
            float dY = (msg.Location.Y - position.Y);

            //нельзя бросить дальше дальности броска
            if (System.Math.Sqrt(dX * dX + dY * dY) > strength)
            {
                return;
            }
            Vec2 impulse = new Vec2(dX, dY);

            //создаем объект гранаты
            var grenade = BuilderGameObject.CreateGrenade(Parent.Model,
                                                          (Parent as Weapon).Owner.Components.GetComponent <SolidBody>().Shape.Location, impulse, grenadeBullet);
        }
Esempio n. 6
0
 public override void Setup()
 {
     this.body = Parent.Components?.GetComponent <SolidBody>();
     if (body == null)
     {
         Log.AddNewRecord("Ошибка создания компонента Movement", "Не получена сслыка на компонент SoldiBody");
         throw new Exception("Ошибка создания компонента Movement");
     }
     Parent.Received_GoTo += Handler_GoTo;
 }
Esempio n. 7
0
 public override void Setup()
 {
     this.bodyGrenade = Parent.Components?.GetComponent <SolidBody>();
     if (bodyGrenade == null)
     {
         Log.AddNewRecord("Ошибка создания компонента Explosion", "Не получена сслыка на компонент SolidBody");
         throw new Exception("Ошибка создания компонента Explosion");
     }
     Parent.Received_TimeQuantPassed += Handler_TimeQuantPassed;
 }
Esempio n. 8
0
		public override void Remove(ContactPoint point)
		{
			base.Remove(point);
			if (point.Shape1.GetBody().GetUserData() is SolidBody)
			{
				SolidBody bodyA = (SolidBody)point.Shape1.GetBody().GetUserData();
				if (point.Shape2.GetBody().GetUserData() is SolidBody)
				{
					SolidBody bodyB = (SolidBody)point.Shape2.GetBody().GetUserData();
					bodyA.CoveredObjects.Remove(bodyB);
					bodyB.CoveredObjects.Remove(bodyA);
				}
			}
		}
Esempio n. 9
0
        public static GameObject CreateStone(IModelForComponents model, PointF location)
        {
            var      gameObject = new GameObject(model, TypesGameObject.Stone, TypesBehaveObjects.Passive);
            ShapeDef CircleDef  = CreateBaseCircleDef(setupsStoneAndTree, SizeStone);

            CircleDef.Filter.CategoryBits = (ushort)CollideCategory.Stone;
            CircleDef.Filter.MaskBits     = (ushort)CollideCategory.Player |
                                            (ushort)CollideCategory.Grenade | (ushort)CollideCategory.Loot;

            var body = new SolidBody(gameObject, new RectangleF(location, SizeStone), new ShapeDef[] { CircleDef });

            gameObject.Components.Add(body);

            model.AddOrUpdateGameObject(gameObject);

            return(gameObject);
        }
Esempio n. 10
0
        public static GameObject CreateBox(IModelForComponents model, PointF location)
        {
            var gameObject = new GameObject(model, TypesGameObject.Box, TypesBehaveObjects.Passive);

            var shapeBox = CreateBaseRectangleDef(setupsStillObject, SizeBox);

            shapeBox.Filter.CategoryBits = (ushort)CollideCategory.Box;
            shapeBox.Filter.MaskBits     = (ushort)CollideCategory.Player |
                                           (ushort)CollideCategory.Grenade | (ushort)CollideCategory.Loot;

            var body = new SolidBody(gameObject, new RectangleF(location, SizeBox), new ShapeDef[] { shapeBox });

            gameObject.Components.Add(body);

            model.AddOrUpdateGameObject(gameObject);

            return(gameObject);
        }
Esempio n. 11
0
        private static SolidBody CreateBodyWeapon(Weapon weapon, PointF location, PhysicsSetups physicsSetupsWeapon, SizeF sizeWeapon)
        {
            ShapeDef circleShape = CreateBaseCircleDef(physicsSetupsWeapon, sizeWeapon);

            circleShape.Filter.CategoryBits = (ushort)CollideCategory.Loot;
            circleShape.Filter.MaskBits     = (ushort)CollideCategory.Box | (ushort)CollideCategory.Stone;

            ShapeDef sensorDef = CreateBaseCircleDef(physicsSetupsWeapon, sizeWeapon);

            sensorDef.IsSensor            = true;
            sensorDef.Filter.CategoryBits = (ushort)CollideCategory.Loot;
            sensorDef.Filter.MaskBits     = (ushort)CollideCategory.Player;

            var body = new SolidBody(weapon, new RectangleF(location, sizeWeapon), new ShapeDef[] { circleShape, sensorDef },
                                     physicsSetupsWeapon.linearDamping, Vec2.Zero);

            weapon.Components.Add(body);

            return(body);
        }
Esempio n. 12
0
		public override void Add(ContactPoint point)
		{
			base.Add(point);
			if (point.Shape1.GetBody().GetUserData() is SolidBody)
			{
				SolidBody bodyA = (SolidBody)point.Shape1.GetBody().GetUserData();
				if (point.Shape2.GetBody().GetUserData() is SolidBody)
				{
					SolidBody bodyB = (SolidBody)point.Shape2.GetBody().GetUserData();
					if (bodyA.CoveredObjects.IndexOf(bodyB) == -1)
					{
						bodyA.CoveredObjects.Add(bodyB);
					}
					if (bodyB.CoveredObjects.IndexOf(bodyA) == -1)
					{
						bodyB.CoveredObjects.Add(bodyA);
					}
				}
			}
		}
Esempio n. 13
0
        private void Handler_MakeShot(IMessage msg)
        {
            try
            {
                SolidBody BodyHolder = (Parent as Weapon).Owner?.Components?.GetComponent <SolidBody>();
                if (BodyHolder == null)
                {
                    Log.AddNewRecord("Ошибка получения держателя оружия");
                    return;
                }
                Vec2 position = (Vec2)BodyHolder.Body.GetPosition();

                //получаем патрон
                IBullet bullet = magazin.GetBullet();
                if (bullet == null)
                {
                    return;
                }

                //определяем угол
                float angle = VectorMethod.DefineAngle(position, new Vec2(msg.Location.X, msg.Location.Y));

                var rayOfShot = CreateRayForShot(position, angle, bullet.Distance);

                var attackedObject = DefineDamagedSolidBody(rayOfShot, (Parent as Weapon).Owner.ID);

                if (attackedObject == null)
                {
                    NotAttacked(angle, bullet.Distance);
                }
                else
                {
                    HaveAttacked(attackedObject, position, angle, bullet);
                }
            }
            catch (Exception e)
            {
                Log.AddNewRecord(e.ToString());
            }
        }
Esempio n. 14
0
        public static Gamer CreateGamer(IModelForComponents model, PointF location)
        {
            var      gameObject = new Gamer(model, TypesGameObject.Player, TypesBehaveObjects.Active);
            ShapeDef CircleDef  = CreateBaseCircleDef(setupsGamer, SizeGamer);

            CircleDef.Filter.CategoryBits = (ushort)CollideCategory.Player;
            CircleDef.Filter.MaskBits     = (ushort)CollideCategory.Box | (ushort)CollideCategory.Stone
                                            | (ushort)CollideCategory.Grenade;

            var body = new SolidBody(gameObject, new RectangleF(location, SizeGamer), new ShapeDef[] { CircleDef });

            gameObject.Components.Add(body);

            var movement = new Movement(gameObject, SpeedGamer);

            gameObject.Components.Add(movement);

            var collector = new Collector(gameObject);

            gameObject.Components.Add(collector);

            var currentWeapon = new CurrentWeapon(gameObject);

            gameObject.Components.Add(currentWeapon);

            var healthy = new Healthy(gameObject);

            gameObject.Components.Add(healthy);

            var statistics = new Statistics(gameObject);

            gameObject.Components.Add(statistics);

            model.AddOrUpdateGameObject(gameObject);
            model.Players.Add(gameObject);

            return(gameObject);
        }
Esempio n. 15
0
 public override void Dispose()
 {
     body = null;
     Parent.Received_GoTo -= Handler_GoTo;
 }
Esempio n. 16
0
 //только для тестов
 public Collector(IGameObject parent, Weapon[] weapons) : base(parent)
 {
     modifiers    = new Modifier[CountOfModifier];
     this.weapons = weapons;
     this.body    = new SolidBody(parent);
 }
Esempio n. 17
0
 public override void Setup()
 {
     base.Setup();
     body = Components.GetComponent <SolidBody>();
     Received_PlayerTurn += Handler_Received_PlayerTurn;
 }