Beispiel #1
0
 public Actor Spawn(ActorSpawnTag tag, object outer, SpawnParameters spawnArgs)
 {
     if (tag.type == null)
     {
         throw new Exception("ActorSpawnTag cannot load type: " + tag.typeName);
     }
     else
     {
         int classID = SerializableObject.StaticClassIDSlow(tag.type);
         return(InternalSpawn(tag, tag.type, classID, outer, spawnArgs));
     }
 }
Beispiel #2
0
    Actor InternalSpawn(ActorSpawnTag tag, Type type, int classID, object outer, SpawnParameters spawnArgs)
    {
        var actor = _objectFactory.NewObject(classID) as Actor;

        if ((actor == null) || !type.IsAssignableFrom(actor.GetType()))
        {
            throw new ObjectStaticClassMismatchException(type.FullName + " has a bad static class id!");
        }
        if (tag != null)
        {
            actor.SetReplicates(tag.replicates);
            actor.SetSpawnTagID((ushort)tag.spawnID);
        }
        actor.SetWorld(this);
        if (actor.replicates && (this is Server.ServerWorld))
        {
            actor.SetNetID(GetNextNetID());
            actor.SetRemoteRole(ERemoteRole.Authority);
            _replicatedActors.Add(actor.netIDHashCode, actor);
            _replicatedObjects.Add(actor.netIDHashCode, actor);
        }

        _actors.Add(actor);

        if (spawnArgs.preConstruct != null)
        {
            spawnArgs.preConstruct(actor);
        }

        actor.PreConstruct(outer);
        actor.Construct();
        actor.PostConstruct();

        if (_didLevelStart)
        {
            actor.OnLevelStart();
        }

        return(actor);
    }
Beispiel #3
0
    public static void DrawSpawnTagInspectorGUI(ActorSpawnTag tag)
    {
        GUI.enabled = false;
        EditorGUILayout.IntField("SpawnId", tag.spawnID);
        var changed = false;

        GUI.enabled = !tag.typeIsReadOnly;
        var typeName = ClassDropDownHelper <T> .ShowClassDropDown("Actor Class", tag.typeName);

        if (tag.typeName != typeName)
        {
            tag.typeName = typeName;
            changed      = true;
        }
        GUI.enabled = !tag.replicatesIsReadOnly;
        var replicates = EditorGUILayout.Toggle("Replicates", tag.replicates);

        if (tag.replicates != replicates)
        {
            tag.replicates = replicates;
            changed        = true;
        }
        GUI.enabled = !tag.staticSpawnIsReadOnly;
        var staticSpawn = EditorGUILayout.Toggle("Static", tag.staticSpawn);

        if (tag.staticSpawn != staticSpawn)
        {
            tag.staticSpawn = staticSpawn;
            changed         = true;
        }
        GUI.enabled = true;

        if (changed)
        {
            EditorUtility.SetDirty(tag);
        }
    }