public void SetEvent(MonsterBase monsterBase, Action <MonsterBase> action = null) { this.monsterBase = monsterBase; // image.sprite = monsterBase.monster.Image; image.sprite = monsters.GetRandomElement().Image; this.action = action; }
/// <summary> /// Get the monster that is closest to reaching the goal in given radius of position /// </summary> /// <param name="position">Position to check</param> /// <param name="radius">Radius monster must be in</param> /// <returns>Monster with highest priority or null</returns> public MonsterBase getHighestPriorityMonster(Vector2 position, float radius) { float radSqr = radius * radius; // The monster currently closest to reaching the goal. This just works off how // many tiles the monster has travelled as opposed to how close they are too the goal MonsterBase priorityMonster = null; float tilesTravelled = 0f; // Iterate each monster and find the closest one foreach (MonsterBase monster in m_monsters) { Vector2 dis = (Vector2)monster.transform.position - position; // Monster needs to be in radius for it to be considered float magSqr = dis.sqrMagnitude; if (magSqr <= radSqr && monster.TilesTravelled > tilesTravelled) { priorityMonster = monster; tilesTravelled = monster.TilesTravelled; } } return(priorityMonster); }
public override void Initialize() { aiMoveScript = GetComponent <Pathfinding.AIPath>(); playerObject = HeroGeneralManager.instance.heroObject; myAnimator = GetComponent <Animator>(); myBase = GetComponent <MonsterBase>(); if (myBase == null) { Debug.LogError("myBase is null."); } myDataSet = MonsterDataManager.instance.ThrowDataIntoContainer((int)MonsterDataManager.MONSTER.ICE_ELEMENTAL); _id = (int)myDataSet["ID"]; _health = (int)myDataSet["Health"]; _movingSpeed = (float)myDataSet["MovingSpeed"]; aiMoveScript.maxSpeed = _movingSpeed; _meleeDamage = (int)myDataSet["MeleeDamage"]; _meleeCoolDown = (int)myDataSet["MeleeCoolDown"]; _skill1Damage = (int)myDataSet["Skill1Damage"]; _Skill1CoolDown = (int)myDataSet["Skill1CoolDown"]; _isMeleeAttackReady = true; _isSkill1AttackReady = true; }
/// <summary> /// Implementation for destroying a monster /// </summary> /// <param name="monster">Monster to destroy</param> /// <param name="bImmediate">If we can immediately destroy the monster</param> private void destroyMonsterImpl(MonsterBase monster, bool bImmediate) { if (PhotonNetwork.IsConnected && !monster.photonView.IsMine) { return; } if (bImmediate) { if (!m_tickingMonsters) { m_monsters.Remove(monster); PhotonNetwork.Destroy(monster.gameObject); if (onMonsterDestroyed != null) { onMonsterDestroyed.Invoke(); } return; } Debug.LogError("Can't immediately destroy monster as all monsters are being ticked! Placing into destroy queue"); } // Only add monster once to prevent destroy being called multiple times // Not expecting this to be long, so we use a regular find if (!m_destroyedMonsters.Contains(monster)) { m_destroyedMonsters.Add(monster); } }
private void Battle(User user, RecivedMessage messageRecived) { if (!UseItem(user, messageRecived)) { SendMessage(user, "Чтобы что-то использовать, надо сначала этим чем-то завладеть"); return; } using (var stats = new StatsContext(user.Random, GetRoomVariables(user))) { if (stats.Stats.Health <= 0) { // Won! MonsterBase.MonsterKilled(user, this); SendMessage(user, "Монстр не смог такого перенести и умер"); user.RoomManager.Leave(); return; } SwitchAction(user, SelectTarget); SendMessage(user, "А монстр то ещё жив! Постарайтесь это исправить, пока ещё можете."); SendMessage(user, $"Вы оставили монстру {stats.Stats.Health.Format()} здоровья, а он вам его попытался понизить на {stats.Stats.Damage.Format()}"); SendMessage(user, "Как будем исправлять ситуацию?", GetButtons(user)); user.Info.MakeDamage(stats.Stats.Damage); } }
public MonsterBase GetPooledObject(Vector3 Position) { for (int i = 0; i < pooledObjects.Count; i++) { if (!pooledObjects[i].gameObject.activeInHierarchy) { pooledObjects[i].transform.position = Position; pooledObjects[i].gameObject.SetActive(true); pooledObjects[i].behaviourType = EBehaviourType.NORMAL; // In the cast number inside the parameter of Random.Range, + 1 is added since Linq.Max returns 1 less than the actual amount of entries. //pooledObjects[i].monsterType = (EMonsterType)Random.Range(1, (int)System.Enum.GetValues(typeof(EMonsterType)).Cast<EMonsterType>().Max() + 1); //pooledObjects[i].SetUpMonster(pooledObjects[i].monsterType); return(pooledObjects[i]); } } MonsterBase tmpObj = Instantiate(prefab[Random.Range(0, prefab.Count)], Position, Quaternion.identity); //var aux = (EMonsterType)Random.Range(1, (int)System.Enum.GetValues(typeof(EMonsterType)).Cast<EMonsterType>().Max()); //tmpObj.monsterType = aux; //tmpObj.SetUpMonster(aux); tmpObj.hideFlags = flag; pooledObjects.Add(tmpObj); return(tmpObj); }
public override void Initialize() { aiMoveScript = GetComponent <Pathfinding.AIPath>(); playerObject = HeroGeneralManager.instance.heroObject; attackCollider = transform.GetChild(1).gameObject; attackColliderScript = attackCollider.GetComponent <BoxCollider2D>(); myMeleeAttackRange = transform.GetChild(3).gameObject; myAnimator = GetComponent <Animator>(); aiDestinationSetter = GetComponent <Pathfinding.AIDestinationSetter>(); aiDestinationSetter.target = playerObject.transform; myBase = GetComponent <MonsterBase>(); if (myBase == null) { Debug.LogError("myBase is null"); } myDataSet = MonsterDataManager.instance.ThrowDataIntoContainer((int)MonsterDataManager.MONSTER.TIGER); myColliderSet = CSVReader.Read("CSV/Monster/Stage2/ReturnHero_tiger_AttackCollider"); _id = (int)myDataSet["ID"]; _health = (int)myDataSet["Health"]; _movingSpeed = (float)myDataSet["MovingSpeed"]; _meleeDamage = (int)myDataSet["MeleeDamage"]; _meleeCoolDown = (int)myDataSet["MeleeCoolDown"]; _isMeleeAttackReady = true; //Debug.Log("Initialized : " + _id + ", " + _health + ", " + _movingSpeed + ", " + _meleeDamage + ", " + _meleeCoolDown); //aiMoveScript.maxSpeed = _movingSpeed; }
static void OnSpawn(int msgID, BinReader data) { uint charID = data.ReadUInt32(); uint creatureID = data.ReadUInt32(); int displayID = data.ReadInt32(); WorldClient client = WorldServer.GetClientByCharacterID(charID); if (client == null) { return; } DBCreature creature = (DBCreature)DBManager.GetDBObject(typeof(DBCreature), creatureID); MonsterBase unit = new MonsterBase(creature); unit.Position = client.Player.Position; unit.Facing = client.Player.Facing; unit.DisplayID = displayID; unit.MaxHealth = unit.Health = 100; unit.MaxPower = unit.Power = 100; unit.PowerType = POWERTYPE.MANA; unit.Level = new Random().Next(10); unit.Faction = 0; client.Player.MapTile.Map.Enter(unit); unit.StartGetNodes(); }
public void AddtoMonsterList(MonsterBase monster) { if (monsterList == null) { return; } monsterList.Add(monster); }
public void Damage() { if (currentTarget != null) { MonsterBase mons = currentTarget.GetComponent <MonsterBase>(); mons.OnDamage(playerInfo.atk); } }
private void setShieldEnabled(bool bEnable) { if (bEnable != m_shieldActive) { // Can't active shield while on cooldown if (bEnable && m_cooldownActive) { return; } m_shieldActive = bEnable; if (m_shieldObject) { m_shieldObject.SetActive(m_shieldActive); } if (m_monster) { m_monster.setCanBeDamaged(!m_shieldActive); } if (m_shieldActive) { if (m_collisionRoutine == null) { m_collisionRoutine = StartCoroutine(checkCollisionRoutine()); } Invoke("onShieldExpired", m_shieldDuration); } // Play sounds { // TODO: Make a base class for monster scripts (Like TowerScripts). This would handle getting monster on awake // for now MonsterBase monster = GetComponent <MonsterBase>(); if (monster) { if (m_shieldActive) { if (m_activeSound) { SoundEffectsManager.playSoundEffect(m_activeSound, monster.Board); } } else { if (m_deactiveSound) { SoundEffectsManager.playSoundEffect(m_deactiveSound, monster.Board); } } } } } }
// each monster is constructed from a monster info and a level. // this way you can have as many of the same monster as you want. public Monster(MonsterBase monsterBase, int level) { this.monsterBase = monsterBase; this.level = level; this.name = monsterBase.name; this.moveSet = monsterBase.moveSet; ResetMonsterStats(); }
/// <summary> /// Destroys a monster, removing from the board it belongs to /// </summary> /// <param name="monster">Monster to destroy</param> /// <param name="bImmediate">If we are able to immediately destroy the monster</param> public static void destroyMonster(MonsterBase monster, bool bImmediate = true) { BoardManager board = monster ? monster.Board : null; if (board && board.MonsterManager) { board.MonsterManager.destroyMonsterImpl(monster, bImmediate); } }
private void SwitchCurrentMonster(MonsterBase Monster) { Debug.Log("Saving current monster named " + currentMonster.name); savedMonster = currentMonster; Monster.SetNewBehaviour(EBehaviourType.WAITING); Monster.transform.SetParent(waitParent); Monster.transform.position = waitParent.position; Monster.sr.color = waitColor; }
private void giveBoost(MonsterBase monster) { m_monstersInRange.Add(monster); // Should be valid, check to be sure if (monster) { monster.addTravelDuration(-m_removeDuration); } }
private void removeBoost(MonsterBase monster) { m_monstersInRange.Remove(monster); // Could possibly be null if (monster) { monster.addTravelDuration(m_removeDuration); } }
public void SpawnRandomMonsterInModule(Vector3 spawnPos) { MonsterBase spawnMonster = MonsterManager.Instance.SpawnSpecificMonster(GetRandomMonster(), spawnPos); if (spawnMonster != null && monsterList != null) { spawnMonster.SetMapModule(this); AddtoMonsterList(spawnMonster); } }
// 1 = 평범한 거북이 상태 // 2 = 정지된 등껍질 상태 // 3 = 움직이는 등껍질 상태 // Start is called before the first frame update void Start() { spriteRender = gameObject.GetComponent <SpriteRenderer>(); player = GameObject.Find("Player").GetComponent <MovePlayer>(); move = GameObject.Find("Turtle").GetComponent <Move>(); mon = GameObject.Find("Turtle").GetComponent <MonsterBase>(); }
// Internal function. Adds a monster that can be queried but should not be destroyed by this client public void addExternalMonster(MonsterBase monster) { if (m_tickingMonsters) { Debug.LogError("Adding external monster while ticking monsters. This shouldn't happen"); return; } m_monsters.Add(monster); }
public void OnSpawn() { MonsterBase mon = ABUGameManager.I.MonsterPool.GetMonster(_spawnType); Vector3 homePos = transform.position; homePos.y = transform.position.y; mon.transform.position = homePos; mon.InitMonster(homePos); }
public void PossessEnemy(MonsterBase Monster) { if (currentMonster == null) { return; } Debug.Log("Changing current monster named " + currentMonster.name); Monster.SetNewBehaviour(EBehaviourType.POSSESSED); Monster.transform.SetParent(enemyParent); Monster.transform.position = enemyParent.position; Monster.sr.color = playerColor; }
//슬라임용 public MonsterBase SpawnSpecificMonsterInModule(MonsterName name, Vector3 spawnPos) { MonsterBase spawnMonster = MonsterManager.Instance.SpawnSpecificMonster(name, spawnPos); if (spawnMonster != null && monsterList != null) { spawnMonster.SetMapModule(this); AddtoMonsterList(spawnMonster); } return(spawnMonster); }
// Monster Constructor. public Monster(MonsterBase pBase) { Base = pBase; HP = MaxHp; //Generate Moves base on level Moves = new List <Move>(); //Move is a class that contains moves which will be assigned to each monster foreach (var move in Base.LearnableMoves) //loop through the learnable moves of a pokemon and check if it matches level { Moves.Add(new Move(move.Base)); } }
public AudioClip m_healSound; // Sound to play when healing // Begin AbilityActionBase Interface protected override void startAbilityActionImpl() { m_monsterToHeal = m_board.MonsterManager.getHoveredMonster((Vector2)m_position); if (m_monsterToHeal) { StartCoroutine(healRoutine()); } else { finishAbilityAction(); } }
public void Divide() { for (int i = 0; i < babyNum; i++) { MonsterBase slime = parentModule.SpawnSpecificMonsterInModule(monsterName, this.transform.position); Slime babySlime = slime as Slime; if (babySlime != null) { babySlime.CanDivide = false; babySlime.transform.localScale = babySlime.transform.localScale * 0.5f; } } }
public override void Construction() { AllMonster = new List <MonsterBase>(); base.Construction(); for (int i = 0; i < 5; i++) { MonsterBase monsterBase = new MonsterBase(); monsterBase.Id = i; monsterBase.Name = "monster" + i; monsterBase.PrefabPath = ConStr.ALERTPRE; AllMonster.Add(monsterBase); } }
void Update() { MonsterBase target = null; if (m_targetsMonsters && !m_disableRotation) { target = findTarget(m_targetRadius); if (target) { Transform pivotTransform = transform; if (m_pivot) { pivotTransform = m_pivot; } // Direction to face Vector2 dir = (target.transform.position - pivotTransform.position).normalized; float rot = Mathf.Rad2Deg * Mathf.Atan2(dir.y, dir.x); // Instantly rotate to face target (see comment for m_rotScaler) pivotTransform.localEulerAngles = m_rotScaler * rot; } } if (PhotonNetwork.IsConnected && !photonView.IsMine) { return; } if (m_isDelayed) { m_delayedTime += Time.deltaTime; } // Tower might not be ready to perform an action yet if (!shouldPerformAction(target)) { return; } // Can we perform an action yet? float waitTillTime = m_lastFireTime + m_fireRate + m_delayedTime; if (Time.time >= waitTillTime) { performAction(target); m_lastFireTime = Time.time; m_delayedTime = 0f; } }
private void Initialize() { // Initialize rails using the values from GameManager rails[0] = new Vector3(transform.position.x, GameManager.Instance.rails[0].y, transform.position.z); rails[1] = new Vector3(transform.position.x, GameManager.Instance.rails[1].y, transform.position.z); rails[2] = new Vector3(transform.position.x, GameManager.Instance.rails[2].y, transform.position.z); // Initialize ghost var ghost = GameManager.Instance.GenerateGhost(); //ghost.monsterType = EMonsterType.GHOST; currentMonster = ghost; PossessEnemy(ghost); }
public override BehaviorNode BuildAI(MonsterBase monster) { SetMonster(monster); if (debugPrint) { GD.Print("Building AI for " + monster.Name); } // Actions are in reverse order as we need to construct the tree // from the bottom up. BehaviorNode blinkOrMove = IsBlinking(ActionIdle(), ActionMove()); BehaviorNode blinkCheck = IsBlinkReady(ActionBlink(), blinkOrMove); return(IsMouseOver(blinkCheck, blinkOrMove)); }
/// <summary> /// 编辑器下初始类转xml /// </summary> public override void Construction() { AllMonster = new List <MonsterBase>(); for (int i = 0; i < 5; i++) { MonsterBase monster = new MonsterBase(); monster.Id = i + 1; monster.Name = i + "sq"; monster.OutLook = "Assets/GameData/Prefabs/Attack.prefab"; monster.Rare = 2; monster.Height = 2 + i; AllMonster.Add(monster); } }