Example #1
0
        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;
        }
Example #2
0
        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;
        }
Example #3
0
 internal void Initialize()
 {
     _mainModule               = _waterObject.MainModule;
     _meshModule               = _waterObject.MeshModule;
     _simulationModule         = _waterObject.SimulationModule;
     _attachedComponentsModule = _waterObject.AttachedComponentsModule;
 }
Example #4
0
        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();
        }
Example #6
0
        private void UpdateWaterObjectsOrder(WaterSimulationModule newLeftMost, WaterSimulationModule newRightMost)
        {
            _leftMostWaterSimulationModule.PreviousWaterSimulationModule = _rightMostWaterSimulationModule;
            _rightMostWaterSimulationModule.NextWaterSimulationModule    = _leftMostWaterSimulationModule;

            newLeftMost.PreviousWaterSimulationModule = null;
            newRightMost.NextWaterSimulationModule    = null;

            _leftMostWaterSimulationModule  = newLeftMost;
            _rightMostWaterSimulationModule = newRightMost;
        }
Example #7
0
        internal void Initialze()
        {
            _mainModule       = _waterObject.MainModule;
            _meshModule       = _waterObject.MeshModule;
            _simulationModule = _waterObject.SimulationModule;

            _ripplesSourcesIndices = new List <int>();
            if (!_randomizeRipplesSourcePositions)
            {
                RecomputeIndices();
            }
        }
Example #8
0
        private void FixedUpdate()
        {
            WaterSimulationModule currentSimulationModule = _leftMostWaterSimulationModule;

            while (currentSimulationModule != null)
            {
                currentSimulationModule.FixedUpdate();
                if (currentSimulationModule.SurfaceHeighestPoint > _waterSurfaceHeighestPoint)
                {
                    _waterSurfaceHeighestPoint = currentSimulationModule.SurfaceHeighestPoint;
                }

                currentSimulationModule = currentSimulationModule.NextWaterSimulationModule;
            }
        }
Example #9
0
        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;
            }
        }
Example #10
0
        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);
        }
Example #11
0
        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;
            }
        }
Example #12
0
        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;
 }
Example #14
0
 internal void SetDependencies(WaterMainModule mainModule, WaterMeshModule meshModule, WaterSimulationModule simulationModule)
 {
     _mainModule       = mainModule;
     _meshModule       = meshModule;
     _simulationModule = simulationModule;
 }
Example #15
0
        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;
        }