void OnTriggerEnter(Collider collider)
    {
        Logger.Log("PhenoFickContact::OnTriggerEnter collider=" + collider, Logger.Level.DEBUG);
        PhysicalMedium PMext = collider.gameObject.GetComponent <PhysicalMedium>();

        if (PMext == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerEnter collider.PMext == null", Logger.Level.TRACE);
            return;
        }
        int    colliderMediumIdExt = PMext.MediumId;
        Medium colliderMediumExt   = ReactionEngine.getMediumFromId(colliderMediumIdExt, _reactionEngine.getMediumList());

        if (colliderMediumExt == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerEnter The collided medium does not exist in the reaction Engine. Load it or change the MediumId number in the PhysicalMedium script.", Logger.Level.WARN);
            return;
        }

        PhysicalMedium PM = GetComponent <PhysicalMedium>();

        if (PMext == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerEnter this.PMext == null", Logger.Level.TRACE);
            return;
        }
        int    mediumId = PM.MediumId;
        Medium medium   = ReactionEngine.getMediumFromId(mediumId, _reactionEngine.getMediumList());

        if (medium == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerEnter The medium does not exist in the reaction Engine. Load it or change the MediumId number in the PhysicalMedium script.", Logger.Level.WARN);
            return;
        }

        float        surface  = Math.Min(PM.Size, PMext.Size);
        Fick         fick     = _reactionEngine.getFick();
        FickReaction reaction = Fick.getFickReactionFromIds(colliderMediumIdExt, mediumId, fick.getFickReactions());

        if (reaction == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerEnter This FickReaction does not exist.", Logger.Level.WARN);
            return;
        }
        reaction.setSurface(surface);

        // set medium as medium of collider
        Logger.Log("colliderMediumIdExt : " + colliderMediumIdExt, Logger.Level.INFO);
        configureExternalDisplays(colliderMediumIdExt);
        _collidedMediumIds.AddLast(colliderMediumIdExt);

        /*
         * Logger.Log("PhenoFickContact::OnTriggerEnter"
         +" reaction.setSurface("+surface+")"
         +" _collidedMediumIds.Count="+_collidedMediumIds.Count
         +" _collidedMediumIds.Last.Value="+_collidedMediumIds.Last.Value
         * ,Logger.Level.);
         */
    }
    //! This function is called at the initialisation of the simulation (like a Constructor)
    void Awake()
    {
        _instance = this;

        FileLoader fileLoader = new FileLoader();

        _reactionsSets = new LinkedList <ReactionSet>();
        _moleculesSets = new LinkedList <MoleculeSet>();
        _mediums       = new LinkedList <Medium>();


        //TODO there is only one file in _moleculesFiles and in _reactionsFiles
        foreach (string file in _reactionsFiles)
        {
            LinkedList <ReactionSet> lr = fileLoader.loadObjectsFromFile <ReactionSet>(file, "reactions");
            if (null != lr)
            {
                LinkedListExtensions.AppendRange <ReactionSet>(_reactionsSets, lr);
            }
        }
        foreach (string file in _moleculesFiles)
        {
            Logger.Log("ReactionEngine::Awake() loading molecules from file", Logger.Level.DEBUG);

            LinkedList <MoleculeSet> lm = fileLoader.loadObjectsFromFile <MoleculeSet>(file, "molecules");
            if (null != lm)
            {
                LinkedListExtensions.AppendRange <MoleculeSet>(_moleculesSets, lm);
            }

            Logger.Log("ReactionEngine::Awake() loading molecules from file done"
                       + ": _moleculesSets=" + Logger.ToString <MoleculeSet>(_moleculesSets)
                       , Logger.Level.DEBUG);
        }

        foreach (string file in _mediumsFiles)
        {
            LinkedList <Medium> lmed = fileLoader.loadObjectsFromFile <Medium>(file, "Medium");
            if (null != lmed)
            {
                LinkedListExtensions.AppendRange <Medium>(_mediums, lmed);
            }
        }

        foreach (Medium medium in _mediums)
        {
            medium.Init(_reactionsSets, _moleculesSets);
            medium.enableSequential(enableSequential);
            medium.enableNoise(enableNoise);
            medium.enableEnergy(enableEnergy);
            medium.enableShufflingReactionOrder = enableShufflingReactionOrder;
        }

        Logger.Log("ReactionEngine::Awake() FickReactions starting", Logger.Level.INFO);

        _fick = new Fick();
        _fick.loadFicksReactionsFromFiles(_fickFiles, _mediums);

        Logger.Log("ReactionEngine::Awake() activeTransport starting", Logger.Level.INFO);

        _activeTransport = new ActiveTransport();
        _activeTransport.loadActiveTransportReactionsFromFiles(_activeTransportFiles, _mediums);

        Logger.Log("ReactionEngine::Awake() done", Logger.Level.INFO);
    }
Exemple #3
0
  //! This function is called at the initialisation of the simulation (like a Constructor)
  void Awake()
  {
    _instance = this;

    FileLoader fileLoader = new FileLoader();
    _reactionsSets = new LinkedList<ReactionSet>();
    _moleculesSets = new LinkedList<MoleculeSet>();
    _mediums = new LinkedList<Medium>();
    

		//TODO there is only one file in _moleculesFiles and in _reactionsFiles
    foreach (string file in _reactionsFiles)
		{
			LinkedList<ReactionSet> lr = fileLoader.loadObjectsFromFile<ReactionSet>(file,"reactions");
      if(null != lr)
        LinkedListExtensions.AppendRange<ReactionSet>(_reactionsSets, lr);
		}
    foreach (string file in _moleculesFiles)
		{
      Logger.Log("ReactionEngine::Awake() loading molecules from file", Logger.Level.DEBUG);

			LinkedList<MoleculeSet> lm = fileLoader.loadObjectsFromFile<MoleculeSet>(file,"molecules");
      if(null != lm)
			  LinkedListExtensions.AppendRange<MoleculeSet>(_moleculesSets, lm);

            Logger.Log("ReactionEngine::Awake() loading molecules from file done"
                       +": _moleculesSets="+Logger.ToString<MoleculeSet>(_moleculesSets)
                       , Logger.Level.DEBUG);
		}
    
    foreach (string file in _mediumsFiles)
		{
      LinkedList<Medium> lmed = fileLoader.loadObjectsFromFile<Medium>(file,"Medium");
      if(null != lmed)
			  LinkedListExtensions.AppendRange<Medium>(_mediums, lmed);
		}

    foreach (Medium medium in _mediums)
    {
      medium.Init(_reactionsSets, _moleculesSets);
      medium.enableSequential(enableSequential);
      medium.enableNoise(enableNoise);
      medium.enableEnergy(enableEnergy);
      medium.enableShufflingReactionOrder = enableShufflingReactionOrder;
    }

        Logger.Log("ReactionEngine::Awake() FickReactions starting", Logger.Level.INFO);

    _fick = new Fick();
    _fick.loadFicksReactionsFromFiles(_fickFiles, _mediums);

        Logger.Log("ReactionEngine::Awake() activeTransport starting", Logger.Level.INFO);

    _activeTransport = new ActiveTransport();        
    _activeTransport.loadActiveTransportReactionsFromFiles(_activeTransportFiles, _mediums);

        Logger.Log("ReactionEngine::Awake() done", Logger.Level.INFO);
  }
    //! This function is called at the initialisation of the simulation (like a Constructor)
    public void Awake()
    {
        FileLoader fileLoader = new FileLoader();
        _reactionsSets = new LinkedList<ReactionsSet>();
        _moleculesSets = new LinkedList<MoleculesSet>();
        _mediums = new LinkedList<Medium>();

        foreach (string file in _reactionsFiles)
          LinkedListExtensions.AppendRange<ReactionsSet>(_reactionsSets, fileLoader.loadReactionsFromFile(file));
        foreach (string file in _moleculesFiles)
          LinkedListExtensions.AppendRange<MoleculesSet>(_moleculesSets, fileLoader.loadMoleculesFromFile(file));

        MediumLoader mediumLoader = new MediumLoader();
        foreach (string file in _mediumsFiles)
          LinkedListExtensions.AppendRange<Medium>(_mediums, mediumLoader.loadMediumsFromFile(file));
        foreach (Medium medium in _mediums)
          {
        medium.Init(_reactionsSets, _moleculesSets);
        medium.enableSequential(enableSequential);
        medium.enableNoise(enableNoise);
        medium.enableEnergy(enableEnergy);
        medium.enableShufflingReactionOrder = enableShufflingReactionOrder;
          }

        _fick = new Fick();
        _fick.loadFicksReactionsFromFiles(_fickFiles, _mediums);
        _activeTransport = new ActiveTransport();
        _activeTransport.loadActiveTransportReactionsFromFiles(_activeTransportFiles, _mediums);
    }
    public void OnTriggerExit(Collider collider)
    {
        Logger.Log("PhenoFickContact::OnTriggerExit collider=" + collider, Logger.Level.DEBUG);
        PhysicalMedium PMext = collider.gameObject.GetComponent <PhysicalMedium>();

        if (PMext == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerExit collider.PMext == null", Logger.Level.TRACE);
            return;
        }
        int    colliderMediumIdExt = PMext.MediumId;
        Medium colliderMediumExt   = ReactionEngine.getMediumFromId(colliderMediumIdExt, _reactionEngine.getMediumList());

        if (colliderMediumExt == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerExit The collided medium does not exist in the reaction Engine. Load it or change the MediumId number in the PhysicalMedium script.", Logger.Level.WARN);
            return;
        }

        PhysicalMedium PM = GetComponent <PhysicalMedium>();

        if (PMext == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerExit this.PMext == null", Logger.Level.TRACE);
            return;
        }
        int    mediumId = PM.MediumId;
        Medium medium   = ReactionEngine.getMediumFromId(mediumId, _reactionEngine.getMediumList());

        if (medium == null)
        {
            Logger.Log("PhenoFickContact::OnTriggerExit The medium does not exist in the reaction Engine. Load it or change the MediumId number in the PhysicalMedium script.", Logger.Level.WARN);
            return;
        }

        // un-set medium as medium of collider
        _collidedMediumIds.Remove(colliderMediumIdExt);

        //string nullLast = (null != _collidedMediumIds.Last)?_collidedMediumIds.Last.Value.ToString():"null";

        /*
         * Logger.Log("PhenoFickContact::OnTriggerExit"
         +" _collidedMediumIds.Count="+_collidedMediumIds.Count
         +" _collidedMediumIds.Last.Value="+nullLast
         * ,Logger.Level.);
         */
        //Logger.Log("PhenoFickContact::OnTriggerExit _collidedMediumIds.Last.Value="+nullLast, Logger.Level.);

        if (null != _collidedMediumIds.Last)
        {
            // TODO consider the current medium as superposition of mediums the ids of which are _collidedMediumIds
            configureExternalDisplays(_collidedMediumIds.Last.Value);
        }
        else
        {
            //not in any Fick contact anymore
            configureExternalDisplays(_vectroPanelInitMediumId);

            Fick         fick     = _reactionEngine.getFick();
            FickReaction reaction = Fick.getFickReactionFromIds(colliderMediumIdExt, mediumId, fick.getFickReactions());
            if (reaction == null)
            {
                Logger.Log("PhenoFickContact::OnTriggerExit This FickReaction does not exist.", Logger.Level.WARN);
            }
            reaction.setSurface(0);
        }
    }
Exemple #6
0
    //! This function is called at the initialisation of the simulation (like a Constructor)
    public void Awake()
    {
        FileLoader fileLoader = new FileLoader();
        _reactionsSets = new LinkedList<ReactionsSet>();
        _moleculesSets = new LinkedList<MoleculesSet>();
        _mediums = new LinkedList<Medium>();

        foreach (string file in _reactionsFiles)
          LinkedListExtensions.AppendRange<ReactionsSet>(_reactionsSets, fileLoader.loadReactionsFromFile(file));
        foreach (string file in _moleculesFiles)
          LinkedListExtensions.AppendRange<MoleculesSet>(_moleculesSets, fileLoader.loadMoleculesFromFile(file));

        MediumLoader mediumLoader = new MediumLoader();
        foreach (string file in _mediumsFiles)
          LinkedListExtensions.AppendRange<Medium>(_mediums, mediumLoader.loadMediumsFromFile(file));
        foreach (Medium medium in _mediums)
          medium.Init(_reactionsSets, _moleculesSets);

        _fick = new Fick();
        _fick.loadFicksReactionsFromFiles(_fickFiles, _mediums);
        _activeTransport = new ActiveTransport();
        _activeTransport.loadActiveTransportReactionsFromFiles(_activeTransportFiles, _mediums);
    }