Exemplo n.º 1
0
            public GateModel(string entityModel, Vector3 closedPosition, GateMovement openingMotion, string[] permissions,
                             float heading     = -1f,
                             float accessRange = 1f, float maxTravelDistance = -1, bool isLocked = true)
            {
                ModelName       = entityModel;
                Hash            = Game.GenerateHash(ModelName);
                ClosedPosition  = closedPosition;
                OpeningMovement = openingMotion;
                Heading         = heading;
                AccessRange     = accessRange;
                Permissions     = permissions;
                IsLocked        = isLocked;
                IsBreached      = false;

                if (maxTravelDistance < 0)
                {
                    var minDimensions = Vector3.Zero;
                    var maxDimensions = Vector3.Zero;

                    API.GetModelDimensions((uint)API.GetHashKey(ModelName), ref minDimensions, ref maxDimensions);
                    GateLength = maxDimensions.X < 2 ? 5.75f : maxDimensions.X;
                }
                else
                {
                    GateLength = maxTravelDistance;
                }
            }
Exemplo n.º 2
0
        /// <summary>
        ///     Return gate offset position when moving
        /// </summary>
        /// <param name="currentGate"></param>
        /// <param name="currentPosition"></param>
        /// <param name="distance">distance from current position</param>
        /// <param name="openingMotion">direction from current position</param>
        private static Vector3 GetGateOffsetPosition(GateModel currentGate, Vector3 currentPosition, float distance,
                                                     GateMovement openingMotion)
        {
            try {
                if (currentGate == null)
                {
                    return(Vector3.One);
                }

                var heading = currentGate.Heading + 180f;

                var cosx = Math.Cos(heading * (Math.PI / 180f));
                var siny = Math.Sin(heading * (Math.PI / 180f));

                var deltax = distance * cosx * (int)openingMotion;
                var deltay = distance * siny * (int)openingMotion;

                var newX = (float)(currentPosition.X + deltax);
                var newY = (float)(currentPosition.Y + deltay);

                return(new Vector3(newX, newY, currentPosition.Z));
            }
            catch (Exception ex) {
                Log.Error(ex);
            }

            return(Vector3.One);
        }