private void InstantiateWaterObjects() { var waterObject = _waterObject.gameObject; var spawnPosition = waterObject.transform.position; var spawnRotation = waterObject.transform.rotation; var parent = waterObject.transform.parent; float waterWidth = _waterObject.MainModule.Width; _waterObject.MainModule.LargeWaterAreaManager = this; _leftMostWaterSimulationModule = _waterObject.SimulationModule; _leftMostWaterSimulationModule.IsControlledByLargeWaterAreaManager = true; WaterSimulationModule previousSimulationModule = _leftMostWaterSimulationModule; for (int i = 1; i < _waterObjectCount; i++) { spawnPosition.x += waterWidth; Game2DWater waterObjectClone = Instantiate(waterObject, spawnPosition, spawnRotation, parent).GetComponent <Game2DWater>(); waterObjectClone.MainModule.LargeWaterAreaManager = this; WaterSimulationModule currentSimulationModule = waterObjectClone.SimulationModule; currentSimulationModule.IsControlledByLargeWaterAreaManager = true; currentSimulationModule.PreviousWaterSimulationModule = previousSimulationModule; previousSimulationModule.NextWaterSimulationModule = currentSimulationModule; previousSimulationModule = currentSimulationModule; } _rightMostWaterSimulationModule = previousSimulationModule; }
public override void InitializeModules() { if (_areModulesInitialized) { return; } _mainModule = new WaterMainModule(this, _size); _renderingModule = new WaterRenderingModule(this, GetRenderingModuleParameters()); _simulationModule = new WaterSimulationModule(this, GetSimulationModuleParameters()); _meshModule = new WaterMeshModule(this, subdivisionsCountPerUnit); _materialModule = new WaterMaterialModule(this); _animationModule = new WaterAnimationModule(this); _onCollisonRipplesModule = new WaterCollisionRipplesModule(this, GetCollisionRipplesModuleParameters(), GetRipplesEffectsPoolsRoot()); _constantRipplesModule = new WaterConstantRipplesModule(this, GetConstantRipplesModuleParameters(), GetRipplesEffectsPoolsRoot()); _scriptGeneratedRipplesModule = new WaterScriptGeneratedRipplesModule(this, GetScriptGeneratedRipplesModuleParameters(), GetRipplesEffectsPoolsRoot()); _waterfallRipplesModule = new WaterWaterfallRipplesModule(this); _attachedComponentsModule = new WaterAttachedComponentsModule(this, buoyancyEffectorSurfaceLevel, buoyancyEffectorSurfaceLevelLocation, boxColliderTopEdgeLocation); _mainModule.Initialize(); _simulationModule.Initialize(); _meshModule.Initialize(); _materialModule.Initialize(); _renderingModule.Initialize(); _attachedComponentsModule.Initialize(); _constantRipplesModule.Initialze(); _onCollisonRipplesModule.Initialize(); _scriptGeneratedRipplesModule.Initialize(); _waterfallRipplesModule.Initialize(); _animationModule.Initialze(); _areModulesInitialized = true; }
internal void Initialize() { _mainModule = _waterObject.MainModule; _meshModule = _waterObject.MeshModule; _simulationModule = _waterObject.SimulationModule; _attachedComponentsModule = _waterObject.AttachedComponentsModule; }
internal override void Initialize() { _mainModule = _waterObject.MainModule; _simulationModule = _waterObject.SimulationModule; base.Initialize(); }
internal void Initialze() { _mainModule = _waterObject.MainModule; _meshModule = _waterObject.MeshModule; _simulationModule = _waterObject.SimulationModule; _meshModule.OnRecomputeMesh += ResetCachedVariables; ResetCachedVariables(); }
private void UpdateWaterObjectsOrder(WaterSimulationModule newLeftMost, WaterSimulationModule newRightMost) { _leftMostWaterSimulationModule.PreviousWaterSimulationModule = _rightMostWaterSimulationModule; _rightMostWaterSimulationModule.NextWaterSimulationModule = _leftMostWaterSimulationModule; newLeftMost.PreviousWaterSimulationModule = null; newRightMost.NextWaterSimulationModule = null; _leftMostWaterSimulationModule = newLeftMost; _rightMostWaterSimulationModule = newRightMost; }
internal void Initialze() { _mainModule = _waterObject.MainModule; _meshModule = _waterObject.MeshModule; _simulationModule = _waterObject.SimulationModule; _ripplesSourcesIndices = new List <int>(); if (!_randomizeRipplesSourcePositions) { RecomputeIndices(); } }
private void FixedUpdate() { WaterSimulationModule currentSimulationModule = _leftMostWaterSimulationModule; while (currentSimulationModule != null) { currentSimulationModule.FixedUpdate(); if (currentSimulationModule.SurfaceHeighestPoint > _waterSurfaceHeighestPoint) { _waterSurfaceHeighestPoint = currentSimulationModule.SurfaceHeighestPoint; } currentSimulationModule = currentSimulationModule.NextWaterSimulationModule; } }
private void FixedUpdate() { float deltaTime = Time.fixedDeltaTime; WaterSimulationModule currentSimulationModule = _leftMostWaterSimulationModule; while (currentSimulationModule != null) { currentSimulationModule.PhysicsUpdate(deltaTime); if (currentSimulationModule.SurfaceHeighestPoint > _waterSurfaceHeighestPoint) { _waterSurfaceHeighestPoint = currentSimulationModule.SurfaceHeighestPoint; } currentSimulationModule = currentSimulationModule.NextWaterSimulationModule; } }
public Game2DWater GetWaterObjectLocatedAt(float xPos) { float waterHalfWidth = _waterObject.MainModule.Width * 0.5f; WaterSimulationModule currentSimulationModule = _leftMostWaterSimulationModule; while (currentSimulationModule != null) { float waterXPos = currentSimulationModule.MainModule.Position.x; if (Mathf.Abs(xPos - waterXPos) < waterHalfWidth) { return(currentSimulationModule.MainModule.WaterObject); } currentSimulationModule = currentSimulationModule.NextWaterSimulationModule; } return(null); }
private void UpdateWaterObjectsOrder(WaterSimulationModule newLeftMost, WaterSimulationModule newRightMost) { _leftMostWaterSimulationModule.PreviousWaterSimulationModule = _rightMostWaterSimulationModule; _rightMostWaterSimulationModule.NextWaterSimulationModule = _leftMostWaterSimulationModule; newLeftMost.PreviousWaterSimulationModule = null; newRightMost.NextWaterSimulationModule = null; _leftMostWaterSimulationModule = newLeftMost; _rightMostWaterSimulationModule = newRightMost; if (_waterObject.SimulationModule.AreSineWavesActive) { var offset = _waterObject.MeshModule.SurfaceVerticesCount - 1; _leftMostWaterSimulationModule.SineWavesOffset = _leftMostWaterSimulationModule.NextWaterSimulationModule.SineWavesOffset - offset; _rightMostWaterSimulationModule.SineWavesOffset = _rightMostWaterSimulationModule.PreviousWaterSimulationModule.SineWavesOffset + offset; } }
public void InitializeModules() { if (_areModulesInitialized) { return; } _mainModule = new WaterMainModule(this, waterSize); _simulationModule = new WaterSimulationModule(damping, stiffness, spread, firstCustomBoundary, secondCustomBoundary, useCustomBoundaries); _meshModule = new Mesh.WaterMeshModule(subdivisionsCountPerUnit); _materialModule = new WaterMaterialModule(); _renderingModule = new WaterRenderingModule(GetRenderingModuleParameters(), RenderingCamerasRoot); _animationModule = new WaterAnimationModule(); _onCollisonRipplesModule = new WaterCollisionRipplesModule(GetCollisionRipplesModuleParameters(), RipplesEffectsPoolsRoot); _constantRipplesModule = new WaterConstantRipplesModule(GetConstantRipplesModuleParameters(), RipplesEffectsPoolsRoot); _scriptGeneratedRipplesModule = new WaterScriptGeneratedRipplesModule(GetScriptGeneratedRipplesModuleParameters(), RipplesEffectsPoolsRoot); _attachedComponentsModule = new WaterAttachedComponentsModule(buoyancyEffectorSurfaceLevel); _simulationModule.SetDependencies(_mainModule, _meshModule); _meshModule.SetDependencies(_mainModule, _simulationModule); _materialModule.SetDependencies(_meshModule); _renderingModule.SetDependencies(_mainModule, _meshModule, _materialModule); _animationModule.SetDependencies(_mainModule, _meshModule, _simulationModule); _onCollisonRipplesModule.SetDependencies(_mainModule, _meshModule, _simulationModule); _constantRipplesModule.SetDependencies(_mainModule, _meshModule, _simulationModule); _scriptGeneratedRipplesModule.SetDependencies(_mainModule, _meshModule, _simulationModule); _attachedComponentsModule.SetDependencies(_mainModule); _mainModule.Initialize(); _simulationModule.Initialize(); _meshModule.Initialize(); _materialModule.Initialize(); _renderingModule.Initialize(); _attachedComponentsModule.Initialize(); _constantRipplesModule.Initialze(); _animationModule.Initialze(); _areModulesInitialized = true; }
internal void Initialize() { _meshModule = _waterObject.MeshModule; _mainModule = _waterObject.MainModule; _simulationModule = _waterObject.SimulationModule; }
internal void SetDependencies(WaterMainModule mainModule, WaterMeshModule meshModule, WaterSimulationModule simulationModule) { _mainModule = mainModule; _meshModule = meshModule; _simulationModule = simulationModule; }
private void InstantiateWaterObjects() { var waterSize = _waterObject.MainModule.WaterSize; var shouldResizeWater = ValidateWaterSize(ref waterSize); if (shouldResizeWater) { _waterObject.MainModule.SetSize(waterSize, true); } var waterObject = _waterObject.gameObject; var spawnPosition = waterObject.transform.position; var spawnRotation = waterObject.transform.rotation; var parent = waterObject.transform.parent; var waterWidth = waterSize.x; var areSineWavesActive = _waterObject.SimulationModule.AreSineWavesActive; int surfaceVertexCount; if (_waterObject.SimulationModule.IsUsingCustomBoundaries) { surfaceVertexCount = 4 + Mathf.RoundToInt(_waterObject.MeshModule.SubdivisionsPerUnit * (_waterObject.SimulationModule.RightCustomBoundary - _waterObject.SimulationModule.LeftCustomBoundary)); } else { surfaceVertexCount = 2 + Mathf.RoundToInt(_waterObject.MeshModule.SubdivisionsPerUnit * waterWidth); } if (_isConstrained) { if (spawnPosition.x + waterWidth * (_waterObjectCount - 1) + waterWidth * 0.5f > (_constrainedRegionXMax - 0.001f)) { spawnPosition.x = _constrainedRegionXMax - waterWidth * (_waterObjectCount - 1) - waterWidth * 0.5f; } else if (spawnPosition.x - waterWidth * 0.5f < (_constrainedRegionXMin + 0.001f)) { spawnPosition.x = _constrainedRegionXMin + waterWidth * 0.5f; } else { spawnPosition.x = _constrainedRegionXMin + waterWidth * 0.5f + waterWidth * Mathf.Round(((spawnPosition.x - _constrainedRegionXMin) / waterWidth)); } } else { spawnPosition.x -= waterWidth; } _waterObject.MainModule.Position = spawnPosition; _waterObject.MainModule.LargeWaterAreaManager = this; _leftMostWaterSimulationModule = _waterObject.SimulationModule; _leftMostWaterSimulationModule.IsControlledByLargeWaterAreaManager = true; WaterSimulationModule previousSimulationModule = _leftMostWaterSimulationModule; for (int i = 1; i < _waterObjectCount; i++) { spawnPosition.x += waterWidth; Game2DWater waterObjectClone = Instantiate(waterObject, spawnPosition, spawnRotation, parent).GetComponent <Game2DWater>(); if (shouldResizeWater) { waterObjectClone.MainModule.SetSize(waterSize, true); } waterObjectClone.MainModule.LargeWaterAreaManager = this; WaterSimulationModule currentSimulationModule = waterObjectClone.SimulationModule; currentSimulationModule.IsControlledByLargeWaterAreaManager = true; currentSimulationModule.PreviousWaterSimulationModule = previousSimulationModule; previousSimulationModule.NextWaterSimulationModule = currentSimulationModule; if (areSineWavesActive) { currentSimulationModule.SineWavesOffset = previousSimulationModule.SineWavesOffset + surfaceVertexCount - 1; } previousSimulationModule = currentSimulationModule; } _rightMostWaterSimulationModule = previousSimulationModule; }