Example #1
0
    public static float GetMaxMoveDist(EDir dir, Vector2 fHeadPos, Vector2 fTargetHeadPos,
                                       float borderSize = TANK_BORDER_SIZE)
    {
        var iTargetHeadPos = new Vector2Int(Mathf.FloorToInt(fTargetHeadPos.x), Mathf.FloorToInt(fTargetHeadPos.y));
        var hasCollider    = HasColliderWithBorder(dir, fTargetHeadPos, borderSize);
        var maxMoveDist    = float.MaxValue;

        if (hasCollider)
        {
            switch (dir)
            {
            case EDir.Up:
                maxMoveDist = iTargetHeadPos.y - fHeadPos.y;
                break;

            case EDir.Right:
                maxMoveDist = iTargetHeadPos.x - fHeadPos.x;
                break;

            case EDir.Down:
                maxMoveDist = fHeadPos.y - iTargetHeadPos.y - 1;
                break;

            case EDir.Left:
                maxMoveDist = fHeadPos.x - iTargetHeadPos.x - 1;
                break;
            }
        }

        return(maxMoveDist);
    }
Example #2
0
    void ReverseSwapJewel(GameObject jewel1, GameObject jewel2, EDir dir)
    {
        switch (dir)
        {
        case EDir.left:
            dir = EDir.right;
            break;

        case EDir.right:
            dir = EDir.left;
            break;

        case EDir.up:
            dir = EDir.down;
            break;

        case EDir.down:
            dir = EDir.up;
            break;

        default:
            break;
        }

        SwapJewel(jewel1, jewel2, dir, true);
    }
        public static LVector2 GetHeadPos(LVector2 pos, EDir dir, LFloat len)
        {
            var dirVec      = DirUtil.GetDirLVec(dir);
            var fTargetHead = pos + (TANK_HALF_LEN + len) * dirVec;

            return(fTargetHead);
        }
        public void CreatePlayer(byte actorId, int type)
        {
            var bornPos   = _constStateService.playerBornPoss[actorId % _constStateService.playerBornPoss.Count];
            var createPos = bornPos + GameConfig.TankBornOffset;

            _resourceService.ShowBornEffect(createPos);
            _audioService.PlayClipBorn();
            EDir dir = EDir.Up;

            DelayCall(GameConfig.TankBornDelay, () => {
                GameObject obj = null;
                var entity     = CreateUnit(createPos, _config.playerPrefabs, type, dir, transParentPlayer, out obj);
                var actor      = _actorContext.GetEntityWithId(actorId);
                if (actorId == _constStateService.localActorId && Main.Instance.cineCamera != null)
                {
                    Main.Instance.cineCamera.Follow = obj.transform;
                }

                if (actor != null)
                {
                    actor.ReplaceGameLocalId(entity.localId.value);
                    entity.ReplaceActorId(actorId);
                }
                else
                {
                    Debug.LogError(
                        $"can not find a actor after create a game player actorId:{actorId} localId{entity.localId.value}");
                }
            });
        }
        public static LVector2 GetHeadPos(LVector2 pos, EDir dir)
        {
            var dirVec      = DirUtil.GetDirLVec(dir);
            var fTargetHead = pos + (TANK_HALF_LEN + FORWARD_HEAD_DIST) * dirVec;

            return(fTargetHead);
        }
Example #6
0
        public LFloat GetMaxMoveDist(EDir dir, LVector2 fHeadPos, LVector2 fTargetHeadPos, LFloat borderSize)
        {
            var iTargetHeadPos =
                new LVector2Int(LMath.FloorToInt(fTargetHeadPos.x), LMath.FloorToInt(fTargetHeadPos.y));
            var hasCollider = HasColliderWithBorder(dir, fTargetHeadPos, borderSize);
            var maxMoveDist = LFloat.MaxValue;

            if (hasCollider)
            {
                switch (dir)
                {
                case EDir.Up:
                    maxMoveDist = iTargetHeadPos.y - fHeadPos.y;
                    break;

                case EDir.Right:
                    maxMoveDist = iTargetHeadPos.x - fHeadPos.x;
                    break;

                case EDir.Down:
                    maxMoveDist = fHeadPos.y - iTargetHeadPos.y - 1;
                    break;

                case EDir.Left:
                    maxMoveDist = fHeadPos.x - iTargetHeadPos.x - 1;
                    break;
                }
            }

            return(maxMoveDist);
        }
Example #7
0
    private T CreateUnit <T>(Vector2 pos, List <GameObject> lst, int type,
                             Vector2 offset, Transform parent, EDir dir,
                             List <T> set) where T : Unit
    {
        Debug.Assert(type <= lst.Count, "type >= lst.Count");
        var prefab = lst[type];

        Debug.Assert(prefab != null, "prefab == null");
        Vector2 createPos = pos + offset;

        var deg      = ((int)(dir)) * 90;
        var rotation = Quaternion.Euler(0, 0, deg);

        var go   = GameObject.Instantiate(prefab, parent.position + (Vector3)createPos, rotation, parent);
        var unit = go.GetComponent <T>();

        unit.pos        = createPos;
        unit.dir        = dir;
        unit.detailType = type;
        if (unit is Tank)
        {
            unit.size   = Vector2.one;
            unit.radius = unit.size.magnitude;
        }

        if (unit is Item)
        {
            unit.size   = Vector2.one;
            unit.radius = unit.size.magnitude;
        }

        unit.DoStart();
        set.Add(unit);
        return(unit);
    }
Example #8
0
 public RecordVO(Vector2 roleTile, Vector2 boxTile, EDir dir, int boxIdx)
 {
     this.dir      = dir;
     this.roleTile = roleTile;
     this.boxTile  = boxTile;
     this.boxIdx   = boxIdx;
 }
Example #9
0
        public void CreatePlayer(byte actorId, ushort type)
        {
            var bornPos   = _gameConstStateService.PlayerBornPoss[actorId % _gameConstStateService.PlayerBornPoss.Count];
            var createPos = bornPos + _gameConfigService.TankBornOffset;

            _gameEffectService.ShowBornEffect(createPos);
            _gameAudioService.PlayClipBorn();
            EDir dir = EDir.Up;

            DelayCall(_gameConfigService.TankBornDelay, () => {
                var entity       = CreateUnit(createPos, EntityUtil.CreateEntityPlayer(_gameContext, type), dir);
                entity.unit.camp = ECampType.Player;
                var actor        = _actorContext.GetEntityWithActorId(actorId);
                if (actor != null)
                {
                    actor.ReplaceGameEntityId(entity.entityId.value);
                    entity.ReplaceActorId(actorId);
                }
                else
                {
                    Debug.LogError(
                        $"can not find a actor after create a game player actorId:{actorId} entityId{entity.entityId.value}");
                }
            });
        }
        public void CreateBullet(LVector2 pos, EDir dir, int type, IEntity pEntity){
            var owner = pEntity as GameEntity;
            var createPos = pos + DirUtil.GetDirLVec(dir) * TankUtil.TANK_HALF_LEN;

            var entity = CreateUnit(createPos, _gameConfigService.bulletPrefabs, type, dir);
            entity.bullet.ownerLocalId = owner.localId.value;
            entity.unit.camp = owner.unit.camp;
        }
 public void CreateEnemy(LVector2 bornPos, int type){
     var createPos = bornPos + LVector2.right;
     _gameEffectService.ShowBornEffect(createPos);
     _gameAudioService.PlayClipBorn();
     EDir dir = EDir.Down;
     DelayCall(base._gameConfigService.TankBornDelay,
         () => { CreateUnit(createPos, _gameConfigService.enemyPrefabs, type, dir); });
 }
Example #12
0
 public void SetDir(EDir dir)
 {
     _dir = dir;
     if (_dir != EDir.NONE)
     {
         animator.SetInteger("Dir", (int)_dir);
     }
 }
Example #13
0
 /// <summary>
 /// 设置朝向
 /// </summary>
 /// <param name="dir"></param>
 public void SetToward(EDir dir)
 {
     _toward = dir;
     if (_toward != EDir.NONE)
     {
         _animator.SetInteger("Dir", (int)_toward);
     }
 }
        public void CreateBullet(LVector2 pos, EDir dir, int type, GameEntity owner)
        {
            var createPos = pos.Floor().ToLVector2() + DirUtil.GetDirLVec(dir) + TankUtil.UNIT_SIZE;
            var entity    = CreateUnit(createPos, _config.bulletPrefabs, type, dir, transParentBullet);

            entity.owner.localId = owner.localId.value;
            entity.unit.camp     = owner.unit.camp;
        }
Example #15
0
    public Bomb CreateBomb(Vector2 pos, EDir dir, Vector2 offset, int type)
    {
        var bomb = CreateUnit(pos, bulletPrefabs, type, offset, transParentBullet, dir, allBomb);
        var iPos = (pos + offset).Floor();

        pos2Bomb.Add(iPos, bomb);
        return(bomb);
    }
        public void CreateBullet(LVector2 pos, EDir dir, int type, GameEntity owner)
        {
            var createPos = pos + DirUtil.GetDirLVec(dir) * TankUtil.TANK_HALF_LEN;

            var entity = CreateUnit(createPos, _config.bulletPrefabs, type, dir, transParentBullet);

            entity.bullet.ownerLocalId = owner.localId.value;
            entity.unit.camp           = owner.unit.camp;
        }
Example #17
0
        public void Move(EDir dir)
        {
            _dir = dir;
            if (_fsm.curState == EState.MOVE)
            {
                return;
            }

            CheckMove();
        }
    public void MoveJewelForSwap(Vector3 destPos, EDir dir, bool bReverse)
    {
        MoveInfo moveInfo;

        moveInfo.destPos  = destPos;
        moveInfo.dir      = dir;
        moveInfo.bReverse = bReverse;
        moveInfo.bForSwap = true;

        StartCoroutine("MoveJewelCoroutine", moveInfo);
    }
    public void MoveJewel(Vector3 destPos, EDir dir)
    {
        MoveInfo moveInfo;

        moveInfo.destPos  = destPos;
        moveInfo.dir      = dir;
        moveInfo.bReverse = false;
        moveInfo.bForSwap = false;

        StartCoroutine("MoveJewelCoroutine", moveInfo);
    }
        public void CreateEnemy(LVector2 bornPos, int type)
        {
            var createPos = bornPos + new LVector2(LFloat.half, LFloat.zero);

            _resourceService.ShowBornEffect(createPos);
            _audioService.PlayClipBorn();
            EDir dir = EDir.Down;

            DelayCall(GameConfig.TankBornDelay,
                      () => { CreateUnit(createPos, _config.enemyPrefabs, type, dir, transParentEnemy); });
        }
Example #21
0
        public override bool Move(EDir dir, Vector2Int targetTile)
        {
            if (dir == EDir.NONE)
            {
                return(false);
            }

            SetToward(dir);

            return(base.Move(dir, targetTile));
        }
Example #22
0
        public void CreateBullet(LVector2 pos, EDir dir, ushort type, IEntity pEntity)
        {
            var owner     = pEntity as GameEntity;
            var createPos = pos + DirUtil.GetDirLVec(dir) * TankUtil.TANK_HALF_LEN;
            var entity    = CreateUnit(createPos, EntityUtil.CreateEntityBullet(_gameContext, type), dir);

            entity.bullet.ownerLocalId = owner.entityId.value;
            entity.unit.camp           = owner.unit.camp;
            entity.collider.radius     = new LFloat(null, 300);
            entity.collider.size       = LVector2.zero;
        }
Example #23
0
        public static Vector2Int GetBorderDir(EDir dir)
        {
            var isUpDown  = (int)(dir) % 2 == 0;
            var borderDir = Vector2Int.up;

            if (isUpDown)
            {
                borderDir = Vector2Int.right;
            }

            return(borderDir);
        }
Example #24
0
 protected virtual void CheckFlipSprite(EDir dir)
 {
     //animation stuff
     if (direction == dir)
     {
         this.transform.rotation = Quaternion.Euler(0.0f, 180.0f, 0.0f);
     }
     else
     {
         this.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 0.0f);
     }
 }
Example #25
0
        private bool CheckMoveEnableHandler(Vector3 startTile, Vector3 endTile, EDir dir)
        {
            var x = (ushort)endTile.x;
            var y = (ushort)endTile.y;

            if (_lv.IsBlock(x, y))
            {
                return(false);
            }

            var box = GetBox(x, y) as Box;

            if (null != box)
            {
                if (box.IsMoveing)
                {
                    //有箱子正在移动
                    return(false);
                }

                //是箱子,检查箱子后面是否有阻挡
                switch (dir)
                {
                case EDir.UP:
                    y += 1;
                    break;

                case EDir.DOWN:
                    y -= 1;
                    break;

                case EDir.LEFT:
                    x -= 1;
                    break;

                case EDir.RIGHT:
                    x += 1;
                    break;
                }

                if (_lv.IsBlock(x, y) || null != GetBox(x, y))
                {
                    return(false);
                }

                DC.ins.recordStack.Push(new RecordVO(startTile, endTile, dir, _dynamicUnitList.IndexOf(box)));
                //推动了箱子
                box.GetComponent <Box>().Move(dir);
            }

            return(true);
        }
Example #26
0
        public bool HasColliderWithBorder(EDir dir, LVector2 fTargetHead, LFloat size)
        {
            LVector2 borderDir    = DirUtil.GetBorderDir(dir);
            var      fBorder1     = fTargetHead + borderDir * size;
            var      fBorder2     = fTargetHead - borderDir * size;
            var      isColHead    = HasCollider(fTargetHead);
            var      isColBorder1 = HasCollider(fBorder1);
            var      isColBorder2 = HasCollider(fBorder2);

            return(isColHead ||
                   isColBorder1 ||
                   isColBorder2);
        }
Example #27
0
    public static bool HasColliderWithBorder(EDir dir, Vector2 fTargetHead, float size = TANK_BORDER_SIZE)
    {
        Vector2 borderDir    = GetBorderDir(dir);
        var     fBorder1     = fTargetHead + borderDir * size;
        var     fBorder2     = fTargetHead - borderDir * size;
        var     isColHead    = HasCollider(fTargetHead);
        var     isColBorder1 = HasCollider(fBorder1);
        var     isColBorder2 = HasCollider(fBorder2);

        return(isColHead ||
               isColBorder1 ||
               isColBorder2);
    }
Example #28
0
        public static LVector2 GetDirLVec(EDir dir)
        {
            switch (dir)
            {
            case EDir.Up: return(LVector2.up);

            case EDir.Right: return(LVector2.right);

            case EDir.Down: return(LVector2.down);

            case EDir.Left: return(LVector2.left);
            }

            return(LVector2.up);
        }
Example #29
0
        public static Vector2Int GetDirVec(EDir dir)
        {
            switch (dir)
            {
            case EDir.Up: return(Vector2Int.up);

            case EDir.Right: return(Vector2Int.right);

            case EDir.Down: return(Vector2Int.down);

            case EDir.Left: return(Vector2Int.left);
            }

            return(Vector2Int.up);
        }
Example #30
0
        public List <LVector3Int> DebugQueryCollider(EDir dir, LVector2 fTargetHead, LFloat size)
        {
            var      ret          = new List <LVector3Int>();
            LVector2 borderDir    = DirUtil.GetBorderDir(dir);
            var      fBorder1     = fTargetHead + borderDir * size;
            var      fBorder2     = fTargetHead - borderDir * size;
            var      isColHead    = HasCollider(fTargetHead);
            var      isColBorder1 = HasCollider(fBorder1);
            var      isColBorder2 = HasCollider(fBorder2);

            ret.Add(new LVector3Int(fTargetHead.Floor().x, fTargetHead.Floor().y, isColHead ? 1 : 0));
            ret.Add(new LVector3Int(fBorder1.Floor().x, fBorder1.Floor().y, isColBorder1 ? 1 : 0));
            ret.Add(new LVector3Int(fBorder2.Floor().x, fBorder2.Floor().y, isColBorder2 ? 1 : 0));
            return(ret);
        }