예제 #1
0
 public void ApplyCellToPlayer(CellAlchemyState cell, CharacterStateManager character)
 {
     if (cell.isDry)
     {
         return;
     }
     if (cell.gasState == GasPhaseState.Poison)
     {
         character.ApplyPoison();
     }
     if (cell.gasState == GasPhaseState.Water)
     {
         character.ApplyWet();
     }
     if (cell.shockState == ShockState.Shocked)
     {
         character.ApplyShock();
     }
     if (cell.fireState == FireState.Chill)
     {
         character.ApplyChill();
     }
     if (cell.fireState == FireState.Burning)
     {
         character.ApplyHeat();
     }
     if (cell.fireState == FireState.Inferno)
     {
         character.ApplyInferno();
     }
 }
예제 #2
0
 public void AddAffectedCell(CellAlchemyState cell)
 {
     if (!statusAffectedCells.Contains(cell))
     {
         statusAffectedCells.Add(cell);
     }
 }
예제 #3
0
        void LiquidToGas(CellAlchemyState cellState)
        {
            switch (cellState.liquidState)
            {
            case (LiquidPhaseState.Dry):
                if (cellState.fireState != FireState.Inferno)
                {
                    cellState.fireState = FireState.Burning;
                }
                cellState.changedValues.Add(AlchemyChangeType.Heat);
                break;

            case (LiquidPhaseState.Oil):
                IncreaseFire(cellState, 2);
                cellState.liquidState = LiquidPhaseState.Dry;
                cellState.changedValues.Add(AlchemyChangeType.Liquid);
                break;

            default:
                cellState.gasState    = (GasPhaseState)cellState.liquidState;
                cellState.liquidState = LiquidPhaseState.Dry;
                cellState.changedValues.Add(AlchemyChangeType.Liquid);
                cellState.changedValues.Add(AlchemyChangeType.Gas);
                break;
            }
            InfernoCheck(cellState);
            ShockCheck(cellState);
        }
예제 #4
0
 public void RemoveAffectedCell(CellAlchemyState cell)
 {
     if (statusAffectedCells.Contains(cell))
     {
         statusAffectedCells.Remove(cell);
     }
 }
예제 #5
0
        public CellAlchemyState SimulateShock(CellAlchemyState cellState)
        {
            CellAlchemyState simulateState = new CellAlchemyState();

            simulateState.CopyInformation(cellState);
            ApplyShockInternal(simulateState);
            return(simulateState);
        }
예제 #6
0
        public CellAlchemyState SimulateGas(CellAlchemyState cellState, GasPhaseState gas)
        {
            CellAlchemyState simulateState = new CellAlchemyState();

            simulateState.CopyInformation(cellState);
            ApplyGasInternal(simulateState, gas);
            return(simulateState);
        }
예제 #7
0
        public CellAlchemyState SimulateSolid(CellAlchemyState cellState, SolidPhaseState solid)
        {
            CellAlchemyState simulateState = new CellAlchemyState();

            simulateState.CopyInformation(cellState);
            ApplySolidInternal(simulateState, solid);
            return(simulateState);
        }
예제 #8
0
 void ApplyHeatInternal(CellAlchemyState cellState, int itters = 1)
 {
     LiquidToGas(cellState);
     SolidToLiquid(cellState);
     if (itters - 1 > 0)
     {
         ApplyHeatInternal(cellState, itters - 1);
     }
 }
예제 #9
0
 void ApplySolidInternal(CellAlchemyState cellState, SolidPhaseState solid)
 {
     cellState.solidState = solid;
     cellState.changedValues.Add(AlchemyChangeType.Solid);
     if ((int)cellState.fireState > (int)FireState.Dry)
     {
         ApplyHeatInternal(cellState, 2);
     }
     ShockCheck(cellState);
 }
예제 #10
0
        public void ApplyShock(GridCell cell)
        {
            CellAlchemyState cellState = cell.alchemyState;

            ApplyShockInternal(cellState);
            ApplyVFX(cellState);
            if (cell.occupyingObject != null)
            {
                cell.occupyingObject.GetComponent <CharacterStateManager>().ApplyShock();
            }
        }
예제 #11
0
 void ReduceFireWithChill(CellAlchemyState cellState, int levels = 1)
 {
     for (int i = 0; i < levels; i++)
     {
         if ((int)cellState.fireState > (int)FireState.Chill)
         {
             cellState.fireState -= 1;
         }
     }
     cellState.changedValues.Add(AlchemyChangeType.Heat);
 }
예제 #12
0
 void GasToLiquid(CellAlchemyState cellState)
 {
     if (cellState.gasState == GasPhaseState.Dry)
     {
         return;
     }
     cellState.liquidState = (LiquidPhaseState)cellState.gasState;
     cellState.changedValues.Add(AlchemyChangeType.Liquid);
     cellState.gasState = GasPhaseState.Dry;
     ShockCheck(cellState);
 }
예제 #13
0
 void IncreaseFire(CellAlchemyState cellState, int levels = 1)
 {
     for (int i = 0; i < levels; i++)
     {
         if ((int)cellState.fireState < (int)FireState.Inferno)
         {
             cellState.fireState += 1;
         }
     }
     cellState.changedValues.Add(AlchemyChangeType.Heat);
     InfernoCheck(cellState);
 }
예제 #14
0
 void SolidToLiquid(CellAlchemyState cellState)
 {
     if (cellState.solidState == SolidPhaseState.Dry)
     {
         return;
     }
     cellState.liquidState = (LiquidPhaseState)cellState.solidState;
     cellState.changedValues.Add(AlchemyChangeType.Liquid);
     ReduceFireState(cellState);
     cellState.solidState = SolidPhaseState.Dry;
     cellState.changedValues.Add(AlchemyChangeType.Solid);
     ShockCheck(cellState);
 }
예제 #15
0
 public void CopyInformation(CellAlchemyState copy)
 {
     gasState      = copy.gasState;
     liquidState   = copy.liquidState;
     solidState    = copy.solidState;
     blessingState = copy.blessingState;
     fireState     = copy.fireState;
     shockState    = copy.shockState;
     changedValues.Clear();
     foreach (AlchemyChangeType change in copy.changedValues)
     {
         changedValues.Add(change);
     }
 }
예제 #16
0
 void ApplyChillInternal(CellAlchemyState cellState, int itters = 1)
 {
     LiquidToSolid(cellState);
     GasToLiquid(cellState);
     ReduceFireWithChill(cellState);
     if (itters - 1 > 0)
     {
         ApplyChillInternal(cellState, itters - 1);
     }
     else
     if (cellState.changedValues.Contains(AlchemyChangeType.Solid) || cellState.changedValues.Contains(AlchemyChangeType.Liquid) && cellState.fireState == FireState.Chill)
     {
         cellState.fireState = FireState.Dry;
     }
 }
예제 #17
0
 void ShockCheck(CellAlchemyState cellState)
 {
     if (cellState.shockState == ShockState.Dry)
     {
         return;
     }
     if (cellState.gasState != GasPhaseState.Dry || cellState.liquidState != LiquidPhaseState.Dry || cellState.solidState != SolidPhaseState.Dry)
     {
         cellState.changedValues.Add(AlchemyChangeType.Shock);
     }
     else
     {
         cellState.shockState = ShockState.Dry;
     }
 }
예제 #18
0
        void LiquidToSolid(CellAlchemyState cellState)
        {
            switch (cellState.liquidState)
            {
            case (LiquidPhaseState.Dry):

                break;

            default:
                cellState.solidState = (SolidPhaseState)cellState.liquidState;
                cellState.changedValues.Add(AlchemyChangeType.Solid);
                cellState.liquidState = LiquidPhaseState.Dry;
                cellState.changedValues.Add(AlchemyChangeType.Liquid);
                break;
            }
            ShockCheck(cellState);
        }
예제 #19
0
 void ApplyLiquidInternal(CellAlchemyState cellState, LiquidPhaseState liquid)
 {
     cellState.liquidState = liquid;
     cellState.changedValues.Add(AlchemyChangeType.Liquid);
     if ((int)cellState.fireState > (int)FireState.Dry)
     {
         ApplyHeatInternal(cellState);
         if (liquid != LiquidPhaseState.Oil)
         {
             ReduceFireState(cellState);
         }
     }
     else if ((int)cellState.fireState < (int)FireState.Dry)
     {
         ApplyChillInternal(cellState);
     }
     ShockCheck(cellState);
 }
예제 #20
0
 //Eliminate all phase states if inferno is active
 void InfernoCheck(CellAlchemyState cellState)
 {
     if (cellState.fireState >= FireState.Inferno)
     {
         if (cellState.gasState != GasPhaseState.Dry)
         {
             cellState.gasState = GasPhaseState.Dry; cellState.changedValues.Add(AlchemyChangeType.Gas);
         }
         if (cellState.liquidState != LiquidPhaseState.Dry)
         {
             cellState.liquidState = LiquidPhaseState.Dry; cellState.changedValues.Add(AlchemyChangeType.Liquid);
         }
         if (cellState.solidState != SolidPhaseState.Dry)
         {
             cellState.solidState = SolidPhaseState.Dry; cellState.changedValues.Add(AlchemyChangeType.Solid);
         }
     }
 }
예제 #21
0
 public void ApplyLiquid(CellAlchemyState cellState, LiquidPhaseState liquid)
 {
     ApplyLiquidInternal(cellState, liquid);
     ApplyVFX(cellState);
 }
예제 #22
0
 void ApplyShockInternal(CellAlchemyState cellState)
 {
     cellState.shockState = ShockState.Shocked;
     cellState.changedValues.Add(AlchemyChangeType.Shock);
 }
예제 #23
0
 void ApplyGasInternal(CellAlchemyState cellState, GasPhaseState gas)
 {
     cellState.gasState = gas;
     cellState.changedValues.Add(AlchemyChangeType.Gas);
     ShockCheck(cellState);
 }
예제 #24
0
 public void ApplyGas(CellAlchemyState cellState, GasPhaseState gas)
 {
     ApplyGasInternal(cellState, gas);
     ApplyVFX(cellState);
 }
예제 #25
0
        public void ApplyVFX(CellAlchemyState cellState)
        {
            List <AlchemyChangeType> processedValues = cellState.GetChangedValues();

            //remove previous effect
            foreach (AlchemyChangeType value in processedValues)
            {
                switch (value)
                {
                case (AlchemyChangeType.Gas):
                    if (cellState.gasEffect != null)
                    {
                        Destroy(cellState.gasEffect);
                    }
                    break;

                case (AlchemyChangeType.Liquid):
                    if (cellState.liquidEffect != null)
                    {
                        Destroy(cellState.liquidEffect);
                    }
                    break;

                case (AlchemyChangeType.Solid):
                    if (cellState.solidEffect != null)
                    {
                        Destroy(cellState.solidEffect);
                    }
                    break;

                case (AlchemyChangeType.Bless):
                    if (cellState.blessedEffect != null)
                    {
                        Destroy(cellState.blessedEffect);
                    }
                    break;

                case (AlchemyChangeType.Heat):
                    if (cellState.fireEffect != null)
                    {
                        Destroy(cellState.fireEffect);
                    }
                    break;

                case (AlchemyChangeType.Shock):
                    if (cellState.shockEffect != null)
                    {
                        Destroy(cellState.shockEffect);
                    }
                    break;
                }
            }
            //instansiate new effect, if applicapable
            foreach (AlchemyChangeType value in processedValues)
            {
                switch (value)
                {
                case (AlchemyChangeType.Gas):
                    switch (cellState.gasState)
                    {
                    case (GasPhaseState.Water):
                        cellState.gasEffect = Instantiate(WaterGasEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;

                    case (GasPhaseState.Poison):
                        cellState.gasEffect = Instantiate(PoisonGasEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;
                    }
                    break;

                case (AlchemyChangeType.Liquid):
                    switch (cellState.liquidState)
                    {
                    case (LiquidPhaseState.Water):
                        cellState.liquidEffect = Instantiate(WaterLiquidEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;

                    case (LiquidPhaseState.Poison):
                        cellState.liquidEffect = Instantiate(PoisonLiquidEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;

                    case (LiquidPhaseState.Oil):
                        cellState.liquidEffect = Instantiate(OilLiquidEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;
                    }
                    break;

                case (AlchemyChangeType.Solid):
                    switch (cellState.solidState)
                    {
                    case (SolidPhaseState.Water):
                        cellState.solidEffect = Instantiate(WaterSolidEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;

                    case (SolidPhaseState.Poison):
                        cellState.solidEffect = Instantiate(PoisonSolidEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;
                    }
                    break;

                case (AlchemyChangeType.Bless):
                    switch (cellState.blessingState)
                    {
                    case (BlessingState.Blessed):

                        break;

                    case (BlessingState.Cursed):

                        break;
                    }
                    break;

                case (AlchemyChangeType.Heat):
                    switch (cellState.fireState)
                    {
                    case (FireState.Chill):
                        cellState.fireEffect = Instantiate(ChillEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;

                    case (FireState.Burning):
                        cellState.fireEffect = Instantiate(BurningEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;

                    case (FireState.Inferno):
                        cellState.fireEffect = Instantiate(InfernoEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                        break;
                    }
                    break;

                case (AlchemyChangeType.Shock):
                    if (cellState.shockState == ShockState.Dry)
                    {
                    }
                    else if (cellState.solidState != SolidPhaseState.Dry)
                    {
                        cellState.shockEffect = Instantiate(ShockSolidEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                    }
                    else if (cellState.gasState != GasPhaseState.Dry)
                    {
                        cellState.shockEffect = Instantiate(ShockGasEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                    }
                    else if (cellState.liquidState != LiquidPhaseState.Dry)
                    {
                        cellState.shockEffect = Instantiate(ShockLiquidEffectPrefab, cellState.transform.position, cellState.transform.rotation);
                    }
                    else
                    {
                        cellState.shockState = ShockState.Dry;
                    }
                    break;
                }
            }
            cellState.UpdateInternalState();
        }
예제 #26
0
 public void ApplySolid(CellAlchemyState cellState, SolidPhaseState solid)
 {
     ApplySolidInternal(cellState, solid);
     ApplyVFX(cellState);
 }