package de.lighti.packet;
import com.valve.dota2.Netmessages.CSVCMsg_GameEventList.descriptor_t;
import com.valve.dota2.Netmessages.CSVCMsg_GameEventList.key_t;
import com.valve.dota2.Networkbasetypes.CSVCMsg_GameEvent;
import de.lighti.DotaPlay;
import de.lighti.GameEventListener;
public class GameEvent {
/**
* Handles Game event logic.
* @param e the event
*/
static void handleGameEvent( CSVCMsg_GameEvent e ) {
int index;
for (index = 0; index < DotaPlay.getState().getGameEventList().getDescriptorsCount(); index++) {
final descriptor_t Descriptor = DotaPlay.getState().getGameEventList().getDescriptors( index );
if (Descriptor.getEventid() == e.getEventid()) {
break;
}
}
if (index == DotaPlay.getState().getGameEventList().getDescriptorsCount()) {
//System.out.println( e );
//Not sure what this means.
return;
}
else {
final int numKeys = e.getKeysCount();
final descriptor_t typeDescriptor = DotaPlay.getState().getGameEventList().getDescriptors( index );
//We only care about combat log events
if (!typeDescriptor.getName().equals( "dota_combatlog" )) {
return;
}
int eventType = -1;
int source = -1;
int target = -1;
int value = -1;
float timeStamp = -1;
int inflictor = -1;
int attackerEntity = -1;
for (int i = 0; i < numKeys; i++) {
final key_t key = typeDescriptor.getKeys( i );
final CSVCMsg_GameEvent.key_t keyValue = e.getKeys( i );
final String keyName = key.getName();
switch (keyName) {
case "value":
value = keyValue.getValShort();
break;
case "type":
eventType = keyValue.getValByte();
break;
case "sourcename":
source = keyValue.getValShort();
break;
case "attackername":
attackerEntity = keyValue.getValShort();
break;
case "targetname":
target = keyValue.getValShort();
break;
case "timestamp":
timeStamp = keyValue.getValFloat();
break;
case "inflictorname":
inflictor = keyValue.getValShort();
default:
break;
}
}
if (attackerEntity < 0 || eventType < 0 || source < 0 || target < 0 || inflictor < 0 || timeStamp < 0) {
throw new IllegalStateException( "GameEvent is missing values" );
}
for (final GameEventListener l : DotaPlay.getListeners()) {
l.gameEvent( eventType, source, attackerEntity, target, value, inflictor, timeStamp );
}
}
}
}