public void SetInfo_ArcFall(Vector2 p_v2StartPos, Vector2 p_v2EndPos, float p_fMaxHeight, int p_iTravelTime, int iExplodeAt) { bNetworkSynchEnabled = false; this.iExplodeAt = iExplodeAt; bArcFall = true; v2ArcFall_StartPos = p_v2StartPos; v2ArcFall_EndPos = p_v2EndPos; fArcFall_MaxHeight = p_fMaxHeight; iArcFall_TravelTime = p_iTravelTime; xShadowRC = new StaticRenderComponent(CAS.RegionContent.Load <Texture2D>("Sprites/Monster/Temple/Marauder/Jump/Shadow"), xTransform); xShadowRC.fAlpha = 0f; xShadowRC.fScale = 0f; Utils.GetTheGame().xRenderMaster.RegisterBelowSorted(xShadowRC); xCollisionComponent.SetPropertyInGroup(CollisionComponent.ColliderGroup.All, CollisionComponent.ColliderProperty.Ghost); xCollisionComponent.DeactivateGroup(CollisionComponent.ColliderGroup.Combat); float fTotalTailMovement = 29.2f; float fSpeed = Vector2.Distance(v2ArcFall_StartPos, v2ArcFall_EndPos) / (float)iArcFall_TravelTime; v2StartMoveDir = Utility.Normalize(v2ArcFall_EndPos - v2ArcFall_StartPos) * fSpeed; if (Utility.ConvertV2DirectionToClosestAnimationDirection(v2StartMoveDir) < 2) { xRenderComponent.SwitchAnimation(6); } else { xRenderComponent.SwitchAnimation(7); } v2ArcFall_EndPos += Utility.Normalize(v2ArcFall_StartPos - v2ArcFall_EndPos) * fSpeed * fTotalTailMovement; iArcFall_TravelTime -= (int)fTotalTailMovement; }
public void SetInfo_Fall(int iExplodeAt, int iStartFall = 100) { bFall = true; xShadowRC = new StaticRenderComponent(CAS.RegionContent.Load <Texture2D>("Sprites/Monster/Temple/Marauder/Jump/Shadow"), xTransform); xShadowRC.fAlpha = 0f; xShadowRC.fScale = 0f; Utils.GetTheGame().xRenderMaster.RegisterBelowSorted(xShadowRC); xCollisionComponent.SetPropertyInGroup(CollisionComponent.ColliderGroup.All, CollisionComponent.ColliderProperty.Ghost); xCollisionComponent.DeactivateGroup(CollisionComponent.ColliderGroup.Combat); xRenderComponent.v2OffsetRenderPos.Y -= 100f; xRenderComponent.fAlpha = 0f; iFallAppearDelay = iStartFall; this.iExplodeAt = iExplodeAt; if (CAS.RandomInVisual.Next(2) == 0) { xRenderComponent.SwitchAnimation(2); } else { xRenderComponent.SwitchAnimation(3); } if (CAS.NetworkRole == NetworkHelperInterface.NetworkRole.Server) { OutMessage om = Utils.GetTheGame()._Network_CreateMessage(); om.Write(byte.MaxValue); om.Write((byte)14); om.Write((byte)1); om.Write(iID); om.Write(xTransform.v2Pos.X); om.Write(xTransform.v2Pos.Y); om.Write(xRenderComponent.fVirtualHeight); om.Write(xCollisionComponent.ibitCurrentColliderLayer); om.Write(iExplodeAt); Utils.GetTheGame()._Network_SendMessage(om, 13); } }
public override void Update() { base.Update(); if (bArcFall) { iArcFall_Counter++; if (CAS.NetworkRole == NetworkHelperInterface.NetworkRole.Server && iArcFall_Counter == iArcFall_TravelTime / 2 && bShareArcFallPos) { SendNetworkInstruction(2f, v2ArcFall_EndPos.X, v2ArcFall_EndPos.Y); } float fGrade = (float)iArcFall_Counter / (float)iArcFall_TravelTime; float fHeight = Utility.Percent_RealAndragrad(fGrade) * fArcFall_MaxHeight; xTransform.v2Pos = Vector2.Lerp(v2ArcFall_StartPos, v2ArcFall_EndPos, fGrade); xRenderComponent.v2OffsetRenderPos.Y = 0f - fHeight; if (xRenderComponent.fVirtualHeight > 0f) { xRenderComponent.fVirtualHeight -= 1f; } xShadowRC.fAlpha = 0.4f; xShadowRC.fScale = 1f - (0f - xRenderComponent.v2OffsetRenderPos.Y) / 130f; if (xShadowRC.fScale < 0.4f) { xShadowRC.fScale = 0.4f; } if (iArcFall_Counter == iArcFall_TravelTime) { bArcFall = false; xRenderComponent.fVirtualHeight = 0f; Utils.GetTheGame().xSoundSystem.PlayCue("MimicMedium_BombLand", xTransform); if (Utility.ConvertV2DirectionToClosestAnimationDirection(v2StartMoveDir) < 2) { xRenderComponent.SwitchAnimation(0); } else { xRenderComponent.SwitchAnimation(1); } xRenderComponent.v2OffsetRenderPos.Y = 0f; xCollisionComponent.SetPropertyInGroup(CollisionComponent.ColliderGroup.All, CollisionComponent.ColliderProperty.NonGhost); xCollisionComponent.ActivateGroup(CollisionComponent.ColliderGroup.Combat); xShadowRC.Unregister(); xShadowRC = null; v2MoveDir = v2StartMoveDir; } return; } if (bFall) { if (xShadowRC == null || xShadowRC.fAlpha > 0.6f) { if (xRenderComponent.v2OffsetRenderPos.Y < 0f) { xRenderComponent.v2OffsetRenderPos.Y += 4f; if (xRenderComponent.v2OffsetRenderPos.Y >= 0f) { xRenderComponent.v2OffsetRenderPos.Y = 0f; xCollisionComponent.SetPropertyInGroup(CollisionComponent.ColliderGroup.All, CollisionComponent.ColliderProperty.NonGhost); xCollisionComponent.ActivateGroup(CollisionComponent.ColliderGroup.Movement); xCollisionComponent.ActivateGroup(CollisionComponent.ColliderGroup.Combat); xShadowRC.Unregister(); xShadowRC = null; bFall = false; } } if (xRenderComponent.fAlpha < 1f) { xRenderComponent.fAlpha += 0.04f; if (xRenderComponent.fAlpha > 1f) { xRenderComponent.fAlpha = 1f; } } } if (xShadowRC != null) { float fMos = (float)iCounter / (float)iFallAppearDelay; if (fMos > 1f) { fMos = 1f; } if (fMos < 0f) { fMos = 0f; } xShadowRC.fAlpha = fMos * 0.7f; xShadowRC.fScale = fMos; } } if (xRenderComponent.iActiveAnimation > 1) { iCounter++; } else { iPreCounter++; if (iPreCounter == 20) { v2MoveDir = v2StartMoveDir * 0.6f; xCollisionComponent.SetPropertyInGroup(CollisionComponent.ColliderGroup.Movement, CollisionComponent.ColliderProperty.NonGhost); xCollisionComponent.ActivateGroup(CollisionComponent.ColliderGroup.Combat); } else if (iPreCounter == 28) { v2MoveDir = v2StartMoveDir * 0.3f; } else if (iPreCounter == 36) { v2MoveDir = v2StartMoveDir * 0.15f; } else if (iPreCounter == 44) { v2MoveDir = v2StartMoveDir * 0.1f; } else if (iPreCounter == 52) { v2MoveDir = v2StartMoveDir * 0f; } } xTransform.v2Pos += v2MoveDir; if (iCounter >= iExplodeAt - 90 && iCounter >= 52) { xRenderComponent.SwitchAnimation((ushort)(xRenderComponent.GetCurrentAnimation().byAnimationDirection + 4), Animation.CancelOptions.IgnoreIfPlaying); if (iCounter <= 52) { int iTotalTicks = 93; xRenderComponent.fAnimationTimeWarp = 1f + (float)iCounter / (float)iTotalTicks; } } if (iCounter == iExplodeAt) { Destroy(); } }