Я бы public void AddIcon(player owner, string model, float x, float y, int utype) заменил на static thistype Add(player owner, string model, real x, real y, int utype). Просто как-то нелогично: создать иконку можно через var ico = HeroIcon.create(), а пользоваться ей нельзя, пока не напишешь ico.AddIcon(...) И еще такой вопрос: как ты собираешься удалять trackable'ы после выбора героя? Может, лучше сделать их невидимыми, а текстуры накладывать через юнитов/разрушаемых?
Замечания кончились, дальше пошли придирки. Внутри методов this можно не писать. Просто .owner или даже owner Члены структур по умолчанию публичные. public можно не писать. И еще я считаю хэш здесь лишним.
Code
private static void CatchTrackableAction() { var ev = GetTriggerEventId(); handle h = GetTriggeringTrackable(); HeroIcon ico = 1; whilenot h == ico.track { ico++; } if ev == EVENT_GAME_TRACKABLE_TRACK { BJDebugMsg("TRACK"); } elseif (ev == EVENT_GAME_TRACKABLE_HIT) { BJDebugMsg("HIT"); } flush ev, h; }
Я бы не использовал методы отсылающие на обычный return this.x итд а работал бы с ними напрямую, все правильно, никакие static методы не юзай, это говнище полное, так ты можешь работать с каждой иконкой, забивая её в переменную, это надежнее - опрятнее и быстрее
Я бы не использовал методы, отсылающие на обычный return this.x итд
Почему? Таким образом мы гарантируем сохранность данных. Что никто (даже сам автор системы, случайно) не изменит их. Если не нравятся скобки функции, можно использовать real operator X() { return .x; }
Насчет static не совсем понял. Какие действия в данном случае можно сделать между HeroIcon.create() и ico.AddIcon()? Почему не следует их объединять?
private static void CatchTrackableAction() { var ev = GetTriggerEventId(); HeroIcon ico = 1; if (ev == EVENT_GAME_TRACKABLE_TRACK) { BJDebugMsg("TRACK"); } else { BJDebugMsg("HIT"); } flush ev; }
Что это? Посмотри еще раз на тот код, который я дал.
Quote (Ty3uK)
private bool isPicked;
Вот это немного не в тему - зачем кнопке информация о том, выбран ли герой? Это просто кнопка. Особенно если учесть, что это поле есть у всех 12 иконок (для каждого игрока).
Quote (Ty3uK)
TriggerAddAction(Track, function HeroIcon.CatchTrackableAction);
Только заметил - ты при каждом создании кнопки добавляешь действие.
Quote (Ty3uK)
Операторы - няшная штука
А то! Разрешается еще вот так:
Code
void operator UnitType=(int value) { if value != 0 { .utype = value; } else { .destroy(); } }
Знаешь, можно бы еще в структуру добавить bool array[12], кому видна иконка, а track сделать trackable array[12]. Так мы можем уменьшить количество декораций до двенадцати раз.