コード例 #1
0
ファイル: Text.cs プロジェクト: iq110/csharpgameprogramming
        private void CreateText(double x, double y, double maxWidth)
        {
            _bitmapText.Clear();
            double currentX = 0;
            double currentY = 0;

            string[] words = _text.Split(' ');

            foreach (string word in words)
            {
                Vector nextWordLength = _font.MeasureFont(word);

                if (maxWidth != -1 &&
                    (currentX + nextWordLength.X) > maxWidth)
                {
                    currentX = 0;
                    currentY += nextWordLength.Y;
                }

                string wordWithSpace = word + " "; // add the space character that was removed.

                foreach (char c in wordWithSpace)
                {
                    CharacterSprite sprite = _font.CreateSprite(c);
                    float xOffset = ((float)sprite.Data.XOffset) / 2;
                    float yOffset = (((float)sprite.Data.Height) * 0.5f) + ((float)sprite.Data.YOffset);
                    sprite.Sprite.SetPosition(x + currentX + xOffset, y - currentY - yOffset);
                    currentX += sprite.Data.XAdvance;
                    _bitmapText.Add(sprite);
                }
            }
            _dimensions = _font.MeasureFont(_text, _maxWidth);
            _dimensions.Y = currentY;
            SetColor(_color);
        }
コード例 #2
0
ファイル: Font.cs プロジェクト: iq110/csharpgameprogramming
        public Vector MeasureFont(string text, double maxWidth)
        {
            Vector dimensions = new Vector();

            foreach (char c in text)
            {
                CharacterData data = _characterData[c];
                dimensions.X += data.XAdvance;
                dimensions.Y = Math.Max(dimensions.Y, data.Height + data.YOffset);
            }
            return dimensions;
        }
コード例 #3
0
ファイル: Circle.cs プロジェクト: iq110/csharpgameprogramming
        public bool Intersects(Point point)
        {
            // Change point to a vector
            Vector vPoint = new Vector(point.X, point.Y, 0);
            Vector vFromCircleToPoint = Position - vPoint;
            double distance = vFromCircleToPoint.Length();

            if (distance > Radius)
            {
                return false;
            }
            return true;

        }
コード例 #4
0
ファイル: Sprite.cs プロジェクト: iq110/csharpgameprogramming
        private void InitVertexPositions(Vector position, double width, double height)
        {
            double halfWidth = width / 2;
            double halfHeight = height / 2;
            // Clockwise creation of two triangles to make a quad.

            // TopLeft, TopRight, BottomLeft
            _vertexPositions[0] = new Vector(position.X - halfWidth, position.Y + halfHeight, position.Z);
            _vertexPositions[1] = new Vector(position.X + halfWidth, position.Y + halfHeight, position.Z);
            _vertexPositions[2] = new Vector(position.X - halfWidth, position.Y - halfHeight, position.Z);

            // TopRight, BottomRight, BottomLeft
            _vertexPositions[3] = new Vector(position.X + halfWidth, position.Y + halfHeight, position.Z);
            _vertexPositions[4] = new Vector(position.X + halfWidth, position.Y - halfHeight, position.Z);
            _vertexPositions[5] = new Vector(position.X - halfWidth, position.Y - halfHeight, position.Z);
        }
コード例 #5
0
 public void DrawImmediateModeVertex(Vector position, Color color, Point uvs)
 {
     Gl.glColor4f(color.Red, color.Green, color.Blue, color.Alpha);
     Gl.glTexCoord2f(uvs.X, uvs.Y);
     Gl.glVertex3d(position.X, position.Y, position.Z);
 }
コード例 #6
0
ファイル: Circle.cs プロジェクト: iq110/csharpgameprogramming
 public Circle(Vector position, double radius)
 {
     Position = position;
     Radius = radius;
 }
コード例 #7
0
ファイル: Vector.cs プロジェクト: iq110/csharpgameprogramming
public Vector CrossProduct(Vector v)
{
    double nx = Y * v.Z - Z * v.Y;
    double ny = Z * v.X - X * v.Z;
    double nz = X * v.Y - Y * v.X;
    return new Vector(nx, ny, nz);
}
コード例 #8
0
ファイル: Vector.cs プロジェクト: iq110/csharpgameprogramming
public bool Equals(Vector v)
{
    return (X == v.X) && (Y == v.Y) && (Z == v.Z);
}
コード例 #9
0
ファイル: Vector.cs プロジェクト: iq110/csharpgameprogramming
public Vector Subtract(Vector r)
{
    return new Vector(X - r.X, Y - r.Y, Z - r.Z);
}
コード例 #10
0
ファイル: Vector.cs プロジェクト: iq110/csharpgameprogramming
public Vector Add(Vector r)
{
    return new Vector(X + r.X, Y + r.Y, Z + r.Z);
}
コード例 #11
0
ファイル: Vector.cs プロジェクト: iq110/csharpgameprogramming
public Vector Normalise(Vector v)
{
    double r = v.Length();
    if (r != 0.0)				// guard against divide by zero
    {
        return new Vector(v.X / r, v.Y / r, v.Z / r);	// normalise and return
    }
    else
    {
        return new Vector(0, 0, 0);
    }
}
コード例 #12
0
ファイル: Vector.cs プロジェクト: iq110/csharpgameprogramming
public double DotProduct(Vector v)
{
    return (v.X * X) + (Y * v.Y) + (Z * v.Z);
}
コード例 #13
0
 public Rectangle(Vector bottomLeft, Vector topRight)
 {
     BottomLeft = bottomLeft;
     TopRight = topRight;
 }
コード例 #14
0
ファイル: Sprite.cs プロジェクト: iq110/csharpgameprogramming
 public void SetPosition(Vector position)
 {
     InitVertexPositions(position, GetWidth(), GetHeight());
 }