63 lines
2.6 KiB
GDScript
63 lines
2.6 KiB
GDScript
extends Sprite2D
|
||
|
||
## Состояния КА карты
|
||
enum TILE_STATE {
|
||
IDLE, ## Покой
|
||
WAIT, ## Ожидание
|
||
DONE, ## Выполнено
|
||
ERROR ## Ошибка
|
||
}
|
||
|
||
var curent_map_tile: Vector3i ## Текущая запрошенная плитка
|
||
var curent_state: TILE_STATE = TILE_STATE.IDLE ## Текущее состояние КА карты
|
||
var image: Image ## Изображение с картой
|
||
var map_bcs: Vector3 ## Яркость, контраст насыщенность
|
||
|
||
|
||
func _ready():
|
||
# Create an HTTP request node and connect its completion signal.
|
||
var tile = mercantile.Tile.new()
|
||
print_debug('Плитка: %s %s' % [tile, tile.is_valid()])
|
||
var http_request = HTTPRequest.new()
|
||
add_child(http_request)
|
||
http_request.request_completed.connect(self._http_request_completed)
|
||
curent_map_tile = Vector3i(0, 0, 0)
|
||
|
||
image = Image.create(512, 512, true, Image.FORMAT_RGB8)
|
||
map_bcs = ProjectSettings.get_setting('application/config/map_bcs', Vector3(1.0, 1.0, 1.0))
|
||
|
||
var error = http_request.request('https://a.tile.openstreetmap.org/0/0/0.png')
|
||
if error == OK:
|
||
curent_state = TILE_STATE.WAIT
|
||
else:
|
||
push_error('Ошибка: Не возможно сформировать запрос HTTP')
|
||
curent_state = TILE_STATE.ERROR
|
||
|
||
|
||
func _process(delta: float):
|
||
pass
|
||
|
||
|
||
func _http_request_completed(result, response_code, headers, data):
|
||
if result != HTTPRequest.RESULT_SUCCESS:
|
||
push_error('Ошибка: запрос не обработан: %s' % result)
|
||
curent_state = TILE_STATE.ERROR
|
||
return
|
||
|
||
var image0 = Image.new()
|
||
var error = image0.load_png_from_buffer(data)
|
||
if error != OK:
|
||
push_error('Ошибка: Полученые данные невозможно использовать для формироания изображения')
|
||
curent_state = TILE_STATE.ERROR
|
||
return
|
||
|
||
curent_state = TILE_STATE.DONE
|
||
var tile_size = image0.get_size()
|
||
|
||
image.blit_rect(image0, Rect2i(0, 0, tile_size.x, tile_size.y), Vector2i( 0, 0))
|
||
image.blit_rect(image0, Rect2i(0, 0, tile_size.x, tile_size.y), Vector2i(tile_size.x, 0))
|
||
image.blit_rect(image0, Rect2i(0, 0, tile_size.x, tile_size.y), Vector2i( 0, tile_size.y))
|
||
image.blit_rect(image0, Rect2i(0, 0, tile_size.x, tile_size.y), Vector2i(tile_size.y, tile_size.y))
|
||
image.adjust_bcs(map_bcs.x, map_bcs.y, map_bcs.z)
|
||
texture = ImageTexture.create_from_image(image)
|