Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- XIncludeFile "Matrix3.pbi"
- Structure Transformable
- origin.sVector2f
- position.sVector2f
- rotation.f
- scale.sVector2f
- *transform.sMatrix
- transformUpdate.b
- EndStructure
- Structure Drawable Extends Transformable
- List vertices.sVector2f()
- List transformed.sVector2f()
- EndStructure
- Declare.i getTransform(*t.Transformable)
- Procedure addVertex(*d.drawable, x.f, y.f)
- AddElement(*d\vertices())
- *d\vertices()\x = x
- *d\vertices()\y = y
- EndProcedure
- Procedure TranformDrawable(*d.drawable)
- If *d\transformUpdate = #True
- *d\transform = getTransform(*d)
- If ListSize(*d\transformed())
- ClearList(*d\transformed())
- EndIf
- ForEach *d\vertices()
- AddElement(*d\transformed())
- *v.sVector2f = transformPointMatrix(*d\transform,*d\vertices()\x,*d\vertices()\y)
- *d\transformed()\x = *v\x
- *d\transformed()\y = *v\y
- deleteVector2f(*v)
- Next
- EndIf
- EndProcedure
- Procedure setPosition(*t.Transformable, x.f, y.f )
- *t\position\x = x
- *t\position\y = y
- *t\transformUpdate = #True
- EndProcedure
- Procedure setRotation(*t.Transformable, angle.f )
- *t\rotation = angle
- *t\transformUpdate = #True
- EndProcedure
- Procedure setScale(*t.Transformable, scalex.f, scaley.f )
- *t\scale\x = scalex
- *t\scale\y = scaley
- *t\transformUpdate = #True
- EndProcedure
- Procedure setOriginPoint(*t.Transformable, offsetx.f, offsety.f)
- *t\origin\x = offsetx
- *t\origin\y = offsety
- *t\transformUpdate = #True
- EndProcedure
- Procedure.i getTransform(*t.Transformable)
- If *t\transformUpdate = #True
- angle.f = -*t\rotation * #PI / 180
- cosine.f = Cos(angle)
- sine.f = Sin(angle)
- sxc.f = *t\scale\x * cosine
- syc.f = *t\scale\y * cosine
- sxs.f = *t\scale\x * sine
- sys.f = *t\scale\y * sine
- tx.f = -*t\origin\x * sxc - *t\origin\y * sys + *t\position\x
- ty.f = *t\origin\x * sxs - *t\origin\y * syc + *t\position\y
- transform(*t\transform, sxc, sys, tx, -sxs, syc, ty,0, 0, 1)
- *t\transformUpdate = #True
- EndIf
- ProcedureReturn *t\transform
- EndProcedure
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement