public static Vector3 GetPositionByPositionInfo(PositionInfo positionInfo) { //float latTo = (float)positionInfo.Latitude; //float lngTo = (float)positionInfo.Longitude; //float R = 6371; // km //float dLat = ToRadian(latTo - ORTHO_LATITUDE_CENTER_DEG); //float dLon = ToRadian(lngTo - ORTHO_LONGITUDE_CENTER_DEG); //float a = Mathf.Sin(dLat / 2) * Mathf.Sin(dLat / 2) + // Mathf.Cos(ToRadian(ORTHO_LATITUDE_CENTER_DEG)) * Mathf.Cos(ToRadian(latTo)) * // Mathf.Sin(dLon / 2) * Mathf.Sin(dLon / 2); //float c = 2 * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1 - a)); //float d = R * c; //float bearing = Mathf.Atan2(Mathf.Cos(ORTHO_LATITUDE_CENTER_DEG) * Mathf.Sin(latTo) - Mathf.Sin(ORTHO_LATITUDE_CENTER_DEG) * Mathf.Cos(latTo) * Mathf.Cos(lngTo - ORTHO_LONGITUDE_CENTER_DEG), // Mathf.Sin(lngTo - ORTHO_LONGITUDE_CENTER_DEG) * Mathf.Cos(latTo)); //float x = d * Mathf.Cos(bearing); //float z = d * Mathf.Sin(bearing); if (GameManager.Instance.Origin != null) { float distanceLat = Mathf.Abs(( float )positionInfo.Latitude - GameManager.Instance.Origin.Latitude); float distanceLng = Mathf.Abs(( float )positionInfo.Longitude - GameManager.Instance.Origin.Longitude); if (distanceLat < 1 && distanceLng < 1) { //calculate distance and bearing //Coordinate origin = new Coordinate((float)this.Info.Position.Latitude, (float)this.Info.Position.Longitude); Coordinate position = new Coordinate(( float )positionInfo.Latitude, ( float )positionInfo.Longitude); Coordinate coord = CoordinateHelper.CalculateCoordinateFromBearingAndDistance(GameManager.Instance.Origin, position); Vector3 worldPos = new Vector3(coord.Longitude, ( float )positionInfo.HeightOverSeaLevelM, coord.Latitude); //Debug.Log(worldPos); //transform.position = Vector3.Lerp(transform.position, worldPos, Time.deltaTime); return(worldPos); } else { //set to repository return(GameManager.Instance.UnitRepository); } } return(Vector3.zero); }
void OnBecameInvisible() { if (GameManager.Instance.UnitManager.SelectedUnit != this) { float distanceLat = Mathf.Abs(( float )Info.Position.Latitude - GameManager.Instance.Origin.Latitude); float distanceLng = Mathf.Abs(( float )Info.Position.Longitude - GameManager.Instance.Origin.Longitude); if (distanceLat < 1 && distanceLng < 1) { //calculate distance and bearing //Coordinate origin = new Coordinate((float)this.Info.Position.Latitude, (float)this.Info.Position.Longitude); Coordinate position = new Coordinate(( float )Info.Position.Latitude, ( float )Info.Position.Longitude); Coordinate coord = CoordinateHelper.CalculateCoordinateFromBearingAndDistance(GameManager.Instance.Origin, position); Vector3 worldPos = new Vector3(coord.Longitude, ( float )Info.Position.HeightOverSeaLevelM, coord.Latitude); //Debug.Log(worldPos); worldPos.y = transform.position.y; //transform.position = Vector3.Lerp(transform.position, worldPos, Time.deltaTime); transform.position = worldPos; InRepository = false; //if (rigidbody) //{ // rigidbody.drag = Drag; //} } else { //set to repository if (Info.DomainType == GameConstants.DomainType.Land) { Debug.Log("Im not inside origin"); } InRepository = true; //transform.position = GameManager.Instance.UnitRepository; //MathHelper.SetLayerRecursivly(transform, 9); //p.gameObject.active = false; } } }
private Vector3 GetResetPosition() { PlayerUnit selectedUnit = GameManager.Instance.UnitManager.SelectedGroupMainUnit; Vector3 ret = Vector3.zero; //if (selectedUnit.Info.GroupId == Info.GroupId) //{ if (selectedUnit != null) { if (selectedUnit == this) { //transform.position = new Vector3(0, transform.position.y, 0); ret = new Vector3(0, transform.position.y, 0); } else { float distanceLat = Mathf.Abs(( float )Info.Position.Latitude - ( float )selectedUnit.Info.Position.Latitude); float distanceLng = Mathf.Abs(( float )Info.Position.Longitude - ( float )selectedUnit.Info.Position.Longitude); if (distanceLat < 1 && distanceLng < 1) { //calculate distance and bearing Coordinate origin = new Coordinate(( float )selectedUnit.Info.Position.Latitude, ( float )selectedUnit.Info.Position.Longitude); Coordinate position = new Coordinate(( float )Info.Position.Latitude, ( float )Info.Position.Longitude); Coordinate coord = CoordinateHelper.CalculateCoordinateFromBearingAndDistance(origin, position); Vector3 worldPos = new Vector3(coord.Longitude, ( float )Info.Position.HeightOverSeaLevelM, coord.Latitude); //Debug.Log(worldPos); //transform.position = worldPos; ret = worldPos; ret.y = transform.position.y; } else { //set to repository //if (rigidbody != null) //{ // rigidbody.active = false; //} ret = GameManager.Instance.UnitRepository; //transform.position = } } //Position = transform.position; //transform.eulerAngles = new Vector3(OptionalAngleTest, Mathf.Floor((float)_Info.Position.BearingDeg), 0); } else { //set to repository //if (rigidbody != null) //{ // rigidbody.active = false; //} //transform.position = GameManager.Instance.UnitRepository; ret = GameManager.Instance.UnitRepository; } //} return(ret); }
void Update() { if (_Info != null) { _WorldPos.x = ((float)_Info.Position.LongitudeOrthoProjected * GameManager.Instance.XMapModifier) + GameManager.Instance.XMapAddition; _WorldPos.z = ((float)_Info.Position.LatitudeOrthoProjected * GameManager.Instance.YMapModifier) + GameManager.Instance.YMapAddtion; _WorldPos.y = 30000; GUIScreenPos = _SateliteCamera.WorldToScreenPoint(_WorldPos); _Pos = new Rect(GUIScreenPos.x - Size.x / 2, _SateliteCamera.pixelHeight - GUIScreenPos.y - Size.y / 2, Size.x, Size.x); GUIVisible = false; if (GameManager.Instance.CameraManager.SateliteCamera.rect.height != 1) { _Pos.y += Screen.height / 2; if (_Pos.yMin < Screen.height / 2 && _Pos.xMax < Screen.height / 2) { GUIVisible = true; } } else { if (MathHelper.ViewportRectToScreenRect(GameManager.Instance.CameraManager.SateliteCamera.rect).Contains(new Vector2(_Pos.x, _Pos.y))) { GUIVisible = true; } else { GUIVisible = false; } } GUIPos = _Pos; //Move unit transform.eulerAngles = new Vector3(0, Bearing, 0); if (Info.DomainType == GameConstants.DomainType.Air) { Vector3 worldPos = transform.position; float heightOveSeaLevelM = ( float )Info.Position.HeightOverSeaLevelM; if (heightOveSeaLevelM <= 101) { worldPos.y = ( float )Info.Position.HeightOverSeaLevelM; } else { worldPos.y = ((heightOveSeaLevelM / GameManager.Instance.MaxHeightInM) * 5000) + 100; } float angle = 0; float yDiff = worldPos.y - transform.position.y; angle = worldPos.y > transform.position.y ? 1 : -1; //euler.x = Mathf.Clamp(changeValue, -70, 70); transform.position = Vector3.Lerp(transform.position, worldPos, Time.deltaTime); //transform.eulerAngles = Vector3.Lerp(transform.eulerAngles, euler, Time.deltaTime); ; //float tiltAroundX = angle; //XAngle = angle; //transform.Rotate(new Vector3(angle, 0, 0), Space.Self); } else { } if (!InRepository) { if (Info.DomainType != GameConstants.DomainType.Land) { float delta = Time.deltaTime; float speedInKph = ( float )Info.Position.ActualSpeedKph; float kmPerSec = speedInKph / 3600; float mPerSec = kmPerSec * 1000; float mPerFrame = mPerSec * delta; //if (Info.IsGroupMainUnit && Info.UnitName == "Nimitz") //{ //rigidbody.AddForce(new Vector3(0, 0, mPerFrame), ForceMode.VelocityChange); //rigidbody.velocity = new Vector3(0, 0, mPerFrame); transform.Translate(new Vector3(0, 0, mPerFrame * GameManager.Instance.GlobalScale.z * ( float )GameManager.Instance.GameInfo.RealTimeCompressionFactor), Space.Self); //Debug.Log(string.Format("delta:{0} - speedinKph:{1} - kilometers per Sec: {2} - meters per sec:{3} - meters per frame:{4} - kmTraveled:{5}", delta, speedInKph, kmPerSec, mPerSec, mPerFrame, kmTraveledInFrame)); //} //WantedPos += new Vector3(0, 0, mPerFrame * GameManager.Instance.GlobalScale.z * ( float ) GameManager.Instance.GameInfo.RealTimeCompressionFactor); //Vector3 diff = transform.position - WantedPos; //transform.Translate(diff * Time.deltaTime, Space.World); //if ( Info.UnitName.ToLower() == "nimitz" ) //{ //Debug.Log(string.Format("Difference = {0}", diff)); //} } } else { transform.position = GameManager.Instance.UnitRepository; } if (GameManager.Instance.Origin != null) { //First Extrapolate from previous position float distanceLat = Mathf.Abs(( float )Info.Position.Latitude - ( float )GameManager.Instance.Origin.Latitude); float distanceLng = Mathf.Abs(( float )Info.Position.Longitude - ( float )GameManager.Instance.Origin.Longitude); if (distanceLat < 1 && distanceLng < 1) { //calculate distance and bearing //Coordinate origin = new Coordinate((float)selectedGroupMainUnit.Info.Position.Latitude, (float)selectedGroupMainUnit.Info.Position.Longitude); Coordinate position = new Coordinate(( float )Info.Position.Latitude, ( float )Info.Position.Longitude); Coordinate coord = CoordinateHelper.CalculateCoordinateFromBearingAndDistance(GameManager.Instance.Origin, position); Vector3 worldPos = new Vector3(coord.Longitude, ( float )Info.Position.HeightOverSeaLevelM, coord.Latitude); //Debug.Log(worldPos); //worldPos += selectedGroupMainUnit.transform.position; if (Info.DomainType == GameConstants.DomainType.Air) { worldPos.y = ( float )Info.Position.HeightOverSeaLevelM; } else { worldPos.y = transform.position.y != GameManager.Instance.UnitRepository.y ? transform.position.y : 0; } if (!InRepository) { transform.position = Vector3.Lerp(transform.position, worldPos, Time.deltaTime); } else { transform.position = worldPos; } //} //transform.position = Vector3.Lerp(transform.position, worldPos, Time.deltaTime); InRepository = false; } else { InRepository = true; transform.position = GameManager.Instance.UnitRepository; } } else { InRepository = true; transform.position = GameManager.Instance.UnitRepository; } //gameObject.layer = InRepository ? 9 : 0; } }
private void SetupUnits() { foreach (PlayerUnit p in GameUnits) { if (SelectedUnit != null) { if (p.Info.Id == GameManager.Instance.UnitManager.SelectedUnit.Info.Id) { if (CurrentWatchMode == UnitToWatch.Player) { p.InRepository = false; continue; } } } if (p == null) { continue; } float distanceLat = Mathf.Abs(( float )p.Info.Position.Latitude - GameManager.Instance.Origin.Latitude); float distanceLng = Mathf.Abs(( float )p.Info.Position.Longitude - GameManager.Instance.Origin.Longitude); if (distanceLat < 1 && distanceLng < 1) { //calculate distance and bearing //Coordinate origin = new Coordinate((float)this.Info.Position.Latitude, (float)this.Info.Position.Longitude); Coordinate position = new Coordinate(( float )p.Info.Position.Latitude, ( float )p.Info.Position.Longitude); Coordinate coord = CoordinateHelper.CalculateCoordinateFromBearingAndDistance(GameManager.Instance.Origin, position); Vector3 worldPos = new Vector3(coord.Longitude, ( float )p.Info.Position.HeightOverSeaLevelM, coord.Latitude); //Debug.Log(worldPos); //worldPos.y = transform.position.y; //transform.position = Vector3.Lerp(transform.position, worldPos, Time.deltaTime); p.transform.position = worldPos; p.InRepository = false; //if ( rigidbody ) //{ // rigidbody.drag = Drag; //} } else { if (p.Info.DomainType == GameConstants.DomainType.Land) { } //set to repository p.InRepository = true; p.transform.position = GameManager.Instance.UnitRepository; //MathHelper.SetLayerRecursivly(transform, 9); //p.gameObject.active = false; } } //enemy units foreach (Enemy e in EnemyDetections) { if (SelectedEnemyUnit != null) { if (e.Info.Id == SelectedEnemyUnit.Info.Id) { if (CurrentWatchMode == UnitToWatch.Enemy) { e.InRepository = false; continue; } } } if (e == null) { continue; } float distanceLat = Mathf.Abs(( float )e.Info.Position.Latitude - GameManager.Instance.Origin.Latitude); float distanceLng = Mathf.Abs(( float )e.Info.Position.Longitude - GameManager.Instance.Origin.Longitude); if (distanceLat < 1 && distanceLng < 1) { //calculate distance and bearing //Coordinate origin = new Coordinate((float)this.Info.Position.Latitude, (float)this.Info.Position.Longitude); Coordinate position = new Coordinate(( float )e.Info.Position.Latitude, ( float )e.Info.Position.Longitude); Coordinate coord = CoordinateHelper.CalculateCoordinateFromBearingAndDistance(GameManager.Instance.Origin, position); Vector3 worldPos = new Vector3(coord.Longitude, ( float )e.Info.Position.HeightOverSeaLevelM, coord.Latitude); //Debug.Log(worldPos); //worldPos.y = transform.position.y; //transform.position = Vector3.Lerp(transform.position, worldPos, Time.deltaTime); e.transform.position = worldPos; e.InRepository = false; //if ( rigidbody ) //{ // rigidbody.drag = Drag; //} } else { if (e.Info.DomainType == GameConstants.DomainType.Land) { } //set to repository e.InRepository = true; e.transform.position = GameManager.Instance.UnitRepository; //MathHelper.SetLayerRecursivly(transform, 9); //p.gameObject.active = false; } } }