Пример #1
0
        /// <summary>
        /// 开启定时任务 每30秒生成小兵
        /// </summary>
        public void SpawnMinion()
        {
            MobaServer.LogInfo("----------- 开始生产小兵");
            List <DtoMinion> minions = new List <DtoMinion>();

            // 生成每队的小兵
            for (int i = 0; i < 3; i++)
            {
                // 产生1队小兵
                DtoMinion minion = MinionData.GetMinionCopy(m_MinionId--, MinionData.TypeId_Warrior);
                minion.Team = 1;
                TeamOneMinions.Add(minion.Id, minion);
                minions.Add(minion);

                // 生产2队小兵
                minion      = MinionData.GetMinionCopy(m_MinionId--, MinionData.TypeId_Warrior);
                minion.Team = 2;
                TeamTwoMinions.Add(minion.Id, minion);
                minions.Add(minion);
            }

            // 告诉客户端出兵了
            Dictionary <byte, object> data = new Dictionary <byte, object>();

            data.Add((byte)ParameterCode.MinionArray, JsonMapper.ToJson(minions.ToArray()));
            Brocast(OperationCode.SpawnMinion, data);

            // 等待30秒再次产生小兵
            StartSchedule(DateTime.UtcNow.AddSeconds(30), SpawnMinion);
        }
Пример #2
0
        private void GenerateEnemyMinion(MinionData minionData, Minion prefab)
        {
            Minion minion = Instantiate(prefab, Data.GetEnemyCastlePosition(),
                                        Data.GetEnemyFacing());

            minion.Initialize(minionData, MinionSide.Enemy, prefab.name);
            EnemyMinions.Add(minion);
        }
Пример #3
0
    /// <summary>
    /// Spawn a Minion From its Identifier
    /// </summary>
    /// <param name="entityIdentifier">Entity Identifier to spawn</param>
    /// <param name="pos">Position</param>
    /// <param name="rot">Rotation</param>
    public AIEntity SpawnMinion(string entityIdentifier, Vector3 pos, Quaternion rot)
    {
        MinionData def         = GameDataManager.instance.GetEntityData(entityIdentifier) as MinionData;
        GameObject obj         = SpawnManager.instance.InstantiatePool(def.m_prefab, pos, rot);
        AIEntity   iaComponent = obj.GetComponent <AIEntity>();

        iaComponent.InitializeEntity(def, Guid.NewGuid().ToString());
        NetworkServer.Spawn(obj);
        return(iaComponent);
    }
Пример #4
0
    //Draw CharacterData in the editor window
    public override MobaEntityData DrawEditor(GUISkin skin)
    {
        MinionData definiton = base.DrawEditor(skin) as MinionData;

        GUILayout.BeginHorizontal();
        GUILayout.Label("Aggro Range", skin.label);
        float aggroRange = EditorGUILayout.FloatField(m_aggroRange, skin.textField, GUILayout.Width(200), GUILayout.Height(20));

        definiton.m_aggroRange = aggroRange;
        GUILayout.EndHorizontal();
        return(definiton);
    }
Пример #5
0
 public override void Initialize(MobaEntity entity)
 {
     m_entity = entity as AIEntity;
     if (m_entity.isServer)
     {
         MinionData iaDef = m_entity.EntityData as MinionData;
         m_aggroRange = iaDef.m_aggroRange;
         InitializeCircuit();
         ChangeState(IaState.idle);
         Initialized = true;
         m_ability   = entity.EntityAbilities.GetAbility(EAttackType.Basic);
         m_entity.OnDeathCallBack += MinionKilled;
     }
 }
Пример #6
0
 public void Initialize(Player player)
 {
     originalSize     = this.transform.localScale;
     _player          = player;
     OnMap            = true;
     _minionAnimation = gameObject.GetComponent <Animation>();
     if (Data == null)
     {
         Data = new MinionData();
     }
     ShouldUpdateLookAtRot                      = false;
     _lookAtQuaternion                          = transform.rotation;
     _minionAnimation["Walk"].speed             = Data.GetSpeed() / 5.0f;
     _minionAnimation[DeathAnimationName].speed = 2;
     _deathDelay = _minionAnimation[DeathAnimationName].length / 2;
 }
Пример #7
0
        private void GenerateMinion(MinionData minionData, Minion prefab)
        {
            var goldManager = GameManager.Ctx.GoldManager;

            if (goldManager.DecreaseGold(minionData.Price) == false)
            {
                return;
            }

            Minion minion = Instantiate(prefab, Data.GetPlayerCastlePosition(),
                                        Data.GetPlayerFacing());

            minion.Initialize(minionData, MinionSide.Player, prefab.name);
            PlayerMinions.Add(minion);
            audioSource.PlayOneShot(generate);
        }
Пример #8
0
    public void OnPointerDown(PointerEventData eventData)
    {
        if (inDeck)
        {
            //Get the Top Cards
            List <MinionData> data = UIManager.Instance.GetTopCardsFromDeck(minionClass);
            //Get the Card Group
            GameObject cardGroup = GameManager.Instance.shop.gameObject.GetComponent <ShopController>().cardGroup;

            //Spawn Card
            foreach (MinionData md in data)
            {
                GameObject tmp = GameManager.Instance.SpawnCard(cardGroup.transform, md, true);
                tmp.AddComponent <PeekShopListener>();
                tmp.GetComponent <PeekShopListener>().inDeck      = false;
                tmp.GetComponent <PeekShopListener>().minionClass = minionClass;
                tmp.GetComponent <PeekShopListener>().card        = this.card;
            }

            //Destroy Listener Scripts
            card.GetComponent <PeekShopEventStarter>().DestroyPeekShopListener();
            GameManager.Instance.moveButton.interactable = true;
            GameManager.Instance.moveButton.onClick.AddListener(card.GetComponent <PeekShopEventStarter>().MoveCardsToBottom);
        }
        else
        {
            CardVisual cv     = eventData.pointerCurrentRaycast.gameObject.transform.parent.gameObject.GetComponent <CardVisual>();
            MinionData minion = cv.Md;

            if (tapped)
            {
                card.GetComponent <PeekShopEventStarter>().moveCards.Remove(minion);
                eventData.pointerCurrentRaycast.gameObject.transform.parent.gameObject.GetComponent <CardVisual>().particleGlow.gameObject.SetActive(false);
                GameManager.Instance.ChangeCardColour(eventData.pointerCurrentRaycast.gameObject.transform.parent.gameObject, cv.cardBackground.color);
                tapped = false;
            }
            else
            {
                card.GetComponent <PeekShopEventStarter>().moveCards.Add(minion);
                //GameManager.Instance.ChangeCardColour(eventData.pointerCurrentRaycast.gameObject.transform.parent.gameObject, Color.cyan);
                eventData.pointerCurrentRaycast.gameObject.transform.parent.gameObject.GetComponent <CardVisual>().particleGlow.gameObject.SetActive(true);
                tapped = true;
            }
        }
    }
Пример #9
0
    public void RegisterMinion(int minionID, MinionType minionType)
    {
        MinionData newMinion = new MinionData();

        newMinion.EntityId   = minionID;
        newMinion.minionType = minionType;
        if (minionType == MinionType.Skeleton)
        {
            newMinion.maxHP = 20;
        }
        else if (minionType == MinionType.MushroomMan)
        {
            newMinion.maxHP = 10;
        }

        newMinion.SetInitialValues();

        _activeMinions.Add(newMinion);
    }
Пример #10
0
        public MinionData[] GetMinionDataForCurrentWave()
        {
            var currentWaveData     = _waveInfos[CurrentWave % _waveInfos.Count];
            var waveMinionTypeCount = currentWaveData.Type.Length;
            var waveMinions         = new MinionData[waveMinionTypeCount];

            //Multipliers are 1 as long as waveInfo.count > CurrentWave
            BigIntWithUnit multiplierLife  = 1;
            BigIntWithUnit multiplierMoney = 1;

            if (CurrentWave / _waveInfos.Count >= 1)
            {
                multiplierLife  = UpgradeManager.MinionLifeMultiplier * (CurrentWave / _waveInfos.Count);
                multiplierMoney = UpgradeManager.MinionDeathRewardMultiplier * (CurrentWave / _waveInfos.Count);
            }

            for (var i = 0; i < waveMinionTypeCount; i++)
            {
                waveMinions[i] = new MinionData(currentWaveData.Life[i] * multiplierLife, currentWaveData.CurrencyOnDeath[i] * multiplierMoney, currentWaveData.Speed[i]);
            }

            return(waveMinions);
        }
Пример #11
0
 private void FillData(MinionData minionData)
 {
     this.health = minionData.health;
     this.damage = minionData.damage;
     this.armour = minionData.armour;
 }
Пример #12
0
    public override void OnInspectorGUI()
    {
        EditorGUILayout.LabelField("Battle Generator Container", _title);
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Leaders", _headerlv1);
        if (_bGContainer.leaders != null && _bGContainer.leaders.Count > 0)
        {
            for (int i = 0; i < _bGContainer.leaders.Count; i++)
            {
                _bGContainer.leaders[i] = (GameObject)EditorGUILayout.ObjectField("Leader " + i, _bGContainer.leaders[i], typeof(GameObject), false);
            }
        }
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Minions", _headerlv1);
        minionfoldedOut1 = EditorGUILayout.Foldout(minionfoldedOut1, "Minion Group 1", true);
        //MinionGroup currMinionGroup;
        List <GameObject> currMinionGroup;
        FlockingGroup     currFlockingGroup;

        if (minionfoldedOut1)
        {
            //currMinionGroup = _bGContainer.minionGroups[0];
            currMinionGroup = _bGContainer.Minions[0];
            //for (int j = 0; j < currMinionGroup.minions.Count; j++)
            for (int j = 0; j < currMinionGroup.Count; j++)
            {
                currMinionGroup[j] = (GameObject)EditorGUILayout.ObjectField("Minion " + j, currMinionGroup[j], typeof(GameObject), false);
            }
            var rect = EditorGUILayout.GetControlRect(true, 1);
            EditorGUI.DrawRect(rect, Color.gray);
            currFlockingGroup = _bGContainer.flockingGroup[0];
            currFlockingGroup.areaPosition = EditorGUILayout.Vector3Field("Area Position", currFlockingGroup.areaPosition);
            EditorGUILayout.LabelField("Area Size");
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("W");
            currFlockingGroup.areaSize.x = EditorGUILayout.FloatField(currFlockingGroup.areaSize.x);
            GUILayout.Label("L");
            currFlockingGroup.areaSize.y = EditorGUILayout.FloatField(currFlockingGroup.areaSize.y);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.LabelField("Quantity");
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.IntField(currFlockingGroup.quantityRow);
            //EditorGUILayout.LabelField("X");
            GUILayout.Label("X");
            EditorGUILayout.IntField(currFlockingGroup.quantityColumn);
            EditorGUILayout.EndHorizontal();
        }
        minionfoldedOut2 = EditorGUILayout.Foldout(minionfoldedOut2, "Minion Group 2", true);
        if (minionfoldedOut2)
        {
            //currMinionGroup = _bGContainer.minionGroups[1];
            currMinionGroup = _bGContainer.Minions[1];
            //for (int j = 0; j < currMinionGroup.minions.Count; j++)
            for (int j = 0; j < currMinionGroup.Count; j++)
            {
                currMinionGroup[j] = (GameObject)EditorGUILayout.ObjectField("Minion " + j, currMinionGroup[j], typeof(GameObject), false);
            }
            var rect = EditorGUILayout.GetControlRect(true, 1);
            EditorGUI.DrawRect(rect, Color.gray);
            currFlockingGroup = _bGContainer.flockingGroup[1];
            currFlockingGroup.areaPosition = EditorGUILayout.Vector3Field("Area Position", currFlockingGroup.areaPosition);
            EditorGUILayout.LabelField("Area Size");
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("W");
            currFlockingGroup.areaSize.x = EditorGUILayout.FloatField(currFlockingGroup.areaSize.x);
            GUILayout.Label("L");
            currFlockingGroup.areaSize.y = EditorGUILayout.FloatField(currFlockingGroup.areaSize.y);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.LabelField("Quantity");
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.IntField(currFlockingGroup.quantityRow);
            GUILayout.Label("X");
            EditorGUILayout.IntField(currFlockingGroup.quantityColumn);
            EditorGUILayout.EndHorizontal();
        }


        EditorGUILayout.BeginHorizontal();
        GUI.color = Color.yellow;
        if (GUILayout.Button("Load Container"))
        {
            OpenLoader();
        }
        GUI.color = Color.green;
        if (GUILayout.Button("Save container"))
        {
            var scriptable = ScriptableObject.CreateInstance <BGContainerSave>();
            var leaders    = scriptable.leaders;
            var minions    = scriptable.minions;
            var tsso       = scriptable.ts;

            for (int i = 0; i < _bGContainer.leaders.Count; i++)
            {
                var currLeader = _bGContainer.leaders[i];
                var currTs     = tsso[i];

                leaders[i]            = PrefabUtility.GetCorrespondingObjectFromSource(currLeader);
                currTs.leaderPosition = currLeader.transform.position;
                currTs.leaderHealth   = currLeader.GetComponent <IHealth>().GetHealth();
                currTs.leaderSpeed    = currLeader.GetComponent <ISpeed>().GetSpeed();
                currLeader.GetComponent <IMelee>().GetMeleeData(out currTs.leaderMeleeDamage, out currTs.leaderMeleeRate, out currTs.leaderMeleeDistance);
                currLeader.GetComponent <IShooter>().GetShootData(out currTs.leaderShootDamage, out currTs.leaderShootRate, out currTs.leaderShootDistance);
                currLeader.GetComponent <IVision>().GetVisionData(out currTs.leaderVisionDistance, out currTs.leaderVisionRangeAngles);

                tsso[i] = currTs;
            }
            for (int i = 0; i < _bGContainer.Minions.Count; i++)
            {
                var minionGroup   = _bGContainer.minionGroups[i];
                var flockingGroup = _bGContainer.flockingGroup[i];
                var currTs        = tsso[i];

                for (int j = 0; j < minionGroup.minions.Count; j++)
                {
                    var minionData = new MinionData
                    {
                        minion   = PrefabUtility.GetCorrespondingObjectFromSource(minionGroup.minions[j]),
                        position = minionGroup.minions[j].transform.position
                    };
                    minions[i].Add(minionData);
                }

                currTs.minionSpawnAreaPosition = flockingGroup.areaPosition;
                currTs.minionSpawnAreaWidth    = flockingGroup.areaSize.x;
                currTs.minionSpawnAreaLength   = flockingGroup.areaSize.y;
                currTs.minionsQuantityRow      = flockingGroup.quantityRow;
                currTs.minionsQuantityColumn   = flockingGroup.quantityColumn;
                currTs.minionHealth            = minionGroup.minions[0].GetComponent <IHealth>().GetHealth();
                currTs.minionSpeed             = minionGroup.minions[0].GetComponent <ISpeed>().GetSpeed();
                minionGroup.minions[0].GetComponent <IMelee>().GetMeleeData(out currTs.minionMeleeDamage, out currTs.minionMeleeRate, out currTs.minionMeleeDistance);
                minionGroup.minions[0].GetComponent <IShooter>().GetShootData(out currTs.minionShootDamage, out currTs.minionShootRate, out currTs.minionShootDistance);
                minionGroup.minions[0].GetComponent <IVision>().GetVisionData(out currTs.minionVisionDistance, out currTs.minionVisionRangeAngles);
                currTs.flockEntityRadius               = minionGroup.minions[0].GetComponent <FlockEntity>().radius;
                currTs.flockEntityMask                 = minionGroup.minions[0].GetComponent <FlockEntity>().maskEntity;
                currTs.flockLeaderBehaviourWeight      = minionGroup.minions[0].GetComponent <LeaderBehavior>().leaderWeight;
                currTs.flockLeaderBehaviourMinDistance = minionGroup.minions[0].GetComponent <LeaderBehavior>().minDistance;
                currTs.flockAlineationBehaviourWeight  = minionGroup.minions[0].GetComponent <AlineationBehavior>().alineationWeight;
                currTs.flockSeparationBehaviourWeight  = minionGroup.minions[0].GetComponent <SeparationBehavior>().separationWeight;
                currTs.flockSeparationBehaviourRange   = minionGroup.minions[0].GetComponent <SeparationBehavior>().range;
                currTs.flockCohesionBehaviourWeight    = minionGroup.minions[0].GetComponent <CohesionBehavior>().cohesionWeight;
                currTs.flockAvoidanceBehaviourWeight   = minionGroup.minions[0].GetComponent <AvoidanceBehavior>().avoidanceWeight;
                currTs.flockAvoidanceBehaviourMask     = minionGroup.minions[0].GetComponent <AvoidanceBehavior>().mask;
                currTs.flockAvoidanceBehaviourRange    = minionGroup.minions[0].GetComponent <AvoidanceBehavior>().range;

                tsso[i] = currTs;
            }
            scriptable.leaders = leaders;
            scriptable.minions = minions;
            scriptable.ts      = tsso;

            if (!AssetDatabase.IsValidFolder(_folderPath))
            {
                var    stripedPath  = _folderPath.Split('/');
                string parentFolder = "";
                for (int i = 0; i < stripedPath.Length - 1; i++)
                {
                    if (i > 0)
                    {
                        parentFolder += "/";
                    }

                    parentFolder += stripedPath[i];
                }

                AssetDatabase.CreateFolder(parentFolder, stripedPath[stripedPath.Length - 1]);
            }
            var path = _folderPath + "/" + _fileName;
            path = AssetDatabase.GenerateUniqueAssetPath(path);
            AssetDatabase.CreateAsset(scriptable, path);
            Undo.RecordObject(scriptable, "SO Container creado");
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
        EditorGUILayout.EndHorizontal();
    }
Пример #13
0
    private void OnEvent(EventData photonData)
    {
        byte eventCode = photonData.Code;

        if (eventCode == TAP_ANIMATION_SYNC_EVENT)
        {
            object[] data  = (object[])photonData.CustomData;
            int      index = (int)data[0];

            Transform card = GameManager.Instance.GetActiveMinionZone(true).GetChild(index);

            CardVisual cv = card.GetComponent <CardVisual>();
            cv.IsTapped = true;
            cv.ChangeTappedAppearance();

            DelayCommand dc = new DelayCommand(card, 2f);
            dc.AddToQueue();

            StartCoroutine(ShowEffectAnimation());

            cv.AdjustHealth(1, false);
        }
        else if (eventCode == ANIMATION_SYNC_EVENT)
        {
            object[] data  = (object[])photonData.CustomData;
            int      index = (int)data[0];

            Transform    card = GameManager.Instance.GetActiveMinionZone(true).GetChild(index);
            DelayCommand dc   = new DelayCommand(card, 2f);
            dc.AddToQueue();

            StartCoroutine(ShowEffectAnimation());
        }
        else if (eventCode == PEEK_SHOP_SYNC_EVENT)
        {
            object[]          data      = (object[])photonData.CustomData;
            string            cardClass = (string)data[0];
            int[]             cards     = (int[])data[1];
            List <MinionData> cardList  = new List <MinionData>();

            foreach (int id in cards)
            {
                MinionData minion = Resources.Load("Minions/" + id) as MinionData;
                cardList.Add(minion);
            }

            UIManager.Instance.MoveTopCardsToBottom(cardClass, cardList);
        }
        else if (eventCode == ADJUST_HEALTH_SYNC_EVENT)
        {
            object[] data               = (object[])photonData.CustomData;
            int      position           = (int)data[0];
            int      healthAmount       = (int)data[1];
            bool     increaseOrDecrease = (bool)data[2];
            bool     activeOrInactive   = (bool)data[3];

            Transform  card = GameManager.Instance.GetActiveMinionZone(activeOrInactive).GetChild(position);
            CardVisual cv   = card.GetComponent <CardVisual>();
            cv.AdjustHealth(healthAmount, increaseOrDecrease);
        }
        else if (eventCode == ADJUST_DAMAGE_SYNC_EVENT)
        {
            object[] data               = (object[])photonData.CustomData;
            int      position           = (int)data[0];
            int      damageAmount       = (int)data[1];
            bool     increaseOrDecrease = (bool)data[2];

            Transform  card = GameManager.Instance.GetActiveMinionZone(true).GetChild(position);
            CardVisual cv   = card.GetComponent <CardVisual>();
            cv.AdjustDamage(damageAmount, increaseOrDecrease);
        }
        else if (eventCode == ADJUST_GOLD_SYNC_EVENT)
        {
            object[] data   = (object[])photonData.CustomData;
            int      amount = (int)data[0];

            GameManager.Instance.ActiveHero(true).AdjustGold(2, true);
        }
        else if (eventCode == ADJUST_EXP_SYNC_EVENT)
        {
            object[] data   = (object[])photonData.CustomData;
            int      amount = (int)data[0];

            GameManager.Instance.ActiveHero(true).EnemyGainExp(2);
        }
        else if (eventCode == ADJUST_HERO_HEALTH_SYNC_EVENT)
        {
            object[] data   = (object[])photonData.CustomData;
            int      amount = (int)data[0];

            GameManager.Instance.ActiveHero(false).AdjustHealth(amount, false);
        }
        else if (eventCode == DRAW_DISCARD_SYNC_EVENT)
        {
            object[] data     = (object[])photonData.CustomData;
            int      position = (int)data[0];

            Transform card = GameManager.Instance.GetActiveHand(true).GetChild(position);
            GameManager.Instance.DiscardCard(card.gameObject);
        }
        else if (eventCode == ACTIVATE_SILENCE_SYNC_EVENT)
        {
            object[] data     = (object[])photonData.CustomData;
            int      position = (int)data[0];

            Transform  card = GameManager.Instance.GetActiveMinionZone(false).GetChild(position);
            CardVisual cv   = card.GetComponent <CardVisual>();
            cv.ActivateSilence(true);
        }
        else if (eventCode == ADJUST_DISCARD_SYNC_EVENT)
        {
            object[] data     = (object[])photonData.CustomData;
            bool     increase = (bool)data[0];

            GameManager.Instance.ActiveHero(false).AdjustEnemyDiscard(increase);
        }
        else if (eventCode == ANIMATION_MESSAGE_SYNC_EVENT)
        {
            object[] data    = (object[])photonData.CustomData;
            string   message = (string)data[0];

            StartCoroutine(ShowEffectAnimation(message));
        }
        else if (eventCode == COMBAT_EFFECT_SYNC_EVENT)
        {
            object[] data            = (object[])photonData.CustomData;
            int      position        = (int)data[0];
            bool     enableOrDisable = (bool)data[1];
            string   to = (string)data[2];

            Transform card;
            if (to.Equals("Hand"))
            {
                card = GameManager.Instance.GetActiveHand(true).GetChild(position);
            }
            else
            {
                card = GameManager.Instance.GetActiveMinionZone(true).GetChild(position);
            }

            CardVisual cv = card.GetComponent <CardVisual>();

            cv.IsCombatEffectActivated = enableOrDisable;
            cv.CombatEffectActivated(enableOrDisable);
        }
    }