mirror of
https://github.com/GayPizzaSpecifications/voxelotl-engine.git
synced 2025-08-05 14:11:34 +00:00
rotating flip flags
This commit is contained in:
@ -6,8 +6,8 @@ public struct Sprite {
|
||||
}
|
||||
|
||||
public static let none: Self = Self(rawValue: 0)
|
||||
public static let x: Self = Self(rawValue: 1 << 0)
|
||||
public static let y: Self = Self(rawValue: 1 << 1)
|
||||
public static let horz: Self = Self(rawValue: 1 << 0)
|
||||
public static let vert: Self = Self(rawValue: 1 << 1)
|
||||
public static let diag: Self = Self(rawValue: 1 << 2)
|
||||
}
|
||||
|
||||
@ -21,3 +21,15 @@ public struct Sprite {
|
||||
var flip: Flip
|
||||
var color: Color<Float>
|
||||
}
|
||||
|
||||
public extension Sprite.Flip {
|
||||
var clockwise: Self {
|
||||
[Self](arrayLiteral: [ .vert, .diag ], [ .horz, .vert, .diag ], .diag,
|
||||
[ .horz, .diag ], .horz, .none, [ .horz, .vert ], .vert)[Int(self.rawValue)]
|
||||
}
|
||||
|
||||
var counterClockwise: Self {
|
||||
[Self](arrayLiteral: [ .horz, .diag ], .diag, [ .horz, .vert, .diag ],
|
||||
[ .vert, .diag ], .vert, [ .horz, .vert ], .none, .horz)[Int(self.rawValue)]
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ public struct SpriteBatch {
|
||||
let bias = origin / SIMD2(size)
|
||||
self.drawQuad(texture, .positions(position, size * scale, angle, bias), texCoord, color: color)
|
||||
} else {
|
||||
self.drawQuad(texture, .positions(position - origin, size * scale), texCoord, color: color)
|
||||
self.drawQuad(texture, .positions(position - origin * scale, size * scale), texCoord, color: color)
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,7 +83,7 @@ public struct SpriteBatch {
|
||||
let bias = SIMD2(origin) / SIMD2(size)
|
||||
self.drawQuad(texture, .positions(position, size * scale, angle, bias), texCoord, color: color)
|
||||
} else {
|
||||
self.drawQuad(texture, .positions(position, size * scale), texCoord, color: color)
|
||||
self.drawQuad(texture, .positions(position - origin * scale, size * scale), texCoord, color: color)
|
||||
}
|
||||
}
|
||||
|
||||
@ -345,12 +345,11 @@ fileprivate extension SpriteBatch.Quad {
|
||||
v10: SIMD2<Float>(0, 0), v11: SIMD2<Float>(1, 0))
|
||||
|
||||
static func texcoords(_ flip: Sprite.Flip) -> Self {
|
||||
let flipX = flip.contains(.x), flipY = flip.contains(.y)
|
||||
//TODO: diag
|
||||
let flipX = flip.contains(.horz), flipY = flip.contains(.vert), flipD = flip.contains(.diag)
|
||||
return .init(
|
||||
v00: .init(flipX ? 1 : 0, flipY ? 0 : 1),
|
||||
v01: .init(flipX ? 0 : 1, flipY ? 0 : 1),
|
||||
v10: .init(flipX ? 1 : 0, flipY ? 1 : 0),
|
||||
v01: flipD ? .init(flipX ? 1 : 0, flipY ? 1 : 0) : .init(flipX ? 0 : 1, flipY ? 0 : 1),
|
||||
v10: flipD ? .init(flipX ? 0 : 1, flipY ? 0 : 1) : .init(flipX ? 1 : 0, flipY ? 1 : 0),
|
||||
v11: .init(flipX ? 0 : 1, flipY ? 1 : 0))
|
||||
}
|
||||
|
||||
@ -363,14 +362,17 @@ fileprivate extension SpriteBatch.Quad {
|
||||
}
|
||||
|
||||
static func texcoords(_ texSize: Size<Int>, _ source: Rect<Float>, _ flip: Sprite.Flip) -> Self {
|
||||
let flipX = flip.contains(.x), flipY = flip.contains(.y)
|
||||
let flipX = flip.contains(.horz), flipY = flip.contains(.vert), flipD = flip.contains(.diag)
|
||||
let invSize = 1 / Size<Float>(texSize)
|
||||
let st = Extent(source) * invSize
|
||||
//TODO: diag
|
||||
return .init(
|
||||
v00: .init(flipX ? st.right : st.left, flipY ? st.bottom : st.top),
|
||||
v01: .init(flipX ? st.left : st.right, flipY ? st.bottom : st.top),
|
||||
v10: .init(flipX ? st.right : st.left, flipY ? st.top : st.bottom),
|
||||
v01: flipD
|
||||
? .init(flipX ? st.right : st.left, flipY ? st.top : st.bottom)
|
||||
: .init(flipX ? st.left : st.right, flipY ? st.bottom : st.top),
|
||||
v10: flipD
|
||||
? .init(flipX ? st.left : st.right, flipY ? st.bottom : st.top)
|
||||
: .init(flipX ? st.right : st.left, flipY ? st.top : st.bottom),
|
||||
v11: .init(flipX ? st.left : st.right, flipY ? st.top : st.bottom))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user