示例#1
0
        /// <summary>
        /// Default model for ShotGun
        /// </summary>
        /// <returns></returns>
        public static PrimitiveBuilder DefaultModel()
        {
            PrimitiveBuilder result = new PrimitiveBuilder(Color.HotPink);
            result.Add(PrimitiveFactory.Circle(Color.HotPink, 6f, 6));

            return result;
        }
示例#2
0
        /// <summary>
        /// Creates the "default" instance of this class
        /// </summary>
        /// <param name="color"></param>
        /// <param name="team"></param>
        /// <param name="enemyTeam"></param>
        /// <returns></returns>
        public static UserPlayer Default(Color color, AbstractTeam team, AbstractTeam enemyTeam)
        {
            CircleBody body = BodyFactory.Circle(false,
                AppSettingsFacade.PlayerMass,
                AppSettingsFacade.PlayerMaxSpeed,
                AppSettingsFacade.PlayerFrictionCoefficient,
                true,
                AppSettingsFacade.PlayerRadius);

            PrimitiveBuilder model = new PrimitiveBuilder(color);
            model.Add(PrimitiveFactory.Circle(color, AppSettingsFacade.PlayerRadius, 3));
            model.Add(PrimitiveFactory.Line(color, Vector2.Zero, Vector2.UnitX * body.GetRadius()));

            UserPlayer result = new UserPlayer(body, model, team, enemyTeam);
            team.AddPlayer(result);

            return result;
        }
示例#3
0
        private static double RadiansOfBulletSpread = Math.PI / 12; // Pi / 12 is 15 degrees

        #endregion Fields

        #region Constructors

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="body"></param>
        /// <param name="model"></param>
        public ShotGun(AbstractBody body, PrimitiveBuilder model)
            : base(body, model, BulletDelayInMilliseconds)
        {
            Bullet[] bullets = new Bullet[100];
            for (int i = 0; i < bullets.Length; i++)
            {
                PrimitiveBuilder bulletModel = new PrimitiveBuilder(Color.Yellow);
                bulletModel.Add(PrimitiveFactory.Circle(Color.Yellow, 1f, 5));
                bullets[i] = new Bullet(BodyFactory.Circle(false, 1f, BulletSpeed, 1f, false, 1f), bulletModel, this);
            }

            this.SetBullets(bullets);
            this.SetCollisionBehaviors(new CollisionBehaviors(this));
        }
示例#4
0
        protected override void ConstructOuterWalls(Vector2 size)
        {
            // Left wall
            Vector2 leftWallStartPosition = Vector2.Zero;
            Vector2 leftWallEndPosition = new Vector2(0f, size.Y);

            PrimitiveBuilder leftWallModel = new PrimitiveBuilder(Color.White);
            leftWallModel.Add(PrimitiveFactory.Line(Color.White, leftWallStartPosition, leftWallEndPosition));

            LineBody leftWallBody = BodyFactory.Line(true, 0f, 0f, 0f, true, leftWallStartPosition, leftWallEndPosition);

            this.Walls.Add(new LineWall(leftWallBody, leftWallModel));

            // Top wall
            Vector2 topWallStartPosition = Vector2.Zero;
            Vector2 topWallEndPosition = new Vector2(size.X, 0f);

            PrimitiveBuilder topWallModel = new PrimitiveBuilder(Color.White);
            topWallModel.Add(PrimitiveFactory.Line(Color.White, topWallStartPosition, topWallEndPosition));

            LineBody topWallBody = BodyFactory.Line(true, 0f, 0f, 0f, true, topWallStartPosition, topWallEndPosition);

            this.Walls.Add(new LineWall(topWallBody, topWallModel));

            // Right wall
            Vector2 rightWallStartPosition = new Vector2(size.X, 0f);
            Vector2 rightWallEndPosition = new Vector2(size.X, size.Y);

            PrimitiveBuilder rightWallModel = new PrimitiveBuilder(Color.White);
            rightWallModel.Add(PrimitiveFactory.Line(Color.White, rightWallStartPosition, rightWallEndPosition));

            LineBody rightWallBody = BodyFactory.Line(true, 0f, 0f, 0f, true, rightWallStartPosition, rightWallEndPosition);

            this.Walls.Add(new LineWall(rightWallBody, rightWallModel));

            // Bottom wall
            Vector2 bottomWallStartPosition = new Vector2(size.X, size.Y);
            Vector2 bottomWallEndPosition = new Vector2(0f, size.Y);

            PrimitiveBuilder bottomWallModel = new PrimitiveBuilder(Color.White);
            bottomWallModel.Add(PrimitiveFactory.Line(Color.White, bottomWallStartPosition, bottomWallEndPosition));

            LineBody bottomWallBody = BodyFactory.Line(true, 0f, 0f, 0f, true, bottomWallStartPosition, bottomWallEndPosition);

            this.Walls.Add(new LineWall(bottomWallBody, bottomWallModel));
        }
示例#5
0
        /// <summary>
        /// Initialize
        /// </summary>
        protected override void Initialize()
        {
            // Build blue team
            CaptureTheFlagTeam blueTeam = new CaptureTheFlagTeam(
                "Blue team",
                new Vector2(25f, 25f),
                Color.Blue);

            // Build red team
            CaptureTheFlagTeam redTeam = new CaptureTheFlagTeam(
                "Red team",
                new Vector2(AppSettingsFacade.WindowWidth - 25f, AppSettingsFacade.WindowHeight - 25f),
                Color.Red);

            // Add guns
            this.AddGun(new WeakGun(
                WeakGun.DefaultBody(this.Size * 0.4f),
                WeakGun.DefaultModel()));

            this.AddGun(new WeakGun(
                WeakGun.DefaultBody(this.Size * 0.6f),
                WeakGun.DefaultModel()));

            this.AddGun(new ShotGun(
                ShotGun.DefaultBody(new Vector2(AppSettingsFacade.WindowWidth / 2, 0.1f * AppSettingsFacade.WindowHeight)),
                ShotGun.DefaultModel()));

            this.AddGun(new ShotGun(
                ShotGun.DefaultBody(new Vector2(AppSettingsFacade.WindowWidth / 2, 0.9f * AppSettingsFacade.WindowHeight)),
                ShotGun.DefaultModel()));

            // Add spawn points
            blueTeam.AddSpawnPoint(blueTeam.GetBasePosition());
            blueTeam.AddSpawnPoint(blueTeam.GetBasePosition() + new Vector2(0f, 50f));

            // Add players
            UserPlayer blueUser = UserPlayer.Default(Color.Blue, blueTeam, redTeam);
            BotPlayer blueBot1 = BotPlayer.Default(Color.Blue, blueTeam, redTeam);

            blueUser.Spawn();
            blueBot1.Spawn();

            this.AddTeam(blueTeam);

            // Add spawn points
            redTeam.AddSpawnPoint(redTeam.GetBasePosition());
            redTeam.AddSpawnPoint(redTeam.GetBasePosition() + new Vector2(0f, -50f));

            // Add players
            BotPlayer redBot1 = BotPlayer.Default(Color.Red, redTeam, blueTeam);
            BotPlayer redBot2 = BotPlayer.Default(Color.Red, redTeam, blueTeam);

            redBot1.Spawn();
            redBot2.Spawn();

            this.AddTeam(redTeam);

            // Build walls

            // Circle wall in the middle of the map
            PrimitiveBuilder circleWallModel1 = new PrimitiveBuilder(Color.White);
            circleWallModel1.Add(PrimitiveFactory.Circle(Color.White, 100f, 24));
            CircleBody circleWallBody1 = (CircleBody)BodyFactory.Circle(true, 0f, 0f, 0f, true, 100f).SetPosition(this.Size / 2);
            this.AddWall(new CircleWall(circleWallBody1, circleWallModel1));

            // Blue-side circle wall in front of flag
            PrimitiveBuilder circleWallModel2 = new PrimitiveBuilder(Color.Blue);
            circleWallModel2.Add(PrimitiveFactory.Circle(Color.White, 75f, 24));
            CircleBody circleWallBody2 = (CircleBody)BodyFactory.Circle(true, 0f, 0f, 0f, true, 75f).SetPosition(this.Size * 0.25f);
            this.AddWall(new CircleWall(circleWallBody2, circleWallModel2));

            // Red-side circle wall in front of flag
            PrimitiveBuilder circleWallModel3 = new PrimitiveBuilder(Color.Red);
            circleWallModel3.Add(PrimitiveFactory.Circle(Color.White, 75f, 24));
            CircleBody circleWallBody3 = (CircleBody)BodyFactory.Circle(true, 0f, 0f, 0f, true, 75f).SetPosition(this.Size * 0.75f);
            this.AddWall(new CircleWall(circleWallBody3, circleWallModel3));

            // Blue-side circle wall in front of flag
            PrimitiveBuilder circleWallModel4 = new PrimitiveBuilder(Color.Blue);
            circleWallModel4.Add(PrimitiveFactory.Circle(Color.White, 75f, 24));
            CircleBody circleWallBody4 = (CircleBody)BodyFactory.Circle(true, 0f, 0f, 0f, true, 75f).SetPosition(new Vector2(this.Size.X * 0.25f, this.Size.Y * 0.75f));
            this.AddWall(new CircleWall(circleWallBody4, circleWallModel4));

            // Red-side circle wall in front of flag
            PrimitiveBuilder circleWallModel5 = new PrimitiveBuilder(Color.Blue);
            circleWallModel5.Add(PrimitiveFactory.Circle(Color.White, 75f, 24));
            CircleBody circleWallBody5 = (CircleBody)BodyFactory.Circle(true, 0f, 0f, 0f, true, 75f).SetPosition(new Vector2(this.Size.X * 0.75f, this.Size.Y * 0.25f));
            this.AddWall(new CircleWall(circleWallBody5, circleWallModel5));

            this.ConstructOuterWalls(this.Size);
        }
示例#6
0
 /// <summary>
 /// Default model
 /// </summary>
 /// <param name="color"></param>
 /// <returns></returns>
 public static PrimitiveBuilder DefaultModel(Color color)
 {
     PrimitiveBuilder result = new PrimitiveBuilder(color);
     result.Add(PrimitiveFactory.Circle(color, 10f, 3));
     return result;
 }