1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

starting to separate "material" to "content" and "tile"

This commit is contained in:
Perttu Ahola 2010-12-12 14:33:13 +02:00
parent db49f37692
commit 47a593b519
10 changed files with 340 additions and 388 deletions

View file

@ -56,6 +56,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
GRAVEL
- Dynamics of gravel: if there is a drop of more than two
blocks on any side, it will drop in there. Is this doable?
TODO: These should be named to "content" or something like that
*/
enum Material
@ -77,6 +79,8 @@ enum Material
MATERIAL_MESE,
MATERIAL_MUD,
MATERIAL_OCEAN,
// This is set to the number of the actual values in this enum
USEFUL_MATERIAL_COUNT
@ -88,7 +92,7 @@ enum Material
*/
inline bool light_propagates_material(u8 m)
{
return (m == MATERIAL_AIR || m == MATERIAL_LIGHT || m == MATERIAL_WATER);
return (m == MATERIAL_AIR || m == MATERIAL_LIGHT || m == MATERIAL_WATER || m == MATERIAL_OCEAN);
}
/*
@ -110,7 +114,7 @@ inline u8 material_solidness(u8 m)
{
if(m == MATERIAL_AIR)
return 0;
if(m == MATERIAL_WATER)
if(m == MATERIAL_WATER || m == MATERIAL_OCEAN)
return 1;
return 2;
}
@ -118,29 +122,54 @@ inline u8 material_solidness(u8 m)
// Objects collide with walkable materials
inline bool material_walkable(u8 m)
{
return (m != MATERIAL_AIR && m != MATERIAL_WATER);
return (m != MATERIAL_AIR && m != MATERIAL_WATER && m != MATERIAL_OCEAN && m != MATERIAL_LIGHT);
}
// A liquid resists fast movement
inline bool material_liquid(u8 m)
{
return (m == MATERIAL_WATER);
return (m == MATERIAL_WATER || m == MATERIAL_OCEAN);
}
// Pointable materials can be pointed to in the map
inline bool material_pointable(u8 m)
{
return (m != MATERIAL_AIR && m != MATERIAL_WATER);
return (m != MATERIAL_AIR && m != MATERIAL_WATER && m != MATERIAL_OCEAN);
}
inline bool material_diggable(u8 m)
{
return (m != MATERIAL_AIR && m != MATERIAL_WATER);
return (m != MATERIAL_AIR && m != MATERIAL_WATER && m != MATERIAL_OCEAN);
}
inline bool material_buildable_to(u8 m)
{
return (m == MATERIAL_AIR || m == MATERIAL_WATER);
return (m == MATERIAL_AIR || m == MATERIAL_WATER || m == MATERIAL_OCEAN);
}
/*
As of now, input is a "material" and the output is a "material"
*/
inline u8 content_cube_material(u8 c)
{
if(c == MATERIAL_IGNORE || c == MATERIAL_LIGHT)
return MATERIAL_AIR;
return c;
}
/*
Returns true for materials that form the base ground that
follows the main heightmap
*/
inline bool is_ground_material(u8 m)
{
return(
m == MATERIAL_STONE ||
m == MATERIAL_GRASS ||
m == MATERIAL_GRASS_FOOTSTEPS ||
m == MATERIAL_MESE ||
m == MATERIAL_MUD
);
}
/*
@ -168,21 +197,6 @@ inline u8 face_materials(u8 m1, u8 m2)
return 2;
}
/*
Returns true for materials that form the base ground that
follows the main heightmap
*/
inline bool is_ground_material(u8 m)
{
return(
m == MATERIAL_STONE ||
m == MATERIAL_GRASS ||
m == MATERIAL_GRASS_FOOTSTEPS ||
m == MATERIAL_MESE ||
m == MATERIAL_MUD
);
}
struct MapNode
{
//TODO: block type to differ from material
@ -214,7 +228,9 @@ struct MapNode
bool operator==(const MapNode &other)
{
return (d == other.d && param == other.param);
return (d == other.d
&& param == other.param
&& pressure == other.pressure);
}
bool light_propagates()