[ create a new paste ] login | about

Link: http://codepad.org/UC8Qp8rb    [ raw code | fork ]

C++, pasted on Dec 26:
class UnitObserver
{
public:
	enum Event
	{
		ATTACK = 0,
		CAST,
		DAMAGE_DEALT,
		DAMAGE_TAKEN,
		HEAL,
		PROPERTY_CHANGED,
		DEATH
	};
	struct EventData
	{
		Event type;
		Unit* source;
		Unit* target;
		float damage;
		float healamount;
		Damagetype damType;
		Ability* ability;
		Unit::Property property;
	};
	UnitObserver();
	virtual ~UnitObserver();
	virtual void onEvent( EventData& data ) = 0;
};

// .....

r = _engine->RegisterEnum( "Event" );
assert( r >= 0 );
r = _engine->RegisterEnumValue( "Event", "ATTACK", UnitObserver::ATTACK );
assert( r >= 0 );
r = _engine->RegisterEnumValue( "Event", "CAST", UnitObserver::CAST );
assert( r >= 0 );
r = _engine->RegisterEnumValue( "Event", "DAMAGE_DEALT", UnitObserver::DAMAGE_DEALT );
assert( r >= 0 );
r = _engine->RegisterEnumValue( "Event", "DAMAGE_TAKEN", UnitObserver::DAMAGE_TAKEN );
assert( r >= 0 );
r = _engine->RegisterEnumValue( "Event", "HEAL", UnitObserver::HEAL );
assert( r >= 0 );
r = _engine->RegisterEnumValue( "Event", "PROPERTY_CHANGED", UnitObserver::PROPERTY_CHANGED );
assert( r >= 0 );
r = _engine->RegisterEnumValue( "Event", "DEATH", UnitObserver::DEATH );
assert( r >= 0 );
r = _engine->RegisterObjectType( "Ability", 0, asOBJ_REF );
assert( r >= 0 );
r = _engine->RegisterObjectType( "Unit", 0, asOBJ_REF );
assert( r >= 0 );
r = _engine->RegisterInterface( "Player" );
assert( r>= 0 );
r = _engine->RegisterObjectType( "EventData", sizeof(UnitObserver::EventData), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS  );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "Event type", asOFFSET(UnitObserver::EventData,type) );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "Unit@ source", asOFFSET(UnitObserver::EventData,source) );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "Unit@ target", asOFFSET(UnitObserver::EventData,target) );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "float damage", asOFFSET(UnitObserver::EventData,damage) );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "float healamount", asOFFSET(UnitObserver::EventData,healamount) );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "Damagetype damType", asOFFSET(UnitObserver::EventData,damType) );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "Ability@ ability", asOFFSET(UnitObserver::EventData,ability) );
assert( r>= 0 );
r = _engine->RegisterObjectProperty( "EventData", "Unitproperty property", asOFFSET(UnitObserver::EventData,property) );
assert( r>= 0 );

// ...

r = _engine->RegisterObjectBehaviour( "Unit", asBEHAVE_ADDREF, "void f()", asMETHOD(Unit, addRef), asCALL_THISCALL );
assert( r >= 0 );
r = _engine->RegisterObjectBehaviour( "Unit", asBEHAVE_RELEASE, "void f()", asMETHOD(Unit, release), asCALL_THISCALL );
assert( r >= 0 );

// ...

std::string s = std::string( type->GetName() ) + "@ " + std::string( type->GetName() ) + "(Ability @, Unit @)";
scriptabi->_factoryID = type->GetFactoryIdByDecl( s.c_str() );
if( scriptabi->_factoryID < 0 )
{
	std::cout << "Couldn't find factory for the type " << type->GetName() << " in file " << scriptPath << std::endl;
	delete scriptabi;
	return 0;
}

scriptabi->_onUpdateID = type->GetMethodIdByDecl( "void onUpdate()" );
scriptabi->_onAddID = type->GetMethodIdByDecl( "void onAdd()" );
scriptabi->_onRemoveID = type->GetMethodIdByDecl( "void onRemove()" );
scriptabi->_onEventID = type->GetMethodIdByDecl( "void onEvent(EventData@ data)" );


Create a new paste based on this one


Comments: