ins1de Posted June 25, 2016 Share Posted June 25, 2016 (edited) I'm trying to spawn objects without knowing the real coordinates. I want to have 3 objects standing next to each other (the heading/rotation is not a problem).At the moment I'm using this piece of code : Prop barrier_center = World.CreateProp("prop_mp_barrier_02b", RoadCenter, true, false);Vector3 RoadLeft = barrier_center.GetOffsetInWorldCoords(new Vector3(-3F, 0, 0));Prop barrier_left = World.CreateProp("prop_mp_barrier_02b", RoadLeft, true, false);Vector3 RoadRight = barrier_center.GetOffsetInWorldCoords(new Vector3(+3F, 0, 0));Prop barrier_right = World.CreateProp("prop_mp_barrier_02b", RoadRight, true, false); Basically, I thought GetOffsetInWorldCoords would help me the get the left and right next position, but the problem is that GetOffsetInWorldCoords returns the real game coordinates. The code below won't work on every road because the Vector3 coordinates will always be different. barrier_center.GetOffsetInWorldCoords(new Vector3(-3F, 0, 0)); Click on the spoiler to see a better illustration of my problem Now my question is, how can I get those coordinates so that these objects always spawn like in the case n°1? Edited June 25, 2016 by ins1de Link to comment Share on other sites More sharing options...
AHK1221 Posted June 25, 2016 Share Posted June 25, 2016 IDK, but cant you, you know, edit the x value of the middle barrier yourself to avoid these problems? Link to comment Share on other sites More sharing options...
ech3lon Posted June 26, 2016 Share Posted June 26, 2016 (edited) Sounds like what you want is an offset to the right or left of the object. One way of doing that is using LeftVector, RightVector and multiplying it by the distance you want between objects. Then add it to the position of origin object. There's also a forwardVector, should you need it. float magnitude = 3.0f; // distance you want between the objectsVector3 RoadLeft = barrier_center.Position + barrier_center.LeftVector * magnitude;Vector3 RoadRight = barrier_center.Position + barrier_center.RightVector * magnitude; Edited June 26, 2016 by ech3lon Link to comment Share on other sites More sharing options...
ins1de Posted June 26, 2016 Author Share Posted June 26, 2016 IDK, but cant you, you know, edit the x value of the middle barrier yourself to avoid these problems? I've already tried and it's always random. I mean, the x coord seem to change on every east/west direction road. Sounds like what you want is an offset to the right or left of the object. One way of doing that is using LeftVector, RightVector and multiplying it by the distance you want between objects. Then add it to the position of origin object. There's also a forwardVector, should you need it. float magnitude = 3.0f; // distance you want between the objectsVector3 RoadLeft = barrier_center.Position + barrier_center.LeftVector * magnitude;Vector3 RoadRight = barrier_center.Position + barrier_center.RightVector * magnitude; Thanks for bringing the correct vocabulary because for some reason yesterday, I wasn't able to remember that word lol. Yes this is what I was looking for, but the problem is that NetScriptHook doesn't have the LeftVector enum. (It never got implented, very strange : https://github.com/crosire/scripthookvdotnet/blob/71248ac2ce4a3a1b36835b36c4c815e5582bc66e/source/scripting/Entity.cs) Anyways, I've tried with the RightVector itself, and I'm facing the same problem like in the first post. Looks like RightVector is based on the in-game real coords again. Another way to solve this problem would be to indeed create a work-around such as "testing" the road. For example, I could spawn two barriers and then create an invisible object/ped and make it move forward, if the ped/object collides with two objects in his forward direction, then it would mean we're in the case n°2 (as seen in the picture above). I'll see what I can do. Thanks for your replies. Link to comment Share on other sites More sharing options...
aimless Posted June 26, 2016 Share Posted June 26, 2016 First spawn the middle prop. Then use the position from that to place the second to its right vector positive. Then the third to its right vector negative. Prop myprop = World.CreateProp(model, player.Position + (player.ForwardVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop2 = World.CreateProp(model, myprop.Position + (myprop.RightVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop3 = World.CreateProp(model, myprop.Position + (myprop.RightVector * -5), new Vector3(0.0f, 0.0f, player.Heading), true, true); ins1de 1 Link to comment Share on other sites More sharing options...
ins1de Posted June 26, 2016 Author Share Posted June 26, 2016 First spawn the middle prop. Then use the position from that to place the second to its right vector positive. Then the third to its right vector negative. Prop myprop = World.CreateProp(model, player.Position + (player.ForwardVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop2 = World.CreateProp(model, myprop.Position + (myprop.RightVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop3 = World.CreateProp(model, myprop.Position + (myprop.RightVector * -5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Thanks man. I totally forgot myprop.RightVector * -5 was possible. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now