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); }
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); }
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); }
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); }
public RecordVO(Vector2 roleTile, Vector2 boxTile, EDir dir, int boxIdx) { this.dir = dir; this.roleTile = roleTile; this.boxTile = boxTile; this.boxIdx = boxIdx; }
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); }); }
public void SetDir(EDir dir) { _dir = dir; if (_dir != EDir.NONE) { animator.SetInteger("Dir", (int)_dir); } }
/// <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; }
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; }
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); }); }
public override bool Move(EDir dir, Vector2Int targetTile) { if (dir == EDir.NONE) { return(false); } SetToward(dir); return(base.Move(dir, targetTile)); }
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; }
public static Vector2Int GetBorderDir(EDir dir) { var isUpDown = (int)(dir) % 2 == 0; var borderDir = Vector2Int.up; if (isUpDown) { borderDir = Vector2Int.right; } return(borderDir); }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }