@Override
    public void execute(VGDLSprite sprite1, VGDLSprite sprite2, Game game)
    {
        //Keep in the list, for the current cycle, the sprites that have triggered this event.
        int currentGameTime = game.getGameTick();
        if(currentGameTime > lastGameTime)
        {
            spritesThisCycle.clear();
            lastGameTime = currentGameTime;
        }

        //the event gets triggered only once per time-step on each sprite.
        if(spritesThisCycle.contains(sprite1))
            return;

        spritesThisCycle.add(sprite1);

        //And go on.
        Rectangle r = sprite1.lastrect;
        Vector2d v = sprite2.lastDirection();
        v.normalise();

        int gridsize = 1;
        if(sprite1.physicstype_id == Types.PHYSICS_GRID)
        {
            GridPhysics gp = (GridPhysics)(sprite1.physics);
            gridsize = gp.gridsize.width;
        }else if(sprite1.physicstype_id == Types.PHYSICS_CONT)
        {
            GridPhysics gp = (ContinuousPhysics)(sprite1.physics);
            gridsize = gp.gridsize.width;
        }

        sprite1._updatePos(new Direction(v.x, v.y), (int) (sprite2.speed*gridsize));
        if(sprite1.physicstype_id == Types.PHYSICS_CONT)
        {
            sprite1.speed = sprite2.speed;
            sprite1.orientation = sprite2.orientation;
        }

        sprite1.lastrect = new Rectangle(r);

        if(pixelPerfect)
        {
            sprite1.setRect(sprite2.rect);
        }
    }