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
/*!
Minimalist game framework.
Currently has systems for:
- Rendering ([glium](https://github.com/tomaka/glium))
- Input ([winit](https://github.com/tomaka/winit)
via [volition](https://github.com/shockham/volition))
- Physics ([nphysics](https://github.com/sebcrozet/nphysics))
- Audio ([rodio](https://github.com/tomaka/rodio))
[Example](https://github.com/shockham/caper/blob/master/examples/simple.rs) of a basis for a game:
## Setup
### Linux
Due to the crate alsa-sys being use for linux the following packages are required:
#### Debian/Ubuntu etc
`apt install libasound2-dev pkg-config`
#### Fedora/RHEL/CentOS
`dnf install alsa-lib-devel`
## Usage
```no_run
extern crate caper;
use caper::game::*;
use caper::imgui::Ui;
use caper::input::Key;
use caper::mesh::gen_cube;
use caper::types::{DefaultTag, RenderItemBuilder, TransformBuilder};
use caper::utils::handle_fp_inputs;
fn main() {
// crate an instance of the game struct
let (mut game, event_loop) = Game::<DefaultTag>::new();
// define some items to be rendered
game.add_render_item(
RenderItemBuilder::default()
.vertices(gen_cube())
.instance_transforms(vec![TransformBuilder::default()
.pos((-0.5, 0.0, -5.0))
.build()
.unwrap()])
.build()
.unwrap(),
);
// run the engine update
start_loop(event_loop, move |events| {
game.update(
|_: &Ui| {},
|g: &mut Game<DefaultTag>| -> UpdateStatus {
// update the first person inputs
handle_fp_inputs(&mut g.input, &mut g.cams[0]);
// quit
if g.input.keys_down.contains(&Key::Escape) {
return UpdateStatus::Finish;
}
UpdateStatus::Continue
},
events,
)
});
}
```
*/
extern crate derive_builder;
pub extern crate glium;
extern crate lazy_static;
extern crate serde_derive;
pub extern crate image;
pub extern crate imgui;
pub extern crate impose as audio;
pub extern crate ambisonic as audio;
pub extern crate nalgebra;
pub extern crate ncollide3d as ncollide;
pub extern crate nphysics3d;
pub extern crate volition as input;
extern crate bincode;
extern crate fps_counter;
extern crate gif;
extern crate glium_text_rusttype as glium_text;
extern crate imgui_glium_renderer;
extern crate noise;
extern crate rayon;
extern crate serde;
extern crate time;
/// Simple collision detection
/// Module represent another way of creating a game
/// Module for procedurally generated meshes
/// Module for saving and loading data
/// A module for rendering items
/// All of the caper types
/// Utility functions and macros
pub use lighting;
pub use posteffect;
pub use shader;
pub use texture;