Обновить
0
0
Евгений Благодарев@Onni

Пользователь

Отправить сообщение

Это конечно все вкусовщина. Для себя определил правило что цвет меняется в тех областях где одно и то же слово имеет разный семантический смысл.

For имеет разный смысл как часть кода строки или комментария. Значит один цвет для всего кода. Второй цвет для строк. Третий для комментариев.

Плюс использую выделение жирным или курсивом в некоторых местах вместо цвета.

Скрытый текст

Пришел к точно такому же подходу. Но не из страха аллокаторов, тут много плюсов:

  • Понимание ограничений игры. Сколько максимум будет объектов\событий в кадре.

  • Если все игровое состояние лежит в одной большой структуре, то его легко сохранить/восстановит просто скопировав память.

  • Подход с CRTP (не знал что так называется) или через tagged union просто на практике показался более удобным чем огромные списки наследования.

Енамы рекомендую аннотировать StringEnumConverter. Иначе индексы могут поехать, если хранить так данные игрока.

как ниже писали. для UnityEngine.Object переопределен операторы ==/!=

var go = new GameObject();

// уничтожаем объект, но ссылка не меняется на null
GameObject.Destroy(go);

 // тут переопределеннй оператор вернет false и SendMessage не вызовется
if (go != null) go.SendMessage(...);

// А будет честная проверка ReferenceEquals и программа упадет, вызвав SendMessage
go?.SendMessage(""); 

В юнити ещё это выстреливает при myComponent?.DoIt() или для оператора ??

Идейно похоже на HTMX, но со своим видением. Здорово

Проглядел что вы об написали об этом. С одной стороны ожидаемо, но я в тайне надеялся что есть какая-то магия.

Я давно видел эту штуку. Но никогда не проверял, что буде если:

ref var myRef = ref CollectionsMarshal.GetValueRefOrNullRef(dict, ket);
dict.Add(...); // тут происходит рост коллекции
myRef = value; // куда сейчас указывает myRef?

Вообще когда я только начал изучать TS я ожидал что type guards позволяют вот так делать. Все еще мечтаю что добавят. С другой стороны typeof так умеет

function getType(x: unknown): 
  x is { name: string } ? 'user' :
  x is { size: number } ? 'box' :
  x is number ? 'number' :
  x is string ? 'string' :
  never {
  ???
}

switch(getTupe(x)) {
  case 'user': log(x.name);
  case 'box': log(x.size);
  case 'number': log(x * x);
  case 'string': log(x);
}

export type StrBool = 'foo'& {_strbooltag?: 'StrBool'} | 'bar' & {_strbooltag?: 'StrBool'} | null;
export type Response = { decision: Exclude<string, 'foo'|'bar'> | StrBool };

Можно как-то так сделать

Начало задачи синхронизиповано с концом предыдущей задачи.

Интересно. Спасибо, возьму на заметку.

Утиная типизация чаще всего не вызывает проблем, но иногда хочется ее запрещать для каки-то типов.

Я использовал enum в CocosCreator так:

enum UnitId { }
enum ItemId { }

var units: Recor<UnitId, Unit>;

function spendItem(unitId: UnitId, itemId: ItemId, amount: Int) {
  ...
}

Вместо того что бы использовать простой number. Так компилятор не давал перепутать id-ки и и выполнить: `const unit = units[itemId]`

Правда не нашел какими флагами это включается на TSPlayground

Я наоборот устал от того что во View нужно создавать очереди и мучаться с тем что модель уже обновилась, а view еще доигрывает анимацию.

Я сейчас остановился на варианте когда есть контроллер, который знает и про модель и про вью и обновляет их параллельно:

class Controller {
   Model _mode;
   View _view;

   async void DrawCard(int amout = 5) {
      for (var i = 0; i < amout; i++) {
         var card = _model.Cards[0];
         _mdel.Cards.Remove(0);
         if (_view != null) {
            await _view.DrawCard(card);
         }
      }
   }
}

Контроллер устроен так что может работать если view не присвоить.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность