示例#1
0
        public static List <Vector2> CalcCircleCollisionPoints(float radius, float minLength)
        {
            float          minTheta = MathsExt.CalcMinTheta(radius, minLength);
            List <Vector2> relativeCollisionPoints = new List <Vector2>();

            for (float theta = 0; theta <= 2 * Math.PI - minTheta; theta += minTheta)
            {
                relativeCollisionPoints.Add(Mechanics.VectorComponents(radius, theta));
            }

            return(relativeCollisionPoints);
        }
示例#2
0
        public bool CheckArrowCollision(Wizard wizard)
        {
            if (MathsExt.isPointWithinCircle(Position + collisionPoint + RotationOffset, wizard.position, wizard._radius))
            {
                wizard.velocity += velocity;
                InteractionManager.Damage(wizard, 15);
                velocity  = Vector2.Zero;
                _collided = true;
                return(true);
            }

            return(false);
        }
示例#3
0
        private void Walking(Direction direction, SpriteEffects effect, int directionCoefficient, GameTime gameTime)
        {
            int walkingFrameRate = 10;

            velocity.X = directionCoefficient * PLAYER_SPEED;
            _State     = ActiveState.Walking;

            if (_Facing != direction)
            {
                _crosshair.crosshairAngle = (MathsExt.FlipAngle(_crosshair.crosshairAngle));
            }

            _Facing = direction;
            _directionCoefficient = directionCoefficient;
            spriteEffect          = effect;
            UpdateAnimationRectangle(_animator.GetAnimationFrames("Walking", walkingFrameRate, gameTime));
        }
示例#4
0
 public void DeformLevel(int blastRadius, Vector2 blastPosition)
 {
     for (int x = 0; x < 2 * blastRadius; x++)
     {
         for (int y = 0; y < 2 * blastRadius; y++)
         {
             if (MathsExt.isWithinCircleInSquare(blastRadius, x, y) &&
                 blastPosition.X + x - blastRadius < _mapCollisionData.GetLength(0) - 1 &&
                 blastPosition.Y + y - blastRadius < _mapCollisionData.GetLength(1) - 1 &&
                 blastPosition.X + x - blastRadius >= 0 &&
                 blastPosition.Y + y - blastRadius >= 0)
             {
                 _mapPixelData[((int)blastPosition.X + x - blastRadius) + ((int)blastPosition.Y + y - blastRadius) * _mapTexture.Width] = 0;
                 _mapCollisionData[(int)blastPosition.X + x - blastRadius, ((int)blastPosition.Y + y - blastRadius)] = false;
             }
         }
     }
     _mapTexture.SetData(_mapPixelData);
 }