protected override void Update() { base.Update(); m_phyChar.enabled = (Vehicle == null); if (Vehicle != null) { m_animCtrl.IsAnimated = false; } else { DoInputs(); bool isMoving = (m_phyChar.Dir.sqrMagnitude >= 0.01); if (isMoving) { //m_phyChar.Dir.Normalize(); m_camera2DFollowBehaviour.Target = transform; } else { m_phyChar.Dir = Vector3.zero; } } int tileIdx = RpgMapHelper.GetTileIdxByPosition(transform.position); if (tileIdx != m_lastTileIdx || m_lastFogSightLength != FogSightLength) { RpgMapHelper.RemoveFogOfWarWithFade(transform.position, FogSightLength); } m_lastFogSightLength = FogSightLength; m_lastTileIdx = tileIdx; }
// Update is called once per frame void Update() { RpgMapHelper.DebugDrawRect(transform.position, CollRect, Color.white); if (Dir.sqrMagnitude > 0f) { // divide by n per second ( n:2 ) m_speed += (MaxSpeed - m_speed) / Mathf.Pow(2f, Time.deltaTime); } else { m_speed /= Mathf.Pow(2f, Time.deltaTime); } Dir.z = 0f; transform.position += Dir * m_speed * Time.deltaTime; if (IsCollEnabled) { DoCollisions(); } }
protected override void Update() { if (m_playerCtrl == null) { return; } Color textColor = HelpText.GetComponent <Renderer>().material.color; textColor.a = Mathf.Clamp(0.2f + Mathf.Abs(Mathf.Sin(0.05f * Time.frameCount)), 0f, 1f); HelpText.GetComponent <Renderer>().material.color = textColor; if (m_isLanding) { if (VehicleType == eVehicleType.Aircraft) { m_altitude = Mathf.Lerp(MaxAltitude, 0f, LandingTime * (1 - m_altitude / MaxAltitude) + Time.deltaTime); //m_altitude -= m_altitude / 20; if (m_altitude <= 0.01) { m_altitude = 0; m_playerCtrl.SetVisible(true); } } } else { // Empty vehicle logic if (m_playerCtrl.Vehicle == null) { Vector3 vPos = transform.position; bool isPlayerCloseEnough = false; if (VehicleType == eVehicleType.Boat) { m_animCtrl.IsAnimated = true; //Force to always animate Rect rVert = new Rect(vPos.x + phyChar.CollRect.x, vPos.y + phyChar.CollRect.y - phyChar.CollRect.height, phyChar.CollRect.width, 3 * phyChar.CollRect.height); Rect rHor = new Rect(vPos.x + phyChar.CollRect.x - phyChar.CollRect.width, vPos.y + phyChar.CollRect.y, 3 * phyChar.CollRect.width, phyChar.CollRect.height); RpgMapHelper.DebugDrawRect(Vector3.zero, rVert, Color.blue); RpgMapHelper.DebugDrawRect(Vector3.zero, rHor, Color.green); isPlayerCloseEnough = rVert.Contains(m_playerCtrl.transform.position) || rHor.Contains(m_playerCtrl.transform.position); } else //if (VehicleType == eVehicleType.Aircraft) { m_animCtrl.IsAnimated = false; //Force to don't animate Rect rect = new Rect(vPos.x + phyChar.CollRect.x, vPos.y + phyChar.CollRect.y - phyChar.CollRect.height / 3, phyChar.CollRect.width, phyChar.CollRect.height); RpgMapHelper.DebugDrawRect(Vector3.zero, rect, Color.blue); isPlayerCloseEnough = rect.Contains(m_playerCtrl.transform.position); } HelpText.GetComponent <Renderer>().enabled = isPlayerCloseEnough; if (isPlayerCloseEnough) { if (Input.GetKeyDown(KeyCode.Return)) { m_playerCtrl.Vehicle = this; HelpText.GetComponent <Renderer>().enabled = false; m_playerCtrl.SetVisible(VehicleType == eVehicleType.Boat); if (VehicleType == eVehicleType.Aircraft) { m_phyChar.IsCollEnabled = false; } } } } // Occupied vehicle logic else if (m_playerCtrl.Vehicle == this) { base.Update(); m_animCtrl.IsAnimated = true; //Force to always animate if (VehicleType == eVehicleType.Aircraft) { m_altitude = Mathf.Lerp(0f, MaxAltitude, LandingTime * (m_altitude / MaxAltitude) + Time.deltaTime); int sightLength = (int)(MaxAltitudeSightLength * (m_altitude / MaxAltitude)); int tileIdx = RpgMapHelper.GetTileIdxByPosition(transform.position); if (tileIdx != m_lastTileIdx || m_lastFogSightLength != sightLength) { RpgMapHelper.RemoveFogOfWarWithFade(transform.position, sightLength); } m_lastFogSightLength = sightLength; m_lastTileIdx = tileIdx; } if (Input.GetKeyDown(KeyCode.Return)) { int dir = VehicleType == eVehicleType.Boat ? (int)m_playerCtrl.AnimCtrl.CurrentDir : (int)CharAnimationController.eDir.DOWN; Vector3 vDir = VehicleType == eVehicleType.Boat ? m_playerCtrl.AnimCtrl.CurrentDirVect : new Vector3(0, -0.5f); float fMult = _landingMult[dir]; Vector3 vLandingPos = transform.position + fMult * vDir * AutoTileMap.Instance.Tileset.TileWorldWidth; vLandingPos.z = m_playerCtrl.transform.position.z; bool isColliding = m_playerCtrl.PhyCtrl.IsColliding(vLandingPos); RpgMapHelper.DebugDrawRect(vLandingPos, m_playerCtrl.PhyCtrl.CollRect, isColliding ? Color.red : Color.blue, 0.5f); if (VehicleType == eVehicleType.Aircraft) { isColliding |= PhyCtrl.IsColliding(transform.position); RpgMapHelper.DebugDrawRect(transform.position, PhyCtrl.CollRect, isColliding ? Color.red : Color.blue, 0.5f); } isColliding |= RpgMapHelper.GetAutoTileByPosition(vLandingPos, 0).IsWaterTile(); if (!isColliding) { m_vLandingPos = vLandingPos; m_isLanding = true; PhyCtrl.Dir = Vector3.zero; } } } } Vector3 vAnimSprPos = AnimCtrl.TargetSpriteRenderer.transform.localPosition; vAnimSprPos.y = m_altitude; AnimCtrl.TargetSpriteRenderer.transform.localPosition = vAnimSprPos; if (ShadowSprite != null) { float scale = (MaxAltitude - m_altitude / 3); ShadowSprite.transform.localScale = new Vector3(scale, scale, scale); } //+++fix overlay layer problem while landing if (VehicleType == eVehicleType.Aircraft) { Vector3 vCheckPos = m_animCtrl.TargetSpriteRenderer.transform.position; //Debug.DrawRay( vCheckPos, Vector3.right, Color.red ); int bottomTile = RpgMapHelper.GetAutoTileByPosition(vCheckPos, 2).Id; vCheckPos.y += AutoTileMap.Instance.Tileset.TileWorldHeight; //Debug.DrawRay(vCheckPos, Vector3.right, Color.green); int topTile = RpgMapHelper.GetAutoTileByPosition(vCheckPos, 2).Id; if ( (bottomTile < 0 && topTile >= 0 && m_altitude > 0.30f) || // bottom tile is not overlay and top tile is overlay (m_altitude > 0.02f && bottomTile < 0) // taking off set Z over overlay layer only after bottom tile is not overlay ) { GetComponent <IsoSpriteController>().enabled = false; Vector3 vSprPos = m_animCtrl.TargetSpriteRenderer.transform.position; vSprPos.z = AutoTileMap.Instance.FindLastLayer(eLayerType.Overlay).Depth - 0.1f; m_animCtrl.TargetSpriteRenderer.transform.position = vSprPos; } else if (m_altitude <= 0.8) { // found an overlay tile? enable IsoSpriteController to adjust Z under overlay layer GetComponent <IsoSpriteController>().enabled = true; } } //--- }
// Update is called once per frame void Update() { m_pathFindingBehaviour.TargetPos = m_player.transform.position; Vector3 vTarget = m_player.transform.position; vTarget.z = transform.position.z; Ray2D sightRay = new Ray2D(transform.position, vTarget - transform.position); float distToTarget = (vTarget - transform.position).magnitude; float fSightBlockedDist = IsSightBlockedByBlockedTiles? RpgMapHelper.Raycast(sightRay, distToTarget) : -1f; // NOTE: fSightBlockedDist will be -1f if sight line is not blocked by blocked collision tile if (distToTarget >= SightDistance || fSightBlockedDist >= 0f) { // Move around m_pathFindingBehaviour.enabled = false; vTarget = transform.position; m_fAngOff += Random.Range(-AngRandOff, AngRandOff); Vector3 vOffset = Quaternion.AngleAxis(m_fAngOff, Vector3.forward) * (AngRandRadious * Vector3.right); vTarget += vOffset; m_moving.Arrive(vTarget); } else // Follow the player { // stop following the path when closed enough to target m_pathFindingBehaviour.enabled = (vTarget - transform.position).magnitude > MinDistToReachTarget; if (!m_pathFindingBehaviour.enabled) { m_fAngOff += Random.Range(-AngRandOff, AngRandOff); Vector3 vOffset = Quaternion.AngleAxis(m_fAngOff, Vector3.forward) * (AngRandRadious * Vector3.right); vTarget += vOffset; Debug.DrawLine(transform.position, m_player.transform.position, Color.blue); Debug.DrawRay(m_player.transform.position, vOffset, Color.blue); m_moving.Arrive(vTarget); } } //+++avoid obstacles Vector3 vTurnVel = Vector3.zero; if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.RIGHT)) { vTurnVel.x = -m_moving.MaxSpeed; } else if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.LEFT)) { vTurnVel.x = m_moving.MaxSpeed; } if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.DOWN)) { vTurnVel.y = m_moving.MaxSpeed; } else if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.UP)) { vTurnVel.y = -m_moving.MaxSpeed; } if (vTurnVel != Vector3.zero) { m_moving.ApplyForce(vTurnVel - m_moving.Veloc); } //--- //fix to avoid flickering of the creature when collides with wall if (Time.frameCount % 16 == 0) //--- { if (!LockAnimDir) { UpdateAnimDir(); } } }