コード例 #1
0
    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);
    }
コード例 #2
0
    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;
            }
        }
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    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;
        }
    }
コード例 #5
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;
            }
        }
    }