Вторник, 20 Октября 2020, 03:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 53
  • 1
  • 2
  • 3
  • 52
  • 53
  • »
Форум игроделов » Записи участника » Xakep [1050]
Результаты поиска
XakepДата: Среда, 05 Августа 2020, 12:07 | Сообщение # 1 | Тема: Прощай фриланс :(
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата andarky ()
Я о том что было как: пару кликов и денежки ушли. Никаких регистраций, привязок карт, СМС-ок... было ведь так легко всё!

А что нужно обязательно делать привязку карты, чтобы вывести деньги на счет? Сейчас тоже все легко, в России очень хорошо развит мобильные банковские приложения. Лично мне больше всякие paypal не нравились, ими невозможно нормально пользоваться было.
Да и впринципе электронные деньги никуда не делись, есть же самые различные криптовалюты.

Цитата andarky ()
Да и сумма там на Анониме была небольшая - вроде бы ~15т.р. (ну я большей цифры не держал)

ну даже по НПД это 600-900р, собрать со всех анонимных фрилансеров и получится нормальная уже сумма с налогов, не говоря уже о том, что 15к вряд ли ограничимся.

Добавлено (05 Августа 2020, 12:10)
---------------------------------------------
а почему прощай фриланс кстати? сейчас нормально можно фрилансить как и раньше.

XakepДата: Вторник, 07 Июля 2020, 15:27 | Сообщение # 2 | Тема: Есть ли способ сократить эти строки кода
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Vostrugin ()
Спасибо, я знаю что такое боксинг/анбоксинг. Вопрос был к тому, что когда он происходит в IL ты увидишь вызов box/unbox соответственно, а в приведённом куске его нет. Вот пример с боксингом, в таком случае в IL ты видишь явно вызов box/unbox

Ага, я уже это понял )
XakepДата: Вторник, 07 Июля 2020, 05:27 | Сообщение # 3 | Тема: Есть ли способ сократить эти строки кода
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата drcrack ()
Nullable<T> это структура с 2 value type полями, нет там боксинга

Понятно.

Цитата Vostrugin ()
Боксинг/анбоксинг выполняется с помощью box, unbox, нет?

Боксинг обычно - это просто оборачивание каких либо переменных в инстанс класса, в Java это различные Integer, Float, которые оборачивают примитивы int и float в классы и таким образом они становятся nullable либо преобретают дополнительные свойства, но в C# с nullable поступили умнее.
XakepДата: Понедельник, 06 Июля 2020, 14:39 | Сообщение # 4 | Тема: Есть ли способ сократить эти строки кода
めちゃくちゃちゃ
Сейчас нет на сайте
Уверен, что большинство из тех, кто говорит про производительность, даже профилировщиком пользоваться не умеют. Чтобы что-то оптимизировать надо сначала иметь представление о том, что происходит в системе и сколько это времени тратит.

Цитата GMassta ()
В том то и минус, свой движок ты пилишь под свою игру, у тебя как минимум запас производительности выше, чем на движке, на котором можно делать все что угодно. (Если конечно ты понимаешь, что ты делаешь)


Далеко не факт, порой движки используют какую-то черную магию для оптимизации. Даже у опытных игроделов не всегда может получиться написать более производительный движок чем уже существющий, особенно если это касается 3д графики.

Цитата drcrack ()
Я чет не совсем понял на каком этапе тут появляется боксинг да еще и анбоксинг?

я думаю боксин `float?` без боксинга примитив не может быть null.

Добавлено (06 Июля 2020, 14:41)
---------------------------------------------

Цитата Vostrugin ()
И да, drcrack прав. Смотри.

и видим что есть боксинг:
Код
[System.Private.CoreLib]System.Nullable`1<int32>

без боксинга тип будет просто int32
XakepДата: Понедельник, 29 Июня 2020, 09:58 | Сообщение # 5 | Тема: Проблемы сайта – хостер
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Otinagi ()
Хотелось бы, чтобы домен остался прежним

я вообще не вижу тут проблемы, если домен покупался у юкоза, то его можно просто перенести на другой регистратор, либо оставить юкоз, если там есть управление DNS записями, а сам сайт уже разместить на другом хостинге/сервере
XakepДата: Пятница, 26 Июня 2020, 20:44 | Сообщение # 6 | Тема: Проблемы сайта – хостер
めちゃくちゃちゃ
Сейчас нет на сайте
В качестве форумного движка сейчас популяерн discourse, можно его попробовать. В качестве хостинга можно использовать какойнить reg.ru, timeweb.ru, либо облачные технологии типа scaleway Как вариант можно найти людей, которые готовы вкладываться каждый месяц, чтобы платить эти 25$ прямо тут на форуме, в принципе не такая большая сумма, так что желающие думаю найдутся.

Добавлено (26 Июня 2020, 20:46)
---------------------------------------------
Пример форумов на discourse:
Rust forum
Julia forum


Сообщение отредактировал Xakep - Пятница, 26 Июня 2020, 20:47
XakepДата: Понедельник, 17 Февраля 2020, 14:07 | Сообщение # 7 | Тема: Вся документация по opengl 4.5 на русском
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
djwirtuoz, не может быть. когда моя видеокарта продавалась, о vulkan ещё никто не знал.

Все равно видеокарта может поддерживать, даже если на момент покупки данное API было не доступно, это апи вместе с драйверами может быть доставленно.

Цитата afq ()
у меня видеокарта geforce nvidia gtx 465.

Но вообще да, nvidia положила болт на поддержку в своих более старых видеокартах, хотя обещали завести поддержку, у меня была видеокарта GTX 590, не поддерживало. Есть еще вариант софтварно попробовать эмулировать вулкан, не уверен на сколько рабочий вариант. Советую просто новую видеокарту приобрести, я себе взял простенькую RX 560, стоит такая не больеш 5 тысяч.
XakepДата: Четверг, 16 Января 2020, 07:13 | Сообщение # 8 | Тема: Shadows of Larth
めちゃくちゃちゃ
Сейчас нет на сайте
Визуальная составляющая чем-то напоминает игру "Prince of Persia The Sands of Time"
XakepДата: Воскресенье, 12 Января 2020, 22:44 | Сообщение # 9 | Тема: реализация издателя и подписчика на си.
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
За меня на си не надо писать. Я сделал нормальную реализацию. Но если вы считаете что она не правильная, то где правильная, где пруфы, что на си можно сделать правильней?

одна и та же реализация в разных условиях и в разных системах может быть правильно и не правильной, все зависит от требований и свойств данной системы. Поэтому рассуждения о правильности/неправильности считаю не уместными.

Выше я уже писал:

Цитата Xakep ()
Я не знаю, как бы я делал, начнем с того, что я бы не стал данный паттерн на Си реализовывать в общем виде для универсального использования.

если тебе именно интересно - как добавить типобезопасность в твою библиотеку, то это уже немного другое, могу придумать какунить магию на макросах.


А большую тираду я написал, только потому, что меня возмутила ваша реакция на критику и интересное предложение по добавлению типобезопасностей, вместо того, чтобы подумать над этим, вы решили начать называть всех хейтерами, троллями и возмущаться что не си программист что-то там пишет си программисту, да что он вообще может знать ))
XakepДата: Воскресенье, 12 Января 2020, 22:26 | Сообщение # 10 | Тема: реализация издателя и подписчика на си.
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
Вот я и написал в начале сообщение о том, что рад услышать советы

Для начала определись - что у тебя за задача, обычно на Си не прибегают к реализации паттерна как библиотеки / набора функций, чтобы потом это везде использовать, это скорее больше к ООП относится - инкапсулировать всю логику работы publish/subscribe и предоставить только интерфейс.

Цитата afq ()
Тогда напиши мне на си

Почему мы должны писать за тебя на Си? Мы можем предложить свои какие-то идеи, ты можешь попытаться их реализоват, либо проигнгорировать, пообсуждать что-то, поизучать вопрос (с той же типо-безопасностью).

Добавлено (12 Января 2020, 22:28)
---------------------------------------------

Цитата afq ()
а сами то как бы сделали?

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

Добавлено (12 Января 2020, 22:30)
---------------------------------------------
если тебе именно интересно - как добавить типобезопасность в твою библиотеку, то это уже немного другое, могу придумать какунить магию на макросах.

XakepДата: Воскресенье, 12 Января 2020, 21:57 | Сообщение # 11 | Тема: реализация издателя и подписчика на си.
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
не совсем верно. подход другой у языков. ты например не можешь с помощью шаблонов на си программировать, а в c++ можешь и т.д.

Шаблоны решают определенную проблему, которую между прочем можно также реализовать и на си через макросы, если ты не знал. Да сделать проверку на типы будет сложнее и больше будет бойлерплейта, но тем не менее - это возможно. И кто мне к примеру запретит писать на Си в функциональном стиле? Я все также могу насоздавать себе монад и писать только чистые функции. Да даже тот же GLSL может предоставить новые подходы к решению задач, которые потом можно использовать и в Си.

Цитата afq ()
от тех кого я слышу что язык всего лишь инструмент обычно знают несколько языков, да и то не очень хорошо

Хорошие разработчике обычно и знают больше одного языка программирования, потому-что под определенные задачи, те или иные языки лучше подходят.

Цитата afq ()
то есть у тебя такой уровень знаний языка, что ты например не можешь сделать программу по картографии на си, но зато ты можешь это сделать на python с уже готовой библиотекой. я бы лучше делал это на си, чтобы скилл рос, а не пользоваться языком как инструментом.

Если тебе платят за это деньги, то в твоих же интересах сделать эту работу как можно быстрее и качественнее, очень сомневаюсь, что ты напишешь лучше решение для узко-специализированной области, чем люди, которые очень хорошо разбираюбтся в этой самой картографии и вложили много сил и времени, чтобы создать подобную библиотеку.

Цитата afq ()
учишь один язык и реализуешь на нем всё и не сворачиваешь с пути

Выучить язык дело пары месяцев, если ты новичек, программирование не строится из одного лишь знания языка. Я считаю это плохим способом учиться - различные язки, различные парадигмы имеют свое сообщество и свои подходы к решению задачь и именно в таких сообществах можно очень многому научиться и потому уже, если захочется, можно все эти же принципы и подходы использовать в своем любимо языке.

Цитата afq ()
Да какой там. хочешь сказать что в моей программе могут ошибиться программисты на си, которые живут программированием? как вообще можно ошибиться и подписаться на издателя, который определен в определенном файле

Видимо вы никогда не работали в крупном проекте, раз говорите подобное, во первых - в проекте могут работать не только программисты на си, которые живут программированием, но также и джуны, которые только из универов вышли, во вторых, в проекте с миллонами сторк кода, можно не удержать всех моментов в голове, пусть ты даже гений. Даже разработчик, написавший этот код, спокойно может допустить очень глупую ошиюку. Типы помогают не только гарантировать определенного рода безопасность, но и являются своего рода документацией к коду. И интересно, что бы вы сказали об этом, если бы на кону были бы не просто пара багов у пользователей (ну или не пара, как повезет), а человеческие жизни, либо миллионы долларов пользователей, я писал код для финансовых организаций и это тот еще стресс, даже 100% покрытие тестов не позволяет быть уверенным на сто процентов, что баланс не будет нарушен.

Цитата afq ()
есть специальная лицензия, которая объясняет что автор не несет ответственности за программу

Это здесь вообще при чем? У нас рассуждение не о лицензиях, а о программировании в целом, в данном случае твое решение даже использовать не захотели и написали почему, тебе может подобное решение нравится, и в принципе все ок, но не нужно говорить, что оно лучше других остальных, особенно, если сам совсем не разбираешься ни в ООП, ни в типах, да и банально какие есть подходы к реализации данного паттерна и какие у них плюсы и минусы.

Цитата afq ()
чтобы сделать такую реализацию, нужно было написать не мало строчек кода, но зато теперь можно пользоваться

У тебя там 200 строк, это очень не много, я видел функции, которые состояли из большего количества кода.

Цитата afq ()
ну и конечно же ты можешь показать как это сделать на java

На Java я предпочту не велосипедить подобное, потому-что уже есть отличные реализации в виде RxJava, либо Reactor, которые решают в полной мере все мои хотелки и которые проверены временем. При этом я получаю - безопасность типов, большое количество реализованных операторов, потоко-безопасность, возможность легко распараллеливать свои стримы итд итп. Я конечно же могу и сам навелосипедить подобное, но зачем? Я мог бы это сделать, разве что для самообразования, но в продакшн подобное решения я бы вряд ли пустил.

Цитата afq ()
java каждый класс в отдельном файле да

нет

Цитата afq ()
тебе надо сделать так. чтобы в одном файле ты подписался на издателя. в другом файле подписался на издателя. в другом файле отправил событие и два файла получили это событие. чтобы этот способ был универсальным. чтобы не нужно было переделывать издателя, ну подстраивать под новый проект. вот я такое сделал

Не стоит говорить - как надо сделать в java, если сам не умеешь и не понимаешь java'у.

Цитата afq ()
это тупо троллинг

нет - это не троллинг, на хабре вполне нормальные вопросы и замечания сделали, которые имеют место быть.
На хабре многие пользователи профессионально занимаются программированием и получают за это деньги и поэтому у них и возникают подобные вопросы и подобная критика. Нужно уметь воспринимать критику, в случае с хабром - она вполне себе конструктивная.

Цитата afq ()
вон например в glib. есть такая функция g_signal_connect, сюда ты можешь подключить либо g_object, либо gtk виджет. также отправить данные свои, вот здесь тип не проверяется, оно и правильно, потому что функция сделана так, чтобы ей можно было пользоваться сколько угодно и в любых проектах.

не всегда универсально - значит лучше, иногда конкретное решение, для конкретной задачи намного лучше, чем универсальное решение для любой задачи. Если так хочется универсальности, то не тот язык вы вырали, вам бы лучше js подошел бы.

В принципе это нормально использовать void*, особенно в Си, я и сам так иногда делаю, все опять же сильно зависит от задачи и от контекста, если у тебя один publish и пара subscriber'ов, то и нечего боятся, но ситуация может сильно измениться, если у тебя сотни publisher'ов и миллионы подписчиков (какойнить веб сервис).
XakepДата: Воскресенье, 12 Января 2020, 14:32 | Сообщение # 12 | Тема: реализация издателя и подписчика на си.
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
drcrack, да не. там единицы написали, не все такие. не знаю даже почему ты встал на их сторону, на сторону меньшинства. что там профи такие чтоли сидят? которые бояться без компилятора ошибок наделать. они возможно и не поняли в чем плюс такого подхода. и пишут свои js программы. это же веб разработчики. они не шарят в си программировании и указывают на недостатки си языка, типа их язык лучше, что типа на их языке это можно реализовать без всяких проблем, с которыми можно столкнуться в поем языке. ты же сам знаешь что на си и c++ можно отстрелить себе ногу ( как говориться ). как можно набираться опыта у js программиста, который учит не как на си это делать, а как это выглядит на js. ты хоть смотри с кем я спорю.

Одно дело, когда ты пишешь хелловорлды, другое дело, когда ты участвуешь в разработке крупного проекта, где цена ошибки может стоить компании миллионов $ (а тебе может это стоить работы). Над подобными проектами работает не один разработчик, а десятки, сотни и тысячи разработчиков, в числе которых новоиспеченные джуниоры. Кодовая база может исчисляться миллионами строк кода. То что в комментариях написано - вполне уместные замечания, а вот твоя реакция уже не адекватная, потому тебя и минусуют.

Цитата afq ()
и пишут свои js программы. это же веб разработчики. они не шарят в си программировании и указывают на недостатки си языка

И что с того, что это веб разработчики, они не программисты чтоле? Язык программирования - это инструмент в первую очередь, принципы, подходы и алгоритмы в программирования все равно остаются одними и теми же, какой-то новый язык программирования может привнести какие-то новые принципы, и новые подходы, новые идеи, но это не значит, что в условном Си их нельзя будет применить. Поэтому нужно учиться программировать, а не учить языки программирования.

Цитата afq ()
ты же сам знаешь что на си и c++ можно отстрелить себе ногу ( как говориться ).

потому-то эти языки многие и не любят, в том числе и люди, которые на них пишут.


Сообщение отредактировал Xakep - Воскресенье, 12 Января 2020, 14:34
XakepДата: Суббота, 11 Января 2020, 18:14 | Сообщение # 13 | Тема: какой то глюк в opengl чтоли.
めちゃくちゃちゃ
Сейчас нет на сайте
если у тебя массив из 9ти флоатов, то делим на 3 - получаем три вершины. glDrawArrays воспринимает количество вершин, через glVertexAttribPointer - ты указываешь размер вершин, в твоем примере - это 3 флоата, следовательно на одну вершину должно приходиться 3 * sizeof(float) байт, т.к. у тебя вершины хранятся в линейном массиве из флоатов, чтобы получить количество вершин, ты должен поделить количество элементов в массиве на 3.
XakepДата: Суббота, 11 Января 2020, 15:15 | Сообщение # 14 | Тема: какой то глюк в opengl чтоли.
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
а понятно. для треугольника нужно 9 компонент. тогда надо делать на 9.

почему на 9? на 3

Я еще не заметил, что ты уже разделил на 3 количество вершин в `read_file`, не самое удачное название переменной - `current_length`. И вообще, почему-бы просто не использовать массив из векторов (glm::vec2/glm::vec3 итд), вместо того, чтобы делать линейный массив из флоатов?
XakepДата: Пятница, 10 Января 2020, 05:59 | Сообщение # 15 | Тема: какой то глюк в opengl чтоли.
めちゃくちゃちゃ
Сейчас нет на сайте
Я не знаю, мне лень выполнять роль компилятора и я не знаю как формат obj устроен. Но как минимум ты делаешь опять ту же ошибку, что и в предыдущем примере - `length_v` нужно делить на 3 в `glDrawArrays`, т.к. у тебя 3 компонента на вершину. И почему бы не использовать assimp для загрузки моделей?

Сообщение отредактировал Xakep - Пятница, 10 Января 2020, 05:59
XakepДата: Среда, 08 Января 2020, 10:42 | Сообщение # 16 | Тема: какой то глюк в opengl чтоли.
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
Xakep, ну когда же ты проверишь? У тебя доступ к компьтеру чтоли ограничен? :)

Вероятно у нас разные часовые пояса, я спал. Отправил тебе пулл реквест и оставил пару комметариев.

Добавлено (08 Января 2020, 10:48)
---------------------------------------------

Цитата drcrack ()
если бы сразу на юнити начал — уже бы игру релизил :D

Да, это однозначно так ) если цель создать игру, то лучше выбрать движок, не обязательно Unity, мне Game Maker Studio нравится. Но может человеку интересно именно свой движок написать, понять как это работает, тогда нет никаких проблем, можно многому научиться.
XakepДата: Вторник, 07 Января 2020, 09:41 | Сообщение # 17 | Тема: C# необычная функция с возвращением результата
めちゃくちゃちゃ
Сейчас нет на сайте
добавлю еще, что вот это:

Код

Game.Group[words[0].Substring(1)].num[words[1]] = AddAction(Game.Group[words[0].Substring(1)].num[words[1]],PlusNumber);


можно переписать в более читабельный вид:

Код

var dict = Game.Group[words[0].Substring(1)].num;
dict[words[1]] = AddAction(dict[words[1]], PlusNumber);
XakepДата: Вторник, 07 Января 2020, 09:21 | Сообщение # 18 | Тема: какой то глюк в opengl чтоли.
めちゃくちゃちゃ
Сейчас нет на сайте
afq, если скинешь весь код, могу попробовать у себя скомпилировать.

Добавлено (07 Января 2020, 09:31)
---------------------------------------------

Цитата afq ()
если не получиться исправить, то придется переходить на unity

ничего плохого в этом не вижу :)
XakepДата: Понедельник, 06 Января 2020, 21:23 | Сообщение # 19 | Тема: какой то глюк в opengl чтоли.
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата afq ()
точно могут быть проблемы? я в шейдере принимаю vec2 и преобразую к vec3. вот так.

Ну вообще может, но я сейчас понял почему так сделано, я привык использовать `GL_TRIANGLE_STRIP`, а у тебя `GL_TRIANGLES`, т.е. ты рисуешь 2 треугольника, а треугольник определяется 3мя вершинами, отсюда и 6 вершин вместо 4х. Я бы все таки на твоем месте, попробовал посмотреть на полную геометрию, которая получается у твоих прямоугольников (закрасить все одним цветом, через тот же шейдер fragColor = vec4(0,0,0,1); ).

Цитата afq ()
по поводу твоего шейдера. я не очень понял совет. тот код, который я привел, там

код: tex * color; означает, что ты каждый пиксель текстуры умножаешь на переданный в шейдер uniform цвет (также как ты передаешь матрицу и текстуру), обычно текстуру для шрифтов делают прозрачной и белой. При умножении белого пикселя на черный к примеру, получаем черный (1.0 * 0), при умножении на красный, получаем красный, т.к. (1.0, 1.0, 1.0, 1.0) * (1.0, 0.0, 0.0, 1.0) получится собственно красный цвет. Таким образом легко задавать цвета тексту. Также легко реализовать шейдер, который меняет цвет всей текстуры.

Добавлено (06 Января 2020, 21:30)
---------------------------------------------
Пример без изменения цвета текстуры:

Код

#version 410 core

precision highp float;
out vec4 fragColor;
in vec2 texCoord;

uniform sampler2D utexture;

void main() {
    vec4 tex = texture(utexture, texCoord);
    fragColor = tex;
}




Теперь можно умножить на константу:

Код

#version 410 core

precision highp float;
out vec4 fragColor;
in vec2 texCoord;

uniform sampler2D utexture;

void main() {
    vec4 tex = texture(utexture, texCoord);
    fragColor = tex * vec4(0.8, 0.3, 0.3, 1);
}


Добавлено (06 Января 2020, 21:32)
---------------------------------------------
Если же просто передать в `fragColor` цвет, то весь прямоугольник зальется этим цветом: `fragColor = vec4(0.8, 0.3, 0.3, 1);`

XakepДата: Понедельник, 06 Января 2020, 18:27 | Сообщение # 20 | Тема: какой то глюк в opengl чтоли.
めちゃくちゃちゃ
Сейчас нет на сайте
в glVertexAttribPointer ты задаешь 2 компонента для вершины, следовательно у тебя на один квад идет вместо 4х вершин - 6. Отсюда могут быть и проблемы.
https://www.khronos.org/registr....r.xhtml

Добавлено (06 Января 2020, 18:56)
---------------------------------------------
Цитата afq ()
это как?

это вот так:



Каждый возможный символ запекаешь в текстурный атлас, это просто оптимизация - это значительне дешевле, чем для каждого символа делать bind разных текстур. Можно и по другому, залить все текстуры в шейдер и не биндить вообще (bindless texture), должно быть еще быстрее.

Добавлено (06 Января 2020, 19:06)
---------------------------------------------
Код

        for ( unsigned int i = 0, y = 0; y < w->height; y++ ) {
                for ( int x = 0; x < w->width; x++ ) {
                        data [ 4 * i + 3 ] = w->w [ i ];
                        data [ 4 * i + 0 ] = ( w->color >> 16 & 0xff );
                        data [ 4 * i + 1 ] = ( w->color >>  8 & 0xff );
                        data [ 4 * i + 2 ] = ( w->color >>  0 & 0xff );
                        i++;
                }
        }


Зачем так сложно-то, тебе на что шейдеры даны )) в шейдере это в одну строку делается:
Код

#version 410 core

out vec4 fragColor;
in vec2 texCoord;

uniform sampler2D utexture;
uniform vec4 color;

void main() {
    vec4 tex = texture(utexture, texCoord);
    fragColor = tex * color; // Вот эта строчка
}


Сообщение отредактировал Xakep - Понедельник, 06 Января 2020, 19:06
Форум игроделов » Записи участника » Xakep [1050]
  • Страница 1 из 53
  • 1
  • 2
  • 3
  • 52
  • 53
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2020
free games download
Рейтинг