use bevy::{prelude::*, sprite::Anchor}; use bevy_rapier2d::prelude::*; use creature::{Mover, WeightSlowdown}; use item::{Inventory, Item, ItemSource, ItemStack, Stockpile}; use work::{WorkDuration, Worker}; use super::*; use crate::util::SpriteLoader; #[derive(Clone, Debug, Default, Component, Reflect)] #[reflect(Component)] #[require( Name(|| Name::from("Glorb")), Sprite(|| Sprite { anchor: Anchor::BottomCenter, ..default() }), SpriteLoader(|| SpriteLoader::from("sprites/glorb.png")), Worker, Inventory(|| Inventory::with_capacity(1)), WeightSlowdown(|| WeightSlowdown { halfpoint: 50.0 }), RigidBody(|| RigidBody::KinematicPositionBased), Mover, )] pub struct Glorb; #[derive(Clone, Debug, Default, Component, Reflect)] #[reflect(Component)] #[require( Name(|| Name::from("Tree")), Sprite(|| Sprite { anchor: Anchor::Custom(Vec2 { x: 0.0, y: -0.375 }), ..default() }), SpriteLoader(|| SpriteLoader::from("sprites/tree.png")), ItemSource(|| ItemSource { drops: vec![ItemStack { item: Item::Wood, count: 50 }], gather_limit: Some(1) }), WorkDuration(|| WorkDuration(5.0)) )] pub struct Tree; #[derive(Clone, Debug, Default, Component, Reflect)] #[reflect(Component)] #[require( Name(|| Name::from("Chest")), Sprite(|| Sprite { anchor: Anchor::Custom(Vec2 { x: 0.0, y: -0.375 }), ..default() }), SpriteLoader(|| SpriteLoader::from("sprites/box.png")), Inventory, Stockpile, )] pub struct Chest;