Skip to content

Instantly share code, notes, and snippets.

@pablitar
Created February 1, 2019 22:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pablitar/cfa238be56fa15ea559acf876c884e32 to your computer and use it in GitHub Desktop.
Save pablitar/cfa238be56fa15ea559acf876c884e32 to your computer and use it in GitHub Desktop.
class GiantClawAppearance(resources: Resources)(val claw: GiantClaw) extends Appearance {
object body extends TextureAppearance[GiantClaw](resources.GiantClaw.body)()(claw) {
val pivotSprite = resources.GiantClaw.pivot
override def renderOn(renderers: Renderers): Unit = {
//Render thrust
renderSpriteWithPositioned(renderers, pivotSprite, claw.topHydraulics)()
super.renderOn(renderers)
}
}
object topHydraulics extends TransformedSpriteAppearance(claw.topHydraulics, resources.GiantClaw.hydraulicsTop, new Vector2(-12, -21)) {
object topEdge extends TransformedSpriteAppearance(claw.topHydraulics.edge, resources.GiantClaw.edgeTop, new Vector2(-50, -55.5f)) {
val anchorRenderer = new AnchorRenderer(
parentAnchorPoint,
anchorPoint, 9)
def parentAnchorPoint = claw.topHydraulics.transform(new Vector2(87, 1))
def anchorPoint = claw.topHydraulics.edge.transform(new Vector2(10, 1))
override def renderOn(renderers: Renderers): Unit = {
anchorRenderer.drawAnchor(renderers)
super.renderOn(renderers)
}
}
val anchorRenderer = new AnchorRenderer(
parentAnchorPoint,
anchorPoint, 18)
def parentAnchorPoint = claw.transform(new Vector2(77, 0))
def anchorPoint = claw.topHydraulics.transform(new Vector2(0, 0))
override def renderOn(renderers: Renderers): Unit = {
anchorRenderer.drawAnchor(renderers)
super.renderOn(renderers)
topEdge.renderOn(renderers)
}
}
class ClawHydraulicsAppearance(hydraulics: claw.ClawHydraulics)
extends TransformedSpriteAppearance(hydraulics, resources.GiantClaw.hydraulicsSide, new Vector2(-10, -12)) {
val edgeAppearance = new ClawEdgeAppearance(hydraulics.edge)
val anchorRenderer = new AnchorRenderer(
parentAnchorPoint,
anchorPoint, 15)
def anchorPoint = hydraulics.transform(new Vector2(0, 30))
def parentAnchorPoint = claw.transform(new Vector2(78, if (hydraulics.flipped) 73 else -74))
override def renderOn(renderers: Renderers): Unit = {
anchorRenderer.drawAnchor(renderers)
edgeAppearance.renderOn(renderers)
super.renderOn(renderers)
}
}
class ClawEdgeAppearance(edge: claw.ClawEdge)
extends TransformedSpriteAppearance(edge, resources.GiantClaw.edgeSide, new Vector2(-58, -166)) {
val anchorRenderer = new AnchorRenderer(
parentAnchorPoint,
anchorPoint, 9)
def anchorPoint = edge.transform(new Vector2(2, 38))
def parentAnchorPoint = edge.parent.transform(new Vector2(89, 88))
override def renderOn(renderers: Renderers): Unit = {
anchorRenderer.drawAnchor(renderers)
super.renderOn(renderers)
}
}
class AnchorRenderer(parentPosition: => Vector2, position: => Vector2, width: Float) {
def drawAnchor(renderers: Renderers) = {
renderers.withShapes(ShapeType.Filled) { shapeRenderer =>
drawAnchorSegment(shapeRenderer, Colors.ClawAnchor.border, width)
drawAnchorSegment(shapeRenderer, Colors.ClawAnchor.specular, width - 2)
drawAnchorSegment(shapeRenderer, Colors.ClawAnchor.color, width - 5)
}
}
def drawAnchorSegment(shapeRenderer: ShapeRenderer, color: Color, width: Float) = {
shapeRenderer.setColor(color)
shapeRenderer.rectLine(parentPosition, position, width)
}
}
val leftHydraulicsAppearance = new ClawHydraulicsAppearance(claw.leftHydraulics)
val rightHydraulicsAppearance = new ClawHydraulicsAppearance(claw.rightHydraulics)
override def bounds: Bounds = body.bounds //TODO
override def renderOn(renderers: Renderers): Unit = {
//Render back body
leftHydraulicsAppearance.renderOn(renderers)
rightHydraulicsAppearance.renderOn(renderers)
body.renderOn(renderers)
topHydraulics.renderOn(renderers)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment