#pragma once

#include "node.h"
#include "cstr.h"
#include "resource.h"
#include "scalar.h"

class NotationFile;

struct ScenarioRole__ModelResource
{
	Scalar killBonus, damageReceivedModifier, damageInflictedModifier, damageBias, friendlyFirePenalty;
	int returnFromDeath;
};

class ScenarioRole : public Node
{
public:
	Scalar CalcDamageReceivedScore(const Scalar &damage_received);

protected:
	 Scalar damageInflictedModifier, damageReceivedModifier, friendlyFirePenalty, damageBias, killBonus;
	 CString roleName;

	 int returnFromDeath;

public:
	 const int GetReturnFromDeath()
	 {
		 Check(this);
		 return returnFromDeath;
	 }

	 Scalar GetDamageInflictedModifier() const
	 {
		 Check(this);
		 return damageInflictedModifier;
	 }

	 Scalar GetDamageReceivedModifier() const
	 {
		 Check(this);
		 return damageReceivedModifier;
	 }

	 Scalar GetFriendlyFirePenalty() const
	 {
		 Check(this);
		 return friendlyFirePenalty;
	 }

	 Scalar GetDamageBias() const
	 {
		 Check(this);
		 return damageBias;
	 }

	 Scalar GetKillBonus() const
	 {
		 Check(this);
		 return killBonus;
	 }

	 CString GetRoleName() const
	 {
		 Check(this);
		 return roleName;
	 }

	 void SetDamageInflictedModifier(const Scalar &value)
	 {
		 Check(this);
		 damageInflictedModifier = value;
	 }

	 void SetDamageReceivedModifier(const Scalar value)
	 {
		 Check(this);
		 damageReceivedModifier = value;
	 }

	 void SetFriendlyFirePenalty(const Scalar &value)
	 {
		 Check(this);
		 friendlyFirePenalty = value;
	 }

	 void SetDamageBias(const Scalar &value)
	 {
		 Check(this);
		 damageBias = value;
	 }

	 void SetKillBonus(const Scalar &value)
	 {
		 Check(this);
		 killBonus = value;
	 }

	 void SetReturnFromDeath(const int &value)
	 {
		 Check(this);
		 returnFromDeath = value;
	 }

public:
	 typedef ScenarioRole__ModelResource ModelResource;

	 ScenarioRole(const CString &role_name, const CString &model_file);

	 ScenarioRole(const CString &role_name);

	~ScenarioRole();

	static ResourceDescription::ResourceID CreateModelResource(ResourceFile *resource_file, const char* model_name, NotationFile * model_file, const ResourceDirectories *directories, ModelResource *model = NULL);
};
