Jump to content
Korean Random

valanchik

User
  • Content Count

    19
  • Joined

  • Last visited

Community Reputation

4 Noob

Contacts

  • Nick
    valanchik

Recent Profile Visitors

773 profile views
  1. ок. я в пайтоне нифига не шарю. От неизбежности иногда приходится что-то на нём делать. Вот жду не дождусь когда уже это кончится и переходить к серверной части :)
  2. Хитёр... :) Короче я типа разобрался. Для того чтобы можно было использовать BigWorld.wg_collideSegment в pjorion - надо чуток изменить подход. Исходный пример, который приводит к крашу игры: def isVehicleVisibleFromCamera(vehicle, aimCamera): for vehiclePoint in getVisibilityCheckPointsGen(vehicle): startPos = aimCamera.camera.position endPos = vehiclePoint testResStatic = BigWorld.wg_collideSegment(BigWorld.player().spaceID, startPos, endPos, 128) if testResStatic is None: testResDynamic = BigWorld.wg_collideDynamic(BigWorld.player().spaceID, startPos, endPos, BigWorld.player().playerVehicleID) return testResDynamic is None and True continue return False А вот так(через опу) можно получить данные без вылета клиента: def callbackCollisionSegment(startPos, endPos): testResStatic = BigWorld.wg_collideSegment(BigWorld.player().spaceID, startPos, endPos, 128) if testResStatic is None: testResDynamic = BigWorld.wg_collideDynamic(BigWorld.player().spaceID, startPos, endPos, BigWorld.player().playerVehicleID) resultCollisionSegment(testResDynamic is None and True) return resultCollisionSegment(False) def resultCollisionSegment(result): print result def isVehicleVisibleFromCamera(vehicle, aimCamera): for vehiclePoint in getVisibilityCheckPointsGen(vehicle): startPos = aimCamera.camera.position endPos = vehiclePoint cb = BigWorld.callback(0.0, partial(callbackCollisionSegment, startPos, endPos)) continue return False Как видно из cb = BigWorld.callback... возвращается id таймера, который мы можем, если надо, очистить вот так: BigWorld.cancelCallback(cb) я хз есть ли ограничение на кол-во таймеров у ВГ и когда он вылетит если не делать BigWorld.cancelCallback(cb) но и так пока работает :)
  3. Может подскажешь как в BigWorld.wg_collideSegment использовать callback?
  4. Возможно ли использовать в pjorion import http.client ? Или какие есть способы отправки данных из скрипта используя TCP или UDP стек? Желательно из окна по F10. ранова-то создал топик, извините. короче: import socket bla-bla-bla.... думаю, этот топик можно удалить но если вдруг останется, то оставлю это тут: import socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.connect(('localhost', 9090)) sock.send('hello, world!') sock.close() А если вдруг кто подскажет как удалить свой топик, то вообще будет супер :)
  5. Полный код получения 8ми точек для построения периметра танка без учета орудия: from Math import Vector3, Matrix from vehicle_systems.tankStructure import TankPartIndexes def printPoints(vehicle): matrix = Matrix(vehicle.matrix) cMin, cMax, _ = vehicle.getBounds(TankPartIndexes.CHASSIS) _, hMax, _ = vehicle.getBounds(TankPartIndexes.HULL) hMax.y+=cMax.y; _, tMax, _ = vehicle.getBounds(TankPartIndexes.TURRET) tMax.y+=hMax.y; cMax.y = tMax.y BACK_LEFT_BOTTOM = matrix.applyVector(cMin)+vehicle.position BACK_LEFT_TOP = matrix.applyVector(Vector3(cMin.x, cMax.y, cMin.z))+vehicle.position BACK_RIGTH_BOTTOM = matrix.applyVector(Vector3(cMax.x, cMin.y, cMin.z))+vehicle.position BACK_RIGTH_TOP = matrix.applyVector(Vector3(cMax.x, cMax.y, cMin.z))+vehicle.position FRONT_RIGTH_TOP = matrix.applyVector(cMax)+vehicle.position FRONT_RIGTH_BOTTOM = matrix.applyVector(Vector3(cMax.x, cMin.y, cMax.z))+vehicle.position FRONT_LEFT_TOP = matrix.applyVector(Vector3(cMin.x, cMax.y, cMax.z))+vehicle.position FRONT_LEFT_BOTTOM = matrix.applyVector(Vector3(cMin.x, cMin.y, cMax.z))+vehicle.position width = BACK_LEFT_TOP.distTo(BACK_RIGTH_TOP) height = BACK_LEFT_TOP.distTo(BACK_LEFT_BOTTOM) length = BACK_LEFT_TOP.distTo(FRONT_LEFT_TOP) это было больно и жестоко, но я это сделал :) Сочувствую вам, мододелы.... Тема закрыта.
  6. Короче я тут подзатупил чуток :) узнал я свою ширину :) cMin, cMax, _ = vehicle.getBounds(TankPartIndexes.CHASSIS) addModel(vehicle, Math.Vector3(vehicle.position.x+cMin.x, vehicle.position.y, vehicle.position.z)) addModel(vehicle, Math.Vector3(vehicle.position.x+cMax.x, vehicle.position.y, vehicle.position.z)) просто чуток подзабыл как с векторами работать :)
  7. def getVehiclePointsGen(vehicle): vehicleDesr = vehicle.typeDescriptor hullPos = vehicleDesr.chassis.hullPosition hullBboxMin, hullBboxMax, _ = vehicleDesr.hull.hitTester.bbox turretPosOnHull = vehicleDesr.hull.turretPositions[0] turretLocalTopY = max(hullBboxMax.y, turretPosOnHull.y + vehicleDesr.turret.hitTester.bbox[1].y) yield Vector3(0.0, hullPos.y + turretLocalTopY, 0.0) gunPosOnHull = turretPosOnHull + vehicleDesr.turret.gunPosition yield hullPos + gunPosOnHull hullLocalCenterY = (hullBboxMin.y + hullBboxMax.y) / 2.0 hullLocalPt1 = Vector3(0.0, hullLocalCenterY, hullBboxMax.z) yield hullPos + hullLocalPt1 hullLocalPt2 = Vector3(0.0, hullLocalCenterY, hullBboxMin.z) yield hullPos + hullLocalPt2 hullLocalCenterZ = (hullBboxMin.z + hullBboxMax.z) / 2.0 hullLocalPt3 = Vector3(hullBboxMax.x, gunPosOnHull.y, hullLocalCenterZ) yield hullPos + hullLocalPt3 hullLocalPt4 = Vector3(hullBboxMin.x, gunPosOnHull.y, hullLocalCenterZ) yield hullPos + hullLocalPt4 Я даже понимаю, что всё что мне надо по точкам(включая ширину танка), скорее всего можно вывести векторами на примере кода выше. Но это же трындец товарищи. И только потому что я чуть-чуть извращенец в программировании до сих пор пытаюсь добиться своей цели. Пальцем в небо тоже не очень программировать. Просто значение ширины меня бы удовлетворило бы. А тут пока для меня куча неизвестных. Согласен, но надеялся на чудо :) И ещё.... Все точки корпуса(из семи) находятся в одной плоскости. Точки на башне(кроме верхей по центру) тоже не симметричны. В итоге из полезной инфы: точка по центру башни точка по центру дна корпуса центр переда и зада корпуса. И все эти 4ре точки в одной плоскости. Надо знать ширину танка или ещё какой-то способ узнать габариты корпуса. вот даже наглядно сделал :) точки поднял на 1 унит вверх, чтобы видно было и ещё наглядней
  8. import DebugManager DebugManager.showRectangle2D(groupID, name, start, end, isPixels=False, color=COLORS.DEFAULT) есть такой способ, но в моём случае, что-то нифига не выводит на экран. Пробовал и регистрировать группу и так и сяк, но что-то нифига не реагирует. Может где-то надо переменную окружения какую-нить изменить, что у меня типа дебаг режим? Пробую из ориона по F10 и ещё по теме: v.typeDescriptor.hull.hitTester.bbox - недостаточно. есть такой способ получения точек танка(включая точки bbox) for vehiclePoint in getVisibilityCheckPointsGen(vehicle) .... на выходе 7мь точек. Но мне, чтобы построить вокруг танка парралелепипед - надо ещё знать ширину танка. Кто знает как узнать ширину танка?
  9. Спасибо за помощь. По координатам решил так: from AvatarInputHandler import cameras if cameras.isPointOnScreen(vehicle.position): ..... вопрос закрыт
  10. Пытаюсь использовать эту функцию def isVehicleVisibleFromCamera(vehicle, aimCamera): for vehiclePoint in getVisibilityCheckPointsGen(vehicle): startPos = aimCamera.camera.position endPos = vehiclePoint testResStatic = BigWorld.wg_collideSegment(BigWorld.player().spaceID, startPos, endPos, 128) if testResStatic is None: testResDynamic = BigWorld.wg_collideDynamic(BigWorld.player().spaceID, startPos, endPos, BigWorld.player().playerVehicleID) return testResDynamic is None and True continue return False но на строчке testResStatic = BigWorld.wg_collideSegment(BigWorld.player().spaceID, startPos, endPos, 128) падает клиент. В чём причина? Мне на самом деле не надо знать о простреле танка и т.д. Мне надо знать, что танк находится в пределах экрана. Может кто знает какую-нить другую функцию для того чтобы это определить?
  11. Это прекрасно, что ты разобрался! А поделиться с другими? вот что мне ответил странник по этому вопросу
  12. спасибо большое! хоть что-то... Если интересно, то я хочу сделать автоматическую разметку данных для компьютерного зрения. Ручками с видео уже запарился. :) v.typeDescriptor.hull.hitTester.bbox - выдаёт это: ((-0.953349, -0.520142, -3.27106), (0.953349, 0.482166, 2.86672), 3.446629762649536) я так понял что первый массив - это x1,y1,z1, второй x2,y2,z2 а третий элемент что за число?
  13. возможно что-то другое помогло тогда. Я только вчера pjorion поставил, так что могло быть всё что угодно. StranikS_Scan, я так понял Вы здесь самый авторитетный и компетентный обитатель. Не мог ли бы помочь разобраться с этим вопросом: Очень надо и задача интересная. Если что, то я уже wot исходники качнул и вчера целый день и ковырял, но постоянно такое ощущение что копаю не в ту сторону.
  14. неужели сложный или невыполнимый вопорс? Может чёт уточнить?
×
×
  • Create New...