/// <summary> /// Handel on Hit. /// Calls ExecuteHit and informs physics, rules, visuals and /// generates new groups. /// </summary> /// <param name="x">The x coordinate.</param> /// <param name="y">The y coordinate.</param> public void OnGemHit(int x, int y) { if(!pause && !newLinePause){ newLinePause = true; somthingChanged = ExecuteHit(new IntVector2(x,y)); int physicsSteps = physics.PhysicsSteps(); //Force update at the start + Physics Steps * 2 (movement + update) + CallbackStep IVisualStep[] steps = new IVisualStep[2 + physicsSteps * 2]; int counter = 0; steps[counter++] = new LevelRefreshStep(level.GetItems(), source.ShowNewLine()); for(int i = 0; i < physicsSteps; i++){ GemMove[] currentMoves = physics.DoPhysics(i,updateHorizontalArray); steps[counter++] = new MoveStep(currentMoves, 1); steps[counter++] = new LevelRefreshStep(level.GetItems(), source.ShowNewLine()); } steps[counter] = new CallbackStep(OnGemHitEnd); visuals.StepsQueue(steps); } }
/// <summary> /// Add Steps to queue /// </summary> /// <param name="queue">steps to add to this queue</param> public void StepsQueue(IVisualStep[] queue) { steps.AddRange(queue); }