Graal Forums

Graal Forums (https://forums.graalonline.com/forums/index.php)
-   Code Gallery (https://forums.graalonline.com/forums/forumdisplay.php?f=179)
-   -   communicator-tree class (https://forums.graalonline.com/forums/showthread.php?t=73495)

Novo 04-15-2007 02:44 AM

communicator-tree class
 
PHP Code:

/*********************************
(+) addControl( obj ) returns BOOL
  - adds sub-controller
  - MUST be in class "communicator-tree"

(+) remControl( obj ) returns BOOL
  - removes sub-controller

(+) getControls( ctype ) returns controls[];
  - Returns array of all objects with this.ctype == ctype
  - Recursive ( applies to sub-controllers, and thenforth )

(-) removeEmpty() returns BOOL
  - Cleans up controls list of empty objects (object.type() != 2 )

( ) onEvent( event, param1, param2, param3, ... )
  - called through obj.trigger( "Event", param1, param2, param3 );
  - Is recursive
  - to override, do this:
    function onEvent()
      {
      // Stuff
      controller::onEvent( params[0], ..., params[n] );
      }

( ) onEvent[EventName]( params )
  - Event Called when onEvent( EventName, params ) is.
  - no default.

( ) onDestroy()
  - SHOULD BE USED INSTEAD OF obj.destroy();
  - called to destroy object

( ) onParentDestroy()
  - Event Called when Parent Destroyed
  - default:
    if other parent, stay alive, else
      call Destroy
  - to override, do this:
    function onParentDestroyed( obj )
      {
      this.parentControls.remove( obj );
      return;
      }
*********************************/

public function addControlobj )
  {
  if ( ! 
obj.isinclass"communicator-tree" ) )
    {
    echo( 
obj.id SPC "is not a communicator-tree.");
    return 
false;
    }

  if ( 
this.controls.indexobj ) == -)
    
this.controls.addobj );
  if ( 
obj.parentControls.indexthis ) == -)
    
obj.parentControls.add(this);

  return 
true;
  }

public function 
remControlobj )
  {
  
obj.parentControls.removethis );
  
this.controls.removeobj );
  return 
true;
  }

public function 
getControlsctype )
  { 
// Searched entire directory
  
removeEmpty(); // Clean Up
  
for ( cthis.controls )
    {
    
temp.arr c.getControlsctype );
    if ( 
temp.arr.type() == )
      
temp.array.addarraytemp.arr );
    }

  if ( 
this.ctype == ctype )
    
temp.array.addthis );

  return 
temp.array;
  }

function 
onEvent()
  { 
// Recursive
  
param params;
  
removeEmpty(); // Clean up!
  
this.trigger"Event"param[0], param[1] );
  for ( 
cthis.controls )
    
c.trigger"Event"param );
  }

function 
onDestroy()
  {
  
removeEmpty(); // Clean up!
  
for ( cthis.parentControls )
    
c.remControlthis );
  for ( 
cthis.controls )
    
c.trigger"ParentDestroyed"this );

  
this.destroy();
  }

function 
onParentDestroyedthis )
  {
  
removeEmpty();
  
this.parentControls.removethis );

  
// No parent? Destroy itself!
  
if ( this.parentControls.size() == )
    
this.trigger"Destroy""" );
  }

function 
removeEmpty()
  {
  for ( 
0this.controls.size(); ++ )
    {
    if ( 
this.controls].type() != )
      {
      
this.controls.delete);
      -- 
i;
      }
    }

  return 
true;
  } 

A tree-based communicator.
Trigger an event on the top of the tree, and it goes all the way down.

cbk1994 04-15-2007 04:42 AM

Quote:

Originally Posted by Novo (Post 1300051)
PHP Code:

/*********************************
(+) addControl( obj ) returns BOOL
  - adds sub-controller
  - MUST be in class "communicator-tree"

(+) remControl( obj ) returns BOOL
  - removes sub-controller

(+) getControls( ctype ) returns controls[];
  - Returns array of all objects with this.ctype == ctype
  - Recursive ( applies to sub-controllers, and thenforth )

(-) removeEmpty() returns BOOL
  - Cleans up controls list of empty objects (object.type() != 2 )

( ) onEvent( event, param1, param2, param3, ... )
  - called through obj.trigger( "Event", param1, param2, param3 );
  - Is recursive
  - to override, do this:
    function onEvent()
      {
      // Stuff
      controller::onEvent( params[0], ..., params[n] );
      }

( ) onEvent[EventName]( params )
  - Event Called when onEvent( EventName, params ) is.
  - no default.

( ) onDestroy()
  - SHOULD BE USED INSTEAD OF obj.destroy();
  - called to destroy object

( ) onParentDestroy()
  - Event Called when Parent Destroyed
  - default:
    if other parent, stay alive, else
      call Destroy
  - to override, do this:
    function onParentDestroyed( obj )
      {
      this.parentControls.remove( obj );
      return;
      }
*********************************/

public function addControlobj )
  {
  if ( ! 
obj.isinclass"communicator-tree" ) )
    {
    echo( 
obj.id SPC "is not a communicator-tree.");
    return 
false;
    }

  if ( 
this.controls.indexobj ) == -)
    
this.controls.addobj );
  if ( 
obj.parentControls.indexthis ) == -)
    
obj.parentControls.add(this);

  return 
true;
  }

public function 
remControlobj )
  {
  
obj.parentControls.removethis );
  
this.controls.removeobj );
  return 
true;
  }

public function 
getControlsctype )
  { 
// Searched entire directory
  
removeEmpty(); // Clean Up
  
for ( cthis.controls )
    {
    
temp.arr c.getControlsctype );
    if ( 
temp.arr.type() == )
      
temp.array.addarraytemp.arr );
    }

  if ( 
this.ctype == ctype )
    
temp.array.addthis );

  return 
temp.array;
  }

function 
onEvent()
  { 
// Recursive
  
param params;
  
removeEmpty(); // Clean up!
  
this.trigger"Event"param[0], param[1] );
  for ( 
cthis.controls )
    
c.trigger"Event"param );
  }

function 
onDestroy()
  {
  
removeEmpty(); // Clean up!
  
for ( cthis.parentControls )
    
c.remControlthis );
  for ( 
cthis.controls )
    
c.trigger"ParentDestroyed"this );

  
this.destroy();
  }

function 
onParentDestroyedthis )
  {
  
removeEmpty();
  
this.parentControls.removethis );

  
// No parent? Destroy itself!
  
if ( this.parentControls.size() == )
    
this.trigger"Destroy""" );
  }

function 
removeEmpty()
  {
  for ( 
0this.controls.size(); ++ )
    {
    if ( 
this.controls].type() != )
      {
      
this.controls.delete);
      -- 
i;
      }
    }

  return 
true;
  } 

A tree-based communicator.
Trigger an event on the top of the tree, and it goes all the way down.

Out of curiosity ... what does that do?

Novo 04-15-2007 06:30 AM

Quote:

Originally Posted by cbkbud (Post 1300084)
Out of curiosity ... what does that do?

It's a tree communicator. Basically...

There is a parent object, and child objects. You can attach an object to the parent object... When you trigger an event to the parent object, it sends it out to all children objects.

For instance...

If you have a house ( parent object ) and you have furniture in ( children objects ). Sadly, the house burns down, and everything in it. ( Event ). One way of doing this is house.trigger( "Event", "burnDown", 4 );
So every object in the house gets a object.onEventburnDown( 4 ); called.

theHAWKER 04-15-2007 06:58 AM

wow, what server would u use this on?

Novo 04-15-2007 07:01 AM

Quote:

Originally Posted by theHAWKER (Post 1300102)
wow, what server would u use this on?

I personally used it for earthquakes and weather... When there was rain, the plants would get a rain trigger, and would get the required water.

Chandler 04-15-2007 07:22 AM

I'll be using this =D
Thank you! :p

cbk1994 04-15-2007 02:08 PM

Quote:

Originally Posted by Novo (Post 1300098)
It's a tree communicator. Basically...

There is a parent object, and child objects. You can attach an object to the parent object... When you trigger an event to the parent object, it sends it out to all children objects.

For instance...

If you have a house ( parent object ) and you have furniture in ( children objects ). Sadly, the house burns down, and everything in it. ( Event ). One way of doing this is house.trigger( "Event", "burnDown", 4 );
So every object in the house gets a object.onEventburnDown( 4 ); called.

Okay, I didn't quite understand it.

Nice, fancy code! Good work, keep it up :D

Thanks for contributing, I'll sure use this.


All times are GMT +2. The time now is 11:45 PM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.