inital commmit
This commit is contained in:
commit
2206867ee0
4 files changed
+587
No files matched your search
@@ -0,0 +1,5 @@
|
||||
*.tps
|
||||
*.kra
|
||||
*.png~
|
||||
*.jpg~
|
||||
*.mp4
|
||||
@@ -0,0 +1,6 @@
|
||||
{// Folder-specific settings
|
||||
//
|
||||
// For a full list of overridable settings, and general information on folder-specific settings,//zed.dev/docs/configuring-zed#settings-files
|
||||
"preferred_line_length": 180,
|
||||
"show_wrap_guides": true
|
||||
}
|
||||
Executable
+576
@@ -0,0 +1,576 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Resistance Racing 2025</title>
|
||||
<!--<script src="https://code.jquery.com/jquery-3.6.0.min.js"
|
||||
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>-->
|
||||
<script src="./lib/jquerySlim.js"></script>
|
||||
<script src="./lib/phaser.min.js"></script>
|
||||
<script src="./lib/howler.min.js"></script>
|
||||
<script src="src/inputs.js"></script>
|
||||
<script src="src/racingSounds.js"></script>
|
||||
<!--<script src="src/shaderGreenscale.js"></script>-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script>
|
||||
const SAVEGAMENAME = "rr25";
|
||||
const CONSTANT = {
|
||||
FOO: 0,
|
||||
BAR: 1,
|
||||
};
|
||||
const HALFPI = Math.PI * 0.5;
|
||||
|
||||
const PLAYERMODE = {
|
||||
LOOK: 0,
|
||||
INTERACT: 1,
|
||||
DIALOGUE: 2,
|
||||
CUTSCENE: 3,
|
||||
SHIP: 4,
|
||||
};
|
||||
const PLAYERMOVE = {
|
||||
STAND: 0,
|
||||
WALK: 1,
|
||||
RUN: 2,
|
||||
SIT: 3,
|
||||
LIE: 4,
|
||||
CROUCH: 5,
|
||||
SHIP: 6,
|
||||
};
|
||||
|
||||
const DRAWMODE = {
|
||||
D3D: 0,
|
||||
D2D: 1,
|
||||
NOSCALE2D: 2,
|
||||
BILLBOARD: 3,
|
||||
BILLBOARD3D: 4,
|
||||
};
|
||||
|
||||
const GLYPHS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,";
|
||||
|
||||
let globalOrientation = {
|
||||
alpha: null,
|
||||
beta: 0,
|
||||
gamma: 0,
|
||||
};
|
||||
let offsetOrientation = {
|
||||
yaw: Math.PI * -0.5,
|
||||
pitch: 0,
|
||||
roll: 0,
|
||||
};
|
||||
let isMobile = false;
|
||||
|
||||
let rando = null;
|
||||
|
||||
let view = {
|
||||
full: {
|
||||
width: 0,
|
||||
height: 0,
|
||||
},
|
||||
half: {
|
||||
widht: 0,
|
||||
height: 0,
|
||||
},
|
||||
};
|
||||
|
||||
let OPTIONS = {
|
||||
sound: {
|
||||
master: 0.75,
|
||||
music: 0.75,
|
||||
sfx: 0.75,
|
||||
speech: 0.75,
|
||||
mute: false,
|
||||
},
|
||||
effects: {
|
||||
screenshake: 1,
|
||||
shader: true,
|
||||
viewDistWalk: 1,
|
||||
viewDistShip: 1,
|
||||
fov: 1,
|
||||
},
|
||||
controls: {
|
||||
mouse: {
|
||||
sensitivity: 3,
|
||||
},
|
||||
mobile: false,
|
||||
},
|
||||
config: {
|
||||
preferredCam: 0,
|
||||
collisionRadar: 1,
|
||||
idealLine: 1,
|
||||
hideUI: false,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
let deltaAdapter = {
|
||||
interval: null,
|
||||
last: 0,
|
||||
current: 0,
|
||||
//diff: 0,
|
||||
}
|
||||
deltaAdapter.interval = setInterval(() => {
|
||||
deltaAdapter.last = deltaAdapter.current;
|
||||
deltaAdapter.current = Date.now();
|
||||
//deltaAdapter.diff = deltaAdapter.current - deltaAdapter.last;
|
||||
}, 1000)
|
||||
*/
|
||||
|
||||
function getNegDir(_dir) {
|
||||
let d = _dir + 2;
|
||||
if (d > 3) {
|
||||
d -= 4;
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
function normAngle(_val) {
|
||||
let v = _val;
|
||||
while (v > Math.PI) {
|
||||
v -= Math.PI * 2;
|
||||
}
|
||||
while (v < Math.PI * -1) {
|
||||
v += Math.PI * 2;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
function zeroPad(_num, _pad) {
|
||||
let str = String(_num);
|
||||
for (let i = str.length; i < _pad; i++) {
|
||||
str = "0" + str;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
function timeToLapTime(_time) {
|
||||
let allSeconds = _time / 1000;
|
||||
let allMinutes = Math.floor(allSeconds / 60);
|
||||
let displaySeconds = Math.floor(allSeconds % 60);
|
||||
let displayMinutes = allMinutes;
|
||||
let displayMilliss = Math.floor((allSeconds % 1) * 10000);
|
||||
return zeroPad(displayMinutes, 2) + ":" + zeroPad(displaySeconds, 2) + ":" + zeroPad(displayMilliss, 4);
|
||||
}
|
||||
|
||||
let game = null;
|
||||
|
||||
let urlParams = new URLSearchParams(window.location.search);
|
||||
let ref = urlParams.get("ref");
|
||||
|
||||
//shader
|
||||
//let greenscalePipeline;
|
||||
|
||||
//adds
|
||||
let rti, pip, eud, gl_vec3, gl_vec4, gl_quat, gl_mat3, gl_rvaa, flagManager;
|
||||
|
||||
//orientation
|
||||
function orientationHandler(_ev) {
|
||||
globalOrientation.alpha = _ev.alpha;
|
||||
globalOrientation.beta = _ev.beta;
|
||||
globalOrientation.gamma = _ev.gamma;
|
||||
}
|
||||
window.addEventListener("deviceorientation", orientationHandler);
|
||||
|
||||
function getRotationMatrix(_alpha, _beta, _gamma) {
|
||||
let degtorad = Math.PI / 180; // Degree-to-Radian conversion
|
||||
let cX = Math.cos(_beta * degtorad);
|
||||
let cY = Math.cos(_gamma * degtorad);
|
||||
let cZ = Math.cos(_alpha * degtorad);
|
||||
let sX = Math.sin(_beta * degtorad);
|
||||
let sY = Math.sin(_gamma * degtorad);
|
||||
let sZ = Math.sin(_alpha * degtorad);
|
||||
|
||||
let m11 = cZ * cY - sZ * sX * sY;
|
||||
let m12 = -cX * sZ;
|
||||
let m13 = cY * sZ * sX + cZ * sY;
|
||||
|
||||
let m21 = cY * sZ + cZ * sX * sY;
|
||||
let m22 = cZ * cX;
|
||||
let m23 = sZ * sY - cZ * cY * sX;
|
||||
|
||||
let m31 = -cX * sY;
|
||||
let m32 = sX;
|
||||
let m33 = cX * cY;
|
||||
|
||||
return [m13, m11, m12, m23, m21, m22, m33, m31, m32];
|
||||
}
|
||||
|
||||
function getEulerAngles(_matrix) {
|
||||
let radtodeg = 180 / Math.PI; // Radian-to-Degree conversion
|
||||
let sy = Math.sqrt(_matrix[0] * _matrix[0] + _matrix[3] * _matrix[3]);
|
||||
|
||||
let singular = sy < 1e-6; // If
|
||||
|
||||
let x = 0;
|
||||
let y = 0;
|
||||
let z = 0;
|
||||
if (!singular) {
|
||||
x = Math.atan2(_matrix[7], _matrix[8]);
|
||||
y = Math.atan2(-_matrix[6], sy);
|
||||
z = Math.atan2(_matrix[3], _matrix[0]);
|
||||
} else {
|
||||
x = Math.atan2(-_matrix[5], _matrix[4]);
|
||||
y = Math.atan2(-_matrix[6], sy);
|
||||
z = 0;
|
||||
}
|
||||
return [radtodeg * x, radtodeg * y, radtodeg * z];
|
||||
}
|
||||
|
||||
//savegame
|
||||
function saveOptions() {
|
||||
let save = JSON.parse(localStorage.getItem(SAVEGAMENAME));
|
||||
save.sound.mute = OPTIONS.sound.mute;
|
||||
localStorage.setItem(SAVEGAMENAME, JSON.stringify(save));
|
||||
}
|
||||
|
||||
function loadOptions() {
|
||||
let save = JSON.parse(localStorage.getItem(SAVEGAMENAME));
|
||||
OPTIONS.sound.mute = save.sound.mute;
|
||||
}
|
||||
|
||||
//gamepads
|
||||
let gamepads = {};
|
||||
let gamepadsConnected = 0;
|
||||
function gamepadHandler(_event, _connecting) {
|
||||
var gamepad = _event.gamepad;
|
||||
// Note:
|
||||
// gamepad === navigator.getGamepads()[gamepad.index]
|
||||
|
||||
if (_connecting) {
|
||||
gamepads[gamepad.index] = gamepad;
|
||||
console.log(gamepad);
|
||||
gamepadsConnected += 1;
|
||||
} else {
|
||||
delete gamepads[gamepad.index];
|
||||
gamepadsConnected -= 1;
|
||||
console.log(gamepad);
|
||||
}
|
||||
}
|
||||
window.addEventListener(
|
||||
"gamepadconnected",
|
||||
function (e) {
|
||||
gamepadHandler(e, true);
|
||||
},
|
||||
false,
|
||||
);
|
||||
window.addEventListener(
|
||||
"gamepaddisconnected",
|
||||
function (e) {
|
||||
gamepadHandler(e, false);
|
||||
},
|
||||
false,
|
||||
);
|
||||
|
||||
window.addEventListener("gamepadconnected", (e) => {
|
||||
console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.", e.gamepad.index, e.gamepad.id, e.gamepad.buttons.length, e.gamepad.axes.length);
|
||||
});
|
||||
|
||||
//disable right clicking
|
||||
document.addEventListener("contextmenu", (event) => event.preventDefault());
|
||||
</script>
|
||||
<script type="module">
|
||||
import Preloader from "./src/preloader.js";
|
||||
import ScnLoad from "./src/scnLoad.js";
|
||||
import Scn3d from "./src/scn3d.js";
|
||||
import ScnMainMenu from "./src/scnMainMenu.js";
|
||||
import ScnSavegameCheck from "./src/scnSavegameCheck.js";
|
||||
|
||||
import RTI from "./src/additionalMath/rayTriangleIntersection.js";
|
||||
import PIP from "./src/additionalMath/pointInPolygon.js";
|
||||
import EuclidianDistance from "./src/additionalMath/euclidianDistance.js";
|
||||
import GL_Vec3 from "./src/additionalMath/gl_vec3.js";
|
||||
import GL_Vec4 from "./src/additionalMath/gl_vec4.js";
|
||||
import GL_Quat from "./src/additionalMath/gl_quat.js";
|
||||
import GL_Mat3 from "./src/additionalMath/gl_mat3.js";
|
||||
import GL_RVAA from "./src/additionalMath/gl_rvaa.js";
|
||||
|
||||
import FlagManager from "./src/flagManager.js";
|
||||
|
||||
let ratio = Math.max(0.5, Math.min(1.77, window.innerWidth / window.innerHeight));
|
||||
//alert(ratio)
|
||||
let w = 512;
|
||||
let h = Math.floor(w / ratio);
|
||||
console.log(w + " x " + h);
|
||||
|
||||
var config = {
|
||||
type: Phaser.AUTO,
|
||||
width: w, //512
|
||||
height: h, //320
|
||||
render: {
|
||||
antialias: false,
|
||||
roundPixels: true,
|
||||
pixelArt: true,
|
||||
},
|
||||
scale: {
|
||||
autoCenter: true,
|
||||
mode: Phaser.Scale.FIT,
|
||||
},
|
||||
seed: ["hugging"],
|
||||
scene: [Preloader(), ScnLoad, Scn3d, ScnSavegameCheck],
|
||||
input: {
|
||||
smoothFactor: 0.199, //prev .99
|
||||
},
|
||||
};
|
||||
game = new Phaser.Game(config);
|
||||
|
||||
rti = new RTI();
|
||||
pip = new PIP();
|
||||
eud = new EuclidianDistance();
|
||||
gl_vec3 = new GL_Vec3();
|
||||
gl_vec4 = new GL_Vec4();
|
||||
gl_quat = new GL_Quat();
|
||||
gl_mat3 = new GL_Mat3();
|
||||
gl_rvaa = new GL_RVAA();
|
||||
|
||||
let showControls = true;
|
||||
flagManager = new FlagManager();
|
||||
|
||||
/*
|
||||
$("#editorbox").hide();
|
||||
$("#infotext").hide();
|
||||
$("#btnControls").on("click", () => {
|
||||
showControls = !showControls;
|
||||
if (showControls === true) {
|
||||
$("#infotext").show();
|
||||
} else {
|
||||
$("#infotext").hide();
|
||||
}
|
||||
});
|
||||
$("#mouse_sensitivity").change(() => {
|
||||
OPTIONS.controls.mouse.sensitivity = Number($("#mouse_sensitivity").val());
|
||||
});
|
||||
*/
|
||||
</script>
|
||||
|
||||
<!--
|
||||
<div id="videoHolder" class="videoHolder">
|
||||
<video id="trailer" width="100%" height="100%" loop>
|
||||
<source src="assets/video/rrTrailer00b.mp4" type="video/mp4" />
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
</div>
|
||||
--
|
||||
|
||||
<script>
|
||||
/*
|
||||
$(".videoHolder").hide();
|
||||
$(".videoHolder").on("click", (_ev) => {
|
||||
_ev.stopPropagation();
|
||||
$(".videoHolder").hide();
|
||||
$("#trailer")[0].pause();
|
||||
$("#trailer")[0].currentTime = 0;
|
||||
|
||||
for (let s of game.scene.scenes[2].soundManager.musicRef) {
|
||||
s.howlGroup.volume(OPTIONS.sound.music);
|
||||
}
|
||||
});
|
||||
*/
|
||||
</script>
|
||||
|
||||
<!--
|
||||
<div id="onScreenControls" class="onScreenControls">
|
||||
<p style="color: red">NOT YET SUPPORTED</p>
|
||||
<div class="altCtrlGrid">
|
||||
<span></span>
|
||||
<button class="altCtrlBtn">↩️</button>
|
||||
<button class="altCtrlBtn">🔼</button>
|
||||
<button class="altCtrlBtn">↪️</button>
|
||||
<span></span>
|
||||
<button class="altCtrlBtn">👆</button>
|
||||
<button class="altCtrlBtn">❌</button>
|
||||
<span></span>
|
||||
<span></span>
|
||||
<button class="altCtrlBtn">◀️</button>
|
||||
<button class="altCtrlBtn">🔽</button>
|
||||
<button class="altCtrlBtn">▶️</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="editorbox" class="editorbox">
|
||||
<button id="btnPrintModel">print model</button>
|
||||
<button id="btnNewModel">new model</button>
|
||||
<button id="btnControls">controls</button>
|
||||
|
||||
<div id="infotext" class="infotext">
|
||||
<table id="infotabel" class="infotable">
|
||||
<tr>
|
||||
<td>Q + E</td>
|
||||
<td>toggle edit mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>W / A / S / D</td>
|
||||
<td>move</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SPACE / C</td>
|
||||
<td>move up / down</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ARROWKEYS</td>
|
||||
<td>look around</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>N</td>
|
||||
<td>duplicate quad</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1 / 2 / 3 / 4</td>
|
||||
<td>(de)select quad corner</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td>toggle all selected quad corners</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>T + mousewheel</td>
|
||||
<td>flip through texture</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>T + X / Y</td>
|
||||
<td>flip through texture</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Z + mousewheel</td>
|
||||
<td>flip through texturebank</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Z + X / Y</td>
|
||||
<td>flip through texturebank</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>I / K</td>
|
||||
<td>move selected corner forward / back</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>J / L</td>
|
||||
<td>move selected corners left / right</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>U / O</td>
|
||||
<td>move selected corners up / down</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>X / Y</td>
|
||||
<td>rotate quad</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Q + M</td>
|
||||
<td>toggle edit collisionquads</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>M</td>
|
||||
<td>show / hide collisionquads</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>G + Mousewheel</td>
|
||||
<td>change gridsize</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="optionbox" class="editorbox infotext">
|
||||
<input type="range" id="mouse_sensitivity" min="1" max="5" value="3">Mouse Sensitivity</input>
|
||||
</div>
|
||||
|
||||
-->
|
||||
</body>
|
||||
|
||||
<style>
|
||||
body {
|
||||
overflow: hidden;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #131313;
|
||||
}
|
||||
|
||||
.editorbox {
|
||||
position: absolute;
|
||||
display: none;
|
||||
padding: 1em;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.infotext {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.infotable td {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.bookSearch {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
padding: 1em;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.onScreenEditor {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.onScreenControls {
|
||||
position: absolute;
|
||||
display: none;
|
||||
width: 100%;
|
||||
height: 25%;
|
||||
top: 75%;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
z-index: 100;
|
||||
font-size: 1em;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.videoHolder {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
background-color: #000000;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 100;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.arcadeItch {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.arcadeItch > iframe {
|
||||
border: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.altCtrlGrid {
|
||||
display: grid;
|
||||
grid-template-rows: 1fr 1fr;
|
||||
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
||||
gap: 0.1em;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.altCtrlBtn {
|
||||
background-color: #333333;
|
||||
font-size: 5em;
|
||||
opacity: 0.5;
|
||||
stroke-opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.altCtrlBtn:hover {
|
||||
background-color: #88aa88;
|
||||
}
|
||||
</style>
|
||||
</html>
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 484 B |
Reference in new issue
Block a user