X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fscripted_object.cpp;h=eadcc43455b48bcf913bc8821bc482d9b4d60965;hb=04a3157ef478169b5a3fc05dae00ed6ee6a1fae2;hp=90875f2c94dc1b90a7e4beac84062ba0e1934dbe;hpb=2892ebda09d24c977547159e34abf0244884b89e;p=supertux.git diff --git a/src/object/scripted_object.cpp b/src/object/scripted_object.cpp index 90875f2c9..eadcc4345 100644 --- a/src/object/scripted_object.cpp +++ b/src/object/scripted_object.cpp @@ -29,13 +29,13 @@ #include "math/vector.hpp" ScriptedObject::ScriptedObject(const lisp::Lisp& lisp) - : MovingSprite(lisp, LAYER_OBJECTS, COLGROUP_MOVING), + : MovingSprite(lisp, LAYER_OBJECTS, COLGROUP_MOVING_STATIC), solid(true), physic_enabled(true), visible(true), new_vel_set(false) { lisp.get("name", name); if(name == "") throw std::runtime_error("Scripted object must have a name specified"); - + // FIXME: do we need this? bbox is already set via .sprite file float width = sprite->get_width(); float height = sprite->get_height(); @@ -47,20 +47,24 @@ ScriptedObject::ScriptedObject(const lisp::Lisp& lisp) lisp.get("physic-enabled", physic_enabled); lisp.get("visible", visible); lisp.get("z-pos", layer); - if(solid) - flags |= FLAG_SOLID; + if( solid ){ + set_group( COLGROUP_MOVING_STATIC ); + } else { + set_group( COLGROUP_DISABLED ); + } } void ScriptedObject::expose(HSQUIRRELVM vm, SQInteger table_idx) { - Scripting::ScriptedObject* interface = static_cast (this); - expose_object(vm, table_idx, interface, name, false); + if (name.empty()) return; + expose_object(vm, table_idx, dynamic_cast(this), name, false); } void ScriptedObject::unexpose(HSQUIRRELVM vm, SQInteger table_idx) { + if (name.empty()) return; Scripting::unexpose_object(vm, table_idx, name); } @@ -125,10 +129,11 @@ void ScriptedObject::set_solid(bool solid) { this->solid = solid; - if(solid) - flags |= FLAG_SOLID; - else - flags ^= FLAG_SOLID; + if( solid ){ + set_group( COLGROUP_MOVING_STATIC ); + } else { + set_group( COLGROUP_DISABLED ); + } } bool @@ -188,7 +193,7 @@ ScriptedObject::collision_solid(const CollisionHit& hit) if(physic.get_velocity_y() > 0) physic.set_velocity_y(0); } else if(hit.top) { - physic.set_velocity_y(.1); + physic.set_velocity_y(.1f); } if(hit.left || hit.right) {