Пример #1
0
    void EffectAttrConfigurator(Effect effect, int ID, float startX, float startY)
    {
        EffectAttr effectAttr = effect.effectAttrs[ID];

        if (GUI.Button(new Rect(startX, startY += 18, 70, 14), "Remove"))
        {
            effect.effectAttrs.Remove(effectAttr);
            return;
        }

        int type = (int)effectAttr.type;

        cont     = new GUIContent("Type:", "Type of the effect");
        contList = new GUIContent[effectTypeLabel.Length];
        for (int i = 0; i < contList.Length; i++)
        {
            contList[i] = new GUIContent(effectTypeLabel[i], effectTypeTooltip[i]);
        }
        EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
        type            = EditorGUI.Popup(new Rect(startX + 40, startY, 80, 16), type, contList);
        effectAttr.type = (_EffectAttrType)type;


        if (effectAttr.type == _EffectAttrType.HPDamage || effectAttr.type == _EffectAttrType.HPGain || effectAttr.type == _EffectAttrType.APGain || effectAttr.type == _EffectAttrType.APDamage)
        {
            cont = new GUIContent("ValueMin:", "Minimum value for the effect");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.value = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.value);

            cont = new GUIContent("ValueMax:", "Maximum value for the effect");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.valueAlt = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.valueAlt);
        }
        else
        {
            cont = new GUIContent("ValueMax:", "Value for the effect");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.value = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.value);
        }


        //~ if(type==1){
        //~ //cont=new GUIContent("Range:", "Effective range of the ability in term of tile");
        //~ //EditorGUI.LabelField(new Rect(startX, startY+=18, 200, 20), "use Default Damage:");
        //~ //effect.useDefaultDamageValue=EditorGUI.Toggle(new Rect(startX+120, startY-1, 50, 16), effect.useDefaultDamageValue);
        //~ }

        //~ if(type!=2 || !effectAttr.useDefaultDamageValue){
        //~ //cont=new GUIContent("Range:", "Effective range of the ability in term of tile");
        //~ EditorGUI.LabelField(new Rect(startX, startY+=18, 200, 20), "value:");
        //~ effectAttr.value=EditorGUI.FloatField(new Rect(startX+70, startY-1, 50, 16), effectAttr.value);
        //~ }

        cont = new GUIContent("Duration:", "Effective duration of the effect in term of round");
        EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
        effectAttr.duration = EditorGUI.IntField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.duration);
    }
Пример #2
0
    public EffectAttr Clone()
    {
        EffectAttr effectAttr = new EffectAttr();

        effectAttr.type = type;
        effectAttr.useDefaultDamageValue = useDefaultDamageValue;
        effectAttr.value       = value;
        effectAttr.valueAlt    = valueAlt;
        effectAttr.duration    = duration;
        effectAttr.damageType  = damageType;
        effectAttr.unit        = unit;
        effectAttr.collectible = collectible;
        return(effectAttr);
    }
Пример #3
0
    //calculate the active effect on the tile, called in every new round event
    bool CalulateEffect(UnitAbility ability)
    {
        //loop through all the active effect list

        for (int j = 0; j < ability.effectAttrs.Count; j++)
        {
            EffectAttr effectAttr = ability.effectAttrs[j];

            effectAttr.duration -= 1;

            //if the effect duration has reach zero, cancel it by changing the modifier
            if (effectAttr.duration == 0)
            {
                //commented effect are disabled for tile
                if (effectAttr.type == _EffectAttrType.HPDamage)
                {
                    HPGainModifier += (int)effectAttr.value;
                }
                else if (effectAttr.type == _EffectAttrType.HPGain)
                {
                    HPGainModifier -= (int)effectAttr.value;
                }
                else if (effectAttr.type == _EffectAttrType.APDamage)
                {
                    APGainModifier += (int)effectAttr.value;
                }
                else if (effectAttr.type == _EffectAttrType.APGain)
                {
                    APGainModifier -= (int)effectAttr.value;
                }
                else if (effectAttr.type == _EffectAttrType.Damage)
                {
                    damageModifier -= (int)effectAttr.value;
                }
                //~ else if(effectAttr.type==_EffectAttrType.MovementRange){
                //~ movementModifier-=(int)effectAttr.value;
                //~ }
                else if (effectAttr.type == _EffectAttrType.AttackRange)
                {
                    attRangeModifier -= (int)effectAttr.value;
                }
                //~ else if(effectAttr.type==_EffectAttrType.Speed){
                //~ speedModifier-=(int)effectAttr.value;
                //~ }
                else if (effectAttr.type == _EffectAttrType.HitChance)
                {
                    attackModifier -= effectAttr.value;
                }
                else if (effectAttr.type == _EffectAttrType.DodgeChance)
                {
                    defendModifier -= effectAttr.value;
                }
                else if (effectAttr.type == _EffectAttrType.CriticalChance)
                {
                    criticalModifier -= effectAttr.value;
                }
                else if (effectAttr.type == _EffectAttrType.CriticalImmunity)
                {
                    critDefModifier -= effectAttr.value;
                }

                /*
                 * //~ else if(effectAttr.type==_EffectAttrType.ExtraAttack){
                 *      //~ extraAttackModifier-=1;
                 * //~ }
                 * //~ else if(effectAttr.type==_EffectAttrType.ExtraCounterAttack){
                 *      //~ counterAttackModifier-=1;
                 * //~ }
                 * //~ else if(effectAttr.type==_EffectAttrType.Stun){
                 *      //~ stun-=1;
                 * //~ }
                 * //~ else if(effectAttr.type==_EffectAttrType.DisableAttack){
                 *      //~ attackDisabled-=1;
                 * //~ }
                 * //~ else if(effectAttr.type==_EffectAttrType.DisableMovement){
                 *      //~ movementDisabled-=1;
                 * //~ }
                 * //~ else if(effectAttr.type==_EffectAttrType.DisableAbility){
                 *      //~ abilityDisabled-=1;
                 * //~ }
                 */

                //remove the effect from the ability
                ability.effectAttrs.RemoveAt(j);
                j -= 1;
            }
        }

        //if there's no more effect active for the ability, return false, the ability will be removed
        if (ability.effectAttrs.Count == 0)
        {
            return(false);
        }

        return(true);
    }
Пример #4
0
	//function call to apply effectAttr, apply the effect value and edit the modifier(subject to effectAttr duration)
	void ApplyAbilityEffect(EffectAttr effect){
		if(effect.type==_EffectAttrType.HPDamage){
			//first round, any dot after the first round is calculated and applied in CalculateHPDamagePerTurn()
			float val=Random.Range(effect.value, effect.valueAlt);
			float modifier=DamageTable.GetModifier(armorType, effect.damageType);
			ApplyDamage((int)(val*modifier));
		}
		else if(effect.type==_EffectAttrType.HPGain){
			HPGainMin+=(int)effect.value;
			HPGainMax+=(int)effect.valueAlt;
			ApplyHeal((int)Random.Range(effect.value, effect.valueAlt));
		}
		else if(effect.type==_EffectAttrType.APDamage){
			APGainMin-=(int)effect.value;
			APGainMax-=(int)effect.valueAlt;
			GainAP(-(int)Random.Range(effect.value, effect.valueAlt));
		}
		else if(effect.type==_EffectAttrType.APGain){
			APGainMin+=(int)effect.value;
			APGainMax+=(int)effect.valueAlt;
			GainAP((int)Random.Range(effect.value, effect.valueAlt));
		}
		else if(effect.type==_EffectAttrType.Damage){
			rangeDamageMin+=(int)effect.value;
			rangeDamageMax+=(int)effect.value;
			meleeDamageMin+=(int)effect.value;
			meleeDamageMax+=(int)effect.value;
		}
		else if(effect.type==_EffectAttrType.MovementRange){
			movementRange-=(int)effect.value;
		}
		else if(effect.type==_EffectAttrType.AttackRange){
			attackRangeMax+=(int)effect.value;
		}
		else if(effect.type==_EffectAttrType.TurnPriority){
			turnPriority+=(int)effect.value;
		}
		else if(effect.type==_EffectAttrType.HitChance){
			attRange+=effect.value;
			attMelee+=effect.value;
		}
		else if(effect.type==_EffectAttrType.DodgeChance){
			defend+=effect.value;
		}
		else if(effect.type==_EffectAttrType.CriticalChance){
			criticalMelee+=effect.value;
			criticalRange+=effect.value;
		}
		else if(effect.type==_EffectAttrType.CriticalImmunity){
			critDef+=effect.value;
		}
		else if(effect.type==_EffectAttrType.ExtraAttack){
			attackPerTurn+=(int)effect.value;
			attackRemain+=(int)effect.value;
		}
		else if(effect.type==_EffectAttrType.ExtraCounterAttack){
			counterPerTurn+=(int)effect.value;
			counterAttackRemain+=(int)effect.value;
		}
		else if(effect.type==_EffectAttrType.Stun){
			stun+=1;
		}
		else if(effect.type==_EffectAttrType.DisableAttack){
			attackDisabled+=1;
		}
		else if(effect.type==_EffectAttrType.DisableMovement){
			movementDisabled+=1;
		}
		else if(effect.type==_EffectAttrType.DisableAbility){
			abilityDisabled+=1;
		}
		else if(effect.type==_EffectAttrType.ChangeTargetFaction){
			if(defaultFactionID<0){
				//~ if(Random.Range(0f, 1f)<effect.value){
					defaultFactionID=factionID;
					//factionChangeDuration=effect.duration;
					UnitControl.ChangeUnitFaction(this, (int)effect.valueAlt);
				//~ }
			}
		}
	}
Пример #5
0
	//function call to process effectAttr, edit the modifier value and check duration
	bool CalculateAbilityEffect(EffectAttr effect){
		effect.duration-=1;
		
		if(effect.duration<=0){
			if(effect.type==_EffectAttrType.HPDamage){
				//calculation goes directly in CalculateHPDamagePerTurn()
			}
			else if(effect.type==_EffectAttrType.HPGain){
				HPGainMin+=(int)effect.value;
				HPGainMax+=(int)effect.valueAlt;
			}
			else if(effect.type==_EffectAttrType.APDamage){
				APGainMin+=(int)effect.value;
				APGainMax+=(int)effect.valueAlt;
			}
			else if(effect.type==_EffectAttrType.APGain){
				APGainMin-=(int)effect.value;
				APGainMax-=(int)effect.valueAlt;
			}
			else if(effect.type==_EffectAttrType.Damage){
				rangeDamageMin-=(int)effect.value;
				rangeDamageMax-=(int)effect.value;
				meleeDamageMin-=(int)effect.value;
				meleeDamageMax-=(int)effect.value;
			}
			else if(effect.type==_EffectAttrType.MovementRange){
				movementRange-=(int)effect.value;
			}
			else if(effect.type==_EffectAttrType.AttackRange){
				attackRangeMax-=(int)effect.value;
			}
			else if(effect.type==_EffectAttrType.TurnPriority){
				turnPriority-=(int)effect.value;
			}
			else if(effect.type==_EffectAttrType.HitChance){
				attRange-=effect.value;
				attMelee-=effect.value;
			}
			else if(effect.type==_EffectAttrType.DodgeChance){
				defend-=effect.value;
			}
			else if(effect.type==_EffectAttrType.CriticalChance){
				criticalRange-=effect.value;
				criticalMelee-=effect.value;
			}
			else if(effect.type==_EffectAttrType.CriticalImmunity){
				critDef-=effect.value;
			}
			else if(effect.type==_EffectAttrType.ExtraAttack){
				attackPerTurn-=(int)effect.value;
				attackRemain-=(int)effect.value;
			}
			else if(effect.type==_EffectAttrType.ExtraCounterAttack){
				counterPerTurn-=(int)effect.value;
				counterAttackRemain-=(int)effect.value;
			}
			else if(effect.type==_EffectAttrType.Stun){
				stun-=1;
			}
			else if(effect.type==_EffectAttrType.DisableAttack){
				attackDisabled-=1;
			}
			else if(effect.type==_EffectAttrType.DisableMovement){
				movementDisabled-=1;
			}
			else if(effect.type==_EffectAttrType.DisableAbility){
				abilityDisabled-=1;
			}
			else if(effect.type==_EffectAttrType.ChangeTargetFaction){
				//factionChangeDuration-=1;
				UnitControl.ChangeUnitFaction(this, defaultFactionID);
				defaultFactionID=-1;
			}
			
			return true;
		}
		
		return false;
	}
Пример #6
0
 public EffectAttr Clone()
 {
     EffectAttr effectAttr=new EffectAttr();
     effectAttr.type=type;
     effectAttr.useDefaultDamageValue=useDefaultDamageValue;
     effectAttr.value=value;
     effectAttr.valueAlt=valueAlt;
     effectAttr.duration=duration;
     effectAttr.damageType=damageType;
     effectAttr.unit=unit;
     effectAttr.collectible=collectible;
     return effectAttr;
 }
    void EffectAttrConfigurator(UnitAbility uAB, int ID, int startX, int startY)
    {
        EffectAttr effectAttr = uAB.effectAttrs[ID];

        if (GUI.Button(new Rect(startX, startY += 18, 70, 14), "Remove"))
        {
            uAB.effectAttrs.Remove(effectAttr);
            return;
        }

        int type = (int)effectAttr.type;

        cont     = new GUIContent("Type:", "Type of the effect.");
        contList = new GUIContent[effectAttrTypeLabel.Length];
        for (int i = 0; i < contList.Length; i++)
        {
            contList[i] = new GUIContent(effectAttrTypeLabel[i], effectAttrTypeTooltip[i]);
        }
        EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
        type            = EditorGUI.Popup(new Rect(startX + 40, startY, 80, 16), type, contList);
        effectAttr.type = (_EffectAttrType)type;



        if (effectAttr.type == _EffectAttrType.Teleport)
        {
            uAB.targetType             = _AbilityTargetType.EmptyTile;
            uAB.requireTargetSelection = true;
            uAB.targetArea             = _TargetArea.Default;
            uAB.aoeRange = 0;
        }
        else if (effectAttr.type == _EffectAttrType.SpawnUnit || effectAttr.type == _EffectAttrType.SpawnCollectible)
        {
            if (effectAttr.type == _EffectAttrType.SpawnUnit)
            {
                cont = new GUIContent("Unit To Spawn:", "The unit prefab to be used spawned");
                EditorGUI.LabelField(new Rect(startX, startY += 18, 180, 20), cont);
                effectAttr.unit = (UnitTB)EditorGUI.ObjectField(new Rect(startX, startY += 18, 125, 17), effectAttr.unit, typeof(UnitTB), false);

                cont = new GUIContent("Duration:", "The effective duration in which the spawned unit will last\nSet to -ve value for the spawn to be permenant");
                EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
                effectAttr.duration = EditorGUI.IntField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.duration);

                if (effectAttr.duration == 0)
                {
                    effectAttr.duration = -1;
                }
            }
            else if (effectAttr.type == _EffectAttrType.SpawnCollectible)
            {
                cont = new GUIContent("Collectible To Spawn:", "The collectible prefab to be used spawned");
                EditorGUI.LabelField(new Rect(startX, startY += 18, 180, 20), cont);
                effectAttr.collectible = (CollectibleTB)EditorGUI.ObjectField(new Rect(startX, startY += 18, 125, 17), effectAttr.collectible, typeof(CollectibleTB), false);
            }


            uAB.targetType             = _AbilityTargetType.EmptyTile;
            uAB.requireTargetSelection = true;
            uAB.targetArea             = _TargetArea.Default;
            uAB.aoeRange = 0;
        }
        else if (effectAttr.type == _EffectAttrType.ChangeTargetFaction)
        {
            cont = new GUIContent("Chance:", "The chance of success. Take value from 0 to 1");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.value = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.value);

            //~ cont=new GUIContent("Duration:", "The effective duration of the faction change");
            //~ EditorGUI.LabelField(new Rect(startX, startY+=18, 200, 20), cont);
            //~ effectAttr.duration=EditorGUI.IntField(new Rect(startX+70, startY-1, 50, 16), effectAttr.duration);

            uAB.targetType             = _AbilityTargetType.Hostile;
            uAB.requireTargetSelection = true;
            uAB.targetArea             = _TargetArea.Default;
            uAB.aoeRange = 0;
        }
        else if (effectAttr.type == _EffectAttrType.HPDamage)
        {
            cont = new GUIContent("UseDefaultValue:", "Check to use the unit default attack damage value");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.useDefaultDamageValue              = EditorGUI.Toggle(new Rect(startX + 107, startY - 1, 50, 16), effectAttr.useDefaultDamageValue);
            if (!effectAttr.useDefaultDamageValue)
            {
                cont = new GUIContent("ValueMin:", "Minimum value for the effect");
                EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
                effectAttr.value = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.value);

                cont = new GUIContent("ValueMax:", "Maximum value for the effect");
                EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
                effectAttr.valueAlt = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.valueAlt);
            }
        }
        else if (effectAttr.type == _EffectAttrType.HPGain || effectAttr.type == _EffectAttrType.APGain || effectAttr.type == _EffectAttrType.APDamage)
        {
            cont = new GUIContent("ValueMin:", "Minimum value for the effect");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.value = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.value);

            effectAttr.value = Mathf.Min(effectAttr.value, effectAttr.valueAlt);

            cont = new GUIContent("ValueMax:", "Maximum value for the effect");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.valueAlt = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.valueAlt);

            effectAttr.valueAlt = Mathf.Max(effectAttr.value, effectAttr.valueAlt);
        }
        else
        {
            cont = new GUIContent("Value:", "Value for the effect");
            EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
            effectAttr.value = EditorGUI.FloatField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.value);
        }

        //~ if(type==1){
        //~ cont=new GUIContent("Range:", "Effective range of the ability in term of tile");
        //~ EditorGUI.LabelField(new Rect(startX, startY+=18, 200, 20), "use Default Damage:");
        //~ effect.useDefaultDamageValue=EditorGUI.Toggle(new Rect(startX+120, startY-1, 50, 16), effect.useDefaultDamageValue);
        //~ }

        //~ if(type!=2 || !effectAttr.useDefaultDamageValue){
        //~ cont=new GUIContent("Range:", "Effective range of the ability in term of tile");
        //~ EditorGUI.LabelField(new Rect(startX, startY+=18, 200, 20), "value:");
        //~ effectAttr.value=EditorGUI.FloatField(new Rect(startX+70, startY-1, 50, 16), effectAttr.value);
        //~ }


        if (uAB.effectType == _EffectType.Debuff || uAB.effectType == _EffectType.Buff)
        {
            if (effectAttr.type != _EffectAttrType.SpawnUnit)
            {
                cont = new GUIContent("Duration:", "Effective duration of the effect in term of round");
                EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
                effectAttr.duration = EditorGUI.IntField(new Rect(startX + 70, startY - 1, 50, 16), effectAttr.duration);
            }
        }


        //~ int type=(int)effectAttr.type;
        //~ cont=new GUIContent("Type:", "Type of the effect");
        //~ contList=new GUIContent[effectAttrTypeLabel.Length];
        //~ for(int i=0; i<contList.Length; i++) contList[i]=new GUIContent(effectAttrTypeLabel[i], effectAttrTypeTooltip[i]);
        //~ EditorGUI.LabelField(new Rect(startX, startY+=18, 200, 20), cont);
        //~ type = EditorGUI.Popup(new Rect(startX+40, startY, 80, 16), type, contList);
        //~ effectAttr.type=(_EffectAttrType)type;

        if (effectAttr.type == _EffectAttrType.HPDamage)
        {
            if (damageList.Length > 0)
            {
                contList = new GUIContent[damageTooltipList.Length];
                for (int i = 0; i < contList.Length; i++)
                {
                    contList[i] = new GUIContent(damageList[i], damageTooltipList[i]);
                }
                cont = new GUIContent("Type:", "Damage type to be inflicted on target");

                EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);
                effectAttr.damageType = EditorGUI.Popup(new Rect(startX + 40, startY, 80, 16), effectAttr.damageType, contList);
            }
            else
            {
                cont = new GUIContent("Type:", "No damage type has been created, use DamageArmorTableEditor to create one");
                EditorGUI.LabelField(new Rect(startX, startY += 18, 200, 20), cont);

                if (GUI.Button(new Rect(startX + 40, startY, 80, 15), "OpenEditor"))
                {
                    DamageArmorTableEditor.Init();
                }
            }
        }
    }