From 1ce259537b0612beb53038277e09f971cbd171cb Mon Sep 17 00:00:00 2001 From: Cameron Reikes Date: Thu, 28 Sep 2023 11:25:44 -0700 Subject: [PATCH] Editor panning with mouse --- assets.mdesk | 8 ++++++++ assets/Select.png | 3 +++ character_info.h | 3 +-- main.c | 37 ++++++++++++++++++++++++++----------- makeprompt.h | 2 ++ 5 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 assets/Select.png diff --git a/assets.mdesk b/assets.mdesk index 4fc20d2..8ae7d9d 100644 --- a/assets.mdesk +++ b/assets.mdesk @@ -118,6 +118,14 @@ { filepath: "RightArrow.png", } +@image move: +{ + filepath: "Move.png", +} +@image select: +{ + filepath: "Select.png", +} @image white_square: { filepath: "white square.png", diff --git a/assets/Select.png b/assets/Select.png new file mode 100644 index 0000000..07ede9d --- /dev/null +++ b/assets/Select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:842aecf8b7e026be72653f0c2d9b25c120f204cb469278a94dc4b2a5280c5de8 +size 2151 diff --git a/character_info.h b/character_info.h index 4f84e44..22950d1 100644 --- a/character_info.h +++ b/character_info.h @@ -74,5 +74,4 @@ ActionInfo actions[] = { .description = "Holsters your shotgun, no longer threatening who you're aiming at.", NO_ARGUMENT, }, -}; - +}; \ No newline at end of file diff --git a/main.c b/main.c index 0f21333..164cafd 100644 --- a/main.c +++ b/main.c @@ -387,6 +387,7 @@ void play_audio(AudioSample *sample, float volume) #define SAPP_KEYCODE_MAX SAPP_KEYCODE_MENU bool keydown[SAPP_KEYCODE_MAX] = { 0 }; bool keypressed[SAPP_KEYCODE_MAX] = { 0 }; +Vec2 mouse_movement = { 0 }; typedef struct { bool open; @@ -5528,22 +5529,26 @@ void frame(void) text_input_fade = Lerp(text_input_fade, unwarped_dt * 8.0f, receiving_text_input ? 1.0f : 0.0f); Vec3 cam_target_pos = V3(0,0,0); + if(gs.edit.enabled) { + cam_target_pos.x = gs.edit.camera_panning.x; + cam_target_pos.z = gs.edit.camera_panning.y; + } //dbgline(V2(0,0), V2(500, 500)); const float vertical_to_horizontal_ratio = CAM_VERTICAL_TO_HORIZONTAL_RATIO; const float cam_distance = CAM_DISTANCE; - Vec3 away_from_player; + Vec3 cam_offset_from_target; { float ratio = vertical_to_horizontal_ratio; float x = sqrtf( (cam_distance * cam_distance) / (1 + (ratio*ratio)) ); float y = ratio * x; - away_from_player = V3(x, y, 0.0); + cam_offset_from_target = V3(x, y, 0.0); } - away_from_player = MulM4V4(Rotate_RH(-PI32/3.0f + PI32, V3(0,1,0)), IsPoint(away_from_player)).xyz; + cam_offset_from_target = MulM4V4(Rotate_RH(-PI32/3.0f + PI32, V3(0,1,0)), IsPoint(cam_offset_from_target)).xyz; if(get_cur_room(&gs, &level_threedee)->camera_offset_is_overridden) { - away_from_player = get_cur_room(&gs, &level_threedee)->camera_offset; + cam_offset_from_target = get_cur_room(&gs, &level_threedee)->camera_offset; } - Vec3 cam_pos = AddV3(cam_target_pos, away_from_player); + Vec3 cam_pos = AddV3(cam_target_pos, cam_offset_from_target); Vec2 movement = { 0 }; if (mobile_controls) @@ -5843,6 +5848,19 @@ void frame(void) if(right) gs.edit.room_index += 1; // gs.edit.room_index %= num_rooms(&level_threedee); Why the fuck doesn't this just work gs.edit.room_index = mod(gs.edit.room_index, num_rooms(&level_threedee)); + + if(mouse_down) { + Vec2 to_pos = mouse_pos; + Vec2 from_pos = AddV2(mouse_pos, mouse_movement); + // dbgline(from_pos, to_pos); + Vec3 to_plane = point_on_plane_from_camera_point(view, to_pos); + Vec3 from_plane = point_on_plane_from_camera_point(view, from_pos); + Vec3 movement_on_plane = SubV3(to_plane, from_plane); + // dbg3dline(from_plane, to_plane); + Vec2 movement = V2(movement_on_plane.x, movement_on_plane.z); + gs.edit.camera_panning_target = AddV2(gs.edit.camera_panning_target, movement); + } + gs.edit.camera_panning = LerpV2(gs.edit.camera_panning, unwarped_dt * 19.0f, gs.edit.camera_panning_target); } } PROFILE_SCOPE("Entity UI Rendering") @@ -6832,12 +6850,6 @@ void frame(void) } #ifdef DEVTOOLS - - if(keypressed[SAPP_KEYCODE_J]) - { - Log("Judgement Day!\n"); - } - // statistics @Place(devtools drawing developer menu drawing) if (show_devtools) PROFILE_SCOPE("devtools drawing") @@ -7073,6 +7085,7 @@ void frame(void) memset(keypressed, 0, sizeof(keypressed)); pressed = (PressedState) { 0 }; + mouse_movement = V2(0,0); } } @@ -7372,6 +7385,8 @@ void event(const sapp_event *e) } if (e->type == SAPP_EVENTTYPE_MOUSE_MOVE) { + mouse_movement.x += e->mouse_dx; + mouse_movement.y -= e->mouse_dy; bool ignore_movement = false; #ifdef DEVTOOLS if (mouse_frozen) ignore_movement = true; diff --git a/makeprompt.h b/makeprompt.h index bc51e96..97a51bd 100644 --- a/makeprompt.h +++ b/makeprompt.h @@ -288,6 +288,8 @@ typedef struct Npc { typedef struct EditorState { bool enabled; int room_index; + Vec2 camera_panning_target; + Vec2 camera_panning; } EditorState; typedef struct GameState {