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); } }
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; } } }