Encontrei! Encontrei finalmente a solução para o nosso problema de programação.
Estávamos pesquisando como chamar pelo controle do usuário (o teclado) uma ação do Kismet, com a possibilidade de configurar o botão usado para executar esta ação. Após uma semana de procura, o link que nos deu base para fazer isso (em inglês):
http://okita.com/alex/?p=682
Primeiro de tudo, críamos um novo 'Sequence Event', um novo evento do Kismet. Para isso, fomos até o diretório:
UDK\Development\Src\Engine\Classes
E críamos o SeqEvent_MyCustomKismetEvent.uc, com a seguinte programação em UnrealScript:
class SeqEvent_MyCustomKismetEvent extends SequenceEvent;
event Activated(){
`log("event activated.");
}defaultproperties{
ObjName="MyCustomKismetEvent"
ObjCategory="MyCustomEvents" bPlayerOnly=false
}
O 'event Activated()' é o mais importante no momento, porque ativa esse novo objeto quando você o procura no Kismet.
O próximo passo é adicionar essa função de execução no 'GamePlayerController', ou seja, o controle de jogo.
Caminho: UDK\Development\Src\GameFramework\Classes\GamePlayerController.uc
Função:
exec function MyCustomKismetEvent (){
local int i;
local Sequence GameSeq;
local array<SequenceObject> AllSeqEvents;
GameSeq = WorldInfo.GetGameSequence();
if(GameSeq != None)
{
GameSeq.FindSeqObjectsByClass(class'SeqEvent_MyCustomKismetEvent',
true, AllSeqEvents);
for(i=0; i<AllSeqEvents.Length; i++)
SeqEvent_MyCustomKismetEvent(AllSeqEvents[i]).CheckActivate(WorldInfo, None);
}
`log("MyCustomKismetEventactivated ");
}
Essa função mostra para o controle que existe uma ação a ser executada - nesse caso, uma ação do Kismet - quando um determinado botão for pressionado, que é o próximo e último passo que vamos fazer.
Agora, vá para o caminho:
UDK\UTGame\Config\DefaultInput.ini
E prepare-se para adicionar duas linhas de programação. A primeira:
;-----------------------------------------------------------------------------------------
; BINDINGS USED TO ORGANIZE ALL GAME BINDABLE ACT
IONS IN ONE PLACE FOR SYSTEMS SUCH AS UI
; GBA - GAME BINDABLE ACTION
; "_Gamepad" - IS USED WHEN A CONTROLLER IS USING AN ALTERED MAPPING FOR AN ACTION
;-----------------------------------------------------------------------------------------
//VÁRIOS OUTROS COMANDOS
//No final de todos esses comandos coloque a linha abaixo
.Bindings=(Name="GBA_F12",Command="MyCustomKismetEvent")
Essa serve para mostrar que a tecla 'GBA_F12' (que corresponde ao F12 de nosso teclado, como vamos mostrar na próxima parte) vai executar o comando 'MyCustomKismetEvent', que é o nosso evento do Kismet que críamos ali em cima.
;------------------------------------------------------------------ -----------------------
; Game Keyboard/Mouse Bindings
;---------------------------------------------------------------------- -------------------
; Primary default bindings
//vários outros comandos
//No final escreva...
.Bindings=(Name="F12",Command="GBA_F12")
Isso dirá ao controle que ao apertar a tecla F12, a sequência de Kismet para o 'MyCustomKismetEvent' será ativada.
Para testar, fiz uma sequência 'Toggle' no Kismet, que ativa e desativa um emissor de partículas pretas do chão. A sequência ficou assim:
Ao testar o level, o emissor está funcionando:
Aperto F12 (Que é a tecla que escolhemos para fazer o evento), e voilá! O emissor para de emitir as partículas, mostrando que nosso evento é um sucesso, e assim permitindo-nos criar novas teclas com novas funções para o nosso Pinball!
Lembre-se: Em um momento ou outro, talvez seja necessário editar as propriedades dos arquivos .ini e .uc para eles não serem 'Read-Only' - somente leitura - para que você possa editá-los.
Beijundas,
Kiki