Add hill block

This commit is contained in:
Miloslav Ciz 2024-11-29 00:51:43 +01:00
parent 1c83fe4660
commit 21cedabf85
3 changed files with 59 additions and 6 deletions

40
map.h
View file

@ -103,11 +103,15 @@
#define LCR_BLOCK_RAMP_STEEP 0x0c ///< extremely steep ramp
#define LCR_BLOCK_CORNER 0x0d ///< diagonal corner
#define LCR_BLOCK_CORNER_12 0x0e ///< diagonal corner (1/2 wide)
#define LCR_BLOCK_HILL 0x0f ///< curved "hill"
#define LCR_BLOCK_FULL_ACCEL 0x20
#define LCR_BLOCK_FULL_FAN 0x30
#define LCR_BLOCK_CHECKPOINT_0 0x40 ///< checkpoint, not taken
#define LCR_BLOCK_CHECKPOINT_1 0x41 ///< checkpoint, taken
#define LCR_BLOCK_FINISH 0x42 ///< finish
// special blocks:
@ -129,8 +133,6 @@
- bumpy road
*/
#define LCR_MAP_BLOCK_CACHE_SIZE (8 * 2) /// do not change
/**
@ -344,6 +346,7 @@ uint8_t _LCR_mapCharToBlockType(char c)
case '|': return LCR_BLOCK_RAMP_STEEP; break;
case 'A': return LCR_BLOCK_CORNER; break;
case '\\': return LCR_BLOCK_CORNER_12; break;
case '(': return LCR_BLOCK_HILL; break;
case '>': return LCR_BLOCK_FULL_ACCEL; break;
case 'o': return LCR_BLOCK_FULL_FAN; break;
case '+': return LCR_BLOCK_CHECKPOINT_0; break;
@ -505,14 +508,17 @@ uint8_t LCR_mapLoadFromStr(const char *mapStr)
mat = LCR_mapBlockGetMaterial(prevBlock);
transform = LCR_mapBlockGetTransform(prevBlock);
LCR_mapBlockGetCoords(prevBlock,&x,&y,&z);
for (uint8_t k = 0; k < coords[2]; ++k)
for (uint8_t j = 0; j < coords[1]; ++j)
for (uint8_t i = 0; i < coords[0]; ++i)
if (block == LCR_BLOCK_CUBOID_FILL ||
if ((block == LCR_BLOCK_CUBOID_FILL ||
k == 0 || k == coords[2] - 1 ||
j == 0 || j == coords[1] - 1 ||
i == 0 || i == coords[0] - 1)
i == 0 || i == coords[0] - 1) &&
(x + i < LCR_MAP_SIZE_BLOCKS &&
y + j < LCR_MAP_SIZE_BLOCKS &&
z + k < LCR_MAP_SIZE_BLOCKS))
{
LCR_makeMapBlock(prevBlock[0],x + i,y + j,z + k,mat,transform,
tmpBlock);
@ -847,6 +853,30 @@ void LCR_mapGetBlockShape(uint8_t blockType, uint8_t transform,
break;
}
case LCR_BLOCK_HILL:
ADD(0,0,0) ADD(6,0,0) ADD(0,2,1) // front
ADD(6,0,0) ADD(6,2,1) ADD(0,2,1)
ADD(0,2,1) ADD(6,2,1) ADD(0,3,2) // front 2
ADD(6,2,1) ADD(6,3,2) ADD(0,3,2)
ADD(0,3,2) ADD(6,3,2) ADD(0,4,4) // front 3
ADD(6,3,2) ADD(6,4,4) ADD(0,4,4)
ADD(0,4,4) ADD(6,4,4) ADD(0,4,6) // top
ADD(6,4,4) ADD(6,4,6) ADD(0,4,6)
ADD(0,0,0) ADD(0,0,6) ADD(6,0,0) // bottom
ADD(6,0,0) ADD(0,0,6) ADD(6,0,6)
ADD(0,0,6) ADD(0,4,6) ADD(6,4,6) // back
ADD(0,0,6) ADD(6,4,6) ADD(6,0,6)
ADD(0,0,0) ADD(0,2,1) ADD(0,0,6) // left
ADD(0,2,1) ADD(0,3,2) ADD(0,0,6)
ADD(0,3,2) ADD(0,4,4) ADD(0,0,6)
ADD(0,4,4) ADD(0,4,6) ADD(0,0,6)
ADD(6,0,0) ADD(6,0,6) ADD(6,2,1) // right
ADD(6,2,1) ADD(6,0,6) ADD(6,3,2)
ADD(6,3,2) ADD(6,0,6) ADD(6,4,4)
ADD(6,4,4) ADD(6,0,6) ADD(6,4,6)
break;
default: break;
}