V3.2.2 开始创建MultiLevel
使用Multi level使AI适应更复杂环境 基本Level创建完成 UI逻辑创建中
This commit is contained in:
@@ -18,8 +18,8 @@ public class MouseInMap : MonoBehaviour
|
||||
private Vector3 nowHitPosition = Vector3.zero;
|
||||
private Vector3 nowHitPositionRelative = Vector3.zero;
|
||||
private LayerMask groundMask;
|
||||
private int randBlockNum;
|
||||
private GameObject preSet;
|
||||
private int blockNum;
|
||||
private GameObject previewModel;
|
||||
private TargetController targetCon;
|
||||
private MousePreview mousePreviewCon;
|
||||
private EnemyContainer enemyCon;
|
||||
@@ -27,6 +27,11 @@ public class MouseInMap : MonoBehaviour
|
||||
private MessageBoxController messageCon;
|
||||
private TargetUIController targetUICon;
|
||||
|
||||
private const string ErrorMessageColor = "#800000ff";
|
||||
private const string LevelTooHighError = "[Error]MouseInMap:ChangeBlockLevelTo:";
|
||||
private const string AttackLevelErrorMsg = "Attack Level is too high!";
|
||||
private const string GotoLevelErrorMsg = "Goto Level is too high!";
|
||||
|
||||
public enum MouseMode
|
||||
{
|
||||
Default,
|
||||
@@ -36,6 +41,7 @@ public class MouseInMap : MonoBehaviour
|
||||
}
|
||||
|
||||
public MouseMode mouseMode = MouseMode.Default;
|
||||
public int blockLevel = 0;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
@@ -66,15 +72,15 @@ public class MouseInMap : MonoBehaviour
|
||||
{
|
||||
// if agent or enemy is nearby, do not create new block
|
||||
messageCon.PushMessage(new List<string> { "Agent or Enemy is too close!" },
|
||||
new List<string> { "#800000ff" });
|
||||
new List<string> { messageCon.errorColor });
|
||||
}
|
||||
else
|
||||
{
|
||||
// if agent or enemy is not nearby, create new block
|
||||
sceneBlockCon.CreateNewBlock(SceneBlockContainer.Targets.Attack, randBlockNum, nowHitPositionRelative);
|
||||
sceneBlockCon.CreateNewBlock(SceneBlockContainer.Targets.Attack, blockLevel, blockNum, nowHitPositionRelative);
|
||||
sceneBlockCon.InitializeBlock(environmentObj);
|
||||
targetCon.AttackModeChange(nowHitPositionRelative);
|
||||
ChangeMouseModeTo(MouseMode.Default);
|
||||
ChangeMouseMode(MouseMode.Default);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -83,15 +89,15 @@ public class MouseInMap : MonoBehaviour
|
||||
{
|
||||
// if agent or enemy is nearby, do not create new block
|
||||
messageCon.PushMessage(new List<string> { "Agent or Enemy is too close!" },
|
||||
new List<string> { "#800000ff" });
|
||||
new List<string> { messageCon.errorColor });
|
||||
}
|
||||
else
|
||||
{
|
||||
// if agent or enemy is not nearby, create new block
|
||||
sceneBlockCon.CreateNewBlock(SceneBlockContainer.Targets.Go, randBlockNum, nowHitPositionRelative);
|
||||
sceneBlockCon.CreateNewBlock(SceneBlockContainer.Targets.Go, blockLevel, blockNum, nowHitPositionRelative);
|
||||
sceneBlockCon.InitializeBlock(environmentObj);
|
||||
targetCon.GotoModeChange(nowHitPositionRelative);
|
||||
ChangeMouseModeTo(MouseMode.Default);
|
||||
ChangeMouseMode(MouseMode.Default);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -99,7 +105,7 @@ public class MouseInMap : MonoBehaviour
|
||||
if (IsAgentorEnemyWithinDistance(enemyDistanceThreshold))
|
||||
{
|
||||
messageCon.PushMessage(new List<string> { "Agent or Enemy is too close!" },
|
||||
new List<string> { "#800000ff" });
|
||||
new List<string> { messageCon.errorColor });
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -114,31 +120,55 @@ public class MouseInMap : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
public void ChangeMouseModeTo(MouseMode thisMouseMode)
|
||||
// change mouse mode, level and PreviewModel
|
||||
public void ChangeMouseMode(MouseMode mouseMode, int level = -1, int blockNum = -1)
|
||||
{
|
||||
mouseMode = thisMouseMode;
|
||||
switch (thisMouseMode)
|
||||
this.mouseMode = mouseMode;
|
||||
SceneBlockContainer.Targets nowTargetType;
|
||||
switch (mouseMode)
|
||||
{
|
||||
case MouseMode.AttackSet:
|
||||
// random choose attack scene block type and set as preview
|
||||
randBlockNum = Random.Range(0, sceneBlockCon.attackBlockPrefabs.Length);
|
||||
preSet = sceneBlockCon.attackBlockPrefabs[randBlockNum];
|
||||
mousePreviewCon.ChangePreviewTo(preSet);
|
||||
break;
|
||||
|
||||
case MouseMode.GotoSet:
|
||||
// random choose Goto scene block type and set as preview
|
||||
randBlockNum = Random.Range(0, sceneBlockCon.goBlockPrefabs.Length);
|
||||
preSet = sceneBlockCon.goBlockPrefabs[randBlockNum];
|
||||
mousePreviewCon.ChangePreviewTo(preSet);
|
||||
// set target type
|
||||
nowTargetType = GetTargetTypeByMouseMode(mouseMode);
|
||||
// set blockLevel or send error message
|
||||
if (level < 0)
|
||||
{
|
||||
// while blockLevel is not set, send error message
|
||||
messageCon.PushMessage(new List<string> { "[ERROR]MouseInMap:ChangeMouseMode:", "Level not set!", "mouseMode=", mouseMode.ToString() },
|
||||
new List<string> { messageCon.errorColor });
|
||||
blockLevel = sceneBlockCon.scenePrefabSet.GetLevelNumber(nowTargetType);
|
||||
}
|
||||
else
|
||||
{
|
||||
// while blockLevel is set
|
||||
blockLevel = level;
|
||||
}
|
||||
blockLevel = level;
|
||||
// set blockNum or random choose attack scene block type
|
||||
if (blockNum < 0)
|
||||
{
|
||||
// while blockNum is not set, random choose block type
|
||||
this.blockNum = Random.Range(0, sceneBlockCon.scenePrefabSet.GetBlockNumber(nowTargetType, blockLevel));
|
||||
}
|
||||
else
|
||||
{
|
||||
// while blockNum is set
|
||||
this.blockNum = blockNum;
|
||||
}
|
||||
// set previewModel
|
||||
previewModel = sceneBlockCon.scenePrefabSet.GetPrefab(nowTargetType, blockLevel, this.blockNum);
|
||||
mousePreviewCon.ChangePreviewTo(previewModel);
|
||||
break;
|
||||
|
||||
case MouseMode.EnemySet:
|
||||
preSet = enemyCon.enemyPrefab;
|
||||
mousePreviewCon.ChangePreviewTo(preSet, true);
|
||||
// set enemy as preview
|
||||
previewModel = enemyCon.enemyPrefab;
|
||||
mousePreviewCon.ChangePreviewTo(previewModel, true);
|
||||
break;
|
||||
|
||||
default:
|
||||
// default mode, delete all preview model
|
||||
mousePreviewCon.DeleteAllPreviewModele();
|
||||
break;
|
||||
}
|
||||
@@ -148,14 +178,14 @@ public class MouseInMap : MonoBehaviour
|
||||
public Vector3 GetMouseOnMapPosition()
|
||||
{
|
||||
// shoot raycast from mainCamera center to mousepositon
|
||||
RaycastHit thisHit;
|
||||
RaycastHit nowHit;
|
||||
Ray ray = playCamera.ScreenPointToRay(Input.mousePosition);
|
||||
// if raycast hit gameobject
|
||||
if (Physics.Raycast(ray, out thisHit, Mathf.Infinity, groundMask))
|
||||
if (Physics.Raycast(ray, out nowHit, Mathf.Infinity, groundMask))
|
||||
{
|
||||
//draw raycast
|
||||
Debug.DrawRay(ray.origin, ray.direction * 100, Color.red);
|
||||
return thisHit.point;
|
||||
return nowHit.point;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -163,6 +193,7 @@ public class MouseInMap : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
// check if agent or enemy is too close to nowHitPosition
|
||||
private bool IsAgentorEnemyWithinDistance(float distance)
|
||||
{
|
||||
// check all child object in enemyContainerObj
|
||||
@@ -190,4 +221,22 @@ public class MouseInMap : MonoBehaviour
|
||||
// if no enemy or agent near by, return false
|
||||
return false;
|
||||
}
|
||||
|
||||
// change to TargetType from MouseMode
|
||||
private SceneBlockContainer.Targets GetTargetTypeByMouseMode(MouseMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case MouseMode.AttackSet:
|
||||
return SceneBlockContainer.Targets.Attack;
|
||||
|
||||
case MouseMode.GotoSet:
|
||||
return SceneBlockContainer.Targets.Go;
|
||||
|
||||
default:
|
||||
messageCon.PushMessage(new List<string> { "[Error]MouseInMap:GetTargetTypeByMouseMode:", "Mouse Mode not found!", "mode=", mode.ToString() },
|
||||
new List<string> { messageCon.errorColor });
|
||||
return SceneBlockContainer.Targets.Num;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ public class TargetUIController : MonoBehaviour
|
||||
{
|
||||
// Clear all enemies and targets. set gamemode to Stay mode
|
||||
targetCon.StayModeChange();
|
||||
mouseInMapCon.ChangeMouseModeTo(MouseInMap.MouseMode.Default);
|
||||
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.Default);
|
||||
// disable setStayButton and enable other buttons
|
||||
setStayButton.interactable = false;
|
||||
setAttackButton.interactable = true;
|
||||
@@ -41,12 +41,12 @@ public class TargetUIController : MonoBehaviour
|
||||
|
||||
public void SetEnemyPressed()
|
||||
{
|
||||
mouseInMapCon.ChangeMouseModeTo(MouseInMap.MouseMode.EnemySet);
|
||||
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.EnemySet);
|
||||
}
|
||||
|
||||
public void SetGotoPressed()
|
||||
{
|
||||
mouseInMapCon.ChangeMouseModeTo(MouseInMap.MouseMode.GotoSet);
|
||||
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.GotoSet);
|
||||
setStayButton.interactable = true;
|
||||
setAttackButton.interactable = true;
|
||||
setGotoButton.interactable = false;
|
||||
@@ -55,7 +55,7 @@ public class TargetUIController : MonoBehaviour
|
||||
|
||||
public void SetAttackPressed()
|
||||
{
|
||||
mouseInMapCon.ChangeMouseModeTo(MouseInMap.MouseMode.AttackSet);
|
||||
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.AttackSet);
|
||||
setStayButton.interactable = true;
|
||||
setAttackButton.interactable = false;
|
||||
setGotoButton.interactable = true;
|
||||
@@ -64,7 +64,7 @@ public class TargetUIController : MonoBehaviour
|
||||
|
||||
public void SetFreePressed()
|
||||
{
|
||||
mouseInMapCon.ChangeMouseModeTo(MouseInMap.MouseMode.Default);
|
||||
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.Default);
|
||||
targetCon.FreeModeChange();
|
||||
setStayButton.interactable = true;
|
||||
setAttackButton.interactable = true;
|
||||
@@ -74,11 +74,16 @@ public class TargetUIController : MonoBehaviour
|
||||
|
||||
public void SetStayPressed()
|
||||
{
|
||||
mouseInMapCon.ChangeMouseModeTo(MouseInMap.MouseMode.Default);
|
||||
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.Default);
|
||||
targetCon.StayModeChange();
|
||||
setStayButton.interactable = false;
|
||||
setAttackButton.interactable = true;
|
||||
setGotoButton.interactable = true;
|
||||
setFreeButton.interactable = true;
|
||||
}
|
||||
|
||||
public void ShowLevelMenu(GameObject levelPanel)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user