Minetest  5.4.0
clientenvironment.h
Go to the documentation of this file.
1 /*
2 Minetest
3 Copyright (C) 2010-2017 celeron55, Perttu Ahola <celeron55@gmail.com>
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14 
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 
20 #pragma once
21 
22 #include "environment.h"
23 #include <ISceneManager.h>
24 #include "clientobject.h"
25 #include "util/numeric.h"
26 #include "activeobjectmgr.h"
27 
28 class ClientSimpleObject;
29 class ClientMap;
30 class ClientScripting;
31 class ClientActiveObject;
32 class GenericCAO;
33 class LocalPlayer;
34 
35 /*
36  The client-side environment.
37 
38  This is not thread-safe.
39  Must be called from main (irrlicht) thread (uses the SceneManager)
40  Client uses an environment mutex.
41 */
42 
44 {
47 };
48 
50 {
52  union {
53  //struct{
54  //} none;
55  struct{
56  u16 amount;
59  };
60 };
61 
62 typedef std::unordered_map<u16, ClientActiveObject*> ClientActiveObjectMap;
64 {
65 public:
66  ClientEnvironment(ClientMap *map, ITextureSource *texturesource, Client *client);
68 
69  Map & getMap();
71 
72  Client *getGameDef() { return m_client; }
73  void setScript(ClientScripting *script) { m_script = script; }
74 
75  void step(f32 dtime);
76 
77  virtual void setLocalPlayer(LocalPlayer *player);
79 
80  /*
81  ClientSimpleObjects
82  */
83 
84  void addSimpleObject(ClientSimpleObject *simple);
85 
86  /*
87  ActiveObjects
88  */
89 
90  GenericCAO* getGenericCAO(u16 id);
92  {
93  return m_ao_manager.getActiveObject(id);
94  }
95 
96  /*
97  Adds an active object to the environment.
98  Environment handles deletion of object.
99  Object may be deleted by environment immediately.
100  If id of object is 0, assigns a free id to it.
101  Returns the id of the object.
102  Returns 0 if not added and thus deleted.
103  */
104  u16 addActiveObject(ClientActiveObject *object);
105 
106  void addActiveObject(u16 id, u8 type, const std::string &init_data);
107  void removeActiveObject(u16 id);
108 
109  void processActiveObjectMessage(u16 id, const std::string &data);
110 
111  /*
112  Callbacks for activeobjects
113  */
114 
115  void damageLocalPlayer(u16 damage, bool handle_hp=true);
116 
117  /*
118  Client likes to call these
119  */
120 
121  // Get all nearby objects
122  void getActiveObjects(const v3f &origin, f32 max_d,
123  std::vector<DistanceSortedActiveObject> &dest)
124  {
125  return m_ao_manager.getActiveObjects(origin, max_d, dest);
126  }
127 
128  bool hasClientEnvEvents() const { return !m_client_event_queue.empty(); }
129 
130  // Get event from queue. If queue is empty, it triggers an assertion failure.
132 
133  virtual void getSelectedActiveObjects(
134  const core::line3d<f32> &shootline_on_map,
135  std::vector<PointedThing> &objects
136  );
137 
138  const std::list<std::string> &getPlayerNames() { return m_player_names; }
139  void addPlayerName(const std::string &name) { m_player_names.push_back(name); }
140  void removePlayerName(const std::string &name) { m_player_names.remove(name); }
141  void updateCameraOffset(const v3s16 &camera_offset)
142  { m_camera_offset = camera_offset; }
144 private:
151  std::vector<ClientSimpleObject*> m_simple_objects;
152  std::queue<ClientEnvEvent> m_client_event_queue;
154  std::list<std::string> m_player_names;
156 };
T * getActiveObject(u16 id)
Definition: activeobjectmgr.h:39
Definition: clientobject.h:37
Definition: clientenvironment.h:64
ClientScripting * m_script
Definition: clientenvironment.h:149
bool hasClientEnvEvents() const
Definition: clientenvironment.h:128
client::ActiveObjectMgr m_ao_manager
Definition: clientenvironment.h:150
IntervalLimiter m_active_object_light_update_interval
Definition: clientenvironment.h:153
void removePlayerName(const std::string &name)
Definition: clientenvironment.h:140
u16 addActiveObject(ClientActiveObject *object)
Definition: clientenvironment.cpp:337
Client * getGameDef()
Definition: clientenvironment.h:72
GenericCAO * getGenericCAO(u16 id)
Definition: clientenvironment.cpp:328
void addSimpleObject(ClientSimpleObject *simple)
Definition: clientenvironment.cpp:323
const std::list< std::string > & getPlayerNames()
Definition: clientenvironment.h:138
void step(f32 dtime)
Definition: clientenvironment.cpp:140
ClientMap & getClientMap()
Definition: clientenvironment.cpp:124
void processActiveObjectMessage(u16 id, const std::string &data)
Definition: clientenvironment.cpp:409
void updateCameraOffset(const v3s16 &camera_offset)
Definition: clientenvironment.h:141
void removeActiveObject(u16 id)
Definition: clientenvironment.cpp:393
ClientActiveObject * getActiveObject(u16 id)
Definition: clientenvironment.h:91
Client * m_client
Definition: clientenvironment.h:148
void damageLocalPlayer(u16 damage, bool handle_hp=true)
Definition: clientenvironment.cpp:433
void getActiveObjects(const v3f &origin, f32 max_d, std::vector< DistanceSortedActiveObject > &dest)
Definition: clientenvironment.h:122
LocalPlayer * m_local_player
Definition: clientenvironment.h:146
v3s16 m_camera_offset
Definition: clientenvironment.h:155
ClientEnvEvent getClientEnvEvent()
Definition: clientenvironment.cpp:456
ClientEnvironment(ClientMap *map, ITextureSource *texturesource, Client *client)
Definition: clientenvironment.cpp:94
std::vector< ClientSimpleObject * > m_simple_objects
Definition: clientenvironment.h:151
void addPlayerName(const std::string &name)
Definition: clientenvironment.h:139
~ClientEnvironment()
Definition: clientenvironment.cpp:105
std::queue< ClientEnvEvent > m_client_event_queue
Definition: clientenvironment.h:152
ITextureSource * m_texturesource
Definition: clientenvironment.h:147
virtual void setLocalPlayer(LocalPlayer *player)
Definition: clientenvironment.cpp:129
std::list< std::string > m_player_names
Definition: clientenvironment.h:154
ClientMap * m_map
Definition: clientenvironment.h:145
v3s16 getCameraOffset() const
Definition: clientenvironment.h:143
LocalPlayer * getLocalPlayer() const
Definition: clientenvironment.h:78
void setScript(ClientScripting *script)
Definition: clientenvironment.h:73
Map & getMap()
Definition: clientenvironment.cpp:119
virtual void getSelectedActiveObjects(const core::line3d< f32 > &shootline_on_map, std::vector< PointedThing > &objects)
Definition: clientenvironment.cpp:466
Definition: clientmap.h:67
Definition: scripting_client.h:38
Definition: clientsimpleobject.h:26
Definition: client.h:109
Definition: environment.h:47
Definition: content_cao.h:70
Definition: tile.h:86
Definition: numeric.h:319
Definition: localplayer.h:45
Definition: map.h:123
Definition: activeobjectmgr.h:30
void getActiveObjects(const v3f &origin, f32 max_d, std::vector< DistanceSortedActiveObject > &dest)
Definition: activeobjectmgr.cpp:93
ClientEnvEventType
Definition: clientenvironment.h:44
@ CEE_PLAYER_DAMAGE
Definition: clientenvironment.h:46
@ CEE_NONE
Definition: clientenvironment.h:45
std::unordered_map< u16, ClientActiveObject * > ClientActiveObjectMap
Definition: clientenvironment.h:62
core::vector3d< s16 > v3s16
Definition: irr_v3d.h:28
core::vector3df v3f
Definition: irr_v3d.h:26
Definition: activeobjectmgr.cpp:25
Definition: clientenvironment.h:50
ClientEnvEventType type
Definition: clientenvironment.h:51
struct ClientEnvEvent::@0::@2 player_damage
u16 amount
Definition: clientenvironment.h:56
bool send_to_server
Definition: clientenvironment.h:57