cyphesis/rulesets/BaseMind.h
Erik Ogenvik 5c5fca2d24 Rewrote how minds are interacted with.
Instead of using separate Commune and Think goals depending on
whether we're querying for or setting thoughts we now instead solely use
the Think op. This op wraps another op, which is then used to determine
what to do. The ops that are supported are: Set, Get, Delete and Look

Think(Set): sets new thoughts and updates existing ones, if an id is
supplied.
Think(Get): get all or specific thoughts (replaces Commune)
Think(Look): inspects a specific goal
Think(Delete): deletes all or a specific thoughts (i.e. both goals and
knowledge)
2015-05-24 11:25:08 +02:00

81 lines
3.1 KiB
C++

// Cyphesis Online RPG Server and AI Engine
// Copyright (C) 2000,2001 Alistair Riddoch
//
// 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
#ifndef RULESETS_BASE_MIND_H
#define RULESETS_BASE_MIND_H
#include "MemEntity.h"
#include "MemMap.h"
#include "modules/WorldTime.h"
/// \brief This is core class for representing the mind of an AI entity.
///
/// Instances of this class almost always have an associated script which
/// handles most of the AI. The main purpose of this class is to handle
/// operations and interface to the MemMap used as the core of
/// the entity's memory.
class BaseMind : public MemEntity {
protected:
/// \brief Memory map of world entities this mind knows about
MemMap m_map;
/// \brief World time as far as this mind is aware
WorldTime m_time;
public:
BaseMind(const std::string &, long);
virtual ~BaseMind();
/// \brief Accessor for the memory map of world entities
MemMap * getMap() { return &m_map; }
/// \brief Accessor for the world time
WorldTime * getTime() { return &m_time; }
/// \brief Is this mind active
bool isAwake() const { return (getFlags() & entity_asleep) == 0; }
/// \brief Set this mind as inactive
void sleep() { setFlags(entity_asleep); }
/// \brief Set this mind as active
void awake() { resetFlags(entity_asleep); }
void sightCreateOperation(const Operation &, OpVector &);
void sightDeleteOperation(const Operation &, OpVector &);
void sightMoveOperation(const Operation &, OpVector &);
void sightSetOperation(const Operation &, OpVector &);
virtual void thinkSetOperation(const Operation & op, OpVector & res);
virtual void thinkDeleteOperation(const Operation & op, OpVector & res);
virtual void thinkGetOperation(const Operation & op, OpVector & res);
virtual void thinkLookOperation(const Operation & op, OpVector & res);
virtual void operation(const Operation &, OpVector &);
virtual void SightOperation(const Operation &, OpVector &);
virtual void SoundOperation(const Operation &, OpVector &);
virtual void AppearanceOperation(const Operation &, OpVector &);
virtual void DisappearanceOperation(const Operation &, OpVector &);
virtual void UnseenOperation(const Operation &, OpVector &);
virtual void ThinkOperation(const Operation &, OpVector &);
void callSightOperation(const Operation &, OpVector &);
void callSoundOperation(const Operation &, OpVector &);
friend class BaseMindMapEntityintegration;
};
#endif // RULESETS_BASE_MIND_H