Example #1
0
static inline void reset_player_position( State * const state ) 
{
    init_entity( & state->player.entity
               , 0, state->map.height / 2
               , PLAYER_SPEED
               );
}
Example #2
0
void init_spawning(GameState* state) {
	if (!state->spells.frost_wave_active && state->wave.spawn_counter == state->wave.spawn_interval) {
		state->wave.spawn_counter = 0;
		if (state->wave.nr_of_spawned_enemies != state->wave.nr_of_enemies) {
			//nieuwe entity aanmaken en checken welk type vijand er moer gespawned worden
			Entity enemy;
			init_entity(&enemy, ENEMY, state->world.spawn->spawn_location.world_x, state->world.spawn->spawn_location.world_y, ENEMY_SIZE, ENEMY_SIZE);
			if (state->wave.nr_of_spawned_enemies % 5 == 1  && (state->wave.boss_wave && state->wave.nr_of_enemies - 1 != state->wave.nr_of_spawned_enemies)) {
				init_enemy(&enemy, ELITE);
				enemy.enemy.health_max = ENEMY_ELITE_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_ELITE_HEALTH * 0.1));
			} else if (state->wave.boss_wave == 1 && state->wave.nr_of_enemies - 1 == state->wave.nr_of_spawned_enemies) {
				init_enemy(&enemy, BOSS);
				enemy.enemy.health_max = ENEMY_BOSS_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_BOSS_HEALTH * 0.1));
			} else if (state->wave.wave_number >= 4) {
				int random = rand() % 100;
				if (state->wave.wave_number >= 8) {
					//5% kans op FAST
					if (random < 5) {
						init_enemy(&enemy, FAST);
						enemy.enemy.health_max = ENEMY_FAST_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_FAST_HEALTH * 0.1));
					} //Ook nog eens 10% kans op AIR
					else if (random < 15) {
						init_enemy(&enemy, AIR);
						enemy.enemy.health_max = ENEMY_AIR_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_AIR_HEALTH * 0.1));
					}
					else{
						init_enemy(&enemy, NORMAL);
						enemy.enemy.health_max = ENEMY_NORMAL_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_NORMAL_HEALTH * 0.1));
					}
				} else {
					// 10% kans op AIR
					if (random < 10) {
						init_enemy(&enemy, AIR);
						enemy.enemy.health_max = ENEMY_AIR_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_AIR_HEALTH * 0.1));
					}else {
						init_enemy(&enemy, NORMAL);
						enemy.enemy.health_max = ENEMY_NORMAL_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_NORMAL_HEALTH * 0.1));
					}
				}
			} else {
				init_enemy(&enemy, NORMAL);
				enemy.enemy.health_max = ENEMY_NORMAL_HEALTH + (state->wave.wave_number * (state->wave.wave_number / 3) * (ENEMY_NORMAL_HEALTH * 0.1));
			}
			//verdere algemene eigenschappen instellen
			enemy.enemy.health = enemy.enemy.health_max;
			state->enemies = (Entity*) realloc(state->enemies, (state->enemies_length + 1) * sizeof(Entity));
			create_path(&enemy.enemy.path, &state->world, &enemy, state->world.castle, enemy.enemy.path.trajectory_type);
			state->enemies[state->enemies_length] = enemy;
			state->enemies[state->enemies_length].type = ENEMY;
			state->enemies_length++;
			state->wave.nr_of_spawned_enemies++;
		}
	} else if (!state->spells.frost_wave_active) {
		state->wave.spawn_counter++;
	}
}
Example #3
0
Entity* world_area_get_next_entity(World_Area* area)
{
	if(area->entities_count + 1 >= area->entities_capacity) {
		Log_Error("Ran out of entities");
		return NULL;
	}

	Entity* e = area->entities + area->entities_count++;
	init_entity(e);
	e->area = area;
	e->body = sim_get_next_body(&area->sim);
	e->body_id = e->body->id;
	e->id = area->next_entity_id++;
	e->body->entity = e;
	e->body->entity_id = e->id;
	return e;
}
Example #4
0
Entity * place_tower(World * world, TowerType type, float world_x, float world_y) {
	int tile_x = convert_world2tile_x(world_x);
	int tile_y = convert_world2tile_y(world_y);
	if (world->entities[tile_x][tile_y].type == EMPTY) {
		Path path;
		Entity* tower = (Entity*) malloc(sizeof(Entity));
		init_entity(tower, TOWER, world_x, world_y, TILE_SIZE, TILE_SIZE);
		tower->tower.tower_type = type;
		switch (type) {
		case MACHINE_GUN:
			init_machine_gun(tower, world_x, world_y);
			break;
		case ROCKET_LAUNCHER:
			init_rocket_launcher(tower, world_x, world_y);
			break;
		case FLAK_CANNON:
			init_flak_cannon(tower, world_x, world_y);
			break;
		}
		tower->tower.target = NULL;
		tower->tower.projectiles = (Projectile*) calloc(tower->tower.ammo, sizeof(Projectile));
		world->entities[tile_x][tile_y] = *tower;
		path.current_node_index = 0;
		path.length = 0;
		path.trajectory_type = OVER_LAND;
		path.nodes = (Node*) malloc(sizeof(Node));
		if (create_path(&path, world, world->spawn, world->castle, OVER_LAND) != 0) {
			destroy_path(&path);
			return tower;
		} else {
			world->entities[convert_world2tile_x(tower->all.world_x)][convert_world2tile_y(tower->all.world_y)].type = EMPTY;
			destroy_tower(world, tower);
			destroy_path(&path);
			return NULL;
		}
	}
	return NULL;
}