tux-town/main.c

430 lines
29 KiB
C
Raw Normal View History

2025-05-25 19:59:06 +02:00
/*
* Tux-Town is a chill life-simulation game.
* Copyright (C) 2025 orangerot <me@orangerot.dev>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include "raylib.h"
#include <math.h>
2025-05-25 19:59:06 +02:00
#include <stddef.h>
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
#define CLAMP(val, min, max) MIN(max, MAX(min, val))
2025-05-25 19:59:06 +02:00
int main(void) {
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
Camera camera = { 0 };
camera.position = (Vector3){ 10.0f, 10.0f, 10.0f };
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };
camera.fovy = 45.0f;
camera.projection = CAMERA_PERSPECTIVE;
Model models[] = {
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bed_floor.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_center_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_center_stoneRound.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_center_wood.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_center_woodRound.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_side_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_side_stoneRound.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_side_wood.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_side_woodRound.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_stoneNarrow.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_stoneRoundNarrow.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_stoneRound.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_woodNarrow.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_wood.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_woodRoundNarrow.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/bridge_woodRound.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cactus_short.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cactus_tall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/campfire_bricks.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/campfire_logs.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/campfire_planks.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/campfire_stones.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/canoe.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/canoe_paddle.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockCave_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockCave_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockDiagonal_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockDiagonal_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockHalf_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockHalf_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockQuarter_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockQuarter_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_block_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockSlopeHalfWalls_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockSlopeHalfWalls_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockSlope_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockSlope_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockSlopeWalls_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_blockSlopeWalls_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_block_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cave_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cave_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerInnerLarge_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerInnerLarge_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerInner_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerInner_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerInnerTop_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerInnerTop_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerLarge_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerLarge_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_corner_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_corner_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerTop_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_cornerTop_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_diagonal_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_diagonal_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_halfCornerInner_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_halfCornerInner_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_halfCorner_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_halfCorner_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_half_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_half_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_large_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_large_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_stepsCornerInner_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_stepsCornerInner_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_stepsCorner_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_stepsCorner_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_steps_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_steps_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_topDiagonal_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_topDiagonal_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_top_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_top_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_waterfall_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_waterfall_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_waterfallTop_rock.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/cliff_waterfallTop_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crop_carrot.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crop_melon.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crop_pumpkin.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_bambooStageA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_bambooStageB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_cornStageA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_cornStageB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_cornStageC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_cornStageD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_dirtDoubleRowCorner.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_dirtDoubleRowEnd.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_dirtDoubleRow.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_dirtRowCorner.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_dirtRowEnd.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_dirtRow.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_dirtSingle.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_leafsStageA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_leafsStageB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_wheatStageA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crops_wheatStageB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/crop_turnip.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_bendCenter.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_bend.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_corner.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_gate.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_planksDouble.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_planks.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_simpleCenter.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_simpleDiagonalCenter.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_simpleDiagonal.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_simpleHigh.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_simpleLow.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/fence_simple.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_purpleA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_purpleB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_purpleC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_redA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_redB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_redC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_yellowA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_yellowB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/flower_yellowC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/grass_large.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/grass_leafsLarge.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/grass_leafs.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/grass.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_grass.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathBendBank.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathBend.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathCorner.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathCornerSmall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathCross.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathEndClosed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathEnd.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathOpen.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathRocks.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathSide.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathSideOpen.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathSplit.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathStraight.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_pathTile.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverBendBank.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverBend.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverCorner.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverCornerSmall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverCross.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverEndClosed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverEnd.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverOpen.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverRocks.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverSide.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverSideOpen.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverSplit.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverStraight.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/ground_riverTile.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/hanging_moss.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/lily_large.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/lily_small.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/log_large.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/log.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/log_stackLarge.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/log_stack.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/mushroom_redGroup.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/mushroom_red.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/mushroom_redTall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/mushroom_tanGroup.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/mushroom_tan.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/mushroom_tanTall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/path_stoneCircle.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/path_stoneCorner.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/path_stoneEnd.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/path_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/path_woodCorner.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/path_woodEnd.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/path_wood.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_bushDetailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_bushLarge.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_bushLargeTriangle.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_bush.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_bushSmall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_bushTriangle.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_flatShort.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/plant_flatTall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/platform_beach.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/platform_grass.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/platform_stone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/pot_large.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/pot_small.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_largeA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_largeB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_largeC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_largeD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_largeE.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_largeF.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallE.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallFlatA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallFlatB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallFlatC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallF.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallG.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallH.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallI.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallTopA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_smallTopB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallE.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallF.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallG.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallH.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallI.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/rock_tallJ.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/sign.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/statue_block.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/statue_columnDamaged.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/statue_column.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/statue_head.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/statue_obelisk.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/statue_ring.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_largeA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_largeB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_largeC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_largeD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_largeE.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_largeF.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallE.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallFlatA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallFlatB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallFlatC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallF.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallG.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallH.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallI.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallTopA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_smallTopB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallE.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallF.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallG.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallH.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallI.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stone_tallJ.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stump_old.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stump_oldTall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stump_roundDetailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stump_round.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stump_squareDetailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stump_squareDetailedWide.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/stump_square.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tent_detailedClosed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tent_detailedOpen.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tent_smallClosed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tent_smallOpen.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_blocks_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_blocks_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_blocks.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_cone_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_cone_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_cone.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_default_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_default_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_default.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_detailed_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_detailed_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_detailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_fat_darkh.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_fat_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_fat.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_oak_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_oak_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_oak.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_palmBend.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_palmDetailedShort.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_palmDetailedTall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_palm.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_palmShort.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_palmTall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineDefaultA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineDefaultB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineGroundA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineGroundB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineRoundA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineRoundB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineRoundC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineRoundD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineRoundE.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineRoundF.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineSmallA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineSmallB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineSmallC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineSmallD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallA_detailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallA.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallB_detailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallB.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallC_detailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallC.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallD_detailed.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_pineTallD.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_plateau_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_plateau_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_plateau.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_simple_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_simple_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_simple.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_small_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_small_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_small.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_tall_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_tall_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_tall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_thin_dark.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_thin_fall.obj"),
LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_thin.obj"),
};
#define MAP_SIZE 64
2025-05-25 19:59:06 +02:00
Vector3 position = {0};
Image map = GenImagePerlinNoise(MAP_SIZE, MAP_SIZE, 0, 0, 1.f);
Texture2D map_texture = LoadTextureFromImage(map);
for (size_t i = 0; i < MAP_SIZE * MAP_SIZE; i++) {
Color c = GetImageColor(map, i % MAP_SIZE, i / MAP_SIZE);
ImageDrawPixel(&map, i % MAP_SIZE, i / MAP_SIZE, (Color) {
.r = MAX(0, c.r - 64) / 32,
.g = MAX(0, c.r - 64) / 32,
.b = MAX(0, c.r - 64) / 32,
.a = 255
});
}
Color *map_data = LoadImageColors(map);
2025-05-25 19:59:06 +02:00
// SetTargetFPS(60);
while (!WindowShouldClose()) {
UpdateCamera(&camera, CAMERA_ORBITAL);
BeginDrawing();
ClearBackground(RAYWHITE);
BeginMode3D(camera);
for (int i = 0; i < MAP_SIZE * MAP_SIZE; i++) {
int x = i % MAP_SIZE, y = i / MAP_SIZE;
DrawModel(models[128],
(Vector3){
.x = MAP_SIZE * (x / (float) MAP_SIZE - 0.5f),
.y = map_data[i].r - 8, //- (map_gradient_magnitude_data[i].g < 2),
.z = MAP_SIZE * (y / (float) MAP_SIZE - 0.5f)
} , 1.f, WHITE);
int gradients[4][2] = {{0,-1},{-1,0},{0,1},{1,0}};
for (int gradient_i = 0; gradient_i < 4; gradient_i++) {
int dx = CLAMP(x + gradients[gradient_i][0], 0, MAP_SIZE - 1);
int dy = CLAMP(y + gradients[gradient_i][1], 0, MAP_SIZE - 1);
for (int height = map_data[i].r; height < map_data[dy * MAP_SIZE + dx].r; height++) {
DrawModelEx(models[76],
(Vector3){
.x = MAP_SIZE * (x / (float) MAP_SIZE - 0.5f),
.y = height - 8,
.z = MAP_SIZE * (y / (float) MAP_SIZE - 0.5f)
},
(Vector3) {0, 1, 0}, gradient_i * 90.f, (Vector3) {1,1,1}, WHITE);
}
}
2025-05-25 19:59:06 +02:00
}
DrawGrid(20, 10.0f);
EndMode3D();
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
DrawTexture(map_texture, 0, 0, WHITE);
2025-05-25 19:59:06 +02:00
EndDrawing();
}
CloseWindow();
return 0;
}