//////////////////////////////////////////////////////////////// public void OnPlacedBridgePointEvent(BridgePointPlacedEvent gameEvent) { Debug.Log("OnBridgePointPlaced"); CreateBridgeParameters bridgeParameters; bool bridgeNeedsUpdate = PlaceBridgePoint(gameEvent.PlacedPoint, out bridgeParameters); //////////////////////////////////////////////////////////////// if (bridgeNeedsUpdate) { m_Bridge = BridgePlanner.PrepareBridge(bridgeParameters); UpdateBridgeMesh(); } }
/// <summary> /// Places the given bridge point /// </summary> /// <param name="placePoint"></param> /// <returns>True, if the bridge needs to be updated now</returns> bool PlaceBridgePoint(RawBridgePoint placePoint, out CreateBridgeParameters outBridgeParamters) { outBridgeParamters = new CreateBridgeParameters(); bool firstPointIsValid = m_FirstBridgePoint.IsValid(); bool secondPointIsValid = m_SecondBridgePoint.IsValid(); //////////////////////////////////////////////////////////////// if (!firstPointIsValid && !secondPointIsValid) { // No point set? Set the first point m_FirstBridgePoint = placePoint; } else if (firstPointIsValid && !secondPointIsValid) { // Does this point work to create a bridge? CreateBridgeParameters createBridgeParamters; BridgeValidationResult result = BridgePlanner.ValidateBridgePlacement(new ValidateBridgeInput(m_FirstBridgePoint, placePoint), out createBridgeParamters); if (result == BridgeValidationResult.Success) { // Yes! Lets prepare everything for updating the bridge m_SecondBridgePoint = placePoint; outBridgeParamters = createBridgeParamters; return(true); } else { // No. Instead, override the first point! m_FirstBridgePoint = placePoint; return(false); } } else if (firstPointIsValid && secondPointIsValid) { // First try to override second point, if that fails, try to override first point. // Try first point. CreateBridgeParameters createBridgeParamters; BridgeValidationResult result = BridgePlanner.ValidateBridgePlacement(new ValidateBridgeInput(m_FirstBridgePoint, placePoint), out createBridgeParamters); if (result == BridgeValidationResult.Success) { // Make the new point the second point m_SecondBridgePoint = placePoint; outBridgeParamters = createBridgeParamters; return(true); } else { result = BridgePlanner.ValidateBridgePlacement(new ValidateBridgeInput(placePoint, m_SecondBridgePoint), out createBridgeParamters); if (result == BridgeValidationResult.Success) { // Make the previous second the first point & the new point the second point m_FirstBridgePoint = m_SecondBridgePoint; m_SecondBridgePoint = placePoint; outBridgeParamters = createBridgeParamters; return(true); } else { return(false); } } } else { Debug.LogError("BridgePlanner: Second point is valid but first is not?!"); } return(false); }