def get_from_UI(dens_prev, u_prev, v_prev): dens_prev[:] = 0.0 u_prev[:] = 0.0 v_prev[:] = 0.0 if hg.GetPlus().KeyDown(hg.KeyF1): dens_prev[1, 1] = base_force_dens if hg.GetPlus().KeyDown(hg.KeyF2): for i in range(2, 5): v_prev[i, 5] = base_force_v if hg.GetPlus().KeyDown(hg.KeyF3): u_prev[3, 3] = base_force_u if hg.GetPlus().KeyDown(hg.KeyF4): u_prev[int(N / 2.0), int(N / 2.0)] = base_force_u v_prev[int(N / 2.0), int(N / 2.0)] = base_force_v
def draw_text(scene_simple_graphic, text, mat, size=0.01, color=hg.Color.White, text_centered=False, use_font=font): scene_simple_graphic.SetDepthWrite(False) scene_simple_graphic.SetBlendMode(hg.BlendAlpha) if text_centered: text_rect = use_font.GetTextRect(hg.GetPlus().GetRenderSystem(), text) mat = mat * mat4.TranslationMatrix( vec3(-(text_rect.ex - text_rect.sx) * 0.5 * size, -(text_rect.ey - text_rect.sy) * 0.5 * size, 0)) scene_simple_graphic.Text(mat, text, color, use_font, size) scene_simple_graphic.SetDepthWrite(True)
def request_screen_mode(p_ratio_filter=0): global monitors, monitors_names, modes, smr_screenMode, smr_resolution, ratio_filter ratio_filter = p_ratio_filter monitors = hg.GetMonitors() monitors_names = [] modes = [] for i in range(monitors.size()): monitors_names.append(hg.GetMonitorName(monitors.at(i)) + str(i)) f, m = hg.GetMonitorModes(monitors.at(i)) filtered_modes = [] for j in range(m.size()): md = m.at(j) rect = md.rect epsilon = 0.01 r = (rect.ex - rect.sx) / (rect.ey - rect.sy) if ratio_filter == 0 or r - epsilon < ratio_filter < r + epsilon: filtered_modes.append(md) modes.append(filtered_modes) plus = hg.GetPlus() plus.RenderInit(res_w, res_h, 1, hg.Windowed) select = "" while select == "": select = gui_ScreenModeRequester() plus.Flip() plus.EndFrame() plus.RenderUninit() if select == "ok": if flag_windowed: smr_screenMode = hg.Windowed else: smr_screenMode = screenModes[current_monitor] rect = modes[current_monitor][current_mode].rect smr_resolution.x, smr_resolution.y = rect.ex - rect.sx, rect.ey - rect.sy return select, smr_screenMode, smr_resolution
import harfang as hg hg.LoadPlugins() plus = hg.GetPlus() plus.RenderInit(400, 300) while not plus.IsAppEnded(): plus.Flip() plus.EndFrame() plus.RenderUninit()
if hg.GetPlus().KeyDown(hg.KeyF1): dens_prev[1, 1] = base_force_dens if hg.GetPlus().KeyDown(hg.KeyF2): for i in range(2, 5): v_prev[i, 5] = base_force_v if hg.GetPlus().KeyDown(hg.KeyF3): u_prev[3, 3] = base_force_u if hg.GetPlus().KeyDown(hg.KeyF4): u_prev[int(N / 2.0), int(N / 2.0)] = base_force_u v_prev[int(N / 2.0), int(N / 2.0)] = base_force_v #for i in range(1, N+1): # v_prev[IX(1, i)] = base_force_v if int(N/3) < i < int(N/3*2) else 0 # u_prev[IX(1, i)] = 0 false_texture = hg.GetPlus().LoadTexture("") def draw_dens(simple_graphic_scene_overlay, N, dens, u, v): scale = 2 for i in range(1, N + 1): for j in range(1, N + 1): p = vec3(i / (N) - 0.5, j / (N) - 0.5, 0) #helper_2d.draw_line(simple_graphic_scene_overlay, p, p + vec3(u[i, j], v[i,j], 0)) helper_2d.draw_quad(simple_graphic_scene_overlay, mat4.TransformationMatrix(p + vec3(0, 0, 0.1), vec3(0, 0, 0)), 1 / N, 1 / N, false_texture, col(dens[i, j], 0, 0)) def simulation_step(simple_graphic_scene_overlay, dt): global visc, diff, base_force_u, base_force_v, base_force_dens hg.ImGuiLock() if hg.ImGuiBegin("params"): visc = hg.ImGuiSliderFloat("visc", visc, 0.0, 10.0)[1]
def game(): plus = hg.GetPlus() plus.RenderInit(screen_width, screen_height) al = hg.CreateMixer() al.Open() hg.MountFileDriver(hg.StdFileDriver()) keyboard = hg.GetInputSystem().GetDevice("keyboard") scn, ground = setup_game_level(plus) turret, cannon, turret_mass = create_turret(plus, scn) game_state = "GAME_INIT" while not plus.IsAppEnded(): dt = plus.UpdateClock() # Initialize Game if game_state == "GAME_INIT": enemy_list = [] debris_list = [] spawn_timer = 0.0 turret_cool_down = 0.0 enemy_spawn_interval = max_enemy_spawn_interval player_life = max_player_life target_angle = 0.0 score = 0 play_sound_fx(al, 'game_start') game_state = "TITLE" # Title screen if game_state == "TITLE": display_title_screen(plus, scn) if plus.KeyReleased(hg.KeySpace): game_state = "GAME" # Game elif game_state == "GAME": # Turret if plus.KeyDown(hg.KeyRight): target_angle += hg.time_to_sec_f(dt) * aim_rotation_speed else: if plus.KeyDown(hg.KeyLeft): target_angle -= hg.time_to_sec_f(dt) * aim_rotation_speed if plus.KeyPress(hg.KeySpace): if turret_cool_down < 0.0: throw_bullet(plus, scn, cannon.GetTransform().GetWorld().GetTranslation(), cannon.GetTransform().GetWorld().GetRow(1)) turret_cool_down = turret_cool_down_duration play_sound_fx(al, 'shoot') else: play_sound_fx(al, 'error') turret_cool_down += 10.0 * hg.time_to_sec_f(dt) turret_cool_down -= hg.time_to_sec_f(dt) target_angle = max(min(target_angle, aim_angle_range['max']), aim_angle_range['min']) rotate_turret(turret, target_angle, turret_mass) # Enemies spawn_timer += hg.time_to_sec_f(dt) if spawn_timer > enemy_spawn_interval: spawn_timer = 0 spawn_pos = hg.Vector3(uniform(-10, 10), 2.5, uniform(5.5, 6.5)) spawn_pos.Normalize() spawn_pos *= 10.0 spawn_pos.y = 5.0 new_enemy = spawn_enemy(plus, scn, spawn_pos) enemy_list.append([new_enemy[0], new_enemy[1]]) for enemy in enemy_list: # make enemy crawl toward the player enemy_dir = turret[0].GetTransform().GetPosition() - enemy[0].GetTransform().GetPosition() enemy_dir.Normalize() enemy[1].SetIsSleeping(False) enemy[1].ApplyLinearForce(enemy_dir * 0.25 * enemy_mass) col_pairs = scn.GetPhysicSystem().GetCollisionPairs(enemy[0]) for col_pair in col_pairs: if 'turret' in [col_pair.GetNodeA().GetName(), col_pair.GetNodeB().GetName()]: destroy_enemy(plus, scn, enemy[0]) debris_list.extend(create_explosion(plus, scn, enemy[0].GetTransform().GetPosition())) enemy_list.remove(enemy) play_sound_fx(al, 'explosion') play_sound_fx(al, 'hit') player_life -= 1 turret_cool_down = 0.0 if player_life < 1: play_sound_fx(al, 'game_over') game_state = "GAME_OVER" else: if 'bullet' in [col_pair.GetNodeA().GetName(), col_pair.GetNodeB().GetName()]: play_sound_fx(al, 'explosion') pos = col_pair.GetNodeB().GetTransform().GetPosition() debris_list.extend(create_explosion(plus, scn, pos, 8, 0.25)) pos = enemy[0].GetTransform().GetPosition() destroy_enemy(plus, scn, enemy[0]) enemy_list.remove(enemy) scn.RemoveNode(col_pair.GetNodeB()) debris_list.extend(create_explosion(plus, scn, pos)) score += 10 # Game difficulty enemy_spawn_interval = max(1.0, enemy_spawn_interval - hg.time_to_sec_f(dt) * 0.025) # Cleanup debris if len(debris_list) > max_debris: tmp_debris = debris_list[0] debris_list.remove(debris_list[0]) tmp_debris.RemoveComponent(tmp_debris.GetRigidBody()) # scn.RemoveNode(tmp_debris) render_aim_cursor(plus, scn, target_angle) display_hud(plus, player_life / max_player_life, max(0, turret_cool_down) / turret_cool_down_duration, score) # Game over screen elif game_state == "GAME_OVER": display_game_over(plus, scn, score) if plus.KeyReleased(hg.KeySpace): game_state = "SCENE_RESET" # Reset the playfield for a new game elif game_state == "SCENE_RESET": for enemy in enemy_list: destroy_enemy(plus, scn, enemy[0]) for debris in debris_list: debris.RemoveComponent(debris.GetRigidBody()) game_state = "GAME_INIT" plus.UpdateScene(scn, dt) plus.Flip() plus.EndFrame() return plus