2006-01-19 Al Riddoch <alriddoch@zepler.org>
* aiclient/ClientAccount.cpp, aiclient/ClientAccount.h,
aiclient/ClientConnection.cpp, aiclient/ClientConnection.h,
aiclient/client.cpp, aiclient/client.h, client/BaseClient.cpp,
client/BaseClient.h, client/CharacterClient.cpp,
client/CharacterClient.h, client/ClientConnection.cpp,
client/ClientConnection.h, client/CreatorClient.cpp,
client/CreatorClient.h, client/ObserverClient.cpp,
client/ObserverClient.h, client/Py_CreatorClient.cpp,
client/Py_CreatorClient.h, client/client.cpp,
client/define_world.cpp, client/define_world.h, common/Add.h,
common/Affect.h, common/AtlasFileLoader.cpp,
common/AtlasFileLoader.h, common/Attack.h, common/BaseEntity.cpp,
common/BaseEntity.h, common/BaseWorld.cpp, common/BaseWorld.h,
common/Burn.h, common/Chop.h, common/Connect.h, common/CustomOp.cpp,
common/CustomOp.h, common/CustomOp_impl.h, common/Cut.h,
common/Database.cpp, common/Database.h, common/Delve.h, common/Dig.h,
common/Eat.h, common/FormattedXMLWriter.cpp,
common/FormattedXMLWriter.h, common/Generic.h, common/Load.h,
common/Monitor.h, common/Mow.h, common/Nourish.h,
common/OOGThing.cpp, common/OOGThing.h, common/Property.cpp,
common/Property.h, common/Property_impl.h, common/Save.h,
common/Setup.h, common/Tick.h, common/Unseen.h, common/Update.h,
common/Use.h, common/Wield.h, common/accountbase.cpp,
common/accountbase.h, common/const.cpp, common/const.h,
common/custom.cpp, common/debug.h, common/globals.cpp,
common/globals.h, common/id.cpp, common/id.h, common/inheritance.cpp,
common/inheritance.h, common/inheritance_impl.h, common/log.cpp,
common/log.h, common/newid.cpp, common/nls.h, common/op_switch.h,
common/operations.cpp, common/operations.h, common/random.h,
common/refno.h, common/serialno.cpp, common/serialno.h,
common/system.cpp, common/system.h, common/terrain_utils.cpp,
common/terrain_utils.h, common/type_utils.h, common/types.h,
common/utility.cpp, common/utility.h, modules/DateTime.cpp,
modules/DateTime.h, modules/Location.cpp, modules/Location.h,
modules/WorldTime.cpp, modules/WorldTime.h, physics/BBox.cpp,
physics/BBox.h, physics/Collision.cpp, physics/Collision.h,
physics/Quaternion.cpp, physics/Quaternion.h, physics/Vector3D.cpp,
physics/Vector3D.h, physics/VectorPol.h, rulesets/Area.cpp,
rulesets/Area.h, rulesets/AreaProperty.cpp, rulesets/AreaProperty.h,
rulesets/ArithmeticScript.cpp, rulesets/ArithmeticScript.h,
rulesets/BaseMind.cpp, rulesets/BaseMind.h,
rulesets/CalendarProperty.cpp, rulesets/CalendarProperty.h,
rulesets/Character.cpp, rulesets/Character.h, rulesets/Combat.cpp,
rulesets/Combat.h, rulesets/Container.cpp, rulesets/Container.h,
rulesets/Creator.cpp, rulesets/Creator.h, rulesets/Entity.cpp,
rulesets/Entity.h, rulesets/EntityProperties.cpp,
rulesets/Entity_getLocation.h, rulesets/Fell.cpp, rulesets/Fell.h,
rulesets/Food.cpp, rulesets/Food.h, rulesets/Line.cpp,
rulesets/Line.h, rulesets/LineProperty.cpp, rulesets/LineProperty.h,
rulesets/MemEntity.cpp, rulesets/MemEntity.h, rulesets/MemMap.cpp,
rulesets/MemMap.h, rulesets/MemMap_methods.h,
rulesets/MindFactory.cpp, rulesets/MindFactory.h, rulesets/Missile.h,
rulesets/Motion.cpp, rulesets/Motion.h, rulesets/Movement.cpp,
rulesets/Movement.h, rulesets/Pedestrian.cpp, rulesets/Pedestrian.h,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Py_BBox.cpp,
rulesets/Py_BBox.h, rulesets/Py_EntityWrapper.h,
rulesets/Py_Location.cpp, rulesets/Py_Location.h,
rulesets/Py_Map.cpp, rulesets/Py_Map.h, rulesets/Py_Mind.cpp,
rulesets/Py_Mind.h, rulesets/Py_Object.cpp, rulesets/Py_Object.h,
rulesets/Py_Operation.cpp, rulesets/Py_Operation.h,
rulesets/Py_Oplist.cpp, rulesets/Py_Oplist.h, rulesets/Py_Optime.cpp,
rulesets/Py_Optime.h, rulesets/Py_Point3D.cpp, rulesets/Py_Point3D.h,
rulesets/Py_Property.cpp, rulesets/Py_Property.h,
rulesets/Py_Quaternion.cpp, rulesets/Py_Quaternion.h,
rulesets/Py_RootEntity.cpp, rulesets/Py_RootEntity.h,
rulesets/Py_Statistics.cpp, rulesets/Py_Statistics.h,
rulesets/Py_Task.cpp, rulesets/Py_Task.h, rulesets/Py_Thing.cpp,
rulesets/Py_Thing.h, rulesets/Py_Vector3D.cpp,
rulesets/Py_Vector3D.h, rulesets/Py_World.cpp, rulesets/Py_World.h,
rulesets/Py_WorldTime.cpp, rulesets/Py_WorldTime.h,
rulesets/PythonArithmeticScript.cpp,
rulesets/PythonArithmeticScript.h, rulesets/PythonMindScript.cpp,
rulesets/PythonMindScript.h, rulesets/PythonScript.cpp,
rulesets/PythonScript.h, rulesets/PythonThingScript.cpp,
rulesets/PythonThingScript.h, rulesets/PythonWrapper.cpp,
rulesets/PythonWrapper.h, rulesets/Python_API.cpp,
rulesets/Python_API.h, rulesets/Python_Script_Utils.h,
rulesets/Script.cpp, rulesets/Script.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/Statistics.cpp, rulesets/Statistics.h,
rulesets/StatisticsProperty.cpp, rulesets/StatisticsProperty.h,
rulesets/Structure.cpp, rulesets/Structure.h, rulesets/Task.cpp,
rulesets/Task.h, rulesets/TaskScript.cpp, rulesets/TaskScript.h,
rulesets/TerrainProperty.cpp, rulesets/TerrainProperty.h,
rulesets/Thing.cpp, rulesets/Thing.h, rulesets/ThingFactory.cpp,
rulesets/ThingFactory.h, rulesets/World.cpp, rulesets/World.h,
rulesets/attributes.h, server/Account.cpp, server/Account.h,
server/Admin.cpp, server/Admin.h, server/ArithmeticFactory.cpp,
server/ArithmeticFactory.h, server/CommClient.cpp,
server/CommClient.h, server/CommIdleSocket.cpp,
server/CommIdleSocket.h, server/CommListener.cpp,
server/CommListener.h, server/CommLocalClient.cpp,
server/CommLocalClient.h, server/CommMDNSPublisher.cpp,
server/CommMDNSPublisher.h, server/CommMaster.cpp,
server/CommMaster.h, server/CommMetaClient.cpp,
server/CommMetaClient.h, server/CommPSQLSocket.cpp,
server/CommPSQLSocket.h, server/CommPeer.cpp,
server/CommPeer.h, server/CommPeerListener.cpp,
server/CommPeerListener.h, server/CommRemoteClient.cpp,
server/CommRemoteClient.h, server/CommServer.cpp,
server/CommServer.h, server/CommSlaveClient.cpp,
server/CommSlaveClient.h, server/CommSlaveListener.cpp,
server/CommSlaveListener.h, server/CommSocket.cpp,
server/CommSocket.h, server/CommUnixListener.cpp,
server/CommUnixListener.h, server/Connection.cpp,
server/Connection.h, server/Connection_methods.h,
server/EntityFactory.cpp, server/EntityFactory.h,
server/ExternalMind.cpp, server/ExternalMind.h,
server/Idle.cpp, server/Idle.h, server/Lobby.cpp, server/Lobby.h,
server/Master.cpp, server/Master.h, server/Peer.cpp, server/Peer.h,
server/Persistance.cpp, server/Persistance.h,
server/PersistantThingFactory.cpp, server/PersistantThingFactory.h,
server/PersistantThingFactory_impl.h, server/Persistor.cpp,
server/Persistor.h, server/Persistor_impl.h,
server/Player.cpp, server/Player.h, server/Restoration.cpp,
server/Restoration.h, server/Restorer.cpp, server/Restorer.h,
server/Restorer_impl.h, server/ScriptFactory.cpp,
server/ScriptFactory.h, server/ServerRouting.cpp,
server/ServerRouting.h, server/ServerRouting_methods.h,
server/SlaveClientConnection.cpp, server/SlaveClientConnection.h,
server/TaskFactory.cpp, server/TaskFactory.h,
server/TrustedConnection.cpp, server/TrustedConnection.h,
server/WorldRouter.cpp, server/WorldRouter.h,
server/server.cpp, server/server.h, server/slave.cpp,
tests/Areatest.cpp, tests/BaseEntitytest.cpp,
tests/Charactertest.cpp, tests/Containertest.cpp,
tests/Creatortest.cpp, tests/EntityExerciser.h,
tests/EntityFactorytest.cpp, tests/Entitytest.cpp,
tests/Foodtest.cpp, tests/IGEntityExerciser.h,
tests/Linetest.cpp, tests/Locationtest.cpp, tests/OOGThingtest.cpp,
tests/Planttest.cpp, tests/Propertytest.cpp, tests/Stackabletest.cpp,
tests/Structuretest.cpp, tests/Tasktest.cpp, tests/TestWorld.h,
tests/Thingtest.cpp, tests/WorldTimetest.cpp, tests/Worldtest.cpp,
tests/allOperations.h, tests/collisiontest.cpp, tests/consttest.cpp,
tests/distancetest.cpp, tests/emergencetest.cpp,
tests/inheritancetest.cpp, tests/logtest.cpp, tests/randomtest.cpp,
tests/systemtest.cpp, tests/transformtest.cpp,
tests/type_utilstest.cpp, tests/utilitytest.cpp,
tools/AdminClient.cpp, tools/AdminClient.h, tools/cyaddrules.cpp,
tools/cycmd.cpp, tools/cyconfig.cpp, tools/cyconvertrules.cpp,
tools/cyctrl.cpp, tools/cydbload.cpp, tools/cydumprules.cpp,
tools/cyisoload.cpp, tools/cyloadrules.cpp, tools/cypasswd.cpp,
tools/cywatchdog.cpp: Replace the copyright and license statements
with new versions that include disclaimer of warranty, and
permit distribution under later versions of the GPL.
2006-01-19 02:17:06 +00:00
|
|
|
// Cyphesis Online RPG Server and AI Engine
|
2005-09-08 Al Riddoch <alriddoch@zepler.org>
* rulesets/Entity.cpp: Update copyright date.
* rulesets/BaseMind.cpp, rulesets/Entity_getLocation.h,
rulesets/Entity.h, rulesets/MemMap.cpp, rulesets/MemMap.h,
rulesets/Py_Map.cpp, server/EntityFactory.cpp,
server/EntityFactory.h, server/WorldRouter.cpp,
client/BaseClient.cpp, client/CreatorClient.cpp:
Change various methods to pass entity information
around as RootEntity rather than MapType.
2005-09-08 15:03:31 +00:00
|
|
|
// Copyright (C) 2000-2005 Alistair Riddoch
|
2006-01-19 Al Riddoch <alriddoch@zepler.org>
* aiclient/ClientAccount.cpp, aiclient/ClientAccount.h,
aiclient/ClientConnection.cpp, aiclient/ClientConnection.h,
aiclient/client.cpp, aiclient/client.h, client/BaseClient.cpp,
client/BaseClient.h, client/CharacterClient.cpp,
client/CharacterClient.h, client/ClientConnection.cpp,
client/ClientConnection.h, client/CreatorClient.cpp,
client/CreatorClient.h, client/ObserverClient.cpp,
client/ObserverClient.h, client/Py_CreatorClient.cpp,
client/Py_CreatorClient.h, client/client.cpp,
client/define_world.cpp, client/define_world.h, common/Add.h,
common/Affect.h, common/AtlasFileLoader.cpp,
common/AtlasFileLoader.h, common/Attack.h, common/BaseEntity.cpp,
common/BaseEntity.h, common/BaseWorld.cpp, common/BaseWorld.h,
common/Burn.h, common/Chop.h, common/Connect.h, common/CustomOp.cpp,
common/CustomOp.h, common/CustomOp_impl.h, common/Cut.h,
common/Database.cpp, common/Database.h, common/Delve.h, common/Dig.h,
common/Eat.h, common/FormattedXMLWriter.cpp,
common/FormattedXMLWriter.h, common/Generic.h, common/Load.h,
common/Monitor.h, common/Mow.h, common/Nourish.h,
common/OOGThing.cpp, common/OOGThing.h, common/Property.cpp,
common/Property.h, common/Property_impl.h, common/Save.h,
common/Setup.h, common/Tick.h, common/Unseen.h, common/Update.h,
common/Use.h, common/Wield.h, common/accountbase.cpp,
common/accountbase.h, common/const.cpp, common/const.h,
common/custom.cpp, common/debug.h, common/globals.cpp,
common/globals.h, common/id.cpp, common/id.h, common/inheritance.cpp,
common/inheritance.h, common/inheritance_impl.h, common/log.cpp,
common/log.h, common/newid.cpp, common/nls.h, common/op_switch.h,
common/operations.cpp, common/operations.h, common/random.h,
common/refno.h, common/serialno.cpp, common/serialno.h,
common/system.cpp, common/system.h, common/terrain_utils.cpp,
common/terrain_utils.h, common/type_utils.h, common/types.h,
common/utility.cpp, common/utility.h, modules/DateTime.cpp,
modules/DateTime.h, modules/Location.cpp, modules/Location.h,
modules/WorldTime.cpp, modules/WorldTime.h, physics/BBox.cpp,
physics/BBox.h, physics/Collision.cpp, physics/Collision.h,
physics/Quaternion.cpp, physics/Quaternion.h, physics/Vector3D.cpp,
physics/Vector3D.h, physics/VectorPol.h, rulesets/Area.cpp,
rulesets/Area.h, rulesets/AreaProperty.cpp, rulesets/AreaProperty.h,
rulesets/ArithmeticScript.cpp, rulesets/ArithmeticScript.h,
rulesets/BaseMind.cpp, rulesets/BaseMind.h,
rulesets/CalendarProperty.cpp, rulesets/CalendarProperty.h,
rulesets/Character.cpp, rulesets/Character.h, rulesets/Combat.cpp,
rulesets/Combat.h, rulesets/Container.cpp, rulesets/Container.h,
rulesets/Creator.cpp, rulesets/Creator.h, rulesets/Entity.cpp,
rulesets/Entity.h, rulesets/EntityProperties.cpp,
rulesets/Entity_getLocation.h, rulesets/Fell.cpp, rulesets/Fell.h,
rulesets/Food.cpp, rulesets/Food.h, rulesets/Line.cpp,
rulesets/Line.h, rulesets/LineProperty.cpp, rulesets/LineProperty.h,
rulesets/MemEntity.cpp, rulesets/MemEntity.h, rulesets/MemMap.cpp,
rulesets/MemMap.h, rulesets/MemMap_methods.h,
rulesets/MindFactory.cpp, rulesets/MindFactory.h, rulesets/Missile.h,
rulesets/Motion.cpp, rulesets/Motion.h, rulesets/Movement.cpp,
rulesets/Movement.h, rulesets/Pedestrian.cpp, rulesets/Pedestrian.h,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Py_BBox.cpp,
rulesets/Py_BBox.h, rulesets/Py_EntityWrapper.h,
rulesets/Py_Location.cpp, rulesets/Py_Location.h,
rulesets/Py_Map.cpp, rulesets/Py_Map.h, rulesets/Py_Mind.cpp,
rulesets/Py_Mind.h, rulesets/Py_Object.cpp, rulesets/Py_Object.h,
rulesets/Py_Operation.cpp, rulesets/Py_Operation.h,
rulesets/Py_Oplist.cpp, rulesets/Py_Oplist.h, rulesets/Py_Optime.cpp,
rulesets/Py_Optime.h, rulesets/Py_Point3D.cpp, rulesets/Py_Point3D.h,
rulesets/Py_Property.cpp, rulesets/Py_Property.h,
rulesets/Py_Quaternion.cpp, rulesets/Py_Quaternion.h,
rulesets/Py_RootEntity.cpp, rulesets/Py_RootEntity.h,
rulesets/Py_Statistics.cpp, rulesets/Py_Statistics.h,
rulesets/Py_Task.cpp, rulesets/Py_Task.h, rulesets/Py_Thing.cpp,
rulesets/Py_Thing.h, rulesets/Py_Vector3D.cpp,
rulesets/Py_Vector3D.h, rulesets/Py_World.cpp, rulesets/Py_World.h,
rulesets/Py_WorldTime.cpp, rulesets/Py_WorldTime.h,
rulesets/PythonArithmeticScript.cpp,
rulesets/PythonArithmeticScript.h, rulesets/PythonMindScript.cpp,
rulesets/PythonMindScript.h, rulesets/PythonScript.cpp,
rulesets/PythonScript.h, rulesets/PythonThingScript.cpp,
rulesets/PythonThingScript.h, rulesets/PythonWrapper.cpp,
rulesets/PythonWrapper.h, rulesets/Python_API.cpp,
rulesets/Python_API.h, rulesets/Python_Script_Utils.h,
rulesets/Script.cpp, rulesets/Script.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/Statistics.cpp, rulesets/Statistics.h,
rulesets/StatisticsProperty.cpp, rulesets/StatisticsProperty.h,
rulesets/Structure.cpp, rulesets/Structure.h, rulesets/Task.cpp,
rulesets/Task.h, rulesets/TaskScript.cpp, rulesets/TaskScript.h,
rulesets/TerrainProperty.cpp, rulesets/TerrainProperty.h,
rulesets/Thing.cpp, rulesets/Thing.h, rulesets/ThingFactory.cpp,
rulesets/ThingFactory.h, rulesets/World.cpp, rulesets/World.h,
rulesets/attributes.h, server/Account.cpp, server/Account.h,
server/Admin.cpp, server/Admin.h, server/ArithmeticFactory.cpp,
server/ArithmeticFactory.h, server/CommClient.cpp,
server/CommClient.h, server/CommIdleSocket.cpp,
server/CommIdleSocket.h, server/CommListener.cpp,
server/CommListener.h, server/CommLocalClient.cpp,
server/CommLocalClient.h, server/CommMDNSPublisher.cpp,
server/CommMDNSPublisher.h, server/CommMaster.cpp,
server/CommMaster.h, server/CommMetaClient.cpp,
server/CommMetaClient.h, server/CommPSQLSocket.cpp,
server/CommPSQLSocket.h, server/CommPeer.cpp,
server/CommPeer.h, server/CommPeerListener.cpp,
server/CommPeerListener.h, server/CommRemoteClient.cpp,
server/CommRemoteClient.h, server/CommServer.cpp,
server/CommServer.h, server/CommSlaveClient.cpp,
server/CommSlaveClient.h, server/CommSlaveListener.cpp,
server/CommSlaveListener.h, server/CommSocket.cpp,
server/CommSocket.h, server/CommUnixListener.cpp,
server/CommUnixListener.h, server/Connection.cpp,
server/Connection.h, server/Connection_methods.h,
server/EntityFactory.cpp, server/EntityFactory.h,
server/ExternalMind.cpp, server/ExternalMind.h,
server/Idle.cpp, server/Idle.h, server/Lobby.cpp, server/Lobby.h,
server/Master.cpp, server/Master.h, server/Peer.cpp, server/Peer.h,
server/Persistance.cpp, server/Persistance.h,
server/PersistantThingFactory.cpp, server/PersistantThingFactory.h,
server/PersistantThingFactory_impl.h, server/Persistor.cpp,
server/Persistor.h, server/Persistor_impl.h,
server/Player.cpp, server/Player.h, server/Restoration.cpp,
server/Restoration.h, server/Restorer.cpp, server/Restorer.h,
server/Restorer_impl.h, server/ScriptFactory.cpp,
server/ScriptFactory.h, server/ServerRouting.cpp,
server/ServerRouting.h, server/ServerRouting_methods.h,
server/SlaveClientConnection.cpp, server/SlaveClientConnection.h,
server/TaskFactory.cpp, server/TaskFactory.h,
server/TrustedConnection.cpp, server/TrustedConnection.h,
server/WorldRouter.cpp, server/WorldRouter.h,
server/server.cpp, server/server.h, server/slave.cpp,
tests/Areatest.cpp, tests/BaseEntitytest.cpp,
tests/Charactertest.cpp, tests/Containertest.cpp,
tests/Creatortest.cpp, tests/EntityExerciser.h,
tests/EntityFactorytest.cpp, tests/Entitytest.cpp,
tests/Foodtest.cpp, tests/IGEntityExerciser.h,
tests/Linetest.cpp, tests/Locationtest.cpp, tests/OOGThingtest.cpp,
tests/Planttest.cpp, tests/Propertytest.cpp, tests/Stackabletest.cpp,
tests/Structuretest.cpp, tests/Tasktest.cpp, tests/TestWorld.h,
tests/Thingtest.cpp, tests/WorldTimetest.cpp, tests/Worldtest.cpp,
tests/allOperations.h, tests/collisiontest.cpp, tests/consttest.cpp,
tests/distancetest.cpp, tests/emergencetest.cpp,
tests/inheritancetest.cpp, tests/logtest.cpp, tests/randomtest.cpp,
tests/systemtest.cpp, tests/transformtest.cpp,
tests/type_utilstest.cpp, tests/utilitytest.cpp,
tools/AdminClient.cpp, tools/AdminClient.h, tools/cyaddrules.cpp,
tools/cycmd.cpp, tools/cyconfig.cpp, tools/cyconvertrules.cpp,
tools/cyctrl.cpp, tools/cydbload.cpp, tools/cydumprules.cpp,
tools/cyisoload.cpp, tools/cyloadrules.cpp, tools/cypasswd.cpp,
tools/cywatchdog.cpp: Replace the copyright and license statements
with new versions that include disclaimer of warranty, and
permit distribution under later versions of the GPL.
2006-01-19 02:17:06 +00:00
|
|
|
//
|
|
|
|
|
// This program is free software; you can redistribute it and/or modify
|
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
// (at your option) any later version.
|
|
|
|
|
//
|
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
// GNU General Public License for more details.
|
|
|
|
|
//
|
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
|
// along with this program; if not, write to the Free Software Foundation,
|
|
|
|
|
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
2001-04-10 19:05:14 +00:00
|
|
|
|
2006-10-26 00:48:00 +00:00
|
|
|
|
2002-07-14 21:04:50 +00:00
|
|
|
#include "Entity.h"
|
2005-05-04 22:42:02 +00:00
|
|
|
|
2002-07-14 21:04:50 +00:00
|
|
|
#include "Script.h"
|
2009-05-12 23:27:40 +01:00
|
|
|
#include "Domain.h"
|
2014-09-13 10:34:30 +02:00
|
|
|
#include "DomainProperty.h"
|
2016-01-17 17:02:50 +01:00
|
|
|
#include "TransformsProperty.h"
|
2014-09-18 11:06:05 +02:00
|
|
|
#include "Motion.h"
|
2002-07-14 21:04:50 +00:00
|
|
|
|
2013-01-17 10:17:07 +00:00
|
|
|
#include "common/BaseWorld.h"
|
2003-03-07 00:22:12 +00:00
|
|
|
#include "common/log.h"
|
|
|
|
|
#include "common/debug.h"
|
2008-01-17 18:54:04 +00:00
|
|
|
#include "common/op_switch.h"
|
2007-12-27 Al Riddoch <alriddoch@zepler.org>
* common/TypeNode.h, common/TypeNode.cpp: Move TypeNode into
its own files.
* common/Makefile.am, common/inheritance.cpp, common/inheritance.h:
Add the new files to the build and remove the old implementation.
* client/Py_CreatorClient.cpp, rulesets/Character.cpp,
rulesets/Entity.cpp, rulesets/MemMap.cpp,
rulesets/MindFactory.cpp, rulesets/Py_Mind.cpp,
rulesets/Py_Thing.cpp, rulesets/Stackable.cpp,
server/WorldRouter.cpp: Fix up the includes for all code that
uses TypeNode.
2007-12-27 03:31:47 +00:00
|
|
|
#include "common/TypeNode.h"
|
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
|
|
|
#include "common/Property.h"
|
2006-07-03 01:29:07 +00:00
|
|
|
#include "common/PropertyManager.h"
|
2002-07-14 21:04:50 +00:00
|
|
|
|
2008-03-26 01:34:15 +00:00
|
|
|
#include "common/Actuate.h"
|
2008-01-17 18:54:04 +00:00
|
|
|
#include "common/Attack.h"
|
|
|
|
|
#include "common/Eat.h"
|
|
|
|
|
#include "common/Nourish.h"
|
|
|
|
|
#include "common/Setup.h"
|
|
|
|
|
#include "common/Tick.h"
|
|
|
|
|
#include "common/Update.h"
|
2013-08-16 00:03:09 +02:00
|
|
|
#include "common/custom.h"
|
2008-01-17 18:54:04 +00:00
|
|
|
|
2015-04-08 18:36:20 +02:00
|
|
|
#include "common/Monitors.h"
|
|
|
|
|
#include "common/Variable.h"
|
|
|
|
|
#include "common/compose.hpp"
|
|
|
|
|
|
2005-05-04 22:42:02 +00:00
|
|
|
#include <wfmath/atlasconv.h>
|
|
|
|
|
|
2005-08-27 14:52:12 +00:00
|
|
|
#include <Atlas/Objects/Operation.h>
|
2005-09-13 23:29:42 +00:00
|
|
|
#include <Atlas/Objects/Anonymous.h>
|
2001-04-10 19:05:14 +00:00
|
|
|
|
2006-06-26 16:49:25 +00:00
|
|
|
#include <sigc++/functors/mem_fun.h>
|
2005-11-21 02:24:17 +00:00
|
|
|
|
2003-06-15 01:08:33 +00:00
|
|
|
#include <cassert>
|
|
|
|
|
|
2004-12-03 Al Riddoch <alriddoch@zepler.org>
* client/BaseClient.cpp, client/BaseClient.h,
client/CharacterClient.cpp, client/CharacterClient.h,
client/ClientConnection.cpp, client/ClientConnection.h,
client/CreatorClient.cpp, client/CreatorClient.h,
client/Py_CreatorClient.cpp, common/BaseEntity.cpp,
common/BaseEntity.h, common/BaseWorld.h, common/custom.cpp,
common/inheritance.cpp, common/inheritance.h,
common/inheritance_impl.h, common/op_switch.h, common/type_utils.h,
common/types.h, common/utility.cpp, common/utility.h,
modules/Location.cpp, rulesets/BaseMind.cpp, rulesets/BaseMind.h,
rulesets/Character.cpp, rulesets/Character.h, rulesets/Creator.cpp,
rulesets/Creator.h, rulesets/Entity.cpp, rulesets/Entity.h,
rulesets/EntityProperties.cpp, rulesets/Entity_getLocation.h,
rulesets/Food.cpp, rulesets/Food.h, rulesets/MemMap.cpp,
rulesets/MemMap.h, rulesets/Missile.h, rulesets/Pedestrian.cpp,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Py_Mind.cpp,
rulesets/Py_Object.cpp, rulesets/Py_Operation.cpp,
rulesets/Py_Operation.h, rulesets/Py_Thing.cpp,
rulesets/PythonMindScript.h, rulesets/PythonScript.h,
rulesets/PythonThingScript.h, rulesets/Python_API.cpp,
rulesets/Script.cpp, rulesets/Script.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/Thing.cpp, rulesets/Thing.h,
rulesets/World.cpp, rulesets/World.h,
server/Account.cpp, server/Account.h server/Admin.cpp, server/Admin.h,
server/CommClient.cpp, server/Connection.cpp, server/Connection.h,
server/EntityFactory.cpp, server/EntityFactory.h, server/Lobby.cpp,
server/Lobby.h, server/Persistance.cpp, server/Persistance.h,
server/Persistor.cpp, server/Player.cpp, server/Player.h,
server/ServerRouting.cpp, server/ServerRouting.h,
server/TrustedConnection.cpp, server/TrustedConnection.h,
server/WorldRouter.cpp, server/WorldRouter.h, tests/Areatest.cpp,
tests/Charactertest.cpp, tests/Creatortest.cpp,
tests/EntityExerciser.h, tests/Entitytest.cpp, tests/Foodtest.cpp,
tests/IGEntityExerciser.h, tests/Linetest.cpp, tests/Planttest.cpp,
tests/Stackabletest.cpp, tests/Structuretest.cpp, tests/Thingtest.cpp,
tests/Worldtest.cpp, tests/allOperations.h, tests/inheritancetest.cpp,
tests/utilitytest.cpp, tools/cycmd.cpp:
Modify the entity interface so that all Operation methods
take references to RootOperation, as its cleaner, and requires
less nasty casts. Clean up operations in headers generally.
2004-12-03 14:49:13 +00:00
|
|
|
using Atlas::Message::Element;
|
|
|
|
|
using Atlas::Message::MapType;
|
|
|
|
|
using Atlas::Message::ListType;
|
2005-08-27 14:52:12 +00:00
|
|
|
using Atlas::Objects::Root;
|
2004-12-03 Al Riddoch <alriddoch@zepler.org>
* client/BaseClient.cpp, client/BaseClient.h,
client/CharacterClient.cpp, client/CharacterClient.h,
client/ClientConnection.cpp, client/ClientConnection.h,
client/CreatorClient.cpp, client/CreatorClient.h,
client/Py_CreatorClient.cpp, common/BaseEntity.cpp,
common/BaseEntity.h, common/BaseWorld.h, common/custom.cpp,
common/inheritance.cpp, common/inheritance.h,
common/inheritance_impl.h, common/op_switch.h, common/type_utils.h,
common/types.h, common/utility.cpp, common/utility.h,
modules/Location.cpp, rulesets/BaseMind.cpp, rulesets/BaseMind.h,
rulesets/Character.cpp, rulesets/Character.h, rulesets/Creator.cpp,
rulesets/Creator.h, rulesets/Entity.cpp, rulesets/Entity.h,
rulesets/EntityProperties.cpp, rulesets/Entity_getLocation.h,
rulesets/Food.cpp, rulesets/Food.h, rulesets/MemMap.cpp,
rulesets/MemMap.h, rulesets/Missile.h, rulesets/Pedestrian.cpp,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Py_Mind.cpp,
rulesets/Py_Object.cpp, rulesets/Py_Operation.cpp,
rulesets/Py_Operation.h, rulesets/Py_Thing.cpp,
rulesets/PythonMindScript.h, rulesets/PythonScript.h,
rulesets/PythonThingScript.h, rulesets/Python_API.cpp,
rulesets/Script.cpp, rulesets/Script.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/Thing.cpp, rulesets/Thing.h,
rulesets/World.cpp, rulesets/World.h,
server/Account.cpp, server/Account.h server/Admin.cpp, server/Admin.h,
server/CommClient.cpp, server/Connection.cpp, server/Connection.h,
server/EntityFactory.cpp, server/EntityFactory.h, server/Lobby.cpp,
server/Lobby.h, server/Persistance.cpp, server/Persistance.h,
server/Persistor.cpp, server/Player.cpp, server/Player.h,
server/ServerRouting.cpp, server/ServerRouting.h,
server/TrustedConnection.cpp, server/TrustedConnection.h,
server/WorldRouter.cpp, server/WorldRouter.h, tests/Areatest.cpp,
tests/Charactertest.cpp, tests/Creatortest.cpp,
tests/EntityExerciser.h, tests/Entitytest.cpp, tests/Foodtest.cpp,
tests/IGEntityExerciser.h, tests/Linetest.cpp, tests/Planttest.cpp,
tests/Stackabletest.cpp, tests/Structuretest.cpp, tests/Thingtest.cpp,
tests/Worldtest.cpp, tests/allOperations.h, tests/inheritancetest.cpp,
tests/utilitytest.cpp, tools/cycmd.cpp:
Modify the entity interface so that all Operation methods
take references to RootOperation, as its cleaner, and requires
less nasty casts. Clean up operations in headers generally.
2004-12-03 14:49:13 +00:00
|
|
|
using Atlas::Objects::Operation::Sight;
|
2005-08-27 14:52:12 +00:00
|
|
|
using Atlas::Objects::Entity::RootEntity;
|
2005-09-13 23:29:42 +00:00
|
|
|
using Atlas::Objects::Entity::Anonymous;
|
2005-08-27 14:52:12 +00:00
|
|
|
|
|
|
|
|
using Atlas::Objects::smart_dynamic_cast;
|
2004-12-03 Al Riddoch <alriddoch@zepler.org>
* client/BaseClient.cpp, client/BaseClient.h,
client/CharacterClient.cpp, client/CharacterClient.h,
client/ClientConnection.cpp, client/ClientConnection.h,
client/CreatorClient.cpp, client/CreatorClient.h,
client/Py_CreatorClient.cpp, common/BaseEntity.cpp,
common/BaseEntity.h, common/BaseWorld.h, common/custom.cpp,
common/inheritance.cpp, common/inheritance.h,
common/inheritance_impl.h, common/op_switch.h, common/type_utils.h,
common/types.h, common/utility.cpp, common/utility.h,
modules/Location.cpp, rulesets/BaseMind.cpp, rulesets/BaseMind.h,
rulesets/Character.cpp, rulesets/Character.h, rulesets/Creator.cpp,
rulesets/Creator.h, rulesets/Entity.cpp, rulesets/Entity.h,
rulesets/EntityProperties.cpp, rulesets/Entity_getLocation.h,
rulesets/Food.cpp, rulesets/Food.h, rulesets/MemMap.cpp,
rulesets/MemMap.h, rulesets/Missile.h, rulesets/Pedestrian.cpp,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Py_Mind.cpp,
rulesets/Py_Object.cpp, rulesets/Py_Operation.cpp,
rulesets/Py_Operation.h, rulesets/Py_Thing.cpp,
rulesets/PythonMindScript.h, rulesets/PythonScript.h,
rulesets/PythonThingScript.h, rulesets/Python_API.cpp,
rulesets/Script.cpp, rulesets/Script.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/Thing.cpp, rulesets/Thing.h,
rulesets/World.cpp, rulesets/World.h,
server/Account.cpp, server/Account.h server/Admin.cpp, server/Admin.h,
server/CommClient.cpp, server/Connection.cpp, server/Connection.h,
server/EntityFactory.cpp, server/EntityFactory.h, server/Lobby.cpp,
server/Lobby.h, server/Persistance.cpp, server/Persistance.h,
server/Persistor.cpp, server/Player.cpp, server/Player.h,
server/ServerRouting.cpp, server/ServerRouting.h,
server/TrustedConnection.cpp, server/TrustedConnection.h,
server/WorldRouter.cpp, server/WorldRouter.h, tests/Areatest.cpp,
tests/Charactertest.cpp, tests/Creatortest.cpp,
tests/EntityExerciser.h, tests/Entitytest.cpp, tests/Foodtest.cpp,
tests/IGEntityExerciser.h, tests/Linetest.cpp, tests/Planttest.cpp,
tests/Stackabletest.cpp, tests/Structuretest.cpp, tests/Thingtest.cpp,
tests/Worldtest.cpp, tests/allOperations.h, tests/inheritancetest.cpp,
tests/utilitytest.cpp, tools/cycmd.cpp:
Modify the entity interface so that all Operation methods
take references to RootOperation, as its cleaner, and requires
less nasty casts. Clean up operations in headers generally.
2004-12-03 14:49:13 +00:00
|
|
|
|
2001-04-10 19:05:14 +00:00
|
|
|
static const bool debug_flag = false;
|
|
|
|
|
|
2015-04-08 18:36:20 +02:00
|
|
|
std::unordered_map<const TypeNode*, std::unique_ptr<int>> Entity::s_monitorsMap;
|
|
|
|
|
|
2008-10-14 01:31:39 +00:00
|
|
|
/// \brief Flags used to control entities
|
|
|
|
|
///
|
|
|
|
|
/// These flags are used to indicate various aspects of entities.
|
|
|
|
|
/// \defgroup EntityFlags In World Entity Flags
|
|
|
|
|
|
|
|
|
|
/// \brief Classes that model in world entities
|
|
|
|
|
///
|
|
|
|
|
/// These classes are used to model all in world entities or objects.
|
|
|
|
|
/// \defgroup EntityClasses In World Entity Classes
|
|
|
|
|
|
2006-12-10 17:53:52 +00:00
|
|
|
/// \brief Entity constructor
|
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
|
|
|
Entity::Entity(const std::string & id, long intId) :
|
2014-09-18 11:06:05 +02:00
|
|
|
LocatedEntity(id, intId), m_motion(nullptr)
|
2001-04-10 19:05:14 +00:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2001-05-22 17:59:43 +00:00
|
|
|
Entity::~Entity()
|
|
|
|
|
{
|
2015-04-08 18:36:20 +02:00
|
|
|
if (m_type) {
|
|
|
|
|
auto I = s_monitorsMap.find(m_type);
|
|
|
|
|
if (I != s_monitorsMap.end()) {
|
|
|
|
|
int* ptr = I->second.get();
|
|
|
|
|
*ptr = *ptr - 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-09-18 11:06:05 +02:00
|
|
|
delete m_motion;
|
2001-05-22 17:59:43 +00:00
|
|
|
}
|
2001-04-10 19:05:14 +00:00
|
|
|
|
2015-04-08 18:36:20 +02:00
|
|
|
void Entity::setType(const TypeNode * t) {
|
|
|
|
|
LocatedEntity::setType(t);
|
|
|
|
|
|
|
|
|
|
if (t) {
|
|
|
|
|
auto I = s_monitorsMap.find(t);
|
|
|
|
|
if (I == s_monitorsMap.end()) {
|
|
|
|
|
int* valuePtr = new int;
|
|
|
|
|
*valuePtr = 1;
|
|
|
|
|
s_monitorsMap.insert(std::make_pair(t, std::unique_ptr<int>(valuePtr)));
|
|
|
|
|
|
|
|
|
|
Monitors::instance()->watch(String::compose("entity_count{type=\"%1\"}", t->name()), new Variable<int>(*valuePtr));
|
|
|
|
|
} else {
|
|
|
|
|
int* ptr = I->second.get();
|
|
|
|
|
*ptr = *ptr + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2011-02-27 23:56:11 +00:00
|
|
|
PropertyBase * Entity::setAttr(const std::string & name, const Element & attr)
|
2001-04-10 19:05:14 +00:00
|
|
|
{
|
2008-09-06 11:44:06 +00:00
|
|
|
PropertyBase * prop;
|
|
|
|
|
// If it is an existing property, just update the value.
|
2005-12-04 03:58:37 +00:00
|
|
|
PropertyDict::const_iterator I = m_properties.find(name);
|
2004-11-02 Al Riddoch <alriddoch@zepler.org>
* rulesets/Entity.cpp, rulesets/Entity.h: Make get(), set(), and
addToMessage() non-virtual, and convert them to using new property
mechanism. Add the necessary properties in the constructor.
* rulesets/Area.cpp, rulesets/Area.h, rulesets/Character.cpp,
rulesets/Character.h, rulesets/Line.cpp, rulesets/Line.h,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/World.cpp, rulesets/World.h:
Remove virtual get() set() and addToMessage() methods. These
are now entirely in Entity.
* rulesets/World.cpp, rulesets/World.h: Remove some functions
for handling terrain data now handled by properties.
Clean up Set code to get rid of nasty unnecessary exception
try / catch block.
2004-11-02 20:44:24 +00:00
|
|
|
if (I != m_properties.end()) {
|
2008-09-06 11:44:06 +00:00
|
|
|
prop = I->second;
|
2013-01-13 13:14:05 +00:00
|
|
|
// Mark it as unclean
|
|
|
|
|
prop->resetFlags(per_clean);
|
2013-01-13 23:34:51 +00:00
|
|
|
} else {
|
2013-01-13 23:49:20 +00:00
|
|
|
PropertyDict::const_iterator I;
|
|
|
|
|
if (m_type != 0 &&
|
|
|
|
|
(I = m_type->defaults().find(name)) != m_type->defaults().end()) {
|
|
|
|
|
prop = I->second->copy();
|
|
|
|
|
} else {
|
2015-04-28 20:54:30 +02:00
|
|
|
// This is an entirely new property, not just a modification of
|
2013-01-13 23:49:20 +00:00
|
|
|
// one in defaults, so we need to install it to this Entity.
|
|
|
|
|
prop = PropertyManager::instance()->addProperty(name,
|
|
|
|
|
attr.getType());
|
2013-02-13 00:45:36 +00:00
|
|
|
prop->install(this, name);
|
2013-01-13 23:34:51 +00:00
|
|
|
}
|
2013-01-13 23:49:20 +00:00
|
|
|
assert(prop != 0);
|
2013-01-13 23:34:51 +00:00
|
|
|
m_properties[name] = prop;
|
2008-09-06 11:44:06 +00:00
|
|
|
}
|
2013-01-13 13:14:05 +00:00
|
|
|
|
|
|
|
|
prop->set(attr);
|
2008-09-06 11:44:06 +00:00
|
|
|
// Allow the value to take effect.
|
|
|
|
|
prop->apply(this);
|
2013-01-13 13:14:05 +00:00
|
|
|
// Mark the Entity as unclean
|
2008-08-22 15:44:55 +00:00
|
|
|
resetFlags(entity_clean);
|
2011-02-27 23:56:11 +00:00
|
|
|
return prop;
|
2004-11-02 Al Riddoch <alriddoch@zepler.org>
* rulesets/Entity.cpp, rulesets/Entity.h: Make get(), set(), and
addToMessage() non-virtual, and convert them to using new property
mechanism. Add the necessary properties in the constructor.
* rulesets/Area.cpp, rulesets/Area.h, rulesets/Character.cpp,
rulesets/Character.h, rulesets/Line.cpp, rulesets/Line.h,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/World.cpp, rulesets/World.h:
Remove virtual get() set() and addToMessage() methods. These
are now entirely in Entity.
* rulesets/World.cpp, rulesets/World.h: Remove some functions
for handling terrain data now handled by properties.
Clean up Set code to get rid of nasty unnecessary exception
try / catch block.
2004-11-02 20:44:24 +00:00
|
|
|
}
|
|
|
|
|
|
2008-10-01 18:20:57 +00:00
|
|
|
const PropertyBase * Entity::getProperty(const std::string & name) const
|
2008-09-08 11:49:22 +00:00
|
|
|
{
|
|
|
|
|
PropertyDict::const_iterator I = m_properties.find(name);
|
|
|
|
|
if (I != m_properties.end()) {
|
|
|
|
|
return I->second;
|
|
|
|
|
}
|
|
|
|
|
if (m_type != 0) {
|
|
|
|
|
I = m_type->defaults().find(name);
|
|
|
|
|
if (I != m_type->defaults().end()) {
|
|
|
|
|
return I->second;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2008-10-01 18:20:57 +00:00
|
|
|
PropertyBase * Entity::modProperty(const std::string & name)
|
|
|
|
|
{
|
|
|
|
|
PropertyDict::const_iterator I = m_properties.find(name);
|
|
|
|
|
if (I != m_properties.end()) {
|
|
|
|
|
return I->second;
|
|
|
|
|
}
|
|
|
|
|
if (m_type != 0) {
|
|
|
|
|
I = m_type->defaults().find(name);
|
|
|
|
|
if (I != m_type->defaults().end()) {
|
|
|
|
|
// We have a default for this property. Create a new instance
|
|
|
|
|
// property with the same value.
|
2013-01-12 23:56:25 +00:00
|
|
|
PropertyBase * new_prop = I->second->copy();
|
2015-04-08 23:22:23 +02:00
|
|
|
I->second->remove(this, name);
|
2013-01-12 23:56:25 +00:00
|
|
|
new_prop->flags() &= ~flag_class;
|
2008-10-17 21:00:01 +00:00
|
|
|
m_properties[name] = new_prop;
|
2008-11-30 03:53:11 +00:00
|
|
|
new_prop->apply(this);
|
2015-04-08 23:22:23 +02:00
|
|
|
new_prop->install(this, name);
|
2008-10-01 18:20:57 +00:00
|
|
|
return new_prop;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2007-01-17 23:00:56 +00:00
|
|
|
/// \brief Set the property object for a given attribute
|
|
|
|
|
///
|
|
|
|
|
/// @param name name of the attribute for which the property is given
|
|
|
|
|
/// @param prop the property object to be used
|
2009-11-16 03:14:08 +00:00
|
|
|
/// @returns a pointer to the property
|
|
|
|
|
PropertyBase * Entity::setProperty(const std::string & name,
|
|
|
|
|
PropertyBase * prop)
|
2007-01-17 23:00:56 +00:00
|
|
|
{
|
2009-11-16 03:14:08 +00:00
|
|
|
return m_properties[name] = prop;
|
2007-01-17 23:00:56 +00:00
|
|
|
}
|
|
|
|
|
|
2004-12-06 Al Riddoch <alriddoch@zepler.org>
* client/BaseClient.cpp, client/BaseClient.h, client/CreatorClient.cpp,
client/CreatorClient.h, common/BaseEntity.cpp, common/BaseEntity.h,
common/BaseWorld.h, common/OOGThing.cpp, common/OOGThing.h,
common/op_switch.h, common/refno.h, common/types.h,
rulesets/BaseMind.cpp, rulesets/BaseMind.h, rulesets/Character.cpp,
rulesets/Character.h, rulesets/Creator.cpp, rulesets/Creator.h,
rulesets/Entity.cpp, rulesets/Entity.h, rulesets/Food.cpp,
rulesets/Food.h, rulesets/MemMap.cpp, rulesets/Plant.cpp,
rulesets/Plant.h, rulesets/Py_Map.cpp, rulesets/PythonMindScript.cpp,
rulesets/PythonThingScript.cpp, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/Thing.cpp, rulesets/Thing.h,
rulesets/World.cpp, rulesets/World.h, server/Account.cpp,
server/Account.h, server/Admin.cpp, server/Admin.h,
server/CommClient.cpp, server/Connection.cpp, server/Connection.h,
server/Connection_methods.h, server/ExternalMind.cpp,
server/ExternalMind.h, server/Lobby.cpp, server/Lobby.h,
server/Player.cpp, server/Player.h, server/WorldRouter.cpp,
server/WorldRouter.h, tests/Creatortest.cpp, tests/Worldtest.cpp:
Add a new Operation typedef to clean up headers, and get round
limitation in doxygen.
2004-12-06 16:35:44 +00:00
|
|
|
/// \brief Copy attributes into an Atlas element
|
|
|
|
|
///
|
|
|
|
|
/// @param omap Atlas map element this entity should be copied into
|
2004-11-02 Al Riddoch <alriddoch@zepler.org>
* rulesets/Entity.cpp, rulesets/Entity.h: Make get(), set(), and
addToMessage() non-virtual, and convert them to using new property
mechanism. Add the necessary properties in the constructor.
* rulesets/Area.cpp, rulesets/Area.h, rulesets/Character.cpp,
rulesets/Character.h, rulesets/Line.cpp, rulesets/Line.h,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/World.cpp, rulesets/World.h:
Remove virtual get() set() and addToMessage() methods. These
are now entirely in Entity.
* rulesets/World.cpp, rulesets/World.h: Remove some functions
for handling terrain data now handled by properties.
Clean up Set code to get rid of nasty unnecessary exception
try / catch block.
2004-11-02 20:44:24 +00:00
|
|
|
void Entity::addToMessage(MapType & omap) const
|
|
|
|
|
{
|
|
|
|
|
// We need to have a list of keys to pull from attributes.
|
2008-09-04 18:03:32 +00:00
|
|
|
PropertyDict::const_iterator J;
|
|
|
|
|
PropertyDict::const_iterator Jend;
|
|
|
|
|
|
|
|
|
|
J = m_properties.begin();
|
|
|
|
|
Jend = m_properties.end();
|
2004-11-02 Al Riddoch <alriddoch@zepler.org>
* rulesets/Entity.cpp, rulesets/Entity.h: Make get(), set(), and
addToMessage() non-virtual, and convert them to using new property
mechanism. Add the necessary properties in the constructor.
* rulesets/Area.cpp, rulesets/Area.h, rulesets/Character.cpp,
rulesets/Character.h, rulesets/Line.cpp, rulesets/Line.h,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/World.cpp, rulesets/World.h:
Remove virtual get() set() and addToMessage() methods. These
are now entirely in Entity.
* rulesets/World.cpp, rulesets/World.h: Remove some functions
for handling terrain data now handled by properties.
Clean up Set code to get rid of nasty unnecessary exception
try / catch block.
2004-11-02 20:44:24 +00:00
|
|
|
for (; J != Jend; ++J) {
|
|
|
|
|
J->second->add(J->first, omap);
|
|
|
|
|
}
|
2008-09-04 18:03:32 +00:00
|
|
|
|
2004-11-02 Al Riddoch <alriddoch@zepler.org>
* rulesets/Entity.cpp, rulesets/Entity.h: Make get(), set(), and
addToMessage() non-virtual, and convert them to using new property
mechanism. Add the necessary properties in the constructor.
* rulesets/Area.cpp, rulesets/Area.h, rulesets/Character.cpp,
rulesets/Character.h, rulesets/Line.cpp, rulesets/Line.h,
rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/World.cpp, rulesets/World.h:
Remove virtual get() set() and addToMessage() methods. These
are now entirely in Entity.
* rulesets/World.cpp, rulesets/World.h: Remove some functions
for handling terrain data now handled by properties.
Clean up Set code to get rid of nasty unnecessary exception
try / catch block.
2004-11-02 20:44:24 +00:00
|
|
|
omap["stamp"] = (double)m_seq;
|
|
|
|
|
omap["parents"] = ListType(1, m_type);
|
|
|
|
|
m_location.addToMessage(omap);
|
|
|
|
|
omap["objtype"] = "obj";
|
2001-04-10 19:05:14 +00:00
|
|
|
}
|
|
|
|
|
|
2005-08-27 14:52:12 +00:00
|
|
|
/// \brief Copy attributes into an Atlas entity
|
|
|
|
|
///
|
|
|
|
|
/// @param ent Atlas entity this entity should be copied into
|
|
|
|
|
void Entity::addToEntity(const RootEntity & ent) const
|
|
|
|
|
{
|
|
|
|
|
// We need to have a list of keys to pull from attributes.
|
2008-09-04 18:03:32 +00:00
|
|
|
PropertyDict::const_iterator J;
|
|
|
|
|
PropertyDict::const_iterator Jend;
|
|
|
|
|
|
|
|
|
|
J = m_properties.begin();
|
|
|
|
|
Jend = m_properties.end();
|
2005-08-27 14:52:12 +00:00
|
|
|
for (; J != Jend; ++J) {
|
2005-09-22 23:06:45 +00:00
|
|
|
J->second->add(J->first, ent);
|
2005-08-27 14:52:12 +00:00
|
|
|
}
|
2008-09-04 18:03:32 +00:00
|
|
|
|
2006-05-06 Al Riddoch <alriddoch@zepler.org>
* common/Database.cpp, common/newid.cpp, server/server.cpp:
Modify new ID checks so that code still runs when database is
unavailable, and events requiring new IDs fail cleanly.
* server/Connection.cpp: Report a failure to create a player
account if no ID available.
* rulesets/BaseMind.cpp: When processing appearance ops, handle
stamp more efficiently, report an error if ID is missing
from argument.
* server/IdlePSQLConnector.cpp, server/IdlePSQLConnector.h:
Implement re-connecting to the Database if connection is lost.
* rulesets/Character.cpp, rulesets/Entity.cpp, rulesets/Thing.cpp:
Ensure STAMP is present on appearance op args.
* server/CommListener.cpp, server/CommListener.h,
server/CommPeerListener.cpp, server/CommPeerListener.h,
server/CommSlaveListener.cpp, server/CommSlaveListener.h,
server/CommUnixListener.cpp, server/CommUnixListener.h:
Add a return value to method for creating new client socket
objects, and use it to return failure if no ID is available
from the database for a new object.
* rulesets/Py_Point3D.cpp, rulesets/Py_Vector3D.cpp,
rulesets/Python_API.cpp: Add "new" method for class wrappers, and
call the in place constructor from new rather than init. Re-write
internal function for creating new instances so it uses the "new"
method.
* rulesets/Py_Statistics.cpp: Remove some obsolete code inadvertedly
copied from another file. Comment out some unused code to get rid
of a warning.
* server/CommPSQLSocket.cpp: Clear the database connection from
destructor.
* tests/python_class.cpp: A new test for experimenting with new
Python wrappers.
2006-05-06 21:36:57 +00:00
|
|
|
ent->setStamp(m_seq);
|
2009-11-17 12:33:35 +00:00
|
|
|
if (m_type != 0) {
|
|
|
|
|
ent->setParents(std::list<std::string>(1, m_type->name()));
|
|
|
|
|
}
|
2005-08-27 14:52:12 +00:00
|
|
|
m_location.addToEntity(ent);
|
|
|
|
|
ent->setObjtype("obj");
|
|
|
|
|
}
|
|
|
|
|
|
2013-01-05 00:47:41 +00:00
|
|
|
/// \brief Install a delegate property for an operation
|
|
|
|
|
///
|
|
|
|
|
/// @param class_no The class number of the operation to be handled
|
|
|
|
|
/// @param delegate The name of the property to delegate it to.
|
|
|
|
|
void Entity::installDelegate(int class_no, const std::string & delegate)
|
|
|
|
|
{
|
|
|
|
|
m_delegates.insert(std::make_pair(class_no, delegate));
|
|
|
|
|
}
|
|
|
|
|
|
2014-08-25 22:42:00 +02:00
|
|
|
void Entity::removeDelegate(int class_no, const std::string & delegate)
|
|
|
|
|
{
|
|
|
|
|
auto I = m_delegates.find(class_no);
|
|
|
|
|
if (I != m_delegates.end() && I->second == delegate) {
|
|
|
|
|
m_delegates.erase(I);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-12-06 Al Riddoch <alriddoch@zepler.org>
* client/BaseClient.cpp, client/BaseClient.h, client/CreatorClient.cpp,
client/CreatorClient.h, common/BaseEntity.cpp, common/BaseEntity.h,
common/BaseWorld.h, common/OOGThing.cpp, common/OOGThing.h,
common/op_switch.h, common/refno.h, common/types.h,
rulesets/BaseMind.cpp, rulesets/BaseMind.h, rulesets/Character.cpp,
rulesets/Character.h, rulesets/Creator.cpp, rulesets/Creator.h,
rulesets/Entity.cpp, rulesets/Entity.h, rulesets/Food.cpp,
rulesets/Food.h, rulesets/MemMap.cpp, rulesets/Plant.cpp,
rulesets/Plant.h, rulesets/Py_Map.cpp, rulesets/PythonMindScript.cpp,
rulesets/PythonThingScript.cpp, rulesets/Stackable.cpp,
rulesets/Stackable.h, rulesets/Thing.cpp, rulesets/Thing.h,
rulesets/World.cpp, rulesets/World.h, server/Account.cpp,
server/Account.h, server/Admin.cpp, server/Admin.h,
server/CommClient.cpp, server/Connection.cpp, server/Connection.h,
server/Connection_methods.h, server/ExternalMind.cpp,
server/ExternalMind.h, server/Lobby.cpp, server/Lobby.h,
server/Player.cpp, server/Player.h, server/WorldRouter.cpp,
server/WorldRouter.h, tests/Creatortest.cpp, tests/Worldtest.cpp:
Add a new Operation typedef to clean up headers, and get round
limitation in doxygen.
2004-12-06 16:35:44 +00:00
|
|
|
/// \brief Destroy this entity
|
|
|
|
|
///
|
|
|
|
|
/// Do the jobs required to remove this entity from the world. Handles
|
|
|
|
|
/// removing from the containership tree.
|
2001-04-16 16:26:44 +00:00
|
|
|
void Entity::destroy()
|
|
|
|
|
{
|
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
|
|
|
assert(m_location.m_loc != 0);
|
|
|
|
|
assert(m_location.m_loc->m_contains != 0);
|
|
|
|
|
if (m_contains != 0) {
|
|
|
|
|
LocatedEntitySet::const_iterator Iend = m_contains->end();
|
|
|
|
|
for (LocatedEntitySet::const_iterator I = m_contains->begin(); I != Iend; ++I) {
|
2008-01-05 17:53:52 +00:00
|
|
|
Location & child = (*I)->m_location;
|
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
|
|
|
// FIXME take account of orientation
|
|
|
|
|
// FIXME velocity and orientation need to be adjusted
|
2016-01-18 15:37:05 +01:00
|
|
|
TransformsProperty* transformsProp = (*I)->requirePropertyClassFixed<TransformsProperty>();
|
2016-01-17 17:02:50 +01:00
|
|
|
|
2013-09-13 21:07:45 +02:00
|
|
|
if (m_location.orientation().isValid() && m_location.pos().isValid()) {
|
2016-01-17 17:02:50 +01:00
|
|
|
|
|
|
|
|
transformsProp->getTranslate() = WFMath::Vector<3>(child.m_pos.toParentCoords(m_location.pos(),
|
|
|
|
|
m_location.orientation()));
|
|
|
|
|
if (transformsProp->getRotate().isValid()) {
|
|
|
|
|
transformsProp->getRotate() *= m_location.orientation();
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-13 21:07:45 +02:00
|
|
|
if (child.m_velocity.isValid()) {
|
|
|
|
|
child.m_velocity.rotate(m_location.orientation());
|
|
|
|
|
}
|
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
|
|
|
} else {
|
|
|
|
|
static const Quaternion identity(1, 0, 0, 0);
|
2016-01-17 17:02:50 +01:00
|
|
|
transformsProp->getTranslate() = WFMath::Vector<3>(child.m_pos.toParentCoords(m_location.pos(),
|
|
|
|
|
identity));
|
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
|
|
|
}
|
2016-01-17 17:02:50 +01:00
|
|
|
transformsProp->apply(*I);
|
2014-09-18 22:41:23 +02:00
|
|
|
// Remove the reference to ourself.
|
|
|
|
|
decRef();
|
|
|
|
|
m_location.m_loc->addChild(**I);
|
|
|
|
|
m_location.m_loc->incRef();
|
2004-10-03 03:32:16 +00:00
|
|
|
}
|
2001-04-16 16:26:44 +00:00
|
|
|
}
|
2005-01-16 22:42:29 +00:00
|
|
|
|
2011-10-15 02:05:51 +01:00
|
|
|
delete m_script;
|
|
|
|
|
m_script = 0;
|
|
|
|
|
|
2005-01-16 22:42:29 +00:00
|
|
|
// We don't call decRef() on our parent, because we may not get deleted
|
|
|
|
|
// yet, and we need to keep a reference to our parent in case there
|
|
|
|
|
// are broadcast ops left that we have not yet sent.
|
2011-10-03 17:15:11 +01:00
|
|
|
// It will be decRef()ed automatically from our (LocatedEntity)
|
|
|
|
|
// destructor
|
2014-09-18 22:41:23 +02:00
|
|
|
m_location.m_loc->removeChild(*this);
|
2008-08-22 03:00:38 +00:00
|
|
|
m_flags |= entity_destroyed;
|
2002-07-27 Al Riddoch <alriddoch@zepler.org>
* tools/cyloadrules.cpp, server/server.cpp,
aiclient/ClientConnection.cpp, client/ClientConnection.cpp,
common/inheritance.h: Use const iterators and references
whenever possible.
* client/CommClient.cpp, client/CreatorClient.cpp,
client/ObserverClient.cpp, client/Py_CreatorClient.cpp,
common/BaseEntity.cpp, common/BaseEntity.h,
common/types.h, rulesets/Area.cpp, rulesets/BaseMind.cpp,
rulesets/Character.cpp, rulesets/Entity.cpp,
rulesets/Food.cpp, rulesets/Line.cpp,
rulesets/MemMap.cpp, rulesets/Pedestrian.cpp,
rulesets/Plant.cpp, rulesets/Py_Mind.cpp,
rulesets/Py_Object.cpp, rulesets/Py_Thing.cpp,
rulesets/Python_API.cpp, rulesets/Stackable.cpp,
rulesets/Thing.cpp, rulesets/World.cpp,
server/Account.cpp, server/Admin.cpp, server/CommClient.cpp,
server/CommServer.cpp, server/Connection.cpp,
server/EntityFactory.cpp, server/Lobby.cpp,
server/Persistance.cpp, server/Player.cpp,
server/ServerRouting.cpp, server/WorldRouter.cpp:
Switch to using Fragment as name for Atlas::Message::Object,
to avoid name clashes on Object.
* common/BaseEntity.h: Make BaseEntity inherit from SigC::Object,
so signals and callbacks can be used, and add destroyed
signal.
* common/accountbase.h, physics/BBox.h, physics/Quaternion.h,
physics/Vector3D.h, rulesets/MemMap_methods.h,
rulesets/Movement.cpp, rulesets/Plant.h,
rulesets/Py_Operation.cpp, rulesets/PythonMindScript.cpp,
rulesets/PythonThingScript.cpp, rulesets/Script.cpp,
common/inheritance.cpp: Cleaned up Atlas::Message::Object
use, and excessive use of "using ...".
* rulesets/Movement.h, rulesets/Pedestrian.h:
Use forward declarations rather than including Move.h
* server/Account.cpp, server/Account.h, server/Connection.cpp,
server/Connection.h: Use destroyed signal to ensure references
to in game entities are removed when those entities are
destroyed. Ensure Connection is only destroyed once.
2002-07-28 13:34:58 +00:00
|
|
|
destroyed.emit();
|
2001-04-16 16:26:44 +00:00
|
|
|
}
|
|
|
|
|
|
2009-05-12 23:27:40 +01:00
|
|
|
Domain * Entity::getMovementDomain()
|
|
|
|
|
{
|
2014-09-13 10:34:30 +02:00
|
|
|
if (m_flags & entity_domain) {
|
2015-04-28 20:56:15 +02:00
|
|
|
return getPropertyClass<DomainProperty>("domain")->getDomain(this);
|
2014-09-13 10:34:30 +02:00
|
|
|
} else {
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
2009-05-12 23:27:40 +01:00
|
|
|
}
|
|
|
|
|
|
2016-06-22 16:50:36 +02:00
|
|
|
const Domain * Entity::getMovementDomain() const
|
|
|
|
|
{
|
|
|
|
|
if (m_flags & entity_domain) {
|
|
|
|
|
return getPropertyClass<DomainProperty>("domain")->getDomain(this);
|
|
|
|
|
} else {
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-01-17 10:17:07 +00:00
|
|
|
void Entity::sendWorld(const Operation & op)
|
|
|
|
|
{
|
|
|
|
|
BaseWorld::instance().message(op, *this);
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a actuate operation
|
2008-03-26 01:34:15 +00:00
|
|
|
void Entity::ActuateOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a appearance operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::AppearanceOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a attack operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::AttackOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a combine operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::CombineOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a create operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::CreateOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a delete operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::DeleteOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
2013-11-15 22:55:17 +01:00
|
|
|
//We call on the baseworld to delete ourselves here. This allows
|
|
|
|
|
//other components, such as properties, to preempt the deletion if
|
|
|
|
|
//they so want.
|
|
|
|
|
BaseWorld::instance().delEntity(this);
|
2008-01-17 18:54:04 +00:00
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a disappearance operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::DisappearanceOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a divide operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::DivideOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a eat operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::EatOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2012-06-29 14:54:45 -07:00
|
|
|
/// \brief Handle a get operation
|
|
|
|
|
void Entity::GetOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a imaginary operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::ImaginaryOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2012-06-29 14:54:45 -07:00
|
|
|
/// \brief Handle a info operation
|
|
|
|
|
void Entity::InfoOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a look operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::LookOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a move operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::MoveOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a nourish operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::NourishOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a set operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::SetOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a sight operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::SightOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a sound operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::SoundOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a talk operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::TalkOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a tick operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::TickOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a touch operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::TouchOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a update operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::UpdateOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a use operation
|
2009-07-24 15:43:44 +01:00
|
|
|
void Entity::UseOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-25 00:53:28 +01:00
|
|
|
/// \brief Handle a wield operation
|
2008-01-17 18:54:04 +00:00
|
|
|
void Entity::WieldOperation(const Operation &, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2013-08-16 00:03:09 +02:00
|
|
|
/// \brief Handle a relay operation
|
2013-09-03 14:01:36 +02:00
|
|
|
void Entity::RelayOperation(const Operation & op, OpVector & res)
|
2013-08-16 00:03:09 +02:00
|
|
|
{
|
2013-09-03 14:01:36 +02:00
|
|
|
if (op->getArgs().empty()) {
|
|
|
|
|
log(ERROR, "Entity::RelayOperation no args.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Operation relayedOp = Atlas::Objects::smart_dynamic_cast<Operation>(
|
|
|
|
|
op->getArgs().front());
|
|
|
|
|
|
|
|
|
|
if (!relayedOp.isValid()) {
|
|
|
|
|
log(ERROR,
|
|
|
|
|
"Entity::RelayOperation first arg is not an operation.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (op->isDefaultSerialno()) {
|
|
|
|
|
log(ERROR, "Entity::RelayOperation no serial number.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Add a sight of the operation
|
|
|
|
|
Sight sight;
|
|
|
|
|
sight->setArgs1(relayedOp);
|
|
|
|
|
|
|
|
|
|
Atlas::Objects::Operation::Generic responseOp;
|
|
|
|
|
responseOp->setType("relay", Atlas::Objects::Operation::RELAY_NO);
|
|
|
|
|
responseOp->setArgs1(sight);
|
|
|
|
|
responseOp->setTo(op->getFrom());
|
|
|
|
|
res.push_back(responseOp);
|
|
|
|
|
|
|
|
|
|
//Make sure that the contained op is addressed to the entity
|
|
|
|
|
relayedOp->setTo(getId());
|
|
|
|
|
operation(relayedOp, res);
|
|
|
|
|
|
2013-08-16 00:03:09 +02:00
|
|
|
}
|
|
|
|
|
|
2012-12-04 20:39:35 +00:00
|
|
|
void Entity::externalOperation(const Operation & op, Link &)
|
2004-08-28 Al Riddoch <alriddoch@zepler.org>
* common/BaseEntity.h, common/BaseEntity.cpp, rulesets/BaseMind.h,
rulesets/Character.h, rulesets/Character.cpp, rulesets/Entity.cpp,
rulesets/Entity.h, server/Connection.cpp, tests/EntityExerciser.h:
Remove externalMessage() completely as its redundant, and remove
externalOperation() from the BaseEntity class, and into
Entity as its only applicable in-game.
* tests/Charactertest.cpp, tests/Creatortest.cpp:
Add tests for more IG classes.
2004-08-28 21:54:03 +00:00
|
|
|
{
|
2004-09-04 15:16:26 +00:00
|
|
|
OpVector res;
|
2004-09-03 Al Riddoch <alriddoch@zepler.org>
* client/CharacterClient.cpp, client/CharacterClient.h,
client/CommClient.cpp, common/BaseEntity.cpp,
common/BaseEntity.h, common/OOGThing.cpp,
common/OOGThing.h, common/op_switch.h,
rulesets/BaseMind.cpp, rulesets/BaseMind.h,
rulesets/Character.cpp, rulesets/Character.h,
rulesets/Creator.cpp, rulesets/Creator.h, rulesets/Entity.cpp,
rulesets/Entity.h, rulesets/Food.cpp, rulesets/Food.h,
rulesets/Missile.h, rulesets/Plant.cpp, rulesets/Plant.h,
rulesets/PythonMindScript.cpp, rulesets/PythonThingScript.cpp,
rulesets/Stackable.cpp, rulesets/Stackable.h, rulesets/Thing.cpp,
rulesets/Thing.h, rulesets/World.cpp, rulesets/World.h,
server/Account.cpp, server/Account.h, server/Admin.cpp,
server/Admin.h, server/CommClient.cpp, server/Connection.cpp,
server/Connection.h, server/ExternalMind.cpp, server/ExternalMind.h,
server/Lobby.cpp, server/Lobby.h, server/Player.cpp,
server/Player.h, server/WorldRouter.cpp:
Re-work basic op dispatch mechanism so result is passed by
a reference argument rather than returning by value.
2004-09-03 00:33:19 +00:00
|
|
|
operation(op, res);
|
2004-11-06 Al Riddoch <alriddoch@zepler.org>
* aiclient/ClientConnection.cpp, client/BaseClient.cpp,
client/CharacterClient.cpp, client/ClientConnection.cpp,
common/Database.cpp, common/FormattedXMLWriter.cpp,
common/inheritance.cpp, common/refno.h, common/terrain_utils.cpp,
common/type_utils.h, common/utility.cpp, modules/WorldTime.cpp,
modules/WorldTime.h, physics/Collision.cpp, rulesets/Area.cpp,
rulesets/BaseMind.cpp, rulesets/Character.cpp, rulesets/Entity.cpp,
rulesets/Line.cpp, rulesets/MemMap.cpp, rulesets/MemMap_methods.h,
rulesets/Movement.cpp, rulesets/Plant.cpp, rulesets/Py_Map.cpp,
rulesets/Py_Object.cpp, rulesets/Py_Operation.cpp,
rulesets/Py_Oplist.cpp, rulesets/PythonMindScript.cpp,
rulesets/PythonThingScript.cpp, rulesets/Python_API.cpp,
rulesets/Stackable.cpp, rulesets/TerrainProperty.cpp,
rulesets/Thing.cpp, rulesets/World.cpp, server/Account.cpp,
server/CommClient.cpp, server/CommServer.cpp, server/Connection.cpp,
server/EntityFactory.cpp, server/Lobby.cpp, server/Persistance.cpp,
server/Player.cpp, server/Restoration.cpp, server/ServerRouting.cpp,
server/WorldRouter.cpp, tests/EntityExerciser.h,
tests/IGEntityExerciser.h, tests/inheritancetest.cpp,
tools/cycmd.cpp, tools/cyconvertrules.cpp, tools/cydbload.cpp,
tools/cyloadrules.cpp:
Tweak for loops to avoid creating a temporary iterator each
iteration.
* tests/type_utilstest.cpp: New test for function which does
list conversions.
2004-11-06 20:36:03 +00:00
|
|
|
OpVector::const_iterator Iend = res.end();
|
|
|
|
|
for (OpVector::const_iterator I = res.begin(); I != Iend; ++I) {
|
2006-06-07 00:02:05 +00:00
|
|
|
if (!op->isDefaultSerialno()) {
|
|
|
|
|
(*I)->setRefno(op->getSerialno());
|
|
|
|
|
}
|
2004-09-04 15:16:26 +00:00
|
|
|
sendWorld(*I);
|
|
|
|
|
}
|
2004-08-28 Al Riddoch <alriddoch@zepler.org>
* common/BaseEntity.h, common/BaseEntity.cpp, rulesets/BaseMind.h,
rulesets/Character.h, rulesets/Character.cpp, rulesets/Entity.cpp,
rulesets/Entity.h, server/Connection.cpp, tests/EntityExerciser.h:
Remove externalMessage() completely as its redundant, and remove
externalOperation() from the BaseEntity class, and into
Entity as its only applicable in-game.
* tests/Charactertest.cpp, tests/Creatortest.cpp:
Add tests for more IG classes.
2004-08-28 21:54:03 +00:00
|
|
|
}
|
|
|
|
|
|
2006-08-01 11:17:16 +00:00
|
|
|
void Entity::operation(const Operation & op, OpVector & res)
|
|
|
|
|
{
|
2011-10-13 14:20:46 +01:00
|
|
|
if (m_script != 0 &&
|
|
|
|
|
m_script->operation(op->getParents().front(), op, res) != 0) {
|
2006-08-01 11:17:16 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2014-09-18 21:39:15 +02:00
|
|
|
|
|
|
|
|
auto J = m_delegates.equal_range(op->getClassNo());
|
|
|
|
|
HandlerResult hr = OPERATION_IGNORED;
|
|
|
|
|
for (;J.first != J.second; ++J.first) {
|
|
|
|
|
HandlerResult hr_call = callDelegate(J.first->second, op, res);
|
|
|
|
|
//We'll record the most blocking of the different results only.
|
|
|
|
|
if (hr != OPERATION_BLOCKED) {
|
|
|
|
|
if (hr_call != OPERATION_IGNORED) {
|
|
|
|
|
hr = hr_call;
|
|
|
|
|
}
|
2013-02-10 02:37:16 +00:00
|
|
|
}
|
2013-01-05 00:47:41 +00:00
|
|
|
// How to access the property? We need a non-const pointer to call
|
|
|
|
|
// operation, but to get this easily we need to force instantiation
|
|
|
|
|
// from the type dict, making properties way less efficient.
|
|
|
|
|
// Making the operation() method const strongly limits the usefulness
|
|
|
|
|
// of delegates, but if we fetch the pointer the hard way, we then
|
|
|
|
|
// require the method to handle instantiation on demand.
|
|
|
|
|
//
|
|
|
|
|
// Can we make a clean way to handle the property in the general case
|
|
|
|
|
// handle instantiation itself? Making it responsible for copying
|
2014-09-18 21:39:15 +02:00
|
|
|
// itself on instantiation would be faster than the
|
2013-01-05 00:47:41 +00:00
|
|
|
// get/set/PropertyManager currently required in in modProperty.
|
|
|
|
|
}
|
2014-09-18 21:39:15 +02:00
|
|
|
//If the operation was blocked we shouldn't send it on to the entity.
|
|
|
|
|
if (hr == OPERATION_BLOCKED) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-08-01 11:17:16 +00:00
|
|
|
return callOperation(op, res);
|
|
|
|
|
}
|
2008-01-07 00:06:18 +00:00
|
|
|
|
2013-02-10 02:37:16 +00:00
|
|
|
HandlerResult Entity::callDelegate(const std::string & name,
|
|
|
|
|
const Operation & op,
|
|
|
|
|
OpVector & res)
|
|
|
|
|
{
|
|
|
|
|
PropertyBase * p = 0;
|
|
|
|
|
PropertyDict::const_iterator I = m_properties.find(name);
|
|
|
|
|
if (I != m_properties.end()) {
|
|
|
|
|
p = I->second;
|
|
|
|
|
} else if (m_type != 0) {
|
|
|
|
|
I = m_type->defaults().find(name);
|
|
|
|
|
if (I != m_type->defaults().end()) {
|
|
|
|
|
p = I->second;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (p != 0) {
|
2013-02-12 16:29:56 +00:00
|
|
|
return p->operation(this, op, res);
|
2013-02-10 02:37:16 +00:00
|
|
|
}
|
2013-02-12 16:29:56 +00:00
|
|
|
return OPERATION_IGNORED;
|
2013-02-10 02:37:16 +00:00
|
|
|
}
|
|
|
|
|
|
2008-01-17 18:54:04 +00:00
|
|
|
/// \brief Find and call the handler for an operation
|
|
|
|
|
///
|
|
|
|
|
/// @param op The operation to be processed.
|
|
|
|
|
/// @param res The result of the operation is returned here.
|
|
|
|
|
void Entity::callOperation(const Operation & op, OpVector & res)
|
|
|
|
|
{
|
2013-02-28 15:39:59 +00:00
|
|
|
auto op_no = op->getClassNo();
|
2008-01-17 18:54:04 +00:00
|
|
|
OP_SWITCH(op, op_no, res,)
|
|
|
|
|
}
|
|
|
|
|
|
2013-06-15 22:53:14 +02:00
|
|
|
void Entity::onContainered(const LocatedEntity* oldLocation)
|
2008-01-07 00:06:18 +00:00
|
|
|
{
|
2013-06-15 22:53:14 +02:00
|
|
|
containered.emit(oldLocation);
|
2008-01-07 00:06:18 +00:00
|
|
|
}
|
2008-08-16 23:21:06 +00:00
|
|
|
|
|
|
|
|
void Entity::onUpdated()
|
|
|
|
|
{
|
|
|
|
|
updated.emit();
|
|
|
|
|
}
|