You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.7 KiB
JavaScript
47 lines
1.7 KiB
JavaScript
import {Component} from "preact";
|
|
import Bar from "./Bar";
|
|
import {colorFromName} from "../utils";
|
|
|
|
export default class Player extends Component {
|
|
state = {
|
|
head: null,
|
|
color: null,
|
|
};
|
|
|
|
async componentDidMount() {
|
|
let player = this.props.player;
|
|
this.setState({color: colorFromName(player.name)});
|
|
try {
|
|
let render = await this.props.renderer.render([player.head, player.hair]);
|
|
this.setState({head: URL.createObjectURL(render)});
|
|
} catch (e) {
|
|
this.setState({head: null});
|
|
}
|
|
}
|
|
|
|
render({player, map}, {head, color}, context) {
|
|
return <div className="player">
|
|
<div className="name" onClick={() => map.show(player.position)}>
|
|
<span className="dot" style={{backgroundColor: color}}/>
|
|
{player.name + " "}
|
|
<span className="level">lvl. {player.level}</span>
|
|
</div>
|
|
{head ?
|
|
<div className="head">
|
|
<img src={head} alt=""/>
|
|
</div> : null}
|
|
<div className="location">
|
|
{player.isOutside ? null : <><img alt="[Inside]" src="img/house.png"/> <span>{player.cell}</span></>}
|
|
</div>
|
|
<div className="health">
|
|
<Bar current={player.health} base={player.healthBase} type="health"/>
|
|
</div>
|
|
<div className="magicka">
|
|
<Bar current={player.magicka} base={player.magickaBase} type="magicka"/>
|
|
</div>
|
|
<div className="fatigue">
|
|
<Bar current={player.fatigue} base={player.fatigueBase} type="fatigue"/>
|
|
</div>
|
|
</div>
|
|
}
|
|
} |