/// <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)); }
/// <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)); }