Commit graph

197 commits

Author SHA1 Message Date
Alistair Riddoch
e9cb84388a Stop using OpNo here too 2013-02-28 15:39:59 +00:00
Alistair Riddoch
e89ae282f6 Stop using OpNo typedef 2013-02-28 15:27:54 +00:00
Alistair Riddoch
5eceba40cf Remove unused handler mechanism 2013-02-14 10:01:20 +00:00
Alistair Riddoch
3d6f39cdee Modify Property install method to take name
This change also switches DecaysProperty to using delegates as a proof of
concept.
2013-02-13 00:45:36 +00:00
Alistair Riddoch
6a052e7e83 Fix return value warnings 2013-02-12 16:29:56 +00:00
Alistair Riddoch
9748d30fb4 Add calling delegates. 2013-02-10 02:37:16 +00:00
Alistair Riddoch
4a9c7078f7 Refactor to use LocatedEntity as base class
All IG code should use the interface of LocatedEntity when dealing
with any entity, rather than sometimes requiring Entity. Add virtual
functions to the interface where required, and modify all other interfaces
to stop them using Entity. This makes the code way cleaner, and much better
de-coupled.
2013-01-17 10:17:07 +00:00
Alistair Riddoch
4e66987bad Consolidate flags into one place 2013-01-14 09:59:54 +00:00
Alistair Riddoch
c8842f7c27 Avoid hitting the PropertyManager in setAttr
In the case where the property is already in defaults, it is cheaper to
use copy to avoid the lookup overhead of PropertyManager, and it is
already necessary to check the defaults to determine whether install()
is called.
2013-01-13 23:49:20 +00:00
Alistair Riddoch
89ddc699df De-duplicate code when setting attributes 2013-01-13 23:34:51 +00:00
Alistair Riddoch
66c850cbde Re-order to make this function cleaner 2013-01-13 13:14:05 +00:00
Alistair Riddoch
b69e185b83 Make formatting a little clearer 2013-01-13 00:07:35 +00:00
Alistair Riddoch
c56b8298f4 Use copy method for instantiating a default property 2013-01-12 23:56:25 +00:00
Alistair Riddoch
8b53f5e041 Add interface for property delegates 2013-01-05 00:47:41 +00:00
Alistair Riddoch
71cbcdcfc1 Modify externalOperation to include Link
The Link reference provided is the object allowing direct communication
back to the external source of the operation. This allows us to handle
things more cleanly in some cases.
2012-12-04 20:39:35 +00:00
Alistair Riddoch
338edbcbd5 Document Router interface
We provide implementations of the pure virtual methods so they can
be documented here without cluttering the header.
2012-12-02 22:14:04 +00:00
Alistair Riddoch
5d06a0195c Add handlers for Get and Info to the core interface 2012-06-29 14:54:45 -07:00
Alistair Riddoch
f73f9f2e9c Delete entity script when destroy is called
The C++ object representing this object may persist for a while as we
need it later for broadcasting ops from it as it was destroyed. Ops
in the queue from it will also hold a reference. The Python object should
be deleted right away though, as nothing else should hold a reference, and
things with weak references should find out immediately that it is gone.
2011-10-15 02:05:51 +01:00
Alistair Riddoch
102d59ff53 Stop using noScript object for scriptless objects 2011-10-13 14:20:46 +01:00
Alistair Riddoch
a3f7327d20 Add comments explaining how decRef()ing works 2011-10-03 17:15:11 +01:00
Alistair Riddoch
a51fe0fae0 Return the property affected when setAttr is called 2011-02-27 23:56:11 +00:00
Alistair Riddoch
8b83d02a3f Fix a crash when generating Atlas representation of Entity with no type. 2009-11-17 12:33:35 +00:00
Alistair Riddoch
ea1be625e5 Modify setProperty to return a pointer to the new property 2009-11-16 03:14:08 +00:00
Alistair Riddoch
d4a4ea33c2 Add brief doc comments for all operation dispatch handlers. 2009-08-25 00:53:28 +01:00
Alistair Riddoch
379a687776 Add Use operations to those passed around by default in-game. 2009-07-24 15:43:44 +01:00
Alistair Riddoch
01f0c2d7b3 Remove unnecessary dynamic cast. 2009-05-27 22:08:00 +01:00
Alistair Riddoch
8ded02b089 Add method to get the movement domain for an Entity 2009-05-12 23:27:40 +01:00
Al Riddoch
ab54d0fea2 2009-02-02 Al Riddoch <alriddoch@googlemail.com>
* common/Identified.cpp, common/Identified.h:
	  Flatten down the base classes into one called Router.

	* client/CharacterClient.cpp, client/CreatorClient.cpp,
	  rulesets/BaseMind.cpp, rulesets/Character.cpp,
	  rulesets/Creator.cpp, rulesets/Entity.cpp,
	  rulesets/LocatedEntity.cpp, rulesets/MemEntity.cpp,
	  rulesets/Plant.cpp, rulesets/Stackable.cpp,
	  rulesets/Thing.cpp, rulesets/World.cpp,
	  server/Account.cpp, server/Admin.cpp,
	  server/Connection.cpp, server/ExternalMind.cpp,
	  server/Lobby.cpp, server/Master.cpp,
	  server/Peer.cpp, server/Player.cpp,
	  server/ServerRouting.cpp, server/SlaveClientConnection.cpp,
	  server/TrustedConnection.cpp, tests/LocatedEntitytest.cpp,
	  tests/ThingupdatePropertiestest.cpp: Update all the operation
	  routing classes to use the modified base class correctly.
2009-02-02 02:28:45 +00:00
Al Riddoch
93df97a92b 2008-11-30 Al Riddoch <alriddoch@googlemail.com>
* rulesets/mason/world/statistics/Statistics.py: Make this a new
	  style class so properties work right, and implement it all
	  as properties.


	* rulesets/StatisticsProperty.cpp: Move the setup of the script
	  instance into apply rather than install, otherwise it doesn't get
	  called in the right place.

	* rulesets/ArithmeticScript.h: Add a set method to the interface.

	* rulesets/PythonArithmeticScript.cpp,
	  rulesets/PythonArithmeticScript.h: Implement getting using
	  PyObject_GenericGetAttr() as it works. Add a completely new set
	  function.

	* rulesets/Entity.cpp: When a new property is installed it needs
	  to be applied.
2008-11-30 03:53:11 +00:00
Al Riddoch
d1979ecb1f 2008-10-17 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.cpp: Fix a bug where new instance properties
	  weren't added to the Entity instance.
2008-10-17 21:00:01 +00:00
Al Riddoch
91cd73f9e1 2008-10-14 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.cpp, rulesets/Entity.h: Add a doc group for
	  Entity flags, and document them all in it.
2008-10-14 01:31:39 +00:00
Al Riddoch
a80f85e85a 2008-10-01 Al Riddoch <alriddoch@googlemail.com>
* rulesets/LocatedEntity.cpp, rulesets/LocatedEntity.h: Make all the
	  property access functions that should never be used to modify a
	  property const. Remove requirePropertyClass() as it pretty much
	  can't be const.

	* rulesets/Entity.cpp, rulesets/Entity.h: Make overriden
	  getProperty() const as it is in the base class. Add new
	  property access functions for code that needs to modify the
	  properties which ensures class properties never get modified
	  through the Entity interface.

	* rulesets/Character.cpp, rulesets/Plant.cpp, rulesets/Py_Thing.cpp,
	  rulesets/TerrainModProperty.cpp, server/CorePropertyManager.cpp:
	  Change all the code that accesses properties to use the right
	  functions.
2008-10-01 18:20:57 +00:00
Al Riddoch
f8ce29c07b 2008-09-27 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Character.cpp, rulesets/Entity.cpp, rulesets/Plant.cpp,
	  rulesets/Stackable.cpp: Fix up places that use the property
	  manager interface. Fix explicit reference to DynamicProperty.
2008-09-27 16:18:43 +00:00
Al Riddoch
351058f34c 2008-09-13 Al Riddoch <alriddoch@googlemail.com>
* data/basic.xml, data/characters.xml, data/mason.xml: Add tick
	  properties to a bunch of entity classes so they no longer need
	  a setup operation to get them going.

	* rulesets/mason/world/objects/Weather.py,
	  rulesets/mason/world/objects/elements/Fire.py,
	  rulesets/mason/world/objects/plants/seeds/Apple.py: Remove setup
	  handlers from a bunch of scripts as it is now handled by
	  properties.

	* data/buildings.xml: Add setup property to entity classes which
	  really need a setup op at startup.

	* client/BaseClient.cpp: Send a look when creating the avatar, so
	  that notifications get back without the need for a special case.

	* common/op_switch.h, rulesets/Creator.cpp, rulesets/Entity.cpp,
	  rulesets/Entity.h, server/WorldRouter.cpp:
	  Remove the setup operation sent to all entities on startup by
	  default. Get rid of some special cases that depended on it.

	* rulesets/InternalProperties.cpp, rulesets/InternalProperties.h:
	  Make the tick property schedule the operation on apply(), and
	  use the property value as the time to schedule it.
2008-09-13 18:02:08 +00:00
Al Riddoch
4dde75493a 2008-09-08 Al Riddoch <alriddoch@googlemail.com>
* common/inheritance.cpp: Set the instance pointer to null on
	  deletion, so it can be cleanly instanced again.
2008-09-08 11:49:22 +00:00
Al Riddoch
fab8a833ff 2008-09-08 Al Riddoch <alriddoch@googlemail.com>
* rulesets/ActivePropertyFactory_impl.h: Re-work the active property
	  factories so they just pass handler information to the property
	  classes rather than installing it themselves, so the property
	  can now handle installing the handlers each time they are installed
	  on an entity, making class default properties work.

	* client/ClientPropertyManager.cpp, client/ClientPropertyManager.h,
	  common/PropertyFactory.h, common/PropertyFactory_impl.h,
	  common/PropertyManager.h, rulesets/ActivePropertyFactory.h,
	  server/CorePropertyManager.cpp, server/CorePropertyManager.h:
	  Modify the property manager and property factory interfaces so they
	  do not take a pointer to the owner, as this is never required any
	  more.

	* rulesets/Character.cpp, rulesets/Entity.cpp: Modify code that uses
	  property managers to use the new interface.

	* rulesets/SolidProperty.cpp, rulesets/SolidProperty.h: Make use of
	  the bool flag to implement this, preventing it from being tied to
	  having a pointer to the owner at creation time.

	* rulesets/StatusProperty.cpp, rulesets/StatusProperty.h: Remove
	  the need for an owner pointer at construction time by using the
	  apply method.

	* rulesets/TerrainModProperty.cpp, rulesets/TerrainModProperty.h:
	  Use new MultiActivePropertyManager and install method to handle
	  installing handlers rather than relying on the factory to do it.

	* server/CorePropertyManager.cpp: Change many of the property
	  factories now that none get get an owner pointer.

	* server/EntityFactory.cpp: Set up default properties on all type
	  nodes when a new class is installed, and don't apply instance
	  properties based on class defaults, relying on class properties.

	* rulesets/Entity.cpp: Remove hard coded BBox property now that the
	  functionality is handled by a more special property.
2008-09-08 00:17:08 +00:00
Al Riddoch
81fc6cb231 2008-09-06 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.cpp: Call the property install and apply methods
	  where required when properties are set.
2008-09-06 11:44:06 +00:00
Al Riddoch
3103a5773d 2008-09-04 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.cpp: Include default properties from the
	  type node when making an Atlas representation of an Entity.
2008-09-04 18:03:32 +00:00
Al Riddoch
0527c4681f 2008-09-03 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.cpp: Mark properties as dirty when they are
2008-09-03 10:16:45 +00:00
Al Riddoch
952568e699 2008-08-22 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.h: Make flags protected, and add convenient methods
	  to set and clear flags. Add a flag for indicating that the entity
	  is queued for a storage update.

	* rulesets/Entity.cpp: Reset the clean flag correcly when the entity
	  is made dirty.

	* server/StorageManager.cpp: Hook up Entity::updated, and implement
	  queueing things for update and making sure they only get added once.
2008-08-22 15:44:55 +00:00
Al Riddoch
187ef8fcd9 2008-08-22 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.h: Move entity flags to the top of the header.
	  Replace destroyed and perceptive booleans with flag values,
	  and re-work check methods accordingly.

	* rulesets/Entity.cpp, rulesets/Creator.cpp, rulesets/Character.cpp:
	  Ensure that destroyed and perceptive flags are used correctly.
2008-08-22 03:00:38 +00:00
Al Riddoch
15faa7a6d7 2008-08-21 Al Riddoch <alriddoch@googlemail.com>
* rulesets/attributes.h: Remove old attribute flags used for
	  persistence from the build.

	* rulesets/Entity.h: Replace obsolete update flags with a more
	  general flags field, and define three needed to track the
	  cleanness of basic location data.

	* rulesets/Plant.cpp, rulesets/World.cpp: Remove now unused update
	  flags from property initialisation.

	* rulesets/Entity.cpp, rulesets/Thing.cpp, server/EntityFactory.cpp:
	  Replace code which updated update flags with simpler changes to
	  the new flags field.
2008-08-21 17:10:38 +00:00
Al Riddoch
b9e5f8d79f 2008-08-17 Al Riddoch <alriddoch@googlemail.com>
* rulesets/LocatedEntity.h: Add onUpdated() virtual method to be
	  called when the attributes of an Entity are changed.

	* rulesets/Entity.cpp, rulesets/Entity.h, rulesets/LocatedEntity.cpp,
	  rulesets/Thing.cpp, server/WorldRouter.cpp: Implement onUpdated()
	  to emit the updated signal on Entity, and change all code to
	  call onUpdated instead of emiting the signal.
2008-08-16 23:21:06 +00:00
Al Riddoch
74ba744157 2008-03-26 Al Riddoch <alriddoch@googlemail.com>
* common/Actuate.h, common/Makefile.am, common/custom.cpp,
	  common/op_switch.h, common/operations.cpp: Add Actuate to the
	  cyphesis core custom operations.

	* rulesets/Entity.cpp, rulesets/Entity.h, rulesets/Character.cpp:
	  Add handlers for Actuate to the operation routing interface.

	* data/devices.xml: Add example device.

	* data/Makefile.am: Add new devices file.

	* data/operations.xml: Remove temporary soft Actuate definition.
2008-03-26 01:34:15 +00:00
Al Riddoch
6d5fb4e356 2008-01-30 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.cpp: Add more details to comments.

	* rulesets/Character.cpp: Add a warning when an unknown up comes
	  from the mind.
2008-01-31 07:02:32 +00:00
Al Riddoch
ccf8bebcb0 2008-01-26 Al Riddoch <alriddoch@googlemail.com>
* common/BaseEntity.cpp, common/BaseEntity.h: Remove the code that
	  handle ID, and just inherit from Identified.

	* client/CharacterClient.cpp, client/CreatorClient.cpp,
	  common/OOGThing.cpp, rulesets/BaseMind.cpp, rulesets/Character.cpp,
	  rulesets/Creator.cpp, rulesets/Entity.cpp,
	  rulesets/LocatedEntity.cpp, rulesets/MemEntity.cpp,
	  rulesets/Plant.cpp, rulesets/Stackable.cpp, rulesets/Structure.cpp,
	  rulesets/Thing.cpp, rulesets/World.cpp, server/Account.cpp,
	  server/Admin.cpp, server/ExternalMind.cpp, server/Lobby.cpp,
	  server/Peer.cpp, server/Player.cpp, server/ServerRouting.cpp,
	  server/SlaveClientConnection.cpp: Add calls to the virtually
	  inherited Identified constructor as required.
2008-01-26 17:43:20 +00:00
Al Riddoch
ef88f10e33 2008-01-17 Al Riddoch <alriddoch@googlemail.com>
* common/BaseEntity.cpp, common/BaseEntity.h: Remove generic operation
	  routing code.

	* common/op_switch.h: Remove all OOG operations from the standard
	  op switch.

	* rulesets/Entity.cpp, rulesets/Entity.h: Replace generic operation
	  routing with a more specific IG routing implementation.

	* rulesets/BaseMind.cpp: Add a mind specific operation router
	  implementation.

	* server/Account.cpp, server/Account.h: Remove handling of Login,
	  which should never got to Account. Add base handler for Get,
	  as it needs to be overriden in Admin.
2008-01-17 18:54:04 +00:00
Al Riddoch
c362fd4e70 2008-01-06 Al Riddoch <alriddoch@googlemail.com>
* rulesets/LocatedEntity.cpp, rulesets/LocatedEntity.h: Add a virtual
	  function that is called when the location of an entity changes.

	* rulesets/Entity.cpp, rulesets/Entity.h: Implement the virtual
	  function called when location changes and use it to call the
	  containered signal. Remove the containered_oneshots list, and
	  make containered inherently one shot only.

	* rulesets/OutfitProperty.cpp: Remove the use of containered_oneshots
	  is this mechanism is obsolete and has been removed.
2008-01-07 00:06:18 +00:00
Al Riddoch
74091d2601 2008-01-05 Al Riddoch <alriddoch@googlemail.com>
* rulesets/Entity.cpp: Clean up the syntax and line length in
	  destroy() to make the code more readable.
2008-01-05 17:53:52 +00:00
Al Riddoch
24aa46bc4d 2008-01-05 Al Riddoch <alriddoch@googlemail.com>
* rulesets/LocatedEntity.cpp, rulesets/LocatedEntity.h:
	  Don't allocated storage for m_contains by default, only
	  on demand. Add a convenience method which checks, and
	  allocates the storage if required. Set up the ID property
	  on this base class rather then Entity.

	* rulesets/Py_Thing.cpp: Remove special handling of ID attribute
	  as it is now handled by the property.

	* rulesets/Character.cpp, rulesets/Entity.cpp, rulesets/MemMap.cpp,
	  rulesets/Motion.cpp, rulesets/Py_Mind.cpp, rulesets/Py_Thing.cpp,
	  rulesets/Thing.cpp, rulesets/World.cpp, server/WorldRouter.cpp:
	  Make sure all parts of the code where contains is used have
	  the right checks, as it could be null.
2008-01-05 14:05:05 +00:00