the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2
3#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
6#include <cell/sysmodule.h>
7#include <sys/process.h>
8#include <sysutil/sysutil_avc2.h> /* for using AV Chat2 Utility */
9#include <np.h> /* for using NP Matching */
10#include <netex/net.h>
11#include <netex/libnetctl.h>
12#include <sysutil/sysutil_sysparam.h>
13
14
15#define AVC2_PARAM_DEFAULT_MAX_PLAYERS (8)
16#define AVC2_PARAM_DEFAULT_MAX_SPEAKERS (4)
17
18/* state list */
19enum EAVCState
20{
21 AVC_STATE_IDLE = 0,
22
23 AVC_STATE_CHAT_INIT,
24 AVC_STATE_CHAT_LOAD,
25 AVC_STATE_CHAT_JOIN,
26 AVC_STATE_CHAT_SESSION_PROCESSING,
27 AVC_STATE_CHAT_LEAVE,
28 AVC_STATE_CHAT_RESET,
29 AVC_STATE_CHAT_UNLOAD,
30
31 AVC_STATE_EXIT,
32};
33/* event list */
34enum EAVCEvent
35{
36 AVC_EVENT_NON = AVC_STATE_EXIT + 1,
37
38 AVC_EVENT_EPSILON,
39 AVC_EVENT_LAN_DISCONNECT,
40 AVC_EVENT_ONLINE,
41 AVC_EVENT_OFFLINE,
42 AVC_EVENT_EXIT_GAME,
43 AVC_EVENT_ROOM_CREATE,
44 AVC_EVENT_ROOM_SEARCH,
45 AVC_EVENT_ERROR,
46 AVC_EVENT_FATAL_ERROR,
47 AVC_EVENT_NETDIALOG_FINISHED,
48 AVC_EVENT_NETDIALOG_UNLOADED,
49 AVC_EVENT_NP2_INIT_SUCCEEDED,
50 AVC_EVENT_NP2_FINALIZE_SUCCEEDED,
51 AVC_EVENT_NP2_START_CONTEXT_SUCCEEDED,
52 AVC_EVENT_NP2_STOP_CONTEXT_SUCCEEDED,
53 AVC_EVENT_NP2_ROOM_DESTROY_OR_KICKEDOUT,
54 AVC_EVENT_NP2_ROOM_MEMBER_LEFT,
55 AVC_EVENT_NP2_ROOM_MEMBER_JOINED,
56 AVC_EVENT_CHAT_LOAD_SUCCEEDED,
57 AVC_EVENT_CHAT_LOAD_FAILED,
58 AVC_EVENT_CHAT_JOIN_SUCCEEDED,
59 AVC_EVENT_CHAT_JOIN_FAILED,
60 AVC_EVENT_CHAT_LEAVE_SUCCEEDED,
61 AVC_EVENT_CHAT_LEAVE_FAILED,
62 AVC_EVENT_CHAT_UNLOAD_SUCCEEDED,
63 AVC_EVENT_CHAT_UNLOAD_FAILED,
64 AVC_EVENT_CHAT_INIT_SUCCEEDED,
65 AVC_EVENT_CHAT_FINALIZE_SUCCEEDED,
66 AVC_EVENT_CHAT_SESSION_STOPPED,
67 AVC_EVENT_CREATE_JOIN_ROOM_SUCCEEDED,
68 AVC_EVENT_SEARCH_ROOM_SUCCEEDED,
69 AVC_EVENT_JOIN_ROOM_SUCCEEDED,
70 AVC_EVENT_LEAVE_ROOM_SUCCEEDED,
71 AVC_EVENT_SIGNALING_ESTABLISHED,
72 AVC_EVENT_SIGNALING_DEAD,
73 AVC_EVENT_UI_CLOSE_SUCCEEDED,
74};
75
76
77typedef struct
78{
79 int state;
80 int event;
81 int (*func)(void);
82 EAVCState new_state;
83} state_transition_table;
84
85
86class SonyVoiceChat
87{
88public:
89
90 static void init(SQRNetworkManager_PS3* pNetMan);
91 static void shutdown();
92 static void tick();
93 static void setEnabled(bool bEnabled);
94 static bool hasMicConnected(const SceNpMatching2RoomMemberId *players_id);
95 static bool isTalking(SceNpMatching2RoomMemberId* players_id);
96 static void mute(bool bMute); //Turn chat audio on or off
97 static void mutePlayer(const SceNpMatching2RoomMemberId member_id, bool bMute); //Turn chat audio from a specified player on or off;
98 static void muteLocalPlayer(bool bMute); //Turn microphone input on or off;
99
100 static bool isMuted();
101 static bool isMutedPlayer(const SceNpMatching2RoomMemberId member_id);
102 static bool isMutedLocalPlayer(); //Turn microphone input on or off;
103
104 static void setVolume(float vol); // 0.0f - 1.0f range
105 static float getVolume(); // 0.0f - 1.0f range
106
107 static bool isShuttingDown() { return (sm_state == AVC_STATE_CHAT_LEAVE || sm_state == AVC_STATE_CHAT_UNLOAD || AVC_STATE_CHAT_RESET); }
108 static void signalRoomDestroyed() { if(!isShuttingDown()) sm_event = AVC_EVENT_NP2_ROOM_DESTROY_OR_KICKEDOUT;}
109 static void signalRoomKickedOut() { if(!isShuttingDown()) sm_event = AVC_EVENT_NP2_ROOM_DESTROY_OR_KICKEDOUT;}
110 static void signalDisconnected() { if(!isShuttingDown()) sm_event = AVC_EVENT_LAN_DISCONNECT;}
111private:
112// static np2_matching2_info sm_matchingInfo;
113 static EAVCEvent sm_event;
114 static EAVCState sm_state;
115 static SQRNetworkManager_PS3* sm_pNetworkManager;
116 static bool sm_bEnabled;
117 static uint8_t sm_micStatus;
118 static bool sm_bLoaded;
119 static bool sm_bUnloading;
120 static unordered_map<SceNpMatching2RoomMemberId, bool> sm_bTalkingMap;
121 static bool sm_bCanStart; // set to true on init, false on disconnect, used to see if we should start after a re-enable
122 static bool sm_isChatRestricted; // true if the parental controls have been set on the main users account
123 static int sm_currentBitrate;
124 static int eventcb_load(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata);
125 static int eventcb_join(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata);
126 static int eventcb_leave( CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata);
127 static int eventcb_unload(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata);
128 static int eventcb_voiceDetected(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata);
129 static void eventcb( CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata);
130
131 static int initialize();
132 static int finalize();
133
134 static int load();
135 static int unload();
136
137 static int join();
138 static int leave();
139
140 static int start();
141 static int stop();
142
143 static int startStream();
144 static int stopStream();
145// static int update_target();
146
147 static void do_state_transition( state_transition_table *tbl, int tbl_size);
148 static int invoke_epsilon_event();
149
150 static void setBitRate();
151
152 static void setEvent(EAVCEvent event);
153 static void setState(EAVCState state);
154 static void printStateAndEvent();
155
156
157};