Anonymous
)
Snusmumriken
Есть два типа юзердаты:
1. lightuserdata — это просто указатель на сишную структуру, тут НЕ работают метатаблицы, и оно всегда одинаковое: то есть, ты можешь десять раз выгрузить в луа указатель, и он всегда будет одним и тем же (ptr1 == ptr2 => true)
2. fulluserdata — сишная структура, которая управляется луёвой стороной. Разметка и сборка производится луями, работают метатаблицы включая __gc и т.д. Тут — если ты делаешь lua_newuserdata — каждый раз создаётся новая юзердата, то есть они никогда не равны между собой, даже если ты скопировал в них одну и ту же структуру.
Как правило, fulluserdata используется следующим образом:
MyType * ptr = lua_newuserdata(L, sizeof(MyType));
// КОПИРУЕМ значение по указателю юзердаты
*ptr = MyTypeStruct; // или *ptr = &MyTypeStructPtr
Простым присваиванием (menu_ud = menu;) — ты просто меняешь указатель, а не значение по нему.
То есть, мы луями размечаем кусочек памяти, а потом заполняем его требуемой нам структурой.
Snusmumriken
Метатаблица с индексом типа __class = "myclass"
Snusmumriken
А так — в луях уже есть неплохие встроенные инструменты для ООП: lua_newmetatable(L, "classname")
Snusmumriken
А потом такой:
mytype * ptr = (mytype *)luaL_checkudata(L, 1, "classname");
Snusmumriken
Кстати, если ты передаёшь в луа чисто поинтер — то придётся делать чот такое:
// размечаем юзердату размером с указатель
MyType * ptr = lua_newuserdata(L, sizeof(MyType *));
// вставляем указатель в качестве значения по указателю луёв
*ptr = MyTypeStructPtr;
А потом такой:
MyType * structptr = &ptr;
Snusmumriken
Указатели — это весело. Тебе ещё предстоит в них вкурить нормально, весёлые времена null pointer exception'ов и утечек памяти.
mva
/me так и не вкурил полностью в указатели
FailsBot
Vadim так и не вкурил полностью в указатели
mva
т.е. я, как бы, от случая к случаю могу их использовать, но вот стопроцентного понимания этих *, **, & и иже с ними так и не пришло (т.е. каждый раз приходится заново вспоминать, как там именно где и кого разыменовывать чтобы преобразовать один указательный тип в другой
mva
вообще ненавижу это дело
mva
:E
Snusmumriken
Дело привычки
Igor
FailsBot
Vyacheslav
Pavel
Ребят а посоветуйте статический анализатор, с поддержкой классов?
Pavel
сейчас гоняю luachek, но он вроде не умеет в аннотации
Igor
Что-то ты совсем странное сделал
Igor
Работать-то работает, но выделяешь ты гораздо больше памяти, чем надо
Igor
В newuserdata тогда тебе нужно не размер структуры menu, а размер поинтера (sizeof(intptr_t))
Igor
Потому что ты потом область памяти, которую возвращает newuserdata кастуешь в поинтер на поинтер emenu_t. А поинтеру не нужно больше 4 байт (на 32битной системе), ну или 8 (на 64битной)
Pavel
Жаль.... Не хватает поддержки анннотаций на типы
Igor
Ааа, мне показалось ты там передал именно название струтктуры
Igor
Я в sizeof просто типы всегда указываю, а не сами переменные
Kirill
Всем привет. Подскажите эта штука https://github.com/lqt5/LRDB/blob/master/README.md
позволяет мониторить переменные в live режиме?
Snusmumriken
Ну там написано что вроде да : )
Только для VS-дебаггера.
⛧ nothing87889381828780
ну я вот не знаю 3 + 4
⛧ nothing87889381828780
дайте 5 минут
Inellok
⛧ nothing87889381828780
спасибо
Inellok
Я ещё неплохо шарю в таблице умножения😎
⛧ nothing87889381828780
хочу научится языку программирования луа и сделать дарк рп на сапе, чтобы с школьничков собирать donate
Inellok
тебе для этого придётся совершить преступление
Inellok
спирать книгу
⛧ nothing87889381828780
мне придется идти против урбанички?
Inellok
А нет не придётся
Inellok
https://avidreaders.ru/read-book/programmirovanie-na-yazyke-lua.html
Inellok
Переходи по ссылке и дрочи.
Inellok
Если не хочешь освоить Луа, как я - через пятую точку.
⛧ nothing87889381828780
спасибо
⛧ nothing87889381828780
Inellok
Рад помочь!
⛧ nothing87889381828780
этот уебок с читами заходит на сервера с говно сборкой и рдмит
⛧ nothing87889381828780
а в ролике говорит что "разъебал сервер"
⛧ nothing87889381828780
боже
Igor
А ещё тут не очень приветствуется мат, это так, к слову
⛧ nothing87889381828780
⛧ nothing87889381828780
шо за гавно
⛧ nothing87889381828780
но подельные купюры
⛧ nothing87889381828780
нормально
⛧ nothing87889381828780
100 баксов за 40 настоящих
⛧ nothing87889381828780
полный фарш
⛧ nothing87889381828780
че ты еще не ливнул
⛧ nothing87889381828780
ливай давай
Snusmumriken
шо за гавно
Тут серьёзно нифига не приветствуется подобная манера.
Inellok
Ребят, кто тут ковырял амулет?
Inellok
Я вот смотрю, он выглядит интересно, но ловка вроде бы поживее в соц. плане
Inellok
И документация у него, честно говоря, пугающая
Inellok
но API мне нравится
Inellok
У него там какие - то "^"
Snusmumriken
Работа с амулетом мало отличается от работы с голым OpenGL. Сплошные буферы и шейдеры на любой чих.
Inellok
В таком случае я продолжу пытаться копать love
Snusmumriken
У него там какие - то "^"
Это оператор возведения в степень. И автор амулета перегружает его, чтобы он присобачивал к графическим объектам всякую фигню.
Snusmumriken
Так же как авторы стандартной библиотеки C++ перегружают оператор lshift у объекта cout:
std::cout << "text" << std::endl;
Это — перегруженные операторы.
Inellok
Перегружает? Что-то новенькое😕
Snusmumriken
Представь что ты можешь умножать таблицы друг на друга. И складывать.
Snusmumriken
Это и есть перегрузка.
Inellok
Я с ними вообще не работал
Snusmumriken
Работал, просто не перегружал.
Inellok
А, метатаблицы
Inellok
А что, если мне реально пописать на SDL, чтобы love казался легче
Snusmumriken
Да, перегрузка осуществляется с помощью метатаблиц.
Snusmumriken
Inellok
Только в итоге надолг ушёл с него
Inellok
Знаю
Inellok
Я так уже делал с GMS
Inellok
По SDL много статей, уроков
Snusmumriken
Только дальше копирования содержимого статей ты не уйдёшь, там шарить нужно.
Inellok
А вообще в консоль методы debag писать вместе с debug. или без?