//--------------------------------------------------------------------------------
    #region Public Methods

    public void Show(Reindeer deer)
    {
        this.deer            = deer;
        background.color     = new Color(deer.color.r, deer.color.g, deer.color.b, 0.5f);
        nameField.text       = deer.name;
        codeField.source     = deer.miniscript;
        checkResultText.text = "Enter MiniScript code above.  Click Check Syntax to check for basic errors.";
        ReindeerScript scp = deer.GetComponent <ReindeerScript>();

        if (!string.IsNullOrEmpty(scp.lastError))
        {
            ShowError(scp.lastError);
        }
        Debug.Log("scp.lastError: " + scp.lastError);
        gameObject.SetActive(true);
        codeField.Select();
    }
Exemplo n.º 2
0
    static void AddIntrinsics()
    {
        if (intrinsicsAdded)
        {
            return;                                     // already done!
        }
        intrinsicsAdded = true;

        Intrinsic f;

        // look
        // finds the closest enemy within a narrow angle of our current heading,
        // and returns a map with: distance, direction, heading, speed, energy, health.
        f      = Intrinsic.Create("look");
        f.code = (context, partialResult) => {
            ReindeerScript rs         = context.interpreter.hostData as ReindeerScript;
            Vector2        here       = rs.transform.position;
            Vector2        forward    = rs.transform.right;
            Reindeer       reindeer   = rs.reindeer;
            ValMap         result     = null;
            float          resultDist = 0;
            foreach (Reindeer deer in rs.game.deer)
            {
                if (deer == reindeer)
                {
                    continue;
                }
                if (!deer.gameObject.activeSelf)
                {
                    continue;
                }
                Vector2 dvec = (Vector2)deer.transform.position - here;
                float   ang  = Vector2.Angle(dvec, forward);
                if (ang < 5)
                {
                    float dist = dvec.magnitude;
                    if (result == null || dist < resultDist)
                    {
                        float direction = Mathf.Atan2(dvec.y, dvec.x) * Mathf.Rad2Deg;
                        if (result == null)
                        {
                            result = new ValMap();
                        }
                        resultDist = dist;
                        // On second thought, not including direction, as this makes
                        // aiming *too* precise.
                        //result.SetElem(directionStr, new ValNumber(direction));
                        result.SetElem(distanceStr, new ValNumber(Mathf.Round(dist)));
                        result.SetElem(headingStr, new ValNumber(deer.curAngle));
                        result.SetElem(speedStr, new ValNumber(deer.curSpeed));
                        result.SetElem(energyStr, new ValNumber(Mathf.Round(deer.energy)));
                        result.SetElem(healthStr, new ValNumber(deer.health));
                    }
                }
            }
            return(new Intrinsic.Result(result));
        };

        // throw(energy=20)
        // fires a snowball in our current heading; returns 1 if success, 0 if failed.
        f = Intrinsic.Create("throw");
        f.AddParam("energy", new ValNumber(20));
        f.code = (context, partialResult) => {
            ReindeerScript rs       = context.interpreter.hostData as ReindeerScript;
            Reindeer       reindeer = rs.reindeer;
            float          eCost    = (float)context.GetVar("energy").DoubleValue();
            if (reindeer.ThrowSnowball(eCost))
            {
                return(new Intrinsic.Result(ValNumber.one));
            }
            return(new Intrinsic.Result(ValNumber.zero));
        };

        // drop(energy=20, delay=5)
        // drops a meadow mine; returns 1 if success, 0 if failed
        f = Intrinsic.Create("drop");
        f.AddParam("energy", new ValNumber(20));
        f.AddParam("delay", new ValNumber(5));
        f.code = (context, partialResult) => {
            ReindeerScript rs       = context.interpreter.hostData as ReindeerScript;
            Reindeer       reindeer = rs.reindeer;
            float          eCost    = (float)context.GetVar("energy").DoubleValue();
            float          delay    = (float)context.GetVar("delay").DoubleValue();
            if (reindeer.LayMine(eCost, delay))
            {
                return(new Intrinsic.Result(ValNumber.one));
            }
            return(new Intrinsic.Result(ValNumber.zero));
        };
    }
Exemplo n.º 3
0
 //--------------------------------------------------------------------------------
 #region MonoBehaviour Events
 void Awake()
 {
     rscript = GetComponent <ReindeerScript>();
 }