Instantly share code, notes, and snippets.

Embed
What would you like to do?
Copy vertex paint from prop to vehicle sub mesh, use rotors shader on a vehicle sub mesh, adjust shader and tyre parameters.
// reminder: the y axis ingame represents height
// (as opposed to z, usually used in 3d software)
// copy vertex paint from prop to vehicle sub mesh
// vertex color explanation
// RED for blimps(visibility): 0 visible when spinning, 255 visible when stopped
// IDK what red will do on other vehicles
// GREEN(tire parameter vector id multiplied by 8): color 0 uses 0, 8 uses 1, 16 uses 2 etc.
// BLUE(axis): 0 y axis, 255 x or z axis (if shader float _FlipTyreRotationXZ = 1)
// 0 = x (facing to the side, spins like a wheel)
// 255 = y (facing up or down, spins like a heli propeller)
// 255 = z (facing forward or backward, spins like a plane propeller, requires Rotors FlipXZ mod)
//
// for vehicles, vertex colors get generated and overwritten on import
// therefore you need to import the rotors sub mesh as a prop, save, reload
// and then import the vehicle sub mesh,
// and copy the vertex paint from the prop to the vehicle sub mesh using this script:
var subMesh = 1; // vehicle sub mesh id, starting from 1
var asset2 = PrefabCollection<PropInfo>.FindLoaded("filename.Asset Name_Data"); // CHANGE TO PROP NAME
var asset = ToolsModifierControl.toolController.m_editPrefabInfo as VehicleInfo;
Color[] colors = new Color[asset2.m_mesh.vertices.Length];
for (int i = 0; i < asset2.m_mesh.vertices.Length; i++) colors[i] = asset2.m_mesh.colors[i];
asset.m_subMeshes[subMesh].m_subInfo.m_mesh.colors = colors;
//
// vehicle sub mesh rotors shader and tire parameters
var subMesh = 1; // vehicle sub mesh id, starting from 1
var FlipXZ = false; // set to true to allow spinning around z axis
var tires = 2; // amount of "tires"
Vector4[] tireParams = new Vector4[tires];
// tire parameter vectors:
tireParams[0] = new Vector4(8.0f, 3.0f, 0.0f, 0.0f); // pivot x, y, z, radius(doesn't affect anything)
tireParams[1] = new Vector4(-8.0f, 3.0f, 0.0f, 0.0f); // uncomment or add even more if necessary:
//tireParams[2] = new Vector4(2.0f, 4.0f, 1.0f, 0.0f);
//tireParams[3] = new Vector4(2.0f, 4.0f, 1.0f, 0.0f);
var fxz = 0.0f; if(FlipXZ) fxz = 1.0f;
var shader = Shader.Find("Custom/Vehicles/Vehicle/Rotors");
var asset = ToolsModifierControl.toolController.m_editPrefabInfo as VehicleInfo;
if(asset.m_subMeshes[subMesh].m_subInfo.m_material != null)
asset.m_subMeshes[subMesh].m_subInfo.m_material.shader = shader;
if(asset.m_subMeshes[subMesh].m_subInfo.m_lodMaterial != null)
asset.m_subMeshes[subMesh].m_subInfo.m_lodMaterial.shader = shader;
asset.m_subMeshes[subMesh].m_subInfo.m_material.SetFloat("_FlipTyreRotationXZ", fxz);
asset.m_subMeshes[subMesh].m_subInfo.m_generatedInfo.m_tyres = tireParams;
if(FlipXZ) asset.m_subMeshes[subMesh].m_subInfo.m_UIPriority = 120122;
//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment