Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

Commit d3ae11b

Browse files
committed
buncha stuff
1 parent 68b1860 commit d3ae11b

File tree

18 files changed

+248
-66
lines changed

18 files changed

+248
-66
lines changed

README.md

Whitespace-only changes.

demo/game/character.js

Lines changed: 77 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Gamepad from 'html5-gamepad';
44
import Matter from 'matter-js';
55

66
import {
7+
AudioPlayer,
78
Body,
89
Sprite,
910
} from '../../src';
@@ -24,11 +25,18 @@ export default class Character extends Component {
2425
scale: PropTypes.number,
2526
};
2627

28+
handlePlayStateChanged = (state) => {
29+
this.setState({
30+
spritePlaying: state ? true : false,
31+
});
32+
};
33+
2734
move = (body, x) => {
2835
Matter.Body.setVelocity(body, { x, y: 0 });
2936
};
3037

3138
jump = (body) => {
39+
this.jumpNoise.play();
3240
this.isJumping = true;
3341
Matter.Body.applyForce(
3442
body,
@@ -38,6 +46,14 @@ export default class Character extends Component {
3846
Matter.Body.set(body, 'friction', 0);
3947
};
4048

49+
punch = () => {
50+
this.isPunching = true;
51+
this.setState({
52+
characterState: 4,
53+
loop: false,
54+
});
55+
}
56+
4157
enterBuilding = (body) => {
4258
let doorIndex = null;
4359

@@ -52,12 +68,15 @@ export default class Character extends Component {
5268
});
5369

5470
if (doorIndex !== null) {
55-
Matter.Events.off(this.context.engine, 'afterUpdate', this.update);
71+
this.setState({
72+
characterState: 3,
73+
});
74+
this.isLeaving = true;
5675
this.props.onEnterBuilding(doorIndex);
5776
}
5877
};
5978

60-
update = () => {
79+
checkKeys = () => {
6180
const { keys, store } = this.props;
6281
const { body } = this.body;
6382

@@ -66,49 +85,69 @@ export default class Character extends Component {
6685
const shouldMoveStageLeft = body.position.x < midPoint && store.stageX < 0;
6786
const shouldMoveStageRight = body.position.x > midPoint && store.stageX > -2048;
6887

69-
if (body.velocity.y === 0 || body.velocity.y < -100) {
70-
this.isJumping = false;
71-
Matter.Body.set(body, 'friction', 1);
72-
}
88+
let characterState = 2;
7389

74-
if (!this.isJumping) {
90+
if (keys.isDown(65) || gamepad.button(0, 'b')) {
91+
return this.punch();
92+
}
7593

76-
let characterState = 2;
94+
if (keys.isDown(keys.SPACE) || gamepad.button(0, 'a')) {
95+
this.jump(body);
96+
}
7797

78-
gamepad.update();
98+
if (keys.isDown(keys.UP) || gamepad.button(0, 'button 12')) {
99+
return this.enterBuilding(body);
100+
}
79101

80-
if (keys.isDown(keys.SPACE) || gamepad.button(0, 'a')) {
81-
this.jump(body);
102+
if (keys.isDown(keys.LEFT) || gamepad.button(0, 'button 14')) {
103+
if (shouldMoveStageLeft) {
104+
store.setStageX(store.stageX + 5);
82105
}
83106

84-
if (keys.isDown(keys.UP) || gamepad.button(0, 'button 12')) {
85-
this.enterBuilding(body);
107+
this.move(body, -5);
108+
109+
characterState = 1;
110+
} else if (keys.isDown(keys.RIGHT) || gamepad.button(0, 'button 15')) {
111+
if (shouldMoveStageRight) {
112+
store.setStageX(store.stageX - 5);
86113
}
87114

88-
if (keys.isDown(keys.LEFT) || gamepad.button(0, 'button 14')) {
89-
if (shouldMoveStageLeft) {
90-
store.setStageX(store.stageX + 5);
91-
}
115+
this.move(body, 5);
92116

93-
this.move(body, -5);
117+
characterState = 0;
118+
}
94119

95-
characterState = 1;
96-
} else if (keys.isDown(keys.RIGHT) || gamepad.button(0, 'button 15')) {
97-
if (shouldMoveStageRight) {
98-
store.setStageX(store.stageX - 5);
99-
}
120+
this.setState({
121+
characterState,
122+
loop: characterState < 2,
123+
});
124+
}
100125

101-
this.move(body, 5);
126+
update = () => {
127+
const { store } = this.props;
128+
const { body } = this.body;
102129

103-
characterState = 0;
104-
}
130+
const midPoint = Math.abs(store.stageX) + 448;
105131

106-
store.setCharacterPosition(body.position);
132+
const shouldMoveStageLeft = body.position.x < midPoint && store.stageX < 0;
133+
const shouldMoveStageRight = body.position.x > midPoint && store.stageX > -2048;
107134

108-
this.setState({
109-
characterState,
110-
});
135+
if (body.velocity.y === 0 || body.velocity.y < -100) {
136+
this.isJumping = false;
137+
Matter.Body.set(body, 'friction', 1);
138+
}
139+
140+
if (!this.isJumping && !this.isPunching && !this.isLeaving) {
141+
gamepad.update();
142+
143+
this.checkKeys();
144+
145+
store.setCharacterPosition(body.position);
111146
} else {
147+
if (this.isPunching && this.state.spritePlaying === false) {
148+
this.isPunching = false;
149+
}
150+
112151
const targetX = store.stageX + (this.lastX - body.position.x);
113152
if (shouldMoveStageLeft || shouldMoveStageRight) {
114153
store.setStageX(targetX);
@@ -123,14 +162,19 @@ export default class Character extends Component {
123162

124163
this.loopID = null;
125164
this.isJumping = false;
165+
this.isPunching = false;
166+
this.isLeaving = false;
126167
this.lastX = 0;
127168

128169
this.state = {
129170
characterState: 2,
171+
loop: false,
172+
spritePlaying: true,
130173
};
131174
}
132175

133176
componentDidMount() {
177+
this.jumpNoise = new AudioPlayer('/assets/jump.wav');
134178
Matter.Events.on(this.context.engine, 'afterUpdate', this.update);
135179
}
136180

@@ -163,10 +207,12 @@ export default class Character extends Component {
163207
>
164208
<Sprite
165209
animating
210+
loop={this.state.loop}
211+
onPlayStateChanged={this.handlePlayStateChanged}
166212
src="assets/character-sprite.png"
167213
scale={this.context.scale * 2}
168214
state={this.state.characterState}
169-
states={[9, 9, 0]}
215+
states={[9, 9, 0, 4, 5]}
170216
/>
171217
</Body>
172218
</div>

demo/game/index.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import React, { Component } from 'react';
1+
import React, { Component, PropTypes } from 'react';
22
import Matter from 'matter-js';
33

44
import {
5+
AudioPlayer,
56
Loop,
67
Stage,
78
KeyListener,
@@ -16,6 +17,10 @@ import GameStore from './stores/game-store';
1617

1718
export default class Game extends Component {
1819

20+
static propTypes = {
21+
onLeave: PropTypes.func,
22+
};
23+
1924
physicsInit = (engine) => {
2025
const ground = Matter.Bodies.rectangle(
2126
512 * 3, 448,
@@ -50,6 +55,9 @@ export default class Game extends Component {
5055
this.setState({
5156
fade: true,
5257
});
58+
setTimeout(() => {
59+
this.props.onLeave();
60+
}, 500);
5361
}
5462

5563
constructor(props) {
@@ -59,9 +67,15 @@ export default class Game extends Component {
5967
fade: true,
6068
};
6169
this.keyListener = new KeyListener();
70+
window.AudioContext = window.AudioContext || window.webkitAudioContext;
71+
window.context = new AudioContext();
6272
}
6373

6474
componentDidMount() {
75+
this.player = new AudioPlayer('/assets/music.wav', () => {
76+
this.stopMusic = this.player.play({ loop: true, offset: 1, volume: 0.35 });
77+
});
78+
6579
this.setState({
6680
fade: false,
6781
});
@@ -75,6 +89,7 @@ export default class Game extends Component {
7589
}
7690

7791
componentWillUnmount() {
92+
this.stopMusic();
7893
this.keyListener.unsubscribe();
7994
}
8095

demo/intro.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import React, { Component, PropTypes } from 'react';
2-
32
import Gamepad from 'html5-gamepad';
43

4+
import { AudioPlayer } from '../src';
5+
56
const gamepad = new Gamepad();
67

78
export default class Intro extends Component {
@@ -12,6 +13,7 @@ export default class Intro extends Component {
1213
startUpdate = () => {
1314
gamepad.update();
1415
if (gamepad.button(0, 'left stick')) {
16+
this.startNoise.play();
1517
this.props.onStart();
1618
return;
1719
}
@@ -20,6 +22,7 @@ export default class Intro extends Component {
2022

2123
handleKeyPress = (e) => {
2224
if (e.keyCode === 13) {
25+
this.startNoise.play();
2326
this.props.onStart();
2427
}
2528
}
@@ -33,6 +36,7 @@ export default class Intro extends Component {
3336
}
3437

3538
componentDidMount() {
39+
this.startNoise = new AudioPlayer('/assets/start.wav');
3640
window.addEventListener('keypress', this.handleKeyPress);
3741
this.animationFrame = requestAnimationFrame(this.startUpdate);
3842
this.interval = setInterval(() => {

demo/presentation.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,28 @@ import React, { Component } from 'react';
22

33
import Intro from './intro';
44
import Game from './game';
5+
import Slides from './slides';
56

67
export default class Presentation extends Component {
8+
79
handleStart = () => {
810
this.setState({
911
mode: 1,
1012
});
11-
}
13+
};
14+
15+
handleDone = () => {
16+
this.setState({
17+
mode: 1,
18+
});
19+
};
20+
21+
handleLeave = () => {
22+
this.setState({
23+
mode: 3,
24+
});
25+
};
26+
1227
constructor(props) {
1328
super(props);
1429

@@ -20,11 +35,16 @@ export default class Presentation extends Component {
2035
let componentToRender;
2136
switch (this.state.mode) {
2237
case 0: {
23-
componentToRender = <Intro onStart={this.handleStart}/>;
38+
componentToRender = <Intro onStart={this.handleStart} />;
2439
break;
2540
}
2641
case 1: {
27-
componentToRender = <Game />;
42+
componentToRender = <Game onLeave={this.handleLeave} />;
43+
break;
44+
}
45+
case 3: {
46+
componentToRender = <Slides onDone={this.handleDone} />;
47+
break;
2848
}
2949
}
3050
return componentToRender;

demo/slides/index.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import React, { Component, PropTypes } from 'react';
2+
import Gamepad from 'html5-gamepad';
3+
4+
const gamepad = new Gamepad();
5+
6+
export default class Slides extends Component {
7+
8+
static propTypes = {
9+
onDone: PropTypes.func,
10+
};
11+
12+
startUpdate = () => {
13+
gamepad.update();
14+
if (gamepad.button(0, 'y')) {
15+
this.props.onDone();
16+
return;
17+
}
18+
this.animationFrame = requestAnimationFrame(this.startUpdate);
19+
}
20+
21+
handleKeyPress = (e) => {
22+
if (e.keyCode === 27) {
23+
this.props.onDone();
24+
}
25+
}
26+
27+
constructor(props) {
28+
super(props);
29+
}
30+
31+
componentDidMount() {
32+
window.addEventListener('keypress', this.handleKeyPress);
33+
this.animationFrame = requestAnimationFrame(this.startUpdate);
34+
}
35+
36+
componentWillUnmount() {
37+
window.removeEventListener('keypress', this.handleKeyPress);
38+
cancelAnimationFrame(this.animationFrame);
39+
}
40+
41+
render() {
42+
return (
43+
<div>
44+
<p>Ayy whatup</p>
45+
</div>
46+
);
47+
}
48+
}

public/assets/background.wav

1.24 MB
Binary file not shown.

public/assets/character-sprite.png

4.59 KB
Loading

public/assets/jt.wav

552 KB
Binary file not shown.

public/assets/jump.wav

86.8 KB
Binary file not shown.

0 commit comments

Comments
 (0)