text: import { initFromConfigClone } from "/scripts/util/config.js"
  
  import NameComponent         from "/scripts/ecs/comp/graph/NameComponent.js"
  import DisappearComponent    from "/scripts/ecs/comp/life/DisappearComponent.js"
  import AccelerationComponent from "/scripts/ecs/comp/move/AccelerationComponent.js"
  import BodyComponent         from "/scripts/ecs/comp/move/BodyComponent.js"
  import ForcesComponent       from "/scripts/ecs/comp/move/ForcesComponent.js"
  import GravityComponent      from "/scripts/ecs/comp/move/GravityComponent.js"
  import OnGroundComponent     from "/scripts/ecs/comp/move/OnGroundComponent.js"
  import MassComponent         from "/scripts/ecs/comp/move/MassComponent.js"
  import PosComponent          from "/scripts/ecs/comp/move/PosComponent.js"
  import SpeedComponent        from "/scripts/ecs/comp/move/SpeedComponent.js"
  import Vec3                  from "/scripts/geom/Vec3.js"
  
  export default function makeDynamicComponents(config = {}) {
      initFromConfigClone(config, config, makeDynamicComponents, 
          "name",       "disappearAnimation", "acceleration",
          "bodyConfig", "force",              "gravity",
          "mass",       "pos",                "speed" 
      )
       
      return [
          new NameComponent(config.name),
          new DisappearComponent(config.disappearAnimation),
          new AccelerationComponent(config.acceleration),
          new BodyComponent(config.bodyConfig),
          new ForcesComponent(config.forces),
          new GravityComponent(config.gravity),
          new OnGroundComponent(config.onGroundConfig),
          new MassComponent(config.mass),
          new PosComponent(config.pos),
          new SpeedComponent(config.speed)
      ]
  }
  
  Object.assign(makeDynamicComponents, {
      defaultName:               NameComponent.className,
      defaultDisappearAnimation: null,
      defaultAcceleration:       Vec3.zero(),
      defaultBodyConfig:         {},
      defaultForces:             new Map(),
      defaultGravity:            null,
      defaultOnGroundConfig:     {},
      defaultMass:               100,
      defaultPos:                Vec3.zero(),
      defaultSpeed:              Vec3.zero()
  })
  