/* @brief: 响应服务器同步位置事件入口 * @param: args 该事件相应参数列表 * @return void */ public static void on_location(VarList args) { string strIdent = args.GetString(0); IObject cobj; if (mObjectsDic.TryGetValue(strIdent, out cobj) && cobj != null) { cobj.OnLocation(); // 更新玩家AOI RangeTools.MotifyObjectAoi(mRole, cobj); } }
/* @brief: 响应服务器移动事件入口 * @param: args 该事件相应参数列表 * @return void */ public static void on_moving(VarList args) { string strIdent = args.GetString(0); IObject cobj; if (mObjectsDic.TryGetValue(strIdent, out cobj) && cobj != null) { cobj.OnMoving(); // 更新玩家AOI RangeTools.MotifyObjectAoi(mRole, cobj); } else { LogSystem.LogWarning("Recive on_moving , but ", strIdent, " you can't find in mObjects"); } }
void Update() { if (Obj == null) { return; } if (!mCanMove) { return; } Obj.mPosition = Obj.mGameObject.transform.position; if (Obj is CRoleObject) { RangeTools.MotifyRoleAoi(); return; } if (!mTargetPos.Equals(Vector3.zero)) { if (mMoveTarget != null) { mTargetPos = mMoveTarget.mPosition; } if (UtilTools.Vec2Distance(mObj.mPosition, mTargetPos) > mTargetDistance) { Vector3 dir = UtilTools.Vec3Direction(mTargetPos, mObj.mPosition); mAnimatorManager.SetRotation(dir); mAnimatorManager.RoleMoveCtrl(); } else { mTargetPos = Vector3.zero; if (mOnArrive != null) { mOnArrive(); } } } }
/// <summary> /// 获取技能目标 /// </summary> /// <param name="skillActionProperty"></param> /// <returns></returns> List <IObject> GetTargets(SkillActionProperty skillActionProperty) { float width = 0.0f; if (skillActionProperty.mSkillRangParametr.Count > 1) { width = skillActionProperty.mSkillRangParametr[1]; } if (skillActionProperty.mSkillRangeType == SkillRangeType.SkillRangeType_SelfLine && skillActionProperty.mSkillRangParametr.Count > 2) { if (skillActionProperty.mSkillRangParametr[2] == -1 && skillActionProperty.mSkillRangParametr[0] >= 0) { skillActionProperty.mSkillRangParametr[0] = skillActionProperty.mSkillRangParametr[0] * skillActionProperty.mSkillRangParametr[2]; } } return(RangeTools.GetEnemyByAOI(mObj, skillActionProperty.mSkillRangeType, skillActionProperty.mSkillRangParametr[0], width)); }
void Update() { if (mObj == null) { return; } if (mObj.mIsDead) { return; } if (mCurrentHp < 1 && !mObj.mIsDead) { mAnimatorManager.DeathAnim(); mObj.mIsDead = true; RangeTools.MotifyRoleAoi(); //TweenAlpha tween = TweenAlpha.Begin(mObj.mGameObject, 3.0f, 1.0f); //tween.AddOnFinished(EnemyDisappare); } }
public static void CallAddObject(string strIdent) { try { Game game = Game.Instance; if (game == null || game.mGameClient == null) { return; } IGameSceneObj sceneObj = game.mGameClient.GetSceneObj(strIdent); if (sceneObj == null) { return; } IObject cObj = null; int type = 0; if (!sceneObj.QueryPropInt("ObjectType", ref type)) { LogSystem.Log("could not find type : ", strIdent); return; } string strModel = string.Empty; if (!sceneObj.QueryPropString("ResourcePath", ref strModel)) { LogSystem.Log("could not find ResourcePath : ", strIdent); return; } ObjectType ObjType = (ObjectType)type; switch (ObjType) { case ObjectType.ObjectType_Player: if (game.mGameClient.IsPlayer(strIdent)) { cObj = new CRoleObject(); ObjectManager.mRole = cObj as CRoleObject; } else { cObj = new CPlayerObject(); } break; case ObjectType.ObjectType_Npc: cObj = new CNpcObject(); break; case ObjectType.ObjectType_Monster: cObj = new CMonsterObject(); break; case ObjectType.ObjectType_Soldier: case ObjectType.ObjectType_Creeps: break; case ObjectType.ObjectType_Born: break; } if (cObj != null) { cObj.mObjectType = ObjType; cObj.mGameSceneObj = sceneObj; cObj.mObjectRes = strModel; cObj.mStrIdent = strIdent; cObj.OnAddObject(); ObjectManager.AddObject(strIdent, cObj); if (cObj is CRoleObject) { //GUIManager.CacheView<CharacterPanel>(); //GUIManager.CacheView<PlayerMainViewPanel>(); //GUIManager.CacheView<PlayerControlPanel>(); //GUIManager.CacheView<PlayerStatePanel>(); //GUIManager.CacheView<PlayerMapControlPanel>(); //GUIManager.CacheView<MainChatPanel>(); // 添加到主角的AOI中 } else { RangeTools.MotifyObjectAoi(mRole, cObj); } } } catch (System.Exception ex) { LogSystem.LogError("on_add_object catch error", ex.ToString()); } }
/// <summary> /// 释放技能 /// </summary> public void DoSkill(int skillId) { if (!mSkillDic.ContainsKey(skillId)) { return; } Skill skill = mSkillDic[skillId]; // 检测技能释放条件 if (!skill.Do()) { return; } // 目标超过视野范围,设置目标为空,重新寻找新的目标 if (mTarget != null && UtilTools.Vec2Distance(mTarget, mObj) > skill.mSkillRange) { mTarget = null; } if (mTarget == null) { List <IObject> objList = RangeTools.GetEnemyByAOI(mObj, SkillRangeType.SkillRangeType_SelfRound, mDirectionRange, 0.0f); int objCount = objList.Count; float distance = float.MaxValue; IObject minDistanceObj = null; // 检测距离最近的攻击目标,调整朝向 for (int i = 0; i < objCount; ++i) { IObject enemy = objList[i]; if (enemy == null) { continue; } float tempDistance = UtilTools.Vec2Distance(mObj, enemy); if (tempDistance < distance) { distance = tempDistance; minDistanceObj = enemy; } } mTarget = minDistanceObj; } if (mTarget != null) { Vector3 dir = UtilTools.Vec3Direction(mTarget, mObj); mAnimatorManager.SetRotation(dir); } int type = skill.mSkillProperty.mAnimatorSkillProperty.mySkillAction; if (type == 0) { DoAttack(); } else { mAnimatorManager.SkillCtrl(skillId, type); } }
public void InitMonster(List <CloneSceneProperty.CloneSceneMonsterInfo> list) { if (list == null) { return; } int count = list.Count; if (count < 1) { return; } //GameObject monsterParent = NGUITools.AddChild(gameObject); //monsterParent.transform.localPosition = Vector3.zero; //monsterParent.name = "Monsters"; for (int i = 0; i < count; ++i) { CloneSceneProperty.CloneSceneMonsterInfo csm = list[i]; if (csm == null) { continue; } int monsterId = csm.mMonsterId; Vector3 postion = csm.mMonsterPosition; float rotation = csm.mMonsterRotationY; float scale = csm.mMonsterScale; if (scale.Equals(0.0f)) { scale = 1.0f; } CMonsterObject cObj = new CMonsterObject(); GameObject go = ResourceManager.Instance.GetMonsterPrefab(monsterId.ToString()); if (go == null) { LogSystem.LogError("GetMonsterPrefab Failed, monsterId = " + monsterId); continue; } ++mIndex; cObj.mObjId = monsterId; cObj.mIndex = mIndex; go.name = monsterId.ToString(); //go.transform.parent = monsterParent.transform; go.transform.position = postion; go.transform.rotation = Quaternion.Euler(0.0f, rotation, 0.0f); go.transform.localScale = new Vector3(scale, scale, scale); //ui GameObject uiPrefab = ResourceManager.Instance.GetUIPrefab("UMonsterBloodUI"); Vector2 position2 = Camera.main.WorldToScreenPoint(postion); uiPrefab.transform.position = position2; cObj.mGameObject = go; cObj.mTransform = go.transform; cObj.mPosition = postion; cObj.AddComponent <AnimatorComponent>(); cObj.AddComponent <RestoreComponent>(); cObj.AddComponent <InjuredComponent>(); cObj.AddComponent <FindingPathComponent>(); cObj.AddComponent <MoveComponent>(); cObj.AddComponent <AttackComponent>(); cObj.AddComponent <HatredComponent>(); cObj.AddComponent <PursuitComponent>(); cObj.AddComponent <SkillComponent>(); cObj.AddComponent <EffectComponent>(); RangeTools.MotifyObjectAoi(ObjectManager.mRole, cObj); ObjectManager.mObjectsList.Add(cObj); } }