]> git.localhorst.tv Git - blank.git/blobdiff - src/shared/CLIContext.hpp
less restrictive teleport command
[blank.git] / src / shared / CLIContext.hpp
index 5308bb2434146aa5d91e14263c3f5830491a0d03..e07571fc331eafbeff45100f712ab6204a648625 100644 (file)
@@ -7,18 +7,40 @@
 namespace blank {
 
 class Player;
+class Entity;
 
 class CLIContext {
 
 public:
-       explicit CLIContext(Player *p = nullptr)
-       : player(p) { }
+       /// Create context with optional player and entity
+       /// entity defaults to the player's if given
+       /// Associated player or entity can be changed during
+       /// the context's lifetime and will assume the original
+       /// values when reset.
+       explicit CLIContext(Player *p = nullptr, Entity *e = nullptr);
 
        /// check if this context associates a player
-       bool HasPlayer() { return player; }
+       bool HasPlayer() { return effective_player; }
        /// get the player responsible for all this
        /// only valid if HasPlayer() returns true
-       Player &GetPlayer() { return *player; }
+       Player &GetPlayer() { return *effective_player; }
+       /// change the effective player of this context
+       /// note that this will *not* change the effective entity
+       void SetPlayer(Player &p) { effective_player = &p; }
+
+       /// check if this context associates an entity
+       bool HasEntity() { return effective_entity; }
+       /// get the entity on which operations should be performed
+       /// only valid if HasPlayer() returns true
+       Entity &GetEntity() { return *effective_entity; }
+       /// change the effective player of this context
+       void SetEntity(Entity &e) { effective_entity = &e; }
+
+       /// reset effective player and entity to their original values
+       void Reset() {
+               effective_player = original_player;
+               effective_player = original_player;
+       }
 
        /// an error has happened and the player should be notified
        virtual void Error(const std::string &) = 0;
@@ -32,7 +54,10 @@ public:
        virtual void Broadcast(const std::string &) = 0;
 
 private:
-       Player *player;
+       Player *original_player;
+       Player *effective_player;
+       Entity *original_entity;
+       Entity *effective_entity;
 
 };