コード例 #1
0
    }                                                         // first dimension is vertical

    public void Setup(string name, string id, Sensor[] sensors, int numLayers)
    {
        ObjectGO = Utilities.GetGameObjectByName(name, new string[] { ">>" });
        Name     = ObjectGO.name;
        ID       = id;
        Selected = Focussed = false;
        ParentGO = new GameObject("SensedObject " + ID);

        ParentGO.transform.position = ObjectGO.GetComponent <Renderer>().bounds.center;
        ObjectGO.transform.parent   = ParentGO.transform;
        Sensors = new Sensor[sensors.Length];
        Array.Copy(sensors, Sensors, sensors.Length);
        for (int s = 0; s < Sensors.Length; s++)
        {
            Sensors[s].GO.transform.SetParent(ParentGO.transform);
        }

        LoadIndicator();

        LayerCount    = numLayers;
        SurfaceNormal = -Vector3.forward;                                 // TODO how to make this for general objects

        float panelMinX = ObjectGO.GetComponent <Renderer>().bounds.min.x;
        float panelMaxX = ObjectGO.GetComponent <Renderer>().bounds.max.x;
        float panelMinY = ObjectGO.GetComponent <Renderer>().bounds.min.y;
        float panelMaxY = ObjectGO.GetComponent <Renderer>().bounds.max.y;

        //PanelGridStep = (panelMaxX - panelMinX) / 20;  // 20 points along the x axis
        int panelW = (int)System.Math.Floor((panelMaxX - panelMinX) / PanelGridStep);
        int panelH = (int)System.Math.Floor((panelMaxY - panelMinY) / PanelGridStep);

        InterpolatedValues = new float[panelH, panelW, LayerCount];
    }
コード例 #2
0
    // get the position of the grid points in the world
    public Vector3 GetGridPosition(int i, int j, int k)
    {
        float  xPos, yPos, zPos;
        Bounds b = ObjectGO.GetComponent <Renderer>().bounds;

        xPos = PanelGridStep / 2 + b.min.x + j * PanelGridStep;
        yPos = PanelGridStep / 2 + b.min.y + i * PanelGridStep;
        zPos = b.center.z + SurfaceNormal.z * b.extents.z;
        return(new Vector3(xPos, yPos, zPos));
    }
コード例 #3
0
    void LoadIndicator()
    {
        Bounds bound = ObjectGO.GetComponent <Renderer>().bounds;

        //IndicatorPrefab = Resources.Load<GameObject>(@"Prefabs/SensorIndicatorPrefab");
        //if (IndicatorPrefab == null)
        //    IndicatorGO = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        //else
        IndicatorGO = GameObject.Instantiate <GameObject>(Specs.SensorIndicatorPrefab);


        IndicatorGO.transform.position = bound.center + (bound.extents.y + Utilities.Scaled(3)) * Vector3.up;
        IndicatorGO.transform.SetParent(ParentGO.transform);
        IndicatorGO.AddComponent <MouseHandler>();
        IndicatorGO.GetComponent <MouseHandler>().SetHandler(ObjectSelectedByIndicator, MouseHandler.MOUSE_EVENT.DOWN);
    }
コード例 #4
0
ファイル: TribeRadiusGO.cs プロジェクト: Nyarlygames/Plug
    private void OnTriggerExit2D(Collider2D collision)
    {
        ObjectGO objgo = collision.gameObject.GetComponent <ObjectGO>();

        if ((objgo != null) && (objgo.objectCur.visitState != 2))
        {
            objgo.SetVisited(2);
        }
        else
        {
            TileGO tilego = collision.gameObject.GetComponent <TileGO>();
            if ((tilego != null) && (tilego.tileCur.visitState != 2))
            {
                tilego.SetVisited(2);
            }
        }
    }
コード例 #5
0
    public void ObjectSelectedByIndicator()
    {
        Selected = true;
        Camera  cam        = Camera.main;
        Bounds  bound      = ObjectGO.GetComponent <Renderer>().bounds;
        Vector3 desiredPos = bound.center + SurfaceNormal * Utilities.Scaled(30);

        cam.GetComponent <AvatarInteraction>().MoveCam(desiredPos, Quaternion.LookRotation(-SurfaceNormal, Vector3.up));

        BoxCollider col = ObjectGO.GetComponent <BoxCollider>();

        if (col == null)
        {
            col = ObjectGO.AddComponent <BoxCollider>();
        }
        col.bounds.SetMinMax(bound.min, bound.max);

        if (!ObjectGO.GetComponent <MouseHandler>())
        {
            MouseHandler mh = ObjectGO.AddComponent <MouseHandler>();
            mh.SetHandler(ObjectSelectedByObject, MouseHandler.MOUSE_EVENT.BUTTON);
        }
    }
コード例 #6
0
ファイル: TribeRadiusGO.cs プロジェクト: Nyarlygames/Plug
    /* private void FixedUpdate()
     * {
     *    //RaycastHit hit;
     *    if (Physics.Raycast(transform.position, Vector3.up, 10))
     *    {
     *        // executes if hits a collider
     *    }
     *    else
     *    {
     *        // executes if it doesnt hit any collider
     *    }
     * }*/

    private void OnTriggerEnter2D(Collider2D collision)
    {
        ObjectGO objgo = collision.gameObject.GetComponent <ObjectGO>();

        if ((objgo != null) && (objgo.objectCur.visitState != 1))
        {
            if (objgo.tag == "Loader")
            {
                //LoadChunk Load = GameObject.Find("Load_Chunk").GetComponent<LoadChunk>();
                GM.LoadManager.LoadChunkedMap(objgo.objectCur.modifiers["chunkfile"]);
                // GM.LoadManager.LoadChunkedTiles(GM.LoadManager.chunk2, 10, 0, 10, 10, 0, GM.map.sizey);
                // GM.map.maxsizex += 0;
                //GM.map.maxsizey += 12;

                /*if (objgo.objectCur.modifiers["loadChunk"] != "0")
                 * {
                 *  //GM.map.sizey += Load.chunk2.sizey;
                 *  //GM.map.sizex += Load.chunk2.sizex;
                 *  GM.map.tilesizey += Load.chunk2.tilesizey;
                 *  GM.map.tilesizex += Load.chunk2.tilesizex;
                 * }*/
                Destroy(collision.gameObject);
            }
            else
            {
                objgo.SetVisited(1);
            }
        }
        else
        {
            TileGO tilego = collision.gameObject.GetComponent <TileGO>();
            if ((tilego != null) && (tilego.tileCur.visitState != 1))
            {
                tilego.SetVisited(1);
            }
        }
    }
コード例 #7
0
    public void LoadMapGO(MapSave mapfile, List <GameObject> TilesGO, List <GameObject> ObjectsGO, List <ObjectSave> objectssave, List <GameObject> Ground_Prefabs)
    {
        GM = GameObject.Find("GameManager").GetComponent <GameManager>();
        GameObject emptyMap  = new GameObject("Map");
        Vector3    placement = Vector3.zero;

        for (int y = 0; y < mapfile.sizey; y++)
        {
            for (int x = 0; x < mapfile.sizex; x++)
            {
                int drawback = 10;
                /* TILES GROUND */
                TileSave    tileCur = mapfile.layer.tiles[y][x];
                TileSetSave tileset = new TileSetSave();
                GameObject  tilego  = null;
                if (tileCur.mapid > mapfile.basevalue)
                {
                    foreach (TileSetsSave tss in mapfile.tilesets)
                    {
                        foreach (TileSetSave ts in tss.tilesets)
                        {
                            if ((tileCur.mapid == tss.first + ts.id))
                            {
                                tileset = ts;
                                int    id_min = tileset.spritefile.Substring(0, tileset.spritefile.IndexOf("_")).Length;
                                string sub    = tileset.spritefile.Substring(id_min + 1);
                                string id     = sub.Substring(0, sub.IndexOf("."));

                                tilego      = GameObject.Instantiate(Ground_Prefabs[GM.prefabs_name[id]], Vector3.zero, Quaternion.identity);
                                tilego.name = "Instantiated : " + x + " / " + y;
                                // useless but keep just in case

                                /*switch (mapfile.orientation)
                                 * {
                                 *  case "orthogonal":
                                 *      placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround+ drawback);
                                 *      break;
                                 *  case "staggered":*/
                                if (y % 2 == 1)
                                {
                                    placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                }
                                else
                                {
                                    placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f + (mapfile.tilesizex / 2.0f / 100.0f), (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                }

                                /*  break;
                                 * case "isometric":
                                 * if (y % 2 == 1)
                                 *    placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                 * else
                                 *    placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f + (mapfile.tilesizex / 2.0f / 100.0f), (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                 * break;
                                 * default:
                                 * placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                 * break;
                                 * }*/
                                tilego.GetComponent <Transform>().position = placement;
                                if (tileset.modifiers.ContainsKey("collider") && (tileset.modifiers["collider"] == "true"))
                                {
                                    tilego.AddComponent <PolygonCollider2D>();
                                    tilego.AddComponent <PolygonCollider2D>().isTrigger = false;
                                }
                                else
                                {
                                    tilego.AddComponent <BoxCollider2D>();
                                    tilego.GetComponent <BoxCollider2D>().isTrigger = true;
                                }
                                tilego.transform.SetParent(emptyMap.GetComponent <Transform>());
                                TilesGO.Add(tilego);
                                break;
                            }
                        }
                        if (tileset.id > 0)
                        {
                            break;
                        }
                    }
                }
                /* ADDED GROUND */
                drawback = 9;
                if (mapfile.layer.tiles[y][x].addedid > mapfile.basevalue)
                {
                    TileSetSave tilesetAdded = new TileSetSave();
                    if (mapfile.layer.tiles[y][x].addedid > mapfile.basevalue)
                    {
                        GameObject tilegoAdded = null;
                        foreach (TileSetsSave tss in mapfile.tilesets)
                        {
                            foreach (TileSetSave ts in tss.tilesets)
                            {
                                if ((mapfile.layer.tiles[y][x].addedid == tss.first + ts.id))
                                {
                                    tilesetAdded = ts;
                                    int    id_min = tilesetAdded.spritefile.Substring(0, tilesetAdded.spritefile.IndexOf("_")).Length;
                                    string sub    = tilesetAdded.spritefile.Substring(id_min + 1);
                                    string id     = sub.Substring(0, sub.IndexOf("."));
                                    tilegoAdded      = GameObject.Instantiate(Ground_Prefabs[GM.prefabs_name[id]]);
                                    tilegoAdded.name = "Instantiated_Added : " + x + " / " + y;
                                    if (tilesetAdded.modifiers.ContainsKey("collider") && (tilesetAdded.modifiers["collider"] == "true"))
                                    {
                                        tilegoAdded.AddComponent <PolygonCollider2D>();
                                        tilegoAdded.GetComponent <PolygonCollider2D>().isTrigger = false;
                                    }
                                    else
                                    {
                                        tilegoAdded.AddComponent <BoxCollider2D>();
                                        tilegoAdded.GetComponent <BoxCollider2D>().isTrigger = true;
                                    }
                                    placement = Vector3.zero;
                                    // useless but keep just in case

                                    /* switch (mapfile.orientation)
                                     * {
                                     *   case "orthogonal":
                                     *       placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                     *       break;
                                     *   case "staggered":*/
                                    if (y % 2 == 1)
                                    {
                                        placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                    }
                                    else
                                    {
                                        placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f + (mapfile.tilesizex / 2.0f / 100.0f), (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                    }

                                    /* break;
                                     * case "isometric":
                                     * if (y % 2 == 1)
                                     *   placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                     * else
                                     *   placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f + (mapfile.tilesizex / 2.0f / 100.0f), (y * mapfile.tilesizey / 2.0f + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                     * break;
                                     * default:
                                     * placement = new Vector3((x * mapfile.tilesizex + mapfile.tilesizex / 2.0f) / 100.0f, (y * mapfile.tilesizey + mapfile.tilesizey / 2.0f) / 100.0f, GM.ZGround + drawback);
                                     * break;
                                     * }*/
                                    tilegoAdded.GetComponent <Transform>().position = placement;
                                    // maybe use one day for sorting, but there's an issue with white shader on addedground
                                    // if (tilego == null)
                                    tilegoAdded.GetComponent <Transform>().SetParent(emptyMap.GetComponent <Transform>());
                                    // else
                                    //     tilegoAdded.GetComponent<Transform>().SetParent(tilego.GetComponent<Transform>());
                                }
                                if (tilesetAdded.id > 0)
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
        GameObject emptyGO = new GameObject("Objects");
        Sprite     Radius  = Resources.Load <Sprite>("Play/radius_rect");

        foreach (ObjectSave obj in mapfile.objects)
        {
            GameObject  curObj   = null;
            ObjectGO    curObjGO = null;
            TileSetSave tileset  = new TileSetSave();
            if (obj.gid > mapfile.basevalue)
            {
                foreach (TileSetsSave tss in mapfile.tilesets)
                {
                    foreach (TileSetSave ts in tss.tilesets)
                    {
                        if ((obj.gid == tss.first + ts.id))
                        {
                            tileset = ts;
                            int    id_min = ts.spritefile.Substring(0, ts.spritefile.IndexOf("_")).Length;
                            string sub    = ts.spritefile.Substring(id_min + 1);
                            string id     = sub.Substring(0, sub.IndexOf("."));
                            foreach (string key in tileset.modifiers.Keys)
                            {
                                if (obj.modifiers.ContainsKey(key) == false)
                                {
                                    obj.modifiers.Add(key, tileset.modifiers[key]);
                                }
                            }
                            curObj      = GameObject.Instantiate(Ground_Prefabs[GM.prefabs_name[id]]);
                            curObj.tag  = "object";
                            curObj.name = "Instantiated_Added : " + obj.x + " / " + obj.y;

                            if (obj.width != tileset.width)
                            {
                                curObj.GetComponent <Transform>().localScale = new Vector3((float)obj.width / tileset.width, (float)obj.height / tileset.height, 0.0f);
                            }
                            curObjGO           = curObj.GetComponent <ObjectGO>();
                            curObjGO.objectCur = obj;
                            break;
                        }
                    }
                    if (tileset.id > 0)
                    {
                        break;
                    }
                }
            }
            if ((curObj != null) && (curObjGO != null))
            {
                placement = Vector3.zero;
                curObjGO.InitObj();

                /* switch (mapfile.orientation)
                 * {
                 *   case "orthogonal":
                 *       placement = new Vector3((obj.x + obj.offsetx + obj.width / 2) / 100.0f, ((mapfile.sizey * mapfile.tilesizey) - ((obj.y + obj.offsety - obj.height / 2.0f))) / 100.0f, GM.ZObjects);
                 *       break;
                 *   case "staggered":*/
                if (obj.y % 2 == 1)
                {
                    placement = new Vector3((obj.x + obj.offsetx + obj.width / 2) / 100.0f, ((mapfile.sizey * mapfile.tilesizey / 2) - ((obj.y + obj.offsety - obj.height / 2.0f))) / 100.0f, GM.ZObjects);
                }
                else
                {
                    placement = new Vector3((obj.x + obj.offsetx + obj.width / 2) / 100.0f, ((mapfile.sizey * mapfile.tilesizey / 2) - ((obj.y + obj.offsety - obj.height / 2.0f))) / 100.0f + (mapfile.tilesizey / 2.0f / 100.0f), GM.ZObjects);
                }

                /*break;
                 * case "isometric":
                 * placement = new Vector3((obj.x + obj.offsetx + obj.width / 2) / 100.0f, ((mapfile.sizey * mapfile.tilesizey / 2) - ((obj.y + obj.offsety - obj.height / 2.0f))) / 100.0f, GM.ZObjects);
                 * break;
                 * default:
                 * placement = new Vector3((obj.x + obj.offsetx + obj.width / 2) / 100.0f, ((mapfile.sizey * mapfile.tilesizey) - ((obj.y + obj.offsety - obj.height / 2.0f))) / 100.0f, GM.ZObjects);
                 * break;
                 * }*/
                placement.z += 2;
                if (obj.modifiers.ContainsKey("collider") && (obj.modifiers["collider"] == "true"))
                {
                    curObj.AddComponent <PolygonCollider2D>();
                }
                else if (obj.modifiers.ContainsValue("trigger"))
                {
                    curObjGO.addTrigger(curObj, Radius, objectssave);
                }
                else
                {
                    curObj.AddComponent <BoxCollider2D>();
                    curObj.GetComponent <BoxCollider2D>().isTrigger = true;
                }
                if (obj.modifiers.ContainsKey("loadChunk"))
                {
                    curObj.tag = "Loader";
                }
                curObj.GetComponent <Transform>().position = placement;
                curObj.transform.SetParent(emptyGO.GetComponent <Transform>());
            }
        }
    }
コード例 #8
0
    // interpolate the measurements to layer queryLayer then interpolate over the layer
    void InterpolateLayer(int[] dataIndices, int queryLayer)
    {
        int desiredSensCount = 3;  // number of sensed positions (measured or interpolated) needed on each layer, 3 for tirangle
        int layerSensCount   = 0;  // number of sensed positions (measured or interpolated) on a layer
        int indx             = 0;

        //float[] valueAtPos = new float[Sensors.Length];

        int[] sensorLayerDist       = new int[Sensors.Length];  // distance (in terms of number of layers) of sensors to query layer
        int[] sensorLayerDistPermut = new int[Sensors.Length];  // permutation of distance array, needed after sorting the array

        Vector3 bary, queryPoint;                               // placeholder for bary centric coordinates, and the query point

        Vector3[] verts        = new Vector3[desiredSensCount]; // points on layer needed for interpolatation (vertices of polygon)
        float[]   sensedValues = new float[desiredSensCount];   // values (measured or interpolated) on the layer
        bool      tooClose;                                     // flag to check if two sensed locations are too close (i.e. same sensro location )

        for (int i = 0; i < Sensors.Length; i++)
        {
            sensorLayerDist[i]       = Math.Abs(queryLayer - Sensors[i].Layer);
            sensorLayerDistPermut[i] = i;
        }
        //Array.Sort(sensorLayerDist);
        Array.Sort(sensorLayerDist, sensorLayerDistPermut);


        // while not enough points on the layer, interpolate sensors to layer
        while (layerSensCount < desiredSensCount && indx < Sensors.Length)
        {
            tooClose = false;
            // if sensor is too close to prev. sensor positions, skip
            for (int j = 0; j < indx; j++)      // TODO finde a beeter threshold for distance , check distance between points projected to same layer
            {
                if (Vector3.Distance(Sensors[sensorLayerDistPermut[j]].Pos, Sensors[sensorLayerDistPermut[indx]].Pos) < Utilities.Scaled(0.1F) * ObjectGO.GetComponent <Renderer>().bounds.size.magnitude)
                {
                    tooClose = true;
                    indx++;
                    break;
                }
            }
            if (tooClose)
            {
                continue;
            }

            if (sensorLayerDist[indx] == 0)
            {
                verts[layerSensCount]        = new Vector3(Sensors[sensorLayerDistPermut[indx]].Pos.x, Sensors[sensorLayerDistPermut[indx]].Pos.y, Sensors[sensorLayerDistPermut[indx]].Pos.z);
                sensedValues[layerSensCount] = Sensors[sensorLayerDistPermut[indx]].Values[dataIndices[sensorLayerDistPermut[indx]]];
            }
            else
            {
                verts[layerSensCount]        = new Vector3(Sensors[sensorLayerDistPermut[indx]].Pos.x, Sensors[sensorLayerDistPermut[indx]].Pos.y, Sensors[sensorLayerDistPermut[indx]].Pos.z);
                sensedValues[layerSensCount] = Sensors[sensorLayerDistPermut[indx]].Values[dataIndices[sensorLayerDistPermut[indx]]];
            }
            indx++;
            layerSensCount++;
        }
        //Debug.Log(string.Format("({0},  {1},  {2})", sensedValues[0], sensedValues[1], sensedValues[2]));
        for (int i = 0; i < InterpolatedValues.GetLength(0); i++)
        {
            for (int j = 0; j < InterpolatedValues.GetLength(1); j++)
            {
                queryPoint = GetGridPosition(i, j, queryLayer);
                bary       = Utilities.BarycentricCoordinates(verts[0], verts[1], verts[2], queryPoint);
                //interpVals[i, j, queryLayer] = bary[0] * sensedValues[0] + bary[1] * MCPosB + bary[2] * MCPosC;
                InterpolatedValues[i, j, queryLayer] = bary[0] * sensedValues[0] + bary[1] * sensedValues[1] + bary[2] * sensedValues[2];
            }
        }
    }