mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-28 06:28:01 +01:00
Better clamping method, more clean-up
This commit is contained in:
@@ -65,4 +65,14 @@
|
||||
#define MAT_PLASTITANIUM "plastitanium"
|
||||
#define MAT_PLASTITANIUMHULL "plastitanium hull"
|
||||
#define MAT_PLASTITANIUMGLASS "plastitanium glass"
|
||||
#define MAT_GOLDHULL "gold hull"
|
||||
#define MAT_GOLDHULL "gold hull"
|
||||
|
||||
#define RESIZE_HUGE = 2
|
||||
#define RESIZE_BIG = 1.5
|
||||
#define RESIZE_NORMAL = 1
|
||||
#define RESIZE_SMALL = 0.5
|
||||
#define RESIZE_TINY = 0.25
|
||||
#define RESIZE_A_HUGEBIG = (RESIZE_HUGE + RESIZE_BIG) / 2
|
||||
#define RESIZE_A_BIGNORMAL = (RESIZE_BIG + RESIZE_NORMAL) / 2
|
||||
#define RESIZE_A_NORMALSMALL = (RESIZE_NORMAL + RESIZE_SMALL) / 2
|
||||
#define RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
@@ -2,13 +2,6 @@
|
||||
/area
|
||||
var/limit_mob_size = TRUE //If mob size is limited in the area.
|
||||
|
||||
/area/Entered(mob/living/H, oldLoc)
|
||||
//Clamps mob size when entering a new area that has size limit.
|
||||
//Mobs with size_uncapped set to TRUE or 1 will be ignored.
|
||||
. = ..()
|
||||
if (src.limit_mob_size && isliving(H) && !H.size_uncapped)
|
||||
H.resize(H.size_multiplier)
|
||||
|
||||
/area/shuttle/belter
|
||||
name = "Belter Shuttle"
|
||||
icon_state = "shuttle2"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/client/proc/resize(var/mob/living/L in player_list)
|
||||
/client/proc/resize(var/mob/living/L in mob_list)
|
||||
set name = "Resize"
|
||||
set desc = "Resizes any living mob without any restrictions on size."
|
||||
set category = "Fun"
|
||||
@@ -7,7 +7,10 @@
|
||||
|
||||
var/size_multiplier = input(usr, "Input size multiplier.", "Resize", 1)
|
||||
L.resize(size_multiplier, TRUE, TRUE)
|
||||
L.size_uncapped = TRUE
|
||||
if(size_multiplier in range(RESIZE_TINY, RESIZE_HUGE))
|
||||
L.size_uncapped = FALSE
|
||||
else
|
||||
L.size_uncapped = TRUE
|
||||
|
||||
log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].")
|
||||
feedback_add_details("admin_verb","RESIZE")
|
||||
@@ -1,16 +1,5 @@
|
||||
|
||||
//these aren't defines so they can stay in this file
|
||||
var/const/RESIZE_HUGE = 2
|
||||
var/const/RESIZE_BIG = 1.5
|
||||
var/const/RESIZE_NORMAL = 1
|
||||
var/const/RESIZE_SMALL = 0.5
|
||||
var/const/RESIZE_TINY = 0.25
|
||||
|
||||
//average
|
||||
var/const/RESIZE_A_HUGEBIG = (RESIZE_HUGE + RESIZE_BIG) / 2
|
||||
var/const/RESIZE_A_BIGNORMAL = (RESIZE_BIG + RESIZE_NORMAL) / 2
|
||||
var/const/RESIZE_A_NORMALSMALL = (RESIZE_NORMAL + RESIZE_SMALL) / 2
|
||||
var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
GLOBAL_LIST_EMPTY(size_uncapped_mobs)
|
||||
GLOBAL_VAR(size_uncapped_mobs_timer)
|
||||
|
||||
// Adding needed defines to /mob/living
|
||||
// Note: Polaris had this on /mob/living/carbon/human We need it higher up for animals and stuff.
|
||||
@@ -71,11 +60,42 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/proc/add_to_uncapped_list(var/mob/living/L)
|
||||
if(!GLOB.size_uncapped_mobs.len)
|
||||
GLOB.size_uncapped_mobs_timer = addtimer(CALLBACK(GLOBAL_PROC, .check_uncapped_list), 2 SECONDS, TIMER_LOOP | TIMER_UNIQUE | TIMER_STOPPABLE)
|
||||
GLOB.size_uncapped_mobs |= weakref(L)
|
||||
|
||||
/proc/remove_from_uncapped_list(var/mob/living/L)
|
||||
if(!GLOB.size_uncapped_mobs.len)
|
||||
return
|
||||
|
||||
GLOB.size_uncapped_mobs -= weakref(L)
|
||||
|
||||
if(!GLOB.size_uncapped_mobs.len)
|
||||
deltimer(GLOB.size_uncapped_mobs_timer)
|
||||
|
||||
/proc/check_uncapped_list()
|
||||
for(var/weakref/wr in GLOB.size_uncapped_mobs)
|
||||
var/mob/living/L = wr.resolve()
|
||||
var/area/A = get_area(L)
|
||||
if(!istype(L))
|
||||
GLOB.size_uncapped_mobs -= wr
|
||||
continue
|
||||
|
||||
if((A.limit_mob_size && !L.size_uncapped) && (L.size_multiplier <= RESIZE_TINY || L.size_multiplier >= RESIZE_HUGE))
|
||||
L.resize(L.size_multiplier)
|
||||
GLOB.size_uncapped_mobs -= wr
|
||||
|
||||
if(!GLOB.size_uncapped_mobs.len)
|
||||
deltimer(GLOB.size_uncapped_mobs_timer)
|
||||
|
||||
/mob/living/proc/resize(var/new_size, var/animate = TRUE, var/uncapped = FALSE)
|
||||
if(!uncapped)
|
||||
new_size = clamp(new_size, RESIZE_TINY, RESIZE_HUGE)
|
||||
src.size_uncapped = FALSE
|
||||
|
||||
remove_from_uncapped_list(src)
|
||||
else
|
||||
add_to_uncapped_list(src)
|
||||
if(size_multiplier == new_size)
|
||||
return 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user