Merge pull request #4762 from Citadel-Station-13/upstream-merge-33817
[MIRROR] [READY]Pulling claw 2
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
|
||||
/obj/item/device/electronic_assembly/process()
|
||||
handle_idle_power()
|
||||
check_pulling()
|
||||
|
||||
/obj/item/device/electronic_assembly/proc/handle_idle_power()
|
||||
// First we generate power.
|
||||
@@ -376,6 +377,13 @@
|
||||
var/obj/item/integrated_circuit/IC = I
|
||||
IC.ext_moved(oldLoc, dir)
|
||||
|
||||
/obj/item/device/electronic_assembly/stop_pulling()
|
||||
..()
|
||||
for(var/I in assembly_components)
|
||||
var/obj/item/integrated_circuit/IC = I
|
||||
IC.stop_pulling()
|
||||
|
||||
|
||||
// Returns the object that is supposed to be used in attack messages, location checks, etc.
|
||||
// Override in children for special behavior.
|
||||
/obj/item/device/electronic_assembly/proc/get_object()
|
||||
@@ -393,8 +401,7 @@
|
||||
return acting_object.drop_location()
|
||||
|
||||
/obj/item/device/electronic_assembly/default //The /default electronic_assemblys are to allow the introduction of the new naming scheme without breaking old saves.
|
||||
name = "type-a electronic assembly"
|
||||
|
||||
name = "type-a electronic assembly"
|
||||
|
||||
/obj/item/device/electronic_assembly/calc
|
||||
name = "type-b electronic assembly"
|
||||
|
||||
@@ -306,4 +306,4 @@
|
||||
|
||||
set_pin_data(IC_OUTPUT, 1, result)
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
activate_pin(2)
|
||||
@@ -349,6 +349,45 @@
|
||||
set_pin_data(IC_OUTPUT, 3, contents.len)
|
||||
push_data()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/claw
|
||||
name = "pulling claw"
|
||||
desc = "Circuit which can pull things.."
|
||||
icon_state = "pull_claw"
|
||||
extended_desc = "The circuit accepts a reference to thing to be pulled. Modes: 0 for release.1 for pull. 2 for gressive grab."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
size = 3
|
||||
|
||||
complexity = 10
|
||||
inputs = list("target" = IC_PINTYPE_REF,"mode" = IC_PINTYPE_INDEX)
|
||||
outputs = list("is pulling" = IC_PINTYPE_BOOLEAN)
|
||||
activators = list("pulse in" = IC_PINTYPE_PULSE_IN,"pulse out" = IC_PINTYPE_PULSE_OUT,"released" = IC_PINTYPE_PULSE_OUT)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
power_draw_per_use = 50
|
||||
var/max_grab = 2 //change it to 1 if you tired of drone kung-fu.Return it to 2 if you miss it.
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/claw/do_work()
|
||||
var/obj/acting_object = get_object()
|
||||
var/atom/movable/AM = get_pin_data_as_type(IC_INPUT, 1, /atom/movable)
|
||||
var/mode = get_pin_data(IC_INPUT, 2)
|
||||
if(mode>max_grab)
|
||||
return
|
||||
if(AM)
|
||||
if(check_target(AM, exclude_contents = TRUE))
|
||||
acting_object.start_pulling(AM,mode)
|
||||
if(acting_object.pulling)
|
||||
set_pin_data(IC_OUTPUT, 1, TRUE)
|
||||
else
|
||||
set_pin_data(IC_OUTPUT, 1, FALSE)
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/claw/stop_pulling()
|
||||
..()
|
||||
set_pin_data(IC_OUTPUT, 1, FALSE)
|
||||
activate_pin(2)
|
||||
push_data()
|
||||
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/thrower
|
||||
name = "thrower"
|
||||
|
||||
@@ -452,24 +452,8 @@
|
||||
return 0
|
||||
|
||||
var/old_direction = dir
|
||||
var/atom/movable/pullee = pulling
|
||||
if(pullee && get_dist(src, pullee) > 1)
|
||||
stop_pulling()
|
||||
if(pullee && !isturf(pullee.loc) && pullee.loc != loc) //to be removed once all code that changes an object's loc uses forceMove().
|
||||
log_game("DEBUG:[src]'s pull on [pullee] wasn't broken despite [pullee] being in [pullee.loc]. Pull stopped manually.")
|
||||
stop_pulling()
|
||||
var/turf/T = loc
|
||||
. = ..()
|
||||
if(. && pulling && pulling == pullee) //we were pulling a thing and didn't lose it during our move.
|
||||
if(pulling.anchored)
|
||||
stop_pulling()
|
||||
return
|
||||
|
||||
var/pull_dir = get_dir(src, pulling)
|
||||
if(get_dist(src, pulling) > 1 || ((pull_dir - 1) & pull_dir)) //puller and pullee more than one tile away or in diagonal position
|
||||
pulling.Move(T, get_dir(pulling, T)) //the pullee tries to reach our previous position
|
||||
if(pulling && get_dist(src, pulling) > 1) //the pullee couldn't keep up
|
||||
stop_pulling()
|
||||
|
||||
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move.
|
||||
pulledby.stop_pulling()
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
return 1
|
||||
|
||||
//this and stop_pulling really ought to be /mob/living procs
|
||||
/mob/proc/start_pulling(atom/movable/AM, supress_message = 0)
|
||||
/mob/start_pulling(atom/movable/AM, supress_message = 0)
|
||||
if(!AM || !src)
|
||||
return FALSE
|
||||
if(!(AM.can_be_pulled(src)))
|
||||
@@ -410,20 +410,14 @@
|
||||
setDir(D)
|
||||
spintime -= speed
|
||||
|
||||
/mob/verb/stop_pulling()
|
||||
/mob/stop_pulling()
|
||||
..()
|
||||
update_pull_hud_icon()
|
||||
|
||||
/mob/verb/stop_pulling1()
|
||||
set name = "Stop Pulling"
|
||||
set category = "IC"
|
||||
|
||||
if(pulling)
|
||||
pulling.pulledby = null
|
||||
var/mob/living/ex_pulled = pulling
|
||||
pulling = null
|
||||
grab_state = 0
|
||||
update_pull_hud_icon()
|
||||
|
||||
if(isliving(ex_pulled))
|
||||
var/mob/living/L = ex_pulled
|
||||
L.update_canmove()// mob gets up if it was lyng down in a chokehold
|
||||
stop_pulling()
|
||||
|
||||
/mob/proc/update_pull_hud_icon()
|
||||
if(hud_used)
|
||||
|
||||
@@ -29,8 +29,6 @@
|
||||
var/obj/machinery/machine = null
|
||||
var/other_mobs = null
|
||||
|
||||
var/atom/movable/pulling = null
|
||||
var/grab_state = 0
|
||||
|
||||
var/next_move = null
|
||||
var/notransform = null //Carbon
|
||||
|
||||
@@ -266,24 +266,6 @@
|
||||
/mob/proc/mob_negates_gravity()
|
||||
return FALSE
|
||||
|
||||
//moves the mob/object we're pulling
|
||||
/mob/proc/Move_Pulled(atom/A)
|
||||
if(!pulling)
|
||||
return
|
||||
if(pulling.anchored || !pulling.Adjacent(src))
|
||||
stop_pulling()
|
||||
return
|
||||
if(isliving(pulling))
|
||||
var/mob/living/L = pulling
|
||||
if(L.buckled && L.buckled.buckle_prevents_pull) //if they're buckled to something that disallows pulling, prevent it
|
||||
stop_pulling()
|
||||
return
|
||||
if(A == loc && pulling.density)
|
||||
return
|
||||
if(!Process_Spacemove(get_dir(pulling.loc, A)))
|
||||
return
|
||||
step(pulling, get_dir(pulling.loc, A))
|
||||
|
||||
|
||||
/mob/proc/slip(s_amount, w_amount, obj/O, lube)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user