88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
import {canvas, context} from './index.mjs';
|
|
import * as graphics from './index.mjs';
|
|
import {images as assets} from '../assets.mjs';
|
|
import * as world from '../world/index.mjs';
|
|
import {state} from '../game/index.mjs';
|
|
|
|
export function render() {
|
|
world.particles.forEach(renderParticle);
|
|
world.celestials.forEach(renderCelestial);
|
|
if (graphics.trace) world.tracers.forEach(renderTracer);
|
|
world.ships.forEach(renderShip);
|
|
world.entities.forEach(renderEntity);
|
|
|
|
/*
|
|
if (typeof window.q === 'undefined') window.q = [];
|
|
q.forEach(p => {
|
|
context.fillStyle = p[2];
|
|
context.fillRect(p[0] - 0.05, p[1] - 0.05, 0.1, 0.1);
|
|
});
|
|
*/
|
|
}
|
|
|
|
function renderParticle(particle) {
|
|
context.fillStyle = particle.color;
|
|
context.fillRect(...particle.com, particle.size, particle.size);
|
|
}
|
|
|
|
function renderEntity(entity) {
|
|
context.save();
|
|
context.translate(...entity.com);
|
|
if (graphics.perspective.zoom < 2 && graphics.markers) {
|
|
context.globalAlpha = 0.7 / graphics.perspective.zoom;
|
|
context.beginPath();
|
|
context.arc(0, 0, 4, 0, 2 * Math.PI);
|
|
context.lineWidth = 1;
|
|
context.strokeStyle = '#31911b';
|
|
if (entity.type === 'fuelcan')
|
|
context.strokeStyle = '#af4021';
|
|
context.stroke();
|
|
context.globalAlpha = 1;
|
|
}
|
|
context.rotate(entity.r);
|
|
context.drawImage(entity.image, -0.5, -0.5, 1, 1);
|
|
context.restore();
|
|
}
|
|
|
|
function renderShip(ship) {
|
|
context.save();
|
|
context.translate(...ship.com);
|
|
context.rotate(ship.r);
|
|
let [cx, cy] = ship.localCom;
|
|
context.translate(-cx, -cy);
|
|
ship.modules.forEach(m => {
|
|
let [mx, my] = [m.x, m.y];
|
|
if (state.editing) {
|
|
|
|
}
|
|
context.drawImage(m.currentImage, m.x, m.y, 1, 1);
|
|
});
|
|
context.restore();
|
|
}
|
|
|
|
const celestialImages = {
|
|
green: Object.values(assets.celestials.green)
|
|
}
|
|
|
|
function renderCelestial(cel) {
|
|
context.drawImage(cel.image, cel.x, cel.y,
|
|
cel.diameter, cel.diameter);
|
|
}
|
|
|
|
function renderTracer(tracer) {
|
|
context.lineWidth = 0.1;
|
|
context.strokeStyle = '#fff';
|
|
context.beginPath();
|
|
context.moveTo(...tracer.pos);
|
|
let path = tracer.path;
|
|
|
|
for (let i = 0; i < path.length; i++) {
|
|
context.lineTo(...path[i]);
|
|
if (i % 5 === 0 || i == path.length - 1) {
|
|
context.stroke();
|
|
context.globalAlpha = (1 - (i / path.length)) * 0.5;
|
|
}
|
|
}
|
|
|
|
context.globalAlpha = 1;
|
|
}
|