示例#1
0
文件: AR.js 项目: weetgo/Blend4Web
    var start_animation_cb = function(obj, id, pulse) {
        var mclick_value = m_ctl.get_sensor_value(obj, id, 0);
        var tclick_value = m_ctl.get_sensor_value(obj, id, 1);
        var timeline = m_ctl.get_sensor_value(obj, id, 2);

        if (mclick_value || tclick_value) {
            var payload = mclick_value ?
                    m_ctl.get_sensor_payload(obj, id, 0):
                    m_ctl.get_sensor_payload(obj, id, 1);
            var canv_coords = m_cont.client_to_canvas_coords(
                    payload.coords[0], payload.coords[1],
                    _vec2_tmp);

            var obj = m_scs.pick_object(canv_coords[0], canv_coords[1]);

            if (obj) {
                var clicked_planet = get_planet_by_geom(obj);
                if (clicked_planet) {
                    // check second click on planet

                    if (clicked_planet.focused) {
                        _focusing = false;
                    } else {
                        _focusing = true;
                    }

                    // init sun data
                    _sun.start_time = timeline;
                    var sun_trans = m_trans.get_translation_rel(_sun.geom, _vec3_tmp);
                    _sun.start_trans_length = m_vec3.length(sun_trans);

                    // init orbit
                    _orbits.start_time = timeline;
                    _orbits.start_scale = m_trans.get_scale(_orbits.front);

                    // init data of planet animations
                    for (var i = 0; i < _planets.length; i++) {
                        var planet = _planets[i];

                        var trans = m_trans.get_translation_rel(planet.armature, _vec3_tmp);
                        if (_focusing) {
                            m_vec3.copy(trans, planet.original_trans);
                            if (planet.geom == obj) {
                                planet.focused = true;
                            } else {
                                planet.focused = false;
                            }
                        } else {
                            planet.focused = false;
                        }

                        planet.start_scale = m_trans.get_scale(planet.armature);
                        planet.start_time = timeline;
                        planet.start_trans_length = m_vec3.length(trans);
                    }
                }
            }
        }
    }
示例#2
0
    function multiselection_cb(obj, id, pulse) {
        var selected_count = 0;
        for (var i = 0; i < SELECTION_COUNT; i++)
            selected_count += m_ctl.get_sensor_value(obj, id, i);

        for (var i = 0; i < SELECTION_COUNT; i++) {
            if (selected_count > 4)
                m_mat.set_diffuse_color(paws[i], "Material", BLUE);
            else
                if (m_ctl.get_sensor_value(obj, id, i))
                    m_mat.set_diffuse_color(paws[i], "Material", RED);
                else
                    m_mat.set_diffuse_color(paws[i], "Material", DEF_COLOR);
        }
    }
示例#3
0
function smooth_cb(obj, id, pulse) {

    if (Math.abs(_mouse_delta[0]) > 0.01 || Math.abs(_mouse_delta[1]) > 0.01) {
        var elapsed = m_ctl.get_sensor_value(obj, id, 0);
        var rot_x = m_util.smooth(_mouse_delta[0], 0, elapsed, CAM_SMOOTH_CHARACTER_MOUSE);
        var rot_y = m_util.smooth(_mouse_delta[1], 0, elapsed, CAM_SMOOTH_CHARACTER_MOUSE);

        // TODO: need more control with this objects
        var character = m_scs.get_first_character();
        var camera    = m_scs.get_active_camera();

        m_cam.rotate(camera, -rot_x * FPS_MOUSE_MULT, rot_y * FPS_MOUSE_MULT);

        _mouse_delta[0] -= rot_x;
        _mouse_delta[1] -= rot_y;

        if (character) {
            var angles = _vec2_tmp;
            m_cam.get_angles(camera, angles);
            angles[0] += Math.PI;
            angles[1] *= -1;
            m_phy.set_character_rotation(character, angles[0], angles[1]);
        }
    }
}
示例#4
0
 var shoot_cb = function(obj, id, pulse) {
     if (is_clicked) {
         var time = m_ctl.get_sensor_value(obj, id, 0);
         shoot(time);
         is_clicked = false;
     }
 }
示例#5
0
            var update_asteroid_cb = function(obj, id, pulse) {
                var asteroid = obj;
                if (asteroid.active) {
                    // set new tranlation
                    var ast_obj = asteroid.ast_obj;
                    var asteroid_pos = m_trans.get_translation(ast_obj, _vec3_tmp);
                    var elapsed = m_ctl.get_sensor_value(obj, id, 0);
                    var diff_pos = m_vec3.scale(asteroid.velosity, elapsed, _vec3_tmp2);
                    m_vec3.add(asteroid_pos, diff_pos, asteroid_pos);
                    m_trans.set_translation_v(ast_obj, asteroid_pos);

                    // set new rotation
                    var angle = m_quat.slerp(QUAT4_IDENT,
                            asteroid.angular_velosity, elapsed, _quat_tmp);

                    var aster_quat = m_trans.get_rotation(ast_obj, _quat_tmp2);
                    var new_aster_quat = m_quat.multiply(aster_quat, angle, _quat_tmp);
                    m_quat.normalize(new_aster_quat, new_aster_quat);
                    m_trans.set_rotation_v(ast_obj, new_aster_quat);

                    var ast_copy_obj = asteroid.ast_copy_obj;
                    if (ast_copy_obj) {
                        m_trans.set_translation_v(ast_copy_obj, asteroid_pos);
                        m_trans.set_rotation_v(ast_copy_obj, new_aster_quat);
                    }

                    if (asteroid_pos[2] > 20)
                        init_asteroid_transform(asteroid);
                }
            }
示例#6
0
    var cam_move_cb = function(camobj, id, pulse) {

        if (pulse == 1) {

            if (_anim_stop) {
                _cam_anim.timeline = -ANIM_TIME;
                return;
            }

            m_app.disable_camera_controls();

            // elapsed = frame time (e_sensor value)
            var elapsed = m_ctl.get_sensor_value(camobj, id, 1);
            var delta = elapsed / ANIM_TIME;

            m_vec3.subtract(_cam_anim.final_eye, _cam_anim.starting_eye, _vec3_tmp);
            m_vec3.scaleAndAdd(_cam_anim.current_eye, _vec3_tmp, delta, _cam_anim.current_eye);

            _delta_target -= elapsed;
            delta = 1 - _delta_target * _delta_target / (ANIM_TIME * ANIM_TIME);
            m_vec3.subtract(_cam_anim.final_target, _cam_anim.starting_target, _vec3_tmp);
            m_vec3.scaleAndAdd(_cam_anim.starting_target, _vec3_tmp, delta, _cam_anim.current_target);

            m_cam.set_trans_pivot(camobj, _cam_anim.current_eye, _cam_anim.current_target);

        } else {
            m_app.enable_camera_controls(false);
            if (!_anim_stop)
                m_cam.set_trans_pivot(camobj, _cam_anim.final_eye, 
                        _cam_anim.final_target);
            else
                _anim_stop = false;
        }
    }
示例#7
0
文件: app.js 项目: drakh/Blend4Web
    var rot_interp_cb = function(obj, id, pulse) {

        if (pulse == 1 && (Math.abs(dest_x_mouse) > 0.001 ||
                           Math.abs(dest_y_mouse) > 0.001 ||
                           Math.abs(dest_x_touch) > 0.001 ||
                           Math.abs(dest_y_touch) > 0.001)
                       && use_pivot) {

            var value = m_ctl.get_sensor_value(obj, id, 0);

            var x_mouse = m_util.smooth(dest_x_mouse, 0, value, CAM_SMOOTH_ROT_MOUSE);
            var y_mouse = m_util.smooth(dest_y_mouse, 0, value, CAM_SMOOTH_ROT_MOUSE);

            dest_x_mouse -= x_mouse;
            dest_y_mouse -= y_mouse;

            var x_touch = m_util.smooth(dest_x_touch, 0, value, CAM_SMOOTH_ROT_TOUCH);
            var y_touch = m_util.smooth(dest_y_touch, 0, value, CAM_SMOOTH_ROT_TOUCH);

            dest_x_touch -= x_touch;
            dest_y_touch -= y_touch;

            m_cam.rotate_pivot(obj, x_mouse + x_touch, y_mouse + y_touch);
        }
    }
示例#8
0
    function rock_fall_cb(obj, id, pulse, rock_wrapper) {
        var elapsed = m_ctl.get_sensor_value(obj, id, 0);
        var mark = rock_wrapper.mark;
        m_trans.set_scale(mark, 0);

        rock_wrapper.falling_time += elapsed;

        if (rock_wrapper.falling_time <= _level_conf.ROCK_FALL_DELAY) {
            rock_wrapper.terrain_type = TT_NONE;
            return;
        }

        var rock_pos = _vec3_tmp;
        var mark_pos = _vec3_tmp_2;

        m_trans.get_translation(obj, rock_pos);
        m_trans.get_translation(mark, mark_pos);

        rock_pos[1] -= _level_conf.ROCK_SPEED * elapsed;
        m_trans.set_translation_v(obj, rock_pos);

        var mark_scale = 1 - Math.abs((rock_pos[1] - mark_pos[1])) /
                             _level_conf.ROCK_RAY_LENGTH;
        m_trans.set_scale(mark, mark_scale);

        if (rock_pos[1] <= mark_pos[1])
            rock_crash(rock_wrapper)
    }
示例#9
0
 var mute_solo_cb = function(obj, id, pulse) {
     var mute_solo = Boolean(m_ctl.get_sensor_value(obj, id, 2));
     if (mute_solo)
         switch_mute();
     else
         switch_solo();
 }
示例#10
0
    function anim_cb(obj, id, pulse) {
        if (_char_wrapper.state == m_conf.CH_ATTACK)
            return;

        var on_ground = m_ctl.get_sensor_value(obj, id, 0);

        var cur_anim = m_anim.get_current_anim_name(_char_wrapper.rig);
        var required_anim = m_conf.CHAR_IDLE_ANIM;

        if (_char_wrapper.state == m_conf.CH_JUMP) {
            var required_anim = m_conf.CHAR_JUMP_ANIM;
        } else if (move_state.forw_back == 1) {
            var required_anim = m_conf.CHAR_RUN_ANIM;
        } else if (move_state.forw_back == -1) {
            var required_anim = m_conf.CHAR_RUN_ANIM;
            m_anim.set_speed(_char_wrapper.rig, -1);
        } else if (move_state.left_right == 1) {
            var required_anim = m_conf.CHAR_STRAFE;
            m_anim.set_speed(_char_wrapper.rig, -1);
        } else if (move_state.left_right == -1) {
            var required_anim = m_conf.CHAR_STRAFE;
        }

        if (cur_anim != required_anim) {
            m_anim.apply(_char_wrapper.rig, required_anim);
            m_anim.play(_char_wrapper.rig);
            m_anim.set_behavior(_char_wrapper.rig, m_anim.AB_CYCLIC);
        }
    }
示例#11
0
function elapsed_cb(obj, id, pulse) {
    if (pulse == 1) {
        for (var i = 0; i < _ev_tracks.length; i++) {
            var elapsed = m_ctl.get_sensor_value(obj, id, 0);
            process_event_track(_ev_tracks[i], elapsed);
        }
    }
}
示例#12
0
 var shake_cb = function(obj, id, pulse) {
     var time = m_ctl.get_sensor_value(obj, id, 0);
     if (time - _start_shake_time < COCKPIT_SHAKE_TIME) {
         _dest_x_trans += (Math.random() - 0.5) * (1 - (time - _start_shake_time) / COCKPIT_SHAKE_TIME);
         _dest_y_trans += (Math.random() - 0.5) * (1 - (time - _start_shake_time) / COCKPIT_SHAKE_TIME);
     } else
         m_ctl.set_custom_sensor(_shake_sensor, 0);
 }
示例#13
0
 function bonus_lifetime_cb(obj, id, pulse, bonus_wrapper) {
     var elapsed = m_ctl.get_sensor_value(obj, id, 0); 
     bonus_wrapper.lifetime -= elapsed;
     if (bonus_wrapper.lifetime > 0)
         process_bonus_flashing(bonus_wrapper);
     else {
         m_trans.set_translation_v(bonus_wrapper.empty, m_conf.DEFAULT_POS)
     }
 }
示例#14
0
    var touch_cb = function(obj, id, pulse, param) {
        if (pulse == 1) {
            var r_mult = TOUCH_ROTATION_MULT_PX * rot_speed;

            var value = m_ctl.get_sensor_value(obj, id, 0);
            dest_x_touch += (param == "X") ? -value * r_mult : 0;
            dest_y_touch += (param == "Y") ? -value * r_mult : 0;
        }
    }
示例#15
0
文件: AR.js 项目: weetgo/Blend4Web
    function animation_cb(obj, id, pulse) {
        var timeline = m_ctl.get_sensor_value(obj, id, 0); 

        animate_sun(timeline);

        animate_planets(timeline);

        animate_orbits(timeline);
    }
示例#16
0
    var mouse_cb = function(obj, id, pulse, param) {
        if (pulse == 1) {
            var value = m_ctl.get_sensor_value(obj, id, 1);

            var r_mult = MOUSE_ROTATION_MULT_PX * rot_speed;

            dest_x_mouse += (param == "X") ? -value * r_mult : 0;
            dest_y_mouse += (param == "Y") ? -value * r_mult : 0;
        }
    }
示例#17
0
function trigger_outline(obj, id, pulse) {
    if (pulse == 1) {
        // change outline color according to the  
        // first manifold sensor (collision sensor) status
        var has_collision = m_ctl.get_sensor_value(obj, id, 0);
        if (has_collision)
            m_scenes.set_outline_color(OUTLINE_COLOR_ERROR);
        else
            m_scenes.set_outline_color(OUTLINE_COLOR_VALID);
    }
}
示例#18
0
    var zoom_interp_cb = function(obj, id, pulse) {

        if (pulse == 1 && (Math.abs(dest_zoom_mouse) > 0.001 ||
                           Math.abs(dest_zoom_touch) > 0.001)
                       && use_pivot) {
            var value = m_ctl.get_sensor_value(obj, id, 0);

            var zoom_mouse = m_util.smooth(dest_zoom_mouse, 0, value, CAM_SMOOTH_ZOOM_MOUSE);
            dest_zoom_mouse -= zoom_mouse;

            var zoom_touch = m_util.smooth(dest_zoom_touch, 0, value, CAM_SMOOTH_ZOOM_TOUCH);
            dest_zoom_touch -= zoom_touch;

            // block movement when in collision with some other object
            if (collision && m_ctl.get_sensor_value(obj, "CAMERA_COLLISION", 1))
                return;

            m_trans.move_local(obj, 0, zoom_mouse + zoom_touch, 0);
        }
    }
示例#19
0
function main_canvas_down(e) {

    if (e.button != 0)
        return;

    var camobj = m_scenes.get_active_camera();

    if (m_ctl.get_sensor_value(camobj, "CAMERA_MOVE", 0) - _cam_anim.timeline 
            < ANIM_TIME)
        _anim_stop = true;

}
示例#20
0
文件: mouse.js 项目: NoxKeini/myb4w
function smooth_cb(obj, id, pulse, rot_callback) {
    if (Math.abs(_mouse_delta[0]) > 0.01 || Math.abs(_mouse_delta[1]) > 0.01) {
        var elapsed = m_ctl.get_sensor_value(obj, id, 0);
        var rot_x = m_util.smooth(_mouse_delta[0], 0, elapsed, smooth_coeff_mouse());
        var rot_y = m_util.smooth(_mouse_delta[1], 0, elapsed, smooth_coeff_mouse());

        _mouse_delta[0] -= rot_x;
        _mouse_delta[1] -= rot_y;

        rot_callback(-rot_x * FPS_MOUSE_MULT, -rot_y * FPS_MOUSE_MULT);
    }
}
示例#21
0
        var crosshair_cb = function(obj, id, pulse) {
            var cam_pos = m_trans.get_translation(cam_obj, _vec3_tmp);
            m_trans.set_translation_v(obj, cam_pos);

            var view = m_trans.get_rotation(cam_obj, _quat_tmp);
            var cross_view = m_trans.get_rotation(obj, _quat_tmp2);

            var elapsed = m_ctl.get_sensor_value(obj, id, 0);
            var new_cross_view = m_quat.lerp(cross_view, view,
                    CROSSHAIR_DELAY * elapsed, _quat_tmp);
            m_trans.set_rotation_v(obj, new_cross_view);
        }
示例#22
0
    function rock_fall_cb(obj, id, pulse) {
        var elapsed = m_ctl.get_sensor_value(obj, id, 0);
        var obj_name = m_scs.get_object_name(obj);
        falling_time[obj_name] += elapsed;

        if (falling_time[obj_name] <= ROCK_FALL_DELAY)
            return;

        var rock_pos = _vec3_tmp;
        m_trans.get_translation(obj, rock_pos);
        rock_pos[1] -= ROCK_SPEED * elapsed;
        m_trans.set_translation_v(obj, rock_pos);
    }
示例#23
0
文件: app.js 项目: drakh/Blend4Web
 var touch_zoom_cb = function(obj, id, pulse, param) {
     if (pulse == 1) {
         if (use_pivot) {
             var value = m_ctl.get_sensor_value(obj, id, 0);
             var cam_pivot = _vec3_tmp;
             var cam_eye = m_cam.get_eye(obj);
             m_cam.get_pivot(obj, cam_pivot);
             var dist = m_vec3.dist(cam_pivot, cam_eye);
             var t_mult = -value * dist * TOUCH_ZOOM_FACTOR * trans_speed;
             dest_zoom_touch += t_mult;
         }
     }
 }
示例#24
0
 var switch_spk_cb = function(obj, id, pulse) {
     if (pulse == 1) {
         var dir = Boolean(m_ctl.get_sensor_value(obj, id, 0)) ? -1 : 1;
         switch_strip(dir);
         if (id == "SWITCH_STRIP")
             m_ctl.reset_timer_sensor(obj, id, 5, 0.3);
         else
             m_ctl.reset_timer_sensor(obj, id, 5, 0);
     } else {
         // hold on some time
         m_ctl.reset_timer_sensor(obj, id, 5, 10);
     }
 }
示例#25
0
 // shiled and lava protect effects
 function bonus_timer_cb(obj, id) {
     var elapsed = m_ctl.get_sensor_value(obj, id, 0);
     if (_shield_time_left > 0) {
         if (_shield_time_left - elapsed < m_conf.SHIELD_FLASH_LENGTH)
             m_char.remove_shield();
         _shield_time_left -= elapsed;
     }
     if (_lava_protect_time_left > 0) {
         if (_lava_protect_time_left - elapsed < m_conf.LAVA_FALL_LENGTH)
             m_char.remove_lava_protect();
         _lava_protect_time_left -= elapsed;
     }
 }
示例#26
0
    function move_cb(obj, id, pulse) {

        if (_char_wrapper.state == m_conf.CH_ATTACK) {
            m_phy.set_character_move_dir(obj, 0, 0);
            return;
        }
        var on_ground = m_ctl.get_sensor_value(obj, id, 6);

        if (pulse == 1) {
            switch(id) {
            case "FORWARD":
                move_state.forw_back = 1;
                break;
            case "BACKWARD":
                move_state.forw_back = -1;
                break;
            case "LEFT":
                move_state.left_right = 1;
                break;
            case "RIGHT":
                move_state.left_right = -1;
                break;
            }
            if (_char_wrapper.state != m_conf.CH_JUMP)
                _char_wrapper.state = m_conf.CH_RUN;
        } else {
            switch(id) {
            case "FORWARD":
            case "BACKWARD":
                move_state.forw_back = 0;
                break;
            case "LEFT":
            case "RIGHT":
                move_state.left_right = 0;
                break;
            }
            if (_char_wrapper.state != m_conf.CH_JUMP)
                _char_wrapper.state = m_conf.CH_STILL;
        }

        if ((move_state.forw_back || move_state.left_right) && on_ground) {
            if (!m_sfx.is_play(_char_run_spk))
                m_sfx.play_def(_char_run_spk);
        } else {
            if (m_sfx.is_play(_char_run_spk))
                m_sfx.stop(_char_run_spk);
        }

        m_phy.set_character_move_dir(obj, move_state.forw_back,
                                          move_state.left_right);
    };
示例#27
0
    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;
            }
        }
    }
示例#28
0
文件: app.js 项目: drakh/Blend4Web
    var key_cb = function(obj, id, pulse) {
        if (pulse == 1) {
            var elapsed = m_ctl.get_sensor_value(obj, id, 0);

            switch (id) {
            case "FORWARD":
                if (is_vehicle)
                    m_phy.vehicle_throttle(obj, 1);
                else
                    m_trans.move_local(obj, 0, 0, trans_speed * elapsed);
                break;
            case "BACKWARD":
                if (is_vehicle)
                    m_phy.vehicle_throttle(obj, -1);
                else
                    m_trans.move_local(obj, 0, 0, -trans_speed * elapsed);
                break;
            case "LEFT":
                if (is_vehicle)
                    m_phy.vehicle_steer(obj, -1);
                else
                    m_trans.move_local(obj, trans_speed * elapsed, 0, 0);
                break;
            case "RIGHT":
                if (is_vehicle)
                    m_phy.vehicle_steer(obj, 1);
                else
                    m_trans.move_local(obj, -trans_speed * elapsed, 0, 0);
                break;
            default:
                break;
            }
        } else {
            switch (id) {
            case "FORWARD":
            case "BACKWARD":
                if (is_vehicle)
                    m_phy.vehicle_throttle(obj, 0);
                break;
            case "LEFT":
            case "RIGHT":
                if (is_vehicle)
                    m_phy.vehicle_steer(obj, 0);
                break;
            default:
                break;
            }
        }
    }
示例#29
0
    var burst_cb = function(obj, id, pulse) {
        var time = m_ctl.get_sensor_value(obj, id, 0);
        if (time - _burst_time > BURST_LISER_TIME) {
            m_ctl.set_custom_sensor(_burst_fire_sensor, 0);

            var speaker_strike = _cockpit.speaker_strike;
            if (speaker_strike && m_sfx.is_playing(speaker_strike))
                m_sfx.stop(speaker_strike);
        }

        var cross_pos = m_trans.get_translation(obj, _vec3_tmp);
        var cross_view = m_trans.get_rotation(obj, _quat_tmp);
        var forward = m_vec3.transformQuat(m_util.AXIS_MY, cross_view,
                _vec3_tmp2);
        forward = m_vec3.scale(forward, MAX_LASER_LENGTH, _vec3_tmp2);
        forward = m_vec3.add(forward, cross_pos, forward);

        var elapsed = m_ctl.get_sensor_value(obj, id, 1);
        var ray_test_cb = function(id, hit_fract, obj_hit, hit_time) {
            damage_asteroid(obj_hit, elapsed * LASER_DAMAGE);
        }
        var id = m_phy.append_ray_test(null, cross_pos, forward,
                "crash", ray_test_cb, true);
    }
示例#30
0
    var inc_dec_cb = function(obj, id, pulse) {

        if (pulse == 1) {
            var dir = Boolean(m_ctl.get_sensor_value(obj, id, 2)) ? -1 : 1;
            param_inc_dec(dir);

            if (id == "INC_DEC")
                m_ctl.reset_timer_sensor(obj, id, 6, 0.3);
            else
                m_ctl.reset_timer_sensor(obj, id, 6, 0);
        } else {
            // hold on some time
            m_ctl.reset_timer_sensor(obj, id, 6, 10);
        }
    }