Nimbin2git.christianimmanuel.de / Games / strichmaennchen / game.c

strichmaennchen git · main

git clone https://git.christianimmanuel.de/games/strichmaennchen.gitwget https://git.christianimmanuel.de/games/strichmaennchen/archive/strichmaennchen.tar.gz
game.c 9.2 KB · 193 lines raw
#include "game.h"
#include "object.h"
#include "human.h"
#include "glfuncs.h"
#include <math.h>
#include <stdio.h>
#include <float.h>


#define M_PI 3.14159265358979323846
#define DEG2RAD(d) ((d) * (M_PI / 180.0f))

bool Game_init(Game* game) {
    //game->time = Time_init(3600.0f);
    game->time = Time_init(3.0f);

    World_init(&game->world);

    Human  *player     = Human_create(vec3(1,4,0), CUBE_VERTICES_MODERN, vec3(0.5f,1.6f,0.25f), true, 60);
    player->isPlayer   = true;
    Human  *human      = Human_create(vec3(0,4,0), CUBE_VERTICES_MODERN, vec3(0.5f,1.6f,0.25f), false, 60);
    Human  *human_1    = Human_create(vec3(0,2,0), CUBE_VERTICES_MODERN, vec3(0.5f,1.6f,0.25f), false, 60);

    Object* ground     = Object_create(OBJ_GROUND, CUBE_VERTICES_GROUND, vec3(0,-1,0), vec3(130, 1, 130), 0);
    Object* ground_1   = Object_create(OBJ_GROUND, CUBE_VERTICES_WARM, vec3(-8,0,1), vec3(1, 1, 1), 20);
    Object* tree       = Object_create(OBJ_TREE,   CUBE_VERTICES_WARM,   vec3(3,0,2), vec3(0.5f, 10, 0.5f), 0);



    World_addHuman(&game->world, player);
    World_addHuman(&game->world, human);
    World_addHuman(&game->world, human_1);

    World_addObject(&game->world, ground);
    World_addObject(&game->world, ground_1);
    World_addObject(&game->world, tree);


    Object* cylinder   = Object_create(OBJ_CYLINDER,   CUBE_VERTICES_WARM,   vec3(-3,0,1), vec3(1,3,1), 1000);
    Object_setRotation(cylinder, (Vec3){DEG2RAD(90), 0, 0});

    Object* cylinder_1 = Object_create(OBJ_CYLINDER,   CUBE_VERTICES_MODERN, vec3(-3,0,3), vec3(1,3,1), 100);
    World_addObject(&game->world, cylinder);
    World_addObject(&game->world, cylinder_1);


    Object* cube        = Object_create(OBJ_CUBE,     CUBE_VERTICES_MODERN, vec3(2,2,8), vec3(1,3,1), 100);
    Object_setRotation(cube, (Vec3){DEG2RAD(90), 0, 0});
    Object* cuber       = Object_create(OBJ_CUBE, CUBE_VERTICES_MODERN, vec3(1,0,2), vec3(2,1,2), 20);
    World_addObject(&game->world, cube);
    World_addObject(&game->world, cuber);

    /*
    Object* cube        = Object_create(OBJ_WALL,   CUBE_VERTICES_MODERN, vec3(1,0,8), vec3(1,1,1), 20);
    Object* cube_1      = Object_create(OBJ_WALL,   CUBE_VERTICES_MODERN, vec3(3,0,8), vec3(1,1,1), 20);
    Object* cube_2      = Object_create(OBJ_WALL,   CUBE_VERTICES_MODERN, vec3(5,0,8), vec3(1,1,1), 20);
    Object* cube_3      = Object_create(OBJ_WALL,   CUBE_VERTICES_MODERN, vec3(7,0,8), vec3(1,1,1), 20);
    Object* cube_4      = Object_create(OBJ_WALL,   CUBE_VERTICES_MODERN, vec3(0,0,8), vec3(1,1,1), 20);
    cube_1->rotation.y = DEG2RAD(90);
    cube_2->rotation.y = DEG2RAD(180);
    cube_3->rotation.y = DEG2RAD(270);
    cube_4->rotation.y = DEG2RAD(270);
    World_addObject(&game->world, cube);
    World_addObject(&game->world, cube_1);
    World_addObject(&game->world, cube_2);
    World_addObject(&game->world, cube_3);
    World_addObject(&game->world, cube_4);
    */


    // for (int j = 0; j<10; j++) for (int i = 0; i<10; i++) World_addHuman(&game->world, Human_create(vec3(i,5,j), CUBE_VERTICES_MODERN, vec3(0.5f,1.6f,0.25f), false, 60));

    /*
    Object* triangle   = Object_create(OBJ_TRIANGLE, vec3(2.0f, 4.0f, 1.0f), vec3(0.5f,0.5f,0.0f), vec3(0,0,0));
    Object* axes       = Object_create(OBJ_AXES,     vec3(0,0,0), vec3(0,0,0), vec3(0,0,0));
    Object* pyramid    = Object_create(OBJ_PYRAMID,  vec3(0,0,0), vec3(2.0f,2.0f,2.0f), vec3(1,0,1));
    Object* ground_1   = Object_create(OBJ_GROUND, CUBE_VERTICES_WARM, vec3(0,4,0), vec3(10, 1, 10), 0);
    */

    game->player = player;
    if ( !human || !ground)
        return false;

    /*
    World_addObject(&game->world, triangle);
    World_addObject(&game->world, triangle_1);
    World_addObject(&game->world, pyramid);
    World_addObject(&game->world, cube);
    */

    Object* house_main = Object_create(OBJ_HOUSE_MAIN,   CUBE_VERTICES_WARM,   vec3(10,0,20), vec3(18.0f,11.0f,12.0f), 20);
    Object_setRotation(house_main, (Vec3){0, DEG2RAD(180), 0});
    World_addObject(&game->world, house_main);

    Object* house_main_1 = Object_create(OBJ_HOUSE_MAIN,   CUBE_VERTICES_WARM,   vec3(-5,0,23), vec3(18.0f,11.0f,12.0f), 20);
    Object_setRotation(house_main_1, (Vec3){0, DEG2RAD(90), 0});
    World_addObject(&game->world, house_main_1);

    Object* barn = Object_create(OBJ_BARN,   CUBE_VERTICES_WARM,   vec3(2,0,-20), vec3(24.0f,11.0f,12.0f), 20);
    Object_setRotation(barn, (Vec3){0, DEG2RAD(180), 0});
    World_addObject(&game->world, barn);

    Object* house_side_wall_back = Object_create(OBJ_WALL,   CUBE_VERTICES_WARM, vec3(27,0,0),      vec3(0.5,5,28), 20);
    Object* house_side_wall_side_1 = Object_create(OBJ_WALL, CUBE_VERTICES_WARM, vec3(23.125,0,14.25f), vec3(8.25,5,0.5), 20);
    Object* house_side_wall_side_2 = Object_create(OBJ_WALL, CUBE_VERTICES_WARM, vec3(23.125,0,9),      vec3(8.25,5,0.5), 20);
    Object* house_side_wall_side_3 = Object_create(OBJ_WALL, CUBE_VERTICES_WARM, vec3(23.125,0,-4),     vec3(8.25,5,0.5), 20);
    Object* house_side_wall_side_4 = Object_create(OBJ_WALL, CUBE_VERTICES_WARM, vec3(23.125,0,-14),    vec3(8.25,5,0.5), 20);

    Object* house_side_wall_front   = Object_create(OBJ_WALL,   CUBE_VERTICES_WARM, vec3(19.25f,3,0),     vec3(0.5,2,28), 20);
    Object* house_side_wall_front_1 = Object_create(OBJ_WALL,   CUBE_VERTICES_WARM, vec3(19.25f,0,13.5f), vec3(0.5,3,2), 20);
    Object* house_side_wall_front_2 = Object_create(OBJ_WALL,   CUBE_VERTICES_WARM, vec3(19.25f,0,7),     vec3(0.5,3,8), 20);
    Object* house_side_wall_front_3 = Object_create(OBJ_WALL,   CUBE_VERTICES_WARM, vec3(19.25f,0,-5),    vec3(0.5,3,8), 20);

    Object* house_side_wall_roof    = Object_create(OBJ_WALL,   CUBE_VERTICES_WARM, vec3(23.125,5,0),     vec3(8.25,0.5,28.5), 20);

    World_addObject(&game->world, house_side_wall_back);
    World_addObject(&game->world, house_side_wall_side_1);
    World_addObject(&game->world, house_side_wall_side_2);
    World_addObject(&game->world, house_side_wall_side_3);
    World_addObject(&game->world, house_side_wall_side_4);
    World_addObject(&game->world, house_side_wall_front);
    World_addObject(&game->world, house_side_wall_front_1);
    World_addObject(&game->world, house_side_wall_front_2);
    World_addObject(&game->world, house_side_wall_front_3);
    World_addObject(&game->world, house_side_wall_roof);





    Object* hof_bar_pillar_1   = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM,   vec3(-10.2,0,-13.8), vec3(0.4f,3,0.4f), 100);
    Object* hof_bar_pillar_2   = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM,   vec3(-10.2,0, -5),   vec3(0.4f,3,0.4f), 100);
    Object* hof_bar_pillar_3   = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM,   vec3(-16.2,0,-13.8), vec3(0.4f,3,0.4f), 100);
    Object* hof_bar_pillar_4   = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM,   vec3(-16.2,0, -5),   vec3(0.4f,3,0.4f), 100);
    World_addObject(&game->world, hof_bar_pillar_1);
    World_addObject(&game->world, hof_bar_pillar_2);
    World_addObject(&game->world, hof_bar_pillar_3);
    World_addObject(&game->world, hof_bar_pillar_4);
    Object* hof_bar_pillar_top_f = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM, vec3(-10.2,-1.4, -9.4), vec3(0.4f,8.8,0.4f), 100);
    Object* hof_bar_pillar_top_b = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM, vec3(-16.2,-1.4, -9.4), vec3(0.4f,8.8,0.4f), 100);
    Object* hof_bar_pillar_top_r = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM, vec3(-13.2,0, -13.8),   vec3(0.4f,6.0,0.4f), 100);
    Object* hof_bar_pillar_top_l = Object_create(OBJ_CYLINDER_STATIC, CUBE_VERTICES_WARM, vec3(-13.2,0, -5),      vec3(0.4f,6.0,0.4f), 100);
    Object_setRotation(hof_bar_pillar_top_f, (Vec3){DEG2RAD(90), 0, 0});
    Object_setRotation(hof_bar_pillar_top_b, (Vec3){DEG2RAD(90), 0, 0});
    Object_setRotation(hof_bar_pillar_top_r, (Vec3){DEG2RAD(90), 0, DEG2RAD(90)});
    Object_setRotation(hof_bar_pillar_top_l, (Vec3){DEG2RAD(90), 0, DEG2RAD(90)});
    World_addObject(&game->world, hof_bar_pillar_top_f);
    World_addObject(&game->world, hof_bar_pillar_top_b);
    World_addObject(&game->world, hof_bar_pillar_top_r);
    World_addObject(&game->world, hof_bar_pillar_top_l);
    //World_addObject(&game->world, cube_1);
    //World_addObject(&game->world, Object_create(OBJ_CUBE,   CUBE_VERTICES_WARM,   vec3(-0.2f,0,2.5f), vec3(1,1,1), 20));

    //World_addObject(&game->world, axes);
    /*
    World_addObject(&game->world, ground_1);
    World_addObject(&game->world, cube);
    World_addObject(&game->world, ground_1);
    World_addObject(&game->world, ground_2);
    World_addObject(&game->world, ground_3);
    */

    return true;
}

void Game_update(Game* game, Userinput* input, float dt) {
    if (input->rotate_object_forward) {
        printf("rotate forward\n");
    }
    if (input->rotate_object_sideway) {
        printf("rotate sideway\n");
    }

    World_update(&game->world, dt);
}

void Game_render(Game* game, Renderer* renderer, Camera* camera) {
    Renderer_clear(0.0f, 0.0f, 0.0f, 1.0f);


    World_renderShadows(&game->world, renderer, game->time);

    World_render(&game->world, renderer, camera, game->time);
}


void Game_shutdown(Game* game) {
    printf("asd%p", game);
    Time_destroy(game->time);
    //if (game->triangle) Object_destroy(game->triangle);
    //if (game->axes)     Object_destroy(game->axes);
}