mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-25 05:06:44 +01:00
91 lines
2.9 KiB
Plaintext
91 lines
2.9 KiB
Plaintext
//* This file is explicitly licensed under the MIT license. *//
|
|
//* Copyright (c) 2025 Citadel Station Developers *//
|
|
|
|
REPOSITORY_DEF(roles)
|
|
name = "Repository - Roles"
|
|
expected_type = /datum/prototype/role
|
|
|
|
/**
|
|
* Jobs by title.
|
|
* * Only populated for /role/job for legacy lookups.
|
|
*/
|
|
var/list/legacy_job_title_lookup = list()
|
|
|
|
/datum/controller/repository/roles/load(datum/prototype/role/instance)
|
|
. = ..()
|
|
if(!.)
|
|
return
|
|
if(istype(instance, /datum/prototype/role/job))
|
|
var/datum/prototype/role/job/casted_job = instance
|
|
if(legacy_job_title_lookup[casted_job.title])
|
|
stack_trace("collision on '[casted_job.title]' job title between [casted_job.type] and [legacy_job_title_lookup[casted_job.title]:title]")
|
|
else
|
|
legacy_job_title_lookup[casted_job.title] = casted_job
|
|
|
|
|
|
/datum/controller/repository/roles/unload(datum/prototype/role/instance)
|
|
. = ..()
|
|
if(!.)
|
|
return
|
|
if(istype(instance, /datum/prototype/role/job))
|
|
var/datum/prototype/role/job/casted_job = instance
|
|
if(legacy_job_title_lookup[casted_job.title] == casted_job)
|
|
legacy_job_title_lookup -= casted_job.title
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_job_by_title(title) as /datum/prototype/role/job
|
|
return legacy_job_title_lookup[title]
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_job_by_id(id) as /datum/prototype/role/job
|
|
return fetch_local_or_throw(id)
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_job_by_type(type) as /datum/prototype/role/job
|
|
return fetch_local_or_throw(type)
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_all_job_ids(filter_faction) as /list
|
|
. = list()
|
|
for(var/datum/prototype/role/job/r as anything in fetch_subtypes_immutable(/datum/prototype/role/job))
|
|
. += r.id
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_all_job_types(filter_faction) as /list
|
|
. = list()
|
|
for(var/datum/prototype/role/job/r as anything in fetch_subtypes_immutable(/datum/prototype/role/job))
|
|
. += r.type
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_all_job_titles(filter_faction) as /list
|
|
. = list()
|
|
for(var/datum/prototype/role/job/r as anything in fetch_subtypes_immutable(/datum/prototype/role/job))
|
|
. += r.title
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_all_job_datums(filter_faction) as /list
|
|
. = list()
|
|
for(var/datum/prototype/role/job/r as anything in fetch_subtypes_immutable(/datum/prototype/role/job))
|
|
. += r
|
|
|
|
/**
|
|
* Only returns /datum/prototype/role/job
|
|
*/
|
|
/datum/controller/repository/roles/proc/legacy_all_sorted_job_datums(filter_faction) as /list
|
|
. = legacy_all_job_datums(filter_faction)
|
|
tim_sort(., /proc/cmp_job_datums)
|