Add voice signal for catching voice messages to `CharApi` #14
Merged
dkanus
merged 5 commits from feature_voice_messages_api
into develop
2 years ago
10 changed files with 578 additions and 104 deletions
@ -0,0 +1,39 @@
|
||||
/** |
||||
* Author: dkanus |
||||
* Home repo: https://www.insultplayers.ru/git/AcediaFramework/AcediaCore |
||||
* License: GPL |
||||
* Copyright 2023 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class ChatAPI_OnVoiceMessage_Signal extends Signal |
||||
dependsOn(ChatApi); |
||||
|
||||
public final function Emit(EPlayer sender, ChatApi.BuiltInVoiceMessage message) { |
||||
local Slot nextSlot; |
||||
|
||||
StartIterating(); |
||||
nextSlot = GetNextSlot(); |
||||
while (nextSlot != none) { |
||||
ChatAPI_OnVoiceMessage_Slot(nextSlot).connect(sender, message); |
||||
nextSlot = GetNextSlot(); |
||||
} |
||||
CleanEmptySlots(); |
||||
} |
||||
|
||||
defaultproperties { |
||||
relatedSlotClass = class'ChatAPI_OnVoiceMessage_Slot' |
||||
} |
@ -0,0 +1,41 @@
|
||||
/** |
||||
* Author: dkanus |
||||
* Home repo: https://www.insultplayers.ru/git/AcediaFramework/AcediaCore |
||||
* License: GPL |
||||
* Copyright 2023 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class ChatAPI_OnVoiceMessage_Slot extends Slot; |
||||
|
||||
delegate connect( |
||||
EPlayer sender, |
||||
ChatApi.BuiltInVoiceMessage message |
||||
) { |
||||
DummyCall(); |
||||
} |
||||
|
||||
protected function Constructor() { |
||||
connect = none; |
||||
} |
||||
|
||||
protected function Finalizer() { |
||||
super.Finalizer(); |
||||
connect = none; |
||||
} |
||||
|
||||
defaultproperties { |
||||
} |
@ -0,0 +1,81 @@
|
||||
/** |
||||
* Set of tests for `Command` class. |
||||
* Copyright 2023 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class TEST_VoiceMessages extends TestCase |
||||
abstract |
||||
dependsOn(ChatApi); |
||||
|
||||
private static function ChatApi.NativeVoiceMessage Make(name type, int index) { |
||||
local ChatApi.NativeVoiceMessage result; |
||||
|
||||
result.type = type; |
||||
result.index = index; |
||||
return result; |
||||
} |
||||
|
||||
private static function TestEquality(name type, int index, ChatApi.BuiltInVoiceMessage builtIn) { |
||||
local ChatApi.NativeVoiceMessage nativeMessage; |
||||
|
||||
nativeMessage.type = type; |
||||
nativeMessage.index = index; |
||||
|
||||
Issue("Native voice messages are incorrectly converted into `BuiltInVoiceMessage`."); |
||||
TEST_ExpectTrue(__().chat._nativeVoiceMessageIntoEnum(nativeMessage) == builtIn); |
||||
|
||||
Issue("`BuiltInVoiceMessage`s are incorrectly converted into native voice messages."); |
||||
TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(builtIn).type == type); |
||||
TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(builtIn).index == index); |
||||
} |
||||
|
||||
protected static function TESTS() { |
||||
Context("Testing internal conversion methods between voice messages."); |
||||
Test_VoiceMessageConversion(); |
||||
} |
||||
protected static function Test_VoiceMessageConversion() { |
||||
local ChatApi.NativeVoiceMessage nothingMessage; |
||||
|
||||
nothingMessage.type = 'TRADER'; |
||||
nothingMessage.index = 5; |
||||
|
||||
TestEquality('SUPPORT', 2, BIVM_SupportAskForMoney); |
||||
TestEquality('ACK', 0, BIVM_AckYes); |
||||
TestEquality('ALERT', 5, BIVM_AlretFollowMe); |
||||
TestEquality('DIRECTION', 2, BIVM_DirectionGoDownstairs); |
||||
TestEquality('INSULT', 1, BIVM_InsultPlayers); |
||||
TestEquality('TRADER', 2, BIVM_TraderShopOpen); |
||||
TestEquality('TRADER', 4, BIVM_Trader30SecondsUntilShopCloses); |
||||
TestEquality('TRADER', 6, BIVM_TraderShopClosed); |
||||
TestEquality('TRADER', 7, BIVM_TraderCompliment); |
||||
TestEquality('TRADER', 11, BIVM_TraderHurryUp2); |
||||
TestEquality('AUTO', 0, BIVM_AutoWelding); |
||||
TestEquality('AUTO', 16, BIVM_AutoSirenScream); |
||||
TestEquality('AUTO', 24, BIVM_AutoEquipFireaxe); |
||||
|
||||
// Test unknown separately |
||||
Issue("Native voice messages are incorrectly converted into `BuiltInVoiceMessage`."); |
||||
TEST_ExpectTrue(__().chat._nativeVoiceMessageIntoEnum(nothingMessage) == BIVM_Unknown); |
||||
|
||||
Issue("`BuiltInVoiceMessage`s are incorrectly converted into native voice messages."); |
||||
TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(BIVM_Unknown).type == ''); |
||||
TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(BIVM_Unknown).index == 0); |
||||
} |
||||
defaultproperties { |
||||
caseName = "Voice messages" |
||||
caseGroup = "ChatAPI" |
||||
} |
@ -0,0 +1,59 @@
|
||||
/** |
||||
* Author: dkanus |
||||
* Home repo: https://www.insultplayers.ru/git/AcediaFramework/AcediaCore |
||||
* License: GPL |
||||
* Copyright 2023 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful,, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class Unflect_ChatApi_Controller extends KFPlayerController |
||||
dependsOn(ChatAPI); |
||||
|
||||
function SendVoiceMessage( |
||||
PlayerReplicationInfo sender, |
||||
PlayerReplicationInfo statedRecipient, |
||||
name messageType, |
||||
byte messageID, |
||||
name broadcastType, |
||||
optional Pawn soundSender, |
||||
optional vector senderLocation |
||||
) { |
||||
local Controller recepient; |
||||
local KFPlayerController kfPlayerRecepient; |
||||
|
||||
// Don't allow dead people to talk |
||||
if (pawn == none) return; |
||||
if (!AllowVoiceMessage(messageType)) return; |
||||
|
||||
class'Global'.static.GetInstance().chat._EmitOnVoiceMessage(self, messageType, messageID); |
||||
recepient = level.controllerList; |
||||
while (recepient != none) { |
||||
kfPlayerRecepient = KFPlayerController(recepient); |
||||
if (kfPlayerRecepient != none) { |
||||
kfPlayerRecepient.ClientLocationalVoiceMessage( |
||||
sender, |
||||
statedRecipient, |
||||
messagetype, |
||||
messageID, |
||||
soundSender, |
||||
senderLocation); |
||||
} |
||||
recepient = recepient.nextController; |
||||
} |
||||
} |
||||
|
||||
defaultproperties { |
||||
} |
Loading…
Reference in new issue