using System.Collections.Generic; using UnityEngine; public class ParameterContainer : MonoBehaviour { [SerializeField] private GameObject targetConObj; [SerializeField] private GameObject blockConObj; [SerializeField] private GameObject agentObj; [SerializeField] private GameObject hudObj; private TargetController targetCon; private SceneBlockContainer blockCont; private CommonParameterContainer commonParamCont; private int agentInArea; [Header("Dynamic Rewards")] [Tooltip("Free mode Hit Enemy reward")] public float hitTargetReward = 60.0f; [Tooltip("Enemy down in area Reward")] public float killTargetEnemyReward = 80.0f; [Tooltip("stay in firebasesArea reward")] public float inAreaReward = 5.0f; [Space(10)] [Tooltip("go Win reward")] public float goWinReward = 50.0f; [Tooltip("attack Win reward")] public float attackWinReward = 50.0f; [Tooltip("defence Win reward")] public float defenceWinReward = 50.0f; [Tooltip("free Win reward")] public float freeWinReward = 50.0f; private float targetTimeBonus = 0f; private float areaTimeBonus = 0f; private float freeTimeBonus = 0f; private float targetInAreaTime = 0f; private float lastFrameTime = 0f; private float areaTimeBonusPerSec; private float freeTimeBonusPerSec; private float targetTimeBonusPerSec; private int timeLimit = 30; private void Start() { targetCon = targetConObj.GetComponent(); blockCont = blockConObj.GetComponent(); commonParamCont = CommonParameterContainer.Instance; areaTimeBonusPerSec = commonParamCont.areaTimeBonusPerSec; freeTimeBonusPerSec = commonParamCont.freeTimeBonusPerSec; targetTimeBonusPerSec = commonParamCont.targetTimeBonusPerSec; timeLimit = commonParamCont.timeLimit; areaTimeBonus = areaTimeBonusPerSec * timeLimit; freeTimeBonus = freeTimeBonusPerSec * timeLimit; targetTimeBonus = targetTimeBonusPerSec * timeLimit; // Win Rewards goWinReward = commonParamCont.goWinRewardDefault; attackWinReward = commonParamCont.attackWinRewardDefault; defenceWinReward = commonParamCont.defenceWinRewardDefault; freeWinReward = commonParamCont.freeWinRewardDefault; } private void Update() { // get target distance and in area if (targetCon.targetType is Targets.Go or Targets.Attack) { (_, agentInArea) = blockCont.GetAgentTargetDistanceAndInside(agentObj.transform.position); // attack goto or defence target if (agentInArea == 1) { // agent out of area targetInAreaTime += Time.time - lastFrameTime; } areaTimeBonus = areaTimeBonusPerSec * (targetCon.leftTime + targetInAreaTime); freeTimeBonus = freeTimeBonusPerSec * targetCon.leftTime; targetTimeBonus = targetTimeBonusPerSec * targetCon.leftTime; lastFrameTime = Time.time; } else { // free target areaTimeBonus = areaTimeBonusPerSec * targetCon.leftTime; freeTimeBonus = freeTimeBonusPerSec * targetCon.leftTime; targetTimeBonus = targetTimeBonusPerSec * targetCon.leftTime; } hitTargetReward = commonParamCont.hitTargetRewardDefault + targetTimeBonus; killTargetEnemyReward = commonParamCont.killTargetEnemyRewardDefault + targetTimeBonus; inAreaReward = commonParamCont.inAreaRewardDefault + areaTimeBonus; } public void ResetTimeBonusReward() { areaTimeBonus = areaTimeBonusPerSec * timeLimit; freeTimeBonus = freeTimeBonusPerSec * timeLimit; targetInAreaTime = 0f; } }