Completed the support for plugins! It is not possible to add plugins.
Not all APIs are provided yet, please request whathever you are missing. Some example plugins are provided in demos/plugins. Just copy them to a folder in your project named addons/ and then enable them from the project settings. Have fun!
This commit is contained in:
parent
a97c1ca8f9
commit
6fc1c3a4d1
50 changed files with 2070 additions and 706 deletions
|
|
@ -43,7 +43,7 @@
|
|||
|
||||
#define HANDLE_HALF_SIZE 0.05
|
||||
|
||||
void SpatialGizmoTool::clear() {
|
||||
void EditorSpatialGizmo::clear() {
|
||||
|
||||
for(int i=0;i<instances.size();i++) {
|
||||
|
||||
|
|
@ -61,7 +61,15 @@ void SpatialGizmoTool::clear() {
|
|||
secondary_handles.clear();
|
||||
}
|
||||
|
||||
void SpatialGizmoTool::Instance::create_instance(Spatial *p_base) {
|
||||
void EditorSpatialGizmo::redraw() {
|
||||
|
||||
if (get_script_instance() && get_script_instance()->has_method("redraw"))
|
||||
get_script_instance()->call("redraw");
|
||||
|
||||
|
||||
}
|
||||
|
||||
void EditorSpatialGizmo::Instance::create_instance(Spatial *p_base) {
|
||||
|
||||
instance = VS::get_singleton()->instance_create2(mesh->get_rid(),p_base->get_world()->get_scenario());
|
||||
VS::get_singleton()->instance_attach_object_instance_ID(instance,p_base->get_instance_ID());
|
||||
|
|
@ -80,7 +88,7 @@ void SpatialGizmoTool::Instance::create_instance(Spatial *p_base) {
|
|||
|
||||
|
||||
|
||||
void SpatialGizmoTool::add_mesh(const Ref<Mesh>& p_mesh,bool p_billboard, const RID &p_skeleton) {
|
||||
void EditorSpatialGizmo::add_mesh(const Ref<Mesh>& p_mesh,bool p_billboard, const RID &p_skeleton) {
|
||||
|
||||
ERR_FAIL_COND(!spatial_node);
|
||||
Instance ins;
|
||||
|
|
@ -97,7 +105,7 @@ void SpatialGizmoTool::add_mesh(const Ref<Mesh>& p_mesh,bool p_billboard, const
|
|||
|
||||
}
|
||||
|
||||
void SpatialGizmoTool::add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material,bool p_billboard){
|
||||
void EditorSpatialGizmo::add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material,bool p_billboard){
|
||||
|
||||
ERR_FAIL_COND(!spatial_node);
|
||||
Instance ins;
|
||||
|
|
@ -150,7 +158,7 @@ void SpatialGizmoTool::add_lines(const Vector<Vector3> &p_lines, const Ref<Mater
|
|||
|
||||
}
|
||||
|
||||
void SpatialGizmoTool::add_unscaled_billboard(const Ref<Material>& p_material,float p_scale) {
|
||||
void EditorSpatialGizmo::add_unscaled_billboard(const Ref<Material>& p_material,float p_scale) {
|
||||
|
||||
ERR_FAIL_COND(!spatial_node);
|
||||
Instance ins;
|
||||
|
|
@ -201,12 +209,12 @@ void SpatialGizmoTool::add_unscaled_billboard(const Ref<Material>& p_material,fl
|
|||
|
||||
}
|
||||
|
||||
void SpatialGizmoTool::add_collision_triangles(const Ref<TriangleMesh>& p_tmesh) {
|
||||
void EditorSpatialGizmo::add_collision_triangles(const Ref<TriangleMesh>& p_tmesh) {
|
||||
|
||||
collision_mesh=p_tmesh;
|
||||
}
|
||||
|
||||
void SpatialGizmoTool::add_collision_segments(const Vector<Vector3> &p_lines) {
|
||||
void EditorSpatialGizmo::add_collision_segments(const Vector<Vector3> &p_lines) {
|
||||
|
||||
int from=collision_segments.size();
|
||||
collision_segments.resize(from+p_lines.size());
|
||||
|
|
@ -217,7 +225,7 @@ void SpatialGizmoTool::add_collision_segments(const Vector<Vector3> &p_lines) {
|
|||
}
|
||||
|
||||
|
||||
void SpatialGizmoTool::add_handles(const Vector<Vector3> &p_handles, bool p_billboard,bool p_secondary){
|
||||
void EditorSpatialGizmo::add_handles(const Vector<Vector3> &p_handles, bool p_billboard,bool p_secondary){
|
||||
|
||||
billboard_handle=p_billboard;
|
||||
|
||||
|
|
@ -354,13 +362,14 @@ void SpatialGizmoTool::add_handles(const Vector<Vector3> &p_handles, bool p_bill
|
|||
}
|
||||
|
||||
|
||||
void SpatialGizmoTool::set_spatial_node(Spatial *p_node){
|
||||
void EditorSpatialGizmo::set_spatial_node(Spatial *p_node){
|
||||
|
||||
ERR_FAIL_NULL(p_node);
|
||||
spatial_node=p_node;
|
||||
|
||||
}
|
||||
|
||||
bool SpatialGizmoTool::intersect_frustum(const Camera *p_camera,const Vector<Plane> &p_frustum) {
|
||||
bool EditorSpatialGizmo::intersect_frustum(const Camera *p_camera,const Vector<Plane> &p_frustum) {
|
||||
|
||||
ERR_FAIL_COND_V(!spatial_node,false);
|
||||
ERR_FAIL_COND_V(!valid,false);
|
||||
|
|
@ -401,7 +410,7 @@ bool SpatialGizmoTool::intersect_frustum(const Camera *p_camera,const Vector<Pla
|
|||
}
|
||||
|
||||
|
||||
bool SpatialGizmoTool::intersect_ray(const Camera *p_camera,const Point2& p_point, Vector3& r_pos, Vector3& r_normal,int *r_gizmo_handle,bool p_sec_first) {
|
||||
bool EditorSpatialGizmo::intersect_ray(const Camera *p_camera,const Point2& p_point, Vector3& r_pos, Vector3& r_normal,int *r_gizmo_handle,bool p_sec_first) {
|
||||
|
||||
ERR_FAIL_COND_V(!spatial_node,false);
|
||||
ERR_FAIL_COND_V(!valid,false);
|
||||
|
|
@ -631,7 +640,7 @@ bool SpatialGizmoTool::intersect_ray(const Camera *p_camera,const Point2& p_poin
|
|||
|
||||
|
||||
|
||||
void SpatialGizmoTool::create() {
|
||||
void EditorSpatialGizmo::create() {
|
||||
|
||||
ERR_FAIL_COND(!spatial_node);
|
||||
ERR_FAIL_COND(valid);
|
||||
|
|
@ -646,7 +655,7 @@ void SpatialGizmoTool::create() {
|
|||
|
||||
}
|
||||
|
||||
void SpatialGizmoTool::transform(){
|
||||
void EditorSpatialGizmo::transform(){
|
||||
|
||||
ERR_FAIL_COND(!spatial_node);
|
||||
ERR_FAIL_COND(!valid);
|
||||
|
|
@ -657,7 +666,7 @@ void SpatialGizmoTool::transform(){
|
|||
}
|
||||
|
||||
|
||||
void SpatialGizmoTool::free(){
|
||||
void EditorSpatialGizmo::free(){
|
||||
|
||||
ERR_FAIL_COND(!spatial_node);
|
||||
ERR_FAIL_COND(!valid);
|
||||
|
|
@ -675,19 +684,39 @@ void SpatialGizmoTool::free(){
|
|||
}
|
||||
|
||||
|
||||
void EditorSpatialGizmo::_bind_methods() {
|
||||
|
||||
SpatialGizmoTool::SpatialGizmoTool() {
|
||||
ObjectTypeDB::bind_method(_MD("add_lines","lines","material:Material","billboard"),&EditorSpatialGizmo::add_lines,DEFVAL(false));
|
||||
ObjectTypeDB::bind_method(_MD("add_mesh","mesh:Mesh","billboard","skeleton"),&EditorSpatialGizmo::add_mesh,DEFVAL(false),DEFVAL(RID()));
|
||||
ObjectTypeDB::bind_method(_MD("add_collision_segments","segments"),&EditorSpatialGizmo::add_collision_segments);
|
||||
ObjectTypeDB::bind_method(_MD("add_collision_triangles","triangles:TriangleMesh"),&EditorSpatialGizmo::add_collision_triangles);
|
||||
ObjectTypeDB::bind_method(_MD("add_unscaled_billboard","material:Material","default_scale"),&EditorSpatialGizmo::add_unscaled_billboard,DEFVAL(1));
|
||||
ObjectTypeDB::bind_method(_MD("add_handles","handles","billboard","secondary"),&EditorSpatialGizmo::add_handles,DEFVAL(false),DEFVAL(false));
|
||||
ObjectTypeDB::bind_method(_MD("set_spatial_node","node:Spatial"),&EditorSpatialGizmo::_set_spatial_node);
|
||||
|
||||
BIND_VMETHOD( MethodInfo("redraw"));
|
||||
BIND_VMETHOD( MethodInfo(Variant::STRING,"get_handle_name",PropertyInfo(Variant::INT,"index")));
|
||||
{
|
||||
BIND_VMETHOD( MethodInfo("get_handle_value:Variant",PropertyInfo(Variant::INT,"index")));
|
||||
}
|
||||
BIND_VMETHOD( MethodInfo("set_handle",PropertyInfo(Variant::INT,"index"),PropertyInfo(Variant::OBJECT,"camera:Camera"),PropertyInfo(Variant::VECTOR2,"point")));
|
||||
MethodInfo cm = MethodInfo("commit_handle",PropertyInfo(Variant::INT,"index"),PropertyInfo(Variant::NIL,"restore:Variant"),PropertyInfo(Variant::BOOL,"cancel"));
|
||||
cm.default_arguments.push_back(false);
|
||||
BIND_VMETHOD( cm );
|
||||
}
|
||||
|
||||
EditorSpatialGizmo::EditorSpatialGizmo() {
|
||||
valid=false;
|
||||
billboard_handle=false;
|
||||
|
||||
}
|
||||
|
||||
SpatialGizmoTool::~SpatialGizmoTool(){
|
||||
EditorSpatialGizmo::~EditorSpatialGizmo(){
|
||||
|
||||
clear();
|
||||
}
|
||||
|
||||
Vector3 SpatialGizmoTool::get_handle_pos(int p_idx) const {
|
||||
Vector3 EditorSpatialGizmo::get_handle_pos(int p_idx) const {
|
||||
|
||||
ERR_FAIL_INDEX_V(p_idx,handles.size(),Vector3());
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue