private void StartDragging(float3 handPos, ref HandState state) { if (state.HoveredVertex == Entity.Null || !EntityManager.GetSelected(state.HoveredVertex)) { EntityManager.DeselectAll(); if (state.HoveredVertex != Entity.Null) { EntityManager.SetSelected(state.HoveredVertex, true); } } state.IsDragging = true; state.DragOrigin = handPos; state.DragApplied = float3.zero; HybridLevel.SetDragOffset(-state.DragApplied); if (state.HoveredVertex != Entity.Null) { var vertex = EntityManager.GetComponentData <Vertex>(state.HoveredVertex); _gridOrigin.y = vertex.MinY; } }
private void StopDragging(ref HandState state) { HybridLevel.SetDragOffset(Vector3.zero); EntityManager.AddComponent <MergeOverlappingVertices>(Level); state.IsDragging = false; }
protected override void OnUpdate() { var hybridLevel = _hybridLevel ?? (_hybridLevel = Object.FindObjectOfType <HybridLevel>()); HandleMaterials <Vertex>( hybridLevel.VertexWidgetBaseMaterial, hybridLevel.VertexWidgetHoverMaterial, hybridLevel.VertexWidgetSelectedMaterial, hybridLevel.VertexWidgetHoverSelectedMaterial); HandleMaterials <FloorCeiling>( hybridLevel.FloorCeilingWidgetBaseMaterial, hybridLevel.FloorCeilingWidgetHoverMaterial, hybridLevel.FloorCeilingWidgetSelectedMaterial, hybridLevel.FloorCeilingWidgetHoverSelectedMaterial); }
private void StartDragging(float3 handPos, ref HandState state) { if (state.HoveredFloorCeiling == Entity.Null || !EntityManager.GetSelected(state.HoveredFloorCeiling)) { EntityManager.DeselectAll(); if (state.HoveredFloorCeiling != Entity.Null) { EntityManager.SetSelected(state.HoveredFloorCeiling, true); } } state.IsDragging = true; state.DragOrigin = handPos; state.DragApplied = float3.zero; HybridLevel.SetDragOffset(-state.DragApplied); }
private void UpdateDragging(Hand hand, float3 handPos, ref HandState state) { _gridOrigin.x = handPos.x; _gridOrigin.z = handPos.z; var offset = handPos - state.DragOrigin - state.DragApplied; var intOffset = new int3(math.round(offset / GridSnap)) { x = 0, z = 0 }; if (math.lengthsq(intOffset) <= 0) { return; } if (Extrude && !state.HasExtruded) { StartExtrude(intOffset.y > 0, ref state); } offset = new float3(intOffset) * GridSnap; state.DragApplied += offset; HybridLevel.SetDragOffset(-state.DragApplied); var selectedEntities = _getSelectedFloorCeilings.ToEntityArray(Allocator.TempJob); var moves = new NativeArray <Move>(selectedEntities.Length, Allocator.TempJob); var move = new Move { Offset = offset }; for (var i = 0; i < moves.Length; ++i) { moves[i] = move; } EntityManager.AddComponentData(_getSelectedFloorCeilings, moves); selectedEntities.Dispose(); moves.Dispose(); }
protected override void OnUpdate() { if (_hybridLevel == null) { _hybridLevel = Object.FindObjectOfType <HybridLevel>(); } Entities .WithAllReadOnly <Level, WidgetsVisible>() .ForEach((Entity levelEntity, ref WidgetsVisible widgetsVisible) => { UpdateWidgets(widgetsVisible.Vertex, _hybridLevel.VertexWidgetMesh, _hybridLevel.VertexWidgetBaseMaterial, ref _getRenderableVertices, ref _getNonRenderableVertices, ref _getHiddenVertices); UpdateWidgets(widgetsVisible.FloorCeiling, null, _hybridLevel.FloorCeilingWidgetBaseMaterial, ref _getRenderableFloorCeilings, ref _getNonRenderableFloorCeilings, ref _getHiddenFloorCeilings); if (widgetsVisible.FloorCeiling) { _getNonRenderableFloorCeilings.SetSharedComponentFilter(EntityManager.GetWithinLevel(levelEntity)); var floorCeilings = _getNonRenderableFloorCeilings.ToComponentDataArray <FloorCeiling>(Allocator.TempJob); foreach (var floorCeiling in floorCeilings) { if (floorCeiling.Above != Entity.Null) { PostUpdateCommands.AddComponent <DirtyMesh>(floorCeiling.Above); } if (floorCeiling.Below != Entity.Null) { PostUpdateCommands.AddComponent <DirtyMesh>(floorCeiling.Below); } } floorCeilings.Dispose(); } }); }
private void UpdateDragging(Hand hand, float3 handPos, ref HandState state) { _gridOrigin.x = handPos.x; _gridOrigin.z = handPos.z; var offset = handPos - state.DragOrigin; if (AxisAlignAction.GetState(hand.handType)) { var threshold = math.tan(math.PI / 8f); var xScore = math.abs(offset.x); var zScore = math.abs(offset.z); if (xScore * threshold > zScore) { offset.z = 0f; } else if (zScore * threshold > xScore) { offset.x = 0f; } else { var avg = (xScore + zScore) * 0.5f; offset.x = math.sign(offset.x) * avg; offset.z = math.sign(offset.z) * avg; } } offset -= state.DragApplied; var intOffset = new int3(math.round(offset / GridSnap)) { y = 0 }; if (math.lengthsq(intOffset) <= 0) { return; } offset = new float3(intOffset) * GridSnap; state.DragApplied += offset; HybridLevel.SetDragOffset(-state.DragApplied); var selectedEntities = _getSelectedVertices.ToEntityArray(Allocator.TempJob); var moves = new NativeArray <Move>(selectedEntities.Length, Allocator.TempJob); var move = new Move { Offset = offset }; for (var i = 0; i < moves.Length; ++i) { moves[i] = move; } EntityManager.AddComponentData(_getSelectedVertices, moves); selectedEntities.Dispose(); moves.Dispose(); }