aboutsummaryrefslogtreecommitdiff
path: root/examples2d/all_examples2.rs
blob: 3d065a5c74aa4ded342235d8407579b71bc50cbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#![allow(dead_code)]

#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;

use inflector::Inflector;

use rapier_testbed2d::{Testbed, TestbedApp};
use std::cmp::Ordering;

mod add_remove2;
mod ccd2;
mod character_controller2;
mod collision_groups2;
mod convex_polygons2;
mod damping2;
mod debug_box_ball2;
mod debug_compression2;
mod debug_total_overlap2;
mod debug_vertical_column2;
mod drum2;
mod heightfield2;
mod inverse_kinematics2;
mod joint_motor_position2;
mod joints2;
mod locked_rotations2;
mod one_way_platforms2;
mod platform2;
mod polyline2;
mod pyramid2;
mod restitution2;
mod rope_joints2;
mod s2d_arch;
mod s2d_ball_and_chain;
mod s2d_bridge;
mod s2d_card_house;
mod s2d_confined;
mod s2d_far_pyramid;
mod s2d_high_mass_ratio_1;
mod s2d_high_mass_ratio_2;
mod s2d_high_mass_ratio_3;
mod s2d_joint_grid;
mod s2d_pyramid;
mod sensor2;
mod trimesh2;

fn demo_name_from_command_line() -> Option<String> {
    let mut args = std::env::args();

    while let Some(arg) = args.next() {
        if &arg[..] == "--example" {
            return args.next();
        }
    }

    None
}

#[cfg(target_arch = "wasm32")]
fn demo_name_from_url() -> Option<String> {
    None
    //    let window = stdweb::web::window();
    //    let hash = window.location()?.search().ok()?;
    //    Some(hash[1..].to_string())
}

#[cfg(not(any(target_arch = "wasm32")))]
fn demo_name_from_url() -> Option<String> {
    None
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))]
pub fn main() {
    let demo = demo_name_from_command_line()
        .or_else(demo_name_from_url)
        .unwrap_or_default()
        .to_camel_case();

    let mut builders: Vec<(_, fn(&mut Testbed))> = vec![
        ("Add remove", add_remove2::init_world),
        ("CCD", ccd2::init_world),
        ("Character controller", character_controller2::init_world),
        ("Collision groups", collision_groups2::init_world),
        ("Convex polygons", convex_polygons2::init_world),
        ("Damping", damping2::init_world),
        ("Drum", drum2::init_world),
        ("Heightfield", heightfield2::init_world),
        ("Inverse kinematics", inverse_kinematics2::init_world),
        ("Joints", joints2::init_world),
        ("Locked rotations", locked_rotations2::init_world),
        ("One-way platforms", one_way_platforms2::init_world),
        ("Platform", platform2::init_world),
        ("Polyline", polyline2::init_world),
        ("Pyramid", pyramid2::init_world),
        ("Restitution", restitution2::init_world),
        ("Rope Joints", rope_joints2::init_world),
        ("Sensor", sensor2::init_world),
        ("Trimesh", trimesh2::init_world),
        ("Joint motor position", joint_motor_position2::init_world),
        ("(Debug) box ball", debug_box_ball2::init_world),
        ("(Debug) compression", debug_compression2::init_world),
        ("(Debug) total overlap", debug_total_overlap2::init_world),
        (
            "(Debug) vertical column",
            debug_vertical_column2::init_world,
        ),
        ("(s2d) high mass ratio 1", s2d_high_mass_ratio_1::init_world),
        ("(s2d) high mass ratio 2", s2d_high_mass_ratio_2::init_world),
        ("(s2d) high mass ratio 3", s2d_high_mass_ratio_3::init_world),
        ("(s2d) confined", s2d_confined::init_world),
        ("(s2d) pyramid", s2d_pyramid::init_world),
        ("(s2d) card house", s2d_card_house::init_world),
        ("(s2d) arch", s2d_arch::init_world),
        ("(s2d) bridge", s2d_bridge::init_world),
        ("(s2d) ball and chain", s2d_ball_and_chain::init_world),
        ("(s2d) joint grid", s2d_joint_grid::init_world),
        ("(s2d) far pyramid", s2d_far_pyramid::init_world),
    ];

    // Lexicographic sort, with stress tests moved at the end of the list.
    builders.sort_by(|a, b| match (a.0.starts_with('('), b.0.starts_with('(')) {
        (true, true) | (false, false) => a.0.cmp(b.0),
        (true, false) => Ordering::Greater,
        (false, true) => Ordering::Less,
    });

    let i = builders
        .iter()
        .position(|builder| builder.0.to_camel_case().as_str() == demo.as_str())
        .unwrap_or(0);
    let testbed = TestbedApp::from_builders(i, builders);

    testbed.run()
}