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