Example #1
0
function hide_elem(elem, period) {

    if (!period) {
        elem.style.opacity = 0;
        elem.style.visibility = "hidden";
        return
    }

    var start_opacity = elem.style.opacity;
    var finish_time = m_time.get_timeline() + period;

    function show_elem_cb(obj, id, pulse) {
        var time_left = finish_time - m_time.get_timeline();
        if (time_left < 0) {
            elem.style.visibility = "hidden";
            m_ctl.remove_sensor_manifold(null, "HIDE_"+ elem.id);
            return;
        }
        var opacity = time_left / period;
        elem.style.opacity = start_opacity * opacity;
    }

    if (!m_ctl.check_sensor_manifold(null, "HIDE_" + elem.id)) {
        var elapsed_sens = m_ctl.create_elapsed_sensor();
        m_ctl.create_sensor_manifold(null, "HIDE_" + elem.id,
            m_ctl.CT_CONTINUOUS, [elapsed_sens], null, show_elem_cb);
    }
}
Example #2
0
    function on_pointerlock_change() {
        if (document.pointerLockElement === elem ||
                document.webkitPointerLockElement === elem ||
                document.mozPointerLockElement === elem) {
            //m_print.log("Pointer Lock enabled");
    
            exit_mouse_drag(elem);

            elem.addEventListener("mousemove", mouse_move_cb, false);

            var camera = m_scs.get_active_camera();

            if (!m_ctl.check_sensor_manifold(camera, "SMOOTH_PL")) {
                var elapsed = m_ctl.create_elapsed_sensor();

                m_ctl.create_sensor_manifold(camera, "SMOOTH_PL", m_ctl.CT_CONTINUOUS,
                    [elapsed], null, smooth_cb);
            }

            enabled_cb();
        } else {
            //m_print.log("Pointer Lock disabled");
            
            elem.removeEventListener("mousemove", mouse_move_cb, false);

            document.removeEventListener("pointerlockchange", on_pointerlock_change, false);
            document.removeEventListener("webkitpointerlockchange", on_pointerlock_change, false);
            document.removeEventListener("mozpointerlockchange", on_pointerlock_change, false);

            disabled_cb();
        }
    }
Example #3
0
function show_elem(elem, period) {

    elem.style.visibility = "visible";

    if (!period) {
        elem.style.opacity = 1;
        return
    }

    elem.style.opacity = 0;

    var finish_time = m_time.get_timeline() + period;

    function show_elem_cb(obj, id, pulse) {
        var time_left = finish_time - m_time.get_timeline();
        if (time_left < 0) {
            m_ctl.remove_sensor_manifold(null, "SHOW_"+ elem.id);
            return;
        }
        var opacity = 1 - time_left / period;
        elem.style.opacity = opacity;
    }

    if (!m_ctl.check_sensor_manifold(null, "SHOW_" + elem.id)) {
        var elapsed_sens = m_ctl.create_elapsed_sensor();
        m_ctl.create_sensor_manifold(null, "SHOW_" + elem.id,
            m_ctl.CT_CONTINUOUS, [elapsed_sens], null, show_elem_cb);
    }
}
Example #4
0
exports.auto_rotate = function(auto_rotate_ratio, callback) {

    callback = callback || function(){};

    var obj = m_scs.get_active_camera();
    var cam_type = m_cam.get_move_style(obj);

    if (cam_type == m_cam.MS_STATIC)
        throw "wrong camera type";

    function elapsed_cb(obj, id, pulse) {
        if (pulse == 1) {
            var value = m_ctl.get_sensor_value(obj, id, 0);

            switch (cam_type) {
            case m_cam.MS_TARGET_CONTROLS:
                m_cam.rotate_pivot(obj, value * auto_rotate_ratio, 0);
                break;
            case m_cam.MS_EYE_CONTROLS:
                m_cam.rotate(obj, value * auto_rotate_ratio, 0);
                break;
            }
        }
    }

    function mouse_cb() {
        m_ctl.remove_sensor_manifold(obj, "AUTO_ROTATE");
        m_ctl.remove_sensor_manifold(obj, "DISABLE_AUTO_ROTATE");
        callback();
    }

    if (!m_ctl.check_sensor_manifold(obj, "AUTO_ROTATE")) {
        var mouse_move_x = m_ctl.create_mouse_move_sensor("X");
        var mouse_move_y = m_ctl.create_mouse_move_sensor("Y");
        var mouse_down   = m_ctl.create_mouse_click_sensor();
        var elapsed      = m_ctl.create_elapsed_sensor();

        var logic_func = function(s) {return (s[0] && s[2]) || (s[1] && s[2])};

        m_ctl.create_sensor_manifold(obj, "DISABLE_AUTO_ROTATE", m_ctl.CT_LEVEL,
                                    [mouse_move_x, mouse_move_y, mouse_down],
                                    logic_func,
                                    mouse_cb);

        m_ctl.create_sensor_manifold(obj, "AUTO_ROTATE", m_ctl.CT_CONTINUOUS,
                                    [elapsed], function(s) {return s[0]},
                                    elapsed_cb);
    } else
        mouse_cb();
}
Example #5
0
function stop_action(node, instance_id) {
    var inst = node.instances[instance_id];
    if (!inst.action)
        return;
    var speakers = inst.action.speakers;
    var manifold_name = inst.action.manifold_name;
    var manifold_owner = node.payload.anim_obj;
    for (var i in speakers) {
        m_sfx.pause(speakers[i])
        m_sfx.stop(speakers[i]);
    }
    stop_anims(node);
    if (manifold_name && m_ctl.check_sensor_manifold(manifold_owner, manifold_name))
        m_ctl.remove_sensor_manifold(manifold_owner, manifold_name);
}
Example #6
0
exports.reset = function() {
    _char_wrapper.state = m_conf.CH_STILL;
    _char_wrapper.hp = m_conf.MAX_CHAR_HP;
    _char_wrapper.island = -1;
    _char_wrapper.move_state.forw_back = 0;
    _char_wrapper.move_state.left_right = 0;
    if (_level_conf) {
        m_trans.get_rotation(_char_wrapper.phys_body, _quat4_tmp);
        m_phy.set_transform(_char_wrapper.phys_body, _level_conf.CHAR_DEF_POS, _quat4_tmp);
        m_phy.set_character_move_dir(_char_wrapper.phys_body, 0, 0);
        m_scs.hide_object(_char_wrapper.foot_smoke);
    }

    var camobj = m_scs.get_active_camera();
    if (m_ctl.check_sensor_manifold(camobj, "CAMERA_ROTATION"))
        m_ctl.remove_sensor_manifold(camobj, "CAMERA_ROTATION");
    m_cam.eye_setup(camobj);
}
function loaded_cb(data_id) {
    var cam = m_scenes.get_active_camera();

    if (m_ctl.check_sensor_manifold(cam, "COLLISION"))
        m_ctl.remove_sensor_manifold(cam, "COLLISION");

    var objs = m_scenes.get_all_objects("ALL", data_id);

    // spawn appended object in a certain position
    for (var i = 0; i < objs.length; i++) {
        var obj = objs[i];
        if (m_phy.has_physics(obj)) {
            m_phy.enable_simulation(obj);
            m_trans.set_translation_v(obj, spawner_pos);
        }
        m_scenes.show_object(obj);
    }

    // create sensors to detect collisions
    var sensors = [];
    for (var i = 0; i < objs.length; i++) {
        var obj = objs[i];
        if (m_phy.has_simulated_physics(obj)) {
            var sensor_col = m_ctl.create_collision_sensor(obj, "FURNITURE");
            var sensor_sel = m_ctl.create_selection_sensor(obj);

            if (obj == _selected_obj)
                sensor_sel.value = true;

            sensors.push(sensor_col);
            sensors.push(sensor_sel);
        }
    }

    var logic_func = function(s) {
        for (var i = 0; i < s.length; i+=2)
            if (s[i+1])
                return s[i];
        return 0;
    }

    m_ctl.create_sensor_manifold(cam, "COLLISION", m_ctl.CT_TRIGGER, sensors,
            logic_func, trigger_glow);
}
Example #8
0
function request_mouse_drag(elem, use_mouse_control_cb) {

    exit_pointerlock();

    _use_mouse_control_cb = use_mouse_control_cb || function() {return true};

    elem.addEventListener("mousedown", drag_mouse_down_cb, false);
    elem.addEventListener("mouseup",   drag_mouse_up_cb,   false);

    var camera = m_scs.get_active_camera();

    if (!m_ctl.check_sensor_manifold(camera, "SMOOTH_DRAG")) {
        var elapsed = m_ctl.create_elapsed_sensor();

        m_ctl.create_sensor_manifold(camera, "SMOOTH_DRAG", m_ctl.CT_CONTINUOUS,
            [elapsed], null, smooth_cb);
    }

}
Example #9
0
function switch_auto_rotate_mode(button_elem_id) {

    var camobj = m_scenes.get_active_camera();

    function disable_auto_rotate_cb() {

        m_ctl.remove_sensor_manifold(camobj, "AUTO_ROTATE");
        m_ctl.remove_sensor_manifold(camobj, "DISABLE_AUTO_ROTATE");
        button_switch_active(button_elem_id, false);
    }

    function elapsed_cb(obj, id, pulse) {
        if (pulse == 1) {
            var value = m_ctl.get_sensor_value(obj, id, 0);
            m_camera.rotate_pivot(obj, value * AUTO_ROTATE_RATIO, 0);
        }
    }

    if (!m_ctl.check_sensor_manifold(camobj, "AUTO_ROTATE")) {

        var mouse_move   = m_ctl.create_mouse_move_sensor("XY");
        var mouse_down   = m_ctl.create_mouse_click_sensor();
        var touch_move   = m_ctl.create_touch_move_sensor("XY");
        var touch_zoom   = m_ctl.create_touch_zoom_sensor();

        var elapsed      = m_ctl.create_elapsed_sensor();
        var logic_func   = function(s) {
            return ((s[0] && s[1]) || s[2] || s[3]);
        };
        m_ctl.create_sensor_manifold(camobj, "AUTO_ROTATE", m_ctl.CT_CONTINUOUS,
                                    [elapsed], function(s) {return s[0]},
                                    elapsed_cb);
        m_ctl.create_sensor_manifold(camobj, "DISABLE_AUTO_ROTATE", m_ctl.CT_SHOT,
                                    [mouse_move, mouse_down, touch_move, touch_zoom],
                                    logic_func, disable_auto_rotate_cb);
        button_switch_active(button_elem_id, true);
    } else {
        disable_auto_rotate_cb();
    }
}
Example #10
0
/**
 * Request drag mode.
 * @param {HTMLElement} elem Element
 * @param switch_drag Drag mouse mode (ENABLE_DRAG or DISABLE_DRAG)
 * @param {check_mouse_control_callback} [check_mouse_control] Check the mouse control
 * callback
 * @method module:pointerlock.requrest_mouse_drag
 */
function request_mouse_drag(elem, switch_drag, check_mouse_control) {

    _check_mouse_control = check_mouse_control || function() {return true};

    if (switch_drag) {
        elem.addEventListener("mousedown", default_mouse_down_cb, false);
        elem.addEventListener("mouseup",   default_mouse_up_cb,   false);

        var camera = b4w.scenes.get_active_camera();

        if (!m_ctl.check_sensor_manifold(camera, "SMOOTH_DRAG")) {
            var elapsed = m_ctl.create_elapsed_sensor();

            m_ctl.create_sensor_manifold(camera, "SMOOTH_DRAG", m_ctl.CT_CONTINUOUS,
                [elapsed], null, smooth_cb);
        }

    } else {
        elem.removeEventListener("mousedown", default_mouse_down_cb, false);
        elem.removeEventListener("mouseup",   default_mouse_up_cb,   false);
    }
}