mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 10:11:57 +03:00
Huge Amount of BugFix
-=-=-=-=-=-=-=-=-=-=- -Fixes to Collada Exporter (avoid crash situtions) -Fixed to Collada Importer (Fixed Animation Optimizer Bugs) -Fixes to RigidBody/RigidBody2D body_enter/body_exit, was buggy -Fixed ability for RigidBody/RigidBody2D to get contacts reported and bodyin/out in Kinematic mode. -Added proper trigger support for 3D Physics shapes -Changed proper value for Z-Offset in OmniLight -Fixed spot attenuation bug in SpotLight -Fixed some 3D and 2D spatial soudn bugs related to distance attenuation. -Fixed bugs in EventPlayer (channels were muted by default) -Fix in ButtonGroup (get nodes in group are now returned in order) -Fixed Linear->SRGB Conversion, previous algo sucked, new algo works OK -Changed SRGB->Linear conversion to use hardware if supported, improves texture quality a lot -Fixed options for Y-Fov and X-Fov in camera, should be more intuitive. -Fixed bugs related to viewports and transparency Huge Amount of New Stuff: -=-=-=-=-=-=-=-==-=-=-=- -Ability to manually advance an AnimationPlayer that is inactive (with advance() function) -More work in WinRT platform -Added XY normalmap support, imports on this format by default. Reduces normlmap size and enables much nice compression using LATC -Added Anisotropic filter support to textures, can be specified on import -Added support for Non-Square, Isometric and Hexagonal tilemaps in TileMap. -Added Isometric Dungeon demo. -Added simple hexagonal map demo. -Added Truck-Town demo. Shows how most types of joints and vehicles are used. Please somebody make a nicer town, this one is too hardcore. -Added an Object-Picking API to both RigidBody and Area! (and relevant demo)
This commit is contained in:
@@ -53,8 +53,9 @@ void CollisionObject::_notification(int p_what) {
|
||||
} else
|
||||
PhysicsServer::get_singleton()->body_set_space(rid,space);
|
||||
|
||||
_update_pickable();
|
||||
//get space
|
||||
}
|
||||
};
|
||||
|
||||
case NOTIFICATION_TRANSFORM_CHANGED: {
|
||||
|
||||
@@ -63,6 +64,11 @@ void CollisionObject::_notification(int p_what) {
|
||||
else
|
||||
PhysicsServer::get_singleton()->body_set_state(rid,PhysicsServer::BODY_STATE_TRANSFORM,get_global_transform());
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_VISIBILITY_CHANGED: {
|
||||
|
||||
_update_pickable();
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_EXIT_WORLD: {
|
||||
|
||||
@@ -91,11 +97,11 @@ void CollisionObject::_update_shapes() {
|
||||
continue;
|
||||
if (area)
|
||||
PhysicsServer::get_singleton()->area_add_shape(rid,shapes[i].shape->get_rid(),shapes[i].xform);
|
||||
else {
|
||||
else {
|
||||
PhysicsServer::get_singleton()->body_add_shape(rid,shapes[i].shape->get_rid(),shapes[i].xform);
|
||||
if (shapes[i].trigger)
|
||||
PhysicsServer::get_singleton()->body_set_shape_as_trigger(rid,i,shapes[i].trigger);
|
||||
}
|
||||
if (shapes[i].trigger)
|
||||
PhysicsServer::get_singleton()->body_set_shape_as_trigger(rid,i,shapes[i].trigger);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,18 +166,18 @@ void CollisionObject::_get_property_list( List<PropertyInfo> *p_list) const {
|
||||
String path="shapes/"+itos(i)+"/";
|
||||
p_list->push_back( PropertyInfo(Variant::OBJECT,path+"shape",PROPERTY_HINT_RESOURCE_TYPE,"Shape",PROPERTY_USAGE_NOEDITOR) );
|
||||
p_list->push_back( PropertyInfo(Variant::TRANSFORM,path+"transform",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR) );
|
||||
p_list->push_back( PropertyInfo(Variant::BOOL,path+"trigger",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR) );
|
||||
p_list->push_back( PropertyInfo(Variant::BOOL,path+"trigger",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR) );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CollisionObject::_input_event(const InputEvent& p_input_event,const Vector3& p_pos, const Vector3& p_normal, int p_shape) {
|
||||
void CollisionObject::_input_event(Node *p_camera, const InputEvent& p_input_event, const Vector3& p_pos, const Vector3& p_normal, int p_shape) {
|
||||
|
||||
if (get_script_instance()) {
|
||||
get_script_instance()->call(SceneStringNames::get_singleton()->_input_event,p_input_event,p_pos,p_normal,p_shape);
|
||||
get_script_instance()->call(SceneStringNames::get_singleton()->_input_event,p_camera,p_input_event,p_pos,p_normal,p_shape);
|
||||
}
|
||||
emit_signal(SceneStringNames::get_singleton()->input_event,p_input_event,p_pos,p_normal,p_shape);
|
||||
emit_signal(SceneStringNames::get_singleton()->input_event,p_camera,p_input_event,p_pos,p_normal,p_shape);
|
||||
}
|
||||
|
||||
void CollisionObject::_mouse_enter() {
|
||||
@@ -192,6 +198,28 @@ void CollisionObject::_mouse_exit() {
|
||||
|
||||
}
|
||||
|
||||
void CollisionObject::_update_pickable() {
|
||||
if (!is_inside_scene())
|
||||
return;
|
||||
bool pickable = ray_pickable && is_inside_scene() && is_visible();
|
||||
if (area)
|
||||
PhysicsServer::get_singleton()->area_set_ray_pickable(rid,pickable);
|
||||
else
|
||||
PhysicsServer::get_singleton()->body_set_ray_pickable(rid,pickable);
|
||||
}
|
||||
|
||||
void CollisionObject::set_ray_pickable(bool p_ray_pickable) {
|
||||
|
||||
ray_pickable=p_ray_pickable;
|
||||
_update_pickable();
|
||||
|
||||
}
|
||||
|
||||
bool CollisionObject::is_ray_pickable() const {
|
||||
|
||||
return ray_pickable;
|
||||
}
|
||||
|
||||
|
||||
void CollisionObject::_bind_methods() {
|
||||
|
||||
@@ -206,15 +234,18 @@ void CollisionObject::_bind_methods() {
|
||||
ObjectTypeDB::bind_method(_MD("get_shape_transform","shape_idx"),&CollisionObject::get_shape_transform);
|
||||
ObjectTypeDB::bind_method(_MD("remove_shape","shape_idx"),&CollisionObject::remove_shape);
|
||||
ObjectTypeDB::bind_method(_MD("clear_shapes"),&CollisionObject::clear_shapes);
|
||||
ObjectTypeDB::bind_method(_MD("set_ray_pickable","ray_pickable"),&CollisionObject::set_ray_pickable);
|
||||
ObjectTypeDB::bind_method(_MD("is_ray_pickable"),&CollisionObject::is_ray_pickable);
|
||||
ObjectTypeDB::bind_method(_MD("set_capture_input_on_drag","enable"),&CollisionObject::set_capture_input_on_drag);
|
||||
ObjectTypeDB::bind_method(_MD("get_capture_input_on_drag"),&CollisionObject::get_capture_input_on_drag);
|
||||
ObjectTypeDB::bind_method(_MD("get_rid"),&CollisionObject::get_rid);
|
||||
BIND_VMETHOD( MethodInfo("_input_event",PropertyInfo(Variant::INPUT_EVENT,"event"),PropertyInfo(Variant::VECTOR3,"click_pos"),PropertyInfo(Variant::VECTOR3,"click_normal"),PropertyInfo(Variant::INT,"shape_idx")));
|
||||
BIND_VMETHOD( MethodInfo("_input_event",PropertyInfo(Variant::OBJECT,"camera"),PropertyInfo(Variant::INPUT_EVENT,"event"),PropertyInfo(Variant::VECTOR3,"click_pos"),PropertyInfo(Variant::VECTOR3,"click_normal"),PropertyInfo(Variant::INT,"shape_idx")));
|
||||
|
||||
ADD_SIGNAL( MethodInfo("input_event",PropertyInfo(Variant::INPUT_EVENT,"event"),PropertyInfo(Variant::VECTOR3,"click_pos"),PropertyInfo(Variant::VECTOR3,"click_normal"),PropertyInfo(Variant::INT,"shape_idx")));
|
||||
ADD_SIGNAL( MethodInfo("input_event",PropertyInfo(Variant::OBJECT,"camera"),PropertyInfo(Variant::INPUT_EVENT,"event"),PropertyInfo(Variant::VECTOR3,"click_pos"),PropertyInfo(Variant::VECTOR3,"click_normal"),PropertyInfo(Variant::INT,"shape_idx")));
|
||||
ADD_SIGNAL( MethodInfo("mouse_enter"));
|
||||
ADD_SIGNAL( MethodInfo("mouse_exit"));
|
||||
|
||||
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"input/ray_pickable"),_SCS("set_ray_pickable"),_SCS("is_ray_pickable"));
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"input/capture_on_drag"),_SCS("set_capture_input_on_drag"),_SCS("get_capture_input_on_drag"));
|
||||
}
|
||||
|
||||
@@ -296,6 +327,8 @@ CollisionObject::CollisionObject(RID p_rid, bool p_area) {
|
||||
|
||||
rid=p_rid;
|
||||
area=p_area;
|
||||
capture_input_on_drag=false;
|
||||
ray_pickable=true;
|
||||
if (p_area) {
|
||||
PhysicsServer::get_singleton()->area_attach_object_instance_ID(rid,get_instance_ID());
|
||||
} else {
|
||||
@@ -321,6 +354,7 @@ CollisionObject::CollisionObject() {
|
||||
|
||||
|
||||
capture_input_on_drag=false;
|
||||
ray_pickable=true;
|
||||
|
||||
//owner=
|
||||
|
||||
|
||||
Reference in New Issue
Block a user