public static DynValue FindNearestReacheble(GameUnit unit, Table t) { var dist = -1; GameEntity nearest = null; foreach (var v in t.Values) { var ent = v.ToObject <GameEntity>(); if (ent == null) { continue; } if (!PathCalcManager.IsReaching(ChunkUtil.GetDovvner(unit.CurrentPos), ChunkUtil.GetDovvner(ent.CurrentPos))) { continue; } var d = AI_Calculation.GetDistTo(unit.CurrentPos, ent.CurrentPos, false); if (dist == -1 || d < dist) { dist = d; nearest = ent; } } return(nearest == null ? DynValue.Nil : DynValue.FromObject(LuaManager.ScriptObj, nearest)); }
public static void Reward(Quest quest, Player player) { var unit = CreatureGroupManager.GetAllByPlayer(player).FirstOrDefault(); // Debug.LogError(unit); if (unit == null) { return; } var pos = AI_Calculation.FindFreePosNearPos(unit.ChunkNumber, unit.CurrentPos, true); var questReward = quest.reward; //Debug.LogError(questReward); if (questReward.Contains("npc")) { var unitChunkNumber = unit.ChunkNumber; var chunk = ChunkManager.GetChunkByNum(unitChunkNumber); chunk.SetupUnit(questReward, pos, unit.Owner); } else if (questReward.Contains("item") || questReward.Contains("building")) { // Debug.LogError("item/building"); SpecialActions.SpawnItem(questReward, pos, unit.Owner); } }
public void SetUpEnemies(Map map) { var types = map.enemyList; if (types.Count == 0) { return; } var enemyPlayer1 = PlayersManager.NeutralEnemyPlayer; for (var i = 0; i < ChunkManager.staticEnemyCount; i++) { var randomChunkPos = PlayersManager.GetRandomChunkPos(); PlayersManager.ClearPosesForPlayer(randomChunkPos, 1); var enemyType = types[Random.Range(0, types.Count)]; foreach (var entName in enemyType) { var setup = AI_Calculation.FindFreePosNearPos(ChunkNumber, randomChunkPos, false); SetupUnit(entName, new Vector3Int(setup.x, setup.y, 1), enemyPlayer1); } } }
public static bool AttackToIndex(GameUnit unit, Vector3Int posTarget) { var goodNeighbour = AI_Calculation.GetNearestNeighbour(unit.ChunkNumber, unit.CurrentPos, posTarget); if (goodNeighbour == Vector3Int.zero || !PathCalcManager.IsReaching(ChunkUtil.GetDovvner(unit.CurrentPos), goodNeighbour)) { return(false); } var path = PresetPath(unit, goodNeighbour); if (path == null) { return(false); } path.Add(new TilePosition( Util.Get3DPosByIndex(posTarget.x, posTarget.y, posTarget.z + 1) , posTarget)); // Debug.Log("Attack order from: " + ent); GameOrderManager.DoOrder(unit, path, OrderTypes.AttackOrder); return(true); }
public static void CastAbility(GameUnit unit, Vector3Int posTarget, Ability ability) { if (unit == null) { return; } if (posTarget == Vector3Int.zero) { return; } var goodNeighbour = AI_Calculation.FindFreePosNearPos(unit.ChunkNumber, ChunkUtil.GetUpper(posTarget), false); if (goodNeighbour == Vector3Int.zero) { Debug.Log("Neighbour is zero"); return; } var neighDist = Util.GetDistanceFromTo(goodNeighbour, posTarget); var dist = Util.GetDistanceFromTo(unit.CurrentPos, posTarget); if (dist > 1) { if (neighDist > 1) { Debug.Log("Error. Cant reach target"); return; } MoveToIndex(unit, ChunkUtil.GetDovvner(goodNeighbour)); } GameOrderManager.AddCastAbilityOrder(unit, new TilePosition(ChunkUtil.GetUpper(posTarget)), ability); }
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(); }
public static Vector3Int GetNearestFlagPos(Vector3Int pos) { var minDist = 1000; var targetPos = new Vector3Int(-1, -1, -1); foreach (var KV in FlagDict) { var tPos = new Vector3Int(KV.Key.x, KV.Key.y, 0); var dist = AI_Calculation.GetDistTo(pos, tPos, false); if (dist < minDist) { minDist = dist; targetPos = tPos; } } return(targetPos); }
static void HidingColor(GameEntity ent, GameEntity eUP) { var check = false; if (eUP == null) { var friends = AI_Calculation.GetGoodNeighbors (ChunkManager.CurrentChunk.ChunkNumber, ent.CurrentPos); foreach (var friend in friends) { var fUP = ChunkManager.CurrentChunk.GetGameObjectByIndex (ChunkUtil.GetUpper(friend)); if (fUP != null && !IsHided(fUP)) { check = true; } } } else { check = !IsHided(eUP); } if (!check) { var spD = ent.GetComponent <SpriteRenderer>(); spD.color = static_nonVisionColor; } else { Coloring.RecolorObject(ent, true); Coloring.RecolorObject(ChunkUtil.GetUpper(ent.CurrentPos), true); Coloring.RecolorObject(ChunkUtil.GetDovvner(ent.CurrentPos), true); } }
public static void Update(AbstractGameObject unit) { var EvolutionTime = unit.EvolutionTime; if (unit.State != EventManager.InProgressEvents.Stay) { ProgressUnitBar.RemoveProgressBar(unit); if (stackTarget.ContainsKey(unit)) { var target = stackTarget[unit]; var progressName = ProgressUnitBar.ProgressName.GroupEvolution; ProgressUnitBar.RemoveProgressBar(target, progressName); stackTarget.Remove(unit); stackTarget.Remove(target); } return; } var chunk = ChunkManager.GetChunkByNum(unit.ChunkNumber); //Solo evolution if (unit.SoloEvolution) { var progressName = ProgressUnitBar.ProgressName.SoloEvolution; var pos = unit.CurrentPos; if (!SecondaryGroundLvL.IsEmptyPos(chunk.ChunkNumber, pos) && ChunkUtil.IsAnyEntity(chunk.ChunkNumber, pos)) { ProgressUnitBar.RemoveProgressBar(unit, progressName); return; } ProgressUnitBar.Setup(unit, progressName, EvolutionTime); if (!ProgressUnitBar.IsReady(unit) || !ProgressUnitBar.IsThisProgressName(unit, progressName)) { return; } // Debug.Log("Original name = " + unit.OriginalName); if (SoloEvolutionDict.ContainsKey(unit.OriginalName) || unit.EvolutionNext.Length > 0) { var evoName = ""; evoName = unit.EvolutionNext.Length == 0 ? SoloEvolutionDict[unit.OriginalName] : unit.EvolutionNext; if (evoName.Length > 0) { // Debug.Log("Evolution name = " + evoName); var prevIndex = ChunkUtil.GetIndex(chunk.ChunkNumber, pos); var prevEnt = chunk.GetGameObjectByIndex(pos); var check = unit.PrefabIndex == prevIndex; unit.KillSelf(); if (!SecondaryGroundLvL.IsEmptyPos(chunk.ChunkNumber, pos)) { SecondaryGroundLvL.GetGroundEnt(chunk.ChunkNumber, pos).KillSelf(); SecondaryGroundLvL.RemovePos(chunk.ChunkNumber, pos); } var ent = chunk.PreSetupObject(evoName, pos, unit.Owner); if (GroupUtil.isBuilding(ent.Group) || GroupUtil.IsItem(ent.Group)) { chunk.SetupItem(ent, evoName, pos, unit.Owner); } else { chunk.SetupUnit(ent, evoName, pos, unit.Owner); } } } } //Group evolution else if (stackResult.ContainsKey(unit.OriginalName)) { var progressName = ProgressUnitBar.ProgressName.GroupEvolution; var friends = AI_Calculation.GetNearFriendUnits(chunk.ChunkNumber, unit, unit.CurrentPos); GameEntity target = null; if (stackTarget.ContainsKey(unit)) { target = stackTarget[unit]; } if (target != null && !friends.Contains(target as GameUnit)) { ProgressUnitBar.RemoveProgressBar(target, progressName); target = null; stackTarget.Remove(unit); } foreach (var obj in friends) { if (obj.Destroyed) { continue; } if (!stackResult[unit.OriginalName].ContainsKey(obj.OriginalName)) { continue; } if (obj.State != EventManager.InProgressEvents.Stay) { continue; } stackTarget[unit] = obj; target = obj; break; } if (target == null) { return; } ProgressUnitBar.Setup(unit, progressName, EvolutionTime); //EvolutionTimeList[target] = EvolutionTimeList[ent]; // UpdateProgressBar(target); if (!ProgressUnitBar.IsReady(unit) || !ProgressUnitBar.IsThisProgressName(unit, progressName)) { return; } var evoName = stackResult[unit.OriginalName][target.OriginalName]; var pos = unit.CurrentPos; var owner = unit.Owner; unit.KillSelf(); target.KillSelf(); var evoUnit = chunk.SetupUnit(evoName, pos, owner); QuestManager.OnEvolution(evoUnit); Coloring.RecolorObject(ChunkUtil.GetDovvner(unit.CurrentPos)); Coloring.RecolorObject(ChunkUtil.GetDovvner(target.CurrentPos)); UnitEvents.OnEvolution(evoUnit); PathCalcManager.CalculatePoint(ChunkUtil.GetDovvner(pos)); PathCalcManager.CalculatePoint(pos); } }