Why do I get "ERROR: create_trimesh_collision: Condition ' !static_body ' is true."?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By AutarkOS

I’ve just started using C++ and Godot. I believe in learning as you do and as such run into walls sometimes, like now. I just transcribed my GDScript into GDnativeScript, edited it a lil and it’s stopped working. Any pointers into what I’ve done wrong?

enter image description here

GDScript:

extends MeshInstance
export(Material) var material = null

func _ready():
    var surftool = SurfaceTool.new()
    print(typeof(surftool))
    var mesh = Mesh.new()
    print(typeof(mesh))
    #surftool.clear()

    surftool.begin(Mesh.PRIMITIVE_TRIANGLES)
    surftool.set_material(material)
    surftool.add_vertex(Vector3(-25,-10,25))
    surftool.add_vertex(Vector3(25,-10,-25))
    surftool.add_vertex(Vector3(-25,-10,-25))

    surftool.add_vertex(Vector3(-25,0,-25))
    surftool.add_vertex(Vector3(25,0,-25))
    surftool.add_vertex(Vector3(-25,0,25))

    surftool.generate_normals()
    surftool.index()

    surftool.commit(mesh)
    set_mesh(mesh)

    create_trimesh_collision()
    #get_node("StaticBody").shape.margin = 0.1

GDNativeScript:

#include "TerrainMesh.h"
#include <math.h>    
using namespace godot;

    void TerrainMesh::_register_methods() {
        register_method("_process", &TerrainMesh::_process);
    }

    TerrainMesh::TerrainMesh() {
    }

    TerrainMesh::~TerrainMesh() {
        // add your cleanup here
    }

    void TerrainMesh::_init() {
        // initialize any variables here
        //float heightMap[240][240];
        Ref<godot::SurfaceTool> surftool;
        surftool.instance();
        
        Ref<godot::Mesh> mesh;
        //mesh.instance();
        
        surftool->begin(Mesh::PRIMITIVE_TRIANGLES);
        //surftool.set_material(
        
        for(int x=1; x<=100; x++){
            for(int y=1; y<=100; y++){
                surftool->add_normal(Vector3(0, 1, 0));
                surftool->add_uv(Vector2(0, 0));
                surftool->add_vertex(Vector3(x, 0, y));
                surftool->add_normal(Vector3(0, 1, 0));
                surftool->add_uv(Vector2(0, 0));
                surftool->add_vertex(Vector3(x+1, 0, y));
                surftool->add_normal(Vector3(0, 1, 0));
                surftool->add_uv(Vector2(0, 0));
                surftool->add_vertex(Vector3(x, 0, y+1));
                
                surftool->add_normal(Vector3(0, 1, 0));
                surftool->add_uv(Vector2(0, 0));
                surftool->add_vertex(Vector3(x+1, 0, y));
                surftool->add_normal(Vector3(0, 1, 0));
                surftool->add_uv(Vector2(0, 0));
                surftool->add_vertex(Vector3(x+1, 0, y+1));
                surftool->add_normal(Vector3(0, 1, 0));
                surftool->add_uv(Vector2(0, 0));
                surftool->add_vertex(Vector3(x, 0, y+1));
                
            }
        }
        surftool->index();
        surftool->commit(mesh);
        set_mesh(mesh);
        create_trimesh_collision();
    }

    void TerrainMesh::_process(float delta) {


    }

It seems you didnt instanciate your mesh? No mesh, no trimesh, no body?

Zylann | 2019-07-03 12:58

Gonna be honest, I just fiddled it till the compiler stopped giving errors. this is what happens when i instance it.

enter image description here

AutarkOS | 2019-07-03 13:05

That’s still a compilation error, but I don’t really understand what’s going on here. It’s getting confused here https://github.com/GodotNativeTools/godot-cpp/blob/971adbd95590d29d17df621d5a04094b173c77f3/include/core/Ref.hpp#L190

You might want to ask why specifically Ref<godot::Mesh> cannot instanciate on the Godot-Cpp repo on Github Issues · godotengine/godot-cpp · GitHub
to Karroffel or BastiaanOlij.

Zylann | 2019-07-03 16:53

I’ve been having the same problem, so I just want to second how weird this is, so if anyone has come up with solutions for or thoughts about this I’d love to know.

Here’s my code:

mesh_node.mesh = _generate_mesh()
mesh_node.create_trimesh_collision()

where _generate_mesh() is

_generate_vertices()
_generate_UVs()
_generate_indices()
_generate_normals()
var mesh = ArrayMesh.new()
var data = []
data.resize(ArrayMesh.ARRAY_MAX)
data[ArrayMesh.ARRAY_VERTEX] = vertices
data[ArrayMesh.ARRAY_TEX_UV] = UVs
data[ArrayMesh.ARRAY_INDEX] = indices
data[ArrayMesh.ARRAY_NORMAL] = normals
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLE_STRIP, data)

Additionally, if I call mesh_node.create_convec_collision() I end up with this error spam:

 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.
 core/math/quick_hull.cpp:428 - Condition "!F2" is true. Continuing.
 core/math/quick_hull.cpp:401 - Condition "O == E" is true. Continuing.

flbr | 2020-08-05 21:22