From 21255c83b139cba13b97d9a6a6033aab48c1911c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 29 Dec 2020 03:38:32 +0100 Subject: [PATCH] [MIRROR] Fixes clown cars + Fixes mechs not being able to open doors (#2354) * Fixes clown cars + Fixes mechs not being able to open doors (#55748) * honk honk * realized the speedbike and wagon are not sealed * Fixes clown cars + Fixes mechs not being able to open doors Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com> --- .../components/riding/riding_vehicle.dm | 22 ++----------- code/modules/vehicles/cars/car.dm | 31 ++++++++++++++++--- code/modules/vehicles/mecha/_mecha.dm | 2 +- code/modules/vehicles/sealed.dm | 16 ++++++++++ code/modules/vehicles/speedbike.dm | 2 +- 5 files changed, 47 insertions(+), 26 deletions(-) diff --git a/code/datums/components/riding/riding_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm index 19a36495c9d..46c3b11a14a 100644 --- a/code/datums/components/riding/riding_vehicle.dm +++ b/code/datums/components/riding/riding_vehicle.dm @@ -201,28 +201,10 @@ set_vehicle_dir_offsets(EAST, -18, 0) set_vehicle_dir_offsets(WEST, -18, 0) - -/datum/component/riding/vehicle/car - vehicle_move_delay = 1 - COOLDOWN_DECLARE(enginesound_cooldown) - -/datum/component/riding/vehicle/car/handle_ride(mob/user, direction) - . = ..() - if(!.) - return - var/obj/vehicle/sealed/car/car_parent = parent - if(!COOLDOWN_FINISHED(src, enginesound_cooldown)) - return - COOLDOWN_START(src, enginesound_cooldown, car_parent.engine_sound_length) - playsound(car_parent, car_parent.engine_sound, 100, TRUE) - -/datum/component/riding/vehicle/car/clowncar - keytype = /obj/item/bikehorn - -/datum/component/riding/vehicle/car/speedwagon +/datum/component/riding/vehicle/speedwagon vehicle_move_delay = 0 -/datum/component/riding/vehicle/car/speedwagon/handle_specials() +/datum/component/riding/vehicle/speedwagon/handle_specials() . = ..() set_riding_offsets(1, list(TEXT_NORTH = list(-10, -4), TEXT_SOUTH = list(16, 3), TEXT_EAST = list(-4, 30), TEXT_WEST = list(4, -3))) set_riding_offsets(2, list(TEXT_NORTH = list(19, -5, 4), TEXT_SOUTH = list(-13, 3, 4), TEXT_EAST = list(-4, -3, 4.1), TEXT_WEST = list(4, 28, 3.9))) diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm index 4041b3db168..ef1aed8aeb7 100644 --- a/code/modules/vehicles/cars/car.dm +++ b/code/modules/vehicles/cars/car.dm @@ -7,12 +7,11 @@ var/engine_sound_length = 2 SECONDS ///Time it takes to break out of the car. var/escape_time = 6 SECONDS + /// How long it takes to move, cars don't use the riding component similar to mechs so we handle it ourselves + var/vehicle_move_delay = 1 + /// How long it takes to rev (vrrm vrrm!) COOLDOWN_DECLARE(enginesound_cooldown) -/obj/vehicle/sealed/car/Initialize() - . = ..() - AddElement(/datum/element/ridable, /datum/component/riding/vehicle/car) - /obj/vehicle/sealed/car/generate_actions() . = ..() initialize_controller_action_type(/datum/action/vehicle/sealed/remove_key, VEHICLE_CONTROL_DRIVE) @@ -76,3 +75,27 @@ explosion(loc, 0, 1, 2, 3, 0) log_message("[src] exploded due to destruction", LOG_ATTACK) return ..() + +/obj/vehicle/sealed/car/relaymove(mob/living/user, direction) + if(canmove && (!key_type || istype(inserted_key, key_type))) + vehicle_move(direction) + return TRUE + +/obj/vehicle/sealed/car/vehicle_move(direction) + if(!COOLDOWN_FINISHED(src, cooldown_vehicle_move)) + return FALSE + COOLDOWN_START(src, cooldown_vehicle_move, vehicle_move_delay) + + if(COOLDOWN_FINISHED(src, enginesound_cooldown)) + COOLDOWN_START(src, enginesound_cooldown, engine_sound_length) + playsound(get_turf(src), engine_sound, 100, TRUE) + + if(trailer) + var/dir_to_move = get_dir(trailer.loc, loc) + var/did_move = step(src, direction) + if(did_move) + step(trailer, dir_to_move) + return did_move + else + after_move(direction) + return step(src, direction) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index a031292f4ff..b7a04c9246d 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -611,7 +611,7 @@ vehicle_move(direction) return TRUE -/obj/vehicle/sealed/mecha/proc/vehicle_move(direction, forcerotate = FALSE) +/obj/vehicle/sealed/mecha/vehicle_move(direction, forcerotate = FALSE) if(!COOLDOWN_FINISHED(src, cooldown_vehicle_move)) return FALSE COOLDOWN_START(src, cooldown_vehicle_move, movedelay) diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 19233cbcd5b..81ae6950e7d 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -25,6 +25,13 @@ if(ismob(AM)) remove_occupant(AM) +// so that we can check the access of the vehicle's occupants. Ridden vehicles do this in the riding component, but these don't have that +/obj/vehicle/sealed/Bump(atom/A) + . = ..() + if(istype(A, /obj/machinery/door)) + var/obj/machinery/door/conditionalwall = A + for(var/m in occupants) + conditionalwall.bumpopen(m) /obj/vehicle/sealed/after_add_occupant(mob/M) . = ..() @@ -128,3 +135,12 @@ /obj/vehicle/sealed/AllowDrop() return FALSE + +/obj/vehicle/sealed/relaymove(mob/living/user, direction) + if(canmove) + vehicle_move(direction) + return TRUE + +/// Sinced sealed vehicles (cars and mechs) don't have riding components, the actual movement is handled here from [/obj/vehicle/sealed/proc/relaymove] +/obj/vehicle/sealed/proc/vehicle_move(direction) + return FALSE diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index 5ed9759303a..1f61deb6145 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -46,7 +46,7 @@ /obj/vehicle/ridden/space/speedwagon/Initialize() . = ..() add_overlay(overlay) - AddElement(/datum/element/ridable, /datum/component/riding/vehicle/car/speedwagon) + AddElement(/datum/element/ridable, /datum/component/riding/vehicle/speedwagon) /obj/vehicle/ridden/space/speedwagon/Bump(atom/A) . = ..()