Exemple #1
0
        /// <summary>
        /// get actual position by object
        /// </summary>
        /// <param name="field"></param>
        /// <param name="drawableRpHitObject"></param>
        /// <returns></returns>
        public static Vector2 FindObjectPosition(this IHasGameField field, DrawableBaseRpObject drawableRpHitObject)
        {
            if (drawableRpHitObject is DrawableRpContainerLineGroup group)
            {
                return(group.GameFieldContainer.Position);
            }
            else if (drawableRpHitObject is DrawableRpContainerLine line)
            {
                var grpupContainer = GeDrawableByRpObject <DrawableRpContainerLineGroup>(field, line.HitObject.ParentObject).GameFieldContainer;
                return(grpupContainer.Position + line.Position.Rotate(grpupContainer.Rotation));
            }
            else if (drawableRpHitObject is DrawableRpContainerLineHoldObject lineHold)
            {
                //TODO : implement
                return(new Vector2(0, 0));
            }
            else if (drawableRpHitObject is DrawableRpHitObject hit)
            {
                var grpupContainer = GeDrawableByRpObject <DrawableRpContainerLineGroup>(field, hit.HitObject.ParentObject.ParentObject).GameFieldContainer;
                return(grpupContainer.Position + hit.Position.Rotate(grpupContainer.Rotation));
            }
            else if (drawableRpHitObject is DrawableRpHoldObject hold)
            {
                var grpupContainer = GeDrawableByRpObject <DrawableRpContainerLineGroup>(field, hold.HitObject.ParentObject.ParentObject).GameFieldContainer;
                return(grpupContainer.Position + hold.Position.Rotate(grpupContainer.Rotation));
            }

            return(new Vector2(0, 0));
        }
Exemple #2
0
 /// <summary>
 ///     get object by time
 /// </summary>
 /// <returns></returns>
 public static IEnumerable <T> GetContainerByTime <T>(this IHasGameField field, double time) where T : DrawableBaseRpObject
 {
     foreach (var container in field.ListDrawableObject)
     {
         if (container.HitObject is IHasEndTime hasEndTimeObject)
         {
             if (container.HitObject.StartTime <= time && hasEndTimeObject.EndTime >= time)
             {
                 if (container is T matchTypeDrawableObject)
                 {
                     yield return(matchTypeDrawableObject);
                 }
             }
         }
         else
         {
             if (container.HitObject.StartTime == time)
             {
                 if (container is T matchTypeDrawableObject)
                 {
                     yield return(matchTypeDrawableObject);
                 }
             }
         }
     }
 }
Exemple #3
0
        public static void AddDrawableRpContainerLine(this IHasGameField field, DrawableRpContainerLine drawableRpContainerLine)
        {
            DrawableRpContainerLineGroup drawableRpContainerLineGroup = GeDrawableByRpObject <DrawableRpContainerLineGroup>(field, drawableRpContainerLine.HitObject.ParentObject);

            drawableRpContainerLineGroup.GameFieldContainer.Add(drawableRpContainerLine);
            drawableRpContainerLineGroup.AddObject(drawableRpContainerLine);
            drawableRpContainerLine.ParentObject = drawableRpContainerLineGroup;
            //
            field.ListDrawableObject.Add(drawableRpContainerLine);
        }
Exemple #4
0
        public static void AddDrawableRpContainerLineGroup(this IHasGameField field, DrawableRpContainerLineGroup drawableRpContainerLineGroup)
        {
            Container container = new Container();

            drawableRpContainerLineGroup.GameFieldContainer = container;
            container.Position = drawableRpContainerLineGroup.HitObject.Position;
            container.Rotation = drawableRpContainerLineGroup.HitObject.Rotation;
            container.Add(drawableRpContainerLineGroup);
            //
            field.ListDrawableObject.Add(drawableRpContainerLineGroup);
            field.ListGroupContainer.Add(container);
        }
Exemple #5
0
        /// <summary>
        /// get drawable by it's HitObject
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="field"></param>
        /// <param name="containerGroupObject"></param>
        /// <returns></returns>
        public static T GeDrawableByRpObject <T>(this IHasGameField field, BaseRpObject containerGroupObject) where T : DrawableBaseRpObject
        {
            foreach (var container in field.ListDrawableObject)
            {
                if (container.HitObject == containerGroupObject)
                {
                    if (container is T matchTypeDrawableObject)
                    {
                        return(matchTypeDrawableObject);
                    }
                }
            }

            return(null);
        }
Exemple #6
0
 /// <summary>
 /// add any type of DrawableHitObject
 /// </summary>
 /// <param name="field"></param>
 /// <param name="drawableObject"></param>
 public static void AddDrawableRpObject(this IHasGameField field, DrawableHitObject drawableObject)
 {
     if (drawableObject is DrawableRpContainerLine drawableRpContainerLine)
     {
         AddDrawableRpContainerLine(field, drawableRpContainerLine);
     }
     else if (drawableObject is DrawableRpContainerLineGroup drawableRpContainerLineGroup)
     {
         AddDrawableRpContainerLineGroup(field, drawableRpContainerLineGroup);
     }
     else if (drawableObject is DrawableRpHitObject drawableRpHitObject)
     {
         AddDrawableRpHitObject(field, drawableRpHitObject);
     }
     else
     {
         throw new NotImplementedException();
     }
 }