PDA

View Full Version : Object oriented scripting, ican do it :D


Cr3V3TT3
05-14-2005, 13:41
Hi all !

I' m working on the EGO Script Engine.

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

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 :
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 :

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
{
}

:D

Bye,
Cr3V3TT3

ichthys
05-14-2005, 17:33
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?

Cr3V3TT3
05-14-2005, 19:20
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