Make transit look nicer with transit dust

This commit is contained in:
Aronai Sieyes
2020-03-10 23:11:48 -04:00
committed by Leshana
parent e41ffb2446
commit b995c71a43
5 changed files with 59 additions and 37 deletions

View File

@@ -11,8 +11,12 @@
var/keep_sprite = FALSE
// heat_capacity = 700000 No.
var/static/list/dust_cache
var/static/list/speedspace_cache
var/static/list/phase_shift_by_x
var/static/list/phase_shift_by_y
/turf/space/proc/build_dust_cache()
//Static
LAZYINITLIST(dust_cache)
for (var/i in 0 to 25)
var/image/im = image('icons/turf/space_dust.dmi', "[i]")
@@ -20,6 +24,19 @@
im.alpha = 128 //80
im.blend_mode = BLEND_ADD
dust_cache["[i]"] = im
//Moving
LAZYINITLIST(speedspace_cache)
for (var/i in 0 to 14)
// NORTH/SOUTH
var/image/im = image('icons/turf/space_dust_transit.dmi', "speedspace_ns_[i]")
im.plane = DUST_PLANE
im.blend_mode = BLEND_ADD
speedspace_cache["NS_[i]"] = im
// EAST/WEST
im = image('icons/turf/space_dust_transit.dmi', "speedspace_ew_[i]")
im.plane = DUST_PLANE
im.blend_mode = BLEND_ADD
speedspace_cache["EW_[i]"] = im
/turf/space/Initialize()
. = ..()
@@ -28,7 +45,45 @@
update_starlight()
if (!dust_cache)
build_dust_cache()
add_overlay(dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"])
toggle_transit() //add static dust
/turf/space/proc/toggle_transit(var/direction)
cut_overlays()
if(!direction)
add_overlay(dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"])
return
if(direction & (NORTH|SOUTH))
if(!phase_shift_by_x)
phase_shift_by_x = get_cross_shift_list(15)
var/x_shift = phase_shift_by_x[src.x % (phase_shift_by_x.len - 1) + 1]
var/transit_state = ((direction & SOUTH ? world.maxy - src.y : src.y) + x_shift)%15
add_overlay(speedspace_cache["NS_[transit_state]"])
else if(direction & (EAST|WEST))
if(!phase_shift_by_y)
phase_shift_by_y = get_cross_shift_list(15)
var/y_shift = phase_shift_by_y[src.y % (phase_shift_by_y.len - 1) + 1]
var/transit_state = ((direction & WEST ? world.maxx - src.x : src.x) + y_shift)%15
add_overlay(speedspace_cache["EW_[transit_state]"])
for(var/atom/movable/AM in src)
if (AM.simulated && !AM.anchored)
AM.throw_at(get_step(src,reverse_direction(direction)), 5, 1)
//generates a list used to randomize transit animations so they aren't in lockstep
/turf/space/proc/get_cross_shift_list(var/size)
var/list/result = list()
result += rand(0, 14)
for(var/i in 2 to size)
var/shifts = list(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
shifts -= result[i - 1] //consecutive shifts should not be equal
if(i == size)
shifts -= result[1] //because shift list is a ring buffer
result += pick(shifts)
return result
/turf/space/is_space()
return 1

View File

@@ -7,26 +7,11 @@
/turf/space/transit/attackby(obj/O as obj, mob/user as mob)
return
//generates a list used to randomize transit animations so they aren't in lockstep
/turf/space/transit/proc/get_cross_shift_list(var/size)
var/list/result = list()
result += rand(0, 14)
for(var/i in 2 to size)
var/shifts = list(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
shifts -= result[i - 1] //consecutive shifts should not be equal
if(i == size)
shifts -= result[1] //because shift list is a ring buffer
result += pick(shifts)
return result
//------------------------
/turf/space/transit/north // moving to the north
icon_state = "arrow-north"
pushdirection = SOUTH // south because the space tile is scrolling south
var/static/list/phase_shift_by_x
/turf/space/transit/north/New()
..()
@@ -42,7 +27,6 @@
/turf/space/transit/south // moving to the south
icon_state = "arrow-south"
pushdirection = SOUTH // south because the space tile is scrolling south
var/static/list/phase_shift_by_x
/turf/space/transit/south/New()
..()
@@ -60,7 +44,6 @@
/turf/space/transit/east // moving to the east
icon_state = "arrow-east"
pushdirection = WEST
var/static/list/phase_shift_by_y
/turf/space/transit/east/New()
..()
@@ -76,7 +59,6 @@
/turf/space/transit/west // moving to the west
icon_state = "arrow-west"
pushdirection = WEST
var/static/list/phase_shift_by_y
/turf/space/transit/west/New()
..()

View File

@@ -70,27 +70,12 @@ proc/toggle_move_stars(zlevel, direction)
if(!zlevel)
return
var/gen_dir = null
if(direction & (NORTH|SOUTH))
gen_dir += "ns"
else if(direction & (EAST|WEST))
gen_dir += "ew"
if(!direction)
gen_dir = null
if (moving_levels["[zlevel]"] != gen_dir)
moving_levels["[zlevel]"] = gen_dir
if (moving_levels["[zlevel]"] != direction)
moving_levels["[zlevel]"] = direction
var/list/spaceturfs = block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))
for(var/turf/space/T in spaceturfs)
if(!gen_dir)
T.icon_state = initial(T.icon_state)
else
T.icon_state = "speedspace_[gen_dir]_[rand(1,15)]"
for(var/atom/movable/AM in T)
if (AM.simulated && !AM.anchored)
AM.throw_at(get_step(T,reverse_direction(direction)), 5, 1)
CHECK_TICK
T.toggle_transit(direction)
CHECK_TICK
/*
//list used to cache empty zlevels to avoid nedless map bloat