123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- namespace YLBattle
- {
- /// <summary>
- /// 子弹定义
- /// </summary>
- public class CBullet
- {
- /// <summary>
- /// 子弹唯一标示符
- /// </summary>
- private string mID = string.Empty;
- /// <summary>
- /// 子弹隶属技能模板ID
- /// </summary>
- private string mTID = string.Empty;
- /// <summary>
- /// 是否为必杀技
- /// </summary>
- private bool mIsKill = false;
- /// <summary>
- /// 技能等级
- /// </summary>
- private int mLevel = 0;
- /// <summary>
- /// 是否标记目标
- /// </summary>
- private bool mIsMarkTrg = false;
- /// <summary>
- /// 生成序号
- /// </summary>
- private int mSN = 0;
- /// <summary>
- /// 技能创建者id
- /// </summary>
- private string mCastFighter = null;
- /// <summary>
- /// 子弹目标
- /// </summary>
- private string mTrgFighter = null;
- /// <summary>
- /// 当前所在位置
- /// </summary>
- private Vector3 mCurrentPos = Vector3.zero;
- /// <summary>
- /// 子弹目标类型
- /// </summary>
- private EBulletTargeType mTargetType;
- /// <summary>
- /// 当前子弹瞄准策略
- /// </summary>
- private IBulletAIM mAimPolicy;
- /// <summary>
- /// 当前子弹伤害目标锁定策略
- /// </summary>
- private IBulletAIM mDamagePolicy;
- /// <summary>
- /// 子弹目标参数
- /// </summary>
- private object mTargetParam;
- /// <summary>
- /// 子弹状态机
- /// </summary>
- private CBulletFSM mFSM = null;
- /// <summary>
- /// 发射时间
- /// </summary>
- private long mLaunchTime = long.MinValue;
- /// <summary>
- /// 子弹回收标志
- /// </summary>
- private bool mIsDead = false;
- /// <summary>
- /// 碰撞事件队列
- /// </summary>
- private Queue<BulletCollideEvent> mCollideQueue = new Queue<BulletCollideEvent>();
- /// <summary>
- /// 外部触发回传参数
- /// </summary>
- public string mTriggerParm = string.Empty;
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="env">环境上下文数据</param>
- /// <param name="id">唯一编号</param>
- /// <param name="tid">模板编号</param>
- /// <param name="sn">序列号</param>
- /// <param name="caster">施法者</param>
- /// <param name="target">目标</param>
- /// <param name="level">技能等级</param>
- /// <param name="aimPolicy">瞄准策略</param>
- /// <param name="aimPrm">瞄准附加</param>
- public CBullet(BattleParam env, string id, string tid, int sn, string caster, string target, bool ismarktrg,
- int level,
- IBulletAIM aimPolicy,
- IBulletAIM damaPolicy,
- int aimPrm = 0,
- string triggerparm = "")
- {
- this.mID = id;
- this.mTID = tid;
- this.mSN = sn;
- this.mCastFighter = caster;
- this.mTrgFighter = target;
- this.mLevel = level;
- this.mIsMarkTrg = ismarktrg;
- this.mCurrentPos = Vector3.zero;
- this.mAimPolicy = aimPolicy;
- this.mDamagePolicy = damaPolicy;
- this.mTriggerParm = triggerparm;
- this.mFSM = new CBulletFSM();
- this.mFSM.Initialize(env, this);
- }
- /// <summary>
- /// 获取子弹状态机
- /// </summary>
- /// <returns>状态机对象</returns>
- public CBulletFSM FSM()
- {
- return this.mFSM;
- }
- /// <summary>
- /// 帧周期调度
- /// </summary>
- public void OnUpdate()
- {
- if (null != this.mFSM)
- {
- this.mFSM.OnUpdateFSM();
- }
- }
- #region(数据相关)
- /// <summary>
- /// 获取子弹实例ID
- /// </summary>
- /// <returns>实例id</returns>
- public string ID()
- {
- return this.mID;
- }
- /// <summary>
- /// 获取模板(所属技能)数据ID
- /// </summary>
- /// <returns>模板数据id</returns>
- public string TID()
- {
- return this.mTID;
- }
- /// <summary>
- /// 必杀技能
- /// </summary>
- /// <returns>模板数据id</returns>
- public bool IsKill()
- {
- return this.mIsKill;
- }
- /// <summary>
- /// 获取技能等级
- /// </summary>
- /// <returns>技能等级</returns>
- public int Level()
- {
- return this.mLevel;
- }
- /// <summary>
- /// 获取子弹生成序号
- /// </summary>
- /// <returns>序号id</returns>
- public int SN()
- {
- return this.mSN;
- }
- /// <summary>
- /// 获取子弹发射者
- /// </summary>
- /// <returns>发射者id</returns>
- public string Owner()
- {
- return this.mCastFighter;
- }
- /// <summary>
- /// 子弹瞄准的目标
- /// </summary>
- /// <returns>发射者id</returns>
- public string AimTarget()
- {
- return this.mTrgFighter;
- }
- /// <summary>
- /// 瞄准策略
- /// </summary>
- /// <returns></returns>
- public IBulletAIM AimPolicy()
- {
- return this.mAimPolicy;
- }
- /// <summary>
- /// 伤害策略
- /// </summary>
- /// <returns></returns>
- public IBulletAIM DamagePolicy()
- {
- return this.mDamagePolicy;
- }
- /// <summary>
- /// 获取子弹当前所在位置
- /// </summary>
- /// <returns>位置信息</returns>
- public Vector3 CurrentPos()
- {
- return this.mCurrentPos;
- }
- /// <summary>
- /// 修改子弹当前位置
- /// </summary>
- /// <param name="seat">占位</param>
- public void ModifyCurrentPos(Vector3 pos)
- {
- this.mCurrentPos = pos;
- }
- /// <summary>
- /// 获取目标类型
- /// </summary>
- /// <returns>目标类型</returns>
- public EBulletTargeType CurrentTargetType()
- {
- return this.mTargetType;
- }
- /// <summary>
- /// 获取子弹目标参数(目标ID)
- /// </summary>
- /// <returns>目标ID</returns>
- public object CurrentTargetParam()
- {
- return this.mTargetParam;
- }
- /// <summary>
- /// 设置目标数据
- /// </summary>
- /// <param name="type">目标类型</param>
- /// <param name="param">参数</param>
- public void SetTarget(EBulletTargeType type, object param)
- {
- this.mTargetType = type;
- this.mTargetParam = param;
- }
- /// <summary>
- /// 设置子弹发射时间
- /// </summary>
- /// <param name="time">时间</param>
- public void SetLaunchTime(long time)
- {
- this.mLaunchTime = time;
- }
- /// <summary>
- /// 获取子弹发射时间
- /// </summary>
- /// <returns>时间</returns>
- public long GetLaunchTime()
- {
- return this.mLaunchTime;
- }
- /// <summary>
- /// 获取碰撞事件数量
- /// </summary>
- /// <returns>数量值</returns>
- public int HasCollideEvent()
- {
- return this.mCollideQueue.Count;
- }
- /// <summary>
- /// 出队碰撞事件
- /// </summary>
- /// <returns>没有事件返回NULL</returns>
- public BulletCollideEvent CollideEvent()
- {
- if (this.mCollideQueue.Count == 0)
- {
- return null;
- }
- return this.mCollideQueue.Dequeue();
- }
- /// <summary>
- /// 入队碰撞事件
- /// </summary>
- /// <param name="bce">事件描述</param>
- public void EnqueueCollideEvent(BulletCollideEvent bce)
- {
- this.mCollideQueue.Enqueue(bce);
- }
- /// <summary>
- /// 标记子弹为待回收状态
- /// </summary>
- public void MarkBulletDead()
- {
- this.mIsDead = true;
- }
- /// <summary>
- /// 检测子弹是否为待回收状态
- /// </summary>
- /// <returns>true待回收, false不用回收</returns>
- public bool IsBulletDead()
- {
- return this.mIsDead;
- }
- /// <summary>
- /// 检测子弹是否为待回收状态
- /// </summary>
- /// <returns>true待回收, false不用回收</returns>
- public bool IsMarkTrg()
- {
- return this.mIsMarkTrg;
- }
- #endregion
- }
- }
|