Aimbot-ParallelEnv/Assets/Script/GameScript/ParameterContainer.cs

108 lines
3.8 KiB
C#

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<TargetController>();
blockCont = blockConObj.GetComponent<SceneBlockContainer>();
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;
}
}