aks1983 Posted December 13, 2016 Share Posted December 13, 2016 (edited) Делаю переход свободная камера <-> привязанная камера. Штатно это работает по нажатию CAPS+F3, но мне требуется своя реализация.Код таков: # sometimes we need to do it def checkAndRetry(check, retry): BigWorld.callback(0.2, lambda: check() and retry()) def switchFreeCamera(attemps=5): aih = BigWorld.player().inputHandler # enable switchung before battle start aih._AvatarInputHandler__isStarted = True # 0.9.17 intoduced isObserverFPV if not aih.isObserverFPV and attemps > 0: prev_mode = aih.ctrlModeName if prev_mode == 'video': mode = 'postmortem' if BigWorld.player().isObserver() else 'arcade' aih.ctrl.setForcedGuiControlMode(False) aih.onControlModeChanged(mode, prevModeName=prev_mode) checkAndRetry(lambda: aih.ctrlModeName != mode, lambda: switchFreeCamera(attemps - 1)) else: cam_matrix = Math.Matrix(BigWorld.camera().matrix) aih.onControlModeChanged('video', prevModeName=prev_mode, camMatrix=cam_matrix) # leave inertia for smoother movement if BigWorld.player().vehicle is not None: aih.ctrl._cam._VideoCamera__velocity = Math.Vector3(BigWorld.player().vehicle.filter.velocity) В 0.9.17 появился баг - камера улетает под землю, на ghost-танк наблюдателя. При возврате в arcade/postmortem выбирается совсем не тот танк, от которого я отвязывался.Исследовав метод onControlModeChanged, я ужаснулся его неструктуированности. Практически невозможно понять, как ведёт себя поток исполнения. Нашел конечные точки -это BigWorld.player().cell.bindToVehicle(vehicleID), BigWorld.player().cell.moveTo(pos) и BigWorld.player().cell.switchViewpoint(toPrevious) Кто-нибудь исследовал этот вопрос? Edited December 13, 2016 by aks1983 1 @ Quote Link to comment Short link Share on other sites More sharing options...
aks1983 Posted December 20, 2016 Author Share Posted December 20, 2016 вопрос решился патчем @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.