예제 #1
0
 public void Add(SentakkiLanedHitObject hitObject)
 {
     hitObject.LaneBindable.ValueChanged  += onLaneChanged;
     hitObject.BreakBindable.ValueChanged += onBreakChanged;
     HitObjects.AddInPlace(hitObject, Comparer <SentakkiLanedHitObject> .Create((lhs, rhs) => lhs.Lane.CompareTo(rhs.Lane)));
     UpdateLine();
 }
예제 #2
0
 public void Remove(SentakkiLanedHitObject hitObject)
 {
     hitObject.LaneBindable.ValueChanged  -= onLaneChanged;
     hitObject.BreakBindable.ValueChanged -= onBreakChanged;
     HitObjects.Remove(hitObject);
     UpdateLine();
 }
예제 #3
0
 public DrawableSentakkiLanedHitObject(SentakkiLanedHitObject hitObject)
     : base(hitObject)
 {
     AddRangeInternal(new Drawable[] {
         scorePaddingObjects = new Container <DrawableScorePaddingObject>()
     });
 }
예제 #4
0
        public void AddHitObject(SentakkiLanedHitObject hitObject)
        {
            var startTimeBindable = hitObject.StartTimeBindable.GetBoundCopy();

            startTimeBindable.ValueChanged += v => onStartTimeChanged(v, hitObject);
            startTimeMap[hitObject]         = startTimeBindable;

            addHitObjectToEntry(hitObject.StartTime, hitObject);
        }
예제 #5
0
        private int getDelta(SentakkiLanedHitObject a, SentakkiLanedHitObject b)
        {
            var delta = b.Lane - a.Lane;

            if (delta > 4)
            {
                delta -= 8;
            }
            return(delta);
        }
예제 #6
0
        private void addHitObjectToEntry(double entryTime, SentakkiLanedHitObject hitObject)
        {
            // Create new line entry for this entryTime if none exists
            if (!lineEntries.ContainsKey(entryTime))
            {
                var newEntry = new LineLifetimeEntry(animationDuration, drawableRuleset, entryTime);
                lineEntries[entryTime] = newEntry;
                lifetimeManager.AddEntry(newEntry);

                // We want to listen in on line changes in case we need to swap out colours/drawables
                newEntry.OnLineUpdated += onEntryUpdated;
            }
            lineEntries[entryTime].Add(hitObject);
        }
예제 #7
0
        private void removeHitObjectFromEntry(double entryTime, SentakkiLanedHitObject hitObject)
        {
            // Safety check to ensure the a line entry actually exists
            if (lineEntries.TryGetValue(entryTime, out var line))
            {
                line.Remove(hitObject);

                // Remove this entry completely if there aren't any hitObjects using it
                if (!line.HitObjects.Any())
                {
                    lifetimeManager.RemoveEntry(lineEntries[entryTime]);
                    lineEntries.Remove(entryTime);
                }
            }
        }
예제 #8
0
 public void Apply(SentakkiLanedHitObject lanedHitObject)
 {
     Position = SentakkiExtensions.GetPositionAlongLane(SentakkiPlayfield.INTERSECTDISTANCE, lanedHitObject.Lane);
     Colour   = lanedHitObject.NoteColour;
 }
예제 #9
0
 private void onStartTimeChanged(ValueChangedEvent <double> valueChangedEvent, SentakkiLanedHitObject hitObject)
 {
     removeHitObjectFromEntry(valueChangedEvent.OldValue, hitObject);
     addHitObjectToEntry(valueChangedEvent.NewValue, hitObject);
 }
예제 #10
0
 public void RemoveHitObject(SentakkiLanedHitObject hitObject)
 {
     startTimeMap.Remove(hitObject);
     removeHitObjectFromEntry(hitObject.StartTime, hitObject);
 }