Раз Вы такой добрый, появился еще один вопрос
Как писать в начало блока, а не в конец?
Например блок BLK_MAIN , как мне написать текст в самое начало этого блока а не в конец?
(Другими словами как выбрать позицию в которую писать. т.е мне нужно каждый раз выбирать блок BLK_MAIN и установить position в 0.)
Просто каждая новая функция должна быть выше предыдущей, а у меня получается наоборот.
Этот топик читают: Гость
Ответов: 258
Рейтинг: -27
|
|||
карма: 0 |
|
Ответов: 4629
Рейтинг: 749
|
|||
Можно добавлять не новый блок к существующему, а существующий блок к новому, потом существующий блок удалять, а имя нового подставлять в глобальную переменную на место старого. Но это требует дополнительных движений.
А какая необходимость в том, чтобы "каждая новая функция должна быть выше предыдущей"? Можно объявить глобальный массив, в который записывать имена блоков. Затем в конце генерации кода перебирать этот массив в обратном порядке, впечатывать каждый блок в основной код и затем блок удалять. |
|||
карма: 26 |
|
Ответов: 258
Рейтинг: -27
|
|||
В общем это осталась единственная проблема, вот пакет с несколькими компонентами http://rghost.ru/private/8vcqYTSkN/d21c065b2c7dacb9a9a7c77f3d2c7df9 . Компонент который создает функцию не работает при вызове такого же компонента после его. (Получается функция в функции, а нужно что бы были две разные функции, и вызываемая функция должна быть выше той что вызывает ) Схема:
Я так понял в кодогенераторе массив в который добавляется строка с помощью Add? Нельзя как-то заменить на InsertAt( INT id ), добавить переменную с текущим ID, и добавить функции block.getcurid, block.setcurid, block.begin, block.end, block.begin которая установит ID в 0, block.end которая установит ID в count строк (Чтобы перейти в начало и конец текущего блока) ? Жаль паскаль не знаю Или какой там есть другой способ добавлять код в начала блока а не в конец? |
|||
карма: 0 |
|
Ответов: 4629
Рейтинг: 749
|
|||
Перед вызовом event(onCreate) у тебя должен быть установлен текущим блок cur_tmp_func. А ты делаешь block.select(BLK_MAIN), пишешь туда println('function '+code(data_FuncName)+varid, ' takes nothing returns nothing'), а потом вызываешь event(onCreate). И что может записать следующий компонент в BLK_MAIN? Всё, что он запишет, будет находиться после function предыдущего компонента. Я не зря в примере показал, что событие вызывается перед активацией BLK_MAIN, и данные в него заносятся уже после отработки события. То-есть, когда ты вызываешь событие onCreate, ты ничего ещё не должен выводить в BLK_MAIN, так как туда может захотеть что-то написать другой компонент.
Повторяю: если есть общий блок, в который могут писать разные компоненты, значит данные в него заносить только после вызова всех событий. Для этого и создается временный блок, который копируется в главный только после отработки событий. |
|||
карма: 26 |
|
Ответов: 258
Рейтинг: -27
|
|||
Все теперь точно понял) Сейчас проверю.
Все теперь работает как и было задумано Просто ошибся в коде, блоки создал и ничего туда не записал))) ------------ Дoбавленo в 21.24: Netspirit, не получается создать модифицированный компонент Memory. Если используется точка doValue он должен с помощью println добавить новую глобальную переменную в код, и каждый вызов Value возвращать ее название. Иначе просто вернуть стандартное значение. Это вообще реально сделать или нет? локальные перменные FTCG нельзя объявить за пределами функции из-за этого по моему возникла эта проблема Есть ли решение этой проблемы? |
|||
карма: 0 |
|
Ответов: 4629
Рейтинг: 749
|
|||
Cubone писал(а): Есть ли решение этой проблемы?Cubone писал(а): локальные перменные FTCG нельзя объявить за пределами функции |
|||
карма: 26 |
|
Ответов: 258
Рейтинг: -27
|
|||
Я думал она у меня не работает, а в документации не написано где ее объявлять )
|
|||
карма: 0 |
|
Ответов: 4629
Рейтинг: 749
|
|||
Когда что-то не получается - смотри код других пакетов.
|
|||
карма: 26 |
|
Ответов: 258
Рейтинг: -27
|
|||
Так зачем создавать что-то без документации.
Это означает что тот кто написал кодогенератор FTCG делал его лично для себя. Бред же. |
|||
карма: 0 |
|
Ответов: 4629
Рейтинг: 749
|
|||
А тому, кто создавал кодогенератор, кто справку напишет? Радуйся, что хоть такое есть. Никто никому ничего не должен.
Бери и пиши сам. |
|||
карма: 26 |
|
Ответов: 824
Рейтинг: 138
|
|||
Где же эта "ракета" подевалась...?
Никто не находил? Если кто найдет - пустите плз. |
|||
карма: 1 |
|
Ответов: 178
Рейтинг: 9
|
|||
За эту беседу вы Netspitrit-у должны спасибо сказать.
|
|||
карма: 0 |
|
Ответов: 258
Рейтинг: -27
|
|||
Hart, Говорил уже
В общем появилась ужаснейшая проблема. Вместо того что нужно мне, на точку выдается стандартные данные. trace показывает что все в порядке, но в итоге ничего не срабатывает. Пакет: https://dl.dropboxusercontent.com/u/280307663/Warcraft3_hiasm_packet.rar Пример: http://pastebin.com/DuSWZaim В компоненте с динамическими верхними точками проблема. При чтении точка Value с других компонентов выдает значение по умолчанию вместо того что возвращает функция func Value. Почему и как исправить? |
|||
карма: 0 |
|
Ответов: 70
Рейтинг: 1
|
|||
Всем доброго времени!
Разбираюсь с FTCG, и вот на какую не понятную вещь наткнулся.... Происходит это в пакете питон. 1) указываем в файле struct.hws
2) Главный элемент кода hiEntriPoint.hws
Создаю заголовки у каждого блоки и выясняется, что код у некоторых заголовках находится с низу относительно заголовка а у некоторых блоков с верху, на картинке это видно Снимок.JPG Скажите это как-то фиксится ? Редактировалось 1 раз(а), последний 2023-11-24 10:07:06 |
|||
карма: 1 |
|
Ответов: 2237
Рейтинг: 676
|
|||
Pavel, не приходилось пользоваться, а только поверхностно, но разве не должно быть одинаково:
Справка писал(а): inclvl ()
Увеличивает на 1 смещение печатаемого кода |
|||
карма: 11 |
|