#include "Shovel.h" #include "Game.h" ShovelToolItemType::ShovelToolItemType() // TODO: add broken Shovel : BasicToolItemType(ItemTypeEnum::SHOVEL, "Shovel", new ShovelToolLevelUpRule(), 0, ModelInfo("tools.m3/shovel", "tools.ltdb/stonehoe.png", 1)) // use same texture as hoe {} Item* ShovelToolItemType::createItem() const { return new BasicToolItem(ItemTypeEnum::SHOVEL, "Shovel"); } ItemSkill* ShovelToolItemType::createDefaultItemSkill() const { return new ShovelToolSkill(); } void ShovelToolItemType::loadSuperItemSkill( ItemSkill* zSkill, Framework::StreamReader* zReader) const { ShovelToolSkill* skill = dynamic_cast(zSkill); zReader->lese((char*)&skill->level, 4); zReader->lese((char*)&skill->xp, 4); zReader->lese((char*)&skill->maxXP, 4); } void ShovelToolItemType::saveSuperItemSkill( const ItemSkill* zSkill, Framework::StreamWriter* zWriter) const { const ShovelToolSkill* skill = dynamic_cast(zSkill); zWriter->schreibe((char*)&skill->level, 4); zWriter->schreibe((char*)&skill->xp, 4); zWriter->schreibe((char*)&skill->maxXP, 4); } ShovelToolLevelUpRule::ShovelToolLevelUpRule() : ItemSkillLevelUpRule() {} void ShovelToolLevelUpRule::applyOn(ItemSkill* zSkill) { ShovelToolSkill* skill = dynamic_cast(zSkill); if (skill->xp >= skill->maxXP) { skill->level++; skill->xp = 0; skill->maxXP = skill->maxXP * 2; } } ShovelToolSkill::ShovelToolSkill() : ItemSkill(ItemTypeEnum::SHOVEL), level(1), xp(0.f), maxXP(10.f) {} void ShovelToolSkill::use(Entity* zActor, Item* zUsedItem, Block* zTarget) { if (zActor->getStamina() > 0.0001f) { if (zTarget->zBlockType()->getId() == BlockTypeEnum::DIRT || zTarget->zBlockType()->getId() == BlockTypeEnum::GRAVEL || zTarget->zBlockType()->getId() == BlockTypeEnum::SAND) { float damage = (2 + ((float)level / 3.f)) / (zTarget->getHardness() + 1); zTarget->setHP(zTarget->getHP() - damage); xp += damage / 20; zActor->setStamina(zActor->getStamina() - 0.0001f); zUsedItem->setHp(zUsedItem->getHp() - damage / 50); } else { zActor->setStamina(zActor->getStamina() - 0.0001f); zUsedItem->setHp(zUsedItem->getHp() - 0.001f); } } } void ShovelToolSkill::use(Entity* zActor, Item* zUsedItem, Entity* zTarget) { // an Shovel can not be used on an entity }