From: Ricardo Markiewicz Date: Wed, 3 Dec 2003 21:47:03 +0000 (+0000) Subject: Ahora si que anda 10 puntos. X-Git-Tag: svn_import~29 X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/commitdiff_plain/bebd494e1d84d29e3c0c6d50736fcd7260638361?ds=inline Ahora si que anda 10 puntos. --- diff --git a/Model/include/splitter.h b/Model/include/splitter.h index a76c117..04d1c9f 100644 --- a/Model/include/splitter.h +++ b/Model/include/splitter.h @@ -23,6 +23,8 @@ public: virtual void update(int dir=OUT); virtual void simulate(); protected: + int out_ready; + int out_on_zero; private: Splitter(const Splitter &):Transport("null") {} Splitter &operator = (const Splitter &) { return *this; } diff --git a/Model/src/splitter.cpp b/Model/src/splitter.cpp index a273789..38742f6 100644 --- a/Model/src/splitter.cpp +++ b/Model/src/splitter.cpp @@ -10,6 +10,7 @@ Splitter::Splitter(const std::string &_name):Transport(_name) out_slots = 2; max_flow = actual_flow = 0.0f; updated = true; + out_on_zero = out_ready = 0; } Splitter::~Splitter() @@ -37,7 +38,8 @@ void Splitter::recieve_msg(int msg, IConector *who, void *data) if (max_flow < actual_flow) actual_flow = max_flow; - actual_flow /= 2.0f; + if (out_on_zero == 0) + actual_flow /= 2.0f; send_msg(OUT, MSG_QUERY_MAX_FLOW_OUT, &actual_flow); @@ -55,11 +57,21 @@ void Splitter::recieve_msg(int msg, IConector *who, void *data) #endif if (pos == OUT) { if (max == 0) { - actual_flow = max_flow; + out_on_zero++; + switch (out_on_zero) { + case 1: + if (out_ready == 0) { + actual_flow = max_flow; + } + break; + case 2: + actual_flow = 0.0; + } } else { if (max < actual_flow) actual_flow = max; if (max_flow < actual_flow) actual_flow = max_flow; } + out_ready++; } else { if (((2*max) < actual_flow) && (max != 0)) actual_flow = 2*max; @@ -98,5 +110,6 @@ void Splitter::simulate() #endif updated = false; color_updated = false; + out_on_zero = out_ready = 0; }