public void update(IScene scene,double dtArg)
        {
            DateTime now = DateTime.UtcNow;
            TimeSpan difference = now.Subtract(lastUpdate);
            double dt = difference.Milliseconds/1000.0;
            lastUpdate = now;

            IGameObject p;

            switch (topstate) {
            case TopState.NoTarget:
                p = scene.getObjectByTag (Protagonist.tag);
                if (null != p) {
                    PointD target = ((Protagonist)p).getAchillesHeel ();
                    model.hasTarget = true;
                    model.target = target;
                    topstate = TopState.HasTarget;
                    substate = Substate.Init;
                    handleHasTarget (dt);
                    break;
                }
                handleNoTarget (dt);
                break;
            case TopState.HasTarget:
                handleHasTarget (dt);
                break;
            default:
                break;
            }
        }