public override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap) { m_subsystemTime = base.Project.FindSubsystem <SubsystemTime>(throwOnError: true); m_subsystemBodies = base.Project.FindSubsystem <SubsystemBodies>(throwOnError: true); m_componentCreature = base.Entity.FindComponent <ComponentCreature>(throwOnError: true); m_componentPathfinding = base.Entity.FindComponent <ComponentPathfinding>(throwOnError: true); m_componentMount = base.Entity.FindComponent <ComponentMount>(throwOnError: true); m_isEnabled = base.Entity.ValuesDictionary.DatabaseObject.Name.EndsWith("_Saddled"); m_stateMachine.AddState("Inactive", null, delegate { if (IsActive) { m_stateMachine.TransitionTo("Wait"); } }, null); m_stateMachine.AddState("Wait", delegate { ComponentRider componentRider = FindNearbyRider(6f); if (componentRider != null) { m_componentPathfinding.SetDestination(componentRider.ComponentCreature.ComponentBody.Position, m_random.Float(0.2f, 0.3f), 3.25f, 0, useRandomMovements: false, ignoreHeightDifference: true, raycastDestination: false, null); if (m_random.Float(0f, 1f) < 0.5f) { m_componentCreature.ComponentCreatureSounds.PlayIdleSound(skipIfRecentlyPlayed: true); } } }, delegate { if (m_componentMount.Rider != null) { m_stateMachine.TransitionTo("Steed"); } m_componentCreature.ComponentCreatureModel.LookRandomOrder = true; }, null); m_stateMachine.AddState("Steed", delegate { m_componentPathfinding.Stop(); m_speed = 0f; m_speedLevel = 1; }, delegate { ProcessRidingOrders(); }, null); m_stateMachine.TransitionTo("Inactive"); }
public ComponentMount FindNearestMount(ComponentRider rider) { var bodies = new DynamicArray <ComponentBody>(); var body = rider.ComponentCreature.ComponentBody; Utils.SubsystemBodies.FindBodiesAroundPoint(new Vector2(body.Position.X, body.Position.Z), 2.5f, bodies); float num = 0f; ComponentMount result = null; foreach (ComponentMount m in bodies.Select(GetMount)) { if (m == null || m.Entity == Entity) { continue; } ComponentBody p = m.ComponentBody; while (p.ParentBody != null) { p = p.ParentBody; if (p.Entity == Entity) { goto b; } } float score = 0f; const float maxDistance = 7f; if (m.ComponentBody.Velocity.LengthSquared() < 1f) { var v = m.ComponentBody.Position + Vector3.Transform(m.MountOffset, m.ComponentBody.Rotation) - body.Position; if (v.LengthSquared() < maxDistance) { score = maxDistance - v.Length(); } } if (score > num) { num = score; result = m; } b :; } return(result); }
public ComponentMount FindNearestMount() { Vector2 point = new Vector2(ComponentCreature.ComponentBody.Position.X, ComponentCreature.ComponentBody.Position.Z); m_componentBodies.Clear(); m_subsystemBodies.FindBodiesAroundPoint(point, 2.5f, m_componentBodies); float num = 0f; ComponentMount result = null; foreach (ComponentMount item in from b in m_componentBodies select b.Entity.FindComponent <ComponentMount>() into m where m != null && m.Entity != base.Entity select m) { float num2 = ScoreMount(item, 2.5f); if (num2 > num) { num = num2; result = item; } } return(result); }
public new void HandleInput() { WidgetInput input = m_componentPlayer.View.Input; PlayerInput playerInput = m_componentPlayer.ComponentInput.PlayerInput; ComponentRider componentRider = m_componentPlayer.ComponentRider; if (m_componentPlayer.View.ActiveCamera.IsEntityControlEnabled) { if (!m_keyboardHelpMessageShown && (m_componentPlayer.PlayerData.InputDevice & WidgetInputDevice.Keyboard) != 0 && Time.PeriodicEvent(7.0, 0.0)) { m_keyboardHelpMessageShown = true; DisplaySmallMessage(Utils.Get("按 H 键查看键盘控制帮助\n(或看帮助)"), true, true); } else if (!m_gamepadHelpMessageShown && (m_componentPlayer.PlayerData.InputDevice & WidgetInputDevice.Gamepads) != 0 && Time.PeriodicEvent(7.0, 0.0)) { m_gamepadHelpMessageShown = true; DisplaySmallMessage(Utils.Get("按 START/PAUSE 键查看手柄控制帮助\n(或看帮助)"), true, true); } } if (playerInput.KeyboardHelp) { if (m_keyboardHelpDialog == null) { m_keyboardHelpDialog = new KeyboardHelpDialog(); } if (m_keyboardHelpDialog.ParentWidget != null) { DialogsManager.HideDialog(m_keyboardHelpDialog); } else { DialogsManager.ShowDialog(m_componentPlayer.View.GameWidget, m_keyboardHelpDialog); } } if (playerInput.GamepadHelp) { if (m_gamepadHelpDialog == null) { m_gamepadHelpDialog = new GamepadHelpDialog(); } if (m_gamepadHelpDialog.ParentWidget != null) { DialogsManager.HideDialog(m_gamepadHelpDialog); } else { DialogsManager.ShowDialog(m_componentPlayer.View.GameWidget, m_gamepadHelpDialog); } } if (m_helpButtonWidget.IsClicked) { ScreensManager.SwitchScreen("Help"); } IInventory inventory = m_componentPlayer.ComponentMiner.Inventory; if (playerInput.ToggleInventory || m_inventoryButtonWidget.IsClicked) { if (componentRider.Mount != null && ModalPanelWidget == null) { Widget widget = OpenEntity(inventory, m_componentPlayer.ComponentRider.Mount.Entity); if (widget != null) { ModalPanelWidget = widget; AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f); return; } } ModalPanelWidget = IsInventoryVisible() ? null : inventory is ComponentCreativeInventory ? new CreativeInventoryWidget(m_componentPlayer.Entity) : (Widget) new FullInventoryWidget(inventory, m_componentPlayer.Entity.FindComponent <ComponentCraftingTable>(true)); } if (playerInput.ToggleClothing || m_clothingButtonWidget.IsClicked) { ModalPanelWidget = IsClothingVisible() ? null : new ClothingWidget(m_componentPlayer); } if (m_sneakButtonWidget.IsClicked || playerInput.ToggleSneak) { bool isSneaking = m_componentPlayer.ComponentBody.IsSneaking; m_componentPlayer.ComponentBody.IsSneaking = !isSneaking; if (m_componentPlayer.ComponentBody.IsSneaking != isSneaking) { DisplaySmallMessage(Utils.Get(m_componentPlayer.ComponentBody.IsSneaking ? "潜行模式:开" : "潜行模式:关"), false, false); } } if (componentRider != null && (m_mountButtonWidget.IsClicked || playerInput.ToggleMount)) { bool flag = componentRider.Mount != null; if (flag) { componentRider.StartDismounting(); } else { ComponentMount componentMount = FindNearestMount(componentRider); if (componentMount != null) { componentRider.StartMounting(componentMount); } } if (componentRider.Mount != null != flag) { DisplaySmallMessage(Utils.Get(componentRider.Mount != null ? "上马" : "下马"), false, false); } } if ((m_editItemButton.IsClicked || playerInput.EditItem) && m_nearbyEditableCell.HasValue) { int cellValue = m_subsystemTerrain.Terrain.GetCellValue(m_nearbyEditableCell.Value.X, m_nearbyEditableCell.Value.Y, m_nearbyEditableCell.Value.Z); int contents = Terrain.ExtractContents(cellValue); SubsystemBlockBehavior[] blockBehaviors = m_subsystemBlockBehaviors.GetBlockBehaviors(contents); for (int i = 0; i < blockBehaviors.Length && !blockBehaviors[i].OnEditBlock(m_nearbyEditableCell.Value.X, m_nearbyEditableCell.Value.Y, m_nearbyEditableCell.Value.Z, cellValue, m_componentPlayer); i++) { } } else if ((m_editItemButton.IsClicked || playerInput.EditItem) && IsActiveSlotEditable()) { if (inventory != null) { int activeSlotIndex = inventory.ActiveSlotIndex; int num = Terrain.ExtractContents(inventory.GetSlotValue(activeSlotIndex)); if (BlocksManager.Blocks[num].IsEditable) { SubsystemBlockBehavior[] blockBehaviors2 = m_subsystemBlockBehaviors.GetBlockBehaviors(num); for (int j = 0; j < blockBehaviors2.Length && !blockBehaviors2[j].OnEditInventoryItem(inventory, activeSlotIndex, m_componentPlayer); j++) { } } } } bool isCreative = m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative; if (isCreative && (m_creativeFlyButtonWidget.IsClicked || playerInput.ToggleCreativeFly) && componentRider.Mount == null) { bool isCreativeFlyEnabled = m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled; m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled = !isCreativeFlyEnabled; if (m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled != isCreativeFlyEnabled) { if (m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled) { m_componentPlayer.ComponentLocomotion.JumpOrder = 1f; DisplaySmallMessage(Utils.Get("飞行模式:开"), false, false); } else { DisplaySmallMessage(Utils.Get("飞行模式:关"), false, false); } } } if (m_cameraButtonWidget.IsClicked || playerInput.SwitchCameraMode) { View view = m_componentPlayer.View; if (view.ActiveCamera.GetType() == typeof(FppCamera)) { view.ActiveCamera = view.FindCamera <TppCamera>(true); DisplaySmallMessage(Utils.Get("第三人称视角"), false, false); } else if (view.ActiveCamera.GetType() == typeof(TppCamera)) { view.ActiveCamera = view.FindCamera <OrbitCamera>(true); DisplaySmallMessage(Utils.Get("滑轨视角"), false, false); } else if (view.ActiveCamera.GetType() == typeof(OrbitCamera)) { view.ActiveCamera = isCreative ? (Camera) new DebugCamera(view) : view.FindCamera <FixedCamera>(true); DisplaySmallMessage(Utils.Get(isCreative ? "调试视角" : "固定视角"), false, false); } else if (isCreative && view.ActiveCamera.GetType() == typeof(FixedCamera)) { view.ActiveCamera = new FlyCamera(view); DisplaySmallMessage(Utils.Get("飞行视角"), false, false); } else if (view.ActiveCamera.GetType() == typeof(DebugCamera)) { view.ActiveCamera = view.FindCamera <FixedCamera>(true); DisplaySmallMessage(Utils.Get("固定视角"), false, false); } else if (view.ActiveCamera.GetType() == typeof(FlyCamera)) { view.ActiveCamera = new RandomJumpCamera(view); DisplaySmallMessage(Utils.Get("随机跳跃视角"), false, false); } else if (view.ActiveCamera.GetType() == typeof(RandomJumpCamera)) { view.ActiveCamera = new StraightFlightCamera(view); DisplaySmallMessage(Utils.Get("垂直飞行视角"), false, false); } else { view.ActiveCamera = view.FindCamera <FppCamera>(true); DisplaySmallMessage(Utils.Get("第一人称视角"), false, false); } } if (m_photoButtonWidget.IsClicked || playerInput.TakeScreenshot) { ScreenCaptureManager.CapturePhoto(); Time.QueueFrameCountDelayedExecution(Time.FrameIndex + 1, delegate { DisplaySmallMessage(Utils.Get("照片已保存到图片相册"), false, false); }); } if (isCreative && (m_lightningButtonWidget.IsClicked || playerInput.Lighting)) { Project.FindSubsystem <SubsystemWeather>(true).ManualLightingStrike(m_componentPlayer.ComponentCreatureModel.EyePosition, Matrix.CreateFromQuaternion(m_componentPlayer.ComponentCreatureModel.EyeRotation).Forward); } if (isCreative && (m_timeOfDayButtonWidget.IsClicked || playerInput.TimeOfDay)) { float num2 = MathUtils.Remainder(0.25f, 1f); float num3 = MathUtils.Remainder(0.5f, 1f); float num4 = MathUtils.Remainder(0.75f, 1f); float num5 = MathUtils.Remainder(1f, 1f); float num6 = MathUtils.Remainder(num2 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num7 = MathUtils.Remainder(num3 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num8 = MathUtils.Remainder(num4 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num9 = MathUtils.Remainder(num5 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num10 = MathUtils.Min(num6, num7, num8, num9); if (num6 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num6; DisplaySmallMessage(Utils.Get("黎明"), false, false); } else if (num7 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num7; DisplaySmallMessage(Utils.Get("中午"), false, false); } else if (num8 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num8; DisplaySmallMessage(Utils.Get("黄昏"), false, false); } else if (num9 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num9; DisplaySmallMessage(Utils.Get("午夜"), false, false); } } if (ModalPanelWidget != null) { if (input.Cancel || input.Back || m_backButtonWidget.IsClicked) { ModalPanelWidget = null; } } else if (input.Back || m_backButtonWidget.IsClicked) { DialogsManager.ShowDialog(m_componentPlayer.View.GameWidget, new GameMenuDialog(m_componentPlayer)); } return; }
public override void Update(float dt) { if (m_componentCreature.ComponentBody.IsSneaking) { m_sneakFactor = MathUtils.Min(m_sneakFactor + 2f * dt, 1f); } else { m_sneakFactor = MathUtils.Max(m_sneakFactor - 2f * dt, 0f); } if ((m_componentSleep != null && m_componentSleep.IsSleeping) || m_componentCreature.ComponentHealth.Health <= 0f) { m_lieDownFactorEye = MathUtils.Min(m_lieDownFactorEye + 1f * dt, 1f); m_lieDownFactorModel = MathUtils.Min(m_lieDownFactorModel + 3f * dt, 1f); } else { m_lieDownFactorEye = MathUtils.Max(m_lieDownFactorEye - 1f * dt, 0f); m_lieDownFactorModel = MathUtils.Max(m_lieDownFactorModel - 3f * dt, 0f); } bool flag = true; bool flag2 = true; float footstepsPhase = m_footstepsPhase; if (m_componentCreature.ComponentLocomotion.LadderValue.HasValue) { m_footstepsPhase += 1.5f * m_walkAnimationSpeed * m_componentCreature.ComponentBody.Velocity.Length() * dt; flag2 = false; } else if (!m_componentCreature.ComponentLocomotion.IsCreativeFlyEnabled) { float num = m_componentCreature.ComponentLocomotion.SlipSpeed ?? (m_componentCreature.ComponentBody.Velocity.XZ - m_componentCreature.ComponentBody.StandingOnVelocity.XZ).Length(); if (num > 0.5f) { base.MovementAnimationPhase += num * dt * m_walkAnimationSpeed; m_footstepsPhase += 1f * m_walkAnimationSpeed * num * dt; flag = false; flag2 = false; } } if (flag) { float num2 = 0.5f * MathUtils.Floor(2f * base.MovementAnimationPhase); if (base.MovementAnimationPhase != num2) { if (base.MovementAnimationPhase - num2 > 0.25f) { base.MovementAnimationPhase = MathUtils.Min(base.MovementAnimationPhase + 2f * dt, num2 + 0.5f); } else { base.MovementAnimationPhase = MathUtils.Max(base.MovementAnimationPhase - 2f * dt, num2); } } } if (flag2) { m_footstepsPhase = 0f; } float num3 = 0f; ComponentMount componentMount = (m_componentRider != null) ? m_componentRider.Mount : null; if (componentMount != null) { ComponentCreatureModel componentCreatureModel = componentMount.Entity.FindComponent <ComponentCreatureModel>(); if (componentCreatureModel != null) { base.Bob = componentCreatureModel.Bob; num3 = base.Bob; } m_headingOffset = 0f; } else { float x = MathUtils.Sin((float)Math.PI * 2f * base.MovementAnimationPhase); num3 = m_walkBobHeight * MathUtils.Sqr(x); float num4 = 0f; if (m_componentCreature.ComponentLocomotion.LastWalkOrder.HasValue && m_componentCreature.ComponentLocomotion.LastWalkOrder != Vector2.Zero) { num4 = Vector2.Angle(Vector2.UnitY, m_componentCreature.ComponentLocomotion.LastWalkOrder.Value); } m_headingOffset += MathUtils.NormalizeAngle(num4 - m_headingOffset) * MathUtils.Saturate(8f * m_subsystemTime.GameTimeDelta); m_headingOffset = MathUtils.NormalizeAngle(m_headingOffset); } float num5 = MathUtils.Min(12f * m_subsystemTime.GameTimeDelta, 1f); base.Bob += num5 * (num3 - base.Bob); base.IsAttackHitMoment = false; if (base.AttackOrder) { m_punchFactor = MathUtils.Min(m_punchFactor + 4f * dt, 1f); float punchPhase = m_punchPhase; m_punchPhase = MathUtils.Remainder(m_punchPhase + dt * 2f, 1f); if (punchPhase < 0.5f && m_punchPhase >= 0.5f) { base.IsAttackHitMoment = true; m_punchCounter++; } } else { m_punchFactor = MathUtils.Max(m_punchFactor - 4f * dt, 0f); if (m_punchPhase != 0f) { if (m_punchPhase > 0.5f) { m_punchPhase = MathUtils.Remainder(MathUtils.Min(m_punchPhase + dt * 2f, 1f), 1f); } else if (m_punchPhase > 0f) { m_punchPhase = MathUtils.Max(m_punchPhase - dt * m_punchPhase, 0f); } } } m_rowLeft = base.RowLeftOrder; m_rowRight = base.RowRightOrder; if ((m_rowLeft || m_rowRight) && componentMount != null && componentMount.ComponentBody.ImmersionFactor > 0f && MathUtils.Floor(1.1000000238418579 * m_subsystemTime.GameTime) != MathUtils.Floor(1.1000000238418579 * (m_subsystemTime.GameTime - (double)m_subsystemTime.GameTimeDelta))) { m_subsystemAudio.PlayRandomSound("Audio/Rowing", m_random.Float(0.4f, 0.6f), m_random.Float(-0.3f, 0.2f), m_componentCreature.ComponentBody.Position, 3f, autoDelay: true); } float num6 = MathUtils.Floor(m_footstepsPhase); if (m_footstepsPhase > num6 && footstepsPhase <= num6) { if (!m_componentCreature.ComponentBody.IsSneaking) { m_subsystemNoise.MakeNoise(m_componentCreature.ComponentBody, 0.25f, 8f); } if (!m_componentCreature.ComponentCreatureSounds.PlayFootstepSound(1f)) { m_footstepsPhase = 0f; } } m_aimHandAngle = base.AimHandAngleOrder; m_inHandItemOffset = Vector3.Lerp(m_inHandItemOffset, base.InHandItemOffsetOrder, 10f * dt); m_inHandItemRotation = Vector3.Lerp(m_inHandItemRotation, base.InHandItemRotationOrder, 10f * dt); base.AttackOrder = false; base.RowLeftOrder = false; base.RowRightOrder = false; base.AimHandAngleOrder = 0f; base.InHandItemOffsetOrder = Vector3.Zero; base.InHandItemRotationOrder = Vector3.Zero; base.Update(dt); }
public override void Animate() { Vector3 position = m_componentCreature.ComponentBody.Position; Vector3 vector = m_componentCreature.ComponentBody.Rotation.ToYawPitchRoll(); if (m_lieDownFactorModel == 0f) { ComponentMount componentMount = (m_componentRider != null) ? m_componentRider.Mount : null; float num = MathUtils.Sin((float)Math.PI * 2f * base.MovementAnimationPhase); position.Y += base.Bob; vector.X += m_headingOffset; float num2 = (float)MathUtils.Remainder(0.75 * m_subsystemGameInfo.TotalElapsedGameTime + (double)(GetHashCode() & 0xFFFF), 10000.0); float x = MathUtils.Clamp(MathUtils.Lerp(-0.3f, 0.3f, SimplexNoise.Noise(1.02f * num2 - 100f)) + m_componentCreature.ComponentLocomotion.LookAngles.X + 1f * m_componentCreature.ComponentLocomotion.LastTurnOrder.X + m_headingOffset, 0f - MathUtils.DegToRad(80f), MathUtils.DegToRad(80f)); float y = MathUtils.Clamp(MathUtils.Lerp(-0.3f, 0.3f, SimplexNoise.Noise(0.96f * num2 - 200f)) + m_componentCreature.ComponentLocomotion.LookAngles.Y, 0f - MathUtils.DegToRad(45f), MathUtils.DegToRad(45f)); float num3 = 0f; float y2 = 0f; float x2 = 0f; float y3 = 0f; float num4 = 0f; float num5 = 0f; float num6 = 0f; float num7 = 0f; if (componentMount != null) { if (componentMount.Entity.ValuesDictionary.DatabaseObject.Name == "Boat") { position.Y -= 0.2f; vector.X += (float)Math.PI; num4 = 0.4f; num6 = 0.4f; num5 = 0.2f; num7 = -0.2f; num3 = 1.1f; x2 = 1.1f; y2 = 0.2f; y3 = -0.2f; } else { num4 = 0.5f; num6 = 0.5f; num5 = 0.15f; num7 = -0.15f; y2 = 0.55f; y3 = -0.55f; } } else if (m_componentCreature.ComponentLocomotion.IsCreativeFlyEnabled) { float num8 = m_componentCreature.ComponentLocomotion.LastWalkOrder.HasValue ? MathUtils.Min(0.03f * m_componentCreature.ComponentBody.Velocity.XZ.LengthSquared(), 0.5f) : 0f; num3 = -0.1f - num8; x2 = num3; y2 = MathUtils.Lerp(0f, 0.25f, SimplexNoise.Noise(1.07f * num2 + 400f)); y3 = 0f - MathUtils.Lerp(0f, 0.25f, SimplexNoise.Noise(0.93f * num2 + 500f)); } else if (base.MovementAnimationPhase != 0f) { num4 = -0.5f * num; num6 = 0.5f * num; num3 = m_walkLegsAngle * num; x2 = 0f - num3; } float num9 = 0f; if (m_componentMiner != null) { float num10 = MathUtils.Sin(MathUtils.Sqrt(m_componentMiner.PokingPhase) * (float)Math.PI); num9 = ((m_componentMiner.ActiveBlockValue == 0) ? (1f * num10) : (0.3f + 1f * num10)); } float num11 = (m_punchPhase != 0f) ? ((0f - MathUtils.DegToRad(90f)) * MathUtils.Sin((float)Math.PI * 2f * MathUtils.Sigmoid(m_punchPhase, 4f))) : 0f; float num12 = ((m_punchCounter & 1) == 0) ? num11 : 0f; float num13 = ((m_punchCounter & 1) != 0) ? num11 : 0f; float num14 = 0f; float num15 = 0f; float num16 = 0f; float num17 = 0f; if (m_rowLeft || m_rowRight) { float num18 = 0.6f * (float)MathUtils.Sin(6.91150426864624 * m_subsystemTime.GameTime); float num19 = 0.2f + 0.2f * (float)MathUtils.Cos(6.91150426864624 * (m_subsystemTime.GameTime + 0.5)); if (m_rowLeft) { num14 = num18; num15 = num19; } if (m_rowRight) { num16 = num18; num17 = 0f - num19; } } float num20 = 0f; float num21 = 0f; float num22 = 0f; float num23 = 0f; if (m_aimHandAngle != 0f) { num20 = 1.5f; num21 = -0.7f; num22 = m_aimHandAngle * 1f; num23 = 0f; } float num24 = (!m_componentCreature.ComponentLocomotion.IsCreativeFlyEnabled) ? 1 : 4; num4 += MathUtils.Lerp(-0.1f, 0.1f, SimplexNoise.Noise(num2)) + num12 + num14 + num20; num5 += MathUtils.Lerp(0f, num24 * 0.15f, SimplexNoise.Noise(1.1f * num2 + 100f)) + num15 + num21; num6 += num9 + MathUtils.Lerp(-0.1f, 0.1f, SimplexNoise.Noise(0.9f * num2 + 200f)) + num13 + num16 + num22; num7 += 0f - MathUtils.Lerp(0f, num24 * 0.15f, SimplexNoise.Noise(1.05f * num2 + 300f)) + num17 + num23; float s = MathUtils.Min(12f * m_subsystemTime.GameTimeDelta, 1f); m_headAngles += s * (new Vector2(x, y) - m_headAngles); m_handAngles1 += s * (new Vector2(num4, num5) - m_handAngles1); m_handAngles2 += s * (new Vector2(num6, num7) - m_handAngles2); m_legAngles1 += s * (new Vector2(num3, y2) - m_legAngles1); m_legAngles2 += s * (new Vector2(x2, y3) - m_legAngles2); SetBoneTransform(m_bodyBone.Index, Matrix.CreateRotationY(vector.X) * Matrix.CreateTranslation(position)); SetBoneTransform(m_headBone.Index, Matrix.CreateRotationX(m_headAngles.Y) * Matrix.CreateRotationZ(0f - m_headAngles.X)); SetBoneTransform(m_hand1Bone.Index, Matrix.CreateRotationY(m_handAngles1.Y) * Matrix.CreateRotationX(m_handAngles1.X)); SetBoneTransform(m_hand2Bone.Index, Matrix.CreateRotationY(m_handAngles2.Y) * Matrix.CreateRotationX(m_handAngles2.X)); SetBoneTransform(m_leg1Bone.Index, Matrix.CreateRotationY(m_legAngles1.Y) * Matrix.CreateRotationX(m_legAngles1.X)); SetBoneTransform(m_leg2Bone.Index, Matrix.CreateRotationY(m_legAngles2.Y) * Matrix.CreateRotationX(m_legAngles2.X)); } else { float num25 = MathUtils.Max(base.DeathPhase, m_lieDownFactorModel); float num26 = 1f - num25; Vector3 position2 = position + num25 * 0.5f * m_componentCreature.ComponentBody.BoxSize.Y * Vector3.Normalize(m_componentCreature.ComponentBody.Matrix.Forward * new Vector3(1f, 0f, 1f)) + num25 * Vector3.UnitY * m_componentCreature.ComponentBody.BoxSize.Z * 0.1f; SetBoneTransform(m_bodyBone.Index, Matrix.CreateFromYawPitchRoll(vector.X, (float)Math.PI / 2f * num25, 0f) * Matrix.CreateTranslation(position2)); SetBoneTransform(m_headBone.Index, Matrix.Identity); SetBoneTransform(m_hand1Bone.Index, Matrix.CreateRotationY(m_handAngles1.Y * num26) * Matrix.CreateRotationX(m_handAngles1.X * num26)); SetBoneTransform(m_hand2Bone.Index, Matrix.CreateRotationY(m_handAngles2.Y * num26) * Matrix.CreateRotationX(m_handAngles2.X * num26)); SetBoneTransform(m_leg1Bone.Index, Matrix.CreateRotationY(m_legAngles1.Y * num26) * Matrix.CreateRotationX(m_legAngles1.X * num26)); SetBoneTransform(m_leg2Bone.Index, Matrix.CreateRotationY(m_legAngles2.Y * num26) * Matrix.CreateRotationX(m_legAngles2.X * num26)); } base.Animate(); }
public override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap) { m_subsystemTime = base.Project.FindSubsystem <SubsystemTime>(throwOnError: true); m_componentCreature = base.Entity.FindComponent <ComponentCreature>(throwOnError: true); m_componentPathfinding = base.Entity.FindComponent <ComponentPathfinding>(throwOnError: true); m_componentMount = base.Entity.FindComponent <ComponentMount>(throwOnError: true); m_isEnabled = !base.Entity.ValuesDictionary.DatabaseObject.Name.EndsWith("_Saddled"); m_stateMachine.AddState("Inactive", delegate { m_importanceLevel = 0f; m_rider = null; }, delegate { if (m_isEnabled && m_random.Float(0f, 1f) < 1f * m_subsystemTime.GameTimeDelta && m_componentMount.Rider != null) { m_importanceLevel = 220f; m_dumpStartTime = m_subsystemTime.GameTime; m_rider = m_componentMount.Rider; } if (IsActive) { m_stateMachine.TransitionTo("WildJumping"); } }, null); m_stateMachine.AddState("WildJumping", delegate { m_componentCreature.ComponentCreatureSounds.PlayPainSound(); m_componentPathfinding.Stop(); }, delegate { if (!IsActive) { m_stateMachine.TransitionTo("Inactive"); } else if (m_componentMount.Rider == null) { m_importanceLevel = 0f; RunAway(); } if (m_random.Float(0f, 1f) < 1f * m_subsystemTime.GameTimeDelta) { m_componentCreature.ComponentCreatureSounds.PlayPainSound(); } if (m_random.Float(0f, 1f) < 3f * m_subsystemTime.GameTimeDelta) { m_walkOrder = new Vector2(m_random.Float(-0.5f, 0.5f), m_random.Float(-0.5f, 1.5f)); } if (m_random.Float(0f, 1f) < 2.5f * m_subsystemTime.GameTimeDelta) { m_turnOrder.X = m_random.Float(-1f, 1f); } if (m_random.Float(0f, 1f) < 2f * m_subsystemTime.GameTimeDelta) { m_componentCreature.ComponentLocomotion.JumpOrder = m_random.Float(0.9f, 1f); if (m_componentMount.Rider != null && m_subsystemTime.GameTime - m_dumpStartTime > 3.0) { if (m_random.Float(0f, 1f) < 0.05f) { m_componentMount.Rider.StartDismounting(); m_componentMount.Rider.ComponentCreature.ComponentHealth.Injure(m_random.Float(0.05f, 0.2f), m_componentCreature, ignoreInvulnerability: false, "Thrown from a mount"); } if (m_random.Float(0f, 1f) < 0.25f) { m_componentMount.Rider.ComponentCreature.ComponentHealth.Injure(0.05f, m_componentCreature, ignoreInvulnerability: false, "Thrown from a mount"); } } } if (m_random.Float(0f, 1f) < 4f * m_subsystemTime.GameTimeDelta) { m_lookOrder = new Vector2(m_random.Float(-3f, 3f), m_lookOrder.Y); } if (m_random.Float(0f, 1f) < 0.25f * m_subsystemTime.GameTimeDelta) { TransitionToRandomDumpingBehavior(); } m_componentCreature.ComponentLocomotion.WalkOrder = m_walkOrder; m_componentCreature.ComponentLocomotion.TurnOrder = m_turnOrder; m_componentCreature.ComponentLocomotion.LookOrder = m_lookOrder; }, null); m_stateMachine.AddState("BlindRacing", delegate { m_componentCreature.ComponentCreatureSounds.PlayPainSound(); m_componentPathfinding.SetDestination(m_componentCreature.ComponentBody.Position + new Vector3(m_random.Float(-15f, 15f), 0f, m_random.Float(-15f, 15f)), 1f, 2f, 0, useRandomMovements: false, ignoreHeightDifference: true, raycastDestination: false, null); }, delegate { if (!IsActive) { m_stateMachine.TransitionTo("Inactive"); } else if (m_componentMount.Rider == null) { m_importanceLevel = 0f; RunAway(); } else if (!m_componentPathfinding.Destination.HasValue || m_componentPathfinding.IsStuck) { TransitionToRandomDumpingBehavior(); } if (m_random.Float(0f, 1f) < 0.5f * m_subsystemTime.GameTimeDelta) { m_componentCreature.ComponentLocomotion.JumpOrder = 1f; m_componentCreature.ComponentCreatureSounds.PlayPainSound(); } }, null); m_stateMachine.AddState("Stupor", delegate { m_componentCreature.ComponentCreatureSounds.PlayPainSound(); m_componentPathfinding.Stop(); }, delegate { if (!IsActive) { m_stateMachine.TransitionTo("Inactive"); } else if (m_componentMount.Rider == null) { m_importanceLevel = 0f; } if (m_subsystemTime.PeriodicGameTimeEvent(2.0, 0.0)) { TransitionToRandomDumpingBehavior(); } }, null); m_stateMachine.TransitionTo("Inactive"); }
public new void Update(float dt) { PlayerInput playerInput = ComponentInput.PlayerInput; if (ComponentInput.IsControlledByTouch && m_aimDirection.HasValue) { playerInput.Look = Vector2.Zero; } if (ComponentMiner.Inventory != null) { ComponentMiner.Inventory.ActiveSlotIndex = MathUtils.Clamp(ComponentMiner.Inventory.ActiveSlotIndex + playerInput.ScrollInventory, 0, 5); if (playerInput.SelectInventorySlot.HasValue) { ComponentMiner.Inventory.ActiveSlotIndex = MathUtils.Clamp(playerInput.SelectInventorySlot.Value, 0, 5); } } if (m_subsystemTime.PeriodicGameTimeEvent(0.5, 0)) { ReadOnlyList <int> readOnlyList = ComponentClothing.GetClothes(ClothingSlot.Head); if ((readOnlyList.Count > 0 && ClothingBlock.GetClothingData(readOnlyList[readOnlyList.Count - 1]).DisplayName == Utils.Get("DZˮͷ¿ø")) || (ComponentBody.ImmersionFluidBlock != null && ComponentBody.ImmersionFluidBlock.BlockIndex == RottenMeatBlock.Index)) { //if (ComponentBody.ImmersionDepth > 0.8f) //ComponentScreenOverlays.BlackoutFactor = 1f; ComponentHealth.Air = 1f; } } ComponentMount mount = ComponentRider.Mount; if (mount != null) { var componentSteedBehavior = mount.Entity.FindComponent <ComponentSteedBehavior>(); if (componentSteedBehavior != null) { if (playerInput.Move.Z > 0.5f && !m_speedOrderBlocked) { if (PlayerData.PlayerClass == PlayerClass.Male) { m_subsystemAudio.PlayRandomSound("Audio/Creatures/MaleYellFast", 0.75f, 0f, ComponentBody.Position, 2f, false); } else { m_subsystemAudio.PlayRandomSound("Audio/Creatures/FemaleYellFast", 0.75f, 0f, ComponentBody.Position, 2f, false); } componentSteedBehavior.SpeedOrder = 1; m_speedOrderBlocked = true; } else if (playerInput.Move.Z < -0.5f && !m_speedOrderBlocked) { if (PlayerData.PlayerClass == PlayerClass.Male) { m_subsystemAudio.PlayRandomSound("Audio/Creatures/MaleYellSlow", 0.75f, 0f, ComponentBody.Position, 2f, false); } else { m_subsystemAudio.PlayRandomSound("Audio/Creatures/FemaleYellSlow", 0.75f, 0f, ComponentBody.Position, 2f, false); } componentSteedBehavior.SpeedOrder = -1; m_speedOrderBlocked = true; } else if (MathUtils.Abs(playerInput.Move.Z) <= 0.25f) { m_speedOrderBlocked = false; } componentSteedBehavior.TurnOrder = playerInput.Move.X; componentSteedBehavior.JumpOrder = playerInput.Jump ? 1 : 0; ComponentLocomotion.LookOrder = new Vector2(playerInput.Look.X, 0f); } else { var componentBoat = mount.Entity.FindComponent <ComponentBoat>(); if (componentBoat != null || mount.Entity.FindComponent <ComponentBoatI>() != null) { if (componentBoat != null) { componentBoat.TurnOrder = playerInput.Move.X; componentBoat.MoveOrder = playerInput.Move.Z; ComponentLocomotion.LookOrder = new Vector2(playerInput.Look.X, 0f); } else { ComponentLocomotion.LookOrder = playerInput.Look; } ComponentCreatureModel.RowLeftOrder = playerInput.Move.X <-0.2f || playerInput.Move.Z> 0.2f; ComponentCreatureModel.RowRightOrder = playerInput.Move.X > 0.2f || playerInput.Move.Z > 0.2f; } var c = mount.Entity.FindComponent <ComponentLocomotion>(); if (c != null) { c.WalkOrder = playerInput.Move.XZ; c.FlyOrder = new Vector3(0f, playerInput.Move.Y, 0f); c.TurnOrder = playerInput.Look * new Vector2(1f, 0f); c.JumpOrder = playerInput.Jump ? 1 : 0; c.LookOrder = playerInput.Look; if (playerInput.ToggleCreativeFly) { c.IsCreativeFlyEnabled = !c.IsCreativeFlyEnabled; } } } } else { ComponentLocomotion.WalkOrder = (ComponentLocomotion.WalkOrder ?? Vector2.Zero) + (ComponentBody.IsSneaking ? (0.66f * new Vector2(playerInput.SneakMove.X, playerInput.SneakMove.Z)) : new Vector2(playerInput.Move.X, playerInput.Move.Z)); ComponentLocomotion.FlyOrder = new Vector3(0f, playerInput.Move.Y, 0f); ComponentLocomotion.TurnOrder = playerInput.Look * new Vector2(1f, 0f); ComponentLocomotion.JumpOrder = MathUtils.Max(playerInput.Jump ? 1 : 0, ComponentLocomotion.JumpOrder); } ComponentLocomotion.LookOrder += playerInput.Look * (SettingsManager.FlipVerticalAxis ? new Vector2(0f, -1f) : new Vector2(0f, 1f)); int num = Terrain.ExtractContents(ComponentMiner.ActiveBlockValue); Block block = BlocksManager.Blocks[num]; bool flag = false; if (playerInput.Interact.HasValue && !flag && m_subsystemTime.GameTime - m_lastActionTime > 0.33000001311302185) { Vector3 viewPosition = View.ActiveCamera.ViewPosition; var direction = Vector3.Normalize(View.ActiveCamera.ScreenToWorld(new Vector3(playerInput.Interact.Value, 1f), Matrix.Identity) - viewPosition); if (!ComponentMiner.Use(viewPosition, direction)) { var body = ComponentMiner.PickBody(viewPosition, direction); var result = ComponentMiner.PickTerrainForInteraction(viewPosition, direction); if (result.HasValue && (!body.HasValue || result.Value.Distance < body.Value.Distance)) { if (!ComponentMiner.Interact(result.Value)) { if (ComponentMiner.Place(result.Value)) { m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); flag = true; m_isAimBlocked = true; } } else { m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); flag = true; m_isAimBlocked = true; } } } else { m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); flag = true; m_isAimBlocked = true; } } float num2 = (m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative || block.BlockIndex == Musket2Block.Index) ? 0.1f : 1.4f; Vector3 viewPosition2 = View.ActiveCamera.ViewPosition; if (playerInput.Aim.HasValue && block.IsAimable && m_subsystemTime.GameTime - m_lastActionTime > num2) { if (!m_isAimBlocked) { Vector2 value = playerInput.Aim.Value; Vector3 v = View.ActiveCamera.ScreenToWorld(new Vector3(value, 1f), Matrix.Identity); Point2 size = Window.Size; if (playerInput.Aim.Value.X >= size.X * 0.1f && playerInput.Aim.Value.X < size.X * 0.9f && playerInput.Aim.Value.Y >= size.Y * 0.1f && playerInput.Aim.Value.Y < size.Y * 0.9f) { m_aimDirection = Vector3.Normalize(v - viewPosition2); if (ComponentMiner.Aim(viewPosition2, m_aimDirection.Value, AimState.InProgress)) { ComponentMiner.Aim(viewPosition2, m_aimDirection.Value, AimState.Cancelled); m_aimDirection = null; m_isAimBlocked = true; } } else if (m_aimDirection.HasValue) { ComponentMiner.Aim(viewPosition2, m_aimDirection.Value, AimState.Cancelled); m_aimDirection = null; m_isAimBlocked = true; } } } else { m_isAimBlocked = false; if (m_aimDirection.HasValue) { ComponentMiner.Aim(viewPosition2, m_aimDirection.Value, AimState.Completed); m_aimDirection = null; m_lastActionTime = m_subsystemTime.GameTime; } } flag |= m_aimDirection.HasValue; if (playerInput.Hit.HasValue && !flag && m_subsystemTime.GameTime - m_lastActionTime > 0.33000001311302185) { Vector3 viewPosition3 = View.ActiveCamera.ViewPosition; var vector = Vector3.Normalize(View.ActiveCamera.ScreenToWorld(new Vector3(playerInput.Hit.Value, 1f), Matrix.Identity) - viewPosition3); TerrainRaycastResult?nullable3 = ComponentMiner.PickTerrainForInteraction(viewPosition3, vector); BodyRaycastResult? nullable4 = ComponentMiner.PickBody(viewPosition3, vector); if (nullable4.HasValue && (!nullable3.HasValue || nullable3.Value.Distance > nullable4.Value.Distance)) { if (ComponentMiner.ActiveBlockValue == 0) { Widget widget = ComponentNGui.OpenEntity(ComponentMiner.Inventory, nullable4.Value.ComponentBody.Entity); if (widget != null) { ComponentGui.ModalPanelWidget = widget; AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f); return; } } flag = true; m_isDigBlocked = true; if (Vector3.Distance(viewPosition3 + vector * nullable4.Value.Distance, ComponentCreatureModel.EyePosition) <= 2f) { ComponentMiner.Hit(nullable4.Value.ComponentBody, vector); } } } if (playerInput.Dig.HasValue && !flag && !m_isDigBlocked && m_subsystemTime.GameTime - m_lastActionTime > 0.33000001311302185) { Vector3 viewPosition4 = View.ActiveCamera.ViewPosition; Vector3 v2 = View.ActiveCamera.ScreenToWorld(new Vector3(playerInput.Dig.Value, 1f), Matrix.Identity); TerrainRaycastResult?nullable5 = ComponentMiner.PickTerrainForDigging(viewPosition4, v2 - viewPosition4); if (nullable5.HasValue && ComponentMiner.Dig(nullable5.Value)) { m_lastActionTime = m_subsystemTime.GameTime; m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); } } if (!playerInput.Dig.HasValue) { m_isDigBlocked = false; } if (playerInput.Drop && ComponentMiner.Inventory != null) { IInventory inventory = ComponentMiner.Inventory; int slotValue = inventory.GetSlotValue(inventory.ActiveSlotIndex); int num3 = inventory.RemoveSlotItems(count: inventory.GetSlotCount(inventory.ActiveSlotIndex), slotIndex: inventory.ActiveSlotIndex); if (slotValue != 0 && num3 != 0) { Vector3 v3 = ComponentBody.Position + new Vector3(0f, ComponentBody.BoxSize.Y * 0.66f, 0f); Matrix matrix = ComponentBody.Matrix; Vector3 position = v3 + 0.25f * matrix.Forward; matrix = Matrix.CreateFromQuaternion(ComponentCreatureModel.EyeRotation); Vector3 value2 = 8f * matrix.Forward; m_subsystemPickables.AddPickable(slotValue, num3, position, value2, null); } } if (playerInput.PickBlockType.HasValue && !flag) { if (ComponentMiner.Inventory is ComponentCreativeInventory componentCreativeInventory) { Vector3 viewPosition5 = View.ActiveCamera.ViewPosition; Vector3 v4 = View.ActiveCamera.ScreenToWorld(new Vector3(playerInput.PickBlockType.Value, 1f), Matrix.Identity); TerrainRaycastResult?nullable6 = ComponentMiner.PickTerrainForDigging(viewPosition5, v4 - viewPosition5); if (nullable6.HasValue) { int value3 = nullable6.Value.Value; value3 = Terrain.ReplaceLight(value3, 0); int num4 = Terrain.ExtractContents(value3); Block block2 = BlocksManager.Blocks[num4]; int num5 = 0; var creativeValues = block2.GetCreativeValues(); if (block2.GetCreativeValues().Contains(value3)) { num5 = value3; } if (num5 == 0 && !block2.IsNonDuplicable) { var list = new List <BlockDropValue>(); bool _; block2.GetDropValues(m_subsystemTerrain, value3, 0, 2147483647, list, out _); if (list.Count > 0 && list[0].Count > 0) { num5 = list[0].Value; } } if (num5 == 0) { num5 = creativeValues.FirstOrDefault(); } if (num5 != 0) { int num6 = -1; for (int i = 0; i < 6; i++) { if (componentCreativeInventory.GetSlotCount(i) > 0 && componentCreativeInventory.GetSlotValue(i) == num5) { num6 = i; break; } } if (num6 < 0) { for (int j = 0; j < 6; j++) { if (componentCreativeInventory.GetSlotCount(j) == 0 || componentCreativeInventory.GetSlotValue(j) == 0) { num6 = j; break; } } } if (num6 < 0) { num6 = componentCreativeInventory.ActiveSlotIndex; } componentCreativeInventory.RemoveSlotItems(num6, 2147483647); componentCreativeInventory.AddSlotItems(num6, num5, 1); componentCreativeInventory.ActiveSlotIndex = num6; ComponentGui.DisplaySmallMessage(block2.GetDisplayName(m_subsystemTerrain, value3), false, false); m_subsystemAudio.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f, 0f); } } } } HighlightRaycastResult = ComponentMiner.PickTerrainForDigging(View.ActiveCamera.ViewPosition, View.ActiveCamera.ViewDirection); }
public void SpawnPlayer(Vector3 position, SpawnMode spawnMode) { ComponentMount componentMount = null; if (spawnMode != SpawnMode.Respawn && CheckIsPointInWater(Terrain.ToCell(position))) { Entity entity = DatabaseManager.CreateEntity(m_project, "Boat", throwIfNotFound: true); entity.FindComponent <ComponentBody>(throwOnError: true).Position = position; entity.FindComponent <ComponentBody>(throwOnError: true).Rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitY, MathUtils.DegToRad(45f)); componentMount = entity.FindComponent <ComponentMount>(throwOnError: true); m_project.AddEntity(entity); position.Y += entity.FindComponent <ComponentBody>(throwOnError: true).BoxSize.Y; } string value = ""; string value2 = ""; string value3 = ""; string value4 = ""; if (spawnMode != SpawnMode.Respawn) { if (PlayerClass == PlayerClass.Female) { if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("2")) { value = ""; value2 = MakeClothingValue(37, 2); value3 = MakeClothingValue(16, 14); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(27, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("3")) { value = MakeClothingValue(31, 0); value2 = MakeClothingValue(13, 7) + ";" + MakeClothingValue(5, 0); value3 = MakeClothingValue(17, 15); value4 = MakeClothingValue(29, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("4")) { value = MakeClothingValue(30, 7); value2 = MakeClothingValue(14, 6); value3 = MakeClothingValue(25, 7); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(8, 0); } else { value = MakeClothingValue(30, 12); value2 = MakeClothingValue(37, 3) + ";" + MakeClothingValue(1, 3); value3 = MakeClothingValue(0, 12); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(29, 0); } } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("2")) { value = ""; value2 = MakeClothingValue(13, 0) + ";" + MakeClothingValue(5, 0); value3 = MakeClothingValue(25, 8); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(29, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("3")) { value = MakeClothingValue(32, 0); value2 = MakeClothingValue(37, 5); value3 = MakeClothingValue(0, 15); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(8, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("4")) { value = MakeClothingValue(31, 0); value2 = MakeClothingValue(15, 14); value3 = MakeClothingValue(0, 0); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(8, 0); } else { value = MakeClothingValue(32, 0); value2 = MakeClothingValue(37, 0) + ";" + MakeClothingValue(1, 9); value3 = MakeClothingValue(0, 12); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(29, 0); } } ValuesDictionary overrides = new ValuesDictionary { { "Player", new ValuesDictionary { { "PlayerIndex", PlayerIndex } } }, { "Intro", new ValuesDictionary { { "PlayIntro", spawnMode == SpawnMode.InitialIntro } } }, { "Clothing", new ValuesDictionary { { "Clothes", new ValuesDictionary { { "Feet", value4 }, { "Legs", value3 }, { "Torso", value2 }, { "Head", value } } } } } }; Vector2 v = ComponentIntro.FindOceanDirection(m_subsystemTerrain.TerrainContentsGenerator, position.XZ); string entityTemplateName = (PlayerClass == PlayerClass.Male) ? "MalePlayer" : "FemalePlayer"; Entity entity2 = DatabaseManager.CreateEntity(m_project, entityTemplateName, overrides, throwIfNotFound: true); entity2.FindComponent <ComponentBody>(throwOnError: true).Position = position; entity2.FindComponent <ComponentBody>(throwOnError: true).Rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitY, Vector2.Angle(v, -Vector2.UnitY)); m_project.AddEntity(entity2); if (componentMount != null) { entity2.FindComponent <ComponentRider>(throwOnError: true).StartMounting(componentMount); } LastSpawnTime = m_subsystemGameInfo.TotalElapsedGameTime; int num = ++SpawnsCount; }
public void Update(float dt) { PlayerInput playerInput = ComponentInput.PlayerInput; if (ComponentInput.IsControlledByTouch && m_aim.HasValue) { playerInput.Look = Vector2.Zero; } if (ComponentMiner.Inventory != null) { ComponentMiner.Inventory.ActiveSlotIndex += playerInput.ScrollInventory; if (playerInput.SelectInventorySlot.HasValue) { ComponentMiner.Inventory.ActiveSlotIndex = MathUtils.Clamp(playerInput.SelectInventorySlot.Value, 0, 9); } } ComponentSteedBehavior componentSteedBehavior = null; ComponentBoat componentBoat = null; ComponentMount mount = ComponentRider.Mount; if (mount != null) { componentSteedBehavior = mount.Entity.FindComponent <ComponentSteedBehavior>(); componentBoat = mount.Entity.FindComponent <ComponentBoat>(); } if (componentSteedBehavior != null) { if (playerInput.Move.Z > 0.5f && !m_speedOrderBlocked) { if (PlayerData.PlayerClass == PlayerClass.Male) { m_subsystemAudio.PlayRandomSound("Audio/Creatures/MaleYellFast", 0.75f, 0f, base.ComponentBody.Position, 2f, autoDelay: false); } else { m_subsystemAudio.PlayRandomSound("Audio/Creatures/FemaleYellFast", 0.75f, 0f, base.ComponentBody.Position, 2f, autoDelay: false); } componentSteedBehavior.SpeedOrder = 1; m_speedOrderBlocked = true; } else if (playerInput.Move.Z < -0.5f && !m_speedOrderBlocked) { if (PlayerData.PlayerClass == PlayerClass.Male) { m_subsystemAudio.PlayRandomSound("Audio/Creatures/MaleYellSlow", 0.75f, 0f, base.ComponentBody.Position, 2f, autoDelay: false); } else { m_subsystemAudio.PlayRandomSound("Audio/Creatures/FemaleYellSlow", 0.75f, 0f, base.ComponentBody.Position, 2f, autoDelay: false); } componentSteedBehavior.SpeedOrder = -1; m_speedOrderBlocked = true; } else if (MathUtils.Abs(playerInput.Move.Z) <= 0.25f) { m_speedOrderBlocked = false; } componentSteedBehavior.TurnOrder = playerInput.Move.X; componentSteedBehavior.JumpOrder = (playerInput.Jump ? 1 : 0); base.ComponentLocomotion.LookOrder = new Vector2(playerInput.Look.X, 0f); } else if (componentBoat != null) { componentBoat.TurnOrder = playerInput.Move.X; componentBoat.MoveOrder = playerInput.Move.Z; base.ComponentLocomotion.LookOrder = new Vector2(playerInput.Look.X, 0f); base.ComponentCreatureModel.RowLeftOrder = (playerInput.Move.X <-0.2f || playerInput.Move.Z> 0.2f); base.ComponentCreatureModel.RowRightOrder = (playerInput.Move.X > 0.2f || playerInput.Move.Z > 0.2f); } else { base.ComponentLocomotion.WalkOrder = (base.ComponentBody.IsSneaking ? (0.66f * new Vector2(playerInput.SneakMove.X, playerInput.SneakMove.Z)) : new Vector2(playerInput.Move.X, playerInput.Move.Z)); base.ComponentLocomotion.FlyOrder = new Vector3(0f, playerInput.Move.Y, 0f); base.ComponentLocomotion.TurnOrder = playerInput.Look * new Vector2(1f, 0f); base.ComponentLocomotion.JumpOrder = MathUtils.Max(playerInput.Jump ? 1 : 0, base.ComponentLocomotion.JumpOrder); } base.ComponentLocomotion.LookOrder += playerInput.Look * (SettingsManager.FlipVerticalAxis ? new Vector2(0f, -1f) : new Vector2(0f, 1f)); base.ComponentLocomotion.VrLookOrder = playerInput.VrLook; base.ComponentLocomotion.VrMoveOrder = playerInput.VrMove; int num = Terrain.ExtractContents(ComponentMiner.ActiveBlockValue); Block block = BlocksManager.Blocks[num]; bool flag = false; if (playerInput.Interact.HasValue && !flag && m_subsystemTime.GameTime - m_lastActionTime > 0.33000001311302185) { if (!ComponentMiner.Use(playerInput.Interact.Value)) { TerrainRaycastResult?terrainRaycastResult = ComponentMiner.Raycast <TerrainRaycastResult>(playerInput.Interact.Value, RaycastMode.Interaction); if (terrainRaycastResult.HasValue) { if (!ComponentMiner.Interact(terrainRaycastResult.Value)) { if (ComponentMiner.Place(terrainRaycastResult.Value)) { m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); flag = true; m_isAimBlocked = true; } } else { m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); flag = true; m_isAimBlocked = true; } } } else { m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); flag = true; m_isAimBlocked = true; } } float num2 = (m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative) ? 0.1f : 1.4f; if (playerInput.Aim.HasValue && block.IsAimable && m_subsystemTime.GameTime - m_lastActionTime > (double)num2) { if (!m_isAimBlocked) { Ray3 value = playerInput.Aim.Value; Vector3 vector = GameWidget.ActiveCamera.WorldToScreen(value.Position + value.Direction, Matrix.Identity); Point2 size = Window.Size; if (ComponentInput.IsControlledByVr || (vector.X >= (float)size.X * 0.02f && vector.X < (float)size.X * 0.98f && vector.Y >= (float)size.Y * 0.02f && vector.Y < (float)size.Y * 0.98f)) { m_aim = value; if (ComponentMiner.Aim(value, AimState.InProgress)) { ComponentMiner.Aim(m_aim.Value, AimState.Cancelled); m_aim = null; m_isAimBlocked = true; } else if (!m_aimHintIssued && Time.PeriodicEvent(1.0, 0.0)) { Time.QueueTimeDelayedExecution(Time.RealTime + 3.0, delegate { if (!m_aimHintIssued && m_aim.HasValue && !base.ComponentBody.IsSneaking) { m_aimHintIssued = true; ComponentGui.DisplaySmallMessage(LanguageControl.Get(fName, 1), Color.White, blinking: true, playNotificationSound: true); } }); } } else if (m_aim.HasValue) { ComponentMiner.Aim(m_aim.Value, AimState.Cancelled); m_aim = null; m_isAimBlocked = true; } } } else { m_isAimBlocked = false; if (m_aim.HasValue) { ComponentMiner.Aim(m_aim.Value, AimState.Completed); m_aim = null; m_lastActionTime = m_subsystemTime.GameTime; } } flag |= m_aim.HasValue; if (playerInput.Hit.HasValue && !flag && m_subsystemTime.GameTime - m_lastActionTime > 0.33000001311302185) { BodyRaycastResult?bodyRaycastResult = ComponentMiner.Raycast <BodyRaycastResult>(playerInput.Hit.Value, RaycastMode.Interaction); if (bodyRaycastResult.HasValue) { flag = true; m_isDigBlocked = true; if (Vector3.Distance(bodyRaycastResult.Value.HitPoint(), base.ComponentCreatureModel.EyePosition) <= 2f) { ComponentMiner.Hit(bodyRaycastResult.Value.ComponentBody, bodyRaycastResult.Value.HitPoint(), playerInput.Hit.Value.Direction); } } } if (playerInput.Dig.HasValue && !flag && !m_isDigBlocked && m_subsystemTime.GameTime - m_lastActionTime > 0.33000001311302185) { TerrainRaycastResult?terrainRaycastResult2 = ComponentMiner.Raycast <TerrainRaycastResult>(playerInput.Dig.Value, RaycastMode.Digging); if (terrainRaycastResult2.HasValue && ComponentMiner.Dig(terrainRaycastResult2.Value)) { m_lastActionTime = m_subsystemTime.GameTime; m_subsystemTerrain.TerrainUpdater.RequestSynchronousUpdate(); } } if (!playerInput.Dig.HasValue) { m_isDigBlocked = false; } if (playerInput.Drop && ComponentMiner.Inventory != null) { IInventory inventory = ComponentMiner.Inventory; int slotValue = inventory.GetSlotValue(inventory.ActiveSlotIndex); int num3 = inventory.RemoveSlotItems(count: inventory.GetSlotCount(inventory.ActiveSlotIndex), slotIndex: inventory.ActiveSlotIndex); if (slotValue != 0 && num3 != 0) { Vector3 position = base.ComponentBody.Position + new Vector3(0f, base.ComponentBody.BoxSize.Y * 0.66f, 0f) + 0.25f * base.ComponentBody.Matrix.Forward; Vector3 value2 = 8f * Matrix.CreateFromQuaternion(base.ComponentCreatureModel.EyeRotation).Forward; m_subsystemPickables.AddPickable(slotValue, num3, position, value2, null); } } if (!playerInput.PickBlockType.HasValue || flag) { return; } ComponentCreativeInventory componentCreativeInventory = ComponentMiner.Inventory as ComponentCreativeInventory; if (componentCreativeInventory == null) { return; } TerrainRaycastResult?terrainRaycastResult3 = ComponentMiner.Raycast <TerrainRaycastResult>(playerInput.PickBlockType.Value, RaycastMode.Digging, raycastTerrain: true, raycastBodies: false, raycastMovingBlocks: false); if (!terrainRaycastResult3.HasValue) { return; } int value3 = terrainRaycastResult3.Value.Value; value3 = Terrain.ReplaceLight(value3, 0); int num4 = Terrain.ExtractContents(value3); Block block2 = BlocksManager.Blocks[num4]; int num5 = 0; IEnumerable <int> creativeValues = block2.GetCreativeValues(); if (block2.GetCreativeValues().Contains(value3)) { num5 = value3; } if (num5 == 0 && !block2.IsNonDuplicable) { List <BlockDropValue> list = new List <BlockDropValue>(); block2.GetDropValues(m_subsystemTerrain, value3, 0, int.MaxValue, list, out bool _); if (list.Count > 0 && list[0].Count > 0) { num5 = list[0].Value; } } if (num5 == 0) { num5 = creativeValues.FirstOrDefault(); } if (num5 == 0) { return; } int num6 = -1; for (int i = 0; i < 10; i++) { if (componentCreativeInventory.GetSlotCapacity(i, num5) > 0 && componentCreativeInventory.GetSlotCount(i) > 0 && componentCreativeInventory.GetSlotValue(i) == num5) { num6 = i; break; } } if (num6 < 0) { for (int j = 0; j < 10; j++) { if (componentCreativeInventory.GetSlotCapacity(j, num5) > 0 && (componentCreativeInventory.GetSlotCount(j) == 0 || componentCreativeInventory.GetSlotValue(j) == 0)) { num6 = j; break; } } } if (num6 < 0) { num6 = componentCreativeInventory.ActiveSlotIndex; } componentCreativeInventory.RemoveSlotItems(num6, int.MaxValue); componentCreativeInventory.AddSlotItems(num6, num5, 1); componentCreativeInventory.ActiveSlotIndex = num6; ComponentGui.DisplaySmallMessage(block2.GetDisplayName(m_subsystemTerrain, value3), Color.White, blinking: false, playNotificationSound: false); m_subsystemAudio.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f, 0f); }
public void HandleInput() { WidgetInput input = m_componentPlayer.GameWidget.Input; PlayerInput playerInput = m_componentPlayer.ComponentInput.PlayerInput; ComponentRider componentRider = m_componentPlayer.ComponentRider; if (m_componentPlayer.GameWidget.ActiveCamera.IsEntityControlEnabled) { if (!m_keyboardHelpMessageShown && (m_componentPlayer.PlayerData.InputDevice & WidgetInputDevice.Keyboard) != 0 && Time.PeriodicEvent(7.0, 0.0)) { m_keyboardHelpMessageShown = true; DisplaySmallMessage(LanguageControl.Get(fName, 1), Color.White, blinking: true, playNotificationSound: true); } else if (!m_gamepadHelpMessageShown && (m_componentPlayer.PlayerData.InputDevice & WidgetInputDevice.Gamepads) != 0 && Time.PeriodicEvent(7.0, 0.0)) { m_gamepadHelpMessageShown = true; DisplaySmallMessage(LanguageControl.Get(fName, 2), Color.White, blinking: true, playNotificationSound: true); } } if (playerInput.KeyboardHelp) { if (m_keyboardHelpDialog == null) { m_keyboardHelpDialog = new KeyboardHelpDialog(); } if (m_keyboardHelpDialog.ParentWidget != null) { DialogsManager.HideDialog(m_keyboardHelpDialog); } else { DialogsManager.ShowDialog(m_componentPlayer.GuiWidget, m_keyboardHelpDialog); } } if (playerInput.GamepadHelp) { if (m_gamepadHelpDialog == null) { m_gamepadHelpDialog = new GamepadHelpDialog(); } if (m_gamepadHelpDialog.ParentWidget != null) { DialogsManager.HideDialog(m_gamepadHelpDialog); } else { DialogsManager.ShowDialog(m_componentPlayer.GuiWidget, m_gamepadHelpDialog); } } if (m_helpButtonWidget.IsClicked) { ScreensManager.SwitchScreen("Help"); } if (playerInput.ToggleInventory || m_inventoryButtonWidget.IsClicked) { if (IsInventoryVisible()) { ModalPanelWidget = null; } else if (m_componentPlayer.ComponentMiner.Inventory is ComponentCreativeInventory) { ModalPanelWidget = new CreativeInventoryWidget(m_componentPlayer.Entity); } else { ModalPanelWidget = new FullInventoryWidget(m_componentPlayer.ComponentMiner.Inventory, m_componentPlayer.Entity.FindComponent <ComponentCraftingTable>(throwOnError: true)); } } if (playerInput.ToggleClothing || m_clothingButtonWidget.IsClicked) { if (IsClothingVisible()) { ModalPanelWidget = null; } else { ModalPanelWidget = new ClothingWidget(m_componentPlayer); } } if (m_sneakButtonWidget.IsClicked || playerInput.ToggleSneak) { bool isSneaking = m_componentPlayer.ComponentBody.IsSneaking; m_componentPlayer.ComponentBody.IsSneaking = !isSneaking; if (m_componentPlayer.ComponentBody.IsSneaking != isSneaking) { if (m_componentPlayer.ComponentBody.IsSneaking) { DisplaySmallMessage(LanguageControl.Get(fName, 3), Color.White, blinking: false, playNotificationSound: false); } else { DisplaySmallMessage(LanguageControl.Get(fName, 4), Color.White, blinking: false, playNotificationSound: false); } } } if (componentRider != null && (m_mountButtonWidget.IsClicked || playerInput.ToggleMount)) { bool flag = componentRider.Mount != null; if (flag) { componentRider.StartDismounting(); } else { ComponentMount componentMount = componentRider.FindNearestMount(); if (componentMount != null) { componentRider.StartMounting(componentMount); } } if (componentRider.Mount != null != flag) { if (componentRider.Mount != null) { DisplaySmallMessage(LanguageControl.Get(fName, 5), Color.White, blinking: false, playNotificationSound: false); } else { DisplaySmallMessage(LanguageControl.Get(fName, 6), Color.White, blinking: false, playNotificationSound: false); } } } if ((m_editItemButton.IsClicked || playerInput.EditItem) && m_componentPlayer.ComponentBlockHighlight.NearbyEditableCell.HasValue) { Point3 value = m_componentPlayer.ComponentBlockHighlight.NearbyEditableCell.Value; int cellValue = m_subsystemTerrain.Terrain.GetCellValue(value.X, value.Y, value.Z); int contents = Terrain.ExtractContents(cellValue); SubsystemBlockBehavior[] blockBehaviors = m_subsystemBlockBehaviors.GetBlockBehaviors(contents); for (int i = 0; i < blockBehaviors.Length && !blockBehaviors[i].OnEditBlock(value.X, value.Y, value.Z, cellValue, m_componentPlayer); i++) { } } else if ((m_editItemButton.IsClicked || playerInput.EditItem) && IsActiveSlotEditable()) { IInventory inventory = m_componentPlayer.ComponentMiner.Inventory; if (inventory != null) { int activeSlotIndex = inventory.ActiveSlotIndex; int num = Terrain.ExtractContents(inventory.GetSlotValue(activeSlotIndex)); if (BlocksManager.Blocks[num].IsEditable) { SubsystemBlockBehavior[] blockBehaviors = m_subsystemBlockBehaviors.GetBlockBehaviors(num); for (int i = 0; i < blockBehaviors.Length && !blockBehaviors[i].OnEditInventoryItem(inventory, activeSlotIndex, m_componentPlayer); i++) { } } } } if (m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative && (m_creativeFlyButtonWidget.IsClicked || playerInput.ToggleCreativeFly) && componentRider.Mount == null) { bool isCreativeFlyEnabled = m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled; m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled = !isCreativeFlyEnabled; if (m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled != isCreativeFlyEnabled) { if (m_componentPlayer.ComponentLocomotion.IsCreativeFlyEnabled) { m_componentPlayer.ComponentLocomotion.JumpOrder = 1f; DisplaySmallMessage(LanguageControl.Get(fName, 7), Color.White, blinking: false, playNotificationSound: false); } else { DisplaySmallMessage(LanguageControl.Get(fName, 8), Color.White, blinking: false, playNotificationSound: false); } } } if (!m_componentPlayer.ComponentInput.IsControlledByVr && (m_cameraButtonWidget.IsClicked || playerInput.SwitchCameraMode)) { GameWidget gameWidget = m_componentPlayer.GameWidget; if (gameWidget.ActiveCamera.GetType() == typeof(FppCamera)) { gameWidget.ActiveCamera = gameWidget.FindCamera <TppCamera>(); DisplaySmallMessage(LanguageControl.Get(fName, 9), Color.White, blinking: false, playNotificationSound: false); } else if (gameWidget.ActiveCamera.GetType() == typeof(TppCamera)) { gameWidget.ActiveCamera = gameWidget.FindCamera <OrbitCamera>(); DisplaySmallMessage(LanguageControl.Get(fName, 10), Color.White, blinking: false, playNotificationSound: false); } else if (gameWidget.ActiveCamera.GetType() == typeof(OrbitCamera)) { gameWidget.ActiveCamera = gameWidget.FindCamera <FixedCamera>(); DisplaySmallMessage(LanguageControl.Get(fName, 11), Color.White, blinking: false, playNotificationSound: false); } else { gameWidget.ActiveCamera = gameWidget.FindCamera <FppCamera>(); DisplaySmallMessage(LanguageControl.Get(fName, 12), Color.White, blinking: false, playNotificationSound: false); } } if (m_photoButtonWidget.IsClicked || playerInput.TakeScreenshot) { ScreenCaptureManager.CapturePhoto(delegate { DisplaySmallMessage(LanguageControl.Get(fName, 13), Color.White, blinking: false, playNotificationSound: false); }, delegate { DisplaySmallMessage(LanguageControl.Get(fName, 14), Color.White, blinking: false, playNotificationSound: false); }); } if (m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative && (m_lightningButtonWidget.IsClicked || playerInput.Lighting)) { Matrix matrix = Matrix.CreateFromQuaternion(m_componentPlayer.ComponentCreatureModel.EyeRotation); base.Project.FindSubsystem <SubsystemWeather>(throwOnError: true).ManualLightingStrike(m_componentPlayer.ComponentCreatureModel.EyePosition, matrix.Forward); } if (m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative && (m_timeOfDayButtonWidget.IsClicked || playerInput.TimeOfDay)) { float num2 = MathUtils.Remainder(0.25f, 1f); float num3 = MathUtils.Remainder(0.5f, 1f); float num4 = MathUtils.Remainder(0.75f, 1f); float num5 = MathUtils.Remainder(1f, 1f); float num6 = MathUtils.Remainder(num2 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num7 = MathUtils.Remainder(num3 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num8 = MathUtils.Remainder(num4 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num9 = MathUtils.Remainder(num5 - m_subsystemTimeOfDay.TimeOfDay, 1f); float num10 = MathUtils.Min(num6, num7, num8, num9); if (num6 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num6; DisplaySmallMessage(LanguageControl.Get(fName, 15), Color.White, blinking: false, playNotificationSound: false); } else if (num7 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num7; DisplaySmallMessage(LanguageControl.Get(fName, 16), Color.White, blinking: false, playNotificationSound: false); } else if (num8 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num8; DisplaySmallMessage(LanguageControl.Get(fName, 17), Color.White, blinking: false, playNotificationSound: false); } else if (num9 == num10) { m_subsystemTimeOfDay.TimeOfDayOffset += num9; DisplaySmallMessage(LanguageControl.Get(fName, 18), Color.White, blinking: false, playNotificationSound: false); } } if (ModalPanelWidget != null) { if (input.Cancel || input.Back || m_backButtonWidget.IsClicked) { ModalPanelWidget = null; } } else if (input.Back || m_backButtonWidget.IsClicked) { DialogsManager.ShowDialog(m_componentPlayer.GuiWidget, new GameMenuDialog(m_componentPlayer)); } }