import class gameHitEvent extends Event
{
	import var attackData : AttackData;
	import var target : weak< GameObject >;
	import var hitPosition : Vector4;
	import var hitDirection : Vector4;
	import var hitComponent : weak< IPlacedComponent >;
	import var hitRepresentationResult : HitRepresentationQueryResult;
	import var hasPiercedTechSurface : Bool;
	import var attackPentration : Float;
	import var attackComputed : gameAttackComputed;
	var projectionPipeline : Bool;
}

class gameRagdollHitEvent extends gameHitEvent
{
	var impactForce : Float;
	var speedDelta : Float;
	var heightDelta : Float;
}

importonly class gameVehicleHitEvent extends gameHitEvent
{
	import var vehicleVelocity : Vector4;
	import var preyVelocity : Vector4;
}

importonly class gameTargetHitEvent extends gameHitEvent
{
}

importonly final class gameTargetDamageEvent extends gameTargetHitEvent
{
	import var damage : Float;
}

importonly class gameProjectedHitEvent extends gameHitEvent
{
}

importonly final class gameDamageReceivedEvent extends Event
{
	import var hitEvent : gameHitEvent;
	import var totalDamageReceived : Float;
}

class DamageInflictedEvent extends Event
{
}

importonly final class gameVehicleDestructionEvent extends Event
{
	import var attackData : AttackData;
	import var hitPosition : Vector4;
	import var hitDirection : Vector4;
	import var hitComponent : weak< IPlacedComponent >;
}

importonly final class gameCloseByEvent extends Event
{
	import var position : Vector4;
	import var forward : Vector4;
	import var instigator : weak< GameObject >;
	import var attackData : AttackData;
}

importonly final class gameMissEvent extends Event
{
	import var attackData : AttackData;
	import var hitPosition : Vector4;
	import var hitDirection : Vector4;
	import var attackPentration : Float;
	import var hasPiercedTechSurface : Bool;
	import var attackComputed : gameAttackComputed;
}

importonly final class DamageBlockedByNanoTechPlatesEvent extends Event
{
	import var hitEvent : gameHitEvent;
}

importonly final class ResurrectEvent extends Event
{
}

importonly final class gameDeathEvent extends Event
{
	import var instigator : weak< GameObject >;
}

importonly final class gamePotentialDeathEvent extends Event
{
	import var instigator : weak< GameObject >;
}

importonly final class gameUnconsciousEvent extends Event
{
}

importonly final class gameDropItemEvent extends Event
{
	import var slotId : TweakDBID;
}

importonly final class gameCoverHitEvent extends gameHitEvent
{
	import var cover : weak< GameObject >;
}

importonly final class DefeatedEvent extends Event
{
}

importonly final class KillRewardEvent extends Event
{
	import var victim : weak< GameObject >;
	import var killType : gameKillType;
}

class TargetNeutraliziedEvent extends Event
{
	var type : ENeutralizeType;
	var targetID : EntityID;
}

class WillDieSoonEvent extends Event
{
}

class NPCAfterDeathOrDefeatEvent extends Event
{
}

struct DamageHistoryEntry
{
	var hitEvent : gameHitEvent;
	var totalDamageReceived : Float;
	var frameReceived : Uint64;
	var timestamp : Float;
	var healthAtTheTime : Float;
	var source : weak< GameObject >;
	var target : weak< GameObject >;
}

struct PlayerTotalDamageAgainstHealth
{
	var player : weak< GameObject >;
	var totalDamage : Float;
	var targetHealth : Float;
}

