Files
CHOMPStation2/code/modules/integrated_electronics/arithmetic.dm
2016-09-13 17:08:12 -04:00

157 lines
3.8 KiB
Plaintext

//These circuits do simple math.
/obj/item/integrated_circuit/arithmetic
complexity = 1
number_of_inputs = 8
number_of_outputs = 1
number_of_activators = 1
input_names = list(
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H"
)
output_names = list(
"result"
)
activator_names = list(
"compute"
)
// +Adding+ //
/obj/item/integrated_circuit/arithmetic/addition
name = "addition circuit"
desc = "This circuit can add numbers together."
icon_state = "addition"
/obj/item/integrated_circuit/arithmetic/addition/work()
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result + I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// -Subtracting- //
/obj/item/integrated_circuit/arithmetic/subtraction
name = "subtraction circuit"
desc = "This circuit can subtract numbers."
icon_state = "subtraction"
/obj/item/integrated_circuit/arithmetic/subtraction/work()
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result - I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// *Multiply* //
/obj/item/integrated_circuit/arithmetic/multiplication
name = "multiplication circuit"
desc = "This circuit can multiply numbers."
icon_state = "multiplication"
/obj/item/integrated_circuit/arithmetic/subtraction/work()
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result * I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// /Division/ //
/obj/item/integrated_circuit/arithmetic/division
name = "division circuit"
desc = "This circuit can divide numbers, just don't think about trying to divide by zero!"
icon_state = "division"
/obj/item/integrated_circuit/arithmetic/division/work()
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data) && I.data != 0) //No runtimes here.
result = result / I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// Absolute //
/obj/item/integrated_circuit/arithmetic/absolute
name = "absolute circuit"
desc = "This outputs a non-negative version of the number you put in. This may also be thought of as its distance from zero."
icon_state = "absolute"
number_of_inputs = 1
number_of_outputs = 1
/obj/item/integrated_circuit/arithmetic/absolute/work()
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data) && I.data != 0)
result = abs(result)
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// Averaging //
/obj/item/integrated_circuit/arithmetic/average
name = "average circuit"
desc = "This circuit is of average quality, however it will compute the average for numbers you give it."
icon_state = "average"
/obj/item/integrated_circuit/arithmetic/average/work()
if(..())
var/result = 0
var/inputs_used = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
inputs_used++
result = result + I.data
if(inputs_used)
result = result / inputs_used
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// Pi, because why the hell not? //
/obj/item/integrated_circuit/arithmetic/pi
name = "pi constant circuit"
desc = "Not recommended for cooking. Outputs '3.14159' when it receives a pulse."
icon_state = "pi"
number_of_inputs = 0
number_of_outputs = 1
/obj/item/integrated_circuit/arithmetic/pi/work()
if(..())
var/datum/integrated_io/output/O = outputs[1]
O.data = 3.14159
O.push_data()