128 lines
4.7 KiB
C#
128 lines
4.7 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 StartSeneData startSceneData;
|
|
private MessageBoxController messageCon;
|
|
private CommonParameterContainer commonParamCont;
|
|
private float agentDistance;
|
|
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>();
|
|
messageCon = hudObj.GetComponent<MessageBoxController>();
|
|
commonParamCont = CommonParameterContainer.Instance;
|
|
|
|
areaTimeBonusPerSec = commonParamCont.areaTimeBonusPerSec;
|
|
freeTimeBonusPerSec = commonParamCont.freeTimeBonusPerSec;
|
|
targetTimeBonusPerSec = commonParamCont.targetTimeBonusPerSec;
|
|
timeLimit = commonParamCont.timeLimit;
|
|
|
|
areaTimeBonus = areaTimeBonusPerSec * timeLimit;
|
|
freeTimeBonus = freeTimeBonusPerSec * timeLimit;
|
|
targetTimeBonus = targetTimeBonusPerSec * timeLimit;
|
|
try
|
|
{
|
|
// try get start scene data
|
|
startSceneData = GameObject.Find("StartSceneDataTransfer").GetComponent<StartSeneData>();
|
|
messageCon.PushMessage(
|
|
new List<string> { "ParameterContainer:", "StartSceneDataTransfer found!" },
|
|
new List<string> { "green", "white" });
|
|
}
|
|
catch
|
|
{
|
|
// if not found, find dummy StartSeneData
|
|
startSceneData = GameObject.Find("StartSceneDataTransferDummy").GetComponent<StartSeneData>();
|
|
messageCon.PushMessage(
|
|
new List<string> { "ParameterContainer:", "StartSceneDataTransfer not found!Use Dummy." },
|
|
new List<string> { "orange" });
|
|
}
|
|
|
|
// 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)
|
|
{
|
|
(agentDistance, 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;
|
|
}
|
|
} |