Just trying to fix things now

This commit is contained in:
2026-06-08 09:39:09 -05:00
parent be68fe5a35
commit 2ca6780305
9 changed files with 137 additions and 91 deletions
+18 -6
View File
@@ -4,12 +4,24 @@
// https://opensource.org/licenses/MIT
const PLAYER_SPEED = 5.0;
// 1 world unit = 16 pixels.
const PIXEL_SCALE = 1.0 / 16.0;
// Player sprite is 32x32 px (test.png dimensions).
const PLAYER_W = 32 * PIXEL_SCALE;
const PLAYER_H = 32 * PIXEL_SCALE;
var player = {};
var _entity, _position, _physics;
player.getAssets = () => {
return [
{ path: 'test.png', type: Asset.TYPE_TEXTURE, format: Texture.FORMAT_RGBA }
];
}
player.init = function(scene) {
var texture = scene.assets.getAssetByPath('test.png');
Console.print('Player init: got texture ' + texture);
player.create = function(texEntry) {
_entity = Entity.create();
_position = _entity.add(Component.POSITION);
_physics = _entity.add(Component.PHYSICS);
@@ -19,13 +31,13 @@ player.create = function(texEntry) {
_physics.gravityScale = 1.0;
var r = _entity.add(Component.RENDERABLE);
r.texture = texEntry.texture;
r.texture = texture.texture;
r.type = Renderable.SPRITEBATCH;
r.color = new Color(220, 80, 80);
// upright quad: (-0.5,0,0) -> (0.5,1,0) in XY plane
r.sprites = [[-0.5, 0, 0, 0.5, 1, 0, 0, 1, 1, 0]];
// Upright quad centered on X, bottom-aligned on Y.
r.sprites = [[-PLAYER_W/2, 0, 0, PLAYER_W/2, PLAYER_H, 0, 0, 1, 1, 0]];
_position.localPosition = new Vec3(0, 1, 0);
_position.localPosition = new Vec3(0, PLAYER_H, 0);
};
player.getPosition = function() {
+14 -47
View File
@@ -4,11 +4,6 @@
// https://opensource.org/licenses/MIT
var scene = {};
var player = require('player.js');
var assets = AssetBatch([
{ path: 'test.png', type: Asset.TYPE_TEXTURE, format: Texture.FORMAT_RGBA }
]);
// Pokemon DS-style camera: ~34 degrees elevation (atan(6/9)).
// CAM_HEIGHT / CAM_DIST ratio controls the tilt - keep it under 0.7 for
@@ -16,58 +11,30 @@ var assets = AssetBatch([
const CAM_HEIGHT = 6;
const CAM_DIST = 9;
var cam, camPos;
var floorEntity;
function updateCamera() {
var pp = player.getPosition().worldPosition;
// Position is offset above and behind the player; lookAt the exact player
// world position so the player projects to the center pixel every frame.
camPos.localPosition = new Vec3(pp.x, pp.y + CAM_HEIGHT, pp.z + CAM_DIST);
camPos.lookAt(new Vec3(pp.x, pp.y, pp.z));
}
scene.init = async function() {
assets.lock();
await assets.loaded();
var texEntry = assets.entry(0);
// Camera
cam = Entity.create();
camPos = cam.add(Component.POSITION);
cam.add(Component.CAMERA);
scene.cam = Entity.create();
var camPos = scene.cam.add(Component.POSITION);
var cam = scene.cam.add(Component.CAMERA);
camPos.localPosition = new Vec3(3, 3, 3);
camPos.lookAt(new Vec3(0, 0, 0));
// Floor - infinite static plane at Y=0. Rendered as a large flat blue
// slab using the default SHADER_MATERIAL (no texture needed).
floorEntity = Entity.create();
var floorPos = floorEntity.add(Component.POSITION);
var floorPhysics = floorEntity.add(Component.PHYSICS);
floorPhysics.bodyType = Physics.STATIC;
floorPhysics.shape = Physics.SHAPE_PLANE;
var floorR = floorEntity.add(Component.RENDERABLE);
// Floor - large flat slab, no texture needed.
scene.floor = Entity.create();
var floorPos = scene.floor.add(Component.POSITION);
var floorR = scene.floor.add(Component.RENDERABLE);
floorR.type = Renderable.SHADER_MATERIAL;
floorR.color = Color.BLUE;
floorPos.localScale = new Vec3(16, 0.2, 16);
floorPos.localPosition = new Vec3(0, -0.1, 0);
// Player - spawns 1 unit above the floor so physics drops it cleanly.
player.create(texEntry);
// Initialise camera at the correct angle from the player's spawn position.
updateCamera();
// floorPos.localScale = new Vec3(16, 0.2, 16);
// floorPos.localPosition = new Vec3(0, -0.1, 0);
};
scene.update = function() {
player.update();
updateCamera();
};
scene.dispose = function() {
player.dispose();
Entity.dispose(floorEntity);
Entity.dispose(cam);
assets.unlock();
Entity.dispose(scene.floor);
Entity.dispose(scene.cam);
};
module.exports = scene;