Piece.cpp
//------------------------------------------------------------------------------
/// @file
/// @author ハル研究所プログラミングコンテスト実行委員会
///
/// @copyright Copyright (c) 2018 HAL Laboratory, Inc.
/// @attention このファイルの利用は、同梱のREADMEにある
/// 利用条件に従ってください。
//------------------------------------------------------------------------------
#pragma once
#include "Piece.hpp"
//------------------------------------------------------------------------------
#include "Assert.hpp"
//------------------------------------------------------------------------------
namespace hpc {
//------------------------------------------------------------------------------
Piece::Piece()
: mPos()
, mWidth()
, mHeight()
, mCurrentHeatTurnCount()
, mRequiredHeatTurnCount()
, mScore()
{
}
//------------------------------------------------------------------------------
Piece::Piece(
const Vector2i& aPos,
int aWidth,
int aHeight,
int aRequiredHeatTurnCount,
int aScore
)
: mPos(aPos)
, mWidth(aWidth)
, mHeight(aHeight)
, mCurrentHeatTurnCount()
, mRequiredHeatTurnCount(aRequiredHeatTurnCount)
, mScore(aScore)
{
HPC_ASSERT_GREATER_I(mScore, 0);
HPC_ASSERT_GREATER_I(mRequiredHeatTurnCount, 0);
}
//------------------------------------------------------------------------------
Vector2i Piece::pos() const
{
return mPos;
}
//------------------------------------------------------------------------------
int Piece::width() const
{
return mWidth;
}
//------------------------------------------------------------------------------
int Piece::height() const
{
return mHeight;
}
//------------------------------------------------------------------------------
int Piece::currentHeatTurnCount() const
{
return mCurrentHeatTurnCount;
}
//------------------------------------------------------------------------------
int Piece::requiredHeatTurnCount() const
{
return mRequiredHeatTurnCount;
}
//------------------------------------------------------------------------------
int Piece::restRequiredHeatTurnCount() const
{
return requiredHeatTurnCount() - currentHeatTurnCount();
}
//------------------------------------------------------------------------------
int Piece::score() const
{
return mScore;
}
//------------------------------------------------------------------------------
void Piece::setPos(const Vector2i& aPos)
{
mPos = aPos;
}
//------------------------------------------------------------------------------
void Piece::addHeatTurnCount(int aTurnCount)
{
mCurrentHeatTurnCount += aTurnCount;
}
//------------------------------------------------------------------------------
bool Piece::isCompleted() const
{
return mRequiredHeatTurnCount <= mCurrentHeatTurnCount;
}
} // namespace
// EOF