Created
February 1, 2019 22:43
-
-
Save pablitar/cfa238be56fa15ea559acf876c884e32 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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