示例#1
0
    // Use this for initialization
    void Start()
    {
        for (int i = 0; i < 3; i++)
        {
            piratePool[i] = Instantiate(piratePrefab, this.transform) as GameObject;
            piratePool[i].SetActive(true);
        }

        PirateObject[] pirates = new PirateObject[3];
        for (int i = 0; i < 3; i++)
        {
            pirates[i] = new PirateObject();
            piratePool[i].GetComponent <PirateController>().reference = pirates[i];
        }
        //Interpreter.pirates = pirates;
    }
示例#2
0
    /* public static void run () {
     *
     *      for (int i = 0; i < pirates.Length; i++) {
     *              if (pirates[i].tasks.Count == 0)
     *                      interpret (pirate.getBaseBlock ().nestedBlocks, pirate,new Queue<string>);
     *      }
     * }*/

    public static Queue <string> interpret(CodeBlock[] blocks, PirateObject pirate, Queue <string> queue)
    {
        foreach (CodeBlock block in blocks)
        {
            switch (block.command)
            {
            case "loop":
                string[] temp = block.parameter.Split(new Char[] { '~' });
                int      lower = Int32.Parse(temp[0]), upper = Int32.Parse(temp[1]);
                for (int i = lower; i < upper; i++)
                {
                    queue = interpret(block.nestedBlocks, pirate, queue);
                }
                break;

            case "variable":
                //vars[index]=pirates[index].parameter.Split("~");
                break;

            case "math":
                //math(param, index)
                break;

            case "task":
                //if block.command = task, then enqueue parameter
                //task = block.parameter;
                queue.Enqueue(block.parameter);
                break;

            case "check":
                //	task = check (block.parameter, index) + "";
                if (check(block.parameter, pirate))
                {
                    queue = interpret(block.nestedBlocks, pirate, queue);
                }
                break;
            }
        }
        return(queue);
    }
示例#3
0
 public static Queue <string> run(PirateObject pirate)
 {
     return(interpret(pirate.getBaseBlock().nestedBlocks, pirate, new Queue <string>()));
 }
示例#4
0
    public static bool check(string param, PirateObject pirate)
    {
        if (!param.Contains("~"))
        {
            if (param == "true")
            {
                return(true);
            }
            if (param == "false")
            {
                return(false);
            }
            switch (param)
            {
            case "isNight":
                return(StateMachine.isNight);

                break;

            case "isDay":
                return(StateMachine.isDay);

                break;

            case "isHungry":
                return(pirate.isHungry);

            case "isThirsty":
                return(pirate.isThirsty);

            case "isCombat":
                return(StateMachine.isCombat);

                break;

            case "isTired":
                return(pirate.isTired);

                break;

            case "isInjured":
                return(pirate.isInjured);

                break;

            case "isIdle":
                return(pirate.isIdle);

                break;

            case "isMoving":
                return(pirate.isMoving);

                break;

            case "isSailing":
                return(StateMachine.isSailing);

                break;
            }
        }
        else
        {
            string[] splitParameterArray = param.Split('~');
            // hunger~<~10
            bool[] stateBool  = new bool[4];
            int[]  stateFloat = new int[4];
            int    counter    = 0;

            for (int i = 0; i < splitParameterArray.Length; i += 2)
            {
                //if (splitParameterArray[i].Contains ("(") && splitParameterArray[i].Contains (")")) {
                if (splitParameterArray[i] == "hunger")
                {
                    stateFloat[counter] = pirate.hunger;
                    counter++;
                }
                else if (splitParameterArray[i] == "thirst")
                {
                    stateFloat[counter] = pirate.thirst;
                    counter++;
                }
                else if (splitParameterArray[i] == "sleep")
                {
                    stateFloat[counter] = pirate.sleep;
                    counter++;
                }
                else if (splitParameterArray[i] == "sailing")
                {
                    stateFloat[counter] = pirate.sailing;
                    counter++;
                }
                else if (splitParameterArray[i] == "true")
                {
                    stateBool[counter] = true;
                    counter++;
                }
                else if (splitParameterArray[i] == "false")
                {
                    stateBool[counter] = false;
                    counter++;
                }
                else
                {
                    //	task = param + ", " + i + "," + splitParameterArray.Length.ToString ();
                    stateFloat[counter] = Int32.Parse(splitParameterArray[i]);
                    counter++;
                }
            }
            counter = 0;
            //task = stateFloat[counter].ToString () + ", "+stateFloat[counter + 1];
            switch (splitParameterArray[1])
            {
            case "<":
                //task = stateFloat[counter].ToString () + ",++ "+stateFloat[counter + 1];
                return(stateFloat[counter] < stateFloat[counter + 1]);

                break;

            case ">":
                return(stateFloat[counter] > stateFloat[counter + 1]);

                break;

            case "<=":
                return(stateFloat[counter] <= stateFloat[counter + 1]);

                break;

            case ">=":
                return(stateFloat[counter] >= stateFloat[counter + 1]);

                break;

            case "!=":
                return(stateFloat[counter] != stateFloat[counter + 1]);

                break;

            case "==":
                return(stateFloat[counter] == stateFloat[counter + 1]);

                break;

            case "||":
                return(stateBool[counter] || stateBool[counter + 1]);

                break;

            case "&&":
                return(stateBool[counter] && stateBool[counter + 1]);

                break;
            }

            return(false);
        }
        return(false);
    }
示例#5
0
 public static void clickOnPirate(PirateObject pirate)
 {
     //book.SetActive (true);
     BookObject.opened        = BookObject.OPENED;
     BookObject.currentPirate = pirate;
 }
示例#6
0
 // Use this for initialization
 void Start()
 {
     reference = new PirateObject();
     codebase  = GameObject.Find("CodeBase");
     this.transform.GetChild(0).GetChild(0).GetComponent <SpriteRenderer>().color = new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f));
 }