mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 07:48:55 +00:00
BEESTATION PORT PR#4567: Filters + plane_master atomized
This commit is contained in:
@@ -200,5 +200,8 @@
|
||||
#define SPLASHSCREEN_PLANE 90
|
||||
#define SPLASHSCREEN_RENDER_TARGET "SPLASHSCREEN_PLANE"
|
||||
|
||||
///Plane master controller keys
|
||||
#define PLANE_MASTERS_GAME "plane_masters_game"
|
||||
|
||||
///Layer for screentips
|
||||
#define SCREENTIP_LAYER 40
|
||||
|
||||
@@ -57,7 +57,8 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
|
||||
var/list/inv_slots[SLOTS_AMT] // /atom/movable/screen/inventory objects, ordered by their slot ID.
|
||||
var/list/hand_slots // /atom/movable/screen/inventory/hand objects, assoc list of "[held_index]" = object
|
||||
var/list/atom/movable/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object
|
||||
|
||||
///Assoc list of controller groups, associated with key string group name with value of the plane master controller ref
|
||||
var/list/atom/movable/plane_master_controller/plane_master_controllers = list()
|
||||
|
||||
///UI for screentips that appear when you mouse over things
|
||||
var/atom/movable/screen/screentip/screentip_text
|
||||
@@ -113,6 +114,10 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
|
||||
plane_masters["[instance.plane]"] = instance
|
||||
instance.backdrop(mymob)
|
||||
|
||||
for(var/mytype in subtypesof(/atom/movable/plane_master_controller))
|
||||
var/atom/movable/plane_master_controller/controller_instance = new mytype(src)
|
||||
plane_master_controllers[controller_instance.name] = controller_instance
|
||||
|
||||
screentip_text = new(null, src)
|
||||
static_inventory += screentip_text
|
||||
|
||||
@@ -153,6 +158,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
|
||||
combo_display = null
|
||||
|
||||
QDEL_LIST_ASSOC_VAL(plane_masters)
|
||||
QDEL_LIST_ASSOC_VAL(plane_master_controllers)
|
||||
QDEL_LIST(screenoverlays)
|
||||
mymob = null
|
||||
|
||||
|
||||
87
code/_onclick/hud/plane_master_controller.dm
Normal file
87
code/_onclick/hud/plane_master_controller.dm
Normal file
@@ -0,0 +1,87 @@
|
||||
///Atom that manages and controls multiple planes. It's an atom so we can hook into add_filter etc. Multiple controllers can control one plane.
|
||||
/atom/movable/plane_master_controller
|
||||
///List of planes in this controllers control. Initially this is a normal list, but becomes an assoc list of plane numbers as strings | plane instance
|
||||
var/list/controlled_planes = list()
|
||||
///hud that owns this controller
|
||||
var/datum/hud/owner_hud
|
||||
|
||||
///Ensures that all the planes are correctly in the controlled_planes list.
|
||||
/atom/movable/plane_master_controller/New(hud)
|
||||
. = ..()
|
||||
owner_hud = hud
|
||||
var/assoc_controlled_planes = list()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/instance = owner_hud.plane_masters["[i]"]
|
||||
if(!instance) //If we looked for a hud that isn't instanced, just keep going
|
||||
stack_trace("[i] isn't a valid plane master layer for [owner_hud.type], are you sure it exists in the first place?")
|
||||
continue
|
||||
assoc_controlled_planes["[i]"] = instance
|
||||
controlled_planes = assoc_controlled_planes
|
||||
|
||||
// From BeeStation
|
||||
/atom/movable/plane_master_controller/Destroy()
|
||||
if(owner_hud)
|
||||
owner_hud.plane_master_controllers -= src
|
||||
controlled_planes.Cut()
|
||||
return ..()
|
||||
|
||||
///Full override so we can just use filterrific
|
||||
/atom/movable/plane_master_controller/add_filter(name, priority, list/params)
|
||||
. = ..()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
pm_iterator.add_filter(name, priority, params)
|
||||
|
||||
///Full override so we can just use filterrific
|
||||
/atom/movable/plane_master_controller/remove_filter(name_or_names)
|
||||
. = ..()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
pm_iterator.remove_filter(name_or_names)
|
||||
|
||||
/atom/movable/plane_master_controller/update_filters()
|
||||
. = ..()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
pm_iterator.update_filters()
|
||||
|
||||
///Gets all filters for this controllers plane masters
|
||||
/atom/movable/plane_master_controller/proc/get_filters(name)
|
||||
. = list()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
. += pm_iterator.get_filter(name)
|
||||
|
||||
///Transitions all filters owned by this plane master controller
|
||||
/atom/movable/plane_master_controller/transition_filter(name, time, list/new_params, easing, loop)
|
||||
. = ..()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
pm_iterator.transition_filter(name, time, new_params, easing, loop)
|
||||
|
||||
///Full override so we can just use filterrific
|
||||
/atom/movable/plane_master_controller/add_atom_colour(coloration, colour_priority)
|
||||
. = ..()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
pm_iterator.add_atom_colour(coloration, colour_priority)
|
||||
|
||||
|
||||
///Removes an instance of colour_type from the atom's atom_colours list
|
||||
/atom/movable/plane_master_controller/remove_atom_colour(colour_priority, coloration)
|
||||
. = ..()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
pm_iterator.remove_atom_colour(colour_priority, coloration)
|
||||
|
||||
|
||||
///Resets the atom's color to null, and then sets it to the highest priority colour available
|
||||
/atom/movable/plane_master_controller/update_atom_colour()
|
||||
for(var/i in controlled_planes)
|
||||
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
|
||||
pm_iterator.update_atom_colour()
|
||||
|
||||
|
||||
/atom/movable/plane_master_controller/game
|
||||
name = PLANE_MASTERS_GAME
|
||||
controlled_planes = list(FLOOR_PLANE, GAME_PLANE, WALL_PLANE, ABOVE_WALL_PLANE, LIGHTING_PLANE, EMISSIVE_PLANE)
|
||||
@@ -160,9 +160,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only
|
||||
var/list/juice_results //A reagent list containing blah blah... but when JUICED in a grinder!
|
||||
|
||||
//the outline filter on hover
|
||||
var/outline_filter
|
||||
|
||||
/* Our block parry data. Should be set in init, or something if you are using it.
|
||||
* This won't be accessed without ITEM_CAN_BLOCK or ITEM_CAN_PARRY so do not set it unless you have to to save memory.
|
||||
* If you decide it's a good idea to leave this unset while turning the flags on, you will runtime. Enjoy.
|
||||
|
||||
@@ -182,10 +182,7 @@
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
if(client)
|
||||
if(!eye_blurry)
|
||||
remove_eyeblur()
|
||||
else
|
||||
update_eyeblur()
|
||||
update_eye_blur()
|
||||
|
||||
/mob/living/proc/update_damage_hud()
|
||||
return
|
||||
|
||||
@@ -66,42 +66,26 @@
|
||||
/mob/proc/blur_eyes(amount)
|
||||
if(amount>0)
|
||||
eye_blurry = max(amount, eye_blurry)
|
||||
update_eyeblur()
|
||||
update_eye_blur()
|
||||
|
||||
/**
|
||||
* Adjust the current blurriness of the mobs vision by amount
|
||||
*/
|
||||
/mob/proc/adjust_blurriness(amount)
|
||||
eye_blurry = max(eye_blurry+amount, 0)
|
||||
update_eyeblur()
|
||||
update_eye_blur()
|
||||
|
||||
///Set the mobs blurriness of vision to an amount
|
||||
/mob/proc/set_blurriness(amount)
|
||||
eye_blurry = max(amount, 0)
|
||||
update_eyeblur()
|
||||
update_eye_blur()
|
||||
|
||||
/mob/proc/update_eyeblur()
|
||||
remove_eyeblur()
|
||||
/mob/proc/update_eye_blur()
|
||||
var/atom/movable/plane_master_controller/game_plane_master_controller = hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
|
||||
if(eye_blurry)
|
||||
add_eyeblur()
|
||||
|
||||
/mob/proc/add_eyeblur()
|
||||
if(!client)
|
||||
return
|
||||
var/list/screens = list(hud_used.plane_masters["[GAME_PLANE]"], hud_used.plane_masters["[FLOOR_PLANE]"],
|
||||
hud_used.plane_masters["[WALL_PLANE]"], hud_used.plane_masters["[ABOVE_WALL_PLANE]"])
|
||||
for(var/A in screens)
|
||||
var/atom/movable/screen/plane_master/P = A
|
||||
P.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3)))
|
||||
|
||||
/mob/proc/remove_eyeblur()
|
||||
if(!client)
|
||||
return
|
||||
var/list/screens = list(hud_used.plane_masters["[GAME_PLANE]"], hud_used.plane_masters["[FLOOR_PLANE]"],
|
||||
hud_used.plane_masters["[WALL_PLANE]"], hud_used.plane_masters["[ABOVE_WALL_PLANE]"])
|
||||
for(var/A in screens)
|
||||
var/atom/movable/screen/plane_master/P = A
|
||||
P.remove_filter("blurry_eyes")
|
||||
game_plane_master_controller.add_filter("eye_blur", 1, gauss_blur_filter(clamp(eye_blurry * 0.1, 0.6, 3)))
|
||||
else
|
||||
game_plane_master_controller.remove_filter("eye_blur")
|
||||
|
||||
///Adjust the drugginess of a mob
|
||||
/mob/proc/adjust_drugginess(amount)
|
||||
|
||||
@@ -786,26 +786,22 @@
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M)
|
||||
return ..() // until fixed - the rotations never stop
|
||||
/*
|
||||
if(M.hud_used)
|
||||
if(current_cycle >= 20 && current_cycle%20 == 0)
|
||||
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"],
|
||||
M.hud_used.plane_masters["[LIGHTING_PLANE]"], M.hud_used.plane_masters["[WALL_PLANE]"],
|
||||
M.hud_used.plane_masters["[ABOVE_WALL_PLANE]"])
|
||||
var/atom/movable/plane_master_controller/pm_controller = M.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
|
||||
|
||||
var/rotation = min(round(current_cycle/20), 89) // By this point the player is probably puking and quitting anyway
|
||||
for(var/whole_screen in screens)
|
||||
animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1)
|
||||
for(var/key in pm_controller.controlled_planes)
|
||||
animate(pm_controller.controlled_planes[key], transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1)
|
||||
animate(transform = matrix(-rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/toxin/rotatium/on_mob_end_metabolize(mob/living/M)
|
||||
if(M && M.hud_used)
|
||||
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
|
||||
for(var/whole_screen in screens)
|
||||
animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING)
|
||||
if(M?.hud_used)
|
||||
var/atom/movable/plane_master_controller/pm_controller = M.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
|
||||
for(var/key in pm_controller.controlled_planes)
|
||||
animate(pm_controller.controlled_planes[key], transform = matrix(), time = 5, easing = QUAD_EASING)
|
||||
..()
|
||||
*/
|
||||
|
||||
/datum/reagent/toxin/skewium
|
||||
name = "Skewium"
|
||||
|
||||
@@ -315,6 +315,7 @@
|
||||
#include "code\_onclick\hud\new_player.dm"
|
||||
#include "code\_onclick\hud\picture_in_picture.dm"
|
||||
#include "code\_onclick\hud\plane_master.dm"
|
||||
#include "code\_onclick\hud\plane_master_controller.dm"
|
||||
#include "code\_onclick\hud\radial.dm"
|
||||
#include "code\_onclick\hud\radial_persistent.dm"
|
||||
#include "code\_onclick\hud\revenanthud.dm"
|
||||
|
||||
Reference in New Issue
Block a user