1
0
Fork 0

objectpart -> materialpart

This commit is contained in:
coaljoe 2020-09-14 23:12:59 +03:00
parent 6777f4e991
commit 276be6d1bb
5 changed files with 39 additions and 36 deletions

View File

@ -25,7 +25,7 @@ fn (gpc &GenericCrusherProcessor) process(ob &Object) {
//if ob.elem.name == "stone" { //if ob.elem.name == "stone" {
//if ob.has_elem("stone") { //if ob.has_elem("stone") {
if ob.parts_info.has_elem_name("stone") { if ob.mat_info.has_elem_name("stone") {
println("> create smaller stones") println("> create smaller stones")
//crush_stone_object(ob) //crush_stone_object(ob)

View File

@ -82,7 +82,8 @@ pub fn bits_main() {
//ob.elem = e4 //ob.elem = e4
//ob.mat_info.add_elem_from_size([2, 2, 2], e4) //ob.mat_info.add_elem_from_size([2, 2, 2], e4)
//ob.parts_info.add_elem_from_size([f32(2.), 2., 2.], e4) //ob.parts_info.add_elem_from_size([f32(2.), 2., 2.], e4)
ob.parts_info.add_elem_from_size(2, 2, 2, e4) //ob.parts_info.add_elem_from_size(2, 2, 2, e4)
ob.mat_info.add_elem_from_size(2, 2, 2, e4)
// Position // Position
//ob.transform.pos_x = 10.0 //ob.transform.pos_x = 10.0

View File

@ -21,45 +21,53 @@ mut:
// XXX or 10% glass 90% concrete? // XXX or 10% glass 90% concrete?
// XXX do we really need such materials? // XXX do we really need such materials?
//struct ObjectPart {
struct MaterialPart {
mut:
name string
elem &Elem
bits_size int
}
// MaterialInfo information about materials in object // MaterialInfo information about materials in object
// PartsInfo // PartsInfo
struct PartsInfo { //struct PartsInfo {
struct MaterialInfo {
mut: mut:
//elems map[string]&Elem //elems map[string]&Elem
//elems map[string]&MaterialElem //elems map[string]&MaterialElem
elems map[string]&ObjectPart elems map[string]&MaterialPart
} }
fn new_parts_info() &PartsInfo { fn new_material_info() &MaterialInfo {
pi := &PartsInfo{} mi := &MaterialInfo{}
return pi return mi
} }
fn (pi &PartsInfo) has_elem(elem &Elem) bool { fn (mi &MaterialInfo) has_elem(elem &Elem) bool {
return !isnil(pi.elems[elem.name]) return !isnil(mi.elems[elem.name])
} }
fn (pi &PartsInfo) has_elem_name(elem_name string) bool { fn (mi &MaterialInfo) has_elem_name(elem_name string) bool {
return !isnil(pi.elems[elem_name]) return !isnil(mi.elems[elem_name])
} }
// Add elem record // Add elem record
fn (mut pi PartsInfo) add_elem(bits_size int, elem &Elem) { fn (mut mi MaterialInfo) add_elem(bits_size int, elem &Elem) {
pt := &ObjectPart{ pt := &MaterialPart{
elem: elem, elem: elem,
bits_size: bits_size, bits_size: bits_size,
} }
pi.elems[elem.name] = pt mi.elems[elem.name] = pt
} }
// Get part by elem name // Get part by elem name
fn (pi &PartsInfo) get_elem_name(elem_name string) &ObjectPart { fn (mi &MaterialInfo) get_elem_name(elem_name string) &MaterialPart {
pt := pi.elems[elem_name] pt := mi.elems[elem_name]
//if isnil(me) { //if isnil(me) {
// panic(2) // panic(2)
@ -71,8 +79,8 @@ fn (pi &PartsInfo) get_elem_name(elem_name string) &ObjectPart {
//fn (mut mi MaterialInfo) add_elem_from_size(size [3]f32, elem &Elem) { //fn (mut mi MaterialInfo) add_elem_from_size(size [3]f32, elem &Elem) {
//fn (mut pi PartsInfo) add_elem_from_size(size []f32, elem &Elem) { //fn (mut pi PartsInfo) add_elem_from_size(size []f32, elem &Elem) {
// println("PartsInfo add_elem_from_size: $size, elem.name: $elem.name") // println("PartsInfo add_elem_from_size: $size, elem.name: $elem.name")
fn (mut pi PartsInfo) add_elem_from_size(mx, my, mz f32, elem &Elem) { fn (mut mi MaterialInfo) add_elem_from_size(mx, my, mz f32, elem &Elem) {
println("PartsInfo add_elem_from_size: mx: $mx, my: $my, mz: $mz, elem.name: $elem.name") println("MaterialInfo add_elem_from_size: mx: $mx, my: $my, mz: $mz, elem.name: $elem.name")
/* /*
mx := size[0] mx := size[0]
@ -85,14 +93,14 @@ fn (mut pi PartsInfo) add_elem_from_size(mx, my, mz f32, elem &Elem) {
println("vol: $vol, vol_bits: $vol_bits") println("vol: $vol, vol_bits: $vol_bits")
pi.add_elem(vol_bits, elem) mi.add_elem(vol_bits, elem)
} }
fn (pi &PartsInfo) elems_list() []&ObjectPart { fn (mi &MaterialInfo) elems_list() []&MaterialPart {
mut ret := []&ObjectPart{} mut ret := []&MaterialPart{}
for k in pi.elems.keys() { for k in mi.elems.keys() {
v := pi.elems[k] v := mi.elems[k]
ret << v ret << v
} }

View File

@ -8,13 +8,6 @@ struct ObjectBit {
elem_type ElemType elem_type ElemType
} }
struct ObjectPart {
mut:
name string
elem &Elem
bits_size int
}
struct Object { struct Object {
mut: mut:
name string name string
@ -28,8 +21,8 @@ mut:
// Material/Elem // Material/Elem
//elem &Elem // XXX use id/enum //elem &Elem // XXX use id/enum
//mat_info &MaterialInfo mat_info &MaterialInfo
parts_info &PartsInfo //parts_info &PartsInfo
// Position in the world // Position in the world
// XXX in map cells/coords? // XXX in map cells/coords?
@ -56,7 +49,8 @@ fn new_object() &Object {
//elem: &Elem(0), //elem: &Elem(0),
//mat_info: &MaterialInfo(0), //mat_info: &MaterialInfo(0),
//parts_info: &PartsInfo(0), //parts_info: &PartsInfo(0),
parts_info: new_parts_info(), //parts_info: new_parts_info(),
mat_info: new_material_info(),
//transform: new_transform(), //transform: new_transform(),
} }
@ -69,7 +63,7 @@ fn (o &Object) bits_volume() int {
//return o.bits_size //return o.bits_size
mut ret := 0 mut ret := 0
for me in o.parts_info.elems_list() { for me in o.mat_info.elems_list() {
ret += me.bits_size ret += me.bits_size
} }
@ -86,7 +80,7 @@ fn (o &Object) mass() f32 {
mut total_mass := 0 mut total_mass := 0
for _, me in o.parts_info.elems { for _, me in o.mat_info.elems {
mat_density := me.elem.density mat_density := me.elem.density
mat_volume := me.bits_size mat_volume := me.bits_size

View File

@ -59,7 +59,7 @@ fn (p &Processor) process(mut o Object) {
mut processed := false mut processed := false
// Process all elems // Process all elems
mut pts_list := o.parts_info.elems_list() mut pts_list := o.mat_info.elems_list()
for i, _ in pts_list { for i, _ in pts_list {
mut pt := pts_list[i] mut pt := pts_list[i]