Initial commit
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
import { SLOT_SIZE } from "$/common/constants.ts";
|
||||
import { get_sprite_region } from "$/common/utils.ts";
|
||||
import { AssetManager } from "$/client/assets.ts";
|
||||
import { ItemStack } from "$/client/components/inventory.ts";
|
||||
import { draw_text } from "$/client/text_rendering.ts";
|
||||
|
||||
export function draw_nine_slice(
|
||||
ctx: CanvasRenderingContext2D,
|
||||
image: HTMLImageElement,
|
||||
source_x: number,
|
||||
source_y: number,
|
||||
source_width: number,
|
||||
source_height: number,
|
||||
left: number,
|
||||
right: number,
|
||||
top: number,
|
||||
bottom: number,
|
||||
x: number,
|
||||
y: number,
|
||||
width: number,
|
||||
height: number,
|
||||
) {
|
||||
const center_width = source_width - left - right;
|
||||
const center_height = source_height - top - bottom;
|
||||
|
||||
const dest_center_width = width - left - right;
|
||||
const dest_center_height = height - top - bottom;
|
||||
|
||||
// top left
|
||||
ctx.drawImage(image, source_x, source_y, left, top, x, y, left, top);
|
||||
|
||||
// top right
|
||||
ctx.drawImage(image, source_x + source_width - right, source_y, right, top, x + width - right, y, right, top);
|
||||
|
||||
// bottom left
|
||||
ctx.drawImage(
|
||||
image,
|
||||
source_x,
|
||||
source_y + source_height - bottom,
|
||||
left,
|
||||
bottom,
|
||||
x,
|
||||
y + height - bottom,
|
||||
left,
|
||||
bottom,
|
||||
);
|
||||
|
||||
// bottom right
|
||||
ctx.drawImage(
|
||||
image,
|
||||
source_x + source_width - right,
|
||||
source_y + source_height - bottom,
|
||||
right,
|
||||
bottom,
|
||||
x + width - right,
|
||||
y + height - bottom,
|
||||
right,
|
||||
bottom,
|
||||
);
|
||||
|
||||
// top
|
||||
ctx.drawImage(image, source_x + left, source_y, center_width, top, x + left, y, dest_center_width, top);
|
||||
|
||||
// bottom
|
||||
ctx.drawImage(
|
||||
image,
|
||||
source_x + left,
|
||||
source_y + source_height - bottom,
|
||||
center_width,
|
||||
bottom,
|
||||
x + left,
|
||||
y + height - bottom,
|
||||
dest_center_width,
|
||||
bottom,
|
||||
);
|
||||
|
||||
// left
|
||||
ctx.drawImage(image, source_x, source_y + top, left, center_height, x, y + top, left, dest_center_height);
|
||||
|
||||
// right
|
||||
ctx.drawImage(
|
||||
image,
|
||||
source_x + source_width - right,
|
||||
source_y + top,
|
||||
right,
|
||||
center_height,
|
||||
x + width - right,
|
||||
y + top,
|
||||
right,
|
||||
dest_center_height,
|
||||
);
|
||||
|
||||
// center !
|
||||
ctx.drawImage(
|
||||
image,
|
||||
source_x + left,
|
||||
source_y + top,
|
||||
center_width,
|
||||
center_height,
|
||||
x + left,
|
||||
y + top,
|
||||
dest_center_width,
|
||||
dest_center_height,
|
||||
);
|
||||
}
|
||||
|
||||
export function draw_item(ctx: CanvasRenderingContext2D, item: ItemStack, x: number, y: number) {
|
||||
const sprite_region = get_sprite_region(item.type_id);
|
||||
ctx.drawImage(
|
||||
AssetManager.instance.get("bworld:tiny_town"),
|
||||
sprite_region.x * 16,
|
||||
sprite_region.y * 16,
|
||||
16,
|
||||
16,
|
||||
x + 3,
|
||||
y + 3,
|
||||
SLOT_SIZE - 6,
|
||||
SLOT_SIZE - 6,
|
||||
);
|
||||
if (item.max_amount !== 1) {
|
||||
draw_text(
|
||||
ctx,
|
||||
String(item.amount),
|
||||
x + SLOT_SIZE + 2 - 4,
|
||||
y + SLOT_SIZE + 2 - 4,
|
||||
2,
|
||||
"#3f3f3f",
|
||||
"bottom",
|
||||
"right",
|
||||
);
|
||||
draw_text(
|
||||
ctx,
|
||||
String(item.amount),
|
||||
x + SLOT_SIZE - 4,
|
||||
y + SLOT_SIZE - 4,
|
||||
2,
|
||||
"white",
|
||||
"bottom",
|
||||
"right",
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user