summaryrefslogblamecommitdiffstats
path: root/src/control/Record.h
blob: 4abeb68a75b4caf9583e9b4c29f6e503d3f89c32 (plain) (tree)
1
2
3
4
5
6

            
                  
               
                       
 
















                        

  

                     
                         
 


                                   






                                                   
                             


                                                         
                               
                                     





                                                                        
 
                               
                                                         
                                                     







                                                                                   
                                           


                                                   

                                                          
 

  







                                      

                        
 










                                                
       

                                                                                

                                                         
                               




                                                                                         
  
#pragma once

class CAutomobile;
class CVehicle;
class CControllerState;

class CCarStateEachFrame
{
public:
	int16 velX;
	int16 velY;
	int16 velZ;
	int8 rightX;
	int8 rightY;
	int8 rightZ;
	int8 forwardX;
	int8 forwardY;
	int8 forwardZ;
	int8 wheel;
	uint8 gas;
	uint8 brake;
	bool handbrake;
	CVector pos;
};

extern char* gString;

class CRecordDataForChase
{
	enum {
		NUM_CHASE_CARS = 20
	};
	enum {
		STATE_NONE = 0,
		STATE_RECORD = 1,
		STATE_PLAYBACK_INIT = 2,
		STATE_PLAYBACK = 3,
		STATE_PLAYBACK_BEFORE_RECORDING = 4
	};
	static uint8 &Status;
	static int &PositionChanges;
	static uint8 &CurrentCar;
	static CAutomobile*(&pChaseCars)[NUM_CHASE_CARS];
	static float &AnimTime;
	static uint32 &AnimStartTime;
	static CCarStateEachFrame* (&pBaseMemForCar)[NUM_CHASE_CARS];
	static float &TimeMultiplier;
	static int &FId2;
public:

	static bool IsRecording(void) { return Status == STATE_RECORD; }

	static void Init(void);
	static void SaveOrRetrieveDataForThisFrame(void);
	static void SaveOrRetrieveCarPositions(void);
	static void StoreInfoForCar(CAutomobile*, CCarStateEachFrame*);
	static void RestoreInfoForMatrix(CMatrix&, CCarStateEachFrame*);
	static void RestoreInfoForCar(CAutomobile*, CCarStateEachFrame*, bool);
	static void ProcessControlCars(void);
#if (defined(GTA_PS2) || defined(FIX_BUGS))
	static bool ShouldThisPadBeLeftAlone(uint8 pad);
#endif
	static void GiveUsACar(int32, CVector, float, CAutomobile**, uint8, uint8);
	static void StartChaseScene(float);
	static void CleanUpChaseScene(void);
	static void SetUpCarsForChaseScene(void);
	static void CleanUpCarsForChaseScene(void);
	static void RemoveCarFromChase(int32);
	static CVehicle* TurnChaseCarIntoScriptCar(int32);

};

struct tGameBuffer
{
	float m_fTimeStep;
	uint32 m_nTimeInMilliseconds;
	uint8 m_nSizeOfPads[2];
	uint16 m_nChecksum;
	uint8 m_ControllerBuffer[116];
};

class CRecordDataForGame
{
	enum {
		STATE_NONE = 0,
		STATE_RECORD = 1,
		STATE_PLAYBACK = 2,
	};
	static uint16& RecordingState;
	static uint8* &pDataBuffer;
	static uint8* &pDataBufferPointer;
	static int &FId;
	static tGameBuffer &pDataBufferForFrame;

public:
	static bool IsRecording() { return RecordingState == STATE_RECORD; }
	static bool IsPlayingBack() { return RecordingState == STATE_PLAYBACK; }

	static void SaveOrRetrieveDataForThisFrame(void);
	static void Init(void);

private:
	static uint16 CalcGameChecksum(void);
	static uint8* PackCurrentPadValues(uint8*, CControllerState*, CControllerState*);
	static uint8* UnPackCurrentPadValues(uint8*, uint8, CControllerState*);
};