public static void Update(GameUnit unit) { if (unit == null || unit.gameObject == null) { return; } if (!timeDict.ContainsKey(unit)) { timeDict[unit] = 0; } timeDict[unit] += Time.deltaTime; if (timeDict[unit] < TIME_AI) { return; } timeDict[unit] = 0; var _ai_state = ""; if (AI_Calculation.IsNearEnemy(unit, enemyRadiusCheck)) { var p = new Vector3Int(-1, -1, -1); var path = unit.MovingPath.ToArray().LastOrDefault(); if (path != null) { p = path.Index; } var enemy = AI_Calculation.GetNearEnemy(unit, enemyRadiusCheck); if (!unit.IsMoving || (p != new Vector3Int(-1, -1, -1) && p != ChunkUtil.GetDovvner(enemy.CurrentPos))) { SimpleOrderManager.AttackTarget(unit, enemy as GameUnit); } _ai_state = "AttackEnemy"; } // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (AI_DEBUG && _ai_state != "") { Debug.LogError(unit + " State: " + _ai_state); } }
public static void InitLibraries(LuaVM vm) { UnityOs.InitLuaModule(vm); ModifiersManager.InitLuaModule(); ChunkFinder.InitLuaModule(); SimpleOrderManager.InitLuaModule(); GameMoveManager.InitLuaModule(); AI_Calculation.InitLuaModule(); PathCalcManager.InitLuaModule(); FlagManager.InitLuaModule(); ProgressUnitBar.InitLuaModule(); LuaChunkManager.InitLuaModule(); ErrorBar_HTML.InitLuaModule(); LuaHelper.InitLuaModule(); ResearchManager.InitLuaModule(); }
private const float MinDist = 0.05f; //0.05f //False if countinue moving private static bool DoMove(UnitOrder order) { var ent = order.GetUnit(); var moveTo = order.GetTo(); if (ent == null) { return(true); } var vec = ((moveTo.Pos3D + ent.ExtraPos) - ent.transform.position); //var idealVec = (moveTo.Pos3D - Util.Get3DPosByIndex(ent.CurrentPos)).normalized; if (Mathf.Abs(vec.x) <= MinDist && Mathf.Abs(vec.y) <= MinDist) { ent.transform.position = moveTo.Pos3D + ent.ExtraPos; ent.MovingTo = null; var upperIndexFrom = ent.CurrentPos; var upperIndexTo = ChunkUtil.GetUpper(moveTo.Index); var chunk = ChunkManager.GetChunkByNum(ent.ChunkNumber); chunk.MoveFromTo(upperIndexFrom, upperIndexTo); ent.CurrentPos = upperIndexTo; if (upperIndexFrom != upperIndexTo) { PathCalcManager.CalculatePoint(upperIndexFrom); } GameOrderManager.RemoveMark(ent, moveTo.Index); return(true); } if (ChunkUtil.GetDovvner(ent.CurrentPos) != order.GetTo().Index&& PathFind.IsInvalidPath(order.GetTo().Index)) { SimpleOrderManager.CancelOrders(ent); } ent.State = EventManager.InProgressEvents.Move; ent.MovingTo = moveTo; var speedMod = GameMoveManager.StaticMoveSpeed; var moveSpeed = ent.EntStats.MoveSpeed; var modVec = MultVector(vec, new Vector3(speedMod, speedMod, 1f)); var speedVec = MultVector(modVec, new Vector3(moveSpeed, moveSpeed, 1f)) // vec * speedMod * Time.deltaTime; if (Mathf.Abs(vec.x) <= MinDist * 3 && Mathf.Abs(vec.y) <= MinDist * 3) { speedVec *= 3; } ent.transform.Translate(speedVec); return(false); }
void RghtClickedOnGameObject(GameObject obj) { if (_choosed) { var from = _choosedObj.GetComponent <GameUnit>(); if (from == null || !from.IsMy()) { return; } var to = obj.GetComponent <GameEntity>(); if (to == null) { return; } if (!GroupUtil.isCreatureGroup(from.Group)) { return; } if (!FieldOfView.IsVisible(to) && !GroupUtil.IsGround(to.Group)) { ClickedOnSpace(); return; } Vector3Int f; if (from.MovingTo != null) { f = from.MovingTo.Index; } else { f = from.CurrentPos; f.z--; } //Cant move ? if (from.UpgradedStats.MoveSpeed <= 0f) { SimpleOrderManager.CancelOrders(from); ErrorBar_HTML.SetupError("This unit can`t move!"); return; } //Attack var t = to.CurrentPos; var buildingCheck = false; if (ChunkUtil.IsAnyEntity(from.ChunkNumber, ChunkUtil.GetUpper(t))) { var underGround = ChunkManager.CurrentChunk.GetGameObjectByIndex(ChunkUtil.GetUpper(t)); var underEnt = underGround.GetComponent <GameEntity>(); if (SecondaryGroundLvL.isSecondaryGroup(underEnt.Group)) { buildingCheck = true; } if (!GroupUtil.IsGround(underEnt.Group) && underEnt.Owner != PlayersManager.GetMyPlayer()) { var underP = underEnt.CurrentPos; underP.z++; if (!ChunkManager.CurrentChunk.IsMapPos(underP) || !ChunkUtil.IsAnyEntity(from.ChunkNumber, ChunkUtil.GetUpper(underEnt.CurrentPos))) { if (from.UpgradedStats.Dmg > 0) { SimpleOrderManager.AttackToIndex(from, t); } else if (from.UpgradedStats.Dmg == 0) { ErrorBar_HTML.SetupError("This unit can`t attack!"); } return; } } } //Cancel or Move if ((ChunkUtil.IsAnyEntity(from.ChunkNumber, ChunkUtil.GetUpper(t)) || !PathCalcManager.IsReaching(f, t)) && !buildingCheck) { ErrorBar_HTML.SetupError("Can`t reach that place!"); SimpleOrderManager.CancelOrders(from); } else if (ChunkUtil.IsCanStayHere(from.ChunkNumber, t) || buildingCheck) { SimpleOrderManager.MoveToIndex(from, t); } } else { var clicked = obj.GetComponent <GameEntity>(); if (clicked == null) { return; } var pos = clicked.CurrentPos; if (FlagManager.IsFlagAtPos(pos)) { FlagManager.RemoveFlag(pos); } else { FlagManager.SetupFlag(pos); } } }