private void UpdateActors(AoeObj aoeObj) { //离开的演员 List <ActorObj> leaveActors = new List <ActorObj>(); for (int i = 0; i < aoeObj.actorInRange.Count; i++) { ActorObj actor = aoeObj.actorInRange[i]; if (!Sensor.CheckActorInRange(aoeObj, actor)) { leaveActors.Add(actor); } } for (int a = 0; a < leaveActors.Count; a++) { aoeObj.actorInRange.Remove(leaveActors[a]); } ExecuteActorLeaveFunc(aoeObj, leaveActors); //新进入的演员 List <ActorObj> enterActors = new List <ActorObj>(); foreach (var item in Sensor.GetActorsInRange(aoeObj)) { if (aoeObj.actorInRange.IndexOf(item) < 0) { enterActors.Add(item); } } ExecuteActorEnterFunc(aoeObj, enterActors); for (int a = 0; a < enterActors.Count; a++) { aoeObj.actorInRange.Add(enterActors[a]); } }
public behaviac.EBTStatus CanAttack(ActorType aimActorType) { // return behaviac.EBTStatus.BT_SUCCESS; if (!m_actor.CanChangeAttack() || m_actor.curActorState == ACTOR_STATE.AS_RUN) { return(behaviac.EBTStatus.BT_FAILURE); } //当前是否硬直状态 if (m_actor.IsNonControl || m_actor.IsActorEndure()) { return(behaviac.EBTStatus.BT_FAILURE); } //增加攻击对象 m_AttackObj = m_actor.GetSelTarget(); if (m_AttackObj) { return(behaviac.EBTStatus.BT_SUCCESS); } else { m_AttackObj = m_actor.AutoSelTarget(10); if (m_AttackObj) { m_actor.SelectTarget(m_AttackObj); return(behaviac.EBTStatus.BT_SUCCESS); } } return(behaviac.EBTStatus.BT_FAILURE); }
//GameObject boneEffect = null; //Transform refNode = null; /// <summary> /// 是否随着owner一起缩放 /// </summary> public override void Init(LuaTable desc, ActorObj _owner, ActorObj _giver) { base.Init(desc, _owner, _giver); // effectPath = "Effect/skill/buff/" + desc.buff_param3; // scaleEffectWithOwner = (desc.fParam[3] == 0); }
public void OnExit(ActorObj actor) { for (int i = 0; i < skillGiftsList.Count; ++i) { skillGiftsList[i].OnExit(actor); } }
public void Update(ActorObj actor) { for (int i = 0; i < skillGiftsList.Count; ++i) { skillGiftsList[i].Update(actor); } }
public void SetWing(int id) { if (null == mRoleModel) { return; } Transform bTran = ActorObj.RecursiveFindChild(mRoleModel.transform, "E_back"); if (bTran == null) { return; } id = ConfigManager.Instance.BagItem.GetWingModelID(id); if (id != 0) { GameObject obj = SceneLoader.LoadModelObject(id); if (obj == null) { return; } obj.transform.SetParent(bTran); obj.transform.localPosition = Vector3.zero; obj.transform.localRotation = Quaternion.identity; obj.SetActive(true); } }
/// <summary> /// 场景模型增加通知 /// </summary> /// <param name="obj"></param> public void OnModelEventUpdate(ActorObj obj) { // ActorObj obj = parameter.objParameter as ActorObj; if (obj is NpcObj) { if (!serverByScripts.ContainsKey(obj.ServerID)) { Transform pointNode = obj.transform.Find("E_top"); GameObject p = Instantiate(logoPrefab) as GameObject; p.SetActive(true); p.gameObject.transform.SetParent(pointNode); p.gameObject.transform.GetComponent <RectTransform>().position = pointNode.position; p.gameObject.transform.GetComponent <RectTransform>().localScale = Vector3.one; p.transform.SetParent(grid.transform); p.transform.SetParent(grid.transform); HeadLogoItem head = p.GetComponent <HeadLogoItem>(); head.Set(obj, obj.ConfigID, obj.ServerID); serverByScripts[obj.ServerID] = head; } else { serverByScripts[obj.ServerID].gameObject.SetActive(true); serverByScripts[obj.ServerID].Set(obj, obj.ConfigID, obj.ServerID); } } }
protected override void Update() { if (bAutoEnd) { return; } //目标死亡切换 if (m_aimTransform != null) { ActorObj actorBase = m_aimTransform.GetComponent <ActorObj>(); if (actorBase != null) { //在这里判断,通过事件发送可能已经被丢失,所以在这里判断 if (actorBase.IsDeath()) { //Debug.Log("1"); m_aimTransform = null; CancelInvoke("NextAim"); NextAim(); } } } base.Update(); }
//是否怪物全部死亡 public bool IsMonsterAllDeath() { List <ActorObj> actorList = CoreEntry.gActorMgr.GetAllMonsterActors(); for (int i = 0; i < actorList.Count; ++i) { ActorObj actorBase = actorList[i]; //对IOS出现怪物不动 报错的异常 进行错误处理 if (GameLogicMgr.checkValid(actorBase.gameObject) == false) { continue; } //敌方阵营才算 if (actorBase.m_TeamType == 3) { if (actorBase.mActorType == ActorType.AT_MONSTER || actorBase.mActorType == ActorType.AT_BOSS || actorBase.mActorType == ActorType.AT_MECHANICS) { if (!actorBase.IsDeath()) { return(false); } } } } return(true); }
/// <summary> /// 查找目标。 /// </summary> /// <param name="dis">查找范围。</param /// <returns>查找的目标对象。</returns> public ActorObj FindTarget(float dis, int mid = 0) { //如果已经有目标了 UpdateSelectTarget(); if (mid != 0 && m_SelectTargetObject != null) { if (m_SelectTargetObject.mActorType == ActorType.AT_MONSTER || m_SelectTargetObject.mActorType == ActorType.AT_BOSS) { if (mid == (m_SelectTargetObject as MonsterObj).ConfigID) { return(m_SelectTargetObject); } } } float minDistance = Mathf.Min(dis, 100000.0f); ActorObj selectActor = null; if (PlayerData.Instance.CurPKMode != PKMode.PK_MODE_PEACE) { //非和平模式优先搜索玩家 selectActor = GetNearestActor(CoreEntry.gActorMgr.GetAllPlayerActors(), ref minDistance); } if (selectActor == null) { selectActor = GetNearestActor(CoreEntry.gActorMgr.GetAllMonsterActors(), ref minDistance); } SelectTarget(selectActor); return(selectActor); }
// 杀死某角色的所有召唤物 static public void OnSummonKillAll(ActorObj actorBase) { // if (actorBase.m_skillSummonList != null) { int index = 0; while (true) { if (actorBase.m_skillSummonList.Count <= index) { break; } ActorObj.SummonData summon = actorBase.m_skillSummonList[index]; if (actorBase.m_skillSummonList[index].deadthToKill) { OnSummonDeath(actorBase.m_skillSummonList[index].entityid); actorBase.m_skillSummonList.Remove(summon); } else { index++; } } } }
//选中monster public override void SelectTarget(ActorObj selObject) { ActorObj oldactor = m_SelectTargetObject; m_SelectTargetObject = selObject; OnSelectTarget(oldactor, m_SelectTargetObject); }
/// <summary> /// 判断技能是否使用完毕,有连招的会继续使用连招。 /// </summary> /// <param name="actor">角色对象。</param> /// <param name="skillid">技能编号。</param> /// <returns>是否使用完毕。</returns> public static bool IsCastSkillOver(ActorObj actor, int skillid) { if (actor.curActorState != ACTOR_STATE.AS_ATTACK) { return(true); } //如果在攻击状态没有动作,则视为技能施放完毕 if (actor.GetComponent <Animation>().isPlaying == false && actor.m_bIsTower == false) { return(true); } //判断连招,是否组合技能 ComposeSkillDesc desc = CoreEntry.gGameDBMgr.GetComposeSkillDesc(actor.curCastSkillID, skillid); if (desc != null) { StateParameter param = new StateParameter(); param.state = ACTOR_STATE.AS_ATTACK; param.skillID = skillid; param.isComposeSkill = true; param.composeSkillDesc = desc; //请求连招切换,能连招则认为此技能结束了 bool bRet = actor.ComposeSkillCanCastSkill(param.composeSkillDesc.changeTime); return(bRet); } return(false); }
/// <summary> /// 添加一个Actor /// </summary> /// <param name="actor"></param> public void AddActorObj(ActorObj actor) { if (actor is PlayerObj || actor is OtherPlayer) { if (!mPlayerList.Contains(actor)) { mPlayerList.Add(actor); } } else if (actor is MonsterObj) { if (!mMonsterList.Contains(actor)) { mMonsterList.Add(actor); } } else if (actor is NpcObj) { if (!mNPCList.Contains(actor)) { mNPCList.Add(actor); } } else if (actor is PetObj) { if (!mPetList.Contains(actor)) { mPetList.Add(actor); } } }
/// <summary> /// 角色死亡。 /// </summary> public void OnGameEventMonsterDeath(GameEvent ge, EventParameter parameter) { ActorObj actor = parameter.goParameter.GetComponent <ActorObj>(); MonsterObj monster = actor as MonsterObj; if (monster == null) { return; } List <LuaTable> anis; if (!m_CacheMonsterAnimation.TryGetValue(monster.ConfigID, out anis)) { return; } int map = MapMgr.Instance.EnterMapId; for (int i = 0; i < anis.Count; ++i) { LuaTable cfg = anis[i]; if (cfg.Get <int>("monster") == MONSTER_TYPE_DIE) { int sceneid = cfg.Get <int>("sceneid"); if (sceneid == 0 || sceneid == map) { TryPlayerCutScene(cfg); break; } } } }
public void AddBuff(BuffData buffData, ActorObj TargetObj) { if (TargetObj != null) { //区分目标 LuaTable desc = ConfigManager.Instance.Skill.GetBuffConfig(buffData.buffType); if (desc != null) { if (TargetObj.GetBuff(buffData.BufferInstanceID) != null) { //Debug.LogError("重复BUFF " + buffData.BufferInstanceID + " " + buffData.buffType); return; } TargetObj.Addbuff(buffData, TargetObj); // buffList.Add(buffData.BufferInstanceID, TargetObj); buffList[buffData.BufferInstanceID] = TargetObj; if (TargetObj.ServerID == CoreEntry.gActorMgr.MainPlayer.ServerID) { EventParameter msg = new EventParameter(); msg.longParameter = buffData.buffType; // Debug.LogError("添加BUFF " + buffData.BufferInstanceID + " " + buffData.buffType); CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_CC_ADDBUFF, msg); } } } }
void DisableTakeWayEffect() { ActorObj actorBase = null; foreach (int i in m_TakeAwayGameObjectMap.Keys) { if (m_TakeAwayGameObjectMap[i] != null) { actorBase = m_TakeAwayGameObjectMap[i].GetComponent <ActorObj>(); if (actorBase != null) { actorBase.CanCurveMove(); if (m_param.bCanNotMoveWhenTakenAway) { actorBase.BeTakenAway = false; actorBase.IgnoredGravityMotion = false; // Vector3 groundPos = BaseTool.instance.GetGroundPoint(actorBase.m_transform.position); // actorBase.m_transform.position = groundPos; actorBase.FallDown(); } } } } m_TakeAwayGameObjectMap.Clear(); }
public override void Stop(bool isSendEvent) { if (m_eventMgr == null) { return; } m_dstPos = Vector3.zero; if (isSendEvent) { //todo:通知,移动停止 EventParameter param = EventParameter.Get(); param.goParameter = this.gameObject; m_eventMgr.TriggerEvent(GameEvent.GE_PLAYER_MOVE_STOP, param); //renwuzhixiangSetActive(false); } EventParameter param1 = EventParameter.Get(); param1.objParameter = transform.position; ActorObj actor = gameObject.GetComponent <ActorObj>(); if (actor && actor.IsMainPlayer()) { if (m_eventMgr != null) { if (MapMgr.Instance.InMainCity) { m_eventMgr.TriggerEvent(GameEvent.GE_PLAYER_MOVE_Arrive, param1); } } } }
private void OnRoleAttrInfo(GameEvent ge, EventParameter parameter) { MsgData_sRoleAttrInfoNotify data = parameter.msgParameter as MsgData_sRoleAttrInfoNotify; ActorObj obj = CoreEntry.gActorMgr.GetActorByServerID(data.RoleID); if (obj != null) { if (ArenaMgr.Instance.IsArena)//如果是竞技场 更新血量 { CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_ARENA_HP_REFRESH, null); } obj.UpdateAttr(data.AttrList); }else //查看缓存中的数据 { SceneObj so = mSceneCache.Find(o => { return o.ObjGuid == data.RoleID; }); if(so != null && so.ObjType == EnEntType.EnEntType_Monster) { var msg = so.ObjData as MsgData_sSceneObjectEnterMonster; foreach(var attr in data.AttrList) { var type = BaseAttr.GetBasicAttrTypeFromStatType(attr.AttrType); switch(type) { case BasicAttrEnum.CurHP: msg.CurHp = attr.AttrValue; break; case BasicAttrEnum.MaxHP: msg.MaxHp = attr.AttrValue; break; } } } } }
//int m_num = 1; //初始化 public void Init(GameObject obj) { m_actorObject = obj; //m_ani = m_actorObject.GetComponent<Animation>(); m_actor = (m_actorObject.GetComponent <ActorObj>()); m_transform = m_actorObject.transform; m_animationCurveData = m_actorObject.GetComponent <AnimationCurveData>(); if (m_animationCurveData == null) { //LogMgr.LogError(obj.name + ":缺少动画曲线组件AnimationCurveData,可能将导致异常。美术请检查该模型!!!"); } if (m_actor != null && m_actor != null) { m_curRadius = m_actor.GetColliderRadius(); } else { LogMgr.LogError("Please Check m_actor:" + m_actor + " : " + m_actor); } //如果是PVP状态 if (CoreEntry.gGameMgr.IsPvpState()) { m_curRadius += 1.8f; } }
protected override void OnInit(GameObject go) { ActorObj actorObj = go.GetComponent <ActorObj>(); actorObj.OnDisplayGoChange += OnDisplayGoChange; OnDisplayGoChange(actorObj); }
public void LookAt(GameObject target, ActionCallBack.LookAtFinishCallBack callback = null, float time = -1) { if (null == target) { return; } if (ActorObj == null) { return; } ActionCallBack acb = ActorObj.GetComponent <ActionCallBack>(); if (ActorObj != null && acb != null) { acb.m_LookAtFinishCallBack = callback; } Hashtable args = new Hashtable(); args.Add("time", time < 0? CalcRotateTime(ActorObj.transform, target.transform): time); args.Add("delay", 0.0f); args.Add("looktarget", target.transform.position); args.Add("oncomplete", "ActionLookAtFinishCallBack"); args.Add("oncompleteparams", "end"); args.Add("oncompletetarget", m_EntityObj); iTween.LookTo(ActorObj, args); }
public void Recover(ActorObj actor) { for (int i = 0; i < skillGiftsList.Count; ++i) { skillGiftsList[i].Recover(actor); } }
public void Attack(ActionCallBack.AttackFinishCallBack FinishCallBack = null, ActionCallBack.PlayBeAttackOneStep hit_1 = null, ActionCallBack.PlayBeAttackTwoStep hit_2 = null, ActionCallBack.PlayBeAttackEffect eff = null, ActionCallBack.ShowChangePlayerInfo changeVal = null) { if (null == ActorObj) { return; } // PlayEntityAction( GlobalValue.ActionName , GlobalValue.Action_Attack ); BattleActor self = Battle.Instance.GetActorByInstId(PlayerID); if (self == null) { return; } SetAnimationParam(self.attackAnim_, AnimatorParamType.APT_Trigger); ActionCallBack callback = ActorObj.GetComponent <ActionCallBack>(); if (null == callback) { return; } callback.AttackFinish = FinishCallBack; callback.m_PlayBeAttackOneStep = hit_1; callback.m_PlayBeAttackTwoStep = hit_2; callback.m_PlayBeAttackEffect = eff; callback.m_ShowChangePlayerInfo = changeVal; hasActionCallBackToCall = true; }
/// <summary> /// 跨场景寻路 /// </summary> /// <param name="destMapID">目的地图ID</param> /// <param name="destPosition">目的位置</param> public void StartPathFinder(int destMapID, Vector3 destPosition) { CoreEntry.gEventMgr.RemoveListener(GameEvent.GE_JOYSTICK_DOWN, OnJoyStickDown); bUserMul = false; curMapID = MapMgr.Instance.EnterMapId; targetMapID = destMapID; targetPostion = destPosition; ActorObj ag = CoreEntry.gActorMgr.GetActorByServerID(MainRole.Instance.serverID); if (destMapID == curMapID)//同一个地图直接走过去 { ActorObj actor = CoreEntry.gActorMgr.GetActorByServerID(MainRole.Instance.serverID); actor.MoveToPos(destPosition); ag.ReqRideHorse(); return; } if (AnalysePath(curMapID, destMapID)) { CoreEntry.gEventMgr.AddListener(GameEvent.GE_JOYSTICK_DOWN, OnJoyStickDown);//开始跨场景寻路才需要简体摇杆按下时间,判断是否打断 curIndex = 0; ActorObj actor = CoreEntry.gActorMgr.GetActorByServerID(MainRole.Instance.serverID); SceneEntityConfig curPortal = mPortals[curIndex]; bUserMul = actor.MoveToPos(curPortal.position); ag.ReqRideHorse(); } }
public void UpdateHandler() { //AnimatorStateInfo animatorState = m_EntityAnimator.GetCurrentAnimatorStateInfo(0); //if(animatorState.normalizedTime >= 1f) if (isPlayBack) { float newPlaybackTime = m_EntityAnimator.playbackTime + Time.deltaTime; if (newPlaybackTime > m_EntityAnimator.recorderStopTime) { newPlaybackTime = 0f; m_EntityAnimator.StopPlayback(); isPlayBack = false; return; } m_EntityAnimator.playbackTime = newPlaybackTime; } if (stateList_ != null) { for (int i = 0; i < stateList_.Count; ++i) { if (stateList_[i].workingInst_ != null) { BoxCollider box = ActorObj.GetComponent <BoxCollider>(); Vector3 pos = new Vector3(ActorObj.transform.position.x, ActorObj.transform.position.y, ActorObj.transform.position.z + box.center.z + box.size.z); stateList_[i].workingInst_.transform.localPosition = pos; } } } }
public override void Update() { if (m_actor != null && m_actorObject != null && m_curSkillID != 0 && m_actor.m_bRunToAttack) { ActorObj selObject = m_actor.GetSelTarget(); if (selObject != null) { float distance = Vector3.Distance(m_actorObject.transform.position, selObject.transform.position); if (distance <= m_Attackdistance * 1.5f)// 适当增加攻击距离 { m_actor.OnCastSkill(m_curSkillID); m_actorObject = null; m_curSkillID = 0; } else { if (selObject != null) { float dist = Vector3.Distance(m_vNavPos, selObject.transform.position); if (dist > 0.1f) { Vector3 vDis = selObject.transform.position - m_actor.transform.position; vDis.Normalize(); m_vNavPos = m_actor.transform.position + vDis * m_Attackdistance; } } m_actor.MoveToPos(m_vNavPos, false); Debug.DrawLine(m_actor.transform.position, m_vNavPos, Color.red); } } } }
public void Recover(ActorObj m_actor) { OnExit(m_actor); OnEnter(m_actor); delayFrameForRecover = 2; isRecover = true; }
public override void Init() { if (this.gameObject.GetComponent <NavMeshAgent>() == null) { m_agent = this.gameObject.AddComponent <NavMeshAgent>(); } else { m_agent = this.gameObject.GetComponent <NavMeshAgent>(); } m_agent.enabled = false; m_agent.speed = 6; m_agent.acceleration = 20; //启动速度 m_transform = this.transform; m_eventMgr = CoreEntry.gEventMgr; m_isRuning = false; fRemainPath = 0.0f; nCount = 1; m_ActorBase = this.gameObject.GetComponent <ActorObj>(); m_agent.speed = m_ActorBase.mBaseAttr.Speed; }
// Use this for initialization void Start() { CancelInvoke("Start"); if (m_bossDeathFromSkyDesc == null) { return; } //m_skillBase = this.transform.root.gameObject.GetComponent<SkillBase>(); m_aimActorObject = m_skillBase.m_actor.GetAttackObj(); if (m_aimActorObject == null) { m_aimActorObject = m_skillBase.m_hitActor; } //影子去掉 m_skillBase.m_actor.HideBlobShadow(); //拉到空中 Invoke("RiseToSky", m_bossDeathFromSkyDesc.riseTime); //下落准备,位移恢复 Invoke("PrepareDownTime", m_bossDeathFromSkyDesc.prepareDownTime); //落到地面,触发事件 Invoke("DownOnGround", m_bossDeathFromSkyDesc.downTime); }