SC CODE: // Copyright 2024. Civilware. All rights reserved.
// TELA Decentralized Web Document (TELA-DOC-1)
Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("nameHdr", "input.js")
31 STORE("descrHdr", "Input JS file")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "input.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "")
36 STORE("fileCheckC", "2f23066e34fbf4c016eae3d2e824aaeab425e2d1c7e6e6f807c57e46ec2e2b82")
37 STORE("fileCheckS", "180391f0904322f9d87fa36ebddbb1bfdb339388dea71b3733536973589da951")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*window.addEventListener("load", resizeSVG);
window.addEventListener("resize", resizeSVG);
window.addEventListener("keyup", e => {
keys[e.key] = false;
});
window.addEventListener("wheel", e => {
if (e.deltaY < 0) zoom *= 0.9; // zoom in
else zoom *= 1.1; // zoom out
zoom = Math.max(0.2, Math.min(zoom, 5)); // clamp
});
window.addEventListener("keydown", e => {
if (e.code === "Escape") togglePause();
keys[e.key] = true;
if (game.state === STATE.MENU) {
if (!audioCtx) {
initAudio();
}
if (e.code === "Enter") setState(STATE.MISSION_SELECT);
}
else if (game.state === STATE.MISSION_SELECT) {
if (e.code === "Digit1") startMission(1);
if (e.code === "Digit2") startMission(2);
if (e.code === "Digit3") startMission(3);
if (e.code === "Digit4") startMission(4)
}
else if (game.state === STATE.DEAD) {
if (e.code === "KeyR") startMission(game.mission);
}
else if (game.state === STATE.WIN) {
if (e.code === "Enter") {
if(scenario.id == Object.keys(getScenario()).length) {
setState(STATE.MENU);
}else{
startMission(scenario.id + 1);
}
}
}
});
function angleDiff(a, b) {
let d = a - b;
while (d > Math.PI) d -= Math.PI * 2;
while (d < -Math.PI) d += Math.PI * 2;
return d;
}
function pollGamepad() {
const gp = navigator.getGamepads()[0];
if (!gp) return null;
return gp;
}
// one press only
let prevStartPressed = false;
let prevUpPressed = false;
let prevDownPressed = false;
function handleGamepadInput(player, gp, dt) {
let turnInput = 0;
let moveInput = 0;
// --- LEFT STICK: HULL MOVEMENT ---
const lx = gp.axes[0];
const ly = gp.axes[1];
const lmag = Math.hypot(lx, ly);
if (lmag > 0.2) {
// steering
turnInput = lx * 0.08;
// forward/back
moveInput = (-ly) * player.speed * dt;
}
// --- RIGHT STICK: TURRET AIM (smooth) ---
const rx = gp.axes[2];
const ry = gp.axes[3];
const rmag = Math.hypot(rx, ry);
if (rmag > 0.25) {
const stickAngle = Math.atan2(ry, rx);
const desiredOffset = stickAngle - player.angle;
const diff = angleDiff(desiredOffset, player.turret.offset);
const maxTurn = player.turret.turnSpeed * dt;
if (Math.abs(diff) <= maxTurn) {
player.turret.offset = desiredOffset;
} else {
player.turret.offset += Math.sign(diff) * maxTurn;
}
}
const startPressed = gp.buttons[9].pressed;
const upPressed = gp.buttons[12].pressed;
const downPressed = gp.buttons[13].pressed;
// --- FIRE MAIN GUN (RT) ---
if (gp.buttons[6].value > 0.5) fire();
// --- FIRE TURRET GUN (LT) ---
if (gp.buttons[7].value > 0.5) fireTurretBullet();
if(game.state === STATE.PLAYING || game.state === STATE.PAUSED){
// --- PAUSE (Start) ---
if (startPressed && !prevStartPressed) {
togglePause();
}
if(game.state === STATE.PLAYING){// zoom
if (upPressed) zoom *= 0.98; // D-pad up
if (downPressed) zoom *= 1.02; // D-pad down
}else if(game.state === STATE.PAUSED){// volume
if (gp.buttons[14].pressed) volume -= 0.02; // D-pad left
if (gp.buttons[15].pressed) volume += 0.02; // D-pad right
volume = Math.max(0, Math.min(1, volume));
}
} else if (game.state === STATE.DEAD) {
if (startPressed && !prevStartPressed) startMission(game.mission);
} else if (game.state === STATE.WIN) {
if (startPressed && !prevStartPressed) {
if(scenario.id == Object.keys(getScenario()).length) {
setState(STATE.MENU);
}else{
startMission(scenario.id + 1);
}
}
} else if (game.state === STATE.MISSION_SELECT) {
if (levelSelector > 1 ){
if (upPressed && !prevUpPressed) --levelSelector;
}
if(levelSelector < Object.keys(getScenario()).length){
if (downPressed && !prevDownPressed) ++levelSelector;
}
if (startPressed && !prevStartPressed) {
startMission(levelSelector);
}
}
prevStartPressed = startPressed;
prevUpPressed = upPressed;
prevDownPressed = downPressed;
return { turnInput, moveInput };
}
//----------
// Get Input
function gatherInput(dt) {
if (game.state === STATE.MENU) return;
const move = game.player.speed * dt;
const turn = 0.004 * dt;
game.player.turnInput = 0;
if (keys["a"]) game.player.turnInput -= turn;
if (keys["d"]) game.player.turnInput += turn;
game.player.moveInput = 0;
if (keys["w"]) game.player.moveInput += move;
if (keys["s"]) game.player.moveInput -= move;
const t = game.player.turret;
if(keys['l'])t.offset -= t.turnSpeed * dt;
if(keys["'"])t.offset += t.turnSpeed * dt;
if (keys[" "]) fire();
if (keys[";"]) fireTurretBullet();
if (keys['l'] || keys["'"]) return;
if(game.state === STATE.PAUSED){
if (keys["a"]) volume -= 0.02; // a - left
if (keys["d"]) volume += 0.02; // d - right
volume = Math.max(0, Math.min(1, volume));
}
const gp = pollGamepad();
if (gp) {
const g = handleGamepadInput(game.player, gp, dt);
if(game.state === STATE.PLAYING){
// override keyboard if gamepad is active
if (g.turnInput !== 0 || g.moveInput !== 0) {
game.player.turnInput = g.turnInput;
game.player.moveInput = g.moveInput;
}
}
}
}
function applyPlayerIntent(dt) {
const p = game.player;
const t = game.player.turret;
// apply rotation
p.angle += p.turnInput;
t.angle = p.angle + t.offset;
// apply movement
p.x += Math.cos(p.angle) * p.moveInput;
p.y += Math.sin(p.angle) * p.moveInput;
//cool weapons down
if (p.cooldown > 0) p.cooldown -= dt;
if (t.cooldown > 0) t.cooldown -= dt;
}
*/ |
| SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'// Copyright 2024. Civilware. All rights reserved.
// TELA Decentralized Web Document (TELA-DOC-1)
Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("nameHdr", "input.js")
31 STORE("descrHdr", "Input JS file")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "input.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "")
36 STORE("fileCheckC", "2f23066e34fbf4c016eae3d2e824aaeab425e2d1c7e6e6f807c57e46ec2e2b82")
37 STORE("fileCheckS", "180391f0904322f9d87fa36ebddbb1bfdb339388dea71b3733536973589da951")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*window.addEventListener("load", resizeSVG);
window.addEventListener("resize", resizeSVG);
window.addEventListener("keyup", e => {
keys[e.key] = false;
});
window.addEventListener("wheel", e => {
if (e.deltaY < 0) zoom *= 0.9; // zoom in
else zoom *= 1.1; // zoom out
zoom = Math.max(0.2, Math.min(zoom, 5)); // clamp
});
window.addEventListener("keydown", e => {
if (e.code === "Escape") togglePause();
keys[e.key] = true;
if (game.state === STATE.MENU) {
if (!audioCtx) {
initAudio();
}
if (e.code === "Enter") setState(STATE.MISSION_SELECT);
}
else if (game.state === STATE.MISSION_SELECT) {
if (e.code === "Digit1") startMission(1);
if (e.code === "Digit2") startMission(2);
if (e.code === "Digit3") startMission(3);
if (e.code === "Digit4") startMission(4)
}
else if (game.state === STATE.DEAD) {
if (e.code === "KeyR") startMission(game.mission);
}
else if (game.state === STATE.WIN) {
if (e.code === "Enter") {
if(scenario.id == Object.keys(getScenario()).length) {
setState(STATE.MENU);
}else{
startMission(scenario.id + 1);
}
}
}
});
function angleDiff(a, b) {
let d = a - b;
while (d > Math.PI) d -= Math.PI * 2;
while (d < -Math.PI) d += Math.PI * 2;
return d;
}
function pollGamepad() {
const gp = navigator.getGamepads()[0];
if (!gp) return null;
return gp;
}
// one press only
let prevStartPressed = false;
let prevUpPressed = false;
let prevDownPressed = false;
function handleGamepadInput(player, gp, dt) {
let turnInput = 0;
let moveInput = 0;
// --- LEFT STICK: HULL MOVEMENT ---
const lx = gp.axes[0];
const ly = gp.axes[1];
const lmag = Math.hypot(lx, ly);
if (lmag > 0.2) {
// steering
turnInput = lx * 0.08;
// forward/back
moveInput = (-ly) * player.speed * dt;
}
// --- RIGHT STICK: TURRET AIM (smooth) ---
const rx = gp.axes[2];
const ry = gp.axes[3];
const rmag = Math.hypot(rx, ry);
if (rmag > 0.25) {
const stickAngle = Math.atan2(ry, rx);
const desiredOffset = stickAngle - player.angle;
const diff = angleDiff(desiredOffset, player.turret.offset);
const maxTurn = player.turret.turnSpeed * dt;
if (Math.abs(diff) <= maxTurn) {
player.turret.offset = desiredOffset;
} else {
player.turret.offset += Math.sign(diff) * maxTurn;
}
}
const startPressed = gp.buttons[9].pressed;
const upPressed = gp.buttons[12].pressed;
const downPressed = gp.buttons[13].pressed;
// --- FIRE MAIN GUN (RT) ---
if (gp.buttons[6].value > 0.5) fire();
// --- FIRE TURRET GUN (LT) ---
if (gp.buttons[7].value > 0.5) fireTurretBullet();
if(game.state === STATE.PLAYING || game.state === STATE.PAUSED){
// --- PAUSE (Start) ---
if (startPressed && !prevStartPressed) {
togglePause();
}
if(game.state === STATE.PLAYING){// zoom
if (upPressed) zoom *= 0.98; // D-pad up
if (downPressed) zoom *= 1.02; // D-pad down
}else if(game.state === STATE.PAUSED){// volume
if (gp.buttons[14].pressed) volume -= 0.02; // D-pad left
if (gp.buttons[15].pressed) volume += 0.02; // D-pad right
volume = Math.max(0, Math.min(1, volume));
}
} else if (game.state === STATE.DEAD) {
if (startPressed && !prevStartPressed) startMission(game.mission);
} else if (game.state === STATE.WIN) {
if (startPressed && !prevStartPressed) {
if(scenario.id == Object.keys(getScenario()).length) {
setState(STATE.MENU);
}else{
startMission(scenario.id + 1);
}
}
} else if (game.state === STATE.MISSION_SELECT) {
if (levelSelector > 1 ){
if (upPressed && !prevUpPressed) --levelSelector;
}
if(levelSelector < Object.keys(getScenario()).length){
if (downPressed && !prevDownPressed) ++levelSelector;
}
if (startPressed && !prevStartPressed) {
startMission(levelSelector);
}
}
prevStartPressed = startPressed;
prevUpPressed = upPressed;
prevDownPressed = downPressed;
return { turnInput, moveInput };
}
//----------
// Get Input
function gatherInput(dt) {
if (game.state === STATE.MENU) return;
const move = game.player.speed * dt;
const turn = 0.004 * dt;
game.player.turnInput = 0;
if (keys["a"]) game.player.turnInput -= turn;
if (keys["d"]) game.player.turnInput += turn;
game.player.moveInput = 0;
if (keys["w"]) game.player.moveInput += move;
if (keys["s"]) game.player.moveInput -= move;
const t = game.player.turret;
if(keys['l'])t.offset -= t.turnSpeed * dt;
if(keys["'"])t.offset += t.turnSpeed * dt;
if (keys[" "]) fire();
if (keys[";"]) fireTurretBullet();
if (keys['l'] || keys["'"]) return;
if(game.state === STATE.PAUSED){
if (keys["a"]) volume -= 0.02; // a - left
if (keys["d"]) volume += 0.02; // d - right
volume = Math.max(0, Math.min(1, volume));
}
const gp = pollGamepad();
if (gp) {
const g = handleGamepadInput(game.player, gp, dt);
if(game.state === STATE.PLAYING){
// override keyboard if gamepad is active
if (g.turnInput !== 0 || g.moveInput !== 0) {
game.player.turnInput = g.turnInput;
game.player.moveInput = g.moveInput;
}
}
}
}
function applyPlayerIntent(dt) {
const p = game.player;
const t = game.player.turret;
// apply rotation
p.angle += p.turnInput;
t.angle = p.angle + t.offset;
// apply movement
p.x += Math.cos(p.angle) * p.moveInput;
p.y += Math.sin(p.angle) * p.moveInput;
//cool weapons down
if (p.cooldown > 0) p.cooldown -= dt;
if (t.cooldown > 0) t.cooldown -= dt;
}
*/'] |