public WWDoorHolderConfiguration( WWDoorHolderMetadata northWwDoorHolderMetadata, WWDoorHolderMetadata eastWwDoorHolderMetadata, WWDoorHolderMetadata southWwDoorHolderMetadata, WWDoorHolderMetadata westWwDoorHolderMetadata) { this.northWwDoorHolderMetadata = northWwDoorHolderMetadata; this.eastWwDoorHolderMetadata = eastWwDoorHolderMetadata; this.southWwDoorHolderMetadata = southWwDoorHolderMetadata; this.westWwDoorHolderMetadata = westWwDoorHolderMetadata; }
private void GetDoorHolderDimensions(WWDoorHolderMetadata wwDoorHolderMetadata, string direction, int baseTileSize) { if (DoorHolderHelpersAreNull()) { return; } float width = Vector3.Distance(x1.transform.position, x2.transform.position) / baseTileSize; float height = Math.Abs(y.transform.position.y - x1.transform.position.y) / baseTileSize; wwDoorHolderMetadata.width = width; wwDoorHolderMetadata.height = height; wwDoorHolderMetadata.pivot = pivot.transform.position / baseTileSize * 2f; DestroyHelpers(); }
/// <see cref="SceneGraphManager.AddDoor"/> public bool AddDoor(Door door, Tile tile, Vector3 hitPoint) { float doorWidth = door.GetWidth(); float doorHeight = door.GetHeight(); List <WWDoorHolderMetadata> doorHolders = tile.GetDoorHolders(); // TODO, use the DoorHolder that is closest to the hitPoint // TODO handle the posibility that a Tile has mutliple Door Holders if (doorHolders.Count > 0) { WWDoorHolderMetadata doorHolder = doorHolders[0]; float holderWidth = doorHolder.width; float holderHeight = doorHolder.height; float doorRatio = doorWidth / doorHeight; float holderRatio = holderWidth / holderHeight; float diff = Math.Abs(holderRatio - doorRatio); var threshold = 0.2f; if (diff < threshold) { // TODO scale up to match door to tile if necessary // TODO handle the rotation // TODO handle collision for existing doors var holderRot = tile.GetRotation(); // var config = new WWDoorHolderConfiguration(tile); var rotatedOffset = RotatePointAroundPivot(doorHolder.pivot, Vector3.zero, new Vector3(0, holderRot, 0)); var coord = new Coordinate(tile.GetCoordinate().Index, rotatedOffset); door.SetPosition(coord); door.SetRotation(holderRot); sceneDictionary.Add(door); return(true); } } return(false); }
private void DisplayDoorHolderProperties(WWDoorHolderMetadata wwDoorHolderMetadata, string direction, int baseTileSize) { wwDoorHolderMetadata.hasDoorHolder = GUILayout.Toggle( wwDoorHolderMetadata.hasDoorHolder, string.Format(" Has {0} Door Holder", direction)); if (wwDoorHolderMetadata.hasDoorHolder) { wwDoorHolderMetadata.pivot = EditorGUILayout.Vector3Field( string.Format("{0} Door Pivot", direction), wwDoorHolderMetadata.pivot); wwDoorHolderMetadata.width = EditorGUILayout.FloatField( string.Format("{0} Door Width", direction), wwDoorHolderMetadata.width); wwDoorHolderMetadata.height = EditorGUILayout.FloatField( string.Format("{0} Door Height", direction), wwDoorHolderMetadata.height); if (GUILayout.Button("Create Helpers")) { CreateDoorHolderHelpers(direction); } if (GUILayout.Button(direction + "Get Door Dimensions and Pivot")) { GetDoorHolderDimensions(wwDoorHolderMetadata, direction, baseTileSize); } } }