Exemple #1
0
    void Update()
    {
        Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition + new Vector3(0, 0, depthTarget.transform.position.z));

        mouseMove   = mousePosition - oldMousePos;
        oldMousePos = mousePosition;

        SelectedFluid = null;
        FluidCollider selectedCollider = null;

        RaycastHit hit;

        if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
        {
            selectedCollider = hit.collider.GetComponent <FluidCollider>();
            if (selectedCollider != null)
            {
                SelectedFluid = selectedCollider.Simulator;
                //FluidCellIndex selectedIndex = new FluidCellIndex(selected.XIndex, selected.YIndex, 0);
                //SelectedFluid.SelectedCellIndex = selectedIndex;
                selectedCollider.SelectCell(hit.point);
            }
        }

        if (SelectedFluid != null)
        {
            bool leftMouse   = Input.GetMouseButton(0);
            bool rightMouse  = Input.GetMouseButton(1);
            bool middleMouse = Input.GetMouseButton(2);
            if (leftMouse || rightMouse || middleMouse)
            {
                float   densityChange = 0;
                Vector3 force         = Vector3.zero;

                if (leftMouse)
                {
                    densityChange += densityChangeRate;
                    force         += mouseMove * forceRate;
                }
                if (rightMouse)
                {
                    densityChange -= densityChangeRate;
                    force         += mouseMove * forceRate;
                }
                if (middleMouse && !leftMouse && !rightMouse)
                {
                    force += mouseMove * forceRate;
                }

                if (densityChange != 0 || force.sqrMagnitude > 0)
                {
                    //SelectedFluid.AddExternal(SelectedFluid.SelectedCellIndex, densityChange, densityChangeRadius, force, forceRadius);
                    //selectedCollider.AddExternal(hit.point, densityChange, densityChangeRadius, force, forceRadius);
                    FluidInputSustainerFactory.Instance.Create(selectedCollider, hit.point, densityChange, densityChangeRadius, force, forceRadius, 0.3f, 0f, 2f, 4f);
                }
            }
        }
    }
 public FluidInputSustainer(FluidCollider fluidCollider, Vector3 center,
                            float attackDensityChangeRate, float attackDensityChangeRadius, Vector3 attackForceRate, float attackForceRadius,
                            float sustainDensityChangeRate, float sustainDensityChangeRadius, Vector3 sustainForceRate, float sustainForceRadius,
                            float releaseDensityChangeRate, float releaseDensityChangeRadius, Vector3 releaseForceRate, float releaseForceRadius,
                            float sustainDuration, float decayDuration)
 {
     this.fluidCollider   = fluidCollider;
     this.center          = center;
     attackParameters     = new Parameters(attackDensityChangeRate, attackDensityChangeRadius, attackForceRate, attackForceRadius);
     sustainParameters    = new Parameters(sustainDensityChangeRate, sustainDensityChangeRadius, sustainForceRate, sustainForceRadius);
     releaseParameters    = new Parameters(releaseDensityChangeRate, releaseDensityChangeRadius, releaseForceRate, releaseForceRadius);
     this.sustainDuration = sustainDuration;
     this.decayDuration   = decayDuration;
     timeRemaining        = Mathf.Infinity;
     dampening            = 0;
 }
Exemple #3
0
    public FluidInputSustainer Create(FluidCollider fluidCollider, Vector3 center,
                                      float attackDensityChangeRate, float attackDensityChangeRadius, Vector3 attackForceRate, float attackForceRadius,
                                      float attackRelativeSustain, float attackRelativeRelease, float sustainDuration, float decayDuration,
                                      float repeatDelay = -1, float repeatDampening = 0)
    {
        float   sustainDensityChangeRate   = attackDensityChangeRate * attackRelativeSustain;
        float   sustainDensityChangeRadius = attackDensityChangeRadius * attackRelativeSustain;
        Vector3 sustainForceRate           = attackForceRate * attackRelativeSustain;
        float   sustainForceRadius         = attackForceRadius * attackRelativeSustain;

        float   releaseDensityChangeRate   = attackDensityChangeRate * attackRelativeRelease;
        float   releaseDensityChangeRadius = attackDensityChangeRadius * attackRelativeRelease;
        Vector3 releaseForceRate           = attackForceRate * attackRelativeRelease;
        float   releaseForceRadius         = attackForceRadius * attackRelativeRelease;

        return(Create(fluidCollider, center,
                      attackDensityChangeRate, attackDensityChangeRadius, attackForceRate, attackForceRadius,
                      sustainDensityChangeRate, sustainDensityChangeRadius, sustainForceRate, sustainForceRadius,
                      releaseDensityChangeRate, releaseDensityChangeRadius, releaseForceRate, releaseForceRadius,
                      sustainDuration, decayDuration));
    }
Exemple #4
0
    public FluidInputSustainer Create(FluidCollider fluidCollider, Vector3 center,
                                      float attackDensityChangeRate, float attackDensityChangeRadius, Vector3 attackForceRate, float attackForceRadius,
                                      float sustainDensityChangeRate, float sustainDensityChangeRadius, Vector3 sustainForceRate, float sustainForceRadius,
                                      float releaseDensityChangeRate, float releaseDensityChangeRadius, Vector3 releaseForceRate, float releaseForceRadius,
                                      float sustainDuration, float decayDuration,
                                      float repeatDelay = -1, float repeatDampening = 0)
    {
        FluidInputSustainer sustainer = new FluidInputSustainer(fluidCollider, center,
                                                                attackDensityChangeRate, attackDensityChangeRadius, attackForceRate, attackForceRadius,
                                                                sustainDensityChangeRate, sustainDensityChangeRadius, sustainForceRate, sustainForceRadius,
                                                                releaseDensityChangeRate, releaseDensityChangeRadius, releaseForceRate, releaseForceRadius,
                                                                sustainDuration, decayDuration);

        if (repeatDelay >= 0 && repeatDampening > 0)
        {
            repeats.Add(sustainer, new RepeatData(repeatDelay, Mathf.Clamp01(repeatDampening)));
        }

        sustainer.Attack();
        waiting.Add(sustainer);

        return(sustainer);
    }