// TODO: make this more modular, same as above. We can't make a case for every type of tracked object. // again, maybe figure out if we can get asset IDs. private void CreateFromRaw(RawGameObject obj) { // Convert to GameObject if (obj.typeID == 1) // cube { props.Add(Instantiate(cubePrefab)); } else if (obj.typeID == 2) // sphere { props.Add(Instantiate(spherePrefab)); } else if (obj.typeID == 3) // marksman { props.Add(Instantiate(marksmanPrefab)); } else if (obj.typeID == 4) // rock { props.Add(Instantiate(rockPrefab)); } else if (obj.typeID == 5) // light { props.Add(Instantiate(lightPrefab)); } props[props.Count - 1].transform.parent = PropsParentObj.transform; props[props.Count - 1].transform.position = new Vector3(obj.xPos, obj.yPos, obj.zPos); props[props.Count - 1].transform.rotation = new Quaternion(obj.xRot, obj.yRot, obj.zRot, obj.wRot); props[props.Count - 1].transform.localScale = new Vector3(obj.xScl, obj.yScl, obj.zScl); // set material based on ID. if ID is 0, we don't set a material. This happens if obj is a light (typeID of 5) if (obj.matID == 1) // default { props[props.Count - 1].GetComponent <MeshRenderer>().material = defaultMat; } else if (obj.matID == 2) // red { props[props.Count - 1].GetComponent <MeshRenderer>().material = red; props[props.Count - 1].GetComponent <MeshRenderer>().material.color = new Color(props[props.Count - 1].GetComponent <MeshRenderer>().material.color.r, props[props.Count - 1].GetComponent <MeshRenderer>().material.color.b, props[props.Count - 1].GetComponent <MeshRenderer>().material.color.g, 1.0f); } else if (obj.matID == 3) // green { props[props.Count - 1].GetComponent <MeshRenderer>().material = green; props[props.Count - 1].GetComponent <MeshRenderer>().material.color = new Color(props[props.Count - 1].GetComponent <MeshRenderer>().material.color.r, props[props.Count - 1].GetComponent <MeshRenderer>().material.color.b, props[props.Count - 1].GetComponent <MeshRenderer>().material.color.g, 1.0f); } else if (obj.matID == 4) // blue { props[props.Count - 1].GetComponent <MeshRenderer>().material = blue; props[props.Count - 1].GetComponent <MeshRenderer>().material.color = new Color(props[props.Count - 1].GetComponent <MeshRenderer>().material.color.r, props[props.Count - 1].GetComponent <MeshRenderer>().material.color.b, props[props.Count - 1].GetComponent <MeshRenderer>().material.color.g, 1.0f); } }
private void PopulateRawPropsList() { rawProps.Clear(); foreach (GameObject obj in props) { RawGameObject sanityCheck = ConvertToRaw(obj); if (sanityCheck.typeID == 0) { continue; // something went wrong. instead of dealing with it, skip it. } rawProps.Add(sanityCheck); } }
private static extern void AddToObjectList(RawGameObject obj);
// TODO: make this more modular. Making a case for every type of object we have is not ideal. // Maybe we get asset UID's? Is that possible? private RawGameObject ConvertToRaw(GameObject obj) { RawGameObject rawObj = new RawGameObject { }; string name = obj.name; string matName = obj.GetComponent <MeshRenderer>().material.name; Vector3 pos = obj.transform.position; Quaternion rot = obj.transform.rotation; Vector3 scl = obj.transform.localScale; // type to int int type; if (name.Contains("Cube")) { type = 1; } else if (name.Contains("Sphere")) { type = 2; } else if (name.Contains("Marksman")) { type = 3; } else if (name.Contains("Rock")) { type = 4; } else if (name.Contains("Light")) { type = 5; } else { type = 0; } rawObj.typeID = type; // mat to int int mat; if (matName.Contains("default")) { mat = 1; } else if (matName.Contains("red")) { mat = 2; } else if (matName.Contains("green")) { mat = 3; } else if (matName.Contains("blue")) { mat = 4; } else { mat = 0; } rawObj.matID = mat; // pos to float rawObj.xPos = pos.x; rawObj.yPos = pos.y; rawObj.zPos = pos.z; // rot to float rawObj.xRot = rot.x; rawObj.yRot = rot.y; rawObj.zRot = rot.z; rawObj.wRot = rot.w; // scl to float rawObj.xScl = scl.x; rawObj.yScl = scl.y; rawObj.zScl = scl.z; return(rawObj); }