mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-24 16:13:51 +00:00
183 lines
6.6 KiB
C++
183 lines
6.6 KiB
C++
#include "../Platform/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;
|
|
} |