override public void OnEnter(PlayerState lastState) { dirToBasket = GameUtils.HorizonalNormalized(m_match.mCurScene.mBasket.m_vShootTarget, m_player.position); IM.Number cross = IM.Vector3.Cross(dirToBasket, m_player.moveDirection).y; isTurnLeft = (cross < IM.Number.zero); if (m_player.m_eHandWithBall == Player.HandWithBall.eLeft) { m_animType = isTurnLeft ? AnimType.B_TYPE_0 : AnimType.B_TYPE_1; } else if (m_player.m_eHandWithBall == Player.HandWithBall.eRight) { m_animType = isTurnLeft ? AnimType.B_TYPE_2 : AnimType.B_TYPE_3; } m_curAction = m_mapAnimType[m_animType]; PlayerAnimAttribute.AnimAttr attr = m_player.m_animAttributes.GetAnimAttrById(Command.BackToBack, m_curAction); PlayerAnimAttribute.KeyFrame_RotateToBasketAngle keyFrame = attr.GetKeyFrame("RotateToBasketAngle") as PlayerAnimAttribute.KeyFrame_RotateToBasketAngle; if (keyFrame != null) { IM.Vector3 dirFaceTo = IM.Quaternion.AngleAxis(keyFrame.angle, IM.Vector3.up) * dirToBasket; m_player.forward = dirFaceTo; } m_curAction = m_mapAnimType[m_animType]; m_player.animMgr.Play(m_curAction, true).rootMotion.Reset(); }
override public void OnEnter(PlayerState lastState) { base.OnEnter(lastState); if (m_player.m_eHandWithBall == Player.HandWithBall.eLeft) { m_animType = AnimType.B_TYPE_0; } else if (m_player.m_eHandWithBall == Player.HandWithBall.eRight) { m_animType = AnimType.B_TYPE_1; } m_curAction = m_mapAnimType[m_animType]; m_dirPlayerToBasket = GameUtils.HorizonalNormalized(m_basket.m_vShootTarget, m_player.position); PlayerAnimAttribute.AnimAttr attr = m_player.m_animAttributes.GetAnimAttrById(Command.BackToBack, m_curAction); if (attr != null) { PlayerAnimAttribute.KeyFrame_RotateToBasketAngle keyFrame = attr.GetKeyFrame("RotateToBasketAngle") as PlayerAnimAttribute.KeyFrame_RotateToBasketAngle; IM.Number frameRate = m_player.animMgr.GetFrameRate(m_curAction); m_dirPlayerToBasket = GameUtils.HorizonalNormalized(m_basket.m_vShootTarget, m_player.position); IM.Vector3 dirFaceTo = IM.Quaternion.AngleAxis(keyFrame.angle, IM.Vector3.up) * m_dirPlayerToBasket; IM.Number fAngle = IM.Vector3.Angle(m_player.forward, dirFaceTo); m_relAngle = keyFrame.angle; m_turningSpeed = IM.Math.Deg2Rad(fAngle) / (keyFrame.frame / frameRate); m_rotateTo = RotateTo.eBasket; m_rotateType = RotateType.eSmooth; m_bMoveForward = false; } m_player.animMgr.CrossFade(m_curAction, false); m_player.m_stamina.m_bEnableRecover = false; }
override public void OnEnter(PlayerState lastState) { base.OnEnter(lastState); m_dirPlayerToBasket = GameUtils.HorizonalNormalized(m_basket.m_vShootTarget, m_player.position); if (curAnimStep == 1) { Player target = m_player.m_defenseTarget; if (target != null) { isCompeteWin = _Competing(m_player, target); m_match.m_context.m_backToBackWinnerId = isCompeteWin ? m_player.m_roomPosId : target.m_roomPosId; } if (m_player.m_eHandWithBall == Player.HandWithBall.eLeft) { m_animType = AnimType.B_TYPE_0; } else { m_animType = AnimType.B_TYPE_1; } } isCompeteWin = (m_match.m_context.m_backToBackWinnerId == m_player.m_roomPosId); Debug.Log("BackCompete: " + isCompeteWin + " m_match.m_context.m_backToBackWinnerId: " + m_match.m_context.m_backToBackWinnerId); m_curAction = m_mapAnimType[m_animType]; PlayerAnimAttribute.AnimAttr attr = m_player.m_animAttributes.GetAnimAttrById(Command.BackToBack, m_curAction); if (attr != null) { PlayerAnimAttribute.KeyFrame_RotateToBasketAngle keyFrame = attr.GetKeyFrame("RotateToBasketAngle") as PlayerAnimAttribute.KeyFrame_RotateToBasketAngle; IM.Vector3 dirFaceTo = IM.Quaternion.AngleAxis(keyFrame.angle, IM.Vector3.up) * m_dirPlayerToBasket; m_player.forward = dirFaceTo; } m_player.animMgr.CrossFade(m_curAction, false); m_player.m_stamina.m_bEnableRecover = false; }
void ReadAnimAttribute(XmlNode node) { Dictionary <string, PlayerAnimAttribute.AnimAttr> attrs = new Dictionary <string, PlayerAnimAttribute.AnimAttr>(); foreach (XmlNode animItem in node.ChildNodes) { PlayerAnimAttribute.AnimAttr animAttr = new PlayerAnimAttribute.AnimAttr(); XmlElement animItemElem = animItem as XmlElement; animAttr.strAnim = animItemElem.GetAttribute("name"); XmlNodeList lstNodes = animItemElem.SelectNodes("./KeyEvent"); animAttr.keyFrame = new List <PlayerAnimAttribute.KeyFrame>(); PlayerAnimAttribute.KeyFrame kf = new PlayerAnimAttribute.KeyFrame("null", 0); foreach (XmlNode keyEvent in lstNodes) { XmlElement keyEventElem = keyEvent as XmlElement; string id = keyEventElem.GetAttribute("id"); int frame = int.Parse(keyEventElem.GetAttribute("x")); if (id == "MoveToStartPos") { IM.Vector3 param = IM.Vector3.zero; XmlElement elem = keyEventElem.SelectSingleNode("./Param") as XmlElement; if (elem != null) { param = XmlUtils.XmlGetAttr_Vec3(elem); } kf = new PlayerAnimAttribute.KeyFrame_MoveToStartPos(id, frame, param); } else if (id == "OnLayupShot") { IM.Vector3 param = IM.Vector3.zero; XmlElement elem = keyEventElem.SelectSingleNode("./Param") as XmlElement; if (elem != null) { param = XmlUtils.XmlGetAttr_Vec3(elem); } kf = new PlayerAnimAttribute.KeyFrame_LayupShootPos(id, frame, param); } else if (id == "blockable") { int blockframe = 0; XmlElement elem = keyEventElem.SelectSingleNode("./Param") as XmlElement; if (elem != null) { blockframe = XmlUtils.XmlGetAttr_Int(elem, "x"); } kf = new PlayerAnimAttribute.KeyFrame_Blockable(id, frame, blockframe); } else if (id == "DefenderSpasticity") { int length = 0; XmlElement elem = keyEventElem.SelectSingleNode("./Param") as XmlElement; if (elem != null) { length = XmlUtils.XmlGetAttr_Int(elem, "x"); } kf = new PlayerAnimAttribute.KeyFrame_DefenderSpasticity(id, frame, length); } else if (id == "RotateToBasketAngle") { IM.Number angle = IM.Number.zero; XmlElement elem = keyEventElem.SelectSingleNode("./Param") as XmlElement; if (elem != null) { angle = XmlUtils.XmlGetAttr_Number(elem, "x"); } kf = new PlayerAnimAttribute.KeyFrame_RotateToBasketAngle(id, frame, angle); } else { kf = new PlayerAnimAttribute.KeyFrame(id, frame); } animAttr.keyFrame.Add(kf); } if (attrs.ContainsKey(animAttr.strAnim)) { Debug.LogError("AnimInfo same key: " + animAttr.strAnim); } attrs.Add(animAttr.strAnim, animAttr); } playerAttributes.animItemAttrs.Add(node.Name, attrs); }