Миграция с NS3
NS4 provides the same functionality as NS3, but uses object-oriented approach.
It also supports a few unique features which are not available in NS3.
Changes
Objects
The ns3.ObjectID
is replaced with ns4.Obj
type.
The main difference is that ns4.Obj
is opaque and can no longer be used or stored as an integer.
It is possible to convert ns4.Obj
to/from ns3.ObjectID
using the following code:
ns3.ObjectID(obj.ObjScriptID())
Similar functions are available for ns4.ObjGroup
and ns3.ObjectGroupID
:
ns3.ObjectGroupID(group.ObjGroupScriptID())
Most object-specific functions are now available on the object itself, instead of a top-level library function:
obj.Enable(false)
obj.Delete()
ns3.ObjectOff(obj)
ns3.Delete(obj)
Object position is now available as a point type, instead of separate X and Y coordinates:
pos := obj.Pos()
x, y := pos.X, pos.Y
x, y := ns3.GetObjectX(obj), ns3.GetObjectY(obj)
Most functions can now accept this new position type instead of a coordinate pair:
pos := obj.Pos()
obj2.HitMelee(pos)
x, y := ns3.GetObjectX(obj), ns3.GetObjectY(obj)
ns3.HitLocation(obj2, x, y)
Position can also be constructed from X and Y values:
obj.HitMelee(ns4.Ptf(10, 20))
ns3.HitLocation(obj, 10, 20)
Waypoints
Similar to objects, waypoints are also represented with opaque ns4.WaypointObj
type.
Conversion to/from ns3.WaypointID
is still available:
ns3.WaypointID(wp.WaypointScriptID())
Waypoints now also have methods instead of top-level library functions:
Position is also returned as a point data type:
pos := wp.Pos()
x, y := pos.X, pos.Y
x, y := ns3.GetWaypointX(obj), ns3.GetWaypointY(obj)
This, in turn, allows using any type that has Pos()
method (also known as ns4.Positioner
) in places where position is expected:
ns4.CreateObject("Beholder", ns4.Ptf(10, 20))
ns4.CreateObject("Beholder", ns4.GetHost())
ns4.CreateObject("Beholder", ns4.Waypoint("Spot"))
ns3.CreateObject("Beholder", ns3.Waypoint("Spot"))