예제 #1
0
    // Update is called once per frame
    void Update()
    {
        if (removeTime != 0)
        {
            removeTime += Time.deltaTime;
            if (removeTime >= 1.5f)
            {
                PlayerManager.instance.TurnOver();
                PlayerManager.instance.RemovePlayer(this);
            }
        }
        PlayerManager pm = PlayerManager.instance;


        if (act == ACT.IDLE)
        {
            anim.SetBool("Attack", false);
            if (pm.Players[pm.CurTurnIdx] == this)
            {
                MapManager.instance.SetHexColor(CurHex, Color.grey);
            }
            if (pm.Players[pm.CurTurnIdx] == this)
            {
                aiProc();
            }
        }
        else if (act == ACT.MOVING)
        {
            anim.SetBool("Run", true);
            if (MoveHexes.Count == 0)
            {
                act = ACT.IDLE;
                PlayerManager.instance.TurnOver();
                return;
            }
            Hex   nextHex = MoveHexes[0];
            float dis     = Vector3.Distance(transform.position, nextHex.transform.position);
            if (dis > 0.1f)
            {
                transform.position += (nextHex.transform.position - transform.position).normalized * Status.MoveSpeed * Time.smoothDeltaTime;
            }
            else
            {
                transform.position = nextHex.transform.position;
                MoveHexes.RemoveAt(0);
                if (MoveHexes.Count == 0)
                {
                    anim.SetBool("Run", false);
                    act    = ACT.IDLE;
                    CurHex = nextHex;
                    PlayerManager.instance.TurnOver();
                }
            }
        }
    }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        PlayerManager pm = PlayerManager.instance;


        if (act == ACT.IDLE)
        {
            if (pm.Players[pm.CurTurnIdx] == this)
            {
                MapManager.instance.SetHexColor(CurHex, Color.grey);
                anim.SetBool("Attack", false);
            }
        }
        if (act == ACT.MOVING)
        {
            anim.SetBool("Run", true);
            Hex   nextHex = MoveHexes[0];
            float dis     = Vector3.Distance(transform.position, nextHex.transform.position);
            if (dis > 0.1f)
            {
                transform.position += (nextHex.transform.position - transform.position).normalized * Status.MoveSpeed * Time.smoothDeltaTime;

                transform.rotation = Quaternion.LookRotation((nextHex.transform.position - transform.position).normalized);
            }
            else
            {
                transform.position = nextHex.transform.position;
                MoveHexes.RemoveAt(0);
                if (MoveHexes.Count == 0)
                {
                    act    = ACT.IDLE;
                    CurHex = nextHex;
                    anim.SetBool("Run", false);
                    PlayerManager.instance.TurnOver();
                }
            }
        }
    }
예제 #3
0
    public void AIProcess()
    {
        PlayerManager pm = PlayerManager.GetInst();

        if (act == ACT.CASTING && casting == true)
        {
            Debug.Log("hh");
            if (m_type == Type.GOLEM)
            {
                anim.SetTrigger("Shockwave Attack");
                MapManager.GetInst().MarkShockRange();
            }

            else
            {
                act = ACT.JUMP;
                MapManager.GetInst().MarkAttackRange(CurHex, 4, false);
            }


            for (int j = 0; j < pm.Players.Count; ++j)
            {
                if (pm.Players[j].CurHex.At_Marked == true)
                {
                    if (pm.Players[j].m_type != Type.MONSTER && pm.Players[j].m_type != Type.BOSS && pm.Players[j].m_type != Type.GOLEM)
                    {
                        if (((UserPlayer)pm.Players[j]).Equip == false)
                        {
                            Vector3 height = pm.Players[j].transform.position;
                            if (height.y < 2)
                            {
                                pm.Players[j].GetDamage(100);
                                pm.Players[j].act = ACT.STUN;
                            }
                            EffectManager.GetInst().Play(pm.Players[j].CurHex.gameObject);
                        }
                        else
                        {
                            Vector3 height = pm.Players[j].transform.position;
                            if (height.y < 2)
                            {
                                ((UserPlayer)pm.Players[j]).DestroyEquip();
                            }
                        }
                    }
                }
            }
            if (m_type == Type.GOLEM)
            {
                if (act == ACT.CASTING)
                {
                    MapManager.GetInst().ResetMapColor();
                    act = ACT.IDLE;
                    PlayerManager.GetInst().TurnOver();
                }
            }

            casting = false;
        }
        if (act == ACT.IDLE)
        {
            anim.SetBool("attack", false);
            if (pm.Players[pm.CurTurnIdx] == this)
            {
                AiProc();
            }
        }
        if (act == ACT.JUMP)
        {
            Vector3 gravity = new Vector3(0, -9.8f, 0);
            Vector3 v       = transform.position;
            float   speed   = 15;
            if (v.y <= 10)
            {
                v.y   += Time.deltaTime * speed;
                speed -= Time.deltaTime;
                transform.position = v;
            }
            else
            {
                act = ACT.JUMPDOWN;
            }
        }
        if (act == ACT.JUMPDOWN)
        {
            Vector3 gravity = new Vector3(0, -9.8f, 0);
            Vector3 v       = transform.position;
            float   speed   = 12;

            if (v.y >= 1)
            {
                v.y   -= Time.deltaTime * speed;
                speed += Time.deltaTime * 2;
                transform.position = v;
                if (ef_time > 0.2)
                {
                    EffectManager.GetInst().ShowEffect_Summon(CurHex.gameObject, 7, v.y);
                    ef_time = 0f;
                }
            }
            else
            {
                act = ACT.IDLE;

                EffectManager.GetInst().ShowEffect_Summon(CurHex.gameObject, 8, 1f);
                anim.SetBool("attack", false);
                PlayerManager.GetInst().TurnOver();
            }
        }
        if (ACT.ATTACKING == act)
        {
            // anim.SetBool("attack", true);
        }
        if (act == ACT.MOVING)
        {//이동처리
            if (MoveHexes.Count == 0)
            {
                act = ACT.IDLE;
                anim.SetBool("attack", false);
                PlayerManager.GetInst().TurnOver();
                return;
            }
            Hex nextHex = MoveHexes[0];
            if (MapManager.GetInst().MapSizeY > 0)
            {
                Point p = new Point(nextHex.MapPos.GetX(), nextHex.MapPos.GetY() + 1, nextHex.MapPos.GetZ());
                if (MapManager.GetInst().Map[p.GetX()][p.GetY()][p.GetZ()].mesh_draw == true)
                {
                    nextHex = MapManager.GetInst().Map[p.GetX()][p.GetY()][p.GetZ()];
                    jump    = true;
                }
                else
                {
                    jump = false;
                }
            }
            Vector3 v = nextHex.transform.position;
            v.y += m_y;
            float distance = Vector3.Distance(transform.position, v);

            if (distance >= 1.0f) //이동중
            {
                anim.SetBool("attack", false);
                anim.SetBool("run", true);


                transform.position += (v - transform.position).normalized * 3f * Time.smoothDeltaTime;
                if (jump == false)
                {
                    transform.rotation = Quaternion.LookRotation((v - transform.position).normalized);
                    if (id != 1 && id != 5)
                    {
                        Vector3 r = transform.rotation.eulerAngles;
                        r.y -= 90;
                        transform.rotation = Quaternion.Euler(r);
                    }
                }
            }
            else //다음 목표 hex에 도착함
            {
                v    = nextHex.transform.position;
                v.y += m_y;
                transform.position = v;
                MoveHexes.RemoveAt(0);

                if (MoveHexes.Count <= 0)//최종 dest
                {
                    anim.SetBool("run", false);
                    act = ACT.IDLE;
                    Point temppos = new Point(nextHex.MapPos.GetX(), 0, nextHex.MapPos.GetZ());

                    CurHex          = MapManager.GetInst().Map[temppos.GetX()][temppos.GetY()][temppos.GetZ()];
                    CurHex.Passable = false;
                    anim.SetBool("attack", false);
                    PlayerManager.GetInst().TurnOver();
                }
            }
        }
    }
예제 #4
0
    void Update()
    {
        if (status.Curhp <= 0)
        {
            act = ACT.DIYING;
        }
        ShowCondition();

        if (brokentime != 0)
        {
            brokentime += Time.deltaTime;
            if (brokentime > 1.5)
            {
                GameObject.Destroy(equip.gameObject);
                brokentime = 0f;
            }
        }
        PlayerManager pm = PlayerManager.GetInst();

        if (removeTime != 0)
        {
            removeTime += Time.deltaTime;
            if (removeTime >= 1.5f)
            {
                for (int i = 0; i < pm.Players.Count; ++i)
                {
                    if (pm.Players[i].act == ACT.DIYING)
                    {
                        if (pm.CurTurnIdx == i)
                        {
                            pm.RemoveAfter();
                            pm.RemovePlayer(pm.Players[i]);
                            pm.RemoveAfter();
                        }
                        else
                        {
                            pm.RemoveAfter();
                            pm.RemovePlayer(pm.Players[i]);
                            pm.RemoveAfter();
                        }
                    }
                }
            }
        }
        if (Equip == true)
        {
            Vector3 v2 = transform.position;
            if (equip_type == "helmet")
            {
                v2.y += 1.5f;
            }
            else
            {
                v2.y += 3.5f;
            }
            equip.transform.position = v2;
        }
        if (act == ACT.IDLE)
        {
            anim.SetBool("attack", false);
            anim.SetBool("run", false);
            //  if (pm.Players[pm.CurTurnIdx] == this)
            //  {
            //      ///MapManager.GetInst().SetHexColor(CurHex, Color.black);
            //  }
            //CurHex.Passable = true;
        }

        if (act == ACT.MOVING)
        {//이동처리
            CameraManager.GetInst().ResetCameraTarget();
            CurHex.Passable = true;

            Hex nextHex = MoveHexes[0];
            if (MapManager.GetInst().MapSizeY > 0)
            {
                Point p = new Point(nextHex.MapPos.GetX(), nextHex.MapPos.GetY() + 1, nextHex.MapPos.GetZ());
                if (MapManager.GetInst().Map[p.GetX()][p.GetY()][p.GetZ()].mesh_draw == true)
                {
                    nextHex = MapManager.GetInst().Map[p.GetX()][p.GetY()][p.GetZ()];
                    jump    = true;
                }
                else
                {
                    jump = false;
                }
            }
            Vector3 v = nextHex.transform.position;
            v.y += 1.0f;
            float distance = Vector3.Distance(transform.position, v);
            if (distance >= 0.2f) //이동중
            {
                anim.SetBool("run", true);

                transform.position += (v - transform.position).normalized * status.MoveSpeed * Time.smoothDeltaTime;
                if (jump == false)
                {
                    Quaternion s = Quaternion.LookRotation((v - transform.position).normalized);
                    Vector3    r = s.eulerAngles;
                    r.y -= 90;
                    if (Equip == true)
                    {
                        equip.transform.rotation = Quaternion.Euler(r);
                    }

                    transform.rotation = Quaternion.Euler(r);
                }
            }
            else //다음 목표 hex에 도착함
            {
                anim.SetBool("run", false);
                Hex temp = nextHex;


                v    = nextHex.transform.position;
                v.y += 1.0f;
                transform.position = v;

                MoveHexes.RemoveAt(0);

                if (MoveHexes.Count <= 0)//최종 dest
                {
                    Manager.GetInst().MoveCamPos(nextHex);
                    CameraManager.GetInst().InitPos.x = nextHex.x;
                    CameraManager.GetInst().InitPos.z = nextHex.z;
                    CostManager.GetInst().CostDecrease(1);
                    Point temppos = new Point(nextHex.MapPos.GetX(), 0, nextHex.MapPos.GetZ());

                    CurHex          = MapManager.GetInst().Map[temppos.GetX()][temppos.GetY()][temppos.GetZ()];
                    CurHex.Passable = false;
                    act             = ACT.IDLE;
                    if (CurHex.obj_id == 5)
                    {
                        EquipHelmet();
                    }
                    //PlayerManager.GetInst().TurnOver();
                }
            }
        }
    }