Добавлен
Хочу сделать карту с пошаговыми боями, но столкнулся с абсурдной проблемой.
Механика такая: создаю "поле" с клетками на основе магического круга, которые делаю не видимыми. Когда выбираешь нужную клетку, то к ней "чертится" путь за счёт изменения цветов у кругов на пути к выбранной клетки, если количество ходов до выбранной клетки меньше или равно количеству оставшихся кодов, то все зелёные, если ходов меньше, то те клетки, до которых нельзя дойти за оставшиеся ходы становятся красными. Однако в какой-то момент, если выбрать слишком далёкую клетку, то действие кода прервётся спустя 3 клетки, я уже битый час пытаюсь разобраться, но не могу понять в чём проблема. Попытался продебажить, понятнее не стало.
Писал на Wurst Script
Код 1
import ClosureTimers
import Step
import SecondaryFunction
import LinkedList

public let cellList = new LinkedList<unit>


init
    doAfter(.0) ->
        let startPos = vec2(0, 0)
        let length = 15
        let width = 15
        let count = length * width
        unit _now_lenght_ = null
        unit _now_width_ = null
        int _length_ = length
        int _width_ = width
        
        for i = 1 to count
            if i == 1
                _now_lenght_ = createUnit(Player(PLAYER_NEUTRAL_PASSIVE), STEP_ID, startPos, angle(270))
                _now_width_ = _now_lenght_
                cellList.add(_now_lenght_)
            else
                if _length_ > 1
                    let x = _now_lenght_.getX() + 190.0 * Cos(0.0.toRad())
                    let y = _now_lenght_.getY() + 190.0 * Sin(0.0.toRad())
                    _now_lenght_ = createUnit(Player(PLAYER_NEUTRAL_PASSIVE), STEP_ID, vec2(x, y), angle(270))
                    _length_ -= 1
                    cellList.add(_now_lenght_)
                else if _length_ == 1 and _width_ > 1
                    let x = _now_width_.getX() + 190.0 * Cos(90.0.toRad())
                    let y = _now_width_.getY() + 190.0 * Sin(90.0.toRad())
                    _now_lenght_ = createUnit(Player(PLAYER_NEUTRAL_PASSIVE), STEP_ID, vec2(x, y), angle(270))
                    _now_width_ = _now_lenght_
                    _width_ -= 1
                    _length_ = length
                    cellList.add(_now_lenght_)
Код 2
import ClosureTimers
import StepByStepStart
import Hero
import StandardTextTags
import SecondaryFunction

public unit playerPos = null
public unit playerMove = null
public int countOfActions = 4
public bool move = true


function changeColor(string filter, real x, real y, int count, real angle)
    real _newX = 0
    real _newY = 0

    if filter == "x"
        _newX = x + (128 * count) * Cos(angle)
        _newY = y
    else if filter == "y"
        _newX = x
        _newY = y + (128 * count) * Sin(angle)

    cellList.forEach() cell ->
        if cell.getX() == _newX and cell.getY() == _newY and countOfActions > 0
            cell.changingVisibility("t")
        else if cell.getX() == _newX and cell.getY() == _newY and countOfActions == 0
            cell.changingVisibility("f")
    countOfActions -= 1


function drawing_a_path()
    if move == true
        cellList.forEach() cell ->
            if cell != playerPos
                cell.changingVisibility("i")
        countOfActions = 4

    if countOfActions > 0
        let cell = GetTriggerUnit()
        let playerPosX = playerPos.getX()
        let playerPosY = playerPos.getY()
        let cellX = cell.getX()
        let cellY = cell.getY()
        print("Start!")

        if playerPosX == cellX and playerPosY == cellY
            standardTextTag(playerMove.getPos(), "Вы находитесь на этой клетке")

        else if playerPosX == cellX and playerPosY != cellY
            if cellY > playerPosY
                print("y >")
                let count = ( (cellY - playerPosY) / 128 ).toInt()
                for i = 1 to count
                    changeColor("y", playerPosX, playerPosY, i, 90.0.toRad())

            else if cellY < playerPosY
                print("y <")
                let count = ( (playerPosY - cellY) / 128 ).toInt()
                for i = 1 to count
                    changeColor("y", playerPosX, playerPosY, i, 270.0.toRad())
            print("X0: " + playerPosX.toString() + "; Y0: " + playerPosY.toString())
            print("X1: " + cellX.toString() + "; Y1: " + cellY.toString())

        else if playerPosX != cellX and playerPosY == cellY
            if cellX > playerPosX
                print("x >")
                let count = ( (cellX - playerPosX) / 128 ).toInt()
                for i = 1 to count
                    changeColor("x", playerPosX, playerPosY, i, 0.0.toRad())

            else if cellX < playerPosX
                print("x <")
                let count = ( (playerPosX - cellX) / 128 ).toInt()
                for i = 1 to count
                    changeColor("x", playerPosX, playerPosY, i, 180.0.toRad())
            print("X0: " + playerPosX.toString() + "; Y0: " + playerPosY.toString())
            print("X1: " + cellX.toString() + "; Y1: " + cellY.toString())

        else if playerPosX != cellX and playerPosY != cellY
            standardTextTag(playerMove.getPos(), "Двигаться можно только по прямым")
        print("End!")

    else
        standardTextTag(playerMove.getPos(), "Ваши действия на этом ходу закончились")


init
    doAfter(.5) ->
        let cellSelectionTrigger = CreateTrigger()
        cellList.forEach() cell ->
            cellSelectionTrigger.registerUnitEvent(cell, EVENT_UNIT_SELECTED)
            cell.changingVisibility("i")
        cellSelectionTrigger.addAction(function drawing_a_path)

        let copy = cellList.copy()
        copy.shuffle()
        playerPos = copy.getFirst()
        playerPos.changingVisibility("p")
        playerMove = createUnit(Player(0), HERO_MOVE_ID, playerPos.getPos(), playerPos.getFacingAngle())
`
ОЖИДАНИЕ РЕКЛАМЫ...
11
ScorpioT1000, спасибо, помогло, везде doAfter написал и заработало)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.