react-native-donkey-kong
Version:
Donkey Kong remake using react-native-game-engine
92 lines (86 loc) • 2.45 kB
JavaScript
import React, { Component } from "react";
import { StyleSheet, Image } from "react-native";
import { collisionCategories } from "../../utils/constants";
import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource';
import Matter from "matter-js";
import MarioIdling from "./mario-idling.gif";
import MarioWalking from "./mario-walking.gif";
import MarioJumping from "./mario-jumping.gif";
import MarioHolding from "./mario-holding.gif";
import MarioClimbing from "./mario-climbing.gif";
import MarioRising from "./mario-rising.gif";
import MarioDead from "./mario-dead.gif";
export class Renderer extends Component {
render() {
const source = this.props.actions[this.props.action];
const { width, height } = source;
const body = this.props.body;
const x = body.position.x - width / 2;
const y = body.position.y - height / 2;
const angle = body.angle;
const direction = this.props.direction.horizontal;
return (
<Image
source={source}
style={[
styles.mario,
{
left: x,
top: y,
transform: [
{ rotateZ: angle + "rad" },
{ rotateY: (direction === "right" ? 180 : 0) + "deg" }
]
}
]}
/>
);
}
}
const styles = StyleSheet.create({
mario: {
position: "absolute"
}
});
export default (world, pos) => {
let width = 30;
let height = 40;
let body = Matter.Bodies.rectangle(pos.x, pos.y, width, height, {
density: 0.8,
frictionAir: 0.2,
friction: 1,
collisionFilter: {
category: collisionCategories.mario,
mask:
collisionCategories.barrier |
collisionCategories.platform |
collisionCategories.barrel
}
});
Matter.World.add(world, [body]);
return {
body,
size: { width, height },
controls: {
gestures: {},
mode: "platform"
},
direction: {
horizontal: "right",
vertical: "up"
},
action: "idling",
actions: {
idling: resolveAssetSource(MarioIdling),
walking: resolveAssetSource(MarioWalking),
jumping: resolveAssetSource(MarioJumping),
holding: resolveAssetSource(MarioHolding),
climbing: resolveAssetSource(MarioClimbing),
rising: resolveAssetSource(MarioRising),
dead: resolveAssetSource(MarioDead)
},
"power-ups": {},
animations: {},
renderer: <Renderer />
};
};