From 894ea242b4a8ae87d887ff5bc9f8fd2634f658bd Mon Sep 17 00:00:00 2001
From: Letter N <24603524+LetterN@users.noreply.github.com>
Date: Thu, 30 Jul 2020 14:28:01 +0800
Subject: [PATCH] asset cache update. may fuck shit up
---
code/modules/asset_cache/asset_cache.dm | 7 ++++
code/modules/asset_cache/asset_cache_item.dm | 2 +
code/modules/asset_cache/asset_list.dm | 42 ++++++++++++++++----
code/modules/asset_cache/asset_list_items.dm | 27 ++++++++-----
4 files changed, 61 insertions(+), 17 deletions(-)
diff --git a/code/modules/asset_cache/asset_cache.dm b/code/modules/asset_cache/asset_cache.dm
index f702bf714e..53a30d4299 100644
--- a/code/modules/asset_cache/asset_cache.dm
+++ b/code/modules/asset_cache/asset_cache.dm
@@ -94,6 +94,13 @@ Note: If your code uses output() with assets you will need to call asset_flush o
var/list/stacktrace = gib_stack_trace()
log_asset("WARNING: dupe asset added to the asset cache: [asset_name] existing asset md5: [OACI.md5] new asset md5:[ACI.md5]\n[stacktrace.Join("\n")]")
SSassets.cache[asset_name] = ACI
+ return ACI
+
+/// Returns the url of the asset, currently this is just its name, here to allow further work cdn'ing assets.
+/// Can be given an asset as well, this is just a work around for buggy edge cases where two assets may have the same name, doesn't matter now, but it will when the cdn comes.
+/proc/get_asset_url(asset_name, asset = null)
+ var/datum/asset_cache_item/ACI = SSassets.cache[asset_name]
+ return ACI?.url
//Generated names do not include file extention.
//Used mainly for code that deals with assets in a generic way
diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm
index 0e7d44a7ac..e74293c65e 100644
--- a/code/modules/asset_cache/asset_cache_item.dm
+++ b/code/modules/asset_cache/asset_cache_item.dm
@@ -5,6 +5,7 @@
**/
/datum/asset_cache_item
var/name
+ var/url
var/md5
var/resource
@@ -18,4 +19,5 @@
CRASH("invalid asset sent to asset cache")
debug_world_log("asset cache unexpected success of second fcopy_rsc")
src.name = name
+ url = name
resource = file
diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm
index 2e5881c67f..4ce9dcf6fc 100644
--- a/code/modules/asset_cache/asset_list.dm
+++ b/code/modules/asset_cache/asset_list.dm
@@ -16,6 +16,9 @@ GLOBAL_LIST_EMPTY(asset_datums)
GLOB.asset_datums[type] = src
register()
+/datum/asset/proc/get_url_mappings()
+ return list()
+
/datum/asset/proc/register()
return
@@ -30,11 +33,19 @@ GLOBAL_LIST_EMPTY(asset_datums)
/datum/asset/simple/register()
for(var/asset_name in assets)
- register_asset(asset_name, assets[asset_name])
+ assets[asset_name] = register_asset(asset_name, assets[asset_name])
/datum/asset/simple/send(client)
. = send_asset_list(client, assets)
+/datum/asset/simple/get_url_mappings()
+ . = list()
+ for (var/asset_name in assets)
+ var/datum/asset_cache_item/ACI = assets[asset_name]
+ if (!ACI)
+ continue
+ .[asset_name] = ACI.url
+
// For registering or sending multiple others at once
/datum/asset/group
@@ -50,6 +61,11 @@ GLOBAL_LIST_EMPTY(asset_datums)
var/datum/asset/A = get_asset_datum(type)
. = A.send(C) || .
+/datum/asset/group/get_url_mappings()
+ . = list()
+ for(var/type in children)
+ var/datum/asset/A = get_asset_datum(type)
+ . += A.get_url_mappings()
// spritesheet implementation - coalesces various icons into a single .png file
// and uses CSS to select icons out of that file - saves on transferring some
@@ -70,7 +86,9 @@ GLOBAL_LIST_EMPTY(asset_datums)
if (!name)
CRASH("spritesheet [type] cannot register without a name")
ensure_stripped()
-
+ for(var/size_id in sizes)
+ var/size = sizes[size_id]
+ register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED])
var/res_name = "spritesheet_[name].css"
var/fname = "data/spritesheets/[res_name]"
fdel(fname)
@@ -78,10 +96,6 @@ GLOBAL_LIST_EMPTY(asset_datums)
register_asset(res_name, fcopy_rsc(fname))
fdel(fname)
- for(var/size_id in sizes)
- var/size = sizes[size_id]
- register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED])
-
/datum/asset/spritesheet/send(client/C)
if (!name)
return
@@ -90,6 +104,15 @@ GLOBAL_LIST_EMPTY(asset_datums)
all += "[name]_[size_id].png"
. = send_asset_list(C, all)
+/datum/asset/spritesheet/get_url_mappings()
+ if (!name)
+ return
+ . = list("spritesheet_[name].css" = get_asset_url("spritesheet_[name].css"))
+ for(var/size_id in sizes)
+ .["[name]_[size_id].png"] = get_asset_url("[name]_[size_id].png")
+
+
+
/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes)
for(var/size_id in sizes_to_strip)
var/size = sizes[size_id]
@@ -111,7 +134,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
for (var/size_id in sizes)
var/size = sizes[size_id]
var/icon/tiny = size[SPRSZ_ICON]
- out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[name]_[size_id].png') no-repeat;}"
+ out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[get_asset_url("[name]_[size_id].png")]') no-repeat;}"
for (var/sprite_id in sprites)
var/sprite = sprites[sprite_id]
@@ -162,7 +185,10 @@ GLOBAL_LIST_EMPTY(asset_datums)
Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction)
/datum/asset/spritesheet/proc/css_tag()
- return {""}
+ return {""}
+
+/datum/asset/spritesheet/proc/css_filename()
+ return get_asset_url("spritesheet_[name].css")
/datum/asset/spritesheet/proc/icon_tag(sprite_name)
var/sprite = sprites[sprite_name]
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index 57d8e55e07..eacb3978cb 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -6,12 +6,6 @@
"tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css',
)
-/datum/asset/group/tgui
- children = list(
- /datum/asset/simple/tgui,
- /datum/asset/simple/fontawesome
- )
-
/datum/asset/simple/headers
assets = list(
"alarm_green.gif" = 'icons/program_icons/alarm_green.gif',
@@ -78,6 +72,7 @@
"refresh" = 'icons/pda_icons/pda_refresh.png',
"scanner" = 'icons/pda_icons/pda_scanner.png',
"signaler" = 'icons/pda_icons/pda_signaler.png',
+ // "skills" = 'icons/pda_icons/pda_skills.png',
"status" = 'icons/pda_icons/pda_status.png',
"dronephone" = 'icons/pda_icons/pda_dronephone.png',
"emoji" = 'icons/pda_icons/pda_emoji.png'
@@ -96,7 +91,11 @@
"stamp-rd" = 'icons/stamp_icons/large_stamp-rd.png',
"stamp-cap" = 'icons/stamp_icons/large_stamp-cap.png',
"stamp-qm" = 'icons/stamp_icons/large_stamp-qm.png',
- "stamp-law" = 'icons/stamp_icons/large_stamp-law.png'
+ "stamp-law" = 'icons/stamp_icons/large_stamp-law.png',
+ "stamp-chap" = 'icons/stamp_icons/large_stamp-chap.png'
+ // "stamp-mime" = 'icons/stamp_icons/large_stamp-mime.png',
+ // "stamp-centcom" = 'icons/stamp_icons/large_stamp-centcom.png',
+ // "stamp-syndicate" = 'icons/stamp_icons/large_stamp-syndicate.png'
)
@@ -147,7 +146,6 @@
"jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js',
)
-
/datum/asset/simple/goonchat
assets = list(
"json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js',
@@ -375,7 +373,18 @@
"ghost.png" = 'html/ghost.png'
)
+/datum/asset/simple/vv
assets = list(
- "ghost.png" = 'html/ghost.png'
+ "view_variables.css" = 'html/admin/view_variables.css'
)
+/datum/asset/spritesheet/sheetmaterials
+ name = "sheetmaterials"
+
+/datum/asset/spritesheet/sheetmaterials/register()
+ InsertAll("", 'icons/obj/stack_objects.dmi')
+
+ // Special case to handle Bluespace Crystals
+ Insert("polycrystal", 'icons/obj/telescience.dmi', "polycrystal")
+ ..()
+