Files
qad/mbricks/brick_logic.cpp
Бычков Андрей ba8bc27298 1
git-svn-id: svn://db.shs.com.ru/libs@1 a8b55f48-bf90-11e4-a774-851b48703e85
2015-02-28 21:28:53 +00:00

69 lines
1.4 KiB
C++

#include "brick_logic.h"
bool BrickLogicAnd::tick_body(double time) {
bool b = true;
for (int i = 0; i < inputs_count; ++i)
if (inputs[i] <= 0) {b = false; break;}
outputs[0] = dbool(b);
return true;
}
bool BrickLogicOr::tick_body(double time) {
bool b = false;
for (int i = 0; i < inputs_count; ++i)
if (inputs[i] > 0) {b = true; break;}
outputs[0] = dbool(b);
return true;
}
bool BrickLogicXor::tick_body(double time) {
bool b = false;
for (int i = 0; i < inputs_count; ++i) {
if (inputs[i] > 0) b = (b ^ true);
else b = b ^ false;
}
outputs[0] = dbool(b);
return true;
}
bool BrickLogicNAnd::tick_body(double time) {
bool b = true;
for (int i = 0; i < inputs_count; ++i)
if (inputs[i] <= 0) {b = false; break;}
outputs[0] = 1. - dbool(b);
return true;
}
bool BrickLogicNOr::tick_body(double time) {
bool b = false;
for (int i = 0; i < inputs_count; ++i)
if (inputs[i] > 0) {b = true; break;}
outputs[0] = 1. - dbool(b);
return true;
}
bool BrickLogicNXor::tick_body(double time) {
bool b = false;
for (int i = 0; i < inputs_count; ++i) {
if (inputs[i] > 0) b = (b ^ true);
else b = b ^ false;
}
outputs[0] = 1. - dbool(b);
return true;
}
bool BrickLogicCompare::tick_body(double time) {
outputs[0] = outputs[1] = outputs[2] = 0.;
if (inputs[0] > inputs[1]) outputs[0] = 1.;
if (inputs[0] < inputs[1]) outputs[2] = 1.;
if (fabs(inputs[0] - inputs[1]) <= inputs[Tolerance]) outputs[1] = 1.;
return true;
}