Example #1
0
    public void AddNewMonster(int ID, int monsterID, string monsterName, int level, int HP, int maxHP, int ATK, int DEF, int movementSpeed, Vector2 position, Vector2 targetPosition)
    {
        var monsterPrefab = Resources.Load <GameObject>("Prefab/Monster/" + monsterID);

        if (monsterPrefab)
        {
            GameObject newMonster = Instantiate(monsterPrefab, position, Quaternion.identity);
            if (!isMapReady)
            {
                newMonster.GetComponent <Rigidbody2D>().simulated = false;
            }
            MonsterStatus ms = newMonster.GetComponent <MonsterStatus>();
            ms.SetID(ID);
            ms.AddInformation(monsterID, monsterName);
            ms.AddStatus(level, HP, maxHP, ATK, DEF);
            ms.SetMonsterSpeed(movementSpeed);
            newMonster.GetComponent <OnlineMonster>().MoveTo(targetPosition);
            newMonster.transform.SetParent(this.onlineMonster.transform);

            onlineMonsterList.Add(ID, newMonster);
        }
        else
        {
            Debug.Log("Not found monster prefab ID : " + monsterID);
        }
    }
Example #2
0
        public void ApplyMonsterBuff(MonsterStatus status, int x, int skillId, int duration, MobSkill skill)
        {
            var timerManager = TimerManager.Instance;

            var applyPacket = PacketCreator.ApplyMonsterStatus(ObjectId,
                                                               new Dictionary <MonsterStatus, int> {
                { status, x }
            }, skillId, true, 0, skill);

            Map.BroadcastMessage(applyPacket, Position);
            if (GetController() != null && !GetController().VisibleMapObjects.Contains(this))
            {
                GetController().Client.Send(applyPacket);
            }

            timerManager.RunOnceTask(() =>
            {
                if (IsAlive)
                {
                    var packet = PacketCreator.CancelMonsterStatus(ObjectId,
                                                                   new Dictionary <MonsterStatus, int> {
                        { status, x }
                    });
                    Map.BroadcastMessage(packet, Position);
                    if (GetController() != null && !GetController().VisibleMapObjects.Contains(this))
                    {
                        GetController().Client.Send(packet);
                    }
                    MonsterBuffs.Remove(status);
                }
            }, duration);
            MonsterBuffs.Add(status);
        }
Example #3
0
    private void OnTriggerEnter2D(Collider2D col)
    {
        PlayerStatus status = pManager.Status;

        if (col.gameObject.tag == "Item")
        {
            target = col.gameObject;
        }
        //モンスターの投擲物に当たった時
        if (col.gameObject.tag == "Monster")
        {
            MonsterStatus mStatus = col.gameObject.GetComponent <MonsterController>().Status;
            if (mStatus.type == MonsterStatus.MonsterType.HARB)
            {
                return;
            }
            int atk = mStatus.GetAttack;
            StartCoroutine(TransWaitTime());
            player_ctr.HPDown(atk);
            StartCoroutine(PlayerNockBackWaitTime());
        }

        if (col.GetComponent <GimmickInfo>())
        {
            switch (col.GetComponent <GimmickInfo>().type)
            {
            case GimmickInfo.GimmickType.GROWTREE:
                status.gimmick_state = PlayerStatus.GimmickState.ONTREE;
                break;

            default:
                break;
            }
        }
    }
Example #4
0
File: FSM.cs Project: coding137/-
    //----------------------------------------------------------------------------
    /// <summary>
    /// 타겟에게 나의 능력치를 기반하여 HP를 감소시킨다
    /// </summary>
    void Enter_AttackState()
    {
        MonsterStatus myAttribute = gameObject.GetComponent <MonsterStatus>();

        if (ProcessDeadState(myAttribute))
        {
            return;
        }

        //애니메이션 실행

        Playerstatus targetAttribute = Target.GetComponent <Playerstatus>();

        targetAttribute.current_hp -= myAttribute.damage;

        Debug.Log("Attack : " + gameObject.name + "->" + Target.name);
        Debug.Log("Hp : " + targetAttribute.current_hp.ToString());

        CharacterStateMachine targetStateMachine = Target.GetComponent <CharacterStateMachine>();

        targetStateMachine.SetState(State.DAMAGED);

        //대상이 죽은 경우는 타겟 해제
        if (targetAttribute.current_hp <= 0)
        {
            Target = null;
        }

        StartCoroutine("TransStateToIdle", myAttribute.Atk_delay);
    }
Example #5
0
File: FSM.cs Project: coding137/-
    void Update_IdleState()
    {
        MonsterStatus myAttribute = gameObject.GetComponent <MonsterStatus>();

        if (ProcessDeadState(myAttribute))
        {
            return;
        }

        //타겟이 계속 바뀌면 안됨으로, 타겟이 유효한 경우는 유지되도록
        bool isFindTarget = false;

        if (Target != null)
        {
            Playerstatus targetAttribute = Target.GetComponent <Playerstatus>();
            if (targetAttribute.current_hp > 0)
            {
                isFindTarget = true;
            }
        }

        if (!isFindTarget)
        {
            //Target = FindEnemy(searchDistanceMeter: 2.0f);


            if (Target != null)
            {
                //적을 찾았으면 대상으로 지정하고 이동
                Playerstatus targetAttribute = Target.GetComponent <Playerstatus>();

                Vector3 dir = Target.transform.position - transform.position;
                dir.Normalize();
                float distance = Vector3.Distance(Target.transform.position, transform.position);


                if (distance > targetAttribute.playerRadius + myAttribute.monsterrad)
                {
                    transform.LookAt(Target.transform.position);

                    TargetPosition = Target.transform.position;
                    SetState(State.MOVE);
                }
                else
                {
                    if (nextAttackCooltime_ == 0.0f || nextAttackCooltime_ < Time.time)
                    {
                        nextAttackCooltime_ = Time.time + myAttribute.Atk_delay;
                        SetState(State.ATTACK);
                    }
                }
            }
            else
            {
                //적을 못 찾았으면 랜덤한 위치로 이동한다.
                // TargetPosition = FindRandomTargetPosition(minRangeMeter: 4, maxRangeMeter: 8);
                SetState(State.MOVE);
            }
        }
    }
Example #6
0
 public void Generate(int num)
 {
     for (int i = 0; i < existEnemys.Length; i++)
     {
         if (existEnemys[i] == null)
         {
             Vector3 pos = new Vector3(0, 0, 0);
             // pos = new Vector3(Random.Range(6,-45), 0, Random.Range(-12,10));
             pos = this.transform.position;
             if (num == -1 || num >= Monsters.Length)
             {
                 num = Random.Range(0, Monsters.Length);
             }
             existEnemys [i] = Instantiate(Monsters [num], pos, Quaternion.identity) as GameObject;
             MonsterStatus ms = existEnemys [i].GetComponent <MonsterStatus> ();
             ms.m_Level = m_level;
             ms.LoadMonsterData();
             //モンスターの高さ
             float monsterHeight = ms.monsterSize;
             pos.y += monsterHeight;
             //モンスターの上にHPゲージをつける
             GameObject HP_Bar_Clone = Instantiate(HP_Bar, pos, Quaternion.identity) as GameObject;
             HP_Bar_Clone.transform.SetParent(existEnemys[i].transform);
             ms.HP_Slider          = existEnemys [i].GetComponentInChildren <Slider> ();
             ms.HP_Slider.maxValue = ms.HP;
             counter++;
             if (counter >= monsterCount)
             {
                 StopCoroutine(routine);
             }
             return;
         }
     }
 }
Example #7
0
    void Hiding()
    {
        mon = transform.GetComponent <MonsterStatus>();
        td  = GetComponent <TestCode>();

        td.spd = 10f;
        //  Debug.Log("hiding");



        float distance = Vector3.Distance(td.objEndCube.transform.position, transform.position);// target과 나의 distance 를  잡아준다 .

        if (distance > mon.monsterrad + 3f)
        {
            transform.LookAt(td.objEndCube.transform.position);


            SetState(State.Hiding);
            td.enabled      = true;
            td.objEndCube   = HPoints[hidingpointindex];
            td.objStartCube = monster;
            // StopAllCoroutines();
        }
        else
        {
            td.enabled = false;
            Debug.Log("transfer");

            StartCoroutine("TransfertoSleeping", 0.5f);
        }
    }
Example #8
0
    private void HitTargetMonster(Collider2D other)
    {
        SoundManager.instance.PlayHitSound();

        MonsterStatus monsterStatus = other.gameObject.GetComponent <MonsterStatus>();

        _monster = other.gameObject;

        Vector3 forceDir;

        if (_monster.transform.position.x >= transform.position.x)
        {
            forceDir = Vector3.right;
        }
        else
        {
            forceDir = Vector3.left;
        }

        _monster.GetComponent <MonsterMovement>().OnHit(_hitForceMagnitude, forceDir);

        GameObject particle = Instantiate(ParticleOnHit, _monster.transform.position, _monster.transform.rotation);

        Destroy(particle, 2.0f);

        monsterStatus.LoseHp(_character.GetComponent <CharacterStatus>().AttackPower);
    }
 void OnTriggerEnter2D(Collider2D tmp)
 {
     if (tmp.gameObject.CompareTag("Player"))
     {
         AttackTarget   = tmp.gameObject.transform;
         _MonsterStatus = MonsterStatus.Move;
     }
 }
Example #10
0
 private void Awake()
 {
     player        = GameObject.FindGameObjectWithTag("Player");
     monsterStatus = GetComponent <MonsterStatus>();
     rigid         = GetComponent <Rigidbody>();
     agent         = GetComponent <NavMeshAgent>();
     anim          = GetComponent <Animator>();
 }
Example #11
0
 // Update is called once per frame
 void Update()
 {
     if (_targetStatus != null && _targetStatus.IsDead)
     {
         TargetMonster = null;
         _targetStatus = null;
     }
 }
 private void Awake()
 {
     monsterStatus   = GetComponent <MonsterStatus>();
     monsterMovement = GetComponent <NewMonsterMovement>();
     animator        = GetComponent <Animator>();
     agent           = GetComponent <UnityEngine.AI.NavMeshAgent>();
     hitbox          = transform.Find("Hitbox").GetComponent <BoxCollider>();
 }
Example #13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MonsterViewModel"/> class.
        /// </summary>
        public MonsterViewModel([NotNull] MonsterStatus monsterStatus, [NotNull] IEnumerable <AffectDescription> affectsToDisplay, int number, double affectsPanelWidth)
            : base(monsterStatus, affectsToDisplay, number, affectsPanelWidth)
        {
            Assert.ArgumentNotNull(monsterStatus, "monsterStatus");
            Assert.ArgumentNotNull(affectsToDisplay, "affectsToDisplay");

            MonsterStatus = monsterStatus;
        }
Example #14
0
 void OnTriggerExit2D(Collider2D tmp)
 {
     if (tmp.gameObject.CompareTag("Player"))
     {
         AttackTarget   = null;
         _MonsterStatus = MonsterStatus.Normal;
     }
 }
Example #15
0
    void Update()
    {
        SetAnimation(lastFramePos);
        lastFramePos = this.transform.position;
        switch (_MonsterStatus)
        {
        case MonsterStatus.Normal:
        {
            break;
        }

        case MonsterStatus.Move:
        {
            AttackRange.enabled     = true;
            this.transform.position = Vector3.MoveTowards(this.transform.position, AttackTarget.position, Move_speed * Time.deltaTime);
            break;
        }

        case MonsterStatus.Escape:
        {
            AttackRange.enabled = false;
            for (int i = 0; i < AllSkills.Length; i++)
            {
                if (!AllSkills[i].IsCooling)
                {
                    _MonsterStatus = MonsterStatus.Move;
                    return;
                }
            }
            this.transform.position = Vector3.MoveTowards(this.transform.position, 2.0f * this.transform.position - 1.0f * AttackTarget.position, 0.5f * Move_speed * Time.deltaTime);
            break;
        }

        case MonsterStatus.Attack:
        {
            for (int i = 0; i < AllSkills.Length; i++)
            {
                if (AllSkills[i].IsCooling)
                {
                    continue;
                }
                else
                {
                    StartCoroutine(AllSkills[i].UseSkill(0.2f));
                    return;
                }
            }
            _MonsterStatus = MonsterStatus.Escape;
            break;
        }

        default:
        {
            break;
        }
        }
    }
Example #16
0
    public void SetStatus(MonsterStatus status)
    {
        _hpSlider  = Helper.Find <Slider>(transform, "HP");
        _backColor = Helper.Find <Image>(transform, "HP/Background");
        _fillColor = Helper.Find <Image>(transform, "HP/FillArea/Fill");

        _transform = _hpSlider.GetComponent <RectTransform>();
        _status    = status;
        InstanceID = _status.InstanceID;
    }
Example #17
0
File: FSM.cs Project: coding137/-
 /// <summary>
 /// 내가 사망했는지 체크하고, 사망한 경우는 코루틴으로 지연되는 처리를 모두 중지시키고, 사망 상태로만 전이시킨다.
 /// </summary>
 /// <param name="myAttribute"></param>
 /// <returns></returns>
 bool ProcessDeadState(MonsterStatus myAttribute)
 {
     if (myAttribute.current_hp <= 0)
     {
         StopAllCoroutines();
         SetState(State.Dead);
         return(true);
     }
     return(false);
 }
Example #18
0
    void Attack()
    {
        Debug.Log("attk");

        MonsterStatus mon = gameObject.GetComponent <MonsterStatus>();

        plyerrad.current_hp -= mon.damage;

        StartCoroutine("TransfertoIdle", mon.Atk_delay / 10);// monster의 기본 대미지 시간과 몬스터의 대미지의 크기에 따른 딜레이
    }
 public void Hurt(int rawScore)
 {
     CurrentHealth -= rawScore;
     OnMonsterHurt(rawScore);
     if (IsAlive())
     {
         return;
     }
     CurrentStatus = MonsterStatus.Killed;
     DisplayMonsterInformationEnd("You killed that!");
 }
Example #20
0
        protected override CharStatus InitStatus()
        {
            CharStatus st = new MonsterStatus(false, Template.MaxHp, Template.MaxMp, Template);             //TODO make a template for this

            GetData().SetVisibleHp(st.Hp);
            GetData().SetVisibleMaxHp(st.MaxHp);
            GetData().SetMoveSpeed(st.MoveSpeed);
            GetData().SetRotateSpeed((int)st.RotationSpeed);

            return(st);
        }
 void OnTriggerEnter2D(Collider2D other)
 {
     switch (other.gameObject.tag)
     {
     case "Monster":
         monsterStatus = other.gameObject.GetComponent <MonsterStatus>();
         monsterStatus.MonsDamage(ATK);
         Destroy(this.gameObject);
         break;
     }
 }
Example #22
0
 public void SetValue(MonsterStatus status, int newVal)
 {
     if (Stati.ContainsKey(status))
     {
         Stati[status] = newVal;
     }
     else
     {
         Stati.Add(status, newVal);
     }
 }
 // Use this for initialization
 void Start()
 {
     mc = this.GetComponent <monsterControl>();
     ms = this.GetComponent <MonsterStatus>();
     ms.onMonsterHurtHandler += angryAttacker;
     if (!ms.isBoss)
     {
         mc.onMonsterHitBlockHandler += cancelAngry;
     }
     this.Invoke("doWalk", 3f);
 }
Example #24
0
    void Start()
    {
        p_status = GameObject.Find("Pbody").GetComponent <PlayerStatus>();
        m_status = GameObject.FindGameObjectWithTag("Enemy").GetComponent <MonsterStatus>();

        P_unitstats = GameObject.Find("Pbody").GetComponent <UnitStats>();
        M_unitstats = GameObject.FindGameObjectWithTag("Enemy").GetComponent <UnitStats>();

        turn_Counter = 1;
        can_attack   = false;
        Encounter    = false;
    }
Example #25
0
    public void Init()
    {
        cStatus = new MonsterStatus();

        cStatus.iMaxHp       = 50;
        cStatus.fHp          = cStatus.iMaxHp;
        cStatus.fAtk         = 10;
        cStatus.fSpeed       = 1;
        cStatus.fStrikeRange = 2.0f;

        bCanAttack = new bool[Dungeon.BattleCharacter];
    }
Example #26
0
 void hitBlock(Collider2D col)
 {
     ms = gameObject.GetComponent <MonsterStatus>();
     if (col.CompareTag("Block_Monster"))
     {
         moveBack(distance());
         following = false;
         if (onMonsterHitBlockHandler != null)
         {
             onMonsterHitBlockHandler();
         }
     }
 }
Example #27
0
    void Start()
    {
        if (GetComponent <BossController>())
        {
            bStatus = GetComponent <BossController>().Status;
        }
        else if (GetComponent <MonsterController>())
        {
            mStatus = GetComponent <MonsterController>().Status;
        }

        pCon = GameObject.Find("Controller").GetComponent <PlayerController>();
    }
Example #28
0
 private void OnMonsterRemoved(object self, MonsterStatus status)
 {
     if (status != MonsterStatus.Killed)
     {
         return;
     }
     currentKillCount += 1;
     Progress          = currentKillCount / (float)toKillCount;
     if (currentKillCount > toKillCount || Math.Abs(Progress - 1) < 0.001f) //Double security here
     {
         Complete();
     }
 }
Example #29
0
 void Start()
 {
     mController = FindObjectOfType <MoveController>();
     status      = GetComponent <MonsterController>().Status;
     if (status.type != MonsterStatus.MonsterType.MAGIC)
     {
         resPoint = new GameObject(Status.type.ToString() + "Resporn");
         resPoint.transform.SetParent(transform.parent);
         resPoint.transform.position = transform.position;
         resPoint.AddComponent <MonsterResporn>();
         resPoint.GetComponent <MonsterResporn>().MType = status.type;
     }
 }
    void Start()
    {
        M_collision_enabled         = monster_area.GetComponent <BoxCollider2D>();
        M_collision_enabled.enabled = false;

        rend            = GetComponent <Renderer>();
        rend.enabled    = true;
        monster         = GameObject.FindGameObjectWithTag("Enemy");
        next_t          = monster.GetComponent <Monster_behavior>();
        attackButton    = attack_Button.GetComponent <AttackButton>();
        m_status        = monster.GetComponent <MonsterStatus>();
        m_status.attack = false;
    }