package Prereqs
using RTDB

AIActionTargetPrereq : IPrereq
{
	prereqClassName = "AIActionTargetPrereq";
	fk< AIActionTarget > target = "";
}

HighLevelNPCStatePrereq : IPrereq
{
	prereqClassName = "HighLevelNPCStatePrereq";
	string stateName = "";
	bool previousState = false;
	bool isInState = true;
}

CurrentHighLevelNPCStatePrereq : IPrereq
{
	prereqClassName = "CurrentHighLevelNPCStatePrereq";
	string stateName = "";
	bool invert = false;
}

UpperBodyNPCStatePrereq : IPrereq
{
	prereqClassName = "UpperBodyNPCStatePrereq";
	string stateName = "";
	bool previousState = false;
	bool isInState = true;
}

StanceNPCStatePrereq : IPrereq
{
	prereqClassName = "StanceNPCStatePrereq";
	string stateName = "";
	bool previousState = false;
	bool isInState = true;
}

CurrentStanceNPCStatePrereq : IPrereq
{
	prereqClassName = "CurrentStanceNPCStatePrereq";
	string stateName = "";
	bool invert = false;
}

NPCRarityPrereq : IPrereq
{
	prereqClassName = "NPCRarityPrereq";
	string rarity = "";
	bool invert = false;
}

NPCReactionPresetPrereq : IPrereq
{
	prereqClassName = "NPCReactionPresetPrereq";
	string reactionPreset = "";
	bool invert = false;
}

NPCAttitudeTowardsPlayerPrereq : IPrereq
{
	prereqClassName = "NPCAttitudeTowardsPlayerPrereq";
	string attitude = "";
}

NPCRecordHasVisualTag : IPrereq
{
	prereqClassName = "NPCRecordHasVisualTag";
	string visualTag = "";
	bool hasTag = false;
}

IsPuppetBreachedPrereq : IPrereq
{
	prereqClassName = "IsPuppetBreachedPrereq";
	bool isBreached = false;
}

EntityNoticedPlayerPrereq : IPrereq
{
	prereqClassName = "EntityNoticedPlayerPrereq";
	bool isPlayerNoticed = false;
}

IsPlayerBeingDetectedPrereq : IPrereq
{
	prereqClassName = "IsPlayerBeingDetectedPrereq";
	float detectionThreshold = 1;
}

EntityHasVisualTag : IPrereq
{
	prereqClassName = "EntityHasVisualTag";
	string visualTag = "";
	bool hasTag = false;
}

NPCHitReactionTypePrereq : IPrereq
{
	prereqClassName = "NPCHitReactionTypePrereq";
	string hitReactionType = "";
	float timeout = -1.f;
	bool invert = false;
}

NPCHitSourcePrereq : IPrereq
{
	prereqClassName = "NPCHitSourcePrereq";
	string hitSource = "";
	bool invert = false;
}

NPCLocomotionTypePrereq : IPrereq
{
	prereqClassName = "NPCLocomotionTypePrereq";
	string locomotionType = "";
	bool invert = false;
}

NPCTrackingPlayerPrereq : IPrereq
{
	prereqClassName = "NPCTrackingPlayerPrereq";
	bool invert = false;
}

NPCDetectingPlayerPrereq : IPrereq
{
	prereqClassName = "NPCDetectingPlayerPrereq";
	float percentage = 0;
}

DeviceDetectingPlayerPrereqState : IPrereq
{
	prereqClassName = "DeviceDetectingPlayerPrereqState";
}

NPCInScene : IPrereq
{
	prereqClassName = "NPCInScenePrereq";
	bool invert = false;
}

NPCIsHuman : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Human"
	];
}

NPCIsNotHuman : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Human"
	];
	invert = true;
}

NPCIsDrone : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Drone"
	];
}

NPCIsMech : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Mech"
	];
}

NPCIsAndroid : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Android"
	];
}

NPCIsMechanical : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Android", "NPCType.Mech", "NPCType.Drone"
	];
}

NPCIsNotBossOrMaxTac : ANDPrereq
{
	nestedPrereqs = 
	[
		{
			rarity = "MaxTac";
			invert = true;
		} : NPCRarityPrereq, 
		{
			rarity = "Boss";
			invert = true;
		} : NPCRarityPrereq
	];
}

NPCIsLMG : LMGHeldPrereq
{
}

NPCIsAggressive : IPrereq
{
	prereqClassName = "NPCIsAggressive";
	bool invert = false;
}

NPCIsFollower : IPrereq
{
	prereqClassName = "NPCIsFollowerPrereq";
	bool invert = false;
}

IsPuppetInWorkspot : IPrereq
{
	prereqClassName = "IsPuppetInWorkspot";
	bool invert = false;
}

NPCIsChild : IPrereq
{
	prereqClassName = "NPCIsChildPrereq";
	bool invert = false;
}

NPCIsNotChild : IPrereq
{
	prereqClassName = "NPCIsChildPrereq";
	bool invert = true;
}

NPCIsCrowd : IPrereq
{
	prereqClassName = "NPCIsCrowdPrereq";
	bool invert = false;
}

NPCIsNotCrowd : IPrereq
{
	prereqClassName = "NPCIsCrowdPrereq";
	bool invert = true;
}

NPCIsChimera : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Chimera"
	];
}

NPCIsCerberus : NPCTypePrereq
{
	allowedTypes = 
	[
		"NPCType.Cerberus"
	];
}

