コード例 #1
0
        public HitscanBox(float Damage, ExplosionOptions ExplosionAttributes, RobotAnimation Owner, Vector2 Position, float Angle)
            : base(Damage, ExplosionAttributes, Owner, false)
        {
            this.Angle = Angle;
            Lifetime   = 50;

            Owner.SetAttackContext(this, Owner, Angle, Position);

            float CosA = (float)Math.Cos(Angle);
            float SinA = (float)Math.Sin(Angle);
            float MinX = Position.X;
            float MinY = Position.Y;
            float MaxX = MinX + CosA * HitscanLength;
            float MaxY = MinY + SinA * HitscanLength;

            Speed = new Vector2(CosA * 100000, SinA * 100000);

            Polygon NewPolygon = new Polygon();

            NewPolygon.ArrayVertex    = new Vector2[4];
            NewPolygon.ArrayVertex[0] = new Vector2(MinX, MinY);
            NewPolygon.ArrayVertex[1] = new Vector2(MaxX, MaxY);
            NewPolygon.ArrayVertex[2] = new Vector2(MaxX, MaxY);
            NewPolygon.ArrayVertex[3] = new Vector2(MinX, MinY);

            NewPolygon.ComputePerpendicularAxis();
            NewPolygon.ComputerCenter();

            Collision.ListCollisionPolygon = new List <Polygon>(1)
            {
                NewPolygon
            };
        }
コード例 #2
0
        public ProjectileBox(float Damage, ExplosionOptions ExplosionAttributes, RobotAnimation Owner,
                             Vector2 Position, Vector2 Size, float Angle, ProjectileInfo ActiveProjectileInfo)
            : base(Damage, ExplosionAttributes, Owner, false)
        {
            this.ActiveProjectileInfo = ActiveProjectileInfo;
            this.AffectedByGravity    = ActiveProjectileInfo.AffectedByGravity;

            this.Speed = new Vector2((float)Math.Cos(Angle) * ActiveProjectileInfo.ProjectileSpeed, (float)Math.Sin(Angle) * ActiveProjectileInfo.ProjectileSpeed);

            ProjectileAnimation          = ActiveProjectileInfo.ProjectileAnimation.Copy();
            ProjectileAnimation.Position = Position;

            if (ActiveProjectileInfo.TrailAnimation != null)
            {
                TrailAnimation          = ActiveProjectileInfo.TrailAnimation.Copy();
                TrailAnimation.Position = Position;
            }
            if (ActiveProjectileInfo.RotatationAllowed)
            {
                this.Angle = Angle;

                if (ProjectileAnimation != null)
                {
                    ProjectileAnimation.Angle = Angle;
                }

                if (TrailAnimation != null)
                {
                    TrailAnimation.Angle = Angle;
                }
            }

            Owner.SetAttackContext(this, Owner, Angle, Position);

            float MinX = Position.X - Size.X / 2f;
            float MinY = Position.Y - Size.Y / 2f;
            float MaxX = MinX + Size.X;
            float MaxY = MinY + Size.Y;


            Polygon NewPolygon = new Polygon();

            NewPolygon.ArrayVertex    = new Vector2[4];
            NewPolygon.ArrayVertex[0] = new Vector2(MinX, MinY);
            NewPolygon.ArrayVertex[1] = new Vector2(MaxX, MaxY);
            NewPolygon.ArrayVertex[2] = new Vector2(MaxX, MaxY);
            NewPolygon.ArrayVertex[3] = new Vector2(MinX, MinY);

            NewPolygon.ComputePerpendicularAxis();
            NewPolygon.ComputerCenter();

            Collision.ListCollisionPolygon = new List <Polygon>(1)
            {
                NewPolygon
            };
            Collision.ComputeCenterAndRadius();
            this.Collision.Position = Position;
        }