Пример #1
0
 public override void Draw(iDrawVisitor visitor)
 {
     droppingobjects.Reset();
     while (droppingobjects.GetNext().Visit <bool>(() => false, _ => true))
     {
         Spike droppingobject = droppingobjects.GetCurrent().Visit <Spike>(() => throw new Exception("spike error"), item => item);
         droppingobject.Draw(visitor);
     }
 }
Пример #2
0
        public override void Update(float dt, Gui_Manager guimanager)
        {
            if (cooldown > 0)
            {
                cooldown = cooldown - (1 * dt);
            }
            else
            {
                cooldown = 0;
            }
            // adds new spike
            if (cooldown <= 0)
            {
                Spike spike_to_add = new Spike(position.x, position.y);
                spike_to_add.velocity = -3;
                droppingobjects.Add(spike_to_add);
                cooldown = interval;
            }
            // gives dropping objects their functionality
            droppingobjects.Reset();
            while (droppingobjects.GetNext().Visit <bool>(() => false, _ => true))
            {
                Spike droppingobject = droppingobjects.GetCurrent().Visit <Spike>(() => throw new Exception("spike error"), item => item);
                droppingobject.position.x = this.position.x;

                droppingobject.Update(dt, guimanager);

                Fallable_Object main = guimanager.GetMain_Character();
                if (main != null)
                {
                    if (main.position.x < droppingobject.position.x + droppingobject.size.x && main.position.x + main.size.x > droppingobject.position.x)
                    {
                        if (main.position.y + main.size.y > droppingobject.position.y && main.position.y < droppingobject.position.y + droppingobject.size.y)
                        {
                            guimanager.Main_Dead(); // main dead on touch
                        }
                    }
                }

                if (droppingobject.position.y > 2000) // remove when falling below 2000 pixels
                {
                    // removing from list
                    List <Spike> COPYdroppingobjects = droppingobjects;

                    List <Spike> Newdroppingobjects = new List <Spike>();
                    {
                        COPYdroppingobjects.Reset();
                        while (COPYdroppingobjects.GetNext().Visit <bool>(() => false, _ => true))
                        {
                            Spike dropob = COPYdroppingobjects.GetCurrent().Visit <Spike>(() => throw new Exception("copyfail"), item => item);

                            if (dropob.position.y != droppingobject.position.y)
                            {
                                Newdroppingobjects.Add(dropob);
                            }
                        }
                    }

                    droppingobjects = Newdroppingobjects;
                }
            }
        }