first commit
This commit is contained in:
192
Minecraft.World/Material.cpp
Normal file
192
Minecraft.World/Material.cpp
Normal file
@@ -0,0 +1,192 @@
|
||||
#include "stdafx.h"
|
||||
#include "Material.h"
|
||||
#include "DecorationMaterial.h"
|
||||
#include "GasMaterial.h"
|
||||
#include "LiquidMaterial.h"
|
||||
#include "PortalMaterial.h"
|
||||
#include "WebMaterial.h"// 4J added, Java version just does a local alteration when instantiating the Material for webs to get the same thing
|
||||
|
||||
Material *Material::air = NULL;
|
||||
Material *Material::grass = NULL;
|
||||
Material *Material::dirt = NULL;
|
||||
Material *Material::wood = NULL;
|
||||
Material *Material::stone = NULL;
|
||||
Material *Material::metal = NULL;
|
||||
Material *Material::heavyMetal = NULL;
|
||||
Material *Material::water = NULL;
|
||||
Material *Material::lava = NULL;
|
||||
Material *Material::leaves = NULL;
|
||||
Material *Material::plant = NULL;
|
||||
Material *Material::replaceable_plant = NULL;
|
||||
Material *Material::sponge = NULL;
|
||||
Material *Material::cloth = NULL;
|
||||
Material *Material::fire = NULL;
|
||||
Material *Material::sand = NULL;
|
||||
Material *Material::decoration = NULL;
|
||||
Material *Material::clothDecoration = NULL;
|
||||
Material *Material::glass = NULL;
|
||||
Material *Material::buildable_glass = NULL;
|
||||
Material *Material::explosive = NULL;
|
||||
Material *Material::coral = NULL;
|
||||
Material *Material::ice = NULL;
|
||||
Material *Material::topSnow = NULL;
|
||||
Material *Material::snow = NULL;
|
||||
Material *Material::cactus = NULL;
|
||||
Material *Material::clay = NULL;
|
||||
Material *Material::vegetable = NULL;
|
||||
Material *Material::egg = NULL;
|
||||
Material *Material::portal = NULL;
|
||||
Material *Material::cake = NULL;
|
||||
Material *Material::piston = NULL;
|
||||
Material *Material::web = NULL;
|
||||
|
||||
void Material::staticCtor()
|
||||
{
|
||||
Material::air = new GasMaterial(MaterialColor::none);
|
||||
Material::grass = new Material(MaterialColor::grass);
|
||||
Material::dirt = new Material(MaterialColor::dirt);
|
||||
Material::wood = (new Material(MaterialColor::wood))->flammable();
|
||||
Material::stone = (new Material(MaterialColor::stone))->notAlwaysDestroyable();
|
||||
Material::metal = (new Material(MaterialColor::metal))->notAlwaysDestroyable();
|
||||
Material::heavyMetal = (new Material(MaterialColor::metal))->notAlwaysDestroyable()->notPushable();
|
||||
Material::water = (new LiquidMaterial(MaterialColor::water))->destroyOnPush();
|
||||
Material::lava = (new LiquidMaterial(MaterialColor::fire))->destroyOnPush();
|
||||
Material::leaves = (new Material(MaterialColor::plant))->flammable()->neverBuildable()->destroyOnPush();
|
||||
Material::plant = (new DecorationMaterial(MaterialColor::plant))->destroyOnPush();
|
||||
Material::replaceable_plant = (new DecorationMaterial(MaterialColor::plant))->flammable()->destroyOnPush()->replaceable();
|
||||
Material::sponge = new Material(MaterialColor::cloth);
|
||||
Material::cloth = (new Material(MaterialColor::cloth))->flammable();
|
||||
Material::fire = (new GasMaterial(MaterialColor::none))->destroyOnPush();
|
||||
Material::sand = new Material(MaterialColor::sand);
|
||||
Material::decoration = (new DecorationMaterial(MaterialColor::none))->destroyOnPush();
|
||||
Material::clothDecoration = (new DecorationMaterial(MaterialColor::cloth))->flammable();
|
||||
Material::glass = (new Material(MaterialColor::none))->neverBuildable()->makeDestroyedByHand();
|
||||
Material::buildable_glass = (new Material(MaterialColor::none))->makeDestroyedByHand();
|
||||
Material::explosive = (new Material(MaterialColor::fire))->flammable()->neverBuildable();
|
||||
Material::coral = (new Material(MaterialColor::plant))->destroyOnPush();
|
||||
Material::ice = (new Material(MaterialColor::ice))->neverBuildable()->makeDestroyedByHand();
|
||||
Material::topSnow = (new DecorationMaterial(MaterialColor::snow))->replaceable()->neverBuildable()->notAlwaysDestroyable()->destroyOnPush();
|
||||
Material::snow = (new Material(MaterialColor::snow))->notAlwaysDestroyable();
|
||||
Material::cactus = (new Material(MaterialColor::plant))->neverBuildable()->destroyOnPush();
|
||||
Material::clay = (new Material(MaterialColor::clay));
|
||||
Material::vegetable = (new Material(MaterialColor::plant))->destroyOnPush();
|
||||
Material::egg = ( new Material(MaterialColor::plant))->destroyOnPush();
|
||||
Material::portal = (new PortalMaterial(MaterialColor::none))->notPushable();
|
||||
Material::cake = (new Material(MaterialColor::none))->destroyOnPush();
|
||||
// 4J added WebMaterial, Java version just does a local alteration when instantiating the Material for webs to get the same thing
|
||||
Material::web = (new WebMaterial(MaterialColor::cloth))->notAlwaysDestroyable()->destroyOnPush();
|
||||
Material::piston = (new Material(MaterialColor::stone))->notPushable();
|
||||
}
|
||||
|
||||
Material::Material(MaterialColor *color)
|
||||
{
|
||||
this->color = color;
|
||||
|
||||
// 4J Stu - Default inits
|
||||
_flammable = false;
|
||||
_replaceable = false;
|
||||
_neverBuildable = false;
|
||||
_isAlwaysDestroyable = true;
|
||||
pushReaction = 0;
|
||||
destroyedByHand = false;
|
||||
}
|
||||
|
||||
bool Material::isLiquid()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Material::letsWaterThrough()
|
||||
{
|
||||
return (!isLiquid() && !isSolid());
|
||||
}
|
||||
|
||||
bool Material::isSolid()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Material::blocksLight()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Material::blocksMotion()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
Material *Material::neverBuildable()
|
||||
{
|
||||
this->_neverBuildable = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
Material *Material::notAlwaysDestroyable()
|
||||
{
|
||||
this->_isAlwaysDestroyable = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
Material *Material::flammable()
|
||||
{
|
||||
this->_flammable = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
bool Material::isFlammable()
|
||||
{
|
||||
return _flammable;
|
||||
}
|
||||
|
||||
Material *Material::replaceable()
|
||||
{
|
||||
this->_replaceable = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
bool Material::isReplaceable()
|
||||
{
|
||||
return _replaceable;
|
||||
}
|
||||
|
||||
bool Material::isSolidBlocking()
|
||||
{
|
||||
if (_neverBuildable) return false;
|
||||
return blocksMotion();
|
||||
}
|
||||
|
||||
bool Material::isAlwaysDestroyable()
|
||||
{
|
||||
// these materials will always drop resources when destroyed, regardless
|
||||
// of player's equipment
|
||||
return _isAlwaysDestroyable;
|
||||
}
|
||||
|
||||
int Material::getPushReaction()
|
||||
{
|
||||
return pushReaction;
|
||||
}
|
||||
|
||||
Material *Material::makeDestroyedByHand()
|
||||
{
|
||||
this->destroyedByHand = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
bool Material::isDestroyedByHand()
|
||||
{
|
||||
return destroyedByHand;
|
||||
}
|
||||
|
||||
Material *Material::destroyOnPush()
|
||||
{
|
||||
pushReaction = PUSH_DESTROY;
|
||||
return this;
|
||||
}
|
||||
|
||||
Material *Material::notPushable()
|
||||
{
|
||||
pushReaction = PUSH_BLOCK;
|
||||
return this;
|
||||
}
|
||||
Reference in New Issue
Block a user