FAZA 3: Add 3 NPCs with random walk AI (zombie, villager, merchant)

This commit is contained in:
2025-12-06 18:18:23 +01:00
parent 9389d4e467
commit 34a2d07538
5 changed files with 263 additions and 7 deletions

View File

@@ -197,4 +197,97 @@ class TextureGenerator {
pixel(ox + x, oy + 16, outlineColor);
}
}
// Generiraj NPC sprite (32x32px pixel art)
static createNPCSprite(scene, key = 'npc', type = 'zombie') {
const size = 32;
const canvas = scene.textures.createCanvas(key, size, size);
const ctx = canvas.getContext();
ctx.clearRect(0, 0, size, size);
const pixel = (x, y, color) => {
ctx.fillStyle = color;
ctx.fillRect(x, y, 1, 1);
};
const ox = 12;
const oy = 4;
const outlineColor = '#000000';
// Različne barve glede na tip
let skinColor, shirtColor, pantsColor;
switch (type) {
case 'zombie':
skinColor = '#9ACD32'; // Zelena koža
shirtColor = '#8B4513'; // Rjava raztrgana srajca
pantsColor = '#4A4A4A'; // Temno siva
break;
case 'villager':
skinColor = '#FFDBAC';
shirtColor = '#4169E1'; // Modra srajca
pantsColor = '#654321'; // Rjave hlače
break;
case 'merchant':
skinColor = '#FFDBAC';
shirtColor = '#DAA520'; // Zlata/rumena srajca
pantsColor = '#2F4F4F'; // Temno zelene hlače
break;
default:
skinColor = '#FFDBAC';
shirtColor = '#888888';
pantsColor = '#666666';
}
// Glava (brez klobuka za NPCje)
for (let y = 2; y < 6; y++) {
pixel(ox + 0, oy + y, outlineColor);
for (let x = 1; x < 7; x++) {
pixel(ox + x, oy + y, skinColor);
}
pixel(ox + 7, oy + y, outlineColor);
}
// Oči
pixel(ox + 2, oy + 4, outlineColor);
pixel(ox + 5, oy + 4, outlineColor);
// Telo - srajca
for (let y = 6; y < 11; y++) {
pixel(ox + 0, oy + y, outlineColor);
for (let x = 1; x < 7; x++) {
pixel(ox + x, oy + y, shirtColor);
}
pixel(ox + 7, oy + y, outlineColor);
}
// Roke
for (let y = 7; y < 10; y++) {
pixel(ox - 1, oy + y, skinColor);
pixel(ox - 2, oy + y, outlineColor);
pixel(ox + 8, oy + y, skinColor);
pixel(ox + 9, oy + y, outlineColor);
}
// Noge - hlače
for (let y = 11; y < 16; y++) {
pixel(ox + 0, oy + y, outlineColor);
pixel(ox + 1, oy + y, pantsColor);
pixel(ox + 2, oy + y, pantsColor);
pixel(ox + 3, oy + y, outlineColor);
pixel(ox + 4, oy + y, outlineColor);
pixel(ox + 5, oy + y, pantsColor);
pixel(ox + 6, oy + y, pantsColor);
pixel(ox + 7, oy + y, outlineColor);
}
// Dno nog
for (let x = 0; x < 8; x++) {
pixel(ox + x, oy + 16, outlineColor);
}
canvas.refresh();
return canvas;
}
}