Beispiel #1
0
        protected virtual void Start()
        {
            SelfPerson = gameObject.GetPersonInfo() as IHighFivePerson;
            Assert.IsNotNull(SelfPerson);
//            ActorMover = gameObject.GetComponent<IMover2D>();
//            Assert.IsNotNull(ActorMover);
        }
        public override void OnStart()
        {
            self = gameObject.GetPersonInfo() as IHighFivePerson;

            _animator = gameObject.GetComponent <Animator>();
            _animator.Play(Animator.StringToHash(walkAni));
        }
Beispiel #3
0
 public DirectLineBullet(int damage, Vector3 dir, Vector3 pos, IHighFivePerson origin, string path, float speed = 8f, float maxLife = 6f, Transform parent = null)
     : base(damage, origin, path, pos, maxLife, parent)
 {
     this.dir   = dir;
     this.speed = speed;
     AudioMgr.Instance.PlayEffect(AudioName.beiji);
 }
Beispiel #4
0
 public override void OnAwake()
 {
     base.OnAwake();
     selfPerson = gameObject.GetPersonInfo() as IHighFivePerson;
     Assert.IsNotNull(selfPerson);
     this.animationTime = aniY.curve.keys.Last().time;
 }
 public override void OnStart()
 {
     base.OnStart();
     actor = gameObject.GetComponent <Actor>();
     self  = gameObject.GetPersonInfo() as IHighFivePerson;
     gameObject.GetComponent <Animator>().Play(Animator.StringToHash(walkAni));
     timer = 0;
 }
        public override void OnStart()
        {
            self = gameObject.GetPersonInfo() as IHighFivePerson;
            SkillInfoAsset.Vector3Cache = GlobalVar.G_Player.position;
//			Debug.Log($"写入用户数据:【{SkillInfoAsset.skillName.StringValue}】" + SkillInfoAsset.Vector3Cache);
            self.RunSkill(SkillInfoAsset);
            timer = 0;
            gameObject.GetComponent <Actor>()._velocity = Vector3.zero;
        }
 public override void OnAwake()
 {
     base.OnAwake();
     self = gameObject.GetPersonInfo() as IHighFivePerson;
     Assert.IsNotNull(self);
     aiMover = self.ActorMover as IActorMoveAIControl;
     Assert.IsNotNull(aiMover);
     ani = gameObject.GetComponent <Animator>();
 }
Beispiel #8
0
        public override void OnStart()
        {
            self = gameObject.GetPersonInfo() as IHighFivePerson;

            player = GlobalVar.G_Player as IHighFiveCharacter;

            actor     = gameObject.GetComponent <Actor>();
            _animator = gameObject.GetComponent <Animator>();
            _animator.Play(Animator.StringToHash(walkAni));
        }
Beispiel #9
0
 public override void OnStart()
 {
     if (null == SkillInfoAsset)
     {
         throw new Exception("SkillAsset is null ??");
     }
     self = gameObject.GetPersonInfo() as IHighFivePerson;
     self.RunSkill(SkillInfoAsset);
     timer = 0;
 }
        private float GetSuitableDegree(IHighFivePerson self)
        {
            if (!randomDegree)
            {
                var ans = degree;
                if (locateType == LocateType.LocateByBossArea)
                {
                    switch (sideType)
                    {
                    case SideType.Left:
                        ans -= 90;
                        break;

                    case SideType.Right:
                        ans += 90;
                        break;

                    case SideType.Top:
                        ans += 180;
                        break;
                    }
                }
                return(ans);
            }


            var tempRange = degreeRange - 90 * Vector2.one;

            if (locateType == LocateType.LocateByBossArea)
            {
                switch (sideType)
                {
                case SideType.Left:
                    tempRange -= 90 * Vector2.one;
                    break;

                case SideType.Right:
                    tempRange += 90 * Vector2.one;
                    break;

                case SideType.Top:
                    tempRange += 180 * Vector2.one;
                    break;
                }
            }
            return(Random.Range(tempRange.x, tempRange.y));
        }
        private Vector3 GetSuitablePosition(IHighFivePerson self)
        {
            switch (locateType)
            {
            case LocateType.LocateByOffset:
                return(self.position + offset);

            case LocateType.LocateByBossArea:
                var interpolation = randomPos
                        ? Random.Range(interpolationRange.x, interpolationRange.y)
                        : locateInterpolation;
                Transform a = null, b = null;
                switch (sideType)
                {
                case SideType.Bottom:
                    a = SceneUtil.Instance.bossLB;
                    b = SceneUtil.Instance.bossRB;
                    break;

                case SideType.Left:
                    a = SceneUtil.Instance.bossLB;
                    b = SceneUtil.Instance.bossLT;
                    break;

                case SideType.Top:
                    a = SceneUtil.Instance.bossLT;
                    b = SceneUtil.Instance.bossRT;
                    break;

                case SideType.Right:
                    a = SceneUtil.Instance.bossRB;
                    b = SceneUtil.Instance.bossRT;
                    break;
                }

                return(Vector3.Lerp(a.position, b.position, interpolation));
            }

            throw new Exception($"Unexpected locateType:{locateType}");
        }
Beispiel #12
0
        public void RunSkill(IHighFivePerson self, float startTime = 0, params object[] args)
        {
            var lastTime = LastTime;

            if (isUsed)
            {
                foreach (var trigger in triggers)
                {
                    trigger.Reset();
                }
            }
            else
            {
                this.isUsed = true;
            }


            this.startTime = startTime;
            foreach (var trigger in triggers)
            {
//                Debug.Log("Trigger:" + trigger.type);
                for (var i = 0; i < trigger.workTimes; i++)
                {
                    trigger.RunTriggerUnit(self, args);
                }
            }

            MainLoop.Instance.ExecuteLater(() =>
            {
                if (isUsed)
                {
                    isUsed = false;
                }
                foreach (var VARIABLE in triggers)
                {
                    VARIABLE.Reset();
                }
            }, lastTime);
        }
 public BulletSpriteObj(int damage, IHighFivePerson ap, string path, Vector3 pos, float maxLife, Transform parent = null) : base(path, pos, parent)
 {
     this.maxLife = maxLife;
     if (Mathf.Abs(this.maxLife - 0) < 0.1f)
     {
         throw new System.Exception("生命时间太短!" + this.maxLife);
     }
     this.damage = damage;
     this.origin = ap;
     if (origin == null)
     {
         throw new System.Exception("子弹发射者为空");
     }
     this.triggerEvent = this.obj.AddComponent <TriggerInputer>();
     this.triggerEvent.onTriggerEnterEvent2D += OnTriggerEntry;
     this.maxLife = maxLife;
     MainLoop.Instance.ExecuteLater(() =>
     {
         if (this.obj != null)
         {
             DestoryThis();
         }
     }, this.maxLife);
 }
Beispiel #14
0
        public void RunTriggerUnit(IHighFivePerson self)
        {
            if (!enable)
            {
                return;
            }
            this.self = self;
            MainLoop.Instance.ExecuteLater(() =>
            {
//                Debug.Log("运行Trigger单元:" + this.type);
                switch (type)
                {
                    #region Effect

                case TriggerType.Effect:
//                        Debug.Log("技能系统——TriggerType.Effect");
                    self.PlayAttackEffects(attackEffects);
                    break;

                    #endregion

                    #region Animation

                case TriggerType.Animation:
                    if (self == null)
                    {
                        throw new Exception("SkillCore为空");
                    }


                    var animator = GameAnimator.GetInstance(self.gameObject.GetComponent <Animator>());

                    if (animator == null)
                    {
                        throw new Exception(self.CharacterName + "没有Animator组件");
                    }

                    animator.speed = this.animationSpeed * self.AttackSpeed;


                    animator.Play(Animator.StringToHash(this.animationName.StringValue), AnimationWeight.High);


                    break;


                    #endregion

                    #region Audio

                case TriggerType.Audio:
                    if (self.gameObject != null)
                    {
                        AudioMgr.Instance.PlayEffect(this.audioName.StringValue, self.gameObject.transform.position);
                    }
                    break;

                    #endregion

                    #region Bullet

                case TriggerType.Bullet:
                    var d = new Vector2(self.Dir * Mathf.Abs(this.dir.x), this.dir.y);
                    new DirectLineBullet(GameMath.Damage(self.Attack), d, self.position + new Vector3(0, 1, 0)
                                         , self, this.bulletName.StringValue, speed: this.bulletSpeed, maxLife: this.maxLife);
                    break;

                    #endregion

                    #region Parabloa


                case TriggerType.Parabloa:
                    switch (targetType)
                    {
                    case TargetType.Vector3Offset:
                        new ParabloaBullet(this.damage, this.bulletSpeed, this.timeToTarget, self.position + offset,
                                           self.position, self, this.bulletName.StringValue, this.maxLife);
                        break;

                    case TargetType.GetFromCache:
//                                Debug.Log($"SkillAsset【{skillAsset.skillName.StringValue}】.Vector3Cache:"+skillAsset.Vector3Cache);
                        new ParabloaBullet(this.damage, this.bulletSpeed, this.timeToTarget, skillAsset.Vector3Cache,
                                           self.position, self, this.bulletName.StringValue, this.maxLife);
                        break;
                    }

                    break;

                    #endregion

                    #region RayDamage

                case TriggerType.RayDamage:
                    //面对方向
                    var position = self.gameObject.transform.position;
                    var p        = new Vector2(position.x, position.y);

                    var target = this.rayLength * new Vector2(this.dir.x * self.Dir, this.dir.y);

                    //调整身高偏移
                    p += new Vector2(0, 0.1f * self.gameObject.transform.localScale.y);
                    Debug.DrawLine(p, p + target, Color.red);
                    var results = Physics2D.LinecastAll(p, p + target, this.rayTestLayer);

                    if (results.Length == 0)
                    {
                        return;
                    }

                    foreach (var result in results)
                    {
                        //对打击到的目标进行操作,添加各种效果
                        var hitPerson = result.transform.gameObject.GetPersonInfo() as IHighFivePerson;
                        if (hitPerson == null)
                        {
                            Debug.Log(result.transform.gameObject);
                            continue;
                        }
                        self.TryAttackSimple(hitPerson);
                    }
                    break;

                    #endregion

                    #region Trigger2D

                case TriggerType.Trigger2D:
                    if (Mathf.Abs(preLastTime) < 0.01f)
                    {
                        preLastTime = lastTime;
                    }
                    lastTime /= self.AttackSpeed;
                    if (self.gameObject == null)
                    {
                        break;
                    }
                    var sword   = self.gameObject.transform.Find(triggerPath);
                    var trigger = (sword.GetComponent <TriggerInputer>() ??
                                   sword.gameObject.AddComponent <TriggerInputer>());

                    trigger.onTriggerEnterEvent2D += this.OnTriggerEnter;
//                        Debug.Log("添加监听");
                    MainLoop.Instance.ExecuteLater(() =>
                    {
//                            Debug.Log("移除监听");
                        trigger.onTriggerEnterEvent2D -= this.OnTriggerEnter;
                    }, lastTime);

                    break;

                    #endregion
                }
            }, this.startTime);
        }
Beispiel #15
0
 protected virtual bool OnFindTarget(IHighFivePerson target) => true;
 public override void Init(IHighFivePerson self)
 {
     base.Init(self);
     mover.Velocity = initialSpeed;
 }
 public override void OnStart()
 {
     base.OnStart();
     self = gameObject.GetPersonInfo() as IHighFivePerson;
 }
Beispiel #18
0
        public HighFiveDamage(IHighFivePerson attacker, IHighFivePerson receiver, float?skillDamageScale = null)
        {
            Assert.IsTrue(attacker != null &&
                          receiver != null &&
                          attacker.IsAlive &&
                          receiver.IsAlive);


            if (System.Math.Abs(attacker.Attack) < 0.01f)
            {
                Debug.LogWarning("伤害是 0 ??");
            }

            IsPlayer = attacker is IHighFiveCharacter;


            //如果无敌直接返回
            if (receiver.IsInvincible)
            {
                IsInvincible = true;
                Damage       = 0;
                return;
            }


            this.OriginAttack = attacker.Attack;

            Damage = this.OriginAttack;
            if (Random.Range(0, 1f) < attacker.CritRate)
            {
                IsCrit  = true;
                Damage *= attacker.CritScale;
            }
            //技能倍率
            if (null != skillDamageScale)
            {
                this.ScaleSkillDamageScale = skillDamageScale.Value;
                IsSkill = true;
            }
            else
            {
                this.ScaleSkillDamageScale = 1.0f;
            }
            Damage *= ScaleSkillDamageScale;

            //增伤或减伤
            Damage *= receiver.TakeDamageScale;

            //Super
            if (IsPlayer && GlobalVar.isSuper)
            {
                IsSuper = true;
                Damage *= GameSettings.Instance.superAttackScale;
                CEventCenter.BroadMessage(Message.M_ExitSuper);
            }

            //闪避
            if (Random.Range(0, 1f) > receiver.DodgeRate)
            {// 闪避失败
                //计算格挡
                Damage -= receiver.TakeDamageBlock;

                IsBlock = true;

                if (Damage < 0)
                {
                    Damage = 0;
                }
            }
            else
            {// 闪避成功
                IsMissing = true;
                Damage    = 0;
            }
        }
        private Vector3 currentAngle; // 当前角度
        public ParabloaBullet(int damage, float shotSpeed, float time, Vector3 targetPos, Vector3 startPos, IHighFivePerson ap, string path, float maxLife = 4f, Transform parent = null)
            : base(damage, ap, path, startPos, maxLife, parent)
        {
            this.ShotSpeed = shotSpeed;
            this.pointA    = startPos;
            this.pointB    = targetPos;
            time           = Vector3.Distance(pointA, pointB) / ShotSpeed;

            // 设置起始点位置为A
            this.obj.transform.position = pointA;

            // 通过一个式子计算初速度
            speed = new Vector3((pointB.x - pointA.x) / time,
                                (pointB.y - pointA.y) / time - 0.5f * g * time,
                                (pointB.z - pointA.z) / time);
            // 重力初始速度为0
            Gravity = Vector3.zero;
            MainLoop.Instance.AddFixedUpdateFunc(FixedUpdate);
        }
 public override void OnAwake()
 {
     base.OnAwake();
     player = GlobalVar.G_Player as IHighFivePerson;
     self   = gameObject.GetPersonInfo() as IHighFivePerson;
 }
        public void RunTriggerUnit(IHighFivePerson self, params object[] args)
        {
            if (!enable)
            {
                return;
            }
            this.self = self;
            if (self == null || !self.IsAlive)
            {
                return;
            }

            var tempDegree = GetSuitableDegree(self);
            var dir        = new Vector2(Mathf.Cos(Mathf.Deg2Rad * tempDegree), Mathf.Sin(Mathf.Deg2Rad * tempDegree));

            MainLoop.Instance.ExecuteLater(() =>
            {
                switch (type)
                {
                    #region Effect

                case TriggerType.Effect:
//                        Debug.Log("技能系统——TriggerType.Effect");
                    self.PlayAttackEffects(attackEffects);
                    break;

                    #endregion

                    #region Animation

                case TriggerType.Animation:
                    if (self == null)
                    {
                        throw new Exception("SkillCore为空");
                    }


                    var animator = GameAnimator.GetInstance(self.gameObject.GetComponent <Animator>());

                    if (animator == null)
                    {
                        throw new Exception(self.CharacterName + "没有Animator组件");
                    }

                    animator.speed = this.animationSpeed * self.AttackSpeed;


                    animator.Play(Animator.StringToHash(this.animationName.StringValue), AnimationWeight.High);


                    break;


                    #endregion

                    #region Audio

                case TriggerType.Audio:
                    if (self.gameObject != null)
                    {
                        AudioMgr.Instance.PlayEffect(this.audioName.StringValue, self.gameObject.transform.position);
                    }
                    break;

                    #endregion

                    #region SingleBullet

                case TriggerType.SingleBullet:

                    var bulletObj = ResourceMgr.InstantiateGameObject(bulletName.StringValue,
                                                                      GetSuitablePosition(self));

                    var bullet = bulletObj.GetComponent <SingleBullet>();
                    if (!bullet)
                    {
                        throw new Exception($"{bulletObj.name}没有DirectBullet组建");
                    }
                    bullet.initialSpeed = speed * new Vector2(self.Dir * dir.x, dir.y).normalized;
                    bullet.damageScale  = damageScale;
                    bullet.gravityScale = gravityScale;
                    bullet.maxLife      = maxLife;
                    bullet.Init(self);
                    break;

                    #endregion

                    #region CurvedBullet

                case TriggerType.CurvedBullet:
                    var curveBulletObj = ResourceMgr.InstantiateGameObject(bulletName.StringValue,
                                                                           self.position + new Vector3(0, 0.3f, 0));

                    var curveBullet = curveBulletObj.GetComponent <CurvedBullet>();
                    if (!curveBullet)
                    {
                        throw new Exception($"{curveBulletObj.name}没有curveBulletObj组建");
                    }
                    curveBullet.aniX         = aniX;
                    curveBullet.aniY         = aniY;
                    curveBullet.xDir         = reverseX ? -self.Dir : self.Dir;
                    curveBullet.yDir         = reverseY ? -1 : 1;
                    curveBullet.damageScale  = damageScale;
                    curveBullet.gravityScale = gravityScale;
                    curveBullet.maxLife      = maxLife;
                    curveBullet.Init(self);
                    break;


                    #endregion

                    #region RayDamage

                case TriggerType.RayDamage:
                    //面对方向
                    var position = self.gameObject.transform.position;
                    var p        = new Vector2(position.x, position.y);

                    var target = this.rayLength * new Vector2(dir.x * self.Dir, dir.y);

                    //调整身高偏移
                    p += new Vector2(0, 0.1f * self.gameObject.transform.localScale.y);
                    Debug.DrawLine(p, p + target, Color.red);
                    var results = Physics2D.LinecastAll(p, p + target, this.rayTestLayer);

                    if (results.Length == 0)
                    {
                        return;
                    }

                    foreach (var result in results)
                    {
                        //对打击到的目标进行操作,添加各种效果
                        var hitPerson = result.transform.gameObject.GetPersonInfo() as IHighFivePerson;
                        if (hitPerson == null)
                        {
                            Debug.Log(result.transform.gameObject);
                            continue;
                        }
                        self.TryAttack(hitPerson);
                    }
                    break;

                    #endregion

                    #region Trigger2D

                case TriggerType.Trigger2D:
                    if (Mathf.Abs(preLastTime) < 0.01f)
                    {
                        preLastTime = lastTime;
                    }
                    lastTime /= self.AttackSpeed;
                    if (self.gameObject == null)
                    {
                        break;
                    }
                    var sword   = self.gameObject.transform.Find(triggerPath.Path);
                    var trigger = sword.GetOrAddComponent <TriggerInputer>();

                    trigger.onTriggerEnterEvent2D += this.OnTriggerEnter;
//                        Debug.Log("添加监听");
                    MainLoop.Instance.ExecuteLater(() =>
                    {
//                            Debug.Log("移除监听");
                        trigger.onTriggerEnterEvent2D -= this.OnTriggerEnter;
                    }, lastTime);

                    break;

                    #endregion

                    #region LightSword

                case TriggerType.LightSword:
                    var swordObj = ResourceMgr.InstantiateGameObject(swordPrefabName.StringValue);

                    var lightSword = swordObj.GetComponent <LightSword>();
                    if (!lightSword)
                    {
                        throw new Exception($"{swordObj.name}没有LightSword组建");
                    }

                    lightSword.anchorMode     = anchorMode;
                    lightSword.damageScale    = damageScale;
                    lightSword.delayTime      = delayTime;
                    lightSword.easeType       = easeType;
                    lightSword.startSize      = startSize;
                    lightSword.targetSize     = targetSize;
                    lightSword.widenTime      = widenTime;
                    lightSword.HandlePosition = GetSuitablePosition(self);
                    lightSword.RotateDegree   = GetSuitableDegree(self);
                    lightSword.Init(self);

                    break;

                    #endregion
                }
            }, this.startTime);
        }
 public override void OnAwake()
 {
     base.OnAwake();
     selfPerson = gameObject.GetPersonInfo() as IHighFivePerson;
     Assert.IsNotNull(selfPerson);
 }