Беспроводной зарядник имеет точку в которую он передает энергию, представленную в виде тройки dx,dy,dz, относительных смещений от центра зарядника. Эта точка может находиться вокруг зарядника в пределах сферы радиуса R(настраивается в конфиге). Ее можно задать и получить программно. Также беспроводной зарядник имеет радиус r разброса энергии вокруг ChargingPoint. Этот радиус также задается программно.
Передачу энергии можно включать/отключать
wireless_charger.setChargingPoint(dx,dy,dz)
dx,dy,dz = wireless_charger.getChargingPoint()
R = wireless_charger.getChargingRadius()
wireless_charger.setDisperseRadius(r)
r = wireless_charger.getDisperseRadius()
wireless_charger.setActive(true)
a = wireless_charger.isActive()
Зарядник работает следующим образом: если он активен, то потребляет каждый тик N энергии(настраивается в конфиге), после чего ищет в сферической области радиуса r в точке dx,dy,dz любые устройства, способные принимать энергию. Для каждого устройства определяется объем пересечения его хитбокса с сферой зарядки. Этот объем делится на объем сферы, получая коэфициент попадания. В результате каждое устройство получает энергию в размере N*min(1, hitV/chargeV). Стоит отметить, что сумма энергии, переданной всем устройствам не должна превышать N(чтобы не было дюпа).
С этой механикой можно как-нить поиграться, типо, юзать не сферические радиусы, а кубические области