Esempio n. 1
0
        /// <summary>
        /// Calculates point that the human is looking at.
        /// </summary>
        /// <param name="from">The eyes position</param>
        /// <param name="distance">Looking distance</param>
        /// <returns>The watched point</returns>
        Vector3 GetLookingAtCoordinates(Vector3 from, float distance)
        {
            float   distance2D = (float)Math.Cos(lookAngle) * distance;
            Vector2 ret        = from.XZToVector2().Go(distance2D, azimuth);

            return(ret.ToVector3((float)Math.Sin(lookAngle) * distance + from.Y));
        }
Esempio n. 2
0
    public PointScatterRegion(Vector3 outerOrigin, float outerRadius, Vector3 innerOrigin, float innerRadius)
    {
        outerRect = new Rect(0, 0, 2f * outerRadius, 2f * outerRadius);
        outerRect.center = outerOrigin.XZToVector2();

        innerRect = new Rect(0, 0, 2f * innerRadius, 2f * innerRadius);
        innerRect.center = innerOrigin.XZToVector2();
    }
Esempio n. 3
0
    public PointScatterRegion(Vector3 outerOrigin, float outerRadius, Vector3 innerOrigin, float innerRadius)
    {
        outerRect        = new Rect(0, 0, 2f * outerRadius, 2f * outerRadius);
        outerRect.center = outerOrigin.XZToVector2();

        innerRect        = new Rect(0, 0, 2f * innerRadius, 2f * innerRadius);
        innerRect.center = innerOrigin.XZToVector2();
    }
Esempio n. 4
0
        protected void Load(Model model, PositionInTown position, float verticalPosition, double azimuth, Matrix worldTransform)
        {
            this.model            = model;
            this.verticalPosition = verticalPosition;
            Vector3 size = Vector3.Zero;

            if (model != null)
            {
                size         = model.GetSize(worldTransform);
                verticalSize = size.Y;
            }
            base.Load(position, azimuth, size.XZToVector2());
        }
Esempio n. 5
0
 /// <summary>
 /// Creates a new plate.
 /// </summary>
 /// <param name="homeQuarter">Town quarter where is it located</param>
 /// <param name="upperLeft">Upper left corner</param>
 /// <param name="upperRight">Upper right corner</param>
 /// <param name="lowerLeft">Lower left corner</param>
 /// <param name="lowerRight">Lower right corner</param>
 /// <param name="front">Front side texture</param>
 /// <param name="back">Back side texture</param>
 /// <param name="enableDefaultLightning">Determines if the default lightning is used</param>
 public Plate(TownQuarter homeQuarter, Vector3 upperLeft, Vector3 upperRight, Vector3 lowerLeft, Vector3 lowerRight, Texture2D front, Texture2D back, bool enableDefaultLightning)
     : base(upperLeft.XZToVector2(), upperRight.XZToVector2(), lowerLeft.XZToVector2(), lowerRight.XZToVector2())
 {
     quarter = homeQuarter;
     ul = upperLeft;
     ur = upperRight;
     ll = lowerLeft;
     lr = lowerRight;
     this.back = back;
     this.front = front;
     graphicsDevice = front.GraphicsDevice;
     frontVertices = new VertexPositionNormalTexture[4];
     backVertices = new VertexPositionNormalTexture[4];
     indexes = new short[6];
     BuildEffects(enableDefaultLightning);
 }
Esempio n. 6
0
 /// <summary>
 /// Creates a new plate.
 /// </summary>
 /// <param name="homeQuarter">Town quarter where is it located</param>
 /// <param name="upperLeft">Upper left corner</param>
 /// <param name="upperRight">Upper right corner</param>
 /// <param name="lowerLeft">Lower left corner</param>
 /// <param name="lowerRight">Lower right corner</param>
 /// <param name="front">Front side texture</param>
 /// <param name="back">Back side texture</param>
 /// <param name="enableDefaultLightning">Determines if the default lightning is used</param>
 public Plate(TownQuarter homeQuarter, Vector3 upperLeft, Vector3 upperRight, Vector3 lowerLeft, Vector3 lowerRight, Texture2D front, Texture2D back, bool enableDefaultLightning)
     : base(upperLeft.XZToVector2(), upperRight.XZToVector2(), lowerLeft.XZToVector2(), lowerRight.XZToVector2())
 {
     quarter        = homeQuarter;
     ul             = upperLeft;
     ur             = upperRight;
     ll             = lowerLeft;
     lr             = lowerRight;
     this.back      = back;
     this.front     = front;
     graphicsDevice = front.GraphicsDevice;
     frontVertices  = new VertexPositionNormalTexture[4];
     backVertices   = new VertexPositionNormalTexture[4];
     indexes        = new short[6];
     BuildEffects(enableDefaultLightning);
 }
Esempio n. 7
0
        /// <summary>
        /// Builds the flag inside the quarter.
        /// </summary>
        private void BuildFlag()
        {
            Microsoft.Xna.Framework.Point square = GetRandomSquare(m => m == MapFillType.Road);
            flagPoint = square;
            Model          flagModel = owner.Content.FlagModel;
            Vector3        flagSize  = flagModel.GetSize(game.Drawer.WorldTransformMatrix);
            PositionInTown pos       = new PositionInTown(this, ((square.ToVector2() + new Vector2(0.5f, 0.5f)) * SquareWidth) - (flagSize.XZToVector2() * 0.5f));

            flag = new Flag(game, flagModel, pos, 0, game.Drawer.WorldTransformMatrix);
            solidObjects.AddLast(flag);
        }
Esempio n. 8
0
 /// <summary>
 /// Creates a new spatial object.
 /// </summary>
 /// <param name="model">Model</param>
 /// <param name="quarter">Town quarter</param>
 /// <param name="positionInQuarter">Position inside the town quarter</param>
 /// <param name="azimuth">Azimuth</param>
 /// <param name="worldTransform">World transform matrix</param>
 public SpatialObject(Model model, TownQuarter quarter, Vector3 positionInQuarter, double azimuth, Matrix worldTransform)
     : base(new PositionInTown(quarter, positionInQuarter.XZToVector2()), azimuth, (model == null? Vector2.Zero : model.GetSize(worldTransform).XZToVector2()))
 {
     Load(model, new PositionInTown(quarter, positionInQuarter.XZToVector2()), positionInQuarter.Y, azimuth, worldTransform);
 }
Esempio n. 9
0
 /// <summary>
 /// Creates a new spatial object.
 /// </summary>
 /// <param name="model">Model</param>
 /// <param name="quarter">Town quarter</param>
 /// <param name="positionInQuarter">Position inside the town quarter</param>
 /// <param name="azimuth">Azimuth</param>
 /// <param name="worldTransform">World transform matrix</param>
 public SpatialObject(Model model, TownQuarter quarter, Vector3 positionInQuarter, double azimuth, Matrix worldTransform)
     : base(new PositionInTown(quarter, positionInQuarter.XZToVector2()), azimuth, (model == null? Vector2.Zero : model.GetSize(worldTransform).XZToVector2()))
 {
     Load(model, new PositionInTown(quarter, positionInQuarter.XZToVector2()), positionInQuarter.Y, azimuth, worldTransform);
 }
Esempio n. 10
0
    public static List<Vector3> ScatterPoints(this Rect rect, int count, float height, Rect notRect = new Rect())
    {
        var current = new List<Vector3>();
        int maxTimes = 50;
        while (maxTimes >= 0 && current.Count < count) {
            var y = height;
            var x = UnityEngine.Random.Range(rect.xMin, rect.xMax);
            var z = UnityEngine.Random.Range(rect.yMin, rect.yMax);
            var newP = new Vector3(x, y, z);

            if (!notRect.Contains(newP.XZToVector2()) && CanAdd(current, 4f, newP, out newP)) {
                current.Add(newP);
            }

            maxTimes--;
        }
        return current;
    }
Esempio n. 11
0
    static bool CanAdd(IEnumerable<Vector3> currentPoints, float minDistance, Vector3 point, out Vector3 hitPoint)
    {
        hitPoint = Vector3.zero;

        var sqrDist = minDistance * minDistance;
        foreach (var p in currentPoints) {
            if (Vector2.SqrMagnitude(point.XZToVector2() - p.XZToVector2()) < sqrDist) {
                return false;
            }
        }

        var ray = new Ray(point, Vector3.down);
        var hit = new RaycastHit();
        if (Physics.Raycast(ray, out hit, 100f)) {
            if (hit.transform.gameObject.layer == LayerMask.NameToLayer(blockedLayer)) {
                return false;
            } else {
                hitPoint = hit.point;
                return true;
            }
        } else {
            return false;
        }
    }