Esempio n. 1
0
 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;
 }
Esempio n. 2
0
    /// <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);
    }
Esempio n. 3
0
    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;
    }
Esempio n. 4
0
    /// <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);
        }
    }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
    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);
    }
Esempio n. 7
0
    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;
    }
Esempio n. 8
0
        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();
        }
Esempio n. 9
0
 public void AddtoMonsterList(MonsterBase monster)
 {
     if (monsterList == null)
     {
         return;
     }
     monsterList.Add(monster);
 }
Esempio n. 10
0
 public void Damage()
 {
     if (currentTarget != null)
     {
         MonsterBase mons = currentTarget.GetComponent <MonsterBase>();
         mons.OnDamage(playerInfo.atk);
     }
 }
Esempio n. 11
0
    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);
                        }
                    }
                }
            }
        }
    }
Esempio n. 12
0
    // 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();
    }
Esempio n. 13
0
    /// <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);
        }
    }
Esempio n. 14
0
 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);
        }
    }
Esempio n. 17
0
    public void SpawnRandomMonsterInModule(Vector3 spawnPos)
    {
        MonsterBase spawnMonster = MonsterManager.Instance.SpawnSpecificMonster(GetRandomMonster(), spawnPos);

        if (spawnMonster != null && monsterList != null)
        {
            spawnMonster.SetMapModule(this);
            AddtoMonsterList(spawnMonster);
        }
    }
Esempio n. 18
0
    // 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>();
    }
Esempio n. 19
0
    // 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);
    }
Esempio n. 20
0
    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);
    }
Esempio n. 21
0
 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;
 }
Esempio n. 22
0
    //슬라임용
    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);
    }
Esempio n. 23
0
    // 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();
        }
    }
Esempio n. 25
0
 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;
         }
     }
 }
Esempio n. 26
0
 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);
     }
 }
Esempio n. 27
0
    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;
        }
    }
Esempio n. 28
0
    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);
    }
Esempio n. 29
0
    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));
    }
Esempio n. 30
0
 /// <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);
     }
 }