/datum/mind/var/list/job_objectives=list()
#define FINDJOBTASK_DEFAULT_NEW 1 // Make a new task of this type if one can't be found.
/datum/mind/proc/findJobTask(var/typepath,var/options=0)
var/datum/job_objective/task = locate(typepath) in src.job_objectives
if(!istype(task,typepath))
if(options & FINDJOBTASK_DEFAULT_NEW)
task = new typepath()
src.job_objectives += task
return task
/datum/job_objective
var/datum/mind/owner = null //Who owns the objective.
var/completed = 0 //currently only used for custom objectives.
var/per_unit = 0
var/units_completed = 0
var/units_compensated = 0 // Shit paid for
var/units_requested = INFINITY
var/completion_payment = 0 // Credits paid to owner when completed
/datum/job_objective/New(var/datum/mind/new_owner)
owner=new_owner
owner.job_objectives += src
/datum/job_objective/Destroy()
/datum/job_objective/proc/get_description()
return "Placeholder objective."
/datum/job_objective/proc/unit_completed(var/count=1)
units_completed += count
/datum/job_objective/proc/is_completed()
if(!completed)
completed = check_for_completion()
return completed
/datum/job_objective/proc/check_for_completion()
return per_unit && units_completed > 0
/datum/game_mode/proc/declare_job_completion()
var/text = "Job Completion:"
var/numEmployees=0
for(var/datum/mind/employee in ticker.minds)
if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this.
continue
if(!employee.assigned_role=="MODE")//If the employee is a gamemode thing, skip.
continue
numEmployees++
var/tasks_completed=0
//text += "[L.name] ([ckey(D.mind.key)]), the [L.job]:\n"
text += "
[employee.key] was [employee.name], the [employee.assigned_role] ("
if(employee.current)
if(employee.current.stat == DEAD)
text += "died"
else
text += "survived"
if(employee.current.real_name != employee.name)
text += " as [employee.current.real_name]"
else
text += "body destroyed"
text += ")"
var/count = 1
for(var/datum/job_objective/objective in employee.job_objectives)
if(objective.is_completed(1))
text += "
Task #[count]: [objective.get_description()] Completed!"
feedback_add_details("employee_objective","[objective.type]|SUCCESS")
tasks_completed++
else
feedback_add_details("employee_objective","[objective.type]|FAIL")
count++
if(tasks_completed>=1)
text += "
The [employee.assigned_role] did their fucking job!"
feedback_add_details("employee_success","SUCCESS")
else
feedback_add_details("employee_success","FAIL")
if(numEmployees>0)
world << text
return 1