Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SubsystemThrowableBlockBehavior.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
7
9
10 public Random m_random = new();
11
12 public override int[] HandledBlocks => [];
13
14 public override bool OnAim(Ray3 aim, ComponentMiner componentMiner, AimState state) {
15 switch (state) {
16 case AimState.InProgress: {
17 componentMiner.ComponentCreature.ComponentCreatureModel.AimHandAngleOrder = 3.2f;
19 ComponentFirstPersonModel componentFirstPersonModel = componentMiner.Entity.FindComponent<ComponentFirstPersonModel>();
20 if (componentFirstPersonModel != null) {
22 componentFirstPersonModel.ItemOffsetOrder = new Vector3(0f, 0.35f, 0.17f);
23 if (block2 is SpearBlock) {
24 componentFirstPersonModel.ItemRotationOrder = new Vector3(-1.5f, 0f, 0f);
25 }
26 }
27 if (block2 is SpearBlock) {
28 componentMiner.ComponentCreature.ComponentCreatureModel.InHandItemOffsetOrder = new Vector3(0f, -0.25f, 0f);
29 componentMiner.ComponentCreature.ComponentCreatureModel.InHandItemRotationOrder = new Vector3(3.14159f, 0f, 0f);
30 }
31 break;
32 }
33 case AimState.Completed: {
34 Vector3 vector = componentMiner.ComponentCreature.ComponentCreatureModel.EyePosition
35 + componentMiner.ComponentCreature.ComponentBody.Matrix.Right * 0.4f;
36 Vector3 v = Vector3.Normalize(vector + aim.Direction * 10f - vector);
37 if (componentMiner.Inventory == null) {
38 break;
39 }
40 int activeSlotIndex = componentMiner.Inventory.ActiveSlotIndex;
41 int slotValue = componentMiner.Inventory.GetSlotValue(activeSlotIndex);
42 int slotCount = componentMiner.Inventory.GetSlotCount(activeSlotIndex);
43 int num = Terrain.ExtractContents(slotValue);
44 Block block = BlocksManager.Blocks[num];
45 if (slotCount > 0) {
46 float num2 = block.GetProjectileSpeed(slotValue);
47 if (componentMiner.ComponentPlayer != null) {
48 num2 *= 0.5f * ((componentMiner?.ComponentFactors?.StrengthFactor ?? 1f) - 1f) + 1f;
49 }
50 Vector3 velocity = componentMiner.ComponentCreature.ComponentBody.Velocity + v * num2;
51 if (m_subsystemProjectiles.FireProjectile(
52 slotValue,
53 vector,
54 velocity,
55 m_random.Vector3(5f, 10f),
56 componentMiner.ComponentCreature
57 )
58 != null) {
59 componentMiner.Inventory.RemoveSlotItems(activeSlotIndex, 1);
60 m_subsystemAudio.PlaySound(
61 "Audio/Throw",
62 m_random.Float(0.2f, 0.3f),
63 m_random.Float(-0.2f, 0.2f),
64 aim.Position,
65 2f,
66 true
67 );
68 componentMiner.Poke(false);
69 }
70 }
71 break;
72 }
73 }
74 return false;
75 }
76
77 public override void Load(ValuesDictionary valuesDictionary) {
78 m_subsystemAudio = Project.FindSubsystem<SubsystemAudio>(true);
80 base.Load(valuesDictionary);
81 }
82 }
83}
Engine.Vector3 Vector3
virtual float GetProjectileSpeed(int value)
virtual void ShowAimingSights(Vector3 position, Vector3 direction)
ComponentPlayer ComponentPlayer
ComponentCreature ComponentCreature
virtual void Poke(bool forceRestart)
ComponentFactors ComponentFactors
ComponentAimingSights ComponentAimingSights
override void Load(ValuesDictionary valuesDictionary)
override bool OnAim(Ray3 aim, ComponentMiner componentMiner, AimState state)
override void Load(ValuesDictionary valuesDictionary)
static int ExtractContents(int value)
Component FindComponent(Type type, string name, bool throwOnError)
ValuesDictionary ValuesDictionary
int RemoveSlotItems(int slotIndex, int count)
实际移除的数量
int GetSlotCount(int slotIndex)
int GetSlotValue(int slotIndex)
Vector3 Position
定义 Ray3.cs:3
Vector3 Direction
定义 Ray3.cs:5
static Vector3 Normalize(Vector3 v)