diff --git a/modules/vertex_lights_2d/vertex_light_data.cpp b/modules/vertex_lights_2d/vertex_light_data.cpp index 0c72bd226..78721eeb8 100644 --- a/modules/vertex_lights_2d/vertex_light_data.cpp +++ b/modules/vertex_lights_2d/vertex_light_data.cpp @@ -29,11 +29,11 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "vertex_light_data.h" +#include "vertex_lights_2d_server.h" //VertexLightQuadrant2D -void VertexLightQuadrant2D::get_lights(List *p_lights) { +void VertexLights2DServer::VertexLightQuadrant2D::get_lights(List *p_lights) { for (uint32_t i = 0; i < lights.size(); ++i) { p_lights->push_back(lights[i]); } @@ -41,7 +41,7 @@ void VertexLightQuadrant2D::get_lights(List *p_lights) { //VertexLightMap2D -void VertexLightMap2D::recreate_quadrants() { +void VertexLights2DServer::VertexLightMap2D::recreate_quadrants() { List lights; get_lights(&lights); @@ -57,13 +57,13 @@ void VertexLightMap2D::recreate_quadrants() { } } -void VertexLightMap2D::get_lights(List *p_lights) { +void VertexLights2DServer::VertexLightMap2D::get_lights(List *p_lights) { for (HashMap::Element *E = quadrants.front(); E; E = E->next) { E->value()->get_lights(p_lights); } } -void VertexLightMap2D::add_light(VertexLightData2D *p_light) { +void VertexLights2DServer::VertexLightMap2D::add_light(VertexLightData2D *p_light) { VertexLightQuadrant2D *quadrant = get_quadrant_for_position(p_light->position); p_light->map = this; @@ -71,7 +71,7 @@ void VertexLightMap2D::add_light(VertexLightData2D *p_light) { quadrant->lights.push_back(p_light); } -void VertexLightMap2D::remove_light(VertexLightData2D *p_light) { +void VertexLights2DServer::VertexLightMap2D::remove_light(VertexLightData2D *p_light) { p_light->map = NULL; VertexLightQuadrant2D *quadrant = p_light->quadrant; @@ -89,7 +89,7 @@ void VertexLightMap2D::remove_light(VertexLightData2D *p_light) { } } -VertexLightQuadrant2D *VertexLightMap2D::get_quadrant_for_position(const Vector2 &p_position) { +VertexLights2DServer::VertexLightQuadrant2D *VertexLights2DServer::VertexLightMap2D::get_quadrant_for_position(const Vector2 &p_position) { Vector2i quadrant_position = to_quadrant_position(p_position); if (!quadrants.has(quadrant_position)) { @@ -102,12 +102,12 @@ VertexLightQuadrant2D *VertexLightMap2D::get_quadrant_for_position(const Vector2 return quadrants[quadrant_position]; } -void VertexLightMap2D::set_light_position(VertexLightData2D *p_light, const Vector2 &p_position) { +void VertexLights2DServer::VertexLightMap2D::set_light_position(VertexLightData2D *p_light, const Vector2 &p_position) { remove_light(p_light); add_light(p_light); } -void VertexLightMap2D::clear() { +void VertexLights2DServer::VertexLightMap2D::clear() { List lights; get_lights(&lights); diff --git a/modules/vertex_lights_2d/vertex_light_data.h b/modules/vertex_lights_2d/vertex_light_data.h deleted file mode 100644 index 743c3b598..000000000 --- a/modules/vertex_lights_2d/vertex_light_data.h +++ /dev/null @@ -1,118 +0,0 @@ -#ifndef VERTEX_LIGHT_DATA_H -#define VERTEX_LIGHT_DATA_H - -/*************************************************************************/ -/* vertex_light_data.h */ -/*************************************************************************/ -/* This file is part of: */ -/* PANDEMONIUM ENGINE */ -/* https://github.com/Relintai/pandemonium_engine */ -/*************************************************************************/ -/* Copyright (c) 2022-present Péter Magyar. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "core/containers/hash_map.h" -#include "core/containers/list.h" -#include "core/containers/rid.h" -#include "core/containers/vector.h" -#include "core/math/color.h" -#include "core/math/vector2i.h" - -#include "vertex_lights_2d_server.h" - -class VertexLightMap2D; -class VertexLightQuadrant2D; -class VertexLightData2D; - -class VertexLightData2D : public RID_Data { -public: - bool enabled; - Vector2 position; - Color color; - VertexLights2DServer::VertexLight2DMode mode; - Vector2i z_range; - Vector2i layer_range; - int item_cull_mask; - - VertexLightMap2D *map; - VertexLightQuadrant2D *quadrant; - - RID self; - - VertexLightData2D() { - map = NULL; - quadrant = NULL; - - enabled = true; - color = Color(1, 1, 1, 1); - item_cull_mask = 1; - z_range = Vector2i(-1024, 1024); - mode = VertexLights2DServer::VERTEX_LIGHT_2D_MODE_ADD; - } -}; - -class VertexLightQuadrant2D { -public: - Vector2i position; - LocalVector lights; - - VertexLightMap2D *map; - - void get_lights(List *p_lights); - - VertexLightQuadrant2D() { - map = NULL; - } -}; - -class VertexLightMap2D : public RID_Data { -public: - HashMap quadrants; - Vector2i quadrant_size; - - RID self; - - void recreate_quadrants(); - - void get_lights(List *p_lights); - - void add_light(VertexLightData2D *p_light); - void remove_light(VertexLightData2D *p_light); - - VertexLightQuadrant2D *get_quadrant_for_position(const Vector2 &p_position); - - void set_light_position(VertexLightData2D *p_light, const Vector2 &p_position); - - void clear(); - - _FORCE_INLINE_ Vector2i to_quadrant_position(const Vector2 &p_position) { - return Vector2i(p_position.x / quadrant_size.x, p_position.y / quadrant_size.y); - } - - _FORCE_INLINE_ Vector2 to_position(const Vector2i &p_quadrant_position) { - return Vector2(p_quadrant_position.x * quadrant_size.x, p_quadrant_position.y * quadrant_size.y); - } -}; - -#endif diff --git a/modules/vertex_lights_2d/vertex_lights_2d_server.cpp b/modules/vertex_lights_2d/vertex_lights_2d_server.cpp index b0089a62c..326bf614f 100644 --- a/modules/vertex_lights_2d/vertex_lights_2d_server.cpp +++ b/modules/vertex_lights_2d/vertex_lights_2d_server.cpp @@ -33,8 +33,6 @@ #include "core/config/project_settings.h" -#include "vertex_light_data.h" - // Defaults Vector2i VertexLights2DServer::get_default_quadrant_size() const { return _default_quadrant_size; diff --git a/modules/vertex_lights_2d/vertex_lights_2d_server.h b/modules/vertex_lights_2d/vertex_lights_2d_server.h index 1a3a06a77..7368f2f7a 100644 --- a/modules/vertex_lights_2d/vertex_lights_2d_server.h +++ b/modules/vertex_lights_2d/vertex_lights_2d_server.h @@ -35,14 +35,12 @@ #include "core/object/object.h" #include "core/containers/hash_map.h" +#include "core/containers/list.h" +#include "core/containers/rid.h" #include "core/containers/vector.h" #include "core/math/color.h" #include "core/math/vector2i.h" -class VertexLightMap2D; -class VertexLightQuadrant2D; -class VertexLightData2D; - class VertexLights2DServer : public Object { GDCLASS(VertexLights2DServer, Object); @@ -55,28 +53,28 @@ public: }; // Defaults - + Vector2i get_default_quadrant_size() const; void set_default_quadrant_size(const Vector2i &p_size); // Maps - + RID map_create(); Vector2i map_get_quadrant_size(RID p_map) const; void map_set_quadrant_size(RID p_map, const Vector2i &p_size); Array map_get_lights(RID p_map) const; - + void map_clear(RID p_map); // Lights - + RID light_create(); RID light_get_map(RID p_light); void light_set_map(RID p_light, RID p_map); - + bool light_get_is_enabled(RID p_light); void light_set_enabled(RID p_light, const bool p_enabled); @@ -112,6 +110,80 @@ public: protected: static void _bind_methods(); + class VertexLightMap2D; + class VertexLightQuadrant2D; + class VertexLightData2D; + + class VertexLightData2D : public RID_Data { + public: + bool enabled; + Vector2 position; + Color color; + VertexLights2DServer::VertexLight2DMode mode; + Vector2i z_range; + Vector2i layer_range; + int item_cull_mask; + + VertexLightMap2D *map; + VertexLightQuadrant2D *quadrant; + + RID self; + + VertexLightData2D() { + map = NULL; + quadrant = NULL; + + enabled = true; + color = Color(1, 1, 1, 1); + item_cull_mask = 1; + z_range = Vector2i(-1024, 1024); + mode = VertexLights2DServer::VERTEX_LIGHT_2D_MODE_ADD; + } + }; + + class VertexLightQuadrant2D { + public: + Vector2i position; + LocalVector lights; + + VertexLightMap2D *map; + + void get_lights(List *p_lights); + + VertexLightQuadrant2D() { + map = NULL; + } + }; + + class VertexLightMap2D : public RID_Data { + public: + HashMap quadrants; + Vector2i quadrant_size; + + RID self; + + void recreate_quadrants(); + + void get_lights(List *p_lights); + + void add_light(VertexLightData2D *p_light); + void remove_light(VertexLightData2D *p_light); + + VertexLightQuadrant2D *get_quadrant_for_position(const Vector2 &p_position); + + void set_light_position(VertexLightData2D *p_light, const Vector2 &p_position); + + void clear(); + + _FORCE_INLINE_ Vector2i to_quadrant_position(const Vector2 &p_position) { + return Vector2i(p_position.x / quadrant_size.x, p_position.y / quadrant_size.y); + } + + _FORCE_INLINE_ Vector2 to_position(const Vector2i &p_quadrant_position) { + return Vector2(p_quadrant_position.x * quadrant_size.x, p_quadrant_position.y * quadrant_size.y); + } + }; + mutable RID_Owner map_owner; mutable RID_Owner light_owner;