FAZA 3: Add 3 NPCs with random walk AI (zombie, villager, merchant)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user