diff options
| author | Steven Fuller <relnev@icculus.org> | 2001-07-01 00:55:22 +0000 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-20 02:09:04 +0200 |
| commit | 2186d5f3f95cd74a070a490d899291648d58667a (patch) | |
| tree | 55241a1afa3e1a22e0b6593a8dead0b703800f44 /src/win95/ltchunk.hpp | |
| parent | 218ca90543758a20ac326e444ca0643174ca7384 (diff) | |
Initial revision
Diffstat (limited to 'src/win95/ltchunk.hpp')
| -rw-r--r-- | src/win95/ltchunk.hpp | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/src/win95/ltchunk.hpp b/src/win95/ltchunk.hpp new file mode 100644 index 0000000..2ed6b78 --- /dev/null +++ b/src/win95/ltchunk.hpp @@ -0,0 +1,273 @@ +#ifndef _ltchunk_hpp +#define _ltchunk_hpp 1 + +#include "chunk.hpp" +#include "chnktype.hpp" + +#if InterfaceEngine +#include "strachnk.hpp" +#endif + +#define LOFlag_On 0x00000001 +#define LOFlag_ShadowData 0x00000002 +#define LOFlag_Changed 0x00000004 +#define LOFlag_Calc_Data 0x00000008 +#define LOFlag_Runtime 0x00000010 +#define LOFlag_Invisible 0x00000020 +#define LOFlag_NoPreLight 0x00000040 + +class Environment_Data_Chunk; + +class Light_Data +{ +public: + + int light_number; + ChunkVectorInt location; + ChunkMatrix orientation; + + int brightness; + int spread; + int range; + + int colour; + + int engine_light_flags; + int local_light_flags; + + int pad1; + int pad2; + +}; + + +#define PlacedLightType_Standard 0 +#define PlacedLightType_Strobe 1 +#define PlacedLightType_Flicker 2 + +#define PlacedLightOnOff_Standard 0 +#define PlacedLightOnOff_Fade 1 +#define PlacedLightOnOff_Flicker 2 + +#define PlacedLightFlag_On 0x00000001 +#define PlacedLightFlag_SwapColourBright 0x00000002 +#define PlacedLightFlag_NoSpecular 0x00000004 +class Placed_Object_Light_Data +{ +public: + + int brightness; + int spread; + int range; + + int up_colour; + int down_colour; + + int engine_light_flags; + int local_light_flags; + + int fade_up_time; + int fade_down_time; + int up_time; + int down_time; + int start_time; + + int light_type; + int on_off_type; + int flags; + + +}; + +class Light_Set_Chunk : public Chunk_With_Children +{ +public: + + // for user + + Light_Set_Chunk (Chunk_With_Children * parent, char * light_set_name); + Light_Set_Chunk (Chunk_With_Children * const parent,const char *, size_t const); + +private: + + friend class Environment_Data_Chunk; + + + +}; + + +class Light_Set_Header_Chunk : public Chunk +{ +public: + + Light_Set_Header_Chunk (Light_Set_Chunk * parent, char l_set_name[8]); + Light_Set_Header_Chunk (Chunk_With_Children * parent, const char *, size_t const); + char light_set_name[8]; + + int pad; + + size_t size_chunk() + { + return (chunk_size = 12 + 8 + 4); + } + + void fill_data_block ( char * data_start); + +private: + + friend class Light_Set_Chunk; + + + +}; + + +class Light_Chunk : public Chunk +{ +public: + + Light_Chunk (Light_Set_Chunk * parent, Light_Data & new_light) + : Chunk (parent, "STDLIGHT"), light (new_light) {} + + Light_Chunk (Chunk_With_Children * parent, const char *, size_t const); + + Light_Data light; + + BOOL light_added_to_module; + + size_t size_chunk() + { + return (chunk_size = 12 + 9 * 4 + 3 * 4 + 9 * 4); + } + + void fill_data_block ( char * data_start); + +#if InterfaceEngine + AVP_Strategy_Chunk* GetStrategyChunk(); + AVP_Strategy_Chunk* CreateStrategyChunk(); +#endif + +private: + + friend class Light_Set_Chunk; + + + +}; + +//should be a child of an object_chunk +class Placed_Object_Light_Chunk : public Chunk +{ +public : + Placed_Object_Light_Chunk (Chunk_With_Children * parent, Placed_Object_Light_Data & new_light) + : Chunk (parent, "PLOBJLIT"), light (new_light),num_extra_data(0),extra_data(0) {} + + Placed_Object_Light_Chunk (Chunk_With_Children * parent, const char *, size_t const); + + ~Placed_Object_Light_Chunk(); + + Placed_Object_Light_Data light; + int* extra_data; + int num_extra_data; + + size_t size_chunk() + { + return (chunk_size = 12 +sizeof(Placed_Object_Light_Data) +4 +4*num_extra_data); + } + + void fill_data_block ( char * data_start); + +}; + + +class Shape_Vertex_Intensities_Chunk : public Chunk +{ +public: + + Shape_Vertex_Intensities_Chunk(Chunk_With_Children *, char *, int, int *); + Shape_Vertex_Intensities_Chunk(Chunk_With_Children *, const char *, size_t const); + ~Shape_Vertex_Intensities_Chunk(); + + char light_set_name[8]; + + int pad; + + int num_vertices; + + int * intensity_array; + + size_t size_chunk() + { + return (chunk_size = 12 + 8 + 4 + 4 + 4 * num_vertices); + } + + void fill_data_block ( char * data_start); + +private: + + friend class Object_Chunk; + + + +}; + +class Lighting_Ambience_Chunk : public Chunk +{ +public: + + Lighting_Ambience_Chunk (Light_Set_Chunk * parent, int _ambience) + : Chunk (parent, "AMBIENCE"), ambience (_ambience) + {} + Lighting_Ambience_Chunk (Chunk_With_Children * parent, const char * data, size_t const /*size*/) + : Chunk (parent, "AMBIENCE"), ambience (*((int *)data)) + {} + int ambience; + + size_t size_chunk() + { + return (chunk_size = 12 + 4); + } + + void fill_data_block ( char * data_start); + +private: + + friend class Light_Set_Chunk; + + + +}; + +#define PSXLightMode 0 +//details of how light data should be altered for different platforms. +//currently just playstation +class Light_Scale_Chunk : public Chunk +{ +public : + Light_Scale_Chunk(Light_Set_Chunk * parent,int mode); + Light_Scale_Chunk(Chunk_With_Children* parent,const char* data,size_t); + + void fill_data_block ( char * data_start); + size_t size_chunk() + { + return (chunk_size = 12 + 44); + } + + int LightMode; + float prelight_multiply; + int prelight_multiply_above; + int prelight_add; + + float runtime_multiply; + int runtime_multiply_above; + int runtime_add; + + + int ApplyPrelightScale(int l); + int ApplyRuntimeScale(int l); + + int spare1,spare2,spare3,spare4; +}; + +#endif
\ No newline at end of file |
