Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Pool {
- private val tmp = List(10) {
- Transmitter()
- }
- val objects = List(40) {
- when {
- it < 10 -> Colored(Region.rndColorName(), Shell(), Direction.DOWN).also { it.isVisible = false }
- it < 30 -> Arrow(Name.ARROW, Shell(), Direction.DOWN).also { it.isVisible = false }
- else -> Bomb(Name.BOMB, Shell(), Direction.DOWN).also { it.isVisible = false }
- }
- }
- fun add(name: Name, shell: Shell, direction: Direction) {
- for (id in tmp.indices) {
- if (tmp[id].name == null) {
- tmp[id].name = name
- tmp[id].shell = shell
- tmp[id].direction = direction
- Transmitter.counter++
- break
- }
- }
- }
- // objects должен содержать только один класс, так как Colored,Arrow,Bomb в objects не имеют значения.
- // проход завершается если в tmp закончились объекты tmp[N].var == null
- fun update() {
- var tmpId = 0
- for (id in objects.indices) {
- if (Transmitter.counter == 0) {
- println(id)
- break
- }
- if (!objects[id].isVisible) {
- if (tmp[tmpId].name == null || tmpId >= tmp.size - 1) {
- clearTmp()
- return
- } else {
- objects[id].reuse(
- tmp[tmpId].name!!,
- tmp[tmpId].shell!!,
- tmp[tmpId].direction!!
- )
- tmpId++
- Transmitter.counter--
- }
- }
- }
- clearTmp()
- }
- // проход завершается как будет найден последний объект из tmp в objects по имени
- // tmp постоянно прогоняется полностью
- fun update2() {
- for (id in objects.indices) {
- if (Transmitter.counter == 0) {
- println(id)
- break
- }
- if (!objects[id].isVisible) {
- for (i in tmp.indices) {
- if (objects[id].name == tmp[i].name) {
- objects[id].reuse(
- tmp[i].name!!,
- tmp[i].shell!!,
- tmp[i].direction!!
- )
- tmp[i].name = null
- tmp[i].shell = null
- tmp[i].direction = null
- Transmitter.counter--
- break
- }
- }
- }
- }
- clearTmp()
- }
- private fun clearTmp() {
- for (id in tmp.indices) {
- tmp[id].name = null
- tmp[id].shell = null
- tmp[id].direction = null
- }
- Transmitter.counter = 0
- }
- }
- class Transmitter {
- var name: Name? = null
- var shell: Shell? = null
- var direction: Direction? = null
- companion object {
- var counter = 0
- }
- }
- fun test() {
- Pool.add(Name.RED, Shell(), Direction.LEFT)
- Pool.add(Name.ARROW, Shell(), Direction.MISSING)
- Pool.add(Name.BOMB, Shell(), Direction.UP)
- // Pool.update() // всего 3 прохода, так как нужное находится при первом name == null
- Pool.update2() // 30 проходов, так как BOMB встречается на позиции 30 в objects
- var isVisible = 0
- for (o in Pool.objects) {
- if (o.isVisible) isVisible++
- println("ID = ${o.id}, Name: ${o.name}, ${o.isVisible}")
- }
- println("В пул добавлены $isVisible объекта")
- }
- //------------------------------------------------------------------------------------------------------------------
- results:
- update()
- 3 прохода objects (первые 3 ячейки из objects )
- ID = 16, Name: RED, true
- ID = 17, Name: ARROW, true
- ID = 18, Name: BOMB, true
- ID = 19, Name: GREEN, false
- ID = 20, Name: RED, false
- ID = 21, Name: GREEN, false
- ID = 22, Name: BLUE, false
- ID = 23, Name: YELLOW, false
- ID = 24, Name: LIGHT_BLUE, false
- ID = 25, Name: LIGHT_BLUE, false
- ID = 26, Name: ARROW, false
- ID = 27, Name: ARROW, false
- ID = 28, Name: ARROW, false
- ID = 29, Name: ARROW, false
- ID = 30, Name: ARROW, false
- ID = 31, Name: ARROW, false
- ID = 32, Name: ARROW, false
- ID = 33, Name: ARROW, false
- ID = 34, Name: ARROW, false
- ID = 35, Name: ARROW, false
- ID = 36, Name: ARROW, false
- ID = 37, Name: ARROW, false
- ID = 38, Name: ARROW, false
- ID = 39, Name: ARROW, false
- ID = 40, Name: ARROW, false
- ID = 41, Name: ARROW, false
- ID = 42, Name: ARROW, false
- ID = 43, Name: ARROW, false
- ID = 44, Name: ARROW, false
- ID = 45, Name: ARROW, false
- ID = 46, Name: BOMB, false
- ID = 47, Name: BOMB, false
- ID = 48, Name: BOMB, false
- ID = 49, Name: BOMB, false
- ID = 50, Name: BOMB, false
- ID = 51, Name: BOMB, false
- ID = 52, Name: BOMB, false
- ID = 53, Name: BOMB, false
- ID = 54, Name: BOMB, false
- ID = 55, Name: BOMB, false
- В пул добавлены 3 объекта
- update2()
- 31 проход objects (первый найденый: RED = 18, ARROW = 26, BOMB = 46 )
- ID = 16, Name: YELLOW, false
- ID = 17, Name: LIGHT_BLUE, false
- ID = 18, Name: RED, true
- ID = 19, Name: ORANGE, false
- ID = 20, Name: ORANGE, false
- ID = 21, Name: PURPLE, false
- ID = 22, Name: PURPLE, false
- ID = 23, Name: PURPLE, false
- ID = 24, Name: BLUE, false
- ID = 25, Name: ORANGE, false
- ID = 26, Name: ARROW, true
- ID = 27, Name: ARROW, false
- ID = 28, Name: ARROW, false
- ID = 29, Name: ARROW, false
- ID = 30, Name: ARROW, false
- ID = 31, Name: ARROW, false
- ID = 32, Name: ARROW, false
- ID = 33, Name: ARROW, false
- ID = 34, Name: ARROW, false
- ID = 35, Name: ARROW, false
- ID = 36, Name: ARROW, false
- ID = 37, Name: ARROW, false
- ID = 38, Name: ARROW, false
- ID = 39, Name: ARROW, false
- ID = 40, Name: ARROW, false
- ID = 41, Name: ARROW, false
- ID = 42, Name: ARROW, false
- ID = 43, Name: ARROW, false
- ID = 44, Name: ARROW, false
- ID = 45, Name: ARROW, false
- ID = 46, Name: BOMB, true
- ID = 47, Name: BOMB, false
- ID = 48, Name: BOMB, false
- ID = 49, Name: BOMB, false
- ID = 50, Name: BOMB, false
- ID = 51, Name: BOMB, false
- ID = 52, Name: BOMB, false
- ID = 53, Name: BOMB, false
- ID = 54, Name: BOMB, false
- ID = 55, Name: BOMB, false
- В пул добавлены 3 объекта
Advertisement
Add Comment
Please, Sign In to add comment