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?