// voxelArray is only used if createIfMissing is true private static Voxel SearchDown(OctreeNode node, Vector3Int position, bool createIfMissing, VoxelArray voxelArray) { VoxelComponent useComponent = null; while (node.size != 1) { // initial root node is larger than COMPONENT_BLOCK_SIZE so a component node should always be found if (createIfMissing && useComponent == null && node.size == COMPONENT_BLOCK_SIZE) { if (node.voxelComponent == null || node.voxelComponent.isDestroyed) { GameObject voxelObject = new GameObject(); voxelObject.transform.parent = voxelArray.transform; voxelObject.name = node.position.ToString(); node.voxelComponent = voxelObject.AddComponent <VoxelComponent>(); } useComponent = node.voxelComponent; } int halfSize = node.size / 2; bool xLarge = position.x >= node.position.x + halfSize; bool yLarge = position.y >= node.position.y + halfSize; bool zLarge = position.z >= node.position.z + halfSize; int branchI = (xLarge ? 1 : 0) + (yLarge ? 2 : 0) + (zLarge ? 4 : 0); OctreeNode branch = node.branches[branchI]; if (branch == null) { if (!createIfMissing) { return(null); } Vector3Int branchPos = new Vector3Int( node.position.x + (xLarge ? halfSize : 0), node.position.y + (yLarge ? halfSize : 0), node.position.z + (zLarge ? halfSize : 0) ); branch = new OctreeNode(branchPos, halfSize); node.branches[branchI] = branch; branch.parent = node; } node = branch; } if (!createIfMissing) { return(node.voxel); } else if (node.voxel != null) { return(node.voxel); } else { Voxel newVoxel = voxelArray.InstantiateVoxel(position, useComponent); node.voxel = newVoxel; newVoxel.octreeNode = node; return(newVoxel); } }
public void Init(VoxelComponent voxelComponent) { this.voxelComponent = voxelComponent; gameObject.name = voxelComponent.GetType().Name.ToString() + "-" + voxelComponent.Entity.Id; UpdateMesh(); }
protected override void OnInit(Parameters parameters) { random = Entity.Simulation.GetComponentManager <DeterministicRandom>(); voxelComponent = Entity.GetComponent <VoxelComponent>(); voxelWorld = voxelComponent.World; SelectTarget(); }
// Use this for initialization void Start() { voxelModel = new GameObject("VoxelModel"); voxelComp = voxelModel.AddComponent <VoxelComponent>(); voxelComp.LoadMagicaModel(@"C:\Projects\Unity\OpenBoxUnity\Assets\VoxModels\cathedral-2.vox", true); //voxelModel = VoxelFactory.Load(@"C:\Projects\Unity\OpenBoxUnity\Assets\VoxModels\cathedral-2.vox", VoxelFactory.ColliderType.None); voxelModel.transform.parent = transform; }
public void Start() { component = GetComponent <VoxelComponent>(); thrust = new float[6]; rotation = new float[3]; Initialize(); }
public VoxelObject SpawnAsteroid(Swordfish.Position _position) { VoxelComponent component = Instantiate(voxelObjectPrefab, _position.toVector3(), Quaternion.identity).GetComponent <VoxelComponent>(); component.setName("asteroid" + voxelMaster.voxelObjects.Count); component.setSize(4); component.setStatic(true); component.Initialize(VoxelObjectType.ASTEROID); return(component.voxelObject); }
public VoxelObject SpawnVoxelObject(Swordfish.Position _position) { VoxelComponent component = Instantiate(voxelObjectPrefab, _position.toVector3(), Quaternion.identity).GetComponent <VoxelComponent>(); component.setName("voxelObject" + voxelMaster.voxelObjects.Count); component.setSize(2); component.setStatic(false); component.Initialize(VoxelObjectType.GENERIC); return(component.voxelObject); }
public override void Disable() { target = null; _importmesh = null; _vertexlist = null; _vertices.Clear(); selectlist.Clear(); selectset.Clear(); _update_mesh = false; _repaint_menu = false; _render_mesh = false; }
public override void Disable() { target = null; _trianglelist = null; _triangles.Clear(); _update_mesh = false; _repaint_menu = false; _render_mesh = false; selectlist.Clear(); selectset.Clear(); _selectdisplay.Disable(); }
public VoxelObject(int _sizeX, int _sizeY, int _sizeZ, VoxelComponent _component, Guid _guid) { guid = _guid; GameMaster.Instance.voxelMaster.voxelObjects[guid] = this; chunkSizeX = _sizeX; chunkSizeY = _sizeY; chunkSizeZ = _sizeZ; component = _component; Initialize(); }
public VoxelObject(int _sizeX = 1, int _sizeY = 1, int _sizeZ = 1, VoxelComponent _component = null) { guid = Guid.NewGuid(); GameMaster.Instance.voxelMaster.voxelObjects[guid] = this; chunkSizeX = _sizeX; chunkSizeY = _sizeY; chunkSizeZ = _sizeZ; component = _component; Initialize(); }
public VoxelHitDataBuiltin(RaycastHit _hit) { rayInfo = _hit; component = _hit.transform.GetComponent <VoxelComponent>(); if (component == null) { return; } voxelObject = component.voxelObject; worldNormal = _hit.normal; worldNormal.Normalize(); localNormal = _hit.transform.InverseTransformDirection(_hit.normal); localNormal.Normalize(); _hit.point += (_hit.normal * 0.1f); // Pad the ray to penetrate into the voxel's space transformPosition = _hit.transform.position + ((BoxCollider)_hit.collider).center; transformPosition -= (Vector3.one * 0.5f); // Reverse block centering //localPosition = _hit.transform.InverseTransformPoint(_hit.point); // USE CLICK SPACE INSTEAD OF COLLIDER SPACE localPosition = _hit.collider.transform.localPosition + ((BoxCollider)_hit.collider).center; localPosition -= component.pivotPoint; // Offset by the pivot localPosition -= (Vector3.one * 0.5f); // Reverse block centering //localPosition += localNormal; // The hit voxel is offset by the normal of the face we hit // USE CLICK SPACE INSTEAD OF COLLIDER SPACE localPosition = new Vector3( (float)Math.Round(localPosition.x, 0, MidpointRounding.ToEven), (float)Math.Round(localPosition.y, 0, MidpointRounding.ToEven), (float)Math.Round(localPosition.z, 0, MidpointRounding.ToEven)); localFacePosition = (localPosition + localNormal); worldPosition = _hit.transform.InverseTransformDirection(_hit.point); worldPosition -= worldNormal; // The hit voxel is offset by the normal of the face we hit worldPosition = new Vector3( (float)Math.Round(worldPosition.x, 0, MidpointRounding.ToEven), (float)Math.Round(worldPosition.y, 0, MidpointRounding.ToEven), (float)Math.Round(worldPosition.z, 0, MidpointRounding.ToEven)); worldFacePosition = (worldPosition + worldNormal); atHit = Coord3D.fromVector3(localPosition); // The coord of the voxel that was hit atFace = Coord3D.fromVector3(localFacePosition); // The coord of the voxel at the face that was hit }
public override void Disable() { selectlist.Clear(); selectset.Clear(); _update_mesh = false; _render_mesh = false; _repaint_menu = false; target = null; _selectdisplay.Disable(); _meshdisplay.Disable(); _preview.invx = false; _preview.invy = false; _axilist = null; _socketlist = null; _sockets.Clear(); }
public override EntityComponent InitEntityGameObject(VoxelArray voxelArray, bool storeComponent = true) { GameObject substanceObject = new GameObject(); substanceObject.name = "Substance"; substanceObject.transform.parent = voxelArray.transform; substanceObject.transform.position = PositionInEditor(); var voxelComponents = new HashSet <VoxelComponent>(); foreach (Voxel v in voxels) { voxelComponents.Add(v.voxelComponent); } foreach (VoxelComponent vc in voxelComponents) { // TODO: need to update this! if (storeComponent) { vc.transform.parent = substanceObject.transform; } else { // clone VoxelComponent vClone = vc.Clone(); vClone.transform.parent = substanceObject.transform; vClone.transform.position = vc.transform.position; vClone.transform.rotation = vc.transform.rotation; } } SubstanceComponent component = substanceObject.AddComponent <SubstanceComponent>(); component.entity = this; component.substance = this; component.health = health; if (storeComponent) { this.component = component; } return(component); }
public VoxelHitData(Unity.Physics.RaycastHit _hit, Unity.Entities.Entity _entity) { rayInfo = _hit; hitTransform = GameMaster.Instance.entitiesToObjectMap[_entity]; component = hitTransform.GetComponent <VoxelComponent>(); if (component == null) { return; } voxelObject = component.voxelObject; _hit.Position += (_hit.SurfaceNormal * 0.1f); // Pad the ray to penetrate into the voxel's space worldNormal = _hit.SurfaceNormal; worldNormal.Normalize(); localNormal = hitTransform.InverseTransformDirection(_hit.SurfaceNormal); localNormal.Normalize(); voxelPosition = hitTransform.InverseTransformPoint(_hit.Position); voxelPosition -= (component.pivotPoint + (Vector3.one * 0.5f)); // Offset to match voxel coordinates voxelPosition.x = (float)Math.Round(voxelPosition.x); voxelPosition.y = (float)Math.Round(voxelPosition.y); voxelPosition.z = (float)Math.Round(voxelPosition.z); voxelPosition -= localNormal; // Reverse centering localPosition = voxelPosition + component.pivotPoint + (Vector3.one * 0.5f); worldPosition = hitTransform.position + (hitTransform.rotation * localPosition); localFacePosition = (localPosition + localNormal); voxelFacePosition = (voxelPosition + localNormal); worldFacePosition = (worldPosition + worldNormal); atHit = Coord3D.fromVector3(voxelPosition); // The coord of the voxel that was hit atFace = Coord3D.fromVector3(voxelFacePosition); // The coord of the voxel at the face that was hit }
private Voxel InstantiateVoxel(Vector3Int position, VoxelComponent useComponent) { Voxel voxel = new Voxel(); voxel.position = position; if (useComponent == null) { if (voxelComponent == null) { GameObject voxelObject = new GameObject(); voxelObject.transform.parent = transform; voxelObject.name = "megavoxel"; voxelComponent = voxelObject.AddComponent <VoxelComponent>(); } voxel.voxelComponent = voxelComponent; } else { voxel.voxelComponent = useComponent; } voxel.voxelComponent.AddVoxel(voxel); return(voxel); }
public Planetoid(int _sizeX = 1, int _sizeY = 1, int _sizeZ = 1, VoxelComponent _component = null) : base(_sizeX, _sizeY, _sizeZ, _component) { }
public void UpdateLists() { //record list guids VoxelComponent lib_obj = null; if (_libobjlist.index >= 0 && _libobjlist.index < _libobjlist.count) { lib_obj = _libobjs[_libobjlist.index]; } string guid_guid = ""; if (_guidlist.index >= 0 && _guidlist.index < _guidlist.count) { guid_guid = _guids[_guidlist.index]; } //update library lists _libobjs.Clear(); if (target != null) { if (typeof(T) == typeof(CornerDesign)) { target.AddCornersToList(_libobjs); } else if (typeof(T) == typeof(LateralDesign)) { target.AddLateralsToList(_libobjs); } else if (typeof(T) == typeof(LongitudeDesign)) { target.AddLongitudesToList(_libobjs); } else if (typeof(T) == typeof(RectDesign)) { target.AddRectsToList(_libobjs); } else if (typeof(T) == typeof(HexagonDesign)) { target.AddHexagonsToList(_libobjs); } } HashSet <string> lib_guids = new HashSet <string>(); for (int k = 0; k < _libobjs.Count; k++) { string guid; long local_id; if (!AssetDatabase.TryGetGUIDAndLocalFileIdentifier(_libobjs[k].GetInstanceID(), out guid, out local_id)) { continue; } lib_guids.Add(guid); } //update guid list _guids.Clear(); _guidstrs.Clear(); string[] guids = AssetDatabase.FindAssets("t:" + typeof(T).ToString()); for (int k = 0; k < guids.Length; k++) { if (lib_guids.Contains(guids[k])) { continue; } string name = AssetDatabase.GUIDToAssetPath(guids[k]); if (name == null || name.Length <= 0) { continue; } name = Path.GetFileNameWithoutExtension(name); if (name == null || name.Length <= 0) { continue; } _guids.Add(guids[k]); _guidstrs.Add(name); } //set new list indices _libobjlist.index = _libobjs.IndexOf(lib_obj); _guidlist.index = _guids.IndexOf(guid_guid); }
public Planetoid(int _sizeX, int _sizeY, int _sizeZ, VoxelComponent _component, Guid _guid) : base(_sizeX, _sizeY, _sizeZ, _component, _guid) { }