Files
2026-03-01 12:16:08 +08:00

93 lines
2.0 KiB
C++

#pragma once
#include "MaterialColor.h"
class ChunkRebuildData;
class Material
{
friend class ChunkRebuildData;
public:
static Material *air;
static Material *grass;
static Material *dirt;
static Material *wood;
static Material *stone;
static Material *metal;
static Material *heavyMetal;
static Material *water;
static Material *lava;
static Material *leaves;
static Material *plant;
static Material *replaceable_plant;
static Material *sponge;
static Material *cloth;
static Material *fire;
static Material *sand;
static Material *decoration;
static Material *clothDecoration;
static Material *glass;
static Material *buildable_glass;
static Material *explosive;
static Material *coral;
static Material *ice;
static Material *topSnow;
static Material *snow;
static Material *cactus;
static Material *clay;
static Material *vegetable;
static Material *egg;
static Material *portal;
static Material *cake;
static Material *web;
static Material *piston;
static const int PUSH_NORMAL = 0;
static const int PUSH_DESTROY = 1;
static const int PUSH_BLOCK = 2; // not pushable
static void staticCtor();
private:
bool _flammable, _replaceable, _neverBuildable;
public:
MaterialColor *color;
private:
bool _isAlwaysDestroyable;
int pushReaction;
bool destroyedByHand;
public:
Material(MaterialColor *color);
virtual bool isLiquid() ;
virtual bool letsWaterThrough();
virtual bool isSolid();
virtual bool blocksLight();
virtual bool blocksMotion();
private:
virtual Material *neverBuildable();
protected:
virtual Material *notAlwaysDestroyable();
virtual Material *flammable();
public:
virtual bool isFlammable();
virtual Material *replaceable();
virtual bool isReplaceable();
virtual bool isSolidBlocking();
virtual bool isAlwaysDestroyable();
virtual int getPushReaction();
protected:
Material *makeDestroyedByHand();
public:
bool isDestroyedByHand();
protected:
Material *destroyOnPush();
Material *notPushable();
};