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)); }
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); }
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>(); }
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)); }
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}"); }
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); }
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); }
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; }
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); }