1 #ifndef BODYARCH_H
2 #define BODYARCH_H
3 
4 #include "../../utils/randgen.h"
5 #include "../../utils/parser.h"
6 #include "../../utils/settings.h"
7 #include "../../utils/color.h"
8 #include "archbodypart.h"
9 #include "archconstraint.h"
10 #include "archmouth.h"
11 #include <vector>
12 #include <iostream>
13 #include <sstream>
14 
15 using namespace std;
16 
17 class BodyArch
18 {
19 	public:
20 		BodyArch();
21 		~BodyArch();
22 
23 		// load save architecture (serialize)
24 		void			buildArch();
25 		void			setArch(string* content);
26 		string*			getArch();
27 		void			copyFrom(const BodyArch* otherBody);
28 		void			mutate(unsigned int runs);
29 
30 		vector<archBodypart>	archBodyparts;
31 		vector<archConstraint>	archConstraints;
32 		vector<archMouth>	archMouths;
33 		Color			color;
34 		unsigned int		retinasize;
35 
36 		float			totalWeight;
37 
38 		int			findBodypart(unsigned int id);
39 		int			findMouth( unsigned int id );
40 	private:
41 		Parser			*parseH;
42 		RandGen			*randgen;
43 		Settings		*settings;
44 
45 		float			bodypartspacer;
46 		void			repositiontoConstraints( archBodypart* bp );
47 		void			repositiontoConstraints( archMouth* bp );
48 		// mutation helpers
49 		void			addRandomMouth();
50 		void			addRandomBodypart();
51 		void			addRandomConstraint(unsigned int connID1, unsigned int connID2, bool isMouth);
52 		void			removeBodypart(unsigned int id);
53 		void			removeMouth(unsigned int id);
54 		void			randomConstraintPosition(archConstraint* co, unsigned int OneOrTwo, unsigned int connID);
55 
56 		unsigned int		getUniqueBodypartID();
57 		unsigned int		getUniqueConstraintID();
58 
59 		string			archBuffer;
60 };
61 #endif
62