Exemplo n.º 1
0
    public override bool Check()
    {
        var list = Detect.DetectObject(focus);

        foreach (var p in list)
        {
            if (p.GetComponent <Unit>())
            {
                return(false);
            }
        }
        return(true);
    }
Exemplo n.º 2
0
    public override bool Check()
    {
        var list = Detect.DetectObject(focus);

        foreach (var p in list)
        {
            if (p.GetComponent <Unit>() && character.GetComponent <Unit>() != p.GetComponent <Unit>())
            {
                target = p;
                return(true);
            }
        }
        return(false);
    }
Exemplo n.º 3
0
Arquivo: Range.cs Projeto: gczxcyd/XDD
    protected bool DetectObstacle(Vector3 position)
    {
        var cols = Detect.DetectObject(position);

        foreach (var col in cols)
        {
            if (col.parent)
            {
                if (col.parent.GetComponent <Obstacle>())
                {
                    return(true);
                }
            }
        }
        return(false);
    }
Exemplo n.º 4
0
    public override bool Check()
    {
        var list = Detect.DetectObject(focus);

        foreach (var p in list)
        {
            if (p.GetComponent <Unit>())
            {
                if (p.Find("Render").gameObject.activeInHierarchy)
                {
                    return(false);
                }
            }
        }
        return(true);
    }
Exemplo n.º 5
0
    protected override void InitSkill()
    {
        base.InitSkill();
        var list = Detect.DetectObject <CharacterStatus>(character.position + character.right - character.forward);

        if (list.Count == 1)
        {
            var comboCS = list[0];
            if (comboCS != null && comboCS.roleEName == character.GetComponent <CharacterStatus>().roleEName)
            {
                comboCS.transform.forward = character.forward;
                comboCS.GetComponent <Animator>().SetInteger("Skill", 9);
                GameController.GetInstance().Invoke(() => { comboCS.GetComponent <Animator>().SetInteger("Skill", 0); }, 0.1f);
                damage *= 2;
            }
        }
        Camera.main.GetComponent <RTSCamera>().FollowTarget(character.position);
        GameController.GetInstance().Invoke(() => {
            FXManager.GetInstance().Spawn("Rasengan", character.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.RightHand), 3.2f);
        }, 0.5f);
    }
Exemplo n.º 6
0
    public override bool Check()
    {
        var list = Detect.DetectObject(focus);

        foreach (var p in list)
        {
            if (p.GetComponent <CharacterStatus>())
            {
                if (!character.GetComponent <CharacterStatus>().IsEnemy(p.GetComponent <CharacterStatus>()))
                {
                    other.Add(p);
                }
            }
        }

        if (other.Count > 0)
        {
            return(true);
        }
        return(false);
    }
Exemplo n.º 7
0
    //传入范围和创建范围角色的transform.position即可创建。p即transform.position
    public void CreateMoveRange(Transform character)
    {
        this.character = character;
        startRotation  = character.rotation;
        range          = character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mrg").value;
        if (range < 1)
        {
            return;
        }
        var list = CreateRange(range, character.position);
        //比list大一圈以保证enemy在范围外一圈时范围内颜色的正常显示。
        var detect = CreateRange(range + 1, character.position);    //此处创建范围比应有范围大1,正确的显示效果 是在下面 A*检测到路径但距离大于角色mrg的地块不显示 处得到保证。


        //检测到敌人时地块不显示,且加入名单。
        foreach (var position in detect)
        {
            if (CheckEnemy(Detect.DetectObject(position)) == 2)
            {
                enemyFloor.Add(position);
                continue;
            }
            //检测到障碍物时地块不显示。后期实现水上行走,跳远,树上行走。
            if (DetectObstacle(position))
            {
                continue;
            }

            BattleFieldManager.GetInstance().GetFloor(position).SetActive(true);
            rangeDic.Add(position, BattleFieldManager.GetInstance().GetFloor(position));
        }
        //添加enemyFloor周围的坐标进入容器。
        foreach (var floor in enemyFloor)
        {
            Vector3 V1 = new Vector3(floor.x - 1, 0, floor.z);
            Vector3 V2 = new Vector3(floor.x + 1, 0, floor.z);
            Vector3 V3 = new Vector3(floor.x, 0, floor.z - 1);
            Vector3 V4 = new Vector3(floor.x, 0, floor.z + 1);
            TryAddValue(floorAroundEnemy, V1);
            TryAddValue(floorAroundEnemy, V2);
            TryAddValue(floorAroundEnemy, V3);
            TryAddValue(floorAroundEnemy, V4);
        }

        var buffer0 = new List <Vector3>();

        foreach (var floor in rangeDic)
        {
            if (!list.Contains(floor.Key))
            {
                floor.Value.SetActive(false);
                buffer0.Add(floor.Key);
            }
        }
        foreach (var a in buffer0)
        {
            rangeDic.Remove(a);
        }

        //A*检测到路径但距离大于角色mrg的地块不显示。A*无法检测到路径的地块不显示。必须第二次遍历,即创建完成,A*寻路才有意义。
        //不能迭代时改变或删除Dictionary中的元素。
        var buffer = new List <Vector3>();

        foreach (var floor in rangeDic)
        {
            if ((UseAstar(character.position, floor.Key, range).Count > range + 1) || (floor.Key != character.position && UseAstar(character.position, floor.Key, range).Count == 0))
            {
                floor.Value.SetActive(false);
                buffer.Add(floor.Key);
            }
        }
        foreach (var a in buffer)
        {
            rangeDic.Remove(a);
        }

        RecoverColor();
    }
Exemplo n.º 8
0
    public void CreateStraightSkillRange(int range, Transform character, bool aliesObstruct)
    {
        this.character = character;
        startRotation  = character.rotation;
        var list       = CreateStraightRange(range, character.position);
        var listBuffer = new List <Vector3>();

        foreach (var position in list)
        {
            int check = CheckEnemy(Detect.DetectObject(position));
            if (check > 0)
            {
                if (check == 2)
                {
                    enemyFloor.Add(position);
                }
                else if (check == 1 && aliesObstruct)
                {
                    listBuffer.Add(position);   //技能现在可被友军阻挡。
                }
            }
            else if (DetectObstacle(position))
            {
                obstacleFloor.Add(position);
                continue;
            }

            BFM.GetFloor(position).SetActive(true);
            rangeDic.Add(position, BFM.GetFloor(position));
        }

        //直线施法的障碍物遮挡效果
        var buffer = new Dictionary <Vector3, GameObject>();


        foreach (var a in enemyFloor)
        {
            listBuffer.Add(a);
        }

        foreach (var a in obstacleFloor)
        {
            if (!listBuffer.Contains(a))
            {
                listBuffer.Add(a);
            }
        }

        foreach (var floor in rangeDic.Values)
        {
            foreach (var f in listBuffer)
            {
                if (floor.activeInHierarchy)
                {
                    var dis  = floor.transform.position - character.position;
                    var eDis = f - character.position;
                    //两向量方向相同,且dis距离大于eDis,则不显示。即被遮挡住。
                    if ((dis.normalized == eDis.normalized) && (dis.magnitude > eDis.magnitude))
                    {
                        BFM.GetFloor(floor.transform.position).SetActive(false);
                        buffer.Add(floor.transform.position, floor);
                    }
                }
            }
        }
        foreach (var pair in buffer)
        {
            rangeDic.Remove(pair.Key);
        }
    }
Exemplo n.º 9
0
 // Update is called once per frame
 void Update()
 {
     GetMousePosition();
     unit = Selectunit(Detect.DetectObject(HandleMouse()));
     LogMessage();
 }