本文整理汇总了C++中CollisionObject2D类的典型用法代码示例。如果您正苦于以下问题:C++ CollisionObject2D类的具体用法?C++ CollisionObject2D怎么用?C++ CollisionObject2D使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CollisionObject2D类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ERR_FAIL_NULL
void RayCast2D::remove_exception(const Object *p_object) {
ERR_FAIL_NULL(p_object);
CollisionObject2D *co = ((Object *)p_object)->cast_to<CollisionObject2D>();
if (!co)
return;
remove_exception_rid(co->get_rid());
}
示例2:
void CollisionShape2D::_add_to_collision_object(Object *p_obj) {
CollisionObject2D *co = p_obj->cast_to<CollisionObject2D>();
ERR_FAIL_COND(!co);
co->add_shape(shape,get_transform());
if (trigger)
co->set_shape_as_trigger(co->get_shape_count()-1,true);
}
示例3: get_parent
void CollisionPolygon2D::_update_parent() {
Node *parent = get_parent();
if (!parent)
return;
CollisionObject2D *co = parent->cast_to<CollisionObject2D>();
if (!co)
return;
co->_update_shapes_from_children();
}
示例4: _update_parent
void CollisionPolygon2D::set_trigger(bool p_trigger) {
trigger = p_trigger;
_update_parent();
if (!can_update_body && is_inside_tree() && shape_from >= 0 && shape_to >= 0) {
CollisionObject2D *co = get_parent()->cast_to<CollisionObject2D>();
for (int i = shape_from; i <= shape_to; i++) {
co->set_shape_as_trigger(i, p_trigger);
}
}
}
示例5: _update_parent
void CollisionShape2D::set_trigger(bool p_trigger) {
trigger=p_trigger;
if (can_update_body) {
_update_parent();
} else if (is_inside_tree() && update_shape_index>=0) {
CollisionObject2D *co = get_parent()->cast_to<CollisionObject2D>();
if (co) {
co->set_shape_as_trigger(update_shape_index,p_trigger);
}
}
}
示例6: memnew
void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {
CollisionObject2D *co = p_obj->cast_to<CollisionObject2D>();
ERR_FAIL_COND(!co);
if (polygon.size()==0)
return;
bool solids=build_mode==BUILD_SOLIDS;
if (solids) {
//here comes the sun, lalalala
//decompose concave into multiple convex polygons and add them
Vector< Vector<Vector2> > decomp = Geometry::decompose_polygon(polygon);
for(int i=0;i<decomp.size();i++) {
Ref<ConvexPolygonShape2D> convex = memnew( ConvexPolygonShape2D );
convex->set_points(decomp[i]);
co->add_shape(convex,get_transform());
}
} else {
Ref<ConcavePolygonShape2D> concave = memnew( ConcavePolygonShape2D );
DVector<Vector2> segments;
segments.resize(polygon.size()*2);
DVector<Vector2>::Write w=segments.write();
for(int i=0;i<polygon.size();i++) {
w[(i<<1)+0]=polygon[i];
w[(i<<1)+1]=polygon[(i+1)%polygon.size()];
}
w=DVector<Vector2>::Write();
concave->set_segments(segments);
co->add_shape(concave,get_transform());
}
//co->add_shape(shape,get_transform());
}
示例7: update
void CollisionShape2D::set_shape(const Ref<Shape2D>& p_shape) {
if (shape.is_valid())
shape->disconnect("changed",this,"_shape_changed");
shape=p_shape;
update();
if (is_inside_tree() && can_update_body)
_update_parent();
if (is_inside_tree() && !can_update_body && update_shape_index>=0) {
CollisionObject2D *co = get_parent()->cast_to<CollisionObject2D>();
if (co) {
co->set_shape(update_shape_index,p_shape);
}
}
if (shape.is_valid())
shape->connect("changed",this,"_shape_changed");
}
示例8: switch
void CollisionShape2D::_notification(int p_what) {
switch(p_what) {
case NOTIFICATION_ENTER_TREE: {
unparenting=false;
can_update_body=get_tree()->is_editor_hint();
if (!get_tree()->is_editor_hint()) {
//display above all else
set_z_as_relative(false);
set_z(VS::CANVAS_ITEM_Z_MAX-1);
}
}
break;
case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
if (!is_inside_tree())
break;
if (can_update_body) {
_update_parent();
} else if (update_shape_index>=0) {
CollisionObject2D *co = get_parent()->cast_to<CollisionObject2D>();
if (co) {
co->set_shape_transform(update_shape_index,get_transform());
}
}
}
break;
case NOTIFICATION_EXIT_TREE: {
can_update_body=false;
}
break;
/*
case NOTIFICATION_TRANSFORM_CHANGED: {
if (!is_inside_scene())
break;
_update_parent();
} break;*/
case NOTIFICATION_DRAW: {
if (!get_tree()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) {
break;
}
if (!shape.is_valid()) {
break;
}
rect=Rect2();
Color draw_col=get_tree()->get_debug_collisions_color();
shape->draw(get_canvas_item(),draw_col);
rect=shape->get_rect();
rect=rect.grow(3);
}
break;
case NOTIFICATION_UNPARENTED: {
unparenting = true;
_update_parent();
}
break;
}
}
示例9: memnew
void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {
if (unparenting || !can_update_body)
return;
CollisionObject2D *co = p_obj->cast_to<CollisionObject2D>();
ERR_FAIL_COND(!co);
if (polygon.size()==0)
return;
bool solids=build_mode==BUILD_SOLIDS;
if (solids) {
//here comes the sun, lalalala
//decompose concave into multiple convex polygons and add them
Vector< Vector<Vector2> > decomp = _decompose_in_convex();
shape_from=co->get_shape_count();
for(int i=0;i<decomp.size();i++) {
Ref<ConvexPolygonShape2D> convex = memnew( ConvexPolygonShape2D );
convex->set_points(decomp[i]);
co->add_shape(convex,get_transform());
if (trigger)
co->set_shape_as_trigger(co->get_shape_count()-1,true);
}
shape_to=co->get_shape_count()-1;
if (shape_to<shape_from) {
shape_from=-1;
shape_to=-1;
}
} else {
Ref<ConcavePolygonShape2D> concave = memnew( ConcavePolygonShape2D );
PoolVector<Vector2> segments;
segments.resize(polygon.size()*2);
PoolVector<Vector2>::Write w=segments.write();
for(int i=0;i<polygon.size();i++) {
w[(i<<1)+0]=polygon[i];
w[(i<<1)+1]=polygon[(i+1)%polygon.size()];
}
w=PoolVector<Vector2>::Write();
concave->set_segments(segments);
co->add_shape(concave,get_transform());
if (trigger)
co->set_shape_as_trigger(co->get_shape_count()-1,true);
shape_from=co->get_shape_count()-1;
shape_to=co->get_shape_count()-1;
}
//co->add_shape(shape,get_transform());
}
示例10: switch
void CollisionPolygon2D::_notification(int p_what) {
switch(p_what) {
case NOTIFICATION_ENTER_TREE: {
unparenting=false;
can_update_body=get_tree()->is_editor_hint();
if (!get_tree()->is_editor_hint()) {
//display above all else
set_z_as_relative(false);
set_z(VS::CANVAS_ITEM_Z_MAX-1);
}
} break;
case NOTIFICATION_EXIT_TREE: {
can_update_body=false;
} break;
case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
if (!is_inside_tree())
break;
if (can_update_body) {
_update_parent();
} else if (shape_from>=0 && shape_to>=0) {
CollisionObject2D *co = get_parent()->cast_to<CollisionObject2D>();
for(int i=shape_from;i<=shape_to;i++) {
co->set_shape_transform(i,get_transform());
}
}
} break;
case NOTIFICATION_DRAW: {
if (!get_tree()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) {
break;
}
for(int i=0;i<polygon.size();i++) {
Vector2 p = polygon[i];
Vector2 n = polygon[(i+1)%polygon.size()];
draw_line(p,n,Color(0.9,0.2,0.0,0.8),3);
}
#define DEBUG_DECOMPOSE
#if defined(TOOLS_ENABLED) && defined (DEBUG_DECOMPOSE)
Vector< Vector<Vector2> > decomp = _decompose_in_convex();
Color c(0.4,0.9,0.1);
for(int i=0;i<decomp.size();i++) {
c.set_hsv( Math::fmod(c.get_h() + 0.738,1),c.get_s(),c.get_v(),0.5);
draw_colored_polygon(decomp[i],c);
}
#else
draw_colored_polygon(polygon,get_tree()->get_debug_collisions_color());
#endif
} break;
case NOTIFICATION_UNPARENTED: {
unparenting = true;
_update_parent();
} break;
}
}