summaryrefslogtreecommitdiff
path: root/src/control/Phones.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/control/Phones.h')
-rw-r--r--src/control/Phones.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/control/Phones.h b/src/control/Phones.h
new file mode 100644
index 0000000..81b40dc
--- /dev/null
+++ b/src/control/Phones.h
@@ -0,0 +1,69 @@
+#pragma once
+
+#include "Physical.h"
+
+class CPed;
+class CAnimBlendAssociation;
+
+enum PhoneState {
+ PHONE_STATE_FREE,
+ PHONE_STATE_REPORTING_CRIME, // CCivilianPed::ProcessControl sets it but unused
+ PHONE_STATE_2,
+ PHONE_STATE_MESSAGE_REMOVED,
+ PHONE_STATE_ONETIME_MESSAGE_SET,
+ PHONE_STATE_REPEATED_MESSAGE_SET,
+ PHONE_STATE_REPEATED_MESSAGE_SHOWN_ONCE,
+ PHONE_STATE_ONETIME_MESSAGE_STARTED,
+ PHONE_STATE_REPEATED_MESSAGE_STARTED,
+ PHONE_STATE_9 // just rings, picking being handled via script. most of the time game uses this
+};
+
+class CPhone
+{
+public:
+ CVector m_vecPos;
+ wchar *m_apMessages[6];
+ uint32 m_repeatedMessagePickupStart;
+ CEntity *m_pEntity; // stored as building pool index in save files
+ PhoneState m_nState;
+ bool m_visibleToCam;
+
+ CPhone() { }
+ ~CPhone() { }
+};
+
+VALIDATE_SIZE(CPhone, 0x34);
+
+class CPhoneInfo {
+public:
+ static bool bDisplayingPhoneMessage;
+ static uint32 PhoneEnableControlsTimer;
+ static CPhone *pPhoneDisplayingMessages;
+ static bool bPickingUpPhone;
+ static CPed *pCallBackPed;
+
+ int32 m_nMax;
+ int32 m_nScriptPhonesMax;
+ CPhone m_aPhones[NUMPHONES];
+
+ CPhoneInfo() { }
+ ~CPhoneInfo() { }
+
+ int FindNearestFreePhone(CVector*);
+ bool PhoneAtThisPosition(CVector);
+ bool HasMessageBeenDisplayed(int);
+ bool IsMessageBeingDisplayed(int);
+ void Load(uint8 *buf, uint32 size);
+ void Save(uint8 *buf, uint32 *size);
+ void SetPhoneMessage_JustOnce(int phoneId, wchar *msg1, wchar *msg2, wchar *msg3, wchar *msg4, wchar *msg5, wchar *msg6);
+ void SetPhoneMessage_Repeatedly(int phoneId, wchar *msg1, wchar *msg2, wchar *msg3, wchar *msg4, wchar *msg5, wchar *msg6);
+ int GrabPhone(float, float);
+ void Initialise(void);
+ void Shutdown(void);
+ void Update(void);
+};
+
+extern CPhoneInfo gPhoneInfo;
+
+void PhonePutDownCB(CAnimBlendAssociation *assoc, void *arg);
+void PhonePickUpCB(CAnimBlendAssociation *assoc, void *arg); \ No newline at end of file