Selaa lähdekoodia

replaced stone tool by axe

Kolja Strohm 1 vuosi sitten
vanhempi
commit
53193918e6

+ 90 - 0
FactoryCraft/Axe.cpp

@@ -0,0 +1,90 @@
+#include "Axe.h"
+
+#include "Game.h"
+
+AxeToolItemType::AxeToolItemType() // TODO: add broken Axe
+    : BasicToolItemType(ItemTypeEnum::AXE,
+        "Axe",
+        new AxeToolLevelUpRule(),
+        0,
+        ModelInfo("tools.m3/axe", "tools.ltdb/stoneaxe.png", 1))
+{}
+
+Item* AxeToolItemType::createItem() const
+{
+    return new BasicToolItem(ItemTypeEnum::AXE, "Axe");
+}
+
+ItemSkill* AxeToolItemType::createDefaultItemSkill() const
+{
+    return new AxeToolSkill();
+}
+
+void AxeToolItemType::loadSuperItemSkill(
+    ItemSkill* zSkill, Framework::StreamReader* zReader) const
+{
+    AxeToolSkill* skill = dynamic_cast<AxeToolSkill*>(zSkill);
+    zReader->lese((char*)&skill->level, 4);
+    zReader->lese((char*)&skill->xp, 4);
+    zReader->lese((char*)&skill->maxXP, 4);
+}
+
+void AxeToolItemType::saveSuperItemSkill(
+    const ItemSkill* zSkill, Framework::StreamWriter* zWriter) const
+{
+    const AxeToolSkill* skill = dynamic_cast<const AxeToolSkill*>(zSkill);
+    zWriter->schreibe((char*)&skill->level, 4);
+    zWriter->schreibe((char*)&skill->xp, 4);
+    zWriter->schreibe((char*)&skill->maxXP, 4);
+}
+
+AxeToolLevelUpRule::AxeToolLevelUpRule()
+    : ItemSkillLevelUpRule()
+{}
+
+void AxeToolLevelUpRule::applyOn(ItemSkill* zSkill)
+{
+    AxeToolSkill* skill = dynamic_cast<AxeToolSkill*>(zSkill);
+    if (skill->xp >= skill->maxXP)
+    {
+        skill->level++;
+        skill->xp = 0;
+        skill->maxXP = skill->maxXP * 2;
+    }
+}
+
+AxeToolSkill::AxeToolSkill()
+    : ItemSkill(ItemTypeEnum::AXE),
+      level(1),
+      xp(0.f),
+      maxXP(10.f)
+{}
+
+void AxeToolSkill::use(Entity* zActor, Item* zUsedItem, Block* zTarget)
+{
+    if (zActor->getStamina() > 0.0001f)
+    {
+        if (zTarget->zBlockType()->getId() == BlockTypeEnum::WOOD_BEECH
+            || zTarget->zBlockType()->getId() == BlockTypeEnum::WOOD_BIRCH
+            || zTarget->zBlockType()->getId() == BlockTypeEnum::WOOD_OAK
+            || zTarget->zBlockType()->getId() == BlockTypeEnum::WOOD_PINE)
+        {
+            float damage
+                = (1 + ((float)level / 10.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 AxeToolSkill::use(Entity* zActor, Item* zUsedItem, Entity* zTarget)
+{
+    // an Axe can not be used on an entity
+}

+ 10 - 9
FactoryCraft/StoneTool.h → FactoryCraft/Axe.h

@@ -1,9 +1,10 @@
 #pragma once
 
-#include "ItemSkill.h"
 #include "ItemType.h"
+#include "ItemSkill.h"
+#include "BasicTool.h"
 
-class StoneToolItemType : public ItemType
+class AxeToolItemType : public BasicToolItemType
 {
 protected:
     void loadSuperItemSkill(
@@ -12,19 +13,19 @@ protected:
         Framework::StreamWriter* zWriter) const override;
 
 public:
-    StoneToolItemType();
+    AxeToolItemType();
     Item* createItem() const override;
     ItemSkill* createDefaultItemSkill() const override;
 };
 
-class StoneToolLevelUpRule : public ItemSkillLevelUpRule
+class AxeToolLevelUpRule : public ItemSkillLevelUpRule
 {
 public:
-    StoneToolLevelUpRule();
+    AxeToolLevelUpRule();
     void applyOn(ItemSkill* zSkill) override;
 };
 
-class StoneToolSkill : public ItemSkill
+class AxeToolSkill : public ItemSkill
 {
 private:
     int level;
@@ -32,10 +33,10 @@ private:
     float maxXP;
 
 public:
-    StoneToolSkill();
+    AxeToolSkill();
     void use(Entity* zActor, Item* zUsedItem, Block* zTarget) override;
     void use(Entity* zActor, Item* zUsedItem, Entity* zTarget) override;
 
-    friend StoneToolItemType;
-    friend StoneToolLevelUpRule;
+    friend AxeToolItemType;
+    friend AxeToolLevelUpRule;
 };

+ 2 - 2
FactoryCraft/FactoryCraft.vcxproj

@@ -98,6 +98,7 @@
   <ItemGroup>
     <ClInclude Include="AddEntityUpdate.h" />
     <ClInclude Include="Area.h" />
+    <ClInclude Include="Axe.h" />
     <ClInclude Include="BasicBlocks.h" />
     <ClInclude Include="BasicItems.h" />
     <ClInclude Include="BasicTool.h" />
@@ -152,7 +153,6 @@
     <ClInclude Include="Dimension.h" />
     <ClInclude Include="ShapedNoise.h" />
     <ClInclude Include="StaticRegistry.h" />
-    <ClInclude Include="StoneTool.h" />
     <ClInclude Include="Tickable.h" />
     <ClInclude Include="TickOrganizer.h" />
     <ClInclude Include="TickQueue.h" />
@@ -168,6 +168,7 @@
   <ItemGroup>
     <ClCompile Include="AddEntityUpdate.cpp" />
     <ClCompile Include="Area.cpp" />
+    <ClCompile Include="Axe.cpp" />
     <ClCompile Include="BasicBlock.cpp" />
     <ClCompile Include="BasicItems.cpp" />
     <ClCompile Include="BasicTool.cpp" />
@@ -219,7 +220,6 @@
     <ClCompile Include="ShapedNoise.cpp" />
     <ClCompile Include="Start.cpp" />
     <ClCompile Include="StaticInitializerOrder.cpp" />
-    <ClCompile Include="StoneTool.cpp" />
     <ClCompile Include="TickOrganizer.cpp" />
     <ClCompile Include="TickQueue.cpp" />
     <ClCompile Include="TickWorker.cpp" />

+ 6 - 6
FactoryCraft/FactoryCraft.vcxproj.filters

@@ -213,9 +213,6 @@
     <ClInclude Include="RecipieLoader.h">
       <Filter>inventory\recipies</Filter>
     </ClInclude>
-    <ClInclude Include="StoneTool.h">
-      <Filter>inventory\items</Filter>
-    </ClInclude>
     <ClInclude Include="ModelInfo.h">
       <Filter>static</Filter>
     </ClInclude>
@@ -282,6 +279,9 @@
     <ClInclude Include="FluidBlock.h">
       <Filter>world\blocks\fluids</Filter>
     </ClInclude>
+    <ClInclude Include="Axe.h">
+      <Filter>inventory\items\tools</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Server.cpp">
@@ -410,9 +410,6 @@
     <ClCompile Include="CraftingStorage.cpp">
       <Filter>inventory\recipies</Filter>
     </ClCompile>
-    <ClCompile Include="StoneTool.cpp">
-      <Filter>inventory\items</Filter>
-    </ClCompile>
     <ClCompile Include="ModelInfo.cpp">
       <Filter>static</Filter>
     </ClCompile>
@@ -476,5 +473,8 @@
     <ClCompile Include="RecipieList.cpp">
       <Filter>inventory\recipies</Filter>
     </ClCompile>
+    <ClCompile Include="Axe.cpp">
+      <Filter>inventory\items\tools</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 5 - 2
FactoryCraft/Hoe.cpp

@@ -3,7 +3,11 @@
 #include "Game.h"
 
 HoeToolItemType::HoeToolItemType() // TODO: add broken hoe
-    : BasicToolItemType(ItemTypeEnum::HOE, "Hoe", new HoeToolLevelUpRule(), 0, ModelInfo("tools.m3/hoe", "tools.ltdb/stonehoe.png", 1))
+    : BasicToolItemType(ItemTypeEnum::HOE,
+        "Hoe",
+        new HoeToolLevelUpRule(),
+        0,
+        ModelInfo("tools.m3/hoe", "tools.ltdb/stonehoe.png", 1))
 {}
 
 Item* HoeToolItemType::createItem() const
@@ -34,7 +38,6 @@ void HoeToolItemType::saveSuperItemSkill(
     zWriter->schreibe((char*)&skill->maxXP, 4);
 }
 
-
 HoeToolLevelUpRule::HoeToolLevelUpRule()
     : ItemSkillLevelUpRule()
 {}

+ 2 - 2
FactoryCraft/ItemType.h

@@ -19,10 +19,10 @@ class ItemTypeEnum : public BlockTypeEnum
 {
 public:
     static const int WOOD_STICK = BlockTypeEnum::MAX_VALUE + 1;
-    static const int STONE_TOOL = BlockTypeEnum::MAX_VALUE + 2;
+    static const int AXE = BlockTypeEnum::MAX_VALUE + 2;
     static const int RESIN = BlockTypeEnum::MAX_VALUE + 3;
     static const int PLAYER_HAND = BlockTypeEnum::MAX_VALUE + 4;
-    static const int STONE_TOOL_BROKEN = BlockTypeEnum::MAX_VALUE + 5;
+    static const int AXE_BROKEN = BlockTypeEnum::MAX_VALUE + 5;
     static const int HOE = BlockTypeEnum::MAX_VALUE + 6;
     static const int BROKEN_HOE = BlockTypeEnum::MAX_VALUE + 7;
     static const int FLINT = BlockTypeEnum::MAX_VALUE + 8;

+ 1 - 1
FactoryCraft/LightSources.cpp

@@ -80,6 +80,7 @@ BasicLightSourceBlockType::BasicLightSourceBlockType(
 void BasicLightSourceBlockType::createSuperBlock(
     Block* zBlock, Item* zItem) const
 {
+    BlockType::createSuperBlock(zBlock, zItem);
     BasicLightSource* block = dynamic_cast<BasicLightSource*>(zBlock);
     block->transparent = transparent;
     block->passable = passable;
@@ -90,7 +91,6 @@ void BasicLightSourceBlockType::createSuperBlock(
     block->speedModifier = 1;
     block->interactable = interactable;
     block->setLight(color);
-    BlockType::createSuperBlock(zBlock, zItem);
     if (zItem)
     {
         dynamic_cast<BasicLightSource*>(zBlock)->setLight(

+ 9 - 9
FactoryCraft/StaticInitializerOrder.cpp

@@ -17,7 +17,7 @@
 // item skills
 #include "BasicItems.h"
 #include "PlayerHand.h"
-#include "StoneTool.h"
+#include "Axe.h"
 // world updates
 #include "AddEntityUpdate.h"
 #include "EntityRemovedUpdate.h"
@@ -414,7 +414,6 @@ void initializeItemTypes()
         ->setColor(0x00F69A54);
 
     new PlayerHandItemType();
-    new StoneToolItemType();
 
     (new NoBlockItemType(ItemTypeEnum::WOOD_STICK,
         "WoodenStick",
@@ -454,14 +453,15 @@ void initializeItemTypes()
                 0,
                 50);
         }));
-    (new NoBlockItemType(ItemTypeEnum::STONE_TOOL_BROKEN,
-        "BrokenStoneTool",
+    new AxeToolItemType();
+    (new NoBlockItemType(ItemTypeEnum::AXE_BROKEN,
+        "Broken Axe",
         0,
         0,
-        ModelInfo("itemCube", "blocks.ltdb/stone.png", 6),
+        ModelInfo("tools.m3/axe", "tools.ltdb/stoneaxe.png", 6),
         []() {
-            return ItemType::createBasicItem(ItemTypeEnum::STONE_TOOL_BROKEN,
-                "Broken Stone Tool",
+            return ItemType::createBasicItem(ItemTypeEnum::AXE_BROKEN,
+                "Broken Axe",
                 100.f,
                 100.f,
                 100.f,
@@ -478,9 +478,9 @@ void initializeItemTypes()
         "BrokenHoe",
         0,
         0,
-        ModelInfo("tools.m3/hoe", "tools.ltdb/stonehoe", 1),
+        ModelInfo("tools.m3/hoe", "tools.ltdb/stonehoe.png", 1),
         []() {
-            return ItemType::createBasicItem(ItemTypeEnum::STONE_TOOL_BROKEN,
+            return ItemType::createBasicItem(ItemTypeEnum::BROKEN_HOE,
                 "Broken Hoe",
                 100.f,
                 100.f,

+ 0 - 92
FactoryCraft/StoneTool.cpp

@@ -1,92 +0,0 @@
-#include "StoneTool.h"
-
-#include "Block.h"
-#include "Player.h"
-
-StoneToolItemType::StoneToolItemType()
-    : ItemType(ItemTypeEnum::STONE_TOOL,
-        "StoneTool",
-        new StoneToolLevelUpRule(),
-        ItemTypeEnum::STONE_TOOL_BROKEN,
-        ModelInfo("items.m3/stoneTool",
-            "blocks.ltdb/stone.png",
-            6)) // TODO: correct model
-{}
-
-void StoneToolItemType::loadSuperItemSkill(
-    ItemSkill* zSkill, Framework::StreamReader* zReader) const
-{
-    StoneToolSkill* skill = dynamic_cast<StoneToolSkill*>(zSkill);
-    zReader->lese((char*)&skill->level, 4);
-    zReader->lese((char*)&skill->xp, 4);
-    zReader->lese((char*)&skill->maxXP, 4);
-}
-
-void StoneToolItemType::saveSuperItemSkill(
-    const ItemSkill* zSkill, Framework::StreamWriter* zWriter) const
-{
-    const StoneToolSkill* skill = dynamic_cast<const StoneToolSkill*>(zSkill);
-    zWriter->schreibe((char*)&skill->level, 4);
-    zWriter->schreibe((char*)&skill->xp, 4);
-    zWriter->schreibe((char*)&skill->maxXP, 4);
-}
-
-Item* StoneToolItemType::createItem() const
-{
-    return createBasicItem(
-        id, "Stone Tool", 100.f, 100.f, 100.f, 100.f, 0, 0, 0, 1, 1, 1);
-}
-
-ItemSkill* StoneToolItemType::createDefaultItemSkill() const
-{
-    return new StoneToolSkill();
-}
-
-StoneToolLevelUpRule::StoneToolLevelUpRule()
-    : ItemSkillLevelUpRule()
-{}
-
-void StoneToolLevelUpRule::applyOn(ItemSkill* zSkill)
-{
-    StoneToolSkill* skill = dynamic_cast<StoneToolSkill*>(zSkill);
-    if (skill->xp >= skill->maxXP)
-    {
-        skill->level++;
-        skill->xp = 0;
-        skill->maxXP = skill->maxXP * 1.5f;
-    }
-}
-
-StoneToolSkill::StoneToolSkill()
-    : ItemSkill(ItemTypeEnum::STONE_TOOL)
-{
-    level = 1;
-    xp = 0;
-    maxXP = 10;
-}
-
-void StoneToolSkill::use(Entity* zActor, Item* zUsedItem, Block* zTarget)
-{
-    if (zActor->getStamina() > 0.0001f)
-    {
-        if (zTarget && zTarget->getHardness() <= 2)
-        {
-            float damage
-                = (1 + ((float)level / 10.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 StoneToolSkill::use(Entity* zActor, Item* zUsedItem, Entity* zTarget)
-{
-    // TODO
-}