Exemplo n.º 1
0
    public override void SetupInstance(BSPFile bsp, entity entity, SceneEntities entities)
    {
        base.SetupInstance(bsp, entity, entities);

        if (string.IsNullOrEmpty(this.message))
        {
            Debug.LogError("Can't set skill: message is null or empty");
            return;
        }

        int value;

        if (!int.TryParse(this.message, out value))
        {
            Debug.LogError("Can't set skill: invalid message '" + this.message + "'");
            return;
        }

        if (!Enum.IsDefined(typeof(GameSkill), value))
        {
            Debug.LogError("Can't set skill: invalid GameSkill value '" + value + "'");
            return;
        }

        var trigger = entity.GetComponent <trigger_setskill>();

        trigger.skill = (GameSkill)value;
    }
Exemplo n.º 2
0
    public override void SetupInstance(BSPFile bsp, entity entity, SceneEntities entities)
    {
        base.SetupInstance(bsp, entity, entities);

        var door = entity as func_door;

        SetupTrigger(door);
        SetupItems(door);
        SetupMovement(door);
    }
Exemplo n.º 3
0
 /// <summary>
 /// Loads all entities from the provided file. If it already exists will return object.
 /// </summary>
 /// <param name="filename">File to load from</param>
 /// <returns></returns>
 public static Entity[] LoadSceneEntities(string filename)
 {
     Entity[] entities;
     entityDictionary.TryGetValue(filename, out entities);
     if (entities == null)
     {
         entities = SceneEntities.LoadObject(filename);
     }
     return(entities);
 }
Exemplo n.º 4
0
    public override void SetupInstance(BSPFile bsp, entity entity, SceneEntities entities)
    {
        base.SetupInstance(bsp, entity, entities);

        if (angle >= 0 && angle < 360)
        {
            entity.transform.rotation = Quaternion.AngleAxis(90 - angle, Vector3.up);
        }
        else
        {
            Debug.LogError("Unexpected angle: " + angle);
        }
    }
Exemplo n.º 5
0
    public override void SetupInstance(BSPFile bsp, entity entity, SceneEntities entities)
    {
        base.SetupInstance(bsp, entity, entities);

        var collider = entity.GetComponent <BoxCollider>();

        var colliderSize = this.size;

        colliderSize.x += 0.4f;
        colliderSize.y += 0.4f;
        colliderSize.z += 0.4f;

        collider.size = colliderSize;
    }
Exemplo n.º 6
0
    public virtual void SetupInstance(BSPFile bsp, entity entity, SceneEntities entities)
    {
        if (this.target != -1)
        {
            var targetName = entities.FindTargetName(this.target);
            if (targetName == null)
            {
                Debug.LogError("Can't find entity with target name: " + this.target);
            }

            var target = entity.gameObject.AddComponent <EntityTarget>();
            target.targetName = targetName;
        }

        var instanceFields = ReflectionUtils.ListFields(entity);
        var dataFields     = ReflectionUtils.ListFields(this);

        foreach (var name in instanceFields.Keys)
        {
            FieldInfo dataField;
            if (dataFields.TryGetValue(name, out dataField))
            {
                object value = dataField.GetValue(this);
                if (dataField.GetCustomAttribute <BSPTransformAttribute>() != null)
                {
                    Type fieldType = dataField.FieldType;
                    if (fieldType == typeof(int))
                    {
                        value = BSPFile.Scale((int)value);
                    }
                    else if (fieldType == typeof(float))
                    {
                        value = BSPFile.Scale((float)value);
                    }
                    else if (fieldType == typeof(Vector3))
                    {
                        value = BSPFile.TransformVector((Vector3)value);
                    }
                    else
                    {
                        throw new NotImplementedException("Unexpected field type: " + fieldType);
                    }
                }

                FieldInfo instanceField = instanceFields[name];
                instanceField.SetValue(entity, value);
            }
        }
    }
Exemplo n.º 7
0
    public override void SetupInstance(BSPFile bsp, entity entity, SceneEntities entities)
    {
        base.SetupInstance(bsp, entity, entities);

        if (modelRef != null)
        {
            var collider = entity.GetComponent <BoxCollider>();
            collider.size = this.size;
        }

        if (health > 0)
        {
            entity.gameObject.layer = LayerMask.NameToLayer("ShootTrigger");
        }
    }
Exemplo n.º 8
0
    public override void SetupInstance(BSPFile bsp, entity entity, SceneEntities entities)
    {
        base.SetupInstance(bsp, entity, entities);

        if (this.spawnflags == 1) // not sure what this value means but it might be "crucified"
        {
            var rigidBoby = entity.GetComponent <Rigidbody>();
            if (rigidBoby != null)
            {
                GameObject.DestroyImmediate(rigidBoby);
            }

            var collider = entity.GetComponent <BoxCollider>();
            if (collider != null)
            {
                GameObject.DestroyImmediate(collider);
            }

            var zombie = entity as monster_zombie;
            zombie.crucified = true;
        }
    }
Exemplo n.º 9
0
    static void GenerateLevel(BSPFile bsp, IList <Material> materials)
    {
        Level level = GameObject.FindObjectOfType <Level>();

        if (level != null)
        {
            level.Clear();
        }
        else
        {
            GameObject levelObject = new GameObject("Level");
            level = levelObject.AddComponent <Level>();
        }

        bool[] used     = new bool[bsp.faces.Length];
        int    modelNum = 0;

        foreach (var model in bsp.models)
        {
            float progress = ((float)++modelNum) / bsp.models.Length;
            if (EditorUtility.DisplayCancelableProgressBar("Level", "Generating models", progress))
            {
                return;
            }

            GenerateModel(bsp, level, model, materials, used);
        }

        GameObject entitiesParent = new GameObject("Entities");

        entitiesParent.isStatic         = true;
        entitiesParent.transform.parent = level.transform;

        var groupParentLookup = new Dictionary <string, GameObject>();
        var entityList        = new SceneEntities();

        for (int i = 0; i < bsp.entities.Length; ++i)
        {
            float progress = ((float)(i + 1)) / bsp.entities.Length;
            if (EditorUtility.DisplayCancelableProgressBar("Level", "Generating entities...", progress))
            {
                return;
            }

            var entity = bsp.entities[i];

            var entityInstance = GenerateEntity(bsp, entity, materials, used);
            entityList.Add(entity, entityInstance);

            if (entityInstance != null)
            {
                Type entityType     = entity.GetType();
                var  groupAttribute = entityType.GetCustomAttribute <EntityGroupAttribute>(true);
                if (groupAttribute != null)
                {
                    var        groupName = groupAttribute.group;
                    GameObject groupParent;
                    if (!groupParentLookup.TryGetValue(groupName, out groupParent))
                    {
                        groupParent                  = new GameObject(groupName);
                        groupParent.isStatic         = entitiesParent.isStatic;
                        groupParent.transform.parent = entitiesParent.transform;
                        groupParentLookup[groupName] = groupParent;
                    }
                    entityInstance.transform.parent = groupParent.transform;
                }
                else
                {
                    entityInstance.transform.parent = entitiesParent.transform;
                }

                if (entity.targetname != -1)
                {
                    entityInstance.AddComponent <EntityTargetName>();
                }
            }
        }

        // setup instances
        for (int i = 0; i < bsp.entities.Length; ++i)
        {
            float progress = ((float)(i + 1)) / bsp.entities.Length;
            if (EditorUtility.DisplayCancelableProgressBar("Level", "Setting up instances...", progress))
            {
                return;
            }

            var entityInstance = entityList[i];
            if (entityInstance != null)
            {
                var entity    = bsp.entities[i];
                var entityObj = entityInstance.GetSubclassComponent <entity>();

                entity.SetupInstance(bsp, entityObj, entityList);
            }
        }

        // setup player start
        var playerStart = GameObject.FindObjectOfType <info_player_start>();

        if (playerStart == null)
        {
            Debug.LogError("Can't find player start position");
        }

        level.playerStart = playerStart;

        var player = GameObject.FindObjectOfType <CharacterController>();

        player.transform.position = playerStart.transform.position;

        // TODO: link doors
    }