fixed double-sided switch and only-selectable
doublesided switch in blender 2.9x did not work before, it was always rendered single sided in MG. I added a new switch only-selectable which allows to create unvisible but selectable meshes. This helps with selection of small units which can now have an unvisible hand craftet select object around them for example..
This commit is contained in:
parent
d890e865dc
commit
3fcaa22d10
|
@ -7896,7 +7896,7 @@ vector<Unit *> Renderer::renderUnitsFast(bool renderingShadows, bool colorPickin
|
|||
unitsList.push_back(unit);
|
||||
}
|
||||
|
||||
modelRenderer->render(model,rmSelection);
|
||||
modelRenderer->render(model,renderingShadows?rmShadows:rmSelection);
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
|
|
|
@ -74,6 +74,7 @@ private:
|
|||
bool customColor;
|
||||
bool noSelect;
|
||||
bool glow;
|
||||
bool onlySelect;
|
||||
|
||||
uint32 textureFlags;
|
||||
|
||||
|
@ -136,6 +137,7 @@ public:
|
|||
bool getCustomTexture() const {return customColor;}
|
||||
bool getNoSelect() const {return noSelect;}
|
||||
bool getGlow() const {return glow;}
|
||||
bool getOnlySelect() const {return onlySelect;}
|
||||
string getName() const {return name;}
|
||||
|
||||
uint32 getTextureFlags() const { return textureFlags; }
|
||||
|
|
|
@ -44,7 +44,8 @@ enum MeshPropertyFlag{
|
|||
mpfCustomColor= 1,
|
||||
mpfTwoSided= 2,
|
||||
mpfNoSelect= 4,
|
||||
mpfGlow= 8
|
||||
mpfGlow= 8,
|
||||
mpfOnlySelect= 16
|
||||
};
|
||||
|
||||
enum MeshTexture{
|
||||
|
|
|
@ -21,6 +21,7 @@ namespace Shared{ namespace Graphics{
|
|||
enum RenderMode{
|
||||
rmNormal,
|
||||
rmSelection,
|
||||
rmShadows,
|
||||
|
||||
renderModeCount
|
||||
};
|
||||
|
|
|
@ -163,6 +163,11 @@ void ModelRendererGl::renderMesh(Mesh *mesh,int renderMode) {
|
|||
{// don't render this and do nothing
|
||||
return;
|
||||
}
|
||||
if(renderMode!=rmSelection){
|
||||
if(mesh->getOnlySelect()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
//assertions
|
||||
assertGl();
|
||||
|
||||
|
|
|
@ -226,6 +226,7 @@ Mesh::Mesh() {
|
|||
customColor= false;
|
||||
noSelect= false;
|
||||
glow= false;
|
||||
onlySelect=false;
|
||||
|
||||
textureFlags=0;
|
||||
|
||||
|
@ -448,6 +449,7 @@ void Mesh::loadV2(int meshIndex, const string &dir, FILE *f, TextureManager *tex
|
|||
customColor= false;
|
||||
noSelect= false;
|
||||
glow= false;
|
||||
onlySelect= false;
|
||||
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Load v2, this = %p Found meshHeader.hasTexture = %d, texName [%s] mtDiffuse = %d meshIndex = %d modelFile [%s]\n",this,meshHeader.hasTexture,toLower(reinterpret_cast<char*>(meshHeader.texName)).c_str(),mtDiffuse,meshIndex,modelFile.c_str());
|
||||
|
||||
|
@ -589,6 +591,7 @@ void Mesh::loadV3(int meshIndex, const string &dir, FILE *f,
|
|||
customColor= (meshHeader.properties & mp3CustomColor) != 0;
|
||||
noSelect = false;
|
||||
glow = false;
|
||||
onlySelect=false;
|
||||
|
||||
textureFlags= 0;
|
||||
if((meshHeader.properties & mp3NoTexture) != mp3NoTexture) {
|
||||
|
@ -785,6 +788,7 @@ void Mesh::load(int meshIndex, const string &dir, FILE *f, TextureManager *textu
|
|||
twoSided= (meshHeader.properties & mpfTwoSided) != 0;
|
||||
noSelect= (meshHeader.properties & mpfNoSelect) != 0;
|
||||
glow= (meshHeader.properties & mpfGlow) != 0;
|
||||
onlySelect= (meshHeader.properties & mpfOnlySelect) != 0;
|
||||
|
||||
//material
|
||||
diffuseColor= Vec3f(meshHeader.diffuseColor);
|
||||
|
@ -916,6 +920,9 @@ void Mesh::save(int meshIndex, const string &dir, FILE *f, TextureManager *textu
|
|||
if(glow) {
|
||||
meshHeader.properties |= mpfGlow;
|
||||
}
|
||||
if(onlySelect){
|
||||
meshHeader.properties|= mpfOnlySelect;
|
||||
}
|
||||
|
||||
meshHeader.textures = textureFlags;
|
||||
fwrite(&meshHeader, sizeof(MeshHeader), 1, f);
|
||||
|
@ -1550,6 +1557,7 @@ void Mesh::copyInto(Mesh *dest, bool ignoreInterpolationData,
|
|||
dest->customColor = this->customColor;
|
||||
dest->noSelect = this->noSelect;
|
||||
dest->glow = this->glow;
|
||||
dest->onlySelect = this->onlySelect;
|
||||
|
||||
dest->textureFlags = this->textureFlags;
|
||||
|
||||
|
|
|
@ -255,6 +255,7 @@ class G3DMeshHeaderv4: # Read Meshheader
|
|||
self.istwosided = bool(self.properties & 2)
|
||||
self.noselect = bool(self.properties & 4)
|
||||
self.glow = bool(self.properties & 8)
|
||||
self.onlySelect = bool(self.properties & 16)
|
||||
|
||||
self.hastexture = False
|
||||
self.diffusetexture = None
|
||||
|
@ -432,14 +433,15 @@ def createMesh(filename, header, data, toblender, operator):
|
|||
mesh.polygons.foreach_set(
|
||||
"use_smooth", (True,)*len(mesh.polygons.data.polygons))
|
||||
mesh.g3d_customColor = header.customalpha
|
||||
# mesh.show_double_sided = header.istwosided
|
||||
mesh.show_double_sided = header.istwosided
|
||||
if header.isv4:
|
||||
mesh.g3d_noSelect = header.noselect
|
||||
mesh.g3d_glow = header.glow
|
||||
mesh.g3d_onlySelect = header.onlySelect
|
||||
else:
|
||||
mesh.g3d_noSelect = False
|
||||
mesh.glow = False
|
||||
mesh.g3d_fullyOpaque = False
|
||||
#mesh.g3d_onlySelect = False
|
||||
|
||||
# ===================================================================================================
|
||||
# Material Setup
|
||||
|
@ -895,11 +897,15 @@ def G3DSaver(filepath, context, toglest, operator):
|
|||
properties |= 2
|
||||
except Exception as e:
|
||||
print("No material, backface culling not set: ", e)
|
||||
|
||||
|
||||
if mesh.show_double_sided:
|
||||
properties |= 2
|
||||
if mesh.g3d_noSelect:
|
||||
properties |= 4
|
||||
if mesh.g3d_glow:
|
||||
properties |= 8
|
||||
if mesh.g3d_onlySelect:
|
||||
properties |= 16
|
||||
|
||||
#MeshData
|
||||
vertices = []
|
||||
|
@ -932,7 +938,7 @@ def G3DSaver(filepath, context, toglest, operator):
|
|||
|
||||
context.scene.frame_set(fcurrent)
|
||||
|
||||
if mesh.g3d_fullyOpaque:
|
||||
if mesh.g3d_onlySelect:
|
||||
opacity = 1.0
|
||||
|
||||
# MeshHeader
|
||||
|
@ -987,7 +993,7 @@ class G3DPanel(bpy.types.Panel):
|
|||
"show_double_sided",
|
||||
text="double sided")
|
||||
self.layout.prop(context.object.data, "g3d_noSelect")
|
||||
self.layout.prop(context.object.data, "g3d_fullyOpaque")
|
||||
self.layout.prop(context.object.data, "g3d_onlySelect")
|
||||
self.layout.prop(context.object.data, "g3d_glow")
|
||||
|
||||
|
||||
|
@ -1094,9 +1100,9 @@ def register():
|
|||
description="replace alpha channel of texture with team color")
|
||||
bpy.types.Mesh.g3d_noSelect = bpy.props.BoolProperty(
|
||||
name="non-selectable", description="click on mesh doesn't select unit")
|
||||
bpy.types.Mesh.g3d_fullyOpaque = bpy.props.BoolProperty(
|
||||
name="fully opaque",
|
||||
description="sets opacity to 1.0, ignoring what's set in materials")
|
||||
bpy.types.Mesh.g3d_onlySelect = bpy.props.BoolProperty(
|
||||
name="only-selectable",
|
||||
description="this mesh is not visible, only selectable")
|
||||
bpy.types.Mesh.g3d_glow = bpy.props.BoolProperty(
|
||||
name="glow", description="let objects glow like particles")
|
||||
bpy.types.Mesh.show_double_sided = bpy.props.BoolProperty(
|
||||
|
|
Loading…
Reference in New Issue