示例#1
0
 /// <summary>
 /// Special overload for handoffs
 /// </summary>
 /// <param name="warpingObject"></param>
 /// <param name="oldSystemModel"></param>
 public void SetEntryPositionFromSystem(IHasPosition warpingObject)
 {
     //Flip to opposite side to match entry warphole position
     warpingObject.PosX *= -1;
     warpingObject.PosY *= -1;
     warpingObject.SetRandomPointInRadius(.75f, 1.5f);
 }
示例#2
0
        public float GetDistanceSq(IHasPosition pos)
        {
            var dx = (pos.Position.X - Position.X);
            var dy = (pos.Position.Y - Position.Y);
            var dz = (pos.Position.Z - Position.Z);

            return((dx * dx) + (dy * dy) + (dz * dz));
        }
示例#3
0
        /// <summary>
        /// Sets position a point in a disk defined by innerRadius and outerRadius radii and centered on obj's current position.
        /// </summary>
        public static void SetRandomPointInRadius(this IHasPosition obj, float innerRadius, float outerRadius)
        {
            float length = innerRadius + (outerRadius - innerRadius) * (float)Rand.Random.NextDouble();

            float angle = (float)(2 * Math.PI * Rand.Random.NextDouble());

            obj.PosX += length * (float)Math.Cos(angle);
            obj.PosY += length * (float)Math.Sin(angle);
        }
示例#4
0
 /// <summary>
 /// Moves this Unit to the given position and then assumes arrivedState
 /// </summary>
 /// <param name="pos"></param>
 /// <param name="arrivedState">The BrainState to enter once arrived</param>
 /// <remarks>Requires Brain</remarks>
 public void MoveToThenEnter(IHasPosition pos, bool findPath, BrainState arrivedState)
 {
     if (CheckBrain())
     {
         //m_brain.StopCurrentAction();
         m_Movement.MoveTo(pos.Position, findPath);
         m_brain.CurrentAction = new AIMoveThenEnterAction(this, arrivedState);
     }
 }
示例#5
0
        public override void SetEntryPosition(IHasPosition warpingObject, IArea oldArea)
        {
            //TODO: Replace with starport style safe zone
            float xpos = Warpholes[0].PosX;
            float ypos = Warpholes[0].PosY;

            SpatialOperations.GetRandomPointInRadius(ref xpos, ref ypos, .5f, 3);
            warpingObject.PosX = xpos;
            warpingObject.PosY = ypos;
        }
示例#6
0
        /// <summary>
        /// Gets the angle between this object and the given position, in relation to the north-south axis
        /// </summary>
        public float GetAngleTowards(IHasPosition obj)
        {
            var angle = (float)Math.Atan2((obj.Position.Y - m_position.Y), (obj.Position.X - m_position.X));

            if (angle < 0)
            {
                // wrap angle from 0 to 2*PI (instead of -PI to PI) to correspond with orientation
                angle += (2 * MathUtil.PI);
            }
            return(angle);
        }
示例#7
0
        /// <summary>
        /// this method does not in use
        /// </summary>
        /// <param name="original"></param>
        /// <param name="beatmap"></param>
        /// <returns></returns>
        protected override IEnumerable <BaseRpObject> ConvertHitObject(HitObject original, Beatmap beatmap)
        {
            IHasCurve    curveData    = original as IHasCurve;
            IHasEndTime  endTimeData  = original as IHasEndTime;
            IHasPosition positionData = original as IHasPosition;
            IHasCombo    comboData    = original as IHasCombo;

            /*
             * if (curveData != null)
             * {
             *  yield return new RpSlider
             *  {
             *      StartTime = original.StartTime,
             *      Samples = original.Samples,
             *      CurveObject = curveData,
             *      Position = positionData?.Position ?? Vector2.Zero,
             *      NewCombo = comboData?.NewCombo ?? false
             *  };
             * }
             * else if (endTimeData != null)
             * {
             *  yield return new Spinner
             *  {
             *      StartTime = original.StartTime,
             *      Samples = original.Samples,
             *      EndTime = endTimeData.EndTime,
             *
             *      Position = positionData?.Position ?? OsuPlayfield.BASE_SIZE / 2,
             *  };
             * }
             * else
             * {
             *  yield return new HitCircle
             *  {
             *      StartTime = original.StartTime,
             *      Samples = original.Samples,
             *      Position = positionData?.Position ?? Vector2.Zero,
             *      NewCombo = comboData?.NewCombo ?? false
             *  };
             * }
             */

            yield return((BaseRpObject)original);
        }
示例#8
0
        private OsuHitObject convertHitObject(HitObject original)
        {
            IHasCurve    curveData    = original as IHasCurve;
            IHasEndTime  endTimeData  = original as IHasEndTime;
            IHasPosition positionData = original as IHasPosition;
            IHasCombo    comboData    = original as IHasCombo;

            if (curveData != null)
            {
                return(new Slider
                {
                    StartTime = original.StartTime,
                    Sample = original.Sample,

                    CurveObject = curveData,

                    Position = positionData?.Position ?? Vector2.Zero,

                    NewCombo = comboData?.NewCombo ?? false
                });
            }

            if (endTimeData != null)
            {
                return(new Spinner
                {
                    StartTime = original.StartTime,
                    Sample = original.Sample,
                    Position = new Vector2(512, 384) / 2,

                    EndTime = endTimeData.EndTime
                });
            }

            return(new HitCircle
            {
                StartTime = original.StartTime,
                Sample = original.Sample,

                Position = positionData?.Position ?? Vector2.Zero,

                NewCombo = comboData?.NewCombo ?? false
            });
        }
示例#9
0
        public override void SetEntryPosition(IHasPosition warpingObject, IArea oldArea)
        {
            if (oldArea == null)
            {
                warpingObject.PosX = 0;
                warpingObject.PosY = 0;
                warpingObject.SetRandomPointInRadius(Star.Radius + .1f, Star.Radius + 1f);
            }
            else
            {
                switch (oldArea.AreaType)
                {
                case AreaTypes.System:
                {
                    SetEntryPositionFromSystem(warpingObject);
                    break;
                }

                case AreaTypes.Planet:
                case AreaTypes.Port:
                case AreaTypes.StarBase:
                {
                    warpingObject.PosX = oldArea.PosX;
                    warpingObject.PosY = oldArea.PosY;
                    warpingObject.SetRandomPointInRadius(oldArea.AreaSize / 100f + .1f, oldArea.AreaSize / 100f + 1.5f);
                    break;
                }

                case AreaTypes.Colony:
                {
                    var   pa         = oldArea.GetParentArea();
                    float parentPosX = pa.PosX;
                    float parentPosY = pa.PosY;
                    SpatialOperations.GetRandomPointInRadius(ref parentPosX, ref parentPosY, pa.AreaSize / 100f + .1f, pa.AreaSize / 100f + 1.5f);
                    warpingObject.PosX = parentPosX;
                    warpingObject.PosY = parentPosY;
                    break;
                }
                }
            }
        }
示例#10
0
 public static float GetDistance(this IHasPosition s, IHasPosition c)
 {
     return((float)Math.Sqrt((s.PosX * -c.PosX) + (s.PosY - c.PosY)));
 }
 public ParticlePhysics2(IHasPosition<float> position)
 {
     pos = position;
 }
示例#12
0
		/// <summary>
		/// Moves this Unit to the given position and then assumes arrivedState
		/// </summary>
		/// <param name="pos"></param>
		/// <param name="arrivedState">The BrainState to enter once arrived</param>
		/// <remarks>Requires Brain</remarks>
		public void MoveToThenEnter(IHasPosition pos, bool findPath, BrainState arrivedState)
		{
			if (CheckBrain())
			{
				//m_brain.StopCurrentAction();
				m_Movement.MoveTo(pos.Position, findPath);
				m_brain.CurrentAction = new AIMoveThenEnterAction(this, arrivedState);
			}
		}
示例#13
0
 public void SetOrientationTowards(IHasPosition pos)
 {
     m_orientation = GetAngleTowards(pos);
 }
示例#14
0
 public static float GetDist(this IHasPosition pos, IHasPosition pos2)
 {
     return(pos.Position.GetDistance(pos2.Position));
 }
示例#15
0
		/// <summary>
		/// Gets the angle between this object and the given position, in relation to the north-south axis
		/// </summary>
		public float GetAngleTowards(IHasPosition obj)
		{
			var angle = (float)Math.Atan2((obj.Position.Y - m_position.Y), (obj.Position.X - m_position.X));
			if (angle < 0)
			{
				// wrap angle from 0 to 2*PI (instead of -PI to PI) to correspond with orientation
				angle += (2 * MathUtil.PI);
			}
			return angle;
		}
示例#16
0
		public bool IsInRadiusSq(IHasPosition pos, float sqDistance)
		{
			return GetDistanceSq(pos) <= sqDistance;
		}
示例#17
0
 public ArrivingSteering(Kinematic character, IHasPosition target, float maxAcceleration, float slowRadius, float satisfactionRadius)
     : base(character, target, maxAcceleration)
 {
     mSatisfactionRadius = satisfactionRadius;
     mSlowRadius = slowRadius;
 }
示例#18
0
 public virtual void SetEntryPosition(IHasPosition warpingObject, IArea oldArea)
 {
 }
示例#19
0
 bool CheckDistance(IHasPosition obj1, IHasPosition obj2, float tolerance)
 {
     return(Math.Sqrt(Math.Pow(obj1.PosX - obj2.PosX, 2) + Math.Pow(obj1.PosY - obj2.PosY, 2)) <= tolerance);
 }
示例#20
0
 // Pseudo "range check"
 private static bool IsInRange(IHasPosition a, IHasPosition b) => a.Position.Zone == b.Position.Zone;
示例#21
0
        private void addCurveData(TextWriter writer, IHasCurve curveData, IHasPosition positionData)
        {
            PathType?lastType = null;

            for (int i = 0; i < curveData.Path.ControlPoints.Count; i++)
            {
                PathControlPoint point = curveData.Path.ControlPoints[i];

                if (point.Type.Value != null)
                {
                    if (point.Type.Value != lastType)
                    {
                        switch (point.Type.Value)
                        {
                        case PathType.Bezier:
                            writer.Write("B|");
                            break;

                        case PathType.Catmull:
                            writer.Write("C|");
                            break;

                        case PathType.PerfectCurve:
                            writer.Write("P|");
                            break;

                        case PathType.Linear:
                            writer.Write("L|");
                            break;
                        }

                        lastType = point.Type.Value;
                    }
                    else
                    {
                        // New segment with the same type - duplicate the control point
                        writer.Write(FormattableString.Invariant($"{positionData.X + point.Position.Value.X}:{positionData.Y + point.Position.Value.Y}|"));
                    }
                }

                if (i != 0)
                {
                    writer.Write(FormattableString.Invariant($"{positionData.X + point.Position.Value.X}:{positionData.Y + point.Position.Value.Y}"));
                    writer.Write(i != curveData.Path.ControlPoints.Count - 1 ? "|" : ",");
                }
            }

            writer.Write(FormattableString.Invariant($"{curveData.RepeatCount + 1},"));
            writer.Write(FormattableString.Invariant($"{curveData.Path.Distance},"));

            for (int i = 0; i < curveData.NodeSamples.Count; i++)
            {
                writer.Write(FormattableString.Invariant($"{(int)toLegacyHitSoundType(curveData.NodeSamples[i])}"));
                writer.Write(i != curveData.NodeSamples.Count - 1 ? "|" : ",");
            }

            for (int i = 0; i < curveData.NodeSamples.Count; i++)
            {
                writer.Write(getSampleBank(curveData.NodeSamples[i], true));
                writer.Write(i != curveData.NodeSamples.Count - 1 ? "|" : ",");
            }
        }
示例#22
0
 public RefugeeSteering(Kinematic character, IHasPosition target, float maxAcceleration)
     : base(character, target, maxAcceleration)
 {
 }
示例#23
0
		public void SetOrientationTowards(IHasPosition pos)
		{
			m_orientation = GetAngleTowards(pos);
		}
示例#24
0
 /// <summary>
 /// Moves this Unit to the given position and then assumes arrivedState
 /// </summary>
 /// <param name="pos"></param>
 /// <param name="arrivedState">The BrainState to enter once arrived</param>
 /// <remarks>Requires Brain</remarks>
 public void MoveToThenEnter(IHasPosition pos, BrainState arrivedState)
 {
     MoveToThenEnter(pos, true, arrivedState);
 }
示例#25
0
		public float GetDistanceSq(IHasPosition pos)
		{
			var dx = (pos.Position.X - Position.X);
			var dy = (pos.Position.Y - Position.Y);
			var dz = (pos.Position.Z - Position.Z);

			return (dx * dx) + (dy * dy) + (dz * dz);
		}
示例#26
0
 public static bool IsNear(this IHasPosition first, IHasPosition second)
 {
     return(Vector3.Distance(first.Position, second.Position) < 2.0f);
 }
示例#27
0
 protected SteeringBase(Kinematic character, IHasPosition target, float maxAcceleration)
 {
     Character = character;
     Target = target;
     MaxAcceleration = maxAcceleration;
 }
示例#28
0
		/// <summary>
		/// Moves this Unit to the given position and then assumes arrivedState
		/// </summary>
		/// <param name="pos"></param>
		/// <param name="arrivedState">The BrainState to enter once arrived</param>
		/// <remarks>Requires Brain</remarks>
		public void MoveToThenEnter(IHasPosition pos, BrainState arrivedState)
		{
			MoveToThenEnter(pos, true, arrivedState);
		}
示例#29
0
 public static float GetDistSq(this IHasPosition pos, Vector3 pos2)
 {
     return(pos.Position.DistanceSquared(pos2));
 }
示例#30
0
 public bool IsInRadiusSq(IHasPosition pos, float sqDistance)
 {
     return(GetDistanceSq(pos) <= sqDistance);
 }
示例#31
0
 /// <summary>
 /// Moves this Unit to the given position and then goes Idle
 /// </summary>
 /// <param name="pos"></param>
 /// <remarks>Requires Brain</remarks>
 public void MoveToThenIdle(IHasPosition pos)
 {
     MoveToThenEnter(pos, BrainState.Idle);
 }
示例#32
0
 public static float DistanceTo(this IHasPosition s1, IHasPosition s2)
 {
     return((float)Math.Sqrt(Math.Pow(s1.PosX - s2.PosX, 2) + Math.Pow(s1.PosY - s2.PosY, 2)));
 }
示例#33
0
		/// <summary>
		/// Moves this Unit to the given position and then goes Idle
		/// </summary>
		/// <param name="pos"></param>
		/// <remarks>Requires Brain</remarks>
		public void MoveToThenIdle(IHasPosition pos)
		{
			MoveToThenEnter(pos, BrainState.Idle);
		}
 public ParticlePhysics2(IHasPosition<float> position) {
     pos = position;
 }