Advertisement
Guest User

Untitled

a guest
Oct 5th, 2015
449
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. XIncludeFile "Matrix3.pbi"
  2.  
  3. Structure Transformable
  4. origin.sVector2f
  5. position.sVector2f
  6. rotation.f
  7. scale.sVector2f
  8. *transform.sMatrix
  9. transformUpdate.b
  10. EndStructure
  11.  
  12. Structure Drawable Extends Transformable
  13. List vertices.sVector2f()
  14. List transformed.sVector2f()
  15. EndStructure
  16.  
  17. Declare.i getTransform(*t.Transformable)
  18.  
  19. Procedure addVertex(*d.drawable, x.f, y.f)
  20. AddElement(*d\vertices())
  21. *d\vertices()\x = x
  22. *d\vertices()\y = y
  23. EndProcedure
  24.  
  25. Procedure TranformDrawable(*d.drawable)
  26. If *d\transformUpdate = #True
  27.  
  28. *d\transform = getTransform(*d)
  29.  
  30. If ListSize(*d\transformed())
  31. ClearList(*d\transformed())
  32. EndIf
  33.  
  34. ForEach *d\vertices()
  35. AddElement(*d\transformed())
  36. *v.sVector2f = transformPointMatrix(*d\transform,*d\vertices()\x,*d\vertices()\y)
  37. *d\transformed()\x = *v\x
  38. *d\transformed()\y = *v\y
  39. deleteVector2f(*v)
  40. Next
  41. EndIf
  42. EndProcedure
  43.  
  44.  
  45.  
  46. Procedure setPosition(*t.Transformable, x.f, y.f )
  47. *t\position\x = x
  48. *t\position\y = y
  49. *t\transformUpdate = #True
  50. EndProcedure
  51.  
  52. Procedure setRotation(*t.Transformable, angle.f )
  53. *t\rotation = angle
  54. *t\transformUpdate = #True
  55. EndProcedure
  56.  
  57. Procedure setScale(*t.Transformable, scalex.f, scaley.f )
  58. *t\scale\x = scalex
  59. *t\scale\y = scaley
  60. *t\transformUpdate = #True
  61. EndProcedure
  62.  
  63. Procedure setOriginPoint(*t.Transformable, offsetx.f, offsety.f)
  64. *t\origin\x = offsetx
  65. *t\origin\y = offsety
  66. *t\transformUpdate = #True
  67. EndProcedure
  68.  
  69. Procedure.i getTransform(*t.Transformable)
  70. If *t\transformUpdate = #True
  71.  
  72. angle.f = -*t\rotation * #PI / 180
  73. cosine.f = Cos(angle)
  74. sine.f = Sin(angle)
  75. sxc.f = *t\scale\x * cosine
  76. syc.f = *t\scale\y * cosine
  77. sxs.f = *t\scale\x * sine
  78. sys.f = *t\scale\y * sine
  79. tx.f = -*t\origin\x * sxc - *t\origin\y * sys + *t\position\x
  80. ty.f = *t\origin\x * sxs - *t\origin\y * syc + *t\position\y
  81.  
  82. transform(*t\transform, sxc, sys, tx, -sxs, syc, ty,0, 0, 1)
  83.  
  84. *t\transformUpdate = #True
  85. EndIf
  86. ProcedureReturn *t\transform
  87. EndProcedure
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement