This commit is contained in:
2026-02-27 11:22:22 -03:00
parent 28f0422771
commit b52b7f4c44
7 changed files with 208 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
import { System } from "$/common/ecs/mod.ts";
import { Sprite } from "../components/sprite.ts";
import { ClientWorld } from "../client_world.ts";
import { Crop } from "$/client/components/crop.ts";
import { get_sprite_region } from "$/common/utils.ts";
import { ClickableSprite } from "../components/clickable.ts";
import { ItemStack, PlayerInventory } from "../components/inventory.ts";
export class CropSystem extends System {
update(world: ClientWorld, delta: number): void {
for (const entity of world.get_entities()) {
const crop = entity.get(Crop);
if (!crop) {
continue;
}
// finished growing, very good
if (crop.total_stages === crop.current_stage + 1) {
const clickable_sprite = entity.get(ClickableSprite);
if (clickable_sprite && clickable_sprite.clicked) {
const [player] = world.get_tag("player")!;
const inventory = player.get(PlayerInventory)!;
inventory.container.add_item(new ItemStack(crop.item_drop));
world.delete_entity(entity);
}
continue;
}
crop.growth_time += delta;
if (crop.growth_time >= crop.time_to_grow[crop.current_stage]) {
crop.current_stage += 1;
crop.growth_time = 0;
}
const sprite = entity.get(Sprite);
if (sprite) {
const region = get_sprite_region(crop.sprite_ids[crop.current_stage]);
sprite.source_x = region.x * 16;
sprite.source_y = region.y * 16;
}
}
}
}