zed писал(а):Ну, во-первых, в SAS нет поддержки плагинов
Ну так а кто-то сомневается, что такая поддержка появится?
zed писал(а):Просмотр и закачка карт - базовая функция SAS, и надо бы эту функцию сделать максимально эффективной.
Когда речь идёт об эффективной отрисовке и борьбе за FPS на слабых компах, то да. Встраивать нужно. Но закачка всегда ограничивается скоростью интернета, и какой бы ни была эта скорость, никакие плагины или даже скрипты медленнее чем интернет работать не будут. Ну или надо, по крайней мере, очень постараться и сделать всё ну вообще из рук вон через одно место плохо.
zed писал(а):Если при закачке некоего региона ещё можно запустить несколько паралельных закачек и искуственно создать многопоточность, то во время "сёрфа" (просмотра и подгрузки карт в режиме Интернет+кэш) приходится мириться с медленной однопоточной работой.
Везде нужна многопоточность. Даже при подгрузке тайлов из кеша. Потому, что сейчас, пока не вытянуты тайлы из кеша, события мыши не воспринимаются. При медленном отклике кеша (например если он в сети лежит, да ещё и по wifi) вообще неприятно работать.
Поучение тайлового контента надо формализовать и абстрагировать таким образом, чтобы взятие тайла из кеша не отличалось по смыслу от взятия тайла из интернета или, положим, с ftp. Нужно выделить абстрактную сущность "Источник_Кеша". Все конкретные источники кеша должны быть его наследниками. Несколько активных экземпляров конкретных источников кеша выстраиваются в порядке приоритета, например: локальный кеш, ftp, интернет
Так как каждый из этих источников является наследником абстрактного класса, то и сделать их конкретные реализации можно в разных вариантах:
- С доступом к кешу СасПланеты новго типа (в файловой системе).
- С доступом к кешу в беркли.
- С доступом к кешу в mysql.
- С доступом к кешу на локальном http-сервере.
- С доступом к кешу в форматах посторонних прог.
- ftp кеш.
И все эти варианты можно в любом произвольном порядке с конкретными своими настройками выстроить в порядке желаемого приоритета для каждой конкретной карты.
Сама реализация конкретного класса "Источника_Кеша" может лежать в dll. То есть, по сути, dll должна экспортировать функцию создания экземпляра "Источника_Кеша". И с этим экземпляром планета уже будет общаться кск со стандартным источником.
Так вот, процесс изъятия тайлов из пула источников должен быть в отдельном потоке. По мере получения тайлов из источника они должны лепиться на скрытый буффер слоя, который при каждой перерисовке окна копируется в контекст экрана.
Внимание! Точно таким же способом будет формироваться карта построения!
Просто будет специфический "Источник", который либо по индексу, либо по наличию файла, либо по другим признакам, формирует полупрозрачные тайлы слоя заполнения. И эти тайлы, совершенно не заставляя пользователя ждать, пояаляются на экране в параллельном потоке наравне со всеми остальными тайлами карт и слоёв.