Wind system malfunction

I tried to create a wind system in the foliage, but as I don’t know much about these things, I ended up getting this result:

I obviously didn’t want the vertices to split. what did I do wrong?

My script:

import bge
from collections import OrderedDict
from math import sin, pi
from mathutils import Vector
from random import uniform

class Component(bge.types.KX_PythonComponent):
    args = OrderedDict([
        ("Force", 0.0),
        ("Velocity", 0.0),
    ])

    def start(self, args):
        self.force = args["Force"]
        self.vel = args["Velocity"]
        
        self.verts = []
        mesh = self.object.meshes[0]
        for mi in range(len(mesh.materials)):
            for vi in range(mesh.getVertexArrayLength(mi)):
                self.verts.append([
                    uniform(-pi*2, pi*2), 
                    uniform(-pi*2, pi*2), 
                    uniform(-pi*2, pi*2), 
                    *mesh.getVertex(mi, vi).XYZ
                ])
    
    def vetices(self):
        mesh = self.object.meshes[0]
        for mi in range(len(mesh.materials)):
            for vi in range(mesh.getVertexArrayLength(mi)):
                vec_pos = Vector([self.verts[vi][3], self.verts[vi][4], self.verts[vi][5]])
                
                
                self.verts[vi][0] += self.vel
                self.verts[vi][1] += self.vel
                self.verts[vi][2] += self.vel
                
                if self.verts[vi][0] > pi*2: self.verts[vi][0] = 0.0
                if self.verts[vi][1] > pi*2: self.verts[vi][1] = 0.0
                if self.verts[vi][2] > pi*2: self.verts[vi][2] = 0.0
                
                x_sin = vec_pos[0] + sin(self.verts[vi][0])*self.force
                y_sin = vec_pos[1] + sin(self.verts[vi][1])*self.force
                z_sin = vec_pos[2] + sin(self.verts[vi][2])*self.force
                
                final_pos = Vector([x_sin, y_sin, z_sin])
                vertex = mesh.getVertex(mi, vi)
                vertex.XYZ = final_pos

    def update(self):
        self.vetices()

In “def start ()” I create a function that takes the positions of the vertices and saves them in a list along with a random value between 0.0 and pi * 2.

In the def “vetices ()” I take these positions and add the time sine of the random values ​​in the list.