/// <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); }
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); }
/// <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); }
//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); }
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; } }
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; }
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); }
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; } } }
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); }
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); }
private void FillData(MinionData minionData) { this.health = minionData.health; this.damage = minionData.damage; this.armour = minionData.armour; }
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(); }
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); } }