/
skins_dynamic.py
95 lines (81 loc) · 3.72 KB
/
skins_dynamic.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import Math
import ResMgr
import math_utils
import os
import traceback
from Avatar import PlayerAvatar
from OpenModsCore import overrideMethod
from common_tank_appearance import CommonTankAppearance
from gui.hangar_vehicle_appearance import HangarVehicleAppearance
from vehicle_systems import model_assembler
from vehicle_systems.tankStructure import TankNodeNames, TankPartNames
from .. import g_config
def apply(vDesc, modelsSet, skinName):
vDesc.chassis.modelsSets['Skinner_dynamicData'] = data = []
for partName in TankPartNames.ALL:
try:
nodeName = partName
modelPath = 'vehicles/skins/models/' + skinName + '/' + '_dynamic'.join(
os.path.splitext(getattr(vDesc, partName).modelsSets[modelsSet].undamaged))
if not ResMgr.isFile(modelPath):
print g_config.LOG, 'skin model not found:', modelPath
continue
if partName == TankPartNames.HULL:
nodeName = 'V'
if partName == TankPartNames.GUN:
nodeName = TankNodeNames.GUN_INCLINATION
data.append((partName, nodeName, modelPath, partName == TankPartNames.CHASSIS))
except StandardError:
print vDesc.name
traceback.print_exc()
@overrideMethod(model_assembler, 'prepareCompoundAssembler')
def prepareCompoundAssembler(
base, vehicleDesc, modelsSetParams, spaceID, isTurretDetached=False, lodIdx=model_assembler._DEFAULT_LOD_INDEX,
skipMaterials=False, renderMode=None, *args, **kwargs):
result = base(
vehicleDesc, modelsSetParams, spaceID, isTurretDetached, lodIdx, skipMaterials, renderMode, *args, **kwargs)
data = vehicleDesc.chassis.modelsSets.get('Skinner_dynamicData', ())
for partName, nodeName, modelPath, needs_scale in data if modelsSetParams.state == 'undamaged' else ():
scaleMatrix = math_utils.createIdentityMatrix()
if needs_scale:
scaleMatrix.setScale(Math.Vector3(1.01))
result.addPart(modelPath, nodeName, g_config.ID + partName, scaleMatrix)
return result
def switchDynamicPartsVisible(model, visible):
if model is None:
return
for part in TankPartNames.ALL:
nodeNames = (part, g_config.ID + part)
nodes = tuple(model.node(node) for node in nodeNames)
if None in nodes:
continue
handles = partHandle, moddedPartHandle = (model.findPartHandleByNode(node) for node in nodes)
if 0xffffffff in handles:
continue
if part != TankPartNames.CHASSIS:
model.setPartVisible(partHandle, not visible)
model.setPartVisible(moddedPartHandle, visible)
@overrideMethod(HangarVehicleAppearance, '__setupModel')
def new_setupModel(base, self, buildIdx, *args, **kwargs):
base(self, buildIdx, *args, **kwargs)
switchDynamicPartsVisible(self.compoundModel, g_config.dynamicSkinEnabled and g_config.collisionMode != 2)
@overrideMethod(CommonTankAppearance, '_setupModels')
def new_setupModels(base, self, *a, **k):
base(self, *a, **k)
switchDynamicPartsVisible(self.compoundModel, False)
@overrideMethod(PlayerAvatar, 'targetFocus')
def new_targetFocus(base, self, entity, *args, **kwargs):
for vehicle in self.vehicles:
try:
switchDynamicPartsVisible(vehicle.model, vehicle.id == entity.id)
except StandardError:
traceback.print_exc()
return base(self, entity, *args, **kwargs)
@overrideMethod(PlayerAvatar, 'targetBlur')
def new_targetBlur(base, self, prevEntity, *args, **kwargs):
base(self, prevEntity, *args, **kwargs)
for vehicle in self.vehicles:
try:
switchDynamicPartsVisible(vehicle.model, False)
except StandardError:
traceback.print_exc()