Raised This Month: $ Target: $400
 0% 

Object oriented scripting, ican do it :D


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Cr3V3TT3
Senior Member
Join Date: Jul 2004
Location: V'dauban
Old 05-14-2005 , 12:41   Object oriented scripting, ican do it :D
Reply With Quote #1

Hi all !

I' m working on the EGO Script Engine.

I just finish the hardest thing i guess... the objects!

Code:
class CProp
{
	char* name;
	char* value;
public:
	CProp(char*);
	~CProp();
	char* GetName() {return name;}
	void SetProp(char* valu){value = valu;}
	char* GetProp(){return value;}
};

CProp::CProp(char* input)
{
	name = input;
}
CProp::~CProp()
{
	name = "";
	value = "";
}

class CObject
{
	char* name;
	std::vector<CProp> props;
	std::vector<CProp>::iterator props_it;
public:
	CObject(char*);
	~CObject();
	bool CreateProp(char* name, char* defaultval)
	{
		for ( props_it = props.begin(); props_it != props.end(); props_it++ )
		{
			if (props_it->GetName() == name)
			{
				std::cout << "Error: 0003 , Props: " << name << " is already defined.\n";
				return false;
			}
		}
		props.push_back(name);
		for ( props_it = props.begin(); props_it != props.end(); props_it++ )
		{
			if (props_it->GetName() == name)
			{
				props_it->SetProp(defaultval);
				return true;
			}
		}
		return false;
	}
	bool DeleteProp(char* name)
	{
		for ( props_it = props.begin(); props_it != props.end(); props_it++ )
		{
			if (props_it->GetName() == name)
			{
				props.erase(props_it);
				return true;
			}
		}
		std::cout << "Error: 0002 , Object: " << name << " can' t be deleted because it isn' t exist or can' t found his index.\n";
		return false;
	}
	char* GetName() {return name;}
	std::vector<CProp> GetPropList() {return props;}
};

CObject::CObject(char* input)
{
	name = input;
}
CObject::~CObject()
{
	name = "";
	props.clear();
}

class CObjectManager
{
	std::vector<CObject> objects;
	std::vector<CObject>::iterator objects_it;
public:
	bool CreateObject(char* name)
	{
		for ( objects_it = objects.begin(); objects_it != objects.end(); objects_it++ )
		{
			if (objects_it->GetName() == name)
			{
				std::cout << "Error: 0001 , Object: " << name << " is already defined.\n";
				return false;
			}
		}
		objects.push_back(name);
		return true;
	}
	bool DeleteObject(char* name)
	{
		for ( objects_it = objects.begin(); objects_it != objects.end(); objects_it++ )
		{
			if (objects_it->GetName() == name)
			{
				objects.erase(objects_it);
				return true;
			}
		}
		std::cout << "Error: 0002 , Object: " << name << " can' t be deleted because it isn' t exist or can' t found his index.\n";
		return false;
	}
	std::vector<CObject> GetObjectsList() { return objects; }

	// Helpers

	std::vector<CProp> GetPropsByObj(char* name)
	{
		for ( objects_it = objects.begin(); objects_it != objects.end(); objects_it++ )
		{
			if (objects_it->GetName() == name)
			{
				return objects_it->GetPropList();
			}
		}
	}

	char GetPropByObj(char* objname, char* propname)
	{
		for ( objects_it = objects.begin(); objects_it != objects.end(); objects_it++ )
		{
			if (objects_it->GetName() == objname)
			{
				std::vector<CProp> props = objects_it->GetPropList();
				std::vector<CProp>::iterator props_it;
				for ( props_it = props.begin(); props_it != props.end(); props_it++ )
				{
					if (props_it->GetName() == propname)
					{
						return *props_it->GetProp();
					}
				}
			}
		}
	}

	bool CreatePropByObj( char* objname, char* propname, char* defvalue)
	{
		for ( objects_it = objects.begin(); objects_it != objects.end(); objects_it++ )
		{
			if (objects_it->GetName() == objname)
			{
				return objects_it->CreateProp(propname, defvalue);
			}
		}
	}

	bool DeletePropByObj( char* objname, char* propname)
	{
		for ( objects_it = objects.begin(); objects_it != objects.end(); objects_it++ )
		{
			if (objects_it->GetName() == objname)
			{
				return objects_it->DeleteProp(propname);
			}
		}
	}

} o_Manager;
This is the tests :
Code:
	o_Manager.CreateObject("Object1");
	o_Manager.CreateObject("Object2");
	o_Manager.CreateObject("Object1");
	o_Manager.CreateObject("Object3");
	o_Manager.CreateObject("Object2");
	o_Manager.CreateObject("Object4");
	o_Manager.CreateObject("Object5");
	o_Manager.CreateObject("Object6");
	o_Manager.DeleteObject("Object5");

	o_Manager.CreatePropByObj( "Object1" , "Props1", "Value1");
	o_Manager.CreatePropByObj( "Object1" , "Props2", "Value2");
	o_Manager.CreatePropByObj( "Object1" , "Props3", "Value3");
	o_Manager.CreatePropByObj( "Object1" , "Props1", "Value1");
	o_Manager.CreatePropByObj( "Object1" , "Props4", "Value4");
	o_Manager.CreatePropByObj( "Object1" , "Props5", "Value5");

	o_Manager.DeletePropByObj( "Object1" , "Props4");
with a little code to display the objects it show :

Quote:
Error: 0001 , Object: Object1 is already defined.
Error: 0001 , Object: Object2 is already defined.
Error: 0003 , Props: Props1 is already defined.
Object1
{
Props1 : Value1
Props2 : Value2
Props3 : Value3
Props5 : Value5
}
Object2
{
}
Object3
{
}
Object4
{
}
Object6
{
}


Bye,
Cr3V3TT3
Cr3V3TT3 is offline
Send a message via MSN to Cr3V3TT3
ichthys
Veteran Member
Join Date: Dec 2004
Location: []*[]
Old 05-14-2005 , 16:33  
Reply With Quote #2

Dont know why i was browsing the off-topic forum. Jobless I guess.
Cr3v3t3, why dont you post this in the 'HL2 / SM coding' forum?
ichthys is offline
Cr3V3TT3
Senior Member
Join Date: Jul 2004
Location: V'dauban
Old 05-14-2005 , 18:20  
Reply With Quote #3

Because its not for hl2 or sm.


I wana do a script engine for "Messenger Plus!"
I made some tests with SpiderMonkey( JavaScript ) but i dont got enough skill to do it
So i decided to do mine :]

Project EGO is a temporary name ^^
It's just a simple open source scripting engine


Bye,
Cr3V3TT3
Cr3V3TT3 is offline
Send a message via MSN to Cr3V3TT3
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 00:04.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode