#include "activeobject.h"
class Server;
+class ServerEnvironment;
class ActiveBlockModifier;
class ServerActiveObject;
typedef struct lua_State lua_State;
ActiveBlockModifier(){};
virtual ~ActiveBlockModifier(){};
+ // Set of contents to trigger on
virtual std::set<std::string> getTriggerContents()=0;
+ // Set of required neighbors (trigger doesn't happen if none are found)
+ // Empty = do not check neighbors
+ virtual std::set<std::string> getRequiredNeighbors()
+ { return std::set<std::string>(); }
+ // Trigger interval in seconds
virtual float getTriggerInterval() = 0;
- // chance of (1 / return value), 0 is disallowed
+ // Random chance of (1 / return value), 0 is disallowed
virtual u32 getTriggerChance() = 0;
// This is called usually at interval for 1/chance of the nodes
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n){};
ActiveBlockModifier *abm;
float timer;
- ABMWithState(ActiveBlockModifier *abm_):
- abm(abm_)
- {}
+ ABMWithState(ActiveBlockModifier *abm_);
};
/*
void activateBlock(MapBlock *block, u32 additional_dtime=0);
/*
- ActiveBlockModifiers (TODO)
+ ActiveBlockModifiers
-------------------------------------------
- NOTE: Not used currently (TODO: Use or remove)
*/
void addActiveBlockModifier(ActiveBlockModifier *abm);
- /* Other stuff */
+ /*
+ Other stuff
+ -------------------------------------------
+ */
+
+ // Find all active objects inside a radius around a point
+ std::set<u16> getObjectsInsideRadius(v3f pos, float radius);
// Clear all objects, loading and going through every MapBlock
void clearAllObjects();
+ // This makes stuff happen
void step(f32 dtime);
private:
#ifndef SERVER
#include "clientobject.h"
+class ClientSimpleObject;
/*
The client-side environment.
} none;
struct{
u8 amount;
+ bool send_to_server;
} player_damage;
};
};
}
}
+ /*
+ ClientSimpleObjects
+ */
+
+ void addSimpleObject(ClientSimpleObject *simple);
+
/*
ActiveObjects
*/
Callbacks for activeobjects
*/
- void damageLocalPlayer(u8 damage);
+ void damageLocalPlayer(u8 damage, bool handle_hp=true);
/*
Client likes to call these
IGameDef *m_gamedef;
IrrlichtDevice *m_irr;
core::map<u16, ClientActiveObject*> m_active_objects;
+ core::list<ClientSimpleObject*> m_simple_objects;
Queue<ClientEnvEvent> m_client_event_queue;
IntervalLimiter m_active_object_light_update_interval;
IntervalLimiter m_lava_hurt_interval;