예제 #1
0
    /* @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);
        }
    }
예제 #2
0
    /* @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");
        }
    }
예제 #3
0
    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();
                }
            }
        }
    }
예제 #4
0
    /// <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));
    }
예제 #5
0
    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);
        }
    }
예제 #6
0
    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());
        }
    }
예제 #7
0
    /// <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);
        }
    }
예제 #8
0
    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);
        }
    }