SinCos
SinCos is my space game.
Size: 4KB
by Станислав Некрасов
HTML
<style>
body {
margin: 0;
overflow: hidden
}
</style>
<canvas style="background: #000;"></canvas>
<script>
// Первая обёртка
(function (canvas, width, height, oldTime) {
// При изменении размеров экрана
(window.onresize = function() {
width = canvas.width = window.innerWidth;
height = canvas.height = window.innerHeight;
})();
// Вторая обёртка
(function (context) {
// Функции для получения координат точки
var getModelX = (x, size, angle, radius, offset) =>
+(x + size * radius * Math.cos(angle + offset * Math.PI)).toFixed(2);
var getModelY = (y, size, angle, radius, offset) =>
+(y + size * radius * Math.sin(angle + offset * Math.PI)).toFixed(2);
var getRealPoints = ({x, y, model, size, angle}) => {
var xp = [], yp = [];
for (var n = 0; n < model.length; n++) {
xp.push(getModelX(x, size, angle, model[n][0], model[n][1]));
yp.push(getModelY(y, size, angle, model[n][0], model[n][1]));
}
return [xp, yp];
}
// Функция для рисования фигур
var drawFigure = (x, y, angle, points,
size=1, color='#fff') => {
context.fillStyle = color;
context.beginPath();
points.forEach(([radius, offset]) => {
context.lineTo(
camera.zoom * (camera.dx + getModelX(x, size, angle, radius, offset)),
camera.zoom * (camera.dy + getModelY(y, size, angle, radius, offset))
)
});
context.fill();
};
// Функция для проверки принадлежности точки полигону
var pointInPolygon = (x, y, polygonPoints) => {
var xp = polygonPoints[0], yp = polygonPoints[1];
pointsNum = xp.length;
j = pointsNum - 1;
var c = 0;
for (i = 0; i < pointsNum; i++){
if ((((yp[i]<=y) && (y<yp[j])) || ((yp[j]<=y) && (y<yp[i]))) && (x > (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i])) {
c = !c;
...