Files
academy2/modules/world/smart_object.h
2021-07-31 03:37:28 +03:00

62 lines
1.6 KiB
C++

#include <scene/3d/spatial.h>
#ifdef TOOLS_ENABLED
#include <scene/resources/packed_scene.h>
#include <scene/animation/animation_node_state_machine.h>
#endif
/* Starting point of animation */
class SmartObject: public Spatial {
GDCLASS(SmartObject, Spatial)
friend class SmartObjectManager;
protected:
String anim_state;
String anim_finish_state;
bool enabled;
bool teleport;
float distance;
SmartObject();
int state;
int npc_id;
enum {STATE_INIT, STATE_SELECTED, STATE_CLOSE, STATE_ACTIVE, STATE_PROGRESS, STATE_FINISH};
void _notification(int p_what);
static void _bind_methods();
#if TOOLS_ENABLED
Ref<PackedScene> character;
void draw_debug();
void clear_debug();
bool run_in_editor;
String dump_subnodes(Ref<AnimationNode> anode) const;
template<class T>
Ref<T> get_anode(Ref<AnimationRootNode> r) const
{
T *p = Object::cast_to<T>(r.ptr());
return Ref<T>(p);
}
AnimationTree *find_animation_tree(Node *node) const;
String get_animation_list() const;
#endif
public:
void _get_property_list(List<PropertyInfo> *p_list) const;
bool _get(const StringName &p_name, Variant &r_ret) const;
bool _set(const StringName &p_name, const Variant &p_value);
bool get_busy()
{
return state != STATE_INIT;
}
};
class SmartObjectManager: public Node {
GDCLASS(SmartObjectManager, Node)
protected:
void _notification(int p_what);
void update_state(SmartObject *sm);
public:
static void play_animation(Node *cnode, const String &anim);
void arrived(SmartObject *sm, Node *ch);
};
/* Manager of group animation */
class SmartObjectGroup: public Spatial {
GDCLASS(SmartObjectGroup, Spatial)
};