Ejemplo n.º 1
0
 public void SelectForm(FORMS selectedForm)
 {
     if (selectedForm == activeForm)
     {
         activeForm = FORMS.Empty;
     }
     else
     {
         activeForm = selectedForm;
     }
 }
Ejemplo n.º 2
0
 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;
     }
 }
Ejemplo n.º 3
0
    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();
            }
        }
    }