private void CurrentToolbar_SelectedSlotChanged(MyToolbar toolbar, MyToolbar.SlotArgs args) { if (!(toolbar.SelectedItem is MyToolbarItemAreaMarker)) { AreaMarkerDefinition = null; } }
private void CurrentToolbar_SlotActivated(MyToolbar toolbar, MyToolbar.SlotArgs args) { if (!(toolbar.GetItemAtIndex(toolbar.SlotToIndex(args.SlotNumber.Value)) is MyToolbarItemAreaMarker)) { AreaMarkerDefinition = null; } }
public MyAreaMarker(MyPositionAndOrientation positionAndOrientation, MyAreaMarkerDefinition definition) { this.m_definition = definition; if (definition != null) { MatrixD worldMatrix = MatrixD.CreateWorld((Vector3D)positionAndOrientation.Position, (Vector3)positionAndOrientation.Forward, (Vector3)positionAndOrientation.Up); base.PositionComp.SetWorldMatrix(worldMatrix, null, false, true, true, false, false, false); if (MyPerGameSettings.LimitedWorld) { this.ClampToWorld(); } this.InitInternal(); } }
private void CurrentToolbar_SelectedSlotChanged(MyToolbar toolbar, MyToolbar.SlotArgs args) { if (!(toolbar.SelectedItem is MyToolbarItemBot)) { BotToSpawn = null; } if (!(toolbar.SelectedItem is MyToolbarItemAiCommand)) { CommandDefinition = null; } if (!(toolbar.SelectedItem is MyToolbarItemAreaMarker)) { AreaMarkerDefinition = null; } }
public MyAreaMarker(MyPositionAndOrientation positionAndOrientation, MyAreaMarkerDefinition definition) { m_definition = definition; Debug.Assert(definition != null, "Area marker definition cannot be null!"); if (definition == null) return; MatrixD matrix = MatrixD.CreateWorld(positionAndOrientation.Position, positionAndOrientation.Forward, positionAndOrientation.Up); PositionComp.SetWorldMatrix((MatrixD)matrix); if (MyPerGameSettings.LimitedWorld) { ClampToWorld(); } InitInternal(); }
private void CurrentToolbar_Unselected(MyToolbar toolbar) { AreaMarkerDefinition = null; }
private void PlaceAreaMarker() { Vector3D cameraPos, cameraDir; if (MySession.Static.GetCameraControllerEnum() == MyCameraControllerEnum.ThirdPersonSpectator || MySession.Static.GetCameraControllerEnum() == MyCameraControllerEnum.Entity) { var headMatrix = MySession.Static.ControlledEntity.GetHeadMatrix(true, true); cameraPos = headMatrix.Translation; cameraDir = headMatrix.Forward; } else { cameraPos = MySector.MainCamera.Position; cameraDir = MySector.MainCamera.WorldMatrix.Forward; } List <MyPhysics.HitInfo> hitInfos = new List <MyPhysics.HitInfo>(); MyPhysics.CastRay(cameraPos, cameraPos + cameraDir * 100, hitInfos, MyPhysics.CollisionLayers.ObjectDetectionCollisionLayer); if (hitInfos.Count == 0) { return; } MyPhysics.HitInfo?closestValidHit = null; foreach (var hitInfo in hitInfos) { var ent = hitInfo.HkHitInfo.GetHitEntity(); if (ent is MyCubeGrid) { closestValidHit = hitInfo; break; } else if (ent is MyVoxelMap) { closestValidHit = hitInfo; break; } } if (closestValidHit.HasValue) { MyAreaMarkerDefinition definition = AreaMarkerDefinition; Debug.Assert(definition != null, "Area marker definition cannot be null!"); if (definition == null) { return; } Vector3D position = closestValidHit.Value.Position; var forward = Vector3D.Reject(cameraDir, Vector3D.Up); if (Vector3D.IsZero(forward)) { forward = Vector3D.Forward; } var positionAndOrientation = new MyPositionAndOrientation(position, Vector3D.Normalize(forward), Vector3D.Up); MyObjectBuilder_AreaMarker objectBuilder = (MyObjectBuilder_AreaMarker)MyObjectBuilderSerializer.CreateNewObject(definition.Id); objectBuilder.PersistentFlags = MyPersistentEntityFlags2.Enabled | MyPersistentEntityFlags2.InScene; objectBuilder.PositionAndOrientation = positionAndOrientation; if (objectBuilder.IsSynced) { SerializableDefinitionId id = definition.Id; MyMultiplayer.RaiseStaticEvent(x => CreateNewPlaceArea, id, positionAndOrientation); } else { MyAreaMarker flag = MyEntityFactory.CreateEntity <MyAreaMarker>(objectBuilder); flag.Init(objectBuilder); MyEntities.Add(flag); } } }
private void PlaceAreaMarker() { Vector3D cameraPos, cameraDir; if (MySession.GetCameraControllerEnum() == Common.ObjectBuilders.MyCameraControllerEnum.ThirdPersonSpectator || MySession.GetCameraControllerEnum() == Common.ObjectBuilders.MyCameraControllerEnum.Entity) { var headMatrix = MySession.ControlledEntity.GetHeadMatrix(true, true); cameraPos = headMatrix.Translation; cameraDir = headMatrix.Forward; } else { cameraPos = MySector.MainCamera.Position; cameraDir = MySector.MainCamera.WorldMatrix.Forward; } List <MyPhysics.HitInfo> hitInfos = new List <MyPhysics.HitInfo>(); MyPhysics.CastRay(cameraPos, cameraPos + cameraDir * 100, hitInfos, MyPhysics.ObjectDetectionCollisionLayer); if (hitInfos.Count == 0) { return; } MyPhysics.HitInfo?closestValidHit = null; foreach (var hitInfo in hitInfos) { var ent = hitInfo.HkHitInfo.Body.GetEntity(); if (ent is MyCubeGrid) { closestValidHit = hitInfo; break; } else if (ent is MyVoxelMap) { closestValidHit = hitInfo; break; } } if (closestValidHit.HasValue) { Vector3D position = closestValidHit.Value.Position; MyAreaMarkerDefinition definition = AreaMarkerDefinition; //MyDefinitionManager.Static.TryGetDefinition(new MyDefinitionId(typeof(MyObjectBuilder_AreaMarkerDefinition), "ForestingArea"), out definition); m_tmpAreas.Clear(); MyPlaceAreas.GetAllAreas(m_tmpAreas); foreach (var area in m_tmpAreas) { if (area.AreaType == AreaMarkerDefinition.Id.SubtypeId) { area.Entity.Close(); } } m_tmpAreas.Clear(); Debug.Assert(definition != null, "Area marker definition cannot be null!"); if (definition == null) { return; } var forward = Vector3D.Reject(cameraDir, Vector3D.Up); if (Vector3D.IsZero(forward)) { forward = Vector3D.Forward; } var flag = new MyAreaMarker(new MyPositionAndOrientation(position, Vector3D.Normalize(forward), Vector3D.Up), definition); MyEntities.Add(flag); } }
private void CurrentToolbar_Unselected(MyToolbar toolbar) { BotToSpawn = null; CommandDefinition = null; AreaMarkerDefinition = null; }