Ejemplo n.º 1
0
    public bool Initialize(string familyName, FluidInfo baseInfo, FluidRenderer renderer)
    {
        this.familyName = familyName;
        string result = null;

        BeginSimulatorProfilerSample();
        Profiler.BeginSample("Initialize");

        if (baseInfo == null)
        {
            result = "Attempting to initialize FluidSimulator without valid info";
        }
        fluidParameters     = baseInfo.fluidParameters;
        cellParameters      = baseInfo.cellParameters;
        operationParameters = baseInfo.operationParameters;
        operationFlags      = baseInfo.operationFlags;

        if (string.IsNullOrEmpty(result) && this.renderer != null)
        {
            result = "Attempting to re-initialize a FluidSimulator";
        }

        if (string.IsNullOrEmpty(result))
        {
            cellParameters.cellSize   = fluidParameters.physicalSize / fluidParameters.gridSize;
            fluidParameters.container = fluidParameters.container ?? transform;
            // TODO Renderer stuff should probably just be handled by the dispatcher ... if simulator and renderer can be complete ignorant of each other, that would be best. This may not be possible as the Collider depends on both the renderer and the simulator.
            this.renderer = renderer;
            this.renderer.transform.parent = fluidParameters.container;
            this.renderer.gameObject.name  = string.Format("{0} Renderer", familyName);
            result = this.renderer.Initialize(this, baseInfo);
        }

        Profiler.BeginSample("InitializeBuffers");
        result = initializeBuffers();
        if (!string.IsNullOrEmpty(result))
        {
            EndSimulatorProfilerSample();
            result = string.Format("Failed to initialize buffers: {0}", result);
        }

        Profiler.EndSample();
        EndSimulatorProfilerSample();

        if (!string.IsNullOrEmpty(result))
        {
            Debug.LogError(result);
            return(false);
        }

        return(true);
    }
Ejemplo n.º 2
0
    void Awake()
    {
        FamilyName      = name.Substring(0, name.IndexOf("Dispatcher")).TrimEnd();
        gameObject.name = string.Format("{0} Dispatcher", FamilyName);

        string nullReference = "Attempting to use {0} {1} that does not exist.";

        for (int i = 0; i < simulatorOptions.Count; i++)
        {
            if (simulator == null && simulatorOptions[i].mode == simulatorMode)
            {
                simulator = simulatorOptions[i].simulator;
                simulator.gameObject.SetActive(true);
            }
            else
            {
                Destroy(simulatorOptions[i].simulator.gameObject);
                simulatorOptions.RemoveAt(i);
                i--;
            }
        }
        if (simulator == null)
        {
            throw new System.NullReferenceException(string.Format(nullReference, simulatorMode, "Simulator"));
        }

        for (int i = 0; i < rendererOptions.Count; i++)
        {
            if (renderer == null && rendererOptions[i].mode == rendererMode)
            {
                renderer = rendererOptions[i].renderer;
                renderer.gameObject.SetActive(true);
            }
            else
            {
                Destroy(rendererOptions[i].renderer.gameObject);
                rendererOptions.RemoveAt(i);
                i--;
            }
        }
        if (renderer == null)
        {
            throw new System.NullReferenceException(string.Format(nullReference, rendererMode, "Renderer"));
        }
    }
Ejemplo n.º 3
0
    public void Initialize(FluidSimulator simulator, FluidRenderer fluidRenderer, FluidCell cellTemplate, int xIndex, int yIndex)
    {
        if (this.FluidRenderer != null)
        {
            Debug.LogError("Attempting to re-initialize FluidCellRenderer.");
        }

        this.fluidRenderer = fluidRenderer;
        XIndex             = xIndex;
        YIndex             = yIndex;
        cell = new FluidCell()
        {
            density           = cellTemplate.density,
            velocity          = cellTemplate.velocity,
            rawDivergence     = cellTemplate.rawDivergence,
            relaxedDivergence = cellTemplate.relaxedDivergence,
        };
        this.simulator = simulator;
        GetComponent <FluidColliderCell>().Initialize(simulator, new FluidCellIndex(xIndex, yIndex, 0));
    }