Example #1
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);
        }
Example #2
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());
            }
        }