mirror of
https://github.com/Relintai/rtile_map.git
synced 2025-04-23 03:11:19 +02:00
Simple (and buggy for now) rao implementation.
This commit is contained in:
parent
a0c8835e95
commit
0e48188025
18
tile_map.cpp
18
tile_map.cpp
@ -549,8 +549,10 @@ void RTileMap::update_dirty_quadrants() {
|
|||||||
Ref<Texture> normal_map = tile_set->tile_get_normal_map(c.id);
|
Ref<Texture> normal_map = tile_set->tile_get_normal_map(c.id);
|
||||||
Color modulate = tile_set->tile_get_modulate(c.id);
|
Color modulate = tile_set->tile_get_modulate(c.id);
|
||||||
Color self_modulate = get_self_modulate();
|
Color self_modulate = get_self_modulate();
|
||||||
modulate = Color(modulate.r * self_modulate.r, modulate.g * self_modulate.g,
|
float col = (static_cast<float>(c.rao) / 255.0) * 0.3;
|
||||||
modulate.b * self_modulate.b, modulate.a * self_modulate.a);
|
|
||||||
|
modulate = Color(modulate.r * self_modulate.r - col, modulate.g * self_modulate.g - col,
|
||||||
|
modulate.b * self_modulate.b - col, modulate.a * self_modulate.a);
|
||||||
if (r == Rect2()) {
|
if (r == Rect2()) {
|
||||||
tex->draw_rect(canvas_item, rect, false, modulate, c.transpose, normal_map);
|
tex->draw_rect(canvas_item, rect, false, modulate, c.transpose, normal_map);
|
||||||
} else {
|
} else {
|
||||||
@ -897,7 +899,7 @@ void RTileMap::set_cell(int p_x, int p_y, int p_tile, bool p_flip_x, bool p_flip
|
|||||||
} else {
|
} else {
|
||||||
ERR_FAIL_COND(!Q); // quadrant should exist...
|
ERR_FAIL_COND(!Q); // quadrant should exist...
|
||||||
|
|
||||||
if (E->get().id == p_tile && E->get().flip_h == p_flip_x && E->get().flip_v == p_flip_y && E->get().transpose == p_transpose && E->get().autotile_coord_x == (uint16_t)p_autotile_coord.x && E->get().autotile_coord_y == (uint16_t)p_autotile_coord.y) {
|
if (E->get().id == p_tile && E->get().flip_h == p_flip_x && E->get().flip_v == p_flip_y && E->get().transpose == p_transpose && E->get().autotile_coord_x == (int16_t)p_autotile_coord.x && E->get().autotile_coord_y == (int16_t)p_autotile_coord.y) {
|
||||||
return; //nothing changed
|
return; //nothing changed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -908,8 +910,9 @@ void RTileMap::set_cell(int p_x, int p_y, int p_tile, bool p_flip_x, bool p_flip
|
|||||||
c.flip_h = p_flip_x;
|
c.flip_h = p_flip_x;
|
||||||
c.flip_v = p_flip_y;
|
c.flip_v = p_flip_y;
|
||||||
c.transpose = p_transpose;
|
c.transpose = p_transpose;
|
||||||
c.autotile_coord_x = (uint16_t)p_autotile_coord.x;
|
c.autotile_coord_x = (int16_t)p_autotile_coord.x;
|
||||||
c.autotile_coord_y = (uint16_t)p_autotile_coord.y;
|
c.autotile_coord_y = (int16_t)p_autotile_coord.y;
|
||||||
|
c.rao = static_cast<uint8_t>(static_cast<int>(CLAMP(noise->get_noise_2d(p_x, p_y), 0, 1) * 256.0) % 256);
|
||||||
|
|
||||||
_make_quadrant_dirty(Q);
|
_make_quadrant_dirty(Q);
|
||||||
used_size_cache_dirty = true;
|
used_size_cache_dirty = true;
|
||||||
@ -1267,6 +1270,7 @@ PoolVector<int> RTileMap::_get_tile_data() const {
|
|||||||
encode_uint32(val, &ptr[4]);
|
encode_uint32(val, &ptr[4]);
|
||||||
encode_uint16(E->get().autotile_coord_x, &ptr[8]);
|
encode_uint16(E->get().autotile_coord_x, &ptr[8]);
|
||||||
encode_uint16(E->get().autotile_coord_y, &ptr[10]);
|
encode_uint16(E->get().autotile_coord_y, &ptr[10]);
|
||||||
|
|
||||||
idx += 3;
|
idx += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1895,6 +1899,10 @@ void RTileMap::_changed_callback(Object *p_changed, const char *p_prop) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RTileMap::RTileMap() {
|
RTileMap::RTileMap() {
|
||||||
|
noise.instance();
|
||||||
|
//noise->set_seed(Math::rand());
|
||||||
|
noise->set_noise_type(FastNoise::TYPE_PERLIN);
|
||||||
|
|
||||||
rect_cache_dirty = true;
|
rect_cache_dirty = true;
|
||||||
used_size_cache_dirty = true;
|
used_size_cache_dirty = true;
|
||||||
pending_update = false;
|
pending_update = false;
|
||||||
|
31
tile_map.h
31
tile_map.h
@ -37,6 +37,8 @@
|
|||||||
#include "scene/2d/node_2d.h"
|
#include "scene/2d/node_2d.h"
|
||||||
#include "tile_set.h"
|
#include "tile_set.h"
|
||||||
|
|
||||||
|
#include "../fastnoise/noise.h"
|
||||||
|
|
||||||
class CollisionObject2D;
|
class CollisionObject2D;
|
||||||
|
|
||||||
class RTileMap : public Node2D {
|
class RTileMap : public Node2D {
|
||||||
@ -80,6 +82,7 @@ private:
|
|||||||
bool use_kinematic;
|
bool use_kinematic;
|
||||||
Navigation2D *navigation;
|
Navigation2D *navigation;
|
||||||
bool show_collision = false;
|
bool show_collision = false;
|
||||||
|
Ref<FastNoise> noise;
|
||||||
|
|
||||||
union PosKey {
|
union PosKey {
|
||||||
struct {
|
struct {
|
||||||
@ -110,18 +113,24 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
union Cell {
|
struct Cell {
|
||||||
struct {
|
int32_t id;
|
||||||
int32_t id : 24;
|
bool flip_h;
|
||||||
bool flip_h : 1;
|
bool flip_v;
|
||||||
bool flip_v : 1;
|
bool transpose;
|
||||||
bool transpose : 1;
|
int16_t autotile_coord_x;
|
||||||
int16_t autotile_coord_x : 16;
|
int16_t autotile_coord_y;
|
||||||
int16_t autotile_coord_y : 16;
|
uint8_t rao;
|
||||||
};
|
|
||||||
|
|
||||||
uint64_t _u64t;
|
Cell() {
|
||||||
Cell() { _u64t = 0; }
|
id = 0;
|
||||||
|
flip_h = false;
|
||||||
|
flip_v = false;
|
||||||
|
transpose = false;
|
||||||
|
autotile_coord_x = 0;
|
||||||
|
autotile_coord_y = 0;
|
||||||
|
rao = 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Map<PosKey, Cell> tile_map;
|
Map<PosKey, Cell> tile_map;
|
||||||
|
Loading…
Reference in New Issue
Block a user