public void SelectForm(FORMS selectedForm) { if (selectedForm == activeForm) { activeForm = FORMS.Empty; } else { activeForm = selectedForm; } }
public void AddMaterialMass(float materialMassChange) { materialMass = Mathf.Clamp(materialMass + materialMassChange, 0, 99999); if (materialMass <= 0) { materialMass = 0; isActive = false; currentForm = FORMS.Empty; } else if (materialMass > 0) { isActive = true; } }
void OnMouseDown() { Debug.Log("Stage 2 Tile - OnMouseDown"); if (gridManager.activeForm != FORMS.Empty) { GameObject objectOne = null; GameObject objectTwo = null; switch (gridManager.activeForm) { case FORMS.SpikeDown: if (posY <= 0) { return; } objectOne = gridManager.stage2TileObjects[posX, posY - 1]; break; case FORMS.SpikeLeft: if (posX <= 0) { return; } objectOne = gridManager.stage2TileObjects[posX - 1, posY]; break; case FORMS.SpikeRight: if (posX >= gridManager.stage2TileObjects.GetUpperBound(0)) { return; } objectOne = gridManager.stage2TileObjects[posX + 1, posY]; break; case FORMS.SpikeTop: if (posY >= gridManager.stage2TileObjects.GetUpperBound(1)) { return; } objectOne = gridManager.stage2TileObjects[posX, posY + 1]; break; case FORMS.HalfDown: if (posY <= 0) { return; } objectOne = gridManager.stage2TileObjects[posX, posY - 1]; break; case FORMS.HalfLeft: if (posX <= 0) { return; } objectOne = gridManager.stage2TileObjects[posX - 1, posY]; break; case FORMS.HalfRight: if (posX >= gridManager.stage2TileObjects.GetUpperBound(0)) { return; } objectOne = gridManager.stage2TileObjects[posX + 1, posY]; break; case FORMS.HalfUp: if (posY >= gridManager.stage2TileObjects.GetUpperBound(1)) { return; } objectOne = gridManager.stage2TileObjects[posX, posY + 1]; break; case FORMS.EdgeDR: if (posY <= 0) { return; } if (posX >= gridManager.stage2TileObjects.GetUpperBound(0)) { return; } objectOne = gridManager.stage2TileObjects[posX, posY - 1]; objectTwo = gridManager.stage2TileObjects[posX + 1, posY]; break; case FORMS.EdgeLD: if (posX <= 0) { return; } if (posY <= 0) { return; } objectOne = gridManager.stage2TileObjects[posX - 1, posY]; objectTwo = gridManager.stage2TileObjects[posX, posY - 1]; break; case FORMS.EdgeRU: if (posX >= gridManager.stage2TileObjects.GetUpperBound(0)) { return; } if (posY >= gridManager.stage2TileObjects.GetUpperBound(1)) { return; } objectOne = gridManager.stage2TileObjects[posX + 1, posY]; objectTwo = gridManager.stage2TileObjects[posX, posY + 1]; break; case FORMS.EdgeUL: if (posY >= gridManager.stage2TileObjects.GetUpperBound(1)) { return; } if (posY <= 0) { return; } objectOne = gridManager.stage2TileObjects[posX, posY + 1]; objectTwo = gridManager.stage2TileObjects[posX, posY - 1]; break; } Stage2Tile tmpTile = null; bool isValid = true; //Check if everything is available for (int i = 0; i < 2; i++) { if (i == 0 && objectOne != null) { tmpTile = objectOne.GetComponent <Stage2Tile>(); } else if (i == 1 && objectTwo != null) { tmpTile = objectTwo.GetComponent <Stage2Tile>(); } else { continue; } if (tmpTile == null || tmpTile.currentForm != FORMS.Block || tmpTile.heat < tmpTile.heatLostPerHit || tmpTile.materialMass <= tmpTile.materialMassLostPerHit) { isValid = false; } } if (isValid) { float newMaterialMass = 0.0f; float newHeat = 0.0f; int countRelevantTiles = 0; for (int i = 0; i < 2; i++) { if (i == 0 && objectOne != null) { tmpTile = objectOne.GetComponent <Stage2Tile>(); } else if (i == 1 && objectTwo != null) { tmpTile = objectTwo.GetComponent <Stage2Tile>(); } else { continue; } tmpTile.AddHeat(-tmpTile.heatLostPerHit); tmpTile.AddMaterialMass(-tmpTile.materialMassLostPerHit); float materialMassToShare = Mathf.Clamp(tmpTile.materialMassPerBlock, 0, tmpTile.materialMassPerBlock); newMaterialMass = materialMassToShare; tmpTile.AddMaterialMass(-materialMassToShare); tmpTile.isChanged = true; newHeat = tmpTile.heat; countRelevantTiles++; } SetHeat(Mathf.Clamp(newHeat / countRelevantTiles, 0f, 100f)); AddMaterialMass(newMaterialMass); currentForm = gridManager.activeForm; ShowValues(); gridManager.AfterHammerHit(); } } }