glorbs/src/game/prefab.rs

54 lines
1.5 KiB
Rust

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;