[Avida-SVN] r1402 - in branches/energy: Avida.xcodeproj source/actions

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Thu Mar 15 10:38:10 PDT 2007


Author: beckma24
Date: 2007-03-15 13:38:10 -0400 (Thu, 15 Mar 2007)
New Revision: 1402

Modified:
   branches/energy/Avida.xcodeproj/project.pbxproj
   branches/energy/source/actions/EnvironmentActions.cc
Log:
Added SetPeriodicResource which adjusts the consentration of a resource using a sine wave.

Modified: branches/energy/Avida.xcodeproj/project.pbxproj
===================================================================
--- branches/energy/Avida.xcodeproj/project.pbxproj	2007-03-15 14:07:34 UTC (rev 1401)
+++ branches/energy/Avida.xcodeproj/project.pbxproj	2007-03-15 17:38:10 UTC (rev 1402)
@@ -887,7 +887,7 @@
 		70DCAC77097AF730002F8733 /* key_chart */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = key_chart; sourceTree = "<group>"; };
 		70DCAC78097AF730002F8733 /* viewer.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = viewer.cc; sourceTree = "<group>"; };
 		70DCAC9B097AF7C0002F8733 /* primitive.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = primitive.cc; sourceTree = "<group>"; };
-		70DCAD1C097AF7CC002F8733 /* avida-s */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = "avida-s"; sourceTree = BUILT_PRODUCTS_DIR; };
+		70DCAD1C097AF7CC002F8733 /* avida-s */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "avida-s"; sourceTree = BUILT_PRODUCTS_DIR; };
 		70DCAD1F097AF81A002F8733 /* AvidaScript.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AvidaScript.h; sourceTree = "<group>"; };
 		70DCAD20097AF81A002F8733 /* cLexer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cLexer.h; sourceTree = "<group>"; };
 		70DCAD21097AF81A002F8733 /* cLexer.l */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.lex; path = cLexer.l; sourceTree = "<group>"; };

Modified: branches/energy/source/actions/EnvironmentActions.cc
===================================================================
--- branches/energy/source/actions/EnvironmentActions.cc	2007-03-15 14:07:34 UTC (rev 1401)
+++ branches/energy/source/actions/EnvironmentActions.cc	2007-03-15 17:38:10 UTC (rev 1402)
@@ -22,6 +22,7 @@
  *
  */
 
+#include "math.h"
 #include "EnvironmentActions.h"
 
 #include "cAction.h"
@@ -266,7 +267,45 @@
 };
 
 
+//TODO remove print stament and include
+#include <iostream>
+class cActionSetPeriodicResource : public cAction
+{
+private:
+  cString m_res_name;
+  double m_res_count;
+  double amplitude;
+  double frequency;
+  double phaseShift;
+  double initY;
 
+public:
+  cActionSetPeriodicResource(cWorld* world, const cString& args): cAction(world, args), m_res_name(""), amplitude(1.0),
+                                                                  frequency(1.0), phaseShift(0.0), initY(0.0)
+  {
+    cString largs(args);
+    if (largs.GetSize()) m_res_name = largs.PopWord();
+    if (largs.GetSize()) amplitude = largs.PopWord().AsDouble();
+    if (largs.GetSize()) frequency = largs.PopWord().AsDouble();
+    if (largs.GetSize()) phaseShift = largs.PopWord().AsDouble();
+    if (largs.GetSize()) initY = largs.PopWord().AsDouble();
+  }
+  
+  static const cString GetDescription() { return "Arguments: <string reaction_name> <string amplitude> <string pi/frequence> <phaseShift*pi> <string initial_Y>"; }
+  
+  void Process(cAvidaContext& ctx)
+  {
+    int time = m_world->GetStats().GetUpdate();
+    m_res_count = amplitude * sin(M_PI/frequency * time - phaseShift * M_PI) + initY;
+//    std::cout << "Update " << time << " Y = " << m_res_count << std::endl;
+//    std::cout << m_res_count <<" = " << amplitude <<" * sin("<<frequency <<" * " << time <<" - "<< phaseShift<<") + "<<initY<<std::endl;
+    cResource* res = m_world->GetEnvironment().GetResourceLib().GetResource(m_res_name);
+    if (res != NULL) m_world->GetPopulation().SetResource(res->GetID(), m_res_count);
+
+  }
+};
+
+
 void RegisterEnvironmentActions(cActionLibrary* action_lib)
 {
   action_lib->Register<cActionInjectResource>("InjectResource");
@@ -274,6 +313,7 @@
   action_lib->Register<cActionOutflowScaledResource>("OutflowScaledResource");
   action_lib->Register<cActionSetResource>("SetResource");
   action_lib->Register<cActionSetCellResource>("SetCellResource");
+  action_lib->Register<cActionSetPeriodicResource>("SetPeriodicResource");
 
   action_lib->Register<cActionSetReactionValue>("SetReactionValue");
   action_lib->Register<cActionSetReactionValueMult>("SetReactionValueMult");




More information about the Avida-cvs mailing list