import enum gameEStatFlags
{
	Bool,
	EquipOnPlayer,
	EquipOnNPC,
	ExcludeRootCombination,
}

import enum gameStatModifierType
{
	Additive,
	AdditiveMultiplier,
	Multiplier,
	Count,
	Invalid,
}

import enum gameStatObjectsRelation
{
	Self,
	Owner,
	Root,
	Parent,
	Target,
	Player,
	Instigator,
	Count,
	Invalid,
}

import enum gameGodModeType
{
	Invulnerable,
	Immortal,
	Mortal,
}

import enum gameCombinedStatOperation
{
	Addition,
	Subtraction,
	Multiplication,
	Division,
	Modulo,
	Count,
	Invalid,
}

importonly abstract class gameStatModifierData extends IScriptable
{
	import var statType : gamedataStatType;
	import var modifierType : gameStatModifierType;
}

importonly class gameConstantStatModifierData extends gameStatModifierData
{
	import var value : Float;
}

importonly class gameCurveStatModifierData extends gameStatModifierData
{
	import var curveName : CName;
	import var columnName : CName;
	import var curveStat : gamedataStatType;
}

importonly class gameCombinedStatModifierData extends gameStatModifierData
{
	import var refStatType : gamedataStatType;
	import var operation : gameCombinedStatOperation;
	import var refObject : gameStatObjectsRelation;
	import var value : Float;
}

struct gameStatTotalValue
{
	var statType : gamedataStatType;
	var value : Float;
}

importonly struct gameStatModifierDetailedData
{
	import var modifierType : gameStatModifierType;
	import var value : Float;
}

importonly struct gameStatDetailedData
{
	import var statType : gamedataStatType;
	import var limitMin : Float;
	import var limitMax : Float;
	import var value : Float;
	import var modifiers : array< gameStatModifierDetailedData >;
	import var boolStatType : Bool;
}

operator+( s : String, stat : gamedataStatType ) : String
{
	return s + EnumValueToString( "gamedataStatType", ( ( Int64 )( stat ) ) );
}

operator+( stat : gamedataStatType, s : String ) : String
{
	return EnumValueToString( "gamedataStatType", ( ( Int64 )( stat ) ) ) + s;
}

operator+( s : String, mode : gameGodModeType ) : String
{
	return s + EnumValueToString( "gameGodModeType", ( ( Int64 )( mode ) ) );
}

operator+( mode : gameGodModeType, s : String ) : String
{
	return EnumValueToString( "gameGodModeType", ( ( Int64 )( mode ) ) ) + s;
}

