Beispiel #1
0
        private Listener AddListener(SynchronousList <TouchListener> list, Predicate <Touch> rule, string helpText, Delegate handler, params object[] args)
        {
            var l = new TouchListener(rule, Game.Instance.ControlContext, helpText, handler, args);

            list.Add(l);
            return(l);
        }
Beispiel #2
0
        /// <summary>
        /// Laittaa kappaleen kulman värähtelemään edestakaisin.
        /// </summary>
        /// <param name="direction">Värähtelyn suunta (1 = myötäpäivään, -1 = vastapäivään)</param>
        /// <param name="amplitude">Amplitudi eli ääripäiden välinen etäisyys (radiaaneina).</param>
        /// <param name="frequency">Taajuus, eli kuinka monta jaksoa sekunnissa värähdellään.</param>
        /// <param name="damping">Vaimennuskerroin. 0 = ei vaimene, mitä suurempi niin sitä nopeammin vaimenee.</param>
        public void OscillateAngle(double direction, UnlimitedAngle amplitude, double frequency, double damping = 0)
        {
            if (oscillators == null)
            {
                oscillators = new SynchronousList <Oscillator>();
            }

            oscillators.Add(new AngularOscillator(this, direction, amplitude, frequency, damping));
            IsUpdated = true;
        }
Beispiel #3
0
        /// <summary>
        /// Laittaa kappaleen värähtelemään edestakaisin nykyisen paikkansa ympärillä tietyn akselin suuntaisesti.
        /// </summary>
        /// <param name="axis">Akseli, jonka suunnassa värähdellään. Pituudella ei väliä, vain suunnalla.</param>
        /// <param name="amplitude">Amplitudi eli ääripäiden välinen etäisyys.</param>
        /// <param name="frequency">Taajuus, eli kuinka monta jaksoa sekunnissa värähdellään.</param>
        /// <param name="phase">Vaihe, eli mistä kohtaa jaksoa aloitetaan. Vaihteluväli 0 - 2 * Math.PI (siniaalto)</param>
        /// <param name="damping">Vaimennuskerroin. 0 = ei vaimene, mitä suurempi niin sitä nopeammin vaimenee.</param>
        public void Oscillate(Vector axis, double amplitude, double frequency, double phase = 0, double damping = 0)
        {
            if (oscillators == null)
            {
                oscillators = new SynchronousList <Oscillator>();
            }

            oscillators.Add(new LinearOscillator(this, axis, amplitude, frequency, phase, damping));
            IsUpdated = true;
        }
Beispiel #4
0
 /// <summary>
 /// Poistaa kaikki värähtelyt kappaleelta.
 /// </summary>
 /// <param name="returnToOriginalPosition">Palautetaanko kappale takaisin sen alkuperäiseen sijaintiin.</param>
 /// <param name="stopGradually">Suoritetaanko oskillaatio ensin loppuun, jonka jälkeen vasta pysähdytään alkuperäiseen sijaintiin.</param>
 public void ClearOscillations(bool returnToOriginalPosition = false, bool stopGradually = false)
 {
     if (oscillators != null && oscillators.Count >= 1)
     {
         oscillators.ForEach(o => o.Stop(returnToOriginalPosition, stopGradually));
     }
     if (!stopGradually)
     {
         oscillators = null;
     }
 }
Beispiel #5
0
        /// <summary>
        /// Lisää vapaamuotoisen tapahtumankäsittelijän.
        /// </summary>
        /// <param name="condition">Ehto josta tapahtuma laukeaa.</param>
        /// <param name="handler">Kutsuttava funktio.</param>
        public CustomEventHandler AddCustomHandler(Func <bool> condition, Action handler)
        {
            if (handlers == null)
            {
                handlers = new SynchronousList <CustomEventHandler>();
            }

            var handlerObj = new CustomEventHandler(condition, handler);

            handlers.Add(handlerObj);
            return(handlerObj);
        }
Beispiel #6
0
        internal GamePad(IInputContext input, int index)
        {
            if (input.Gamepads.Count <= index)
            {
                return;
            }
            gamepad = input.Gamepads[index];

            vibrations = new SynchronousList <Vibration>();

            gamepad.ButtonDown      += GamepadButtonDown;
            gamepad.ButtonUp        += GamepadButtonUp;
            gamepad.ThumbstickMoved += GamepadThumbstickMoved;
            gamepad.TriggerMoved    += GamepadTriggerMoved;
        }
Beispiel #7
0
        private void InitLayers()
        {
            Layers              = new SynchronousList <Layer>(-3);
            Layers.ItemAdded   += OnLayerAdded;
            Layers.ItemRemoved += OnLayerRemoved;

            for (int i = 0; i < 7; i++)
            {
                Layers.Add(new Layer());
            }

            // This is the widget layer
            Layers.Add(Layer.CreateStaticLayer());

            Layers.UpdateChanges();
        }
Beispiel #8
0
        /// <summary>
        /// Alustaa lapsioliot
        /// </summary>
        protected virtual void InitChildren()
        {
            if (_childObjects != null)
            {
                return;
            }
            _childObjects              = new SynchronousList <GameObject>();
            _childObjects.ItemAdded   += this.OnChildAdded;
            _childObjects.ItemRemoved += this.OnChildRemoved;
            _childObjects.Changed     += this.NotifyParentAboutChangedSizingAttributes;

            this.AddedToGame += () => _childObjects.ForEach(c => Game.OnAddObject(c));
            this.Removed     += () => _childObjects.ForEach(c => Game.OnRemoveObject(c));

            // Objects list needs updating
            IsUpdated = true;
        }
Beispiel #9
0
        /// <summary>
        /// Muodostaa uudelleen yhdistettyjen fysiikkakappaleiden fysiikkamuodot.
        /// Kutsuttava jos esim. lapsiolion paikkaa tai kokoa muutetaan.
        /// </summary>
        /// <param name="physObj">Kappale jonka ominaisuuksia muutettiin.</param>
        public void RegenerateConnectedFixtures()
        {
            /**
             * "Post-order" puuhakualgoritmi.
             * Jos muokataan obj3, tälle voidaan antaa parametrina obj3, obj2 tai obj1 ilman ongelmia.
             * obj1
             *     obj2
             *          obj3
             *          obj4
             *     obj5
             *     obj6
             */
            PhysicsObject physObj = this.Owner as PhysicsObject;

            SynchronousList <GameObject> childs = physObj.Objects;

            foreach (var child in childs)
            {
                if (child is PhysicsObject)
                {
                    if (!child.IsAddedToGame)
                    {
                        continue;
                    }
                    PhysicsObject physChild = child as PhysicsObject;
                    physChild.Parent.Size *= 1;
                    physChild.Body.RegenerateConnectedFixtures();
                }
            }
            PhysicsBody    physMainParent = (PhysicsBody)((PhysicsObject)physObj.GetMainParent()).Body;
            List <Fixture> fs             = physMainParent.FSBody.FixtureList._list;

            for (int i = 0; i < fs.Count; i++)
            {
                if ((Body)fs[i].Tag == ((PhysicsBody)physObj.Body).FSBody)
                {
                    physMainParent.FSBody.Remove(fs[i]);
                }
            }
            if (physObj.Parent != null)
            {
                PhysicsGame.Instance.Engine.ConnectBodies((PhysicsObject)physObj.Parent, physObj);
            }
        }
Beispiel #10
0
 internal GamePad(PlayerIndex index)
 {
     playerIndex = index;
     vibrations  = new SynchronousList <Vibration>();
 }
Beispiel #11
0
 /// <summary>
 /// Poistaa kaikki värähtelyt kappaleelta.
 /// </summary>
 public void ClearOscillations()
 {
     oscillators = null;
 }
Beispiel #12
0
 public ClearAction(SynchronousList <T> items)
     : base(items)
 {
 }
Beispiel #13
0
 public RemoveItemAction(SynchronousList <T> items, T itemToRemove)
     : base(items)
 {
     this.removeItem = itemToRemove;
 }
Beispiel #14
0
 public AddItemAction(SynchronousList <T> list, T itemToAdd)
     : base(list)
 {
     this.newItem = itemToAdd;
 }
Beispiel #15
0
 public ListAction(SynchronousList <T> list)
 {
     this.list = list;
 }