示例#1
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 /// <param name="team"></param>
 /// <param name="enemyTeam"></param>
 public BotPlayer(AbstractBody body, PrimitiveBuilder model, AbstractTeam team, AbstractTeam enemyTeam)
     : base(body, model, team, enemyTeam)
 {
     this.SetCollisionBehaviors(new CollisionBehaviors(this));
     this.MovementBehavior = new MovementBehavior();
     this.AttackBehavior = new AttackBehavior();
 }
示例#2
0
 /// <summary>
 /// Add body
 /// </summary>
 /// <param name="body"></param>
 public void AddBody(AbstractBody body)
 {
     if (!this._bodies.Contains(body))
     {
         this._bodiesMarkedForAddition.Enqueue(body);
     }
 }
示例#3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 /// <param name="team"></param>
 public AbstractFlag(AbstractBody body, PrimitiveBuilder model, AbstractTeam team)
     : base(body, model)
 {
     this.Team = team;
     this.InitialPosition = body.GetPosition();
     EntityTable.Instance.Add(this.Body, this);
 }
示例#4
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="body"></param>
        /// <param name="model"></param>
        /// <param name="delayInMilliseconds"></param>
        public AbstractGun(AbstractBody body, PrimitiveBuilder model, double delayInMilliseconds)
            : base(body, model)
        {
            this.BulletIndex = 0;
            this.DelayInMilliseconds = delayInMilliseconds;

            // Add Entity table entry that maps the Body to this Entity
            EntityTable.Instance.Add(this.Body, this);
        }
示例#5
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="body"></param>
        /// <param name="model"></param>
        /// <param name="collisionBehaviors"></param>
        public AbstractEntity(AbstractBody body, PrimitiveBuilder model, ICollisionBehaviors collisionBehaviors = null)
        {
            // Set body
            this.Body = body;

            // Set model
            this._model = model;

            // Subscribe to collision event
            CollisionPool.Instance.CollisionDetected += CollisionDetected;

            // Set collision behaviors
            this._collisionBehaviors = collisionBehaviors;
        }
示例#6
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));
        }
示例#7
0
        /// <summary>
        /// Constructs a list of nodes based on the geometry of the given body
        /// </summary>
        /// <param name="body"></param>
        /// <param name="distanceFromBody"></param>
        /// <param name="maxDistanceBetweenEachNode"></param>
        /// <returns></returns>
        public static List<Node> Construct(AbstractBody body, int distanceFromBody, int maxDistanceBetweenEachNode)
        {
            List<Node> result = new List<Node>();

            Type bodyType = body.GetType();

            if (bodyType.Equals(typeof(CircleBody)))
            {
                result = Construct((CircleBody)body, distanceFromBody, maxDistanceBetweenEachNode);
            }
            else
            {
                result = Construct((RectangleBody)body, distanceFromBody, maxDistanceBetweenEachNode);
            }

            return result;
        }
示例#8
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 /// <param name="team"></param>
 /// <param name="enemyTeam"></param>
 public UserPlayer(AbstractBody body, PrimitiveBuilder model, AbstractTeam team, AbstractTeam enemyTeam)
     : base(body, model, team, enemyTeam)
 {
     this.SetCollisionBehaviors(new CollisionBehaviors(this));
 }
示例#9
0
 /// <summary>
 /// Remove body
 /// </summary>
 /// <param name="body"></param>
 public void RemoveBody(AbstractBody body)
 {
     if (this._bodies.Contains(body))
     {
         this._bodiesMarkedForRemoval.Enqueue(body);
     }
 }
示例#10
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 public CircleWall(AbstractBody body, PrimitiveBuilder model)
     : base(body, model)
 {
 }
示例#11
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 /// <param name="gun"></param>
 public Bullet(AbstractBody body, PrimitiveBuilder model, AbstractGun gun)
     : base(body, model, gun)
 {
     this.SetCollisionBehaviors(new CollisionBehaviors(this));
 }
示例#12
0
        /// <summary>
        /// Detect collision
        /// </summary>
        /// <param name="body"></param>
        /// <returns></returns>
        public bool DetectCollision(AbstractBody body)
        {
            bool result = false;

            Type bodyType = body.GetType();

            if (bodyType.Equals(typeof(CircleBody)))
            {
                result = this.DetectCollision((CircleBody)body);
            }
            else if (bodyType.Equals(typeof(RectangleBody)))
            {
                result = this.DetectCollision((RectangleBody)body);
            }
            else if (bodyType.Equals(typeof(LineBody)))
            {
                result = this.DetectCollision((LineBody)body);
            }

            return result;
        }
示例#13
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="body"></param>
        /// <param name="model"></param>
        /// <param name="team"></param>
        protected AbstractPlayer(AbstractBody body, PrimitiveBuilder model, AbstractTeam team, AbstractTeam enemyTeam)
            : base(body, model)
        {
            this.Team = team;
            this.EnemyTeam = enemyTeam;
            this.Health = AppSettingsFacade.PlayerHealth;

            this.HealthLabel = new TextLabel(String.Empty,
                SpriteFontRepository.Instance.Get("test"),
                Vector2.Zero,
                LabelAlignment.Center,
                Color.White);

            this._messageQueue = new TextLabelQueue(
                SpriteFontRepository.Instance.Get("test"),
                Vector2.Zero,
                LabelAlignment.Center,
                Color.White,
                3000);

            this._healthBar = new CircleProgressBar(new Color(20, 20, 30));

            EntityTable.Instance.Add(this.Body, this);

            this.IsAlive = true;
        }
示例#14
0
 public CollisionDetectedEventArgs(AbstractBody body1, AbstractBody body2)
 {
     this.Body1 = body1;
     this.Body2 = body2;
 }
示例#15
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 /// <param name="team"></param>
 public Flag(AbstractBody body, PrimitiveBuilder model, AbstractTeam team)
     : base(body, model, team)
 {
     this.SetCollisionBehaviors(new CollisionBehaviors(this));
 }
示例#16
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 public RectangleWall(AbstractBody body, PrimitiveBuilder model)
     : base(body, model)
 {
 }
示例#17
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="body"></param>
 /// <param name="model"></param>
 public AbstractWall(AbstractBody body, PrimitiveBuilder model)
     : base(body, model)
 {
     EntityTable.Instance.Add(this.Body, this);
 }