CollisionObject2D::CollisionObject2D(RID p_rid, bool p_area) { rid=p_rid; area=p_area; if (p_area) { Physics2DServer::get_singleton()->area_attach_object_instance_ID(rid,get_instance_ID()); } else { Physics2DServer::get_singleton()->body_attach_object_instance_ID(rid,get_instance_ID()); } }
CollisionObject::CollisionObject(RID p_rid, bool p_area) { rid=p_rid; area=p_area; if (p_area) { PhysicsServer::get_singleton()->area_attach_object_instance_ID(rid,get_instance_ID()); } else { PhysicsServer::get_singleton()->body_attach_object_instance_ID(rid,get_instance_ID()); } // set_transform_notify(true); }
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 { PhysicsServer::get_singleton()->body_attach_object_instance_ID(rid, get_instance_ID()); } // set_transform_notify(true); }
CollisionObject2D::CollisionObject2D(RID p_rid, bool p_area) { rid = p_rid; area = p_area; pickable = true; set_notify_transform(true); if (p_area) { Physics2DServer::get_singleton()->area_attach_object_instance_ID(rid, get_instance_ID()); } else { Physics2DServer::get_singleton()->body_attach_object_instance_ID(rid, get_instance_ID()); } }
Viewport::Viewport() { world_2d = Ref<World2D>( memnew( World2D )); viewport = VisualServer::get_singleton()->viewport_create(); listener=SpatialSoundServer::get_singleton()->listener_create(); audio_listener=false; listener_2d=SpatialSound2DServer::get_singleton()->listener_create(); audio_listener_2d=false; transparent_bg=false; parent=NULL; camera=NULL; size_override=false; size_override_stretch=false; size_override_size=Size2(1,1); render_target=false; render_target_vflip=false; render_target_update_mode=RENDER_TARGET_UPDATE_WHEN_VISIBLE; render_target_texture = Ref<RenderTargetTexture>( memnew( RenderTargetTexture(this) ) ); String id=itos(get_instance_ID()); input_group = "_vp_input"+id; gui_input_group = "_vp_gui_input"+id; unhandled_input_group = "_vp_unhandled_input"+id; unhandled_key_input_group = "_vp_unhandled_key_input"+id; }
VisualInstance::VisualInstance() { instance = VisualServer::get_singleton()->instance_create(); VisualServer::get_singleton()->instance_attach_object_instance_ID( instance, get_instance_ID() ); layers=1; }
Map<TileMap::PosKey,TileMap::Quadrant>::Element *TileMap::_create_quadrant(const PosKey& p_qk) { Matrix32 xform; //xform.set_origin(Point2(p_qk.x,p_qk.y)*cell_size*quadrant_size); Quadrant q; q.pos = _map_to_world(p_qk.x*_get_quadrant_size(),p_qk.y*_get_quadrant_size()); q.pos+=get_cell_draw_offset(); if (tile_origin==TILE_ORIGIN_CENTER) q.pos+=cell_size/2; else if (tile_origin==TILE_ORIGIN_BOTTOM_LEFT) q.pos.y+=cell_size.y; xform.set_origin( q.pos ); // q.canvas_item = VisualServer::get_singleton()->canvas_item_create(); q.body=Physics2DServer::get_singleton()->body_create(use_kinematic?Physics2DServer::BODY_MODE_KINEMATIC:Physics2DServer::BODY_MODE_STATIC); Physics2DServer::get_singleton()->body_attach_object_instance_ID(q.body,get_instance_ID()); Physics2DServer::get_singleton()->body_set_layer_mask(q.body,collision_layer); Physics2DServer::get_singleton()->body_set_collision_mask(q.body,collision_mask); Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_FRICTION,friction); Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_BOUNCE,bounce); if (is_inside_tree()) { xform = get_global_transform() * xform; RID space = get_world_2d()->get_space(); Physics2DServer::get_singleton()->body_set_space(q.body,space); } Physics2DServer::get_singleton()->body_set_state(q.body,Physics2DServer::BODY_STATE_TRANSFORM,xform); rect_cache_dirty=true; quadrant_order_dirty=true; return quadrant_map.insert(p_qk,q); }
void ImageTexture::_resource_path_changed() { String path=get_path(); if (VS::get_singleton()->has_feature(VS::FEATURE_NEEDS_RELOAD_HOOK)) { //this needs to be done much better, but probably will end up being deprecated as technology advances if (path.is_resource_file() && ImageLoader::recognize(path.extension())) { //hook is set only if path is hookable VisualServer::get_singleton()->texture_set_reload_hook(texture,get_instance_ID(),"_reload_hook"); } else { VisualServer::get_singleton()->texture_set_reload_hook(texture,0,StringName()); } } }
Variant Object::_call_deferred_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { if (p_argcount<1) { r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; r_error.argument=0; return Variant(); } if (p_args[0]->get_type()!=Variant::STRING) { r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; r_error.argument=0; r_error.expected=Variant::STRING; return Variant(); } r_error.error=Variant::CallError::CALL_OK; StringName method = *p_args[0]; MessageQueue::get_singleton()->push_call(get_instance_ID(),method,&p_args[1],p_argcount-1); return Variant(); }
void GridMap::set_cell_item(int p_x, int p_y, int p_z, int p_item, int p_rot) { ERR_FAIL_INDEX(ABS(p_x), 1 << 20); ERR_FAIL_INDEX(ABS(p_y), 1 << 20); ERR_FAIL_INDEX(ABS(p_z), 1 << 20); IndexKey key; key.x = p_x; key.y = p_y; key.z = p_z; OctantKey ok; ok.x = p_x / octant_size; ok.y = p_y / octant_size; ok.z = p_z / octant_size; ok.area = _find_area(key); if (cell_map.has(key)) { int prev_item = cell_map[key].item; OctantKey octantkey = ok; ERR_FAIL_COND(!octant_map.has(octantkey)); Octant &g = *octant_map[octantkey]; ERR_FAIL_COND(!g.items.has(prev_item)); ERR_FAIL_COND(!g.items[prev_item].cells.has(key)); g.items[prev_item].cells.erase(key); if (g.items[prev_item].cells.size() == 0) { VS::get_singleton()->free(g.items[prev_item].multimesh_instance); g.items.erase(prev_item); } if (g.items.empty()) { PhysicsServer::get_singleton()->free(g.static_body); if (g.collision_debug.is_valid()) { PhysicsServer::get_singleton()->free(g.collision_debug); PhysicsServer::get_singleton()->free(g.collision_debug_instance); } memdelete(&g); octant_map.erase(octantkey); } else { g.dirty = true; } cell_map.erase(key); _queue_dirty_map(); } if (p_item < 0) return; OctantKey octantkey = ok; //add later if (!octant_map.has(octantkey)) { Octant *g = memnew(Octant); g->dirty = true; g->static_body = PhysicsServer::get_singleton()->body_create(PhysicsServer::BODY_MODE_STATIC); PhysicsServer::get_singleton()->body_attach_object_instance_ID(g->static_body, get_instance_ID()); if (is_inside_world()) PhysicsServer::get_singleton()->body_set_space(g->static_body, get_world()->get_space()); SceneTree *st = SceneTree::get_singleton(); if (st && st->is_debugging_collisions_hint()) { g->collision_debug = VisualServer::get_singleton()->mesh_create(); g->collision_debug_instance = VisualServer::get_singleton()->instance_create(); VisualServer::get_singleton()->instance_set_base(g->collision_debug_instance, g->collision_debug); if (is_inside_world()) { VisualServer::get_singleton()->instance_set_scenario(g->collision_debug_instance, get_world()->get_scenario()); VisualServer::get_singleton()->instance_set_transform(g->collision_debug_instance, get_global_transform()); } } octant_map[octantkey] = g; } Octant &g = *octant_map[octantkey]; if (!g.items.has(p_item)) { Octant::ItemInstances ii; if (theme.is_valid() && theme->has_item(p_item)) { ii.mesh = theme->get_item_mesh(p_item); ii.shape = theme->get_item_shape(p_item); ii.navmesh = theme->get_item_navmesh(p_item); } ii.multimesh = Ref<MultiMesh>(memnew(MultiMesh)); ii.multimesh->set_color_format(MultiMesh::COLOR_NONE); ii.multimesh->set_transform_format(MultiMesh::TRANSFORM_3D); ii.multimesh->set_mesh(ii.mesh); ii.multimesh_instance = VS::get_singleton()->instance_create(); VS::get_singleton()->instance_set_base(ii.multimesh_instance, ii.multimesh->get_rid()); g.items[p_item] = ii; } Octant::ItemInstances &ii = g.items[p_item]; ii.cells.insert(key); g.dirty = true; _queue_dirty_map(); cell_map[key] = Cell(); Cell &c = cell_map[key]; c.item = p_item; c.rot = p_rot; }
void CollisionShape::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_SCENE: { if (get_root_node()->get_editor() && !indicator.is_valid()) { indicator=VisualServer::get_singleton()->poly_create(); RID mat=VisualServer::get_singleton()->fixed_material_create(); VisualServer::get_singleton()->material_set_flag( mat, VisualServer::MATERIAL_FLAG_UNSHADED, true ); VisualServer::get_singleton()->material_set_flag( mat, VisualServer::MATERIAL_FLAG_WIREFRAME, true ); VisualServer::get_singleton()->material_set_flag( mat, VisualServer::MATERIAL_FLAG_DOUBLE_SIDED, true ); VisualServer::get_singleton()->material_set_line_width( mat, 3 ); VisualServer::get_singleton()->poly_set_material(indicator,mat,true); update_indicator(indicator); } if (indicator.is_valid()) { indicator_instance=VisualServer::get_singleton()->instance_create2(indicator,get_world()->get_scenario()); VisualServer::get_singleton()->instance_attach_object_instance_ID(indicator_instance,get_instance_ID()); } volume_changed(); } break; case NOTIFICATION_EXIT_SCENE: { if (indicator_instance.is_valid()) { VisualServer::get_singleton()->free(indicator_instance); } volume_changed(); } break; case NOTIFICATION_TRANSFORM_CHANGED: { if (indicator_instance.is_valid()) { VisualServer::get_singleton()->instance_set_transform(indicator_instance,get_global_transform()); } volume_changed(); } break; default: {} } }