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 }; }
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; }