219
edits
CreativeMD (talk | contribs) |
Lazy Warlock (talk | contribs) No edit summary |
||
(8 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
__FORCETOC__ | |||
{{GameVersion|1.9}} | |||
This tutorial should introduce you into the basics of custom interactions. We will create a magic wand which should spawn particles when holding right click. | This tutorial should introduce you into the basics of custom interactions. We will create a magic wand which should spawn particles when holding right click. | ||
= Preparations = | |||
I highly recommend to read about [[Advanced Items|The Item Class]] first. Additionally you can download the assets [ | I highly recommend to read about [[Advanced Items|The Item Class]] first. Additionally you can download the assets [https://wiki.vintagestory.at/images/4/4d/MagicWand_-_No_CS_File.zip here]. | ||
All of this should be familiar to you, creating and registering the item class ... | All of this should be familiar to you, creating and registering the item class ... | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public class Magic : | public class Magic : ModSystem | ||
{ | { | ||
Line 27: | Line 30: | ||
== Adding particles == | == Adding particles == | ||
Now we need to implement the interact function. First of all we need to specify that the player can "use" this tool, therefore we need to | Now we need to implement the interact function. First of all we need to specify that the player can "use" this tool, therefore we need to set handling to <code>handled</code> ... | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public override | public override void OnHeldInteractStart(ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel, bool firstEvent, ref EnumHandHandling handling) | ||
{ | { | ||
handling = EnumHandHandling.Handled; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 39: | Line 42: | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public override bool OnHeldInteractStep(float secondsUsed, | public override bool OnHeldInteractStep(float secondsUsed, ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel) | ||
{ | { | ||
if (byEntity.World is IClientWorldAccessor) | if (byEntity.World is IClientWorldAccessor) | ||
Line 46: | Line 49: | ||
tf.EnsureDefaultValues(); | tf.EnsureDefaultValues(); | ||
tf.Origin.Set(0, -1, 0); | |||
tf.Rotation.Z = Math.Min(30, secondsUsed * 40); | |||
byEntity.Controls.UsingHeldItemTransformAfter = tf; | |||
tf.Origin.Set(0, | |||
tf. | |||
byEntity.Controls. | |||
} | } | ||
return true; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 112: | Line 110: | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public override bool OnHeldInteractStep(float secondsUsed, | public override bool OnHeldInteractStep(float secondsUsed, ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel) | ||
{ | { | ||
if (byEntity.World is IClientWorldAccessor) | if (byEntity.World is IClientWorldAccessor) | ||
Line 119: | Line 117: | ||
tf.EnsureDefaultValues(); | tf.EnsureDefaultValues(); | ||
tf.Origin.Set(0, -1, 0); | |||
tf.Rotation.Z = Math.Min(30, secondsUsed * 40); | |||
byEntity.Controls.UsingHeldItemTransformAfter = tf; | |||
tf.Origin.Set(0, | |||
tf. | |||
byEntity.Controls. | |||
if (secondsUsed > 0.6) | if (secondsUsed > 0.6) | ||
{ | { | ||
Vec3d pos = | Vec3d pos = | ||
byEntity.Pos.XYZ.Add(0, byEntity.EyeHeight | byEntity.Pos.XYZ.Add(0, byEntity.EyeHeight, 0) | ||
.Ahead(1f, byEntity.Pos.Pitch, byEntity.Pos.Yaw) | .Ahead(1f, byEntity.Pos.Pitch, byEntity.Pos.Yaw) | ||
; | ; | ||
Line 139: | Line 131: | ||
particles.minVelocity = speedVec; | particles.minVelocity = speedVec; | ||
Random rand = new Random(); | Random rand = new Random(); | ||
particles.color = ColorUtil. | particles.color = ColorUtil.ToRgba(255, rand.Next(0, 255), rand.Next(0, 255), rand.Next(0, 255)); | ||
particles.minPos = pos.AddCopy(-0.05, -0.05, -0.05); | particles.minPos = pos.AddCopy(-0.05, -0.05, -0.05); | ||
particles.addPos.Set(0.1, 0.1, 0.1); | particles.addPos.Set(0.1, 0.1, 0.1); | ||
Line 157: | Line 149: | ||
<youtube>bTPXL97Gfns</youtube> | <youtube>bTPXL97Gfns</youtube> | ||
= | = Mod Download = | ||
Feel free to try it out yourself: | Feel free to try it out yourself: | ||
[ | Here is my version: | ||
* for VS v1.9: [https://wiki.vintagestory.at/images/7/72/Magicwand_vs1.9_v1.0.0.zip Magicwand_vs1.9_v1.0.0.zip] | |||
* for VS v1.8: [https://wiki.vintagestory.at/images/3/38/MagicWand.zip MagicWand.zip] | |||
{{Navbox/modding|Vintage Story}} | {{Navbox/modding|Vintage Story}} |
edits