public IEnumerator AssembleWeapon()
 {
     //so it doesn't try and make more weapons if its already trying (stop errors, good fun)
     //can use this class as a means of pre making weapons before they truly get spawned in
     if (assembling)
     {
         yield break;
     }
     else
     {
         assembling = true;
     }
     openConnections = new Queue <ConnectPoint>();
     //get all the parts that we can start with (handles)
     //holder
     parent = new GameObject("Parent");
     //add a handle (the necessary component)
     //this piece should be zeroed
     //yield return AddPiece(WeaponPiece.pieceType.handle, WeaponPiece.pieceType.noType, parent.transform);
     FirstPiece();
     //and now iterate through openConnections until there are no more connections
     while (openConnections.Count > 0)
     {
         //connect is the current connection we are using
         connect = openConnections.Dequeue();
         WeaponPiece.pieceType type;
         ChoosePieceType(out type, true);
         yield return(AddPiece(type, connect.transform));
     }
     FinishWeapon();
     assembling = false;
 }
Beispiel #2
0
    public void ConnectToPoint(ConnectPoint point)
    {
        connectedPoint = point;
        hoverPoint     = null;

        connectedPoint.ConnectCore(this);
    }
Beispiel #3
0
 private void HandleConnectPointConnected(ConnectPoint connectPt, Connectable connectable)
 {
     connectable.transform.SetParent(transform, true);
     connectable.GetComponent <Damagable>().OnPartDestroyed.AddListener(HandleConnectedPartDestroyed);
     Ship.RegisterConnectable(connectable);
     ConnectedPart = connectable;
 }
Beispiel #4
0
 public void OnAttachedToHand()
 {
     if (connectedPoint != null)
     {
         Debug.Log($"Attaching {name} to hand, disconnecting from {connectedPoint.name}");
         connectedPoint.DisconnectCore();
         connectedPoint = null;
     }
 }
Beispiel #5
0
        private async void GetImageBitmapFromUrl(string icon)
        {
            var response = ConnectPoint.HttpGetImage(string.Format(Content.weatherIconUrl, icon));
            var result   = await response;

            if (result.Key == HttpStatusCode.OK)
            {
                var data    = NSData.FromArray(result.Value);
                var uiimage = UIImage.LoadFromData(data);
                weather_icon.Image = uiimage;
            }
        }
Beispiel #6
0
        private async void GetImageBitmapFromUrl(string icon)
        {
            Bitmap bitmap   = null;
            var    response = ConnectPoint.HttpGetImage(string.Format(Content.weatherIconUrl, icon));
            var    result   = await response;

            if (result.Key == HttpStatusCode.OK)
            {
                bitmap = BitmapFactory.DecodeByteArray(result.Value, 0, result.Value.Length);
                _currentWeatherInfoImageView.SetImageBitmap(bitmap);
            }
        }
Beispiel #7
0
        private async void GetWeatherInfo()
        {
            string url      = Content.weatherApiUrl;
            var    response = ConnectPoint.HttpGetData(Content.weatherApiUrl);
            var    result   = await response;

            if (result.Key == HttpStatusCode.OK)
            {
                OpenWeather openWeather = JsonConvert.DeserializeObject <OpenWeather>(result.Value);
                GetImageBitmapFromUrl(openWeather.weather[0].icon);
                current_weather_info.Text = openWeather.weather[0].description;
                current_city.Text         = openWeather.name;
                current_temperature.Text  = (openWeather.main.temp - 273.15) + "°C";
            }
        }
Beispiel #8
0
        private async void GetWeatherInfo()
        {
            KeyValuePair <double, double> locationCoordinate = GetLocationData();
            string url = string.Format(Content.weatherApiUrlCoordinate, locationCoordinate.Key,
                                       locationCoordinate.Value);
            var response = ConnectPoint.HttpGetData(Content.weatherApiUrl);
            var result   = await response;

            if (result.Key == HttpStatusCode.OK)
            {
                OpenWeather openWeather = JsonConvert.DeserializeObject <OpenWeather>(result.Value);
                GetImageBitmapFromUrl(openWeather.weather[0].icon);
                _currentWeatherInfoTextView.Text = openWeather.weather[0].description;
                _currentCityInfoTextView.Text    = openWeather.name;
                _currentTempInfoTextView.Text    = (openWeather.main.temp - 273.15) + "°C";
            }
        }
Beispiel #9
0
    void CreateTriggerPoint(int buttonId)
    {
        // create connect area for button
        ConnectPoint connectArea = Instantiate(connectionPointOrigin) as ConnectPoint;

        connectArray[buttonId] = connectArea;

        // get line for coonect point
        Line[] lines            = this.GetComponent <SceneController>().GetLinesArray();
        Line   connectPointLine = lines[buttonId];

        // place area
        Vector3 placePos = placeForConnector.transform.position;

        float x = placePos.x + startX + offset * buttonId;
        float y = placePos.y; // place under line start
        float z = placePos.z;

        connectArea.transform.position = new Vector3(x, y, z);
        //set area color
        connectArea.GetComponent <MeshRenderer>().material.color = new Color(0.0f, 1.0f, 0.0022f, 0.5f);
    }
Beispiel #10
0
    public void updateLines(int slice)
    {
        if (_linesAtSlice[slice].lines.Count == 0)
        {
            return;
        }

        LineInfo maxLine    = null;
        LineInfo minLine    = null;
        float    thisSliceZ = 0;

        // begin cenas DM

        List <LineInfo> usedLines = new List <LineInfo>();

        LineInfo     firstLine   = _linesAtSlice[slice].lines[0];
        ConnectPoint firstCP     = ConnectPoint.first;
        LineInfo     currentLine = firstLine;
        ConnectPoint currentCP   = ConnectPoint.last;
        LineInfo     lastLine;
        ConnectPoint lastCP;

        while (currentLine != null)
        {
            usedLines.Add(currentLine);

            Vector3 point = currentLine.line.GetPosition(currentCP == ConnectPoint.first? 0 : currentLine.line.positionCount - 1);

            float mindist = float.MaxValue;
            minLine = null;
            ConnectPoint cp = ConnectPoint.first;

            foreach (LineInfo li in _linesAtSlice[slice].lines)
            {
                if (usedLines.Contains(li))
                {
                    continue;
                }

                float dist0 = (li.line.GetPosition(0) - point).magnitude;
                float distn = (li.line.GetPosition(li.line.positionCount - 1) - point).magnitude;
                if (dist0 < mindist)
                {
                    mindist = dist0;
                    minLine = li;
                    cp      = ConnectPoint.first;
                }
                if (distn < mindist)
                {
                    mindist = distn;
                    minLine = li;
                    cp      = ConnectPoint.last;
                }
            }

            lastLine = currentLine;
            lastCP   = currentCP;

            if (minLine == null)
            {
                currentLine = firstLine;
                currentCP   = firstCP;
            }
            else
            {
                currentLine = minLine;
                currentCP   = cp;
            }

            // perform connection

            if (lastCP == ConnectPoint.last)
            {
                lastLine.NextLine      = currentLine;
                lastLine.NextLinePoint = currentCP;
            }
            else
            {
                lastLine.PrevLine      = currentLine;
                lastLine.PrevLinePoint = currentCP;
            }

            if (currentCP == ConnectPoint.last)
            {
                currentLine.NextLine      = lastLine;
                currentLine.NextLinePoint = lastCP;
            }
            else
            {
                currentLine.PrevLine      = lastLine;
                currentLine.PrevLinePoint = lastCP;
            }

            // just to break cycle :P

            currentLine = minLine;
            currentCP   = currentCP == ConnectPoint.first ? ConnectPoint.last : ConnectPoint.first;
        }

        // end cenas DM

        /*foreach (LineInfo lr in _linesAtSlice[slice].lines)
         * {
         *
         *  Vector3 lastPoint = lr.line.GetPosition(lr.line.positionCount - 1);
         *  float mindist = float.MaxValue;
         *  minLine = lr;
         *
         *  ConnectPoint cp = ConnectPoint.first;
         *  foreach (LineInfo lr2 in _linesAtSlice[slice].lines)
         *  {
         *      if (lr2 == lr) continue;
         *
         *      float dist0 = (lr2.line.GetPosition(0) - lastPoint).magnitude;
         *      float distn = (lr2.line.GetPosition(lr2.line.positionCount - 1) - lastPoint).magnitude;
         *      if (dist0 < mindist)
         *      {
         *          mindist = dist0;
         *          minLine = lr2;
         *          cp = ConnectPoint.first;
         *      }
         *      if (distn < mindist)
         *      {
         *          mindist = distn;
         *          minLine = lr2;
         *          cp = ConnectPoint.last;
         *      }
         *  }
         *
         *  lr.NextLine = minLine;
         *  lr.NextLinePoint = cp;
         *
         *  Vector3 firstPoint = lr.line.GetPosition(0);
         *  mindist = float.MaxValue;
         *  minLine = lr;
         *  cp = ConnectPoint.last;
         *  foreach (LineInfo lr2 in _linesAtSlice[slice].lines)
         *  {
         *      if (lr2 == lr) continue;
         *
         *      float dist0 = (lr2.line.GetPosition(0) - firstPoint).magnitude;
         *      float distn = (lr2.line.GetPosition(lr2.line.positionCount - 1) - firstPoint).magnitude;
         *      if (dist0 < mindist)
         *      {
         *          mindist = dist0;
         *          minLine = lr2;
         *          cp = ConnectPoint.first;
         *      }
         *      if (distn < mindist)
         *      {
         *          mindist = distn;
         *          minLine = lr2;
         *          cp = ConnectPoint.last;
         *      }
         *  }
         *  lr.PrevLine = minLine;
         *  lr.PrevLinePoint = cp;
         * }*/

        float maxY = float.MinValue;
        float maxX = float.MinValue;
        float minY = float.MaxValue;

        LineInfo        linea        = _linesAtSlice[slice].lines[0];
        List <LineInfo> checkedLines = new List <LineInfo>();

        int i     = 0;
        int inc   = 1;
        int count = 0;

        //find maxes and mins
        while (checkedLines.Count < _linesAtSlice[slice].lines.Count)
        {
            for (; i < linea.line.positionCount && i >= 0; i += inc)
            {
                if (linea.line.GetPosition(i).x > maxX)
                {
                    maxX       = linea.line.GetPosition(i).x;
                    thisSliceZ = linea.line.GetPosition(i).z;
                }

                if (linea.line.GetPosition(i).y > maxY)
                {
                    maxY = linea.line.GetPosition(i).y;
                }
                if (linea.line.GetPosition(i).y < minY)
                {
                    minY = linea.line.GetPosition(i).y;
                }
            }

            checkedLines.Add(linea);
            count += linea.line.positionCount;
            //go to prev line
            if (i == 0)
            {
                i     = linea.PrevLinePoint == ConnectPoint.first ? 0 : linea.PrevLine.line.positionCount - 1;
                inc   = linea.PrevLinePoint == ConnectPoint.first ? 1 : -1;
                linea = linea.PrevLine;
            }
            //go to next line
            else
            {
                i     = linea.NextLinePoint == ConnectPoint.first ? 0 : linea.NextLine.line.positionCount - 1;
                inc   = linea.NextLinePoint == ConnectPoint.first ? 1 : -1;
                linea = linea.NextLine;
            }

            //if closed circle
            if (checkedLines.Contains(linea))
            {
                break;
            }
        }

        _linesAtSlice[slice].pointCount = count;

        //find maxes and mins
        int maxI = 0;
        int minI = 0;

        minLine = null;
        maxLine = null;
        float minDist = float.MaxValue;
        float maxDist = float.MaxValue;

        linea = _linesAtSlice[slice].lines[0];
        i     = 0;
        inc   = 1;
        Vector3 bbTop = new Vector3(maxX, maxY, thisSliceZ);
        Vector3 bbBot = new Vector3(maxX, minY, thisSliceZ);

        int j = 0;

        while (j < count)
        {
            //point closest to bbTop
            if ((linea.line.GetPosition(i) - bbTop).sqrMagnitude < maxDist)
            {
                maxLine = linea;
                maxI    = i;
                maxDist = (linea.line.GetPosition(i) - bbTop).sqrMagnitude;
            }
            //point closest to bbBottom
            if ((linea.line.GetPosition(i) - bbBot).sqrMagnitude < minDist)
            {
                minLine = linea;
                minI    = i;
                minDist = (linea.line.GetPosition(i) - bbBot).sqrMagnitude;
            }

            _linesAtSlice[slice].nextPoint(ref i, ref linea, ref inc);
            j++;
        }

        _linesAtSlice[slice].lineStartID  = _linesAtSlice[slice].lines.IndexOf(maxLine);
        _linesAtSlice[slice].pointStartID = maxI;

        int forwardSum = 0;

        i     = maxI;
        inc   = +1;
        linea = maxLine;
        j     = 0;
        while (j < count && !(linea == minLine && i == minI))
        {
            forwardSum++;
            _linesAtSlice[slice].nextPoint(ref i, ref linea, ref inc);
            j++;
        }

        int backSum = 0;

        i     = maxI;
        inc   = -1;
        linea = maxLine;
        j     = 0;

        while (j < count && !(linea == minLine && i == minI))
        {
            backSum++;
            _linesAtSlice[slice].nextPoint(ref i, ref linea, ref inc);
        }

        if (forwardSum > backSum)
        {
            _linesAtSlice[slice].directionClockwise = 1;
        }
        else
        {
            _linesAtSlice[slice].directionClockwise = -1;
        }
    }
Beispiel #11
0
 public void SetChildConnector(ConnectPoint connector)
 {
     childConnector = connector;
 }
Beispiel #12
0
 public void SetPointHovering(ConnectPoint point)
 {
     hoverPoint = point;
 }