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; }
public void ConnectToPoint(ConnectPoint point) { connectedPoint = point; hoverPoint = null; connectedPoint.ConnectCore(this); }
private void HandleConnectPointConnected(ConnectPoint connectPt, Connectable connectable) { connectable.transform.SetParent(transform, true); connectable.GetComponent <Damagable>().OnPartDestroyed.AddListener(HandleConnectedPartDestroyed); Ship.RegisterConnectable(connectable); ConnectedPart = connectable; }
public void OnAttachedToHand() { if (connectedPoint != null) { Debug.Log($"Attaching {name} to hand, disconnecting from {connectedPoint.name}"); connectedPoint.DisconnectCore(); connectedPoint = null; } }
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; } }
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); } }
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"; } }
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"; } }
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); }
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; } }
public void SetChildConnector(ConnectPoint connector) { childConnector = connector; }
public void SetPointHovering(ConnectPoint point) { hoverPoint = point; }