ID:1909672
 
Code:
client
var/tmp
controller/controller

New()
..()
controller = new(src)

Del()
controller = null
..()

verb
key_press(k as text)
set hidden = 1
set instant = 1
if(controller)
controller.key_press(k)

key_release(k as text)
set hidden = 1
set instant = 1
if(controller)
controller.key_release(k)

proc
dash(distance, dir)
mob.dash(distance, dir)


#define DASH_COOLDOWN 50 // 5 seconds
#define DASH_STAMINA_DRAIN 50

mob
var/tmp/last_dash = 0

proc
get_dash_distance()
return 3

can_dash()
if(last_dash > world.time) return 0


if(dashtoggle=="Off")
src << "You have dash toggled off!"
//can_dash(0)
return 0


if(DASH_STAMINA_DRAIN >= health)
src << "You do not have enough stamina to dash!"
return 0

health -= DASH_STAMINA_DRAIN
return 1

dash(distance, dir)
if(!can_dash(src))
return

distance = distance || get_dash_distance()

for(var/i in 1 to 3)
afterimage_effect(loc, src, state = icon_state, dir = dir)
step(src, dir)
sleep(world.tick_lag)

last_dash = world.time + DASH_COOLDOWN + (world.tick_lag * distance)


proc/afterimage_effect(turf/loc, atom/movable/user, fade_time = 20,
state,
dir,
pixel_x = 0, pixel_y = 0
)

var/obj/temp = new/obj {alpha = 160} (loc)
temp.icon = user.icon
temp.overlays = user.overlays
temp.underlays = user.underlays
temp.icon_state = state
temp.dir = dir
//temp.step_x = step_x
//temp.step_y = step_y
temp.pixel_x = pixel_x
temp.pixel_y = pixel_y

animate(temp, alpha = 0, time = fade_time)
spawn(fade_time) if(temp) temp.loc = null



controller
var/tmp
client/client

list/keys = list()
list/key_press_time = list()
list/key_release_time = list()
list/key_taps = list()
list/movement_keys = list()
last_key


New(client/master)
if(master)
client = master


proc
key_press(key)
keys[key] = 1
key_press_time[key] = world.time

//world << "[key] has been pressed at [world.time]"
if(key != last_key)
key_taps[key] = 1
else
key_taps[key]++
if(key_taps[key] == 2)
var/last_release = world.time - key_release_time[key]
if(last_release <= DOUBLE_PRESS_TIME)
if(MOVEMENT_KEYS[key])
client.dash(dir = MOVEMENT_KEYS[key])
else
if(hascall(client, "[key]_double_press"))
call(client, "[key]_double_press")()
else
key_taps[key] = 1

if(MOVEMENT_KEYS[key])
movement_keys |= key
if(!client.moving)
spawn() client.move()
else
if(hascall(client, "[key]_press"))
call(client, "[key]_press")()

last_key = key


key_release(key)
keys[key] = 0
key_release_time[key] = world.time

//world << "[key] has been released at [world.time]"

if(MOVEMENT_KEYS[key])
movement_keys -= key
if(!client.moving)
spawn() client.move()

if(hascall(client, "[key]_release"))
call(client, "[key]_release")()


client
var/tmp
moving

proc
get_key_dir()
var/recent_key = controller.movement_keys.len && controller.movement_keys[controller.movement_keys.len]

if(controller.movement_keys.len == 2)
if(controller.keys[KEY_NORTH])
if(controller.keys[KEY_EAST])
Northeast()
return 1
else if(controller.keys[KEY_WEST])
Northwest()
return 1
else
North()
return 1
else if(controller.keys[KEY_SOUTH])
if(controller.keys[KEY_EAST])
Southeast()
return 1
else if(controller.keys[KEY_WEST])
Southwest()
return 1
else
South()
return 1
else
if(controller.keys[KEY_EAST])
East()
return 1
else if(controller.keys[KEY_WEST])
West()
return 1

if(recent_key && controller.keys[recent_key])
call(src, MOVEMENT2COMMAND[recent_key])()
return 1
return 0


move()
if(moving) return 0
moving = 1

spawn()
set background = 1
var/d
while(src)
d = get_key_dir()

if(!d) break

sleep(world.tick_lag)


moving = 0


Problem description:

it does this weird thing where if you toggle dash off when you double tap the directional key it makes it look like ur skipping tiles is there any way i can make it so double tap doesnt do that when dash is toggled off?