示例#1
0
    /// <summary>
    /// Gibt eine Liste mit den Positionen und Typen aller (Roboter und) WorldObjects auf der Karte zurück.
    /// </summary>
    /// <returns></returns>
    public DynValue ScanSurroundings()
    {
        //Debug.Log(name + " scans its surroundings.");
        Table sensedData = new Table(script);

        List <WorldObject> temp = WorldObjectManager.Instance.GetWorldObjectList();

        foreach (WorldObject worldObject in temp)
        {
            Table             worldObjectInfo   = new Table(script);
            InteractiveObject interactiveObject = worldObject.GetComponent <InteractiveObject>();
            worldObjectInfo["type"]     = worldObject.objectType;
            worldObjectInfo["movable"]  = interactiveObject.Movable;
            worldObjectInfo["grabable"] = interactiveObject.Grabable;
            if (interactiveObject.grabbedBy != null)
            {
                worldObjectInfo["grabbedBy"] = interactiveObject.grabbedBy.name;
            }
            else
            {
                worldObjectInfo["grabbedBy"] = "none";
            }
            worldObjectInfo["direction"] = interactiveObject.GetFacingAngle(interactiveObject.direction);
            worldObjectInfo["x"]         = interactiveObject.posX;
            worldObjectInfo["y"]         = interactiveObject.posY;
            sensedData.Append(DynValue.NewTable(worldObjectInfo));
        }

        return(DynValue.NewTable(sensedData));
    }
示例#2
0
    /// <summary>
    /// Überprüft, ob auf dem Feld vor dem WorldObject ein interaktives Objekt liegt.
    /// </summary>
    public DynValue CheckForInteractiveObjectInFront()
    {
        //Debug.Log(gameObject.name + " looks for an Object in its front.");
        Table sensedData = new Table(script);

        InteractiveObject temp = GetComponent <RayCaster>().CheckForInteractiveObject(myInteractiveObject.direction);

        if (temp != null)
        {
            //Wenn ein Interaktives Objekt vor dem Roboter steht wird es analysiert.
            sensedData["x"]         = temp.posX;
            sensedData["y"]         = temp.posY;
            sensedData["direction"] = temp.GetFacingAngle(temp.direction);
            sensedData["movable"]   = temp.Movable;
            sensedData["grabable"]  = temp.Grabable;
            sensedData["color"]     = "none";
            if (temp.grabbedBy != null)
            {
                sensedData["grabbedBy"] = temp.grabbedBy.name;
            }
            else
            {
                sensedData["grabbedBy"] = "none";
            }

            Robot tempBot = temp.GetComponent <Robot>();
            if (tempBot != null)
            {
                sensedData["type"] = "Robot";
            }

            WorldObject tempObj = temp.GetComponent <WorldObject>();
            if (tempObj != null)
            {
                sensedData["type"]  = tempObj.objectType;
                sensedData["color"] = tempObj.objectColor.ToString();
            }
        }
        else if (GetComponent <RayCaster>().CheckForCollisionsInDirection(myInteractiveObject.direction))
        {
            //Wenn kein Interaktives Objekt vor dem Roboter steht, er aber trotzdem kollidieren würde, muss eine Wand vor ihm sein.
            sensedData["type"]      = "Wall";
            sensedData["movable"]   = false;
            sensedData["grabable"]  = false;
            sensedData["grabbedBy"] = "none";
            sensedData["direction"] = -1;
            sensedData["color"]     = "none";
            sensedData["x"]         = myInteractiveObject.posX + myInteractiveObject.direction.x;
            sensedData["y"]         = myInteractiveObject.posY + myInteractiveObject.direction.y;
        }
        else
        {
            //Wenn auch keine Kollision stattfinden würde, ist das Tile vor dem Roboter leer.
            sensedData["type"]      = "Nothing";
            sensedData["movable"]   = false;
            sensedData["grabable"]  = false;
            sensedData["grabbedBy"] = "none";
            sensedData["direction"] = -1;
            sensedData["color"]     = "none";
            sensedData["x"]         = myInteractiveObject.posX + myInteractiveObject.direction.x;
            sensedData["y"]         = myInteractiveObject.posY + myInteractiveObject.direction.y;
        }

        return(DynValue.NewTable(sensedData));
    }