summaryrefslogtreecommitdiff
path: root/src/avp/track.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/avp/track.h')
-rw-r--r--src/avp/track.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/avp/track.h b/src/avp/track.h
new file mode 100644
index 0000000..25b43b4
--- /dev/null
+++ b/src/avp/track.h
@@ -0,0 +1,117 @@
+#ifndef track_h
+#define track_h 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct loaded_sound;
+
+typedef struct track_sound
+{
+ unsigned long inner_range;
+ unsigned long outer_range;
+ int max_volume;
+ int pitch;
+
+ struct loaded_sound const * sound_loaded;
+ int activ_no;
+ int time_left;
+
+ unsigned int loop:1;
+ unsigned int playing:1; //sound should be playing (if in range)
+
+} TRACK_SOUND;
+
+typedef struct track_section_data
+{
+ QUAT quat_start; //orientations of object relative to pivot
+ QUAT quat_end;
+
+ VECTORCH pivot_start; //pivot start pos in world space
+ VECTORCH pivot_travel;
+
+ VECTORCH object_offset; //from pivot
+
+ int time_for_section; //time take for this section in fixed point seconds
+
+ //preprocessed stuff
+ int omega;
+ int oneoversinomega;
+ int oneovertime;
+
+
+
+ /* KJL 12:25:51 24/03/98 - quaternions added to handle spining of quaternions over track */
+ QUAT quat_prev;
+ QUAT quat_start_control;
+ QUAT quat_end_control;
+
+ /* KJL 12:25:37 24/03/98 - data points used to create a smooth curve from the 3d keyframes */
+ VECTORCH pivot_0;
+ VECTORCH pivot_1;
+ VECTORCH pivot_2;
+ VECTORCH pivot_3;
+
+} TRACK_SECTION_DATA;
+
+typedef struct track_controller
+{
+ STRATEGYBLOCK* sbptr;
+
+ int num_sections;
+ TRACK_SECTION_DATA* sections;
+
+ int timer;
+ int speed_mult;
+ int current_section;
+
+ TRACK_SOUND* sound;
+ TRACK_SOUND* start_sound;
+ TRACK_SOUND* end_sound;
+
+ int initial_state_timer; //used by Reset_Track()
+
+ unsigned int playing:1;
+ unsigned int reverse:1;
+ unsigned int no_rotation:1;
+ unsigned int loop:1;
+ unsigned int loop_backandforth:1;
+ unsigned int use_speed_mult:1;
+ unsigned int use_smoothing:1;
+ unsigned int playing_start_sound:1;
+ unsigned int initial_state_playing:1; //used by Reset_Track()
+ unsigned int initial_state_reverse:1; //used by Reset_Track()
+
+
+
+}TRACK_CONTROLLER;
+
+void Update_Track_Position_Only(TRACK_CONTROLLER* tc); //just moves track to correspond with current timer setting
+void Update_Track_Position(TRACK_CONTROLLER* tc);
+void Preprocess_Track_Controller(TRACK_CONTROLLER* tc);
+
+void Start_Track_Playing(TRACK_CONTROLLER* tc);
+void Stop_Track_Playing(TRACK_CONTROLLER* tc);
+
+void Reset_Track(TRACK_CONTROLLER* tc); //called when restarting a level
+
+void Deallocate_Track(TRACK_CONTROLLER* tc);
+
+/*the track_sound stuff doesn't actually refer to the track directly , so
+it can be used by other things*/
+void Start_Track_Sound(TRACK_SOUND* ts,VECTORCH * location);
+void Stop_Track_Sound(TRACK_SOUND* ts);
+void Update_Track_Sound(TRACK_SOUND* ts,VECTORCH * location);
+void Deallocate_Track_Sound(TRACK_SOUND* ts);
+
+struct save_block_header;
+
+void LoadTrackPosition(struct save_block_header*,TRACK_CONTROLLER*);
+void SaveTrackPosition(TRACK_CONTROLLER*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif \ No newline at end of file