// Update is called once per frame
void Update()
{
int previousListedCount = _displayedListMoleculesCount;
int previousTotalCount = _displayedMolecules.Count;
resetMoleculeList();
ArrayList molecules = _reactionEngine.getMoleculesFromMedium(mediumId);
foreach (System.Object molecule in molecules)
{
Molecule castMolecule = (Molecule)molecule;
string realName = castMolecule.getRealName();
string codeName = castMolecule.getName();
float concentration = castMolecule.getConcentration();
if (displayAll || (0 != concentration))
{
DisplayedMolecule found = LinkedListExtensions.Find(
_displayedMolecules
, m => m.getCodeName() == codeName
, false
, " GraphMoleculeList::Update()"
);
if (null != found)
{
found.update(concentration);
}
else
//molecule is not displayed yet
{
DisplayedMolecule created = new DisplayedMolecule(codeName, realName, concentration, DisplayedMolecule.DisplayType.MOLECULELIST);
//search if molecule should be displayed in a Device/molecule component
List <EquipedDisplayedDeviceWithMolecules> containers = _equipedDevices.FindAll(eddwm => eddwm.device.getFirstGeneProteinName() == codeName);
if (containers.Count != 0)
{
created.setDisplayType(DisplayedMolecule.DisplayType.DEVICEMOLECULELIST);
foreach (EquipedDisplayedDeviceWithMolecules container in containers)
{
container.addDisplayedMolecule(created);
}
}
else
{
_displayedListMoleculesCount++;
}
//anyway add it to molecule list
_displayedMolecules.AddLast(created);
}
}
}
removeUnusedMolecules();
if (_displayedMolecules.Count != previousTotalCount ||
previousListedCount != _displayedListMoleculesCount)
{
//rearrange devices
positionDeviceAndMoleculeComponents();
}
string namesToDisplay = "";
string valuesToDisplay = "";
foreach (DisplayedMolecule molecule in _displayedMolecules)
{
if (molecule.getDisplayType() == DisplayedMolecule.DisplayType.MOLECULELIST)
{
namesToDisplay += molecule.getRealName() + ":\n";
valuesToDisplay += molecule.getVal() + "\n";
}
}
if (!string.IsNullOrEmpty(namesToDisplay))
{
namesToDisplay.Remove(namesToDisplay.Length - 1, 1);
valuesToDisplay.Remove(valuesToDisplay.Length - 1, 1);
}
namesLabel.text = namesToDisplay;
valuesLabel.text = valuesToDisplay;
/*
* if(null != topLabels)
* {
* topLabelsShift = Vector3.up * topLabels.relativeSize.y * topLabels.transform.localScale.y;
* namesLabel.transform.localPosition = topLabels.transform.localPosition + topLabelsShift;
* }
*/
setUnfoldingListBackgroundScale();
}