Adjusts how undocking signals are used

Now both server and client will to undock concurrently. It looks much
more natural.
This commit is contained in:
mwerezak
2014-06-12 23:11:51 -04:00
parent 232e50e415
commit dc7d8fafe0
5 changed files with 36 additions and 32 deletions

View File

@@ -127,7 +127,7 @@
if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled
..(target) ..(target)
/*** DEBUG VERBS ***/ /*** DEBUG VERBS ***
/datum/computer/file/embedded_program/docking/proc/print_state() /datum/computer/file/embedded_program/docking/proc/print_state()
world << "id_tag: [id_tag]" world << "id_tag: [id_tag]"
@@ -167,4 +167,4 @@
set src in view(1) set src in view(1)
src.program:initiate_undocking() src.program:initiate_undocking()
/**/ */

View File

@@ -24,6 +24,20 @@
MODE_NONE|STATE_UNDOCKED idle - not docked. MODE_NONE|STATE_UNDOCKED idle - not docked.
MODE_NONE|anything else should never happen. MODE_NONE|anything else should never happen.
*** Docking Signals ***
Docking
Client sends request_dock
When server is ready, sends confirm_dock
Client sends confirm_dock back
Undocking
Client sends request_undock
When server is ready, sends confirm_dock
Client sends confirm_dock back
Note that in both cases each side exchanges confirm_dock before the docking operation is considered done.
*** Override, what is it? *** *** Override, what is it? ***
The purpose of enabling the override is to prevent the docking program from automatically doing things with the docking port when docking or undocking. The purpose of enabling the override is to prevent the docking program from automatically doing things with the docking port when docking or undocking.
@@ -45,6 +59,7 @@
var/response_sent = 0 //so we don't spam confirmation messages var/response_sent = 0 //so we don't spam confirmation messages
var/override_enabled = 0 //skips checks for the docking port being ready var/override_enabled = 0 //skips checks for the docking port being ready
var/received_confirm = 0 //for undocking, whether the client has recieved a confirmation from the server
/datum/computer/file/embedded_program/docking/receive_signal(datum/signal/signal, receive_method, receive_param) /datum/computer/file/embedded_program/docking/receive_signal(datum/signal/signal, receive_method, receive_param)
var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id
@@ -78,10 +93,11 @@
if ("confirm_undock") if ("confirm_undock")
if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target) if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target)
send_docking_command(tag_target, "confirm_undock") received_confirm = 1
else if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKING && receive_tag == tag_target)
if (!override_enabled) if (!override_enabled)
finish_undocking() finish_undocking()
reset() //client is done undocking! reset() //server is done undocking!
if ("request_undock") if ("request_undock")
if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target) if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target)
@@ -108,16 +124,15 @@
response_sent = 0 response_sent = 0
if (STATE_UNDOCKING) if (STATE_UNDOCKING)
if (ready_for_undocking()) if (ready_for_undocking())
if (control_mode == MODE_CLIENT) if (control_mode == MODE_CLIENT && received_confirm)
if (!response_sent) send_docking_command(tag_target, "confirm_undock") //tell the server we are done undocking.
send_docking_command(tag_target, "request_undock") //tell the server we want to undock now. if (!override_enabled)
response_sent = 1 finish_undocking()
reset() //client is done undocking!
else if (control_mode == MODE_SERVER) else if (control_mode == MODE_SERVER)
send_docking_command(tag_target, "confirm_undock") //tell the client we are OK to undock. send_docking_command(tag_target, "confirm_undock") //tell the client we are OK to undock.
if (!override_enabled)
finish_undocking()
reset() //server is done undocking!
if (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING) if (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)
response_sent = 0 response_sent = 0
@@ -148,7 +163,7 @@
if (!override_enabled) if (!override_enabled)
prepare_for_undocking() prepare_for_undocking()
//send_docking_command(tag_target, "request_undock") send_docking_command(tag_target, "request_undock")
//tell the docking port to start getting ready for docking - e.g. pressurize //tell the docking port to start getting ready for docking - e.g. pressurize
/datum/computer/file/embedded_program/docking/proc/prepare_for_docking() /datum/computer/file/embedded_program/docking/proc/prepare_for_docking()
@@ -185,6 +200,7 @@
control_mode = MODE_NONE control_mode = MODE_NONE
tag_target = null tag_target = null
response_sent = 0 response_sent = 0
received_confirm = 0
/datum/computer/file/embedded_program/docking/proc/force_undock() /datum/computer/file/embedded_program/docking/proc/force_undock()
world << "[id_tag]: forcing undock" world << "[id_tag]: forcing undock"

View File

@@ -127,7 +127,7 @@
/datum/computer/file/embedded_program/docking/simple/ready_for_undocking() /datum/computer/file/embedded_program/docking/simple/ready_for_undocking()
return (memory["door_status"]["state"] == "closed" && memory["door_status"]["lock"] == "locked") return (memory["door_status"]["state"] == "closed" && memory["door_status"]["lock"] == "locked")
/*** DEBUG VERBS ***/ /*** DEBUG VERBS ***
/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/view_state() /obj/machinery/embedded_controller/radio/simple_docking_controller/verb/view_state()
set category = "Debug" set category = "Debug"
@@ -154,4 +154,4 @@
set src in view(1) set src in view(1)
src.program:initiate_undocking() src.program:initiate_undocking()
/**/ */

View File

@@ -95,7 +95,7 @@
process_state = WAIT_ARRIVE process_state = WAIT_ARRIVE
/datum/shuttle/ferry/proc/cancel_launch() /datum/shuttle/ferry/proc/cancel_launch(var/obj/machinery/computer/shuttle_control/user)
if (!can_cancel()) return if (!can_cancel()) return
moving_status = SHUTTLE_IDLE moving_status = SHUTTLE_IDLE
@@ -119,9 +119,9 @@
return 1 return 1
/datum/shuttle/ferry/proc/can_force() /datum/shuttle/ferry/proc/can_force()
if (moving_status != SHUTTLE_IDLE && process_state == WAIT_LAUNCH) if (moving_status == SHUTTLE_IDLE && process_state == WAIT_LAUNCH)
return 0
return 1 return 1
return 0
/datum/shuttle/ferry/proc/can_cancel() /datum/shuttle/ferry/proc/can_cancel()
if (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH) if (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH)

View File

@@ -29,19 +29,6 @@
Docking Status: Docking Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
<!--
{{if docking_status == "docked"}}
<span class="good">DOCKED</span>
{{else docking_status == "docking"}}
<span class="average">DOCKING</span>
{{else docking_status == "undocking"}}
<span class="average">UNDOCKING</span>
{{else docking_status == "undocked"}}
<span class="idle">UNDOCKED</span>
{{else}}
<span class="bad">ERROR</span>
{{/if}}
-->
{{if docking_status == "docked"}} {{if docking_status == "docked"}}
<span class="good">DOCKED</span> <span class="good">DOCKED</span>
{{else docking_status == "docking"}} {{else docking_status == "docking"}}
@@ -73,6 +60,7 @@
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{:~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, can_launch? null : 'disabled' , null)}} {{:~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, can_launch? null : 'disabled' , null)}}
{{:~link('Cancel Launch', 'cancel', {'cancel' : '1'}, can_cancel? null : 'disabled' , null)}} {{:~link('Cancel Launch', 'cancel', {'cancel' : '1'}, can_cancel? null : 'disabled' , null)}}
{{:~link('Force Launch', 'alert', {'force' : '1'}, can_force? null : 'disabled' , can_force? 'redBackground' : null)}}
</div> </div>
</div> </div>
</div> </div>