Exemplo n.º 1
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();
        float       distance    = Vector3.Distance(myBody.transform.position, iceSlime1.currentTarget.transform.position);

        //如果有目标在视野内,则移动向目标,直到可以攻击到目标
        if (distance < iceSlime1.getAttr().getAttackRange())
        {
            myBody.GetComponent <Rigidbody2D>().velocity = Vector3.zero;
            return(State.SUCESSED);
        }

        Room1 room = (Room1)myBody.GetComponentInParent(typeof(Room1));
        float dx   = myBody.transform.position.x;
        float dy   = myBody.transform.position.y;

        if (dx >= room.transform.position.x + room.max_X || dx <= room.transform.position.x - room.max_X)
        {
            myBody.GetComponent <Rigidbody2D>().velocity = new Vector2(0, myBody.GetComponent <Rigidbody2D>().velocity.y);
        }
        if (dy >= room.transform.position.y + room.max_Y || dy <= room.transform.position.y - room.max_Y)
        {
            myBody.GetComponent <Rigidbody2D>().velocity = new Vector2(myBody.GetComponent <Rigidbody2D>().velocity.x, 0);
        }

        Vector3 dir = (iceSlime1.currentTarget.transform.position - myBody.transform.position).normalized;

        myBody.GetComponent <Rigidbody2D>().velocity = dir * GetAI().getCharacter().getAttr().getSpeed() * Time.deltaTime;
        return(State.RUNNING);
    }
Exemplo n.º 2
0
    private float iceBulletSpeed = 250; //冰霜弹的速度

    public override void Enter()
    {
        base.Enter();
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();

        attackRate        = iceSlime1.getAttr().getAttackRate();
        iceBullet         = iceSlime1.GetIceBullet();
        currentAttackRate = 0;
    }
Exemplo n.º 3
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();

        attackRange = iceSlime1.getAttr().getAttackRange();
        float distance = Vector3.Distance(myBody.transform.position, iceSlime1.currentTarget.transform.position);

        if (distance < attackRange)
        {
            return(State.SUCESSED);
        }
        return(State.FAILED);
    }
Exemplo n.º 4
0
    // Use this for initialization
    void Start()
    {
        for (int i = 0; i < iceSlimeBody.Count; i++)
        {
            IceSlime iceSlime = new IceSlime(iceSlimeBody[i], new IceSlimeAI(), new IceSlimeAttr(30, 5, 300, 1, 25f, new IceSlimeAttrStrategy()), ice);
            iceSlimeBody[i].SetActive(false);
            remainEnemys.Add(iceSlime);
        }

        for (int i = 0; i < iceSlime1Body.Count; i++)
        {
            IceSlime1 iceSlime1 = new IceSlime1(iceSlime1Body[i], new IceSlime1AI(), new IceSlime1Attr(30, 5, 300, 1, 8f, 8f, new IceSlime1AttrStrategy()), iceBullet);
            remainEnemys.Add(iceSlime1);
            iceSlime1Body[i].SetActive(false);
        }

        for (int i = 0; i < iceSlime2Body.Count; i++)
        {
            IceSlime2 iceSlime2 = new IceSlime2(iceSlime2Body[i], new IceSlime2AI(), new IceSlime2Attr(30, 5, 300, 1, 20, new IceSlime2AttrStrategy()), iceLaser);
            remainEnemys.Add(iceSlime2);
            iceSlime2Body[i].SetActive(false);
        }
        InitEnemys();

        inDoor.SetActive(true);
        inDoor.GetComponent <SpriteRenderer>().sprite = CloseDoorSprite;
        inDoor.GetComponent <InDoor>().SetRoom(this);
        outDoor.SetActive(true);
        outDoor.GetComponent <SpriteRenderer>().sprite = CloseDoorSprite;
        outDoor.tag   = "Wall";
        outDoor.layer = LayerMask.NameToLayer("Wall");

        for (int i = 0; i < prePos.Length; i++)
        {
            prePos[i] = -1;
        }

        for (int i = 0; i < spawnPostions.Count; i++)
        {
            GameObject iTarget = Instantiate(target, spawnPostions[i].transform.position, Quaternion.identity);
            targets.Add(iTarget);
        }
    }
Exemplo n.º 5
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();

        if (iceSlime1.currentTarget != null)
        {
            return(State.SUCESSED);
        }

        iceSlime1.targets = Physics2D.OverlapCircleAll(myBody.transform.position, eyeViewDistance, LayerMask.GetMask("Player"));
        Collider2D[] targets = iceSlime1.targets;
        if (targets != null && targets.Length > 0)
        {
            iceSlime1.currentTarget = targets[0];
            return(State.SUCESSED);
        }
        return(State.FAILED);
    }
Exemplo n.º 6
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();

        if (currentAttackRate < attackRate)
        {
            //准备发射
            currentAttackRate += Time.deltaTime;
            currentState       = State.RUNNING;
        }
        else
        {
            GameObject go           = Object.Instantiate(iceBullet, myBody.transform.position, Quaternion.identity);
            Vector3    iceBulletDir = (iceSlime1.currentTarget.transform.position - myBody.transform.position).normalized;
            go.GetComponent <Rigidbody2D>().velocity = iceBulletDir * iceBulletSpeed * Time.deltaTime;
            go.GetComponent <IceBullet>().SetOwner(iceSlime1);

            return(State.SUCESSED);
        }
        return(State.RUNNING);
    }
Exemplo n.º 7
0
 public void SetCharacter(IceSlime1 owner)
 {
     this.owner = owner;
 }
Exemplo n.º 8
0
 public void SetOwner(IceSlime1 owner)
 {
     this.owner = owner;
 }