Added some documentation on the lights. Got most everything tidied up. Having some issues with std::moving unique ptrs. Going to change them to shared_ptr
This commit is contained in:
@@ -4,14 +4,28 @@
|
||||
#include <memory>
|
||||
|
||||
|
||||
// We need to be able to :
|
||||
// - Allow lights to exist outside the context of a LightController
|
||||
// - i.e we can have a prototype light or similar
|
||||
// - Preserve the existence of lights upon object destruction
|
||||
// - No need to keep track of an object only used upon special use cases
|
||||
// - Maintain an X*N byte array, X = size of packed data, N = Light number
|
||||
// - But still allow classes of size Y bytes
|
||||
// - Preserve X packed bytes in an array which are pointed to by an array of shared pointers
|
||||
// Light Handle :
|
||||
// - Contains data relating to movement, and a reference to the rbgi, direction, and position
|
||||
// elements in the LightController.
|
||||
// - Resultant of the use of LightController.create_light(LightPrototype). Cannot be self instantiated.
|
||||
// - On deconstruction, light data is removed from the LightController and the light disappears
|
||||
|
||||
// LightPrototype :
|
||||
// - Contains the desired starting values for the light. The LightHandler object will then be
|
||||
// instantiated using this data
|
||||
|
||||
// PackedData :
|
||||
// - We need to single out the data that the GPU needs into a single contiguous
|
||||
// array. PackedData holds the values for position, direction, and rgbi
|
||||
|
||||
// LightController :
|
||||
// - Contains the PackedData array in a static sized array.
|
||||
// Empty light slots are set to 0 and still sent over the line
|
||||
// TODO: This introduces light limits and inefficiencies
|
||||
// - Contains a factory that takes LightPrototypes and generates unique ptr LightHandles.
|
||||
// Each light handle is given a light index enabling light removal.
|
||||
|
||||
|
||||
|
||||
struct LightPrototype;
|
||||
class LightController;
|
||||
@@ -21,29 +35,37 @@ class LightHandle {
|
||||
|
||||
public:
|
||||
|
||||
// Allow LightController to access this objects constructor for a factory style pattern
|
||||
friend class LightController;
|
||||
|
||||
~LightHandle();
|
||||
|
||||
// Functions for movement
|
||||
void set_friction(float friction);
|
||||
void set_impulse(float impulse);
|
||||
void set_movement(sf::Vector3f movement);
|
||||
void add_movement(sf::Vector3f movement);
|
||||
|
||||
// Functions modifying the pointed to data
|
||||
void set_position(sf::Vector3f position);
|
||||
void set_direction(sf::Vector3f direction);
|
||||
void set_rgbi(sf::Vector4f rgbi);
|
||||
|
||||
// void update(double delta_time);
|
||||
|
||||
private:
|
||||
|
||||
LightHandle(LightController *const light_controller, unsigned int light_id, LightPrototype light_prototype, std::unique_ptr<PackedData> data_reference);
|
||||
|
||||
// Reference to the LightController to handle deconstruction and removal using the light_id
|
||||
LightController *const light_controller_ref;
|
||||
unsigned int light_id;
|
||||
const unsigned int light_id;
|
||||
|
||||
// Movement values provided by the prototype
|
||||
float friction_coefficient = 0.1f;
|
||||
float default_impulse = 1.0f;
|
||||
sf::Vector3f movement;
|
||||
|
||||
// Reference to the packed data in the LightController
|
||||
std::unique_ptr<PackedData> data_reference;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user