コード例 #1
0
ファイル: HackingGame.cs プロジェクト: MaGiiC123/CodingGame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.R))
        {
            Restart();
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            computer.SetActive(true);
            editor.SetActive(true);
            player.gameObject.SetActive(false);
        }
        if (computer.activeSelf)
        {
            if (Input.GetKeyDown(KeyCode.C) && (Input.GetKey(KeyCode.LeftControl)))//|| Input.GetKey (KeyCode.LeftCommand)))
            {
                computer.SetActive(false);
                player.gameObject.SetActive(true);
            }
        }
        guards = FindObjectsOfType <HackingEnemy>();
        if (!active && player.transform.position.z > -3)
        {
            active        = true;
            turret.active = true;
            foreach (var e in guards)
            {
                e.active = true;
            }
        }

        if (active && player != null)
        {
            string code = (useTestSolution) ? testCodeSolution.text : testCodeInitial.text;
            code = editor.code;
            VirtualCompiler compiler = new VirtualCompiler(code);
            VirtualComputer cc       = computer.GetComponent <VirtualComputer>();
            cc.availableModules[0] = turret;
            compiler.vComputer     = cc;

            float[] guardSpeed = new float[guards.Length];
            float[] guardPosX  = new float[guards.Length];
            float[] guardPosY  = new float[guards.Length];
            float[] guardDirX  = new float[guards.Length];
            float[] guardDirY  = new float[guards.Length];

            for (int i = 0; i < guards.Length; i++)
            {
                guardSpeed[i] = guards[i].speed;
                guardPosX[i]  = guards[i].transform.position.x;
                guardPosY[i]  = guards[i].transform.position.z;
                guardDirX[i]  = guards[i].transform.forward.x;
                guardDirY[i]  = guards[i].transform.forward.y;
            }
            compiler.AddInputArray(nameof(guardSpeed), guardSpeed);
            compiler.AddInputArray(nameof(guardPosX), guardPosX);
            compiler.AddInputArray(nameof(guardPosY), guardPosY);
            compiler.AddInputArray(nameof(guardDirX), guardDirX);
            compiler.AddInputArray(nameof(guardDirY), guardDirY);
            compiler.AddInput("numGuards", guards.Length);

            compiler.AddInput("intruderPosX", player.transform.position.x);
            compiler.AddInput("intruderPosY", player.transform.position.z);
            compiler.AddInput("intruderDirX", player.dir.x);
            compiler.AddInput("intruderDirY", player.dir.y);
            compiler.AddInput("intruderSpeed", player.speed);

            compiler.AddInput("missileSpeed", turret.missilePrefab.speed);
            compiler.AddInput("turretPosX", turret.muzzle.position.x);
            compiler.AddInput("turretPosY", turret.muzzle.position.z);
            compiler.AddInput("turretHeight", turret.muzzle.position.y);

            compiler.AddOutputFunction("setAim");
            compiler.AddOutputFunction("powerUp");
            compiler.AddOutputFunction("setInactive");

            List <VirtualFunction> output = compiler.Run();
            ExecuteFunctions(output);


            //OLD

            /*if (output.Count > 0)
             * {
             *  float aimX = output[1].values[0];
             *  float aimY = output[1].values[1];
             *  turret.setAim(aimX, aimY);
             * }*/
        }
    }