public static ColliderPrefab CreateColliderPrefab(GameObject fab, ColliderData data)
        {
            Debug.Trace("CreateColliderPrefab " + fab.name);
            CBaseShape collider = null;

            if (data == null)
            {
                Debug.LogError(fab.name + " Miss ColliderDataMono ");
                return(null);
            }

            if (data.radius > 0)
            {
                //circle
                collider = new CCircle(data.radius);
            }
            else
            {
                //obb
                collider = new COBB(data.size, data.deg);
            }
            Debug.Trace($"{fab.name} !!!CreateCollider  deg: {data.deg} up:{data.size} radius:{data.radius}");
            var colFab = new ColliderPrefab();

            colFab.parts.Add(new ColliderPart()
            {
                transform = new CTransform2D(LVector2.zero),
                collider  = collider
            });
            return(colFab);
        }
예제 #2
0
        public void Play(string name, bool isCrossfade = false)
        {
            if (config == null)
            {
                return;
            }
            if (_curAnimName == name)
            {
                return;
            }
            var idx = _animNames.IndexOf(name);

            if (idx == -1)
            {
                UnityEngine.Debug.LogError("miss animation " + name);
                return;
            }

            Debug.Trace($"{baseEntity.EntityId} PlayAnim {name} rawName {_curAnimName}");
            var hasChangedAnim = _curAnimName != name;

            _curAnimName = name;
            _curAnimIdx  = idx;
            UpdateBindInfo();
            if (hasChangedAnim)
            {
                //owner.TakeDamage(0, owner.transform2D.Pos3);
                ResetAnim();
            }

            view?.Play(_curAnimName, isCrossfade);
        }
예제 #3
0
        public void StartGame(Msg_G2C_GameStartInfo gameStartInfo, int localPlayerId)
        {
            if (_hasStart)
            {
                return;
            }
            _hasStart = true;
            var    playerInfos   = gameStartInfo.UserInfos;
            var    playerCount   = playerInfos.Length;
            string _traceLogPath = "";

#if UNITY_STANDALONE_OSX
            _traceLogPath = $"/tmp/LPDemo/Dump_{localPlayerId}.txt";
#else
            _traceLogPath = $"c:/tmp/LPDemo/Dump_{Instance.localPlayerId}.txt";
#endif
            Debug.TraceSavePath = _traceLogPath;

            Debug.Trace("CreatePlayer " + playerCount);
            //create Players
            for (int i = 0; i < playerCount; i++)
            {
                var PrefabId = 0;             //TODO
                var initPos  = LVector2.zero; //TODO
                var player   = _gameStateService.CreateEntity <Player>(PrefabId, initPos);
                player.localId = i;
            }

            var allPlayers = _gameStateService.GetPlayers();

            MyPlayer = allPlayers[localPlayerId];
        }
예제 #4
0
        public void StartGame(int mapId, PlayerServerInfo[] playerInfos, int playerId)
        {
            _hasStart = true;
            curMapId  = mapId;

            playerCount         = playerInfos.Length;
            playerServerInfos   = playerInfos;
            localPlayerId       = playerId;
            Debug.TraceSavePath = _traceLogPath;
            allPlayers.Clear();
            for (int i = 0; i < playerCount; ++i)
            {
                Debug.Trace("createPlayer");
                allPlayers.Add(new Player()
                {
                    localId = i
                });
            }
            //创建玩家
            for (int i = 0; i < playerCount; ++i)
            {
                var playerInfo = playerInfos[i];
                var go         = HeroManager.InstantiateEntity(allPlayers[i], playerInfo.prefabId, playerInfo.initPos);
                if (allPlayers[i].localId == localPlayerId)
                {
                    MyPlayerTrans = go.transform;
                }
            }
            MyPlayer = allPlayers[localPlayerId];
        }
예제 #5
0
 private void _CheckRegionCircle(ColliderProxy obj)
 {
     Debug.Trace($"ColliderProxy _CheckRegionCircle {obj.Id} trans{obj.Transform2D} col{obj.Prefab}");
     if (CollisionHelper.CheckCollision(obj.Prefab, obj.Transform2D, _tempPos, _tempRadius))
     {
         tempCallback(obj);
     }
 }
예제 #6
0
 private void _CheckRegionOBB(ColliderProxy obj)
 {
     Debug.Trace($"ColliderProxy _CheckRegionOBB {obj.Id} trans{obj.Transform2D} col{obj.Prefab}");
     if (CollisionHelper.CheckCollision(obj.Prefab, obj.Transform2D, _tempPos, _tempSize, _tempForward))
     {
         tempCallback(obj);
     }
 }
예제 #7
0
 public void QueryRegion(int layerType, LVector2 pos, LFloat radius, FuncCollision callback)
 {
     Debug.Trace($"QueryRegion layerType:{layerType} pos:{pos} radius:{radius} ");
     tempCallback = callback;
     _tempPos     = pos;
     _tempRadius  = radius;
     GetBoundTree(layerType).CheckCollision(pos, radius, _CheckRegionCircle);
 }
예제 #8
0
        public static BaseEntity InstantiateEntity(int prefabId, LVector3 position)
        {
            var    prefab = ResourceManager.LoadPrefab(prefabId);
            object config = ResourceManager.GetEnemyConfig(prefabId);

            Debug.Trace("createEnemy");
            var entity = new Enemy();
            var obj    = UnityEntityService.CreateEntity(entity, prefabId, position, prefab, config);

            obj.name = obj.name + enemyID++;
            return(entity);
        }
예제 #9
0
        public void QueryRegion(int layerType, LVector2 pos, LVector2 size, LVector2 forward, FuncCollision callback)
        {
            Debug.Trace($"QueryRegion layerType:{layerType} pos:{pos} size:{size}  forward:{forward} ");
            tempCallback = callback;
            _tempSize    = size;
            _tempForward = forward;
            _tempPos     = pos;
            var radius      = size.magnitude;
            var checkBounds = LRect.CreateRect(pos, new LVector2(radius, radius));

            GetBoundTree(layerType).CheckCollision(ref checkBounds, _CheckRegionOBB);
        }
예제 #10
0
        public static ColliderPrefab CreateColliderPrefab(GameObject fab, ColliderData data)
        {
            Debug.Trace("CreateColliderPrefab " + fab.name);

            if (data == null)
            {
                Debug.LogError(fab.name + " Miss ColliderDataMono ");
                return(null);
            }

            Debug.Trace($"{fab.name} !!!CreateCollider  deg: {data.deg} up:{data.size} radius:{data.radius}");
            return(CreateColliderPrefab(data));
        }
예제 #11
0
        public void SetTime(LFloat timer)
        {
            if (config == null)
            {
                return;
            }
            var idx = GetTimeIdx(timer);

            _intiPos = transform.Pos3 - curAnimInfo[idx].pos;
            Debug.Trace(
                $"{baseEntity.EntityId} SetTime  idx:{idx} intiPos {baseEntity.transform.Pos3}",
                true);
            this._timer = timer;
        }
예제 #12
0
        void UpdateAttack(LFloat deltaTime)
        {
            timer += deltaTime;
            if (timer >= timeBetweenAttacks && playerInRange && currentHealth > 0)
            {
                timer = LFloat.zero;
                if (player.currentHealth > 0)
                {
                    Debug.Trace($"{EntityId}Atk{player.EntityId}");
                    player.TakeDamage(attackDamage, player.transform.Pos3);
                }
            }

            if (player.currentHealth <= 0)
            {
                eventHandler.OnPlayerDied();
            }
        }
예제 #13
0
        public static BaseEntity InstantiateEntity(int prefabId, LVector3 position)
        {
            var    prefab = ResourceManager.LoadPrefab(prefabId);
            object config = ResourceManager.Instance.GetEnemyConfig(prefabId);

            Debug.Trace("CreateEnemy");
            var entity = new Enemy();
            var obj    = EntityView.CreateEntity(entity, prefabId, position, prefab, config);

            entity.nav = obj.GetComponent <NavMeshAgentMono>();
            entity.nav.DoStart();
            entity.nav.enabled = false;
            entity.CBrain      = new CBrain();
            entity.CBrain.Init(entity, 0);
            obj.name = obj.name + enmeyID++;
            obj.name = obj.name + enmeyID++;
            return(entity);
        }
예제 #14
0
        public override void DoStart()
        {
            if (_instance != this)
            {
                Debug.LogError("Duplicate CollisionSystemAdapt!");
                return;
            }

            var collisionSystem = new CollisionSystem()
            {
                worldSize    = worldSize,
                pos          = pos,
                minNodeSize  = minNodeSize,
                loosenessval = loosenessval
            };

            Debug.Trace($"worldSize:{worldSize} pos:{pos} minNodeSize:{minNodeSize} loosenessval:{loosenessval}");
            this.collisionSystem = collisionSystem;
            collisionSystem.DoStart(collisionMatrix, allTypes);
            collisionSystem.funcGlobalOnTriggerEvent += GlobalOnTriggerEvent;
        }
예제 #15
0
 private void _Start()
 {
     DoStart();
     foreach (var mgr in managers)
     {
         mgr.DoStart();
     }
     Debug.Trace("Before StartGame _IdCounter:" + BaseEntity.idCounter);
     if (!isReplay && !isClientMode)
     {
         netClient = new NetClient();
         netClient.Start();
         netClient.Send(new Msg_JoinRoom()
         {
             name = Application.dataPath
         });
     }
     else
     {
         StartGame(0, playerServerInfos, localPlayerId);
     }
 }
예제 #16
0
 public BaseEntity()
 {
     Debug.Trace("BaseEntity " + idCounter.ToString(), true);
     entityID = ++idCounter;
     rigidbody.transform2D = transform;
 }
예제 #17
0
        public static ColliderPrefab CreateColliderPrefab(GameObject fab)
        {
            Debug.Trace("CreateColliderPrefab " + fab.name);
#if false
            Collider unityCollider = null;
            var      colliders     = fab.GetComponents <Collider>();
            foreach (var col in colliders)
            {
                if (col.isTrigger)
                {
                    unityCollider = col;
                    break;
                }
            }

            if (unityCollider == null)
            {
                foreach (var col in colliders)
                {
                    unityCollider = col;
                    break;
                }
            }

            if (unityCollider == null)
            {
                return(null);
            }
            CBaseShape collider = null;
            if (unityCollider is BoxCollider boxCol)
            {
                collider = new COBB(boxCol.size.ToLVector2XZ(), LFloat.zero);
            }

            if (unityCollider is SphereCollider cirCol)
            {
                collider = new CCircle(cirCol.radius.ToLFloat());
            }

            if (unityCollider is CapsuleCollider capCol)
            {
                collider = new CCircle(capCol.radius.ToLFloat());
            }

            if (collider is COBB tObb)
            {
                Debug.LogTrace($"{fab.name} CreateCollider OBB deg: {tObb.deg} up:{tObb.up} radius:{tObb.radius}");
            }
            if (collider is CCircle tCircle)
            {
                Debug.LogTrace($"{fab.name} CreateCollider Circle deg: radius:{tCircle.radius}");
            }
#else
            CBaseShape collider = null;
            var        data     = fab.GetComponent <ColliderDataMono>()?.colliderData;
            if (data == null)
            {
                Debug.LogError(fab.name + " Miss ColliderDataMono ");
                return(null);
            }

            if (data.radius > 0)
            {
                //circle
                collider = new CCircle(data.radius);
            }
            else
            {
                //obb
                collider = new COBB(data.size, data.deg);
            }
            Debug.Trace($"{fab.name} !!!CreateCollider  deg: {data.deg} up:{data.size} radius:{data.radius}");
#endif
            var colFab = new ColliderPrefab();
            colFab.parts.Add(new ColliderPart()
            {
                transform = new CTransform2D(LVector2.zero),
                collider  = collider
            });
            return(colFab);
        }
예제 #18
0
 public override void OnLPTriggerEnter(ColliderProxy other)
 {
     Debug.Trace($"{EntityId} OnLPTriggerEnter {other.Entity.EntityId}");
     playerInRange = true;
 }
예제 #19
0
 public BaseEntity()
 {
     Debug.Trace("BaseEntity  " + _IdCounter.ToString(), true);
     EntityId = _IdCounter++;
     rigidbody.transform2D = transform;
 }
예제 #20
0
 public override void OnLPTriggerExit(ColliderProxy other)
 {
     Debug.Trace($"{EntityId} OnLPTriggerExit {other.Entity.EntityId}");
     playerInRange = false;
 }