Inheritance: MonoBehaviour
Exemple #1
9
    void Start()
    {
        spw = Spawner.getInstance();
        settings = Settings.getInstance();
        eth = Ether.getInstance();

        max_root_scale 		= new Vector3();
        max_root_scale.x 	= float.Parse( settings.contents["creature"]["root"]["max_root_scale"]["x"].ToString() );
        max_root_scale.y 	= float.Parse( settings.contents["creature"]["root"]["max_root_scale"]["y"].ToString() );
        max_root_scale.z 	= float.Parse( settings.contents["creature"]["root"]["max_root_scale"]["z"].ToString() );

        min_root_scale 		= new Vector3();
        min_root_scale.x 	= float.Parse( settings.contents["creature"]["root"]["min_root_scale"]["x"].ToString() );
        min_root_scale.y 	= float.Parse( settings.contents["creature"]["root"]["min_root_scale"]["y"].ToString() );
        min_root_scale.z 	= float.Parse( settings.contents["creature"]["root"]["min_root_scale"]["z"].ToString() );

        max_limb_scale		= new Vector3();
        max_limb_scale.x 	= float.Parse( settings.contents["creature"]["limb"]["max_limb_scale"]["x"].ToString() );
        max_limb_scale.y 	= float.Parse( settings.contents["creature"]["limb"]["max_limb_scale"]["y"].ToString() );
        max_limb_scale.z 	= float.Parse( settings.contents["creature"]["limb"]["max_limb_scale"]["z"].ToString() );

        min_limb_scale 		= new Vector3();
        min_limb_scale.x 	= float.Parse( settings.contents["creature"]["limb"]["min_limb_scale"]["x"].ToString() );
        min_limb_scale.y 	= float.Parse( settings.contents["creature"]["limb"]["min_limb_scale"]["y"].ToString() );
        min_limb_scale.z 	= float.Parse( settings.contents["creature"]["limb"]["min_limb_scale"]["z"].ToString() );

        starting_creatures	= (int) 			settings.contents["ether"]["starting_creatures"];
        creature_spread		= float.Parse(		settings.contents["ether"]["creature_spread"].ToString() );
        double creature_init_energy	= (double) 	settings.contents["creature"]["init_energy"];
        int branch_limit 	= (int)				settings.contents["creature"]["branch_limit"];
        int recurrence_limit = (int)			settings.contents["creature"]["recurrence_limit"];

        /*
         * For each new creature, generate random genes and spawn the bugger
         */
        for (int i=0; i<starting_creatures; i++) {
            chromosome = new Chromosome();

            // random colours
            Color col = new Color( (float)Random.Range(0.0F,1.0F),
                                   (float)Random.Range(0.0F,1.0F),
                                   (float)Random.Range(0.0F,1.0F)
                                 );
            chromosome.setColour(col.r, col.g, col.b);
            chromosome.setLimbColour(col.r, col.g, col.b);

            chromosome.hunger_threshold = float.Parse(settings.contents["creature"]["hunger_threshold"].ToString());

            // random root scale
            Vector3 rootScale = new Vector3((float) Random.Range(min_root_scale.x,max_root_scale.x),
                                            (float) Random.Range(min_root_scale.y,max_root_scale.y),
                                            (float) Random.Range(min_root_scale.z,max_root_scale.z)
                                  		   );
            chromosome.setRootScale(rootScale);

            // random initial limbs
            int bs = Random.Range (1,branch_limit+1);
            chromosome.setNumBranches(bs);
            ArrayList branches = new ArrayList();

            for (int j=0; j<bs; j++) {
                ArrayList limbs = new ArrayList();

                int recurrences = Random.Range(0,recurrence_limit);
                chromosome.num_recurrences[j] = recurrences;
                for (int k=0; k<=recurrences; k++) {

                    Vector3 scale = new Vector3 ((float) Random.Range(min_limb_scale.x,max_limb_scale.x),
                                         (float) Random.Range(min_limb_scale.y,max_limb_scale.y),
                                         (float) Random.Range(min_limb_scale.z,max_limb_scale.z)
                                        );

                    Vector3 position = Utility.RandomPointInsideCube(rootScale);

                    ArrayList limb = new ArrayList();
                    limb.Add  (position);
                    limb.Add  (scale);
                    limbs.Add (limb);
                }
                branches.Add(limbs);
            }

            chromosome.setBaseFequency (Random.Range (3,20));
            chromosome.setBaseAmplitude (Random.Range (3,6));
            chromosome.setBasePhase (Random.Range (0,360));
            chromosome.setBranches(branches);

            if (eth.enoughEnergy(creature_init_energy)) {
                spw.spawn(Utility.RandomVec(-creature_spread,creature_spread,creature_spread), Utility.RandomRotVec(), creature_init_energy, chromosome);
                eth.subtractEnergy(creature_init_energy);
            }
        }
    }
Exemple #2
0
        public override void setValue(string Value)
        {
            if (Value.Contains("/"))
            {
                string[] ResultEt    = Value.Split('/');
                int      NumberChars = ResultEt.Count();
                var      bytes       = new byte[6 * NumberChars];
                int      i           = 0;
                foreach (string Ether in ResultEt)
                {
                    if (Ether.Contains(":"))
                    {
                        string[] Result = Ether.Split(':');

                        foreach (string st in Result)
                        {
                            bytes[i++] = Convert.ToByte(st, 16);
                        }
                    }
                }
                tlvValue = bytes;
            }
            else
            {
                throw new Exception("Value is Not Regulat Ether Address");
            }
        }
Exemple #3
0
        public static object TestGetStockPrices(string ticker)
        {
            Contract cc = new Contract(1, ticker, "STK", "SMART", "USD", "", 100, "", 0, "", "", "", "", new PositiveInteger(1));

            Ether    privateEther = new Ether(60);
            IBSource tws          = new IBSource(privateEther, "127.0.0.1", 7496, 1, "DU74885", false, 60);

            tws.Connect();

            tws.Subscribe(cc);

            double[] ret = new double[6];
            privateEther.AsObservable <Market>().Subscribe(m =>
            {
                ret[0] = m.BidSize;
                ret[1] = (double)m.Bid;
                ret[2] = (double)m.Mid;
                ret[3] = (double)m.Ask;
                ret[4] = m.AskSize;
            });

            return(ret);

            tws.Unsubscribe(cc);
        }
Exemple #4
0
 void OnTriggerEnter(Collider col)
 {
     eth = GameObject.Find("Ether").GetComponent<Ether>();
     if (col.gameObject.name == "root") {
         crt = col.transform.parent.gameObject.GetComponent<Creature>();
         crt.kill();
     }
 }
Exemple #5
0
 void OnTriggerEnter(Collider col)
 {
     eth = GameObject.Find("Ether").GetComponent <Ether>();
     if (col.gameObject.name == "root")
     {
         crt = col.transform.parent.gameObject.GetComponent <Creature>();
         crt.kill();
     }
 }
Exemple #6
0
 public static Ether getInstance()
 {
     if(!instance) {
         container = new GameObject();
         container.name = "Ether";
         instance = container.AddComponent(typeof(Ether)) as Ether;
     }
     return instance;
 }
 public static Ether getInstance()
 {
     if (!instance)
     {
         container      = new GameObject();
         container.name = "Ether";
         instance       = container.AddComponent(typeof(Ether)) as Ether;
     }
     return(instance);
 }
Exemple #8
0
    void Start()
    {
        name = "Foodbit";
        settings = Settings.getInstance();
        init_energy = (double) settings.contents["foodbit"]["init_energy"];

        energy = init_energy;

        eth = Ether.getInstance();
        Collider co = GetComponent<SphereCollider>();
        co.isTrigger = true;
    }
Exemple #9
0
    void Start()
    {
        name        = "Foodbit";
        settings    = Settings.getInstance();
        init_energy = (double)settings.contents["foodbit"]["init_energy"];

        energy = init_energy;

        eth = Ether.getInstance();
        Collider co = GetComponent <SphereCollider>();

        co.isTrigger = true;
    }
Exemple #10
0
#pragma warning restore 0414

	/*
	 * Instantiate all necessary objects, attach and configure
	 * Components as needed.
	 */
	void Start () {
        createFolders();
        lg = Logger.getInstance();
		settings = Settings.getInstance();
		selectionManager = Selection.getInstance();
		aperatus = (GameObject)Instantiate(Resources.Load("Prefabs/Aperatus"));
		cam = GameObject.Find("Main Camera");
		cam.AddComponent<CameraCtl>();
		spw = Spawner.getInstance();
		gm = GeneticsMain.getInstance();
		ether = Ether.getInstance();
		co = CollisionMediator.getInstance();
    }
Exemple #11
0
#pragma warning restore 0414

    /*
     * Instantiate all necessary objects, attach and configure
     * Components as needed.
     */
    void Start()
    {
        createFolders();
        lg               = Logger.getInstance();
        settings         = Settings.getInstance();
        selectionManager = Selection.getInstance();
        aperatus         = (GameObject)Instantiate(Resources.Load("Prefabs/Aperatus"));
        cam              = GameObject.Find("Main Camera");
        cam.AddComponent <CameraCtl>();
        spw   = Spawner.getInstance();
        gm    = GeneticsMain.getInstance();
        ether = Ether.getInstance();
        co    = CollisionMediator.getInstance();
    }
Exemple #12
0
        public GameForm(GameBackground back, Ether eth, Map2D <int> map2D)
        {
            this.map2D = map2D;
            this.back  = back;

            format.Alignment     = StringAlignment.Center;
            format.LineAlignment = StringAlignment.Center;



            ClientSize = new Size(800, 600);
            Timer t = new Timer();

            t.Interval = 10;
            t.Tick    += new EventHandler(t_Tick);
            t.Start();
        }
Exemple #13
0
 void Start()
 {
     eth = Ether.getInstance();
 }
Exemple #14
0
 void Update()
 {
     eth = Ether.getInstance();
     text.text = "Ether energy: " + eth.getEnergy().ToString("F0");
 }
Exemple #15
0
#pragma warning restore 0414

    void Start()
    {
        lg        = Logger.getInstance();
        crt_count = GameObject.Find("CreatureCount").GetComponent <CreatureCount>();
        eth       = Ether.getInstance();
    }
Exemple #16
0
 void Start()
 {
     name = "FoodbitCount";
     eth  = Ether.getInstance();
 }
Exemple #17
0
 void Start()
 {
     name = "FoodbitCount";
     eth = Ether.getInstance();
 }
Exemple #18
0
 void Start()
 {
     eth = Ether.getInstance();
 }
Exemple #19
0
    void Start()
    {
        spw      = Spawner.getInstance();
        settings = Settings.getInstance();
        eth      = Ether.getInstance();

        max_root_scale   = new Vector3();
        max_root_scale.x = float.Parse(settings.contents["creature"]["root"]["max_root_scale"]["x"].ToString());
        max_root_scale.y = float.Parse(settings.contents["creature"]["root"]["max_root_scale"]["y"].ToString());
        max_root_scale.z = float.Parse(settings.contents["creature"]["root"]["max_root_scale"]["z"].ToString());

        min_root_scale   = new Vector3();
        min_root_scale.x = float.Parse(settings.contents["creature"]["root"]["min_root_scale"]["x"].ToString());
        min_root_scale.y = float.Parse(settings.contents["creature"]["root"]["min_root_scale"]["y"].ToString());
        min_root_scale.z = float.Parse(settings.contents["creature"]["root"]["min_root_scale"]["z"].ToString());



        max_limb_scale   = new Vector3();
        max_limb_scale.x = float.Parse(settings.contents["creature"]["limb"]["max_limb_scale"]["x"].ToString());
        max_limb_scale.y = float.Parse(settings.contents["creature"]["limb"]["max_limb_scale"]["y"].ToString());
        max_limb_scale.z = float.Parse(settings.contents["creature"]["limb"]["max_limb_scale"]["z"].ToString());

        min_limb_scale   = new Vector3();
        min_limb_scale.x = float.Parse(settings.contents["creature"]["limb"]["min_limb_scale"]["x"].ToString());
        min_limb_scale.y = float.Parse(settings.contents["creature"]["limb"]["min_limb_scale"]["y"].ToString());
        min_limb_scale.z = float.Parse(settings.contents["creature"]["limb"]["min_limb_scale"]["z"].ToString());


        starting_creatures = (int)settings.contents["ether"]["starting_creatures"];
        creature_spread    = float.Parse(settings.contents["ether"]["creature_spread"].ToString());
        double creature_init_energy = (double)settings.contents["creature"]["init_energy"];
        int    branch_limit         = (int)settings.contents["creature"]["branch_limit"];
        int    recurrence_limit     = (int)settings.contents["creature"]["recurrence_limit"];


        /*
         * For each new creature, generate random genes and spawn the bugger
         */
        for (int i = 0; i < starting_creatures; i++)
        {
            chromosome = new Chromosome();

            // random colours
            Color col = new Color((float)Random.Range(0.0F, 1.0F),
                                  (float)Random.Range(0.0F, 1.0F),
                                  (float)Random.Range(0.0F, 1.0F)
                                  );
            chromosome.setColour(col.r, col.g, col.b);
            chromosome.setLimbColour(col.r, col.g, col.b);

            chromosome.hunger_threshold = float.Parse(settings.contents["creature"]["hunger_threshold"].ToString());

            // random root scale
            Vector3 rootScale = new Vector3((float)Random.Range(min_root_scale.x, max_root_scale.x),
                                            (float)Random.Range(min_root_scale.y, max_root_scale.y),
                                            (float)Random.Range(min_root_scale.z, max_root_scale.z)
                                            );
            chromosome.setRootScale(rootScale);

            // random initial limbs
            int bs = Random.Range(1, branch_limit + 1);
            chromosome.setNumBranches(bs);
            ArrayList branches = new ArrayList();

            for (int j = 0; j < bs; j++)
            {
                ArrayList limbs = new ArrayList();

                int recurrences = Random.Range(0, recurrence_limit);
                chromosome.num_recurrences[j] = recurrences;
                for (int k = 0; k <= recurrences; k++)
                {
                    Vector3 scale = new Vector3((float)Random.Range(min_limb_scale.x, max_limb_scale.x),
                                                (float)Random.Range(min_limb_scale.y, max_limb_scale.y),
                                                (float)Random.Range(min_limb_scale.z, max_limb_scale.z)
                                                );

                    Vector3 position = Utility.RandomPointInsideCube(rootScale);

                    ArrayList limb = new ArrayList();
                    limb.Add(position);
                    limb.Add(scale);
                    limbs.Add(limb);
                }
                branches.Add(limbs);
            }

            chromosome.setBaseFequency(Random.Range(3, 20));
            chromosome.setBaseAmplitude(Random.Range(3, 6));
            chromosome.setBasePhase(Random.Range(0, 360));
            chromosome.setBranches(branches);

            if (eth.enoughEnergy(creature_init_energy))
            {
                spw.spawn(Utility.RandomVec(-creature_spread, creature_spread, creature_spread), Utility.RandomRotVec(), creature_init_energy, chromosome);
                eth.subtractEnergy(creature_init_energy);
            }
        }
    }
Exemple #20
0
    void Start()
    {
        _t   = transform;
        name = "creature" + gameObject.GetInstanceID();

        eth       = Ether.getInstance();
        settings  = Settings.getInstance();
        crt_count = GameObject.Find("CreatureCount").GetComponent <CreatureCount>();

        max_root_scale   = new Vector3();
        max_root_scale.x = float.Parse(settings.contents["creature"]["root"]["max_root_scale"]["x"].ToString());
        max_root_scale.y = float.Parse(settings.contents["creature"]["root"]["max_root_scale"]["y"].ToString());
        max_root_scale.z = float.Parse(settings.contents["creature"]["root"]["max_root_scale"]["z"].ToString());

        min_root_scale   = new Vector3();
        min_root_scale.x = float.Parse(settings.contents["creature"]["root"]["min_root_scale"]["x"].ToString());
        min_root_scale.y = float.Parse(settings.contents["creature"]["root"]["min_root_scale"]["y"].ToString());
        min_root_scale.z = float.Parse(settings.contents["creature"]["root"]["min_root_scale"]["z"].ToString());


        root                       = GameObject.CreatePrimitive(PrimitiveType.Cube);
        root.name                  = "root";
        root.transform.parent      = _t;
        root.transform.position    = _t.position;
        root.transform.eulerAngles = _t.eulerAngles;
        root.AddComponent <Rigidbody>();
        root_script = root.AddComponent <Root>();
        root_script.setColour(chromosome.getColour());
        root_script.setScale(chromosome.getRootScale());
        //root.rigidbody.mass = 15F;
        root.GetComponent <Rigidbody>().angularDrag = float.Parse(settings.contents["creature"]["angular_drag"].ToString());
        root.GetComponent <Rigidbody>().drag        = float.Parse(settings.contents["creature"]["drag"].ToString());
        eye                       = new GameObject();
        eye.name                  = "Eye";
        eye.transform.parent      = root.transform;
        eye.transform.eulerAngles = root.transform.eulerAngles;
        eye.transform.position    = root.transform.position;
        eye_script                = eye.AddComponent <Eye>();

        mouth                         = new GameObject();
        mouth.name                    = "Mouth";
        mouth.transform.parent        = root.transform;
        mouth.transform.eulerAngles   = root.transform.eulerAngles;
        mouth.transform.localPosition = new Vector3(0, 0, .5F);
        mouth.AddComponent <Mouth>();

        genital                         = new GameObject();
        genital.name                    = "Genital";
        genital.transform.parent        = root.transform;
        genital.transform.eulerAngles   = root.transform.eulerAngles;
        genital.transform.localPosition = new Vector3(0, 0, -.5F);
        genital.AddComponent <Genitalia>();

        line_of_sight       = (double)settings.contents ["creature"]["line_of_sight"];
        metabolic_rate      = (double)settings.contents ["creature"]["metabolic_rate"];
        age_sexual_maturity = (int)settings.contents ["creature"]["age_sexual_maturity"];

        setupLimbs();

        age        = 0.0D;
        state      = State.neutral;
        food_eaten = 0;
        offspring  = 0;

        InvokeRepeating("updateState", 0, 0.1f);
        InvokeRepeating("metabolise", 1.0f, 1.0f);
        InvokeRepeating("RandomDirection", 1F, 5F);

        root.GetComponent <Rigidbody>().SetDensity(4F);
    }
Exemple #21
0
#pragma warning restore 0414
	
	void Start () {
		lg = Logger.getInstance();
		crt_count = GameObject.Find("CreatureCount").GetComponent<CreatureCount>();
		eth = Ether.getInstance();
}
 void Update()
 {
     eth       = Ether.getInstance();
     text.text = "Ether energy: " + eth.getEnergy().ToString("F0");
 }
Exemple #23
0
        public static object TestVarBars(double[] Data, int NumBarsToStore, int BarLengthInSeconds)
        {
            SortedDictionary <DateTimeOffset, Dictionary <string, double> > Values = new SortedDictionary <DateTimeOffset, Dictionary <string, double> >();

            int         epochSecs = 1;
            IMessageBus Ether     = new Ether(epochSecs);

            BarList bl = new BarList(Ether, 1, NumBarsToStore, (int)(BarLengthInSeconds));

            bl.BarFinalisedListeners += (s, e) => {
                DateTimeOffset closeTime = e.EndTime;
                if (!Values.ContainsKey(closeTime))
                {
                    Values[closeTime] = new Dictionary <string, double>();
                }

                Values[closeTime]["Open"]     = (double)e.Open;
                Values[closeTime]["Low"]      = (double)e.Low;
                Values[closeTime]["High"]     = (double)e.High;
                Values[closeTime]["Close"]    = (double)e.Close;
                Values[closeTime]["NumTicks"] = e.NumTicks;
            };

            VarBars vb = new VarBars(Ether, 1, NumBarsToStore, BarLengthInSeconds);

            vb.BarFinalisedListeners += (s, e) => {
                if (!Values.ContainsKey(e.EndTime))
                {
                    Values[e.EndTime] = new Dictionary <string, double>();
                }

                Values[e.EndTime]["VB_Open"]          = (double)e.Open;
                Values[e.EndTime]["VB_Low"]           = (double)e.Low;
                Values[e.EndTime]["VB_High"]          = (double)e.High;
                Values[e.EndTime]["VB_Close"]         = (double)e.Close;
                Values[e.EndTime]["VB_Average"]       = 0; // (double)e.Average;
                Values[e.EndTime]["VB_MaxSpread"]     = 0; //(double)e.MaxSpread;
                Values[e.EndTime]["VB_AverageSpread"] = 0; //(double)e.AverageSpread;
                Values[e.EndTime]["VB_NumTicks"]      = e.NumTicks;
            };

            DateTimeOffset dto = DateTimeOffset.UtcNow;

            dto = new DateTimeOffset(dto.Year, dto.Month, dto.Day, dto.Hour, dto.Minute, dto.Second, new TimeSpan(0));

            int i = 0;

            foreach (double d in Data)
            {
                DateTimeOffset time = dto.AddSeconds(i * epochSecs);
                Market         mkt  = new Market(time, 1, (decimal)(d * 0.999), (decimal)(d * 1.001));
                Ether.Send(mkt);

                Ether.Send(new Heartbeat(time, epochSecs, "Heartbeat"));
                i++;
            }

            object[,] ret = new object[Values.Count, 15];
            i             = 0;
            foreach (DateTimeOffset k in Values.Keys)
            {
                ret[i, 0] = k.ToString("yy-MM-dd HH:mm:ss.fff");

                if (Values[k].ContainsKey("Open"))
                {
                    ret[i, 1] = Values[k]["Open"];
                    ret[i, 2] = Values[k]["Low"];
                    ret[i, 3] = Values[k]["High"];
                    ret[i, 4] = Values[k]["Close"];
                    ret[i, 5] = Values[k]["NumTicks"];
                }
                else
                {
                    ret[i, 1] = ret[i, 2] = ret[i, 3] = ret[i, 4] = ret[i, 5] = "";
                }

                ret[i, 6] = "";

                if (Values[k].ContainsKey("VB_Open"))
                {
                    ret[i, 7]  = Values[k]["VB_Open"];
                    ret[i, 8]  = Values[k]["VB_Low"];
                    ret[i, 9]  = Values[k]["VB_High"];
                    ret[i, 10] = Values[k]["VB_Close"];
                    ret[i, 11] = Values[k]["VB_Average"];
                    ret[i, 12] = Values[k]["VB_MaxSpread"];
                    ret[i, 13] = Values[k]["VB_AverageSpread"];
                    ret[i, 14] = Values[k]["VB_NumTicks"];
                }
                else
                {
                    ret[i, 7] = ret[i, 8] = ret[i, 9] = ret[i, 10] = ret[i, 11] = ret[i, 12] = ret[i, 13] = ret[i, 14] = "";
                }

                i++;
            }

            return(ret);
        }
Exemple #24
-2
    void Start()
    {
        _t = transform;
        name = "creature" + gameObject.GetInstanceID();

        eth = Ether.getInstance();
        settings = Settings.getInstance();
        crt_count = GameObject.Find("CreatureCount").GetComponent<CreatureCount>();

        max_root_scale = new Vector3();
        max_root_scale.x = float.Parse( settings.contents["creature"]["root"]["max_root_scale"]["x"].ToString() );
        max_root_scale.y = float.Parse( settings.contents["creature"]["root"]["max_root_scale"]["y"].ToString() );
        max_root_scale.z = float.Parse( settings.contents["creature"]["root"]["max_root_scale"]["z"].ToString() );

        min_root_scale = new Vector3();
        min_root_scale.x = float.Parse( settings.contents["creature"]["root"]["min_root_scale"]["x"].ToString() );
        min_root_scale.y = float.Parse( settings.contents["creature"]["root"]["min_root_scale"]["y"].ToString() );
        min_root_scale.z = float.Parse( settings.contents["creature"]["root"]["min_root_scale"]["z"].ToString() );

        root = GameObject.CreatePrimitive(PrimitiveType.Cube);
        root.name = "root";
        root.transform.parent 			= _t;
        root.transform.position 		= _t.position;
        root.transform.eulerAngles 		= _t.eulerAngles;
        root.AddComponent<Rigidbody>();
        root_script = root.AddComponent<Root>();
        root_script.setColour(chromosome.getColour());
        root_script.setScale(chromosome.getRootScale());
        //root.rigidbody.mass = 15F;
        root.GetComponent<Rigidbody>().angularDrag 	= float.Parse( settings.contents["creature"]["angular_drag"].ToString() );
        root.GetComponent<Rigidbody>().drag 				= float.Parse( settings.contents["creature"]["drag"].ToString() );
        eye = new GameObject();
        eye.name = "Eye";
        eye.transform.parent 			= root.transform;
        eye.transform.eulerAngles 		= root.transform.eulerAngles;
        eye.transform.position 			= root.transform.position;
        eye_script = eye.AddComponent<Eye>();

        mouth = new GameObject();
        mouth.name = "Mouth";
        mouth.transform.parent 			= root.transform;
        mouth.transform.eulerAngles 	= root.transform.eulerAngles;
        mouth.transform.localPosition 	= new Vector3(0,0,.5F);
        mouth.AddComponent<Mouth>();

        genital = new GameObject();
        genital.name = "Genital";
        genital.transform.parent 		= root.transform;
        genital.transform.eulerAngles 	= root.transform.eulerAngles;
        genital.transform.localPosition	= new Vector3(0,0,-.5F);
        genital.AddComponent<Genitalia>();

        line_of_sight 		= (double) 	settings.contents ["creature"]["line_of_sight"];
        metabolic_rate 		= (double) 	settings.contents ["creature"]["metabolic_rate"];
        age_sexual_maturity = (int)		settings.contents ["creature"]["age_sexual_maturity"];

        setupLimbs();

        age = 0.0D;
        state = State.neutral;
        food_eaten = 0;
        offspring = 0;

        InvokeRepeating("updateState",0,0.1f);
        InvokeRepeating("metabolise",1.0f,1.0f);
        InvokeRepeating("RandomDirection", 1F, 5F);

        root.GetComponent<Rigidbody>().SetDensity(4F);
    }