You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
 
 
 
 

111 lines
2.8 KiB

import { SystemBuilder } from "../skama_code/api/system.js";
import { Position } from "../skama_code/commun/position.js";
import menu_mod from "./menu_mod.js";
let canvas;
let last_target;
let offset = {
x: 2,
y: 2,
};
let max = 100;
let w = (window.innerWidth / 10) * 9;
let h = (window.innerHeight / 4) * 3;
function animate() {
canvas.renderAll();
setTimeout(animate, 1000);
}
function draw_planet(planet) {
let shadow = new fabric.Shadow({
color: "white",
blur: 5,
offsetX: 0,
offsetY: 0,
});
fabric.Image.fromURL(
"/assets/planets/planetproto.png",
function (img_planet) {
//FABRICJS
img_planet.set({
selectable: false,
shadow: shadow,
left: planet.position.x / offset.x + w / 2,
top: planet.position.y / offset.y + h / 2,
name: planet.name,
type: planet.type,
});
canvas.add(img_planet);
}
);
}
function offsetOrbit(planet) {
if (planet.orbits) {
console.log("Orbits");
let x = Math.floor(Math.random() * max - Math.random() * max);
let y = Math.floor(Math.random() * max - Math.random() * max);
planet.position.move(new Position(x, y));
}
}
export default function system(system, temp_engine) {
temp_engine.after_render((temp_engine) => {
$("#sys-name").text(system);
menu_mod(temp_engine);
canvas = new fabric.Canvas("canvas", {
width: w,
height: h,
backgroundColor: "rgb(7, 18, 41)",
renderOnAddRemove: false,
hoverCursor: "pointer",
});
SystemBuilder.get(system, (system) => {
system.list_all(
(planets) => {
planets.forEach((planet) => {
offsetOrbit(planet);
draw_planet(planet);
});
animate();
},
(err) => {
console.log(err);
}
);
});
canvas.on("mouse:up", (e) => {
if (e.target.shadow.color == "red") {
e.target.shadow.color = "white";
} else {
e.target.shadow.color = "red";
}
if (last_target) last_target.shadow.color = "white";
last_target = e.target;
canvas.renderAll();
});
$(window).on("resize", () => {
canvas.setWidth((window.innerWidth / 10) * 9);
canvas.setHeight((window.innerHeight / 4) * 3);
canvas.renderAll();
});
canvas.on("mouse:wheel", (opt) => {
let scale = 1.1;
if (opt.e.deltaY < 0) {
canvas.zoomToPoint(
new fabric.Point(canvas.width / 2, canvas.height / 2),
canvas.getZoom() * scale
);
} else if (opt.e.deltaY > 0) {
canvas.zoomToPoint(
new fabric.Point(canvas.width / 2, canvas.height / 2),
canvas.getZoom() / scale
);
}
});
});
temp_engine.render("templates/systems/system.html");
}