11package com.osudroid.ui.v2.mainmenu
22
33import com.reco1l.andengine.Anchor
4+ import com.reco1l.andengine.buffered.BufferSharingMode
45import com.reco1l.andengine.component.UIComponent
56import com.reco1l.andengine.component.scaleCenter
67import com.reco1l.andengine.shape.UITriangle
78import com.reco1l.andengine.theme.Colors
89import com.reco1l.framework.Color4
910import com.reco1l.toolkt.kotlin.fastForEach
10- import com.reco1l.toolkt.kotlin.fastForEachIndexed
1111import org.anddev.andengine.engine.camera.Camera
1212import javax.microedition.khronos.opengles.GL10
1313import kotlin.random.Random
1414
1515class TrianglesDispenser : UIComponent () {
1616
1717 /* *
18- * The min size of triangles relative to the dispenser size .
18+ * The minimum scale factor for triangles .
1919 */
2020 var triangleMinSize = 0.2f
2121
2222 /* *
23- * The max size of triangles relative to the dispenser size .
23+ * The maximum scale factor for triangles .
2424 */
2525 var triangleMaxSize = 0.4f
2626
@@ -55,20 +55,32 @@ class TrianglesDispenser : UIComponent() {
5555 val triangle = UITriangle ()
5656
5757
58+ /* *
59+ * The base size of the triangle shape relative to the dispenser height.
60+ */
61+ private val triangleBaseSize: Float
62+ get() = height * 0.6f
63+
64+
5865 private var activeTriangles = mutableListOf<TriangleInfo >()
5966
6067 private var spawnTimer = 0f
6168
6269
6370 init {
6471 attachChild(triangle.apply {
65- width = triangleMinSize
6672 color = Colors .White
6773 scaleCenter = Anchor .Center
68- allowBufferCache = false
74+ bufferSharingMode = BufferSharingMode . Dynamic
6975 })
7076 }
7177
78+ override fun onSizeChanged () {
79+ super .onSizeChanged()
80+ triangle.width = triangleBaseSize
81+ triangle.height = triangleBaseSize
82+ }
83+
7284
7385 override fun onManagedUpdate (deltaTimeSec : Float ) {
7486 // Update spawn timer
@@ -86,16 +98,14 @@ class TrianglesDispenser : UIComponent() {
8698 info.update(deltaTimeSec)
8799 }
88100
89- // Remove triangles that went off screen (above the dispenser)
90- activeTriangles.removeAll { it.y < - it.size }
101+ activeTriangles.removeAll { it.y < - (triangleBaseSize * it.scale) }
91102
92103 super .onManagedUpdate(deltaTimeSec)
93104 }
94105
95106 override fun onDrawChildren (gl : GL10 , camera : Camera ) {
96- activeTriangles.fastForEachIndexed { index, info ->
97- triangle.width = info.size
98- triangle.height = info.size
107+ activeTriangles.fastForEach { info ->
108+ triangle.setScale(info.scale)
99109 triangle.y = info.y
100110 triangle.x = info.x
101111 triangle.color = info.color
@@ -110,7 +120,7 @@ class TrianglesDispenser : UIComponent() {
110120
111121
112122 private fun spawnTriangle () {
113- val size = height * Random .nextFloat().let {
123+ val scale = Random .nextFloat().let {
114124 triangleMinSize + it * (triangleMaxSize - triangleMinSize)
115125 }
116126
@@ -120,18 +130,18 @@ class TrianglesDispenser : UIComponent() {
120130
121131 val color = colorPalette.random()
122132 val x = Random .nextFloat() * width
123- val y = height + size
133+ val y = height + triangleBaseSize * scale
124134
125135 val rotation = if (Random .nextBoolean()) 0f else 180f
126136
127- activeTriangles.add(TriangleInfo (x, y, size , velocity, color, rotation))
137+ activeTriangles.add(TriangleInfo (x, y, scale , velocity, color, rotation))
128138 }
129139
130140
131141 data class TriangleInfo (
132142 var x : Float ,
133143 var y : Float ,
134- var size : Float ,
144+ var scale : Float ,
135145 var velocity : Float ,
136146 var color : Color4 ,
137147 var rotation : Float ,
0 commit comments