1
0

Furnaces light up visually when they're cooking

git-svn-id: http://mc-server.googlecode.com/svn/trunk@1612 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com
2013-06-20 11:41:44 +00:00
parent 512c342782
commit 8dd5fe5070
9 changed files with 102 additions and 39 deletions

View File

@@ -5,6 +5,7 @@
#include "../UI/Window.h"
#include "../Player.h"
#include "../Root.h"
#include "../Chunk.h"
#include <json/json.h>
@@ -22,8 +23,10 @@ enum
cFurnaceEntity::cFurnaceEntity(int a_BlockX, int a_BlockY, int a_BlockZ) :
cFurnaceEntity::cFurnaceEntity(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) :
super(E_BLOCK_FURNACE, a_BlockX, a_BlockY, a_BlockZ, ContentsWidth, ContentsHeight, NULL),
m_BlockType(a_BlockType),
m_BlockMeta(a_BlockMeta),
m_CurrentRecipe(NULL),
m_IsCooking(false),
m_NeedCookTime(0),
@@ -41,10 +44,12 @@ cFurnaceEntity::cFurnaceEntity(int a_BlockX, int a_BlockY, int a_BlockZ) :
cFurnaceEntity::cFurnaceEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) :
cFurnaceEntity::cFurnaceEntity(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, cWorld * a_World) :
super(E_BLOCK_FURNACE, a_BlockX, a_BlockY, a_BlockZ, ContentsWidth, ContentsHeight, a_World),
m_BlockType(a_BlockType),
m_BlockMeta(a_BlockMeta),
m_CurrentRecipe(NULL),
m_IsCooking(false),
m_IsCooking((a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ) == E_BLOCK_LIT_FURNACE)),
m_NeedCookTime(0),
m_TimeCooked(0),
m_FuelBurnTime(0),
@@ -252,7 +257,7 @@ void cFurnaceEntity::BurnNewFuel(void)
// The item in the fuel slot is not suitable
m_FuelBurnTime = 0;
m_TimeBurned = 0;
m_IsCooking = false;
SetIsCooking(false);
return;
}
@@ -265,7 +270,7 @@ void cFurnaceEntity::BurnNewFuel(void)
// Burn one new fuel:
m_FuelBurnTime = NewTime;
m_TimeBurned = 0;
m_IsCooking = true;
SetIsCooking(true);
if (m_Contents.GetSlot(fsFuel).m_ItemType == E_ITEM_LAVA_BUCKET)
{
m_Contents.SetSlot(fsFuel, cItem(E_ITEM_BUCKET));
@@ -334,12 +339,12 @@ void cFurnaceEntity::UpdateInput(void)
{
// This input cannot be cooked
m_NeedCookTime = 0;
m_IsCooking = false;
SetIsCooking(false);
}
else
{
m_NeedCookTime = m_CurrentRecipe->CookTime;
m_IsCooking = true;
SetIsCooking(true);
// Start burning new fuel if there's no flame now:
if (GetFuelBurnTimeLeft() <= 0)
@@ -378,7 +383,7 @@ void cFurnaceEntity::UpdateOutput(void)
// Cannot cook anymore:
m_TimeCooked = 0;
m_NeedCookTime = 0;
m_IsCooking = false;
SetIsCooking(false);
return;
}
@@ -386,7 +391,7 @@ void cFurnaceEntity::UpdateOutput(void)
// Can cook, start cooking if not already underway:
m_NeedCookTime = m_CurrentRecipe->CookTime;
m_IsCooking = true;
SetIsCooking(m_FuelBurnTime > 0);
}
@@ -403,13 +408,13 @@ void cFurnaceEntity::UpdateIsCooking(void)
)
{
// Reset everything
m_IsCooking = false;
SetIsCooking(false);
m_TimeCooked = 0;
m_NeedCookTime = 0;
return;
}
m_IsCooking = true;
SetIsCooking(true);
}
@@ -474,3 +479,20 @@ void cFurnaceEntity::UpdateProgressBars(void)
void cFurnaceEntity::SetIsCooking(bool a_IsCooking)
{
if (a_IsCooking == m_IsCooking)
{
return;
}
m_IsCooking = a_IsCooking;
// Light or extinguish the furnace:
m_World->FastSetBlock(m_PosX, m_PosY, m_PosZ, m_IsCooking ? E_BLOCK_LIT_FURNACE : E_BLOCK_FURNACE, m_BlockMeta);
}