Example #1
0
        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));
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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();
 }
Example #7
0
        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);
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
            }
        }