Пример #1
0
    static AddandRemoveObjects()
    {
        SceneView.onSceneGUIDelegate -= OnSceneGUI;
        SceneView.onSceneGUIDelegate += OnSceneGUI;

        m_levelObjects = AssetDatabase.LoadAssetAtPath <LevelObjects>("Assets/Scripts/ScriptableObjects/LevelObject/LevelObjects.asset");
    }
Пример #2
0
    static LevelEditor()
    {
        SceneView.duringSceneGui -= OnSceneGUI;
        SceneView.duringSceneGui += OnSceneGUI;

        levelObjects = AssetDatabase.LoadAssetAtPath <LevelObjects>("Assets/Level Objects.asset");
    }
Пример #3
0
 protected void Start()
 {
     if (this.levelObject != null)
     {
         return;
     }
     this.levelObject = new LevelObject(base.inspectablePosition, base.inspectableRotation, base.inspectableScale, 0, null, this.GUID, this.placementOrigin, this.instanceID, this.customMaterialOverride, true);
     if (this.levelObject.transform == null)
     {
         Debug.LogError(string.Concat(new object[]
         {
             "Failed to create LevelObject - GUID: ",
             this.GUID.ToString("N"),
             " InstanceID: ",
             this.instanceID,
             " Position: ",
             base.transform.position
         }), base.gameObject);
         this.levelObject = new LevelObject(base.inspectablePosition, base.inspectableRotation, base.inspectableScale, 0, null, new Guid("62f7de571873436a8c9a203e6304bd8a"), this.placementOrigin, this.instanceID, AssetReference <MaterialPaletteAsset> .invalid, true);
     }
     base.gameObject.tag                      = "Large";
     base.gameObject.layer                    = this.levelObject.transform.gameObject.layer;
     this.levelObject.transform.parent        = base.transform;
     this.levelObject.transform.localPosition = Vector3.zero;
     this.levelObject.transform.localRotation = Quaternion.identity;
     this.levelObject.transform.localScale    = Vector3.one;
     if (this.levelObject.skybox != null)
     {
         this.levelObject.skybox.transform.parent        = base.transform;
         this.levelObject.skybox.transform.localPosition = Vector3.zero;
         this.levelObject.skybox.transform.localRotation = Quaternion.identity;
         this.levelObject.skybox.transform.localScale    = Vector3.one;
     }
     LevelObjects.registerDevkitObject(this.levelObject, out this.x, out this.y);
 }
Пример #4
0
 protected void OnEnable()
 {
     LevelHierarchy.addItem(this);
     if (this.levelObject != null)
     {
         LevelObjects.registerDevkitObject(this.levelObject, out this.x, out this.y);
     }
 }
Пример #5
0
 protected void OnDisable()
 {
     if (this.levelObject != null)
     {
         LevelObjects.unregisterDevkitObject(this.levelObject, this.x, this.y);
     }
     LevelHierarchy.removeItem(this);
 }
Пример #6
0
    public void SaveObjects(string levelType, int levelNum)
    {
        var sep = "/";

        Debug.Log("Save Objects to " + Statics.folderPath + levelType + sep + "level" + levelNum + ".dat");
        levelObjects = new LevelObjects();
        string folderPath = Statics.folderPath + levelType + sep;
        string filePath   = folderPath + "level" + levelNum + ".dat";
        var folder        = Directory.CreateDirectory(folderPath);

        ScreenCapture.CaptureScreenshot(folderPath + "level" + levelNum + ".png");
        Debug.Log("Save Dots");
        for (int i = 0; i < dots.Count; i++)
        {
            myVector3 position = dots[i].transform.position;
            levelObjects.dotPositions.Add(position);
            levelObjects.dotForwards.Add(dots[i].transform.forward);
            var color = dots[i].GetComponent <SpriteRenderer> ().color;
            levelObjects.dotColors.Add("#" + ColorUtility.ToHtmlStringRGB(color));
        }
        Debug.Log("Save Paths");
        for (int i = 0; i < paths.Count; i++)
        {
            Debug.Log("Save Path " + i);
            levelObjects.paths.Add(new List <myVector3> ());
            levelObjects.normals.Add(new List <myVector3> ());
            var path = paths[i];
            for (int k = 0; k < path.Count; k++)
            {
                levelObjects.paths[i].Add(path.GetPosition(k));
            }
            for (int k = 0; k < path.GetNormals().Count; k++)
            {
                levelObjects.normals[i].Add(path.GetNormal(k));
            }
            var color = paths[i].GetColor();
            levelObjects.pathColors.Add("#" + ColorUtility.ToHtmlStringRGB(color));
            Debug.Log("Save From: " + path.dotFrom + " at " + dots.IndexOf(path.dotFrom));
            levelObjects.dotsFrom.Add(dots.IndexOf(path.dotFrom));
            Debug.Log("Save To: " + path.dotTo + " at " + dots.IndexOf(path.dotTo));
            levelObjects.dotsTo.Add(dots.IndexOf(path.dotTo));
        }

        //		Debug.Log ("Save Homotopies");

        Debug.Log("Save Statics");
        for (int i = 0; i < statics.Count; i++)
        {
            Debug.Log("Save Static " + i);
            levelObjects.statics.Add(new myStatic(statics[i]));
        }
        FileStream fs      = new FileStream(filePath, FileMode.Create);
        BinaryFormatter bf = new BinaryFormatter();

        bf.Serialize(fs, levelObjects);
        fs.Close();
    }
Пример #7
0
    static void build_level(string path)
    {
        Debug.Log("Decode level");
        LevelObjects lvlo = JsonUtility.FromJson <LevelObjects> (File.ReadAllText(path));

        foreach (Object b in lvlo.Objects)
        {
            make(b.Box.X, b.Box.Y, b.Type);
        }
    }
Пример #8
0
        protected override void addFoliage(Vector3 position, Quaternion rotation, Vector3 scale, bool clearWhenBaked)
        {
            ObjectAsset objectAsset = Assets.find <ObjectAsset>(this.obj);

            if (objectAsset == null)
            {
                return;
            }
            LevelObjects.addDevkitObject(objectAsset.GUID, position, rotation, scale, (!clearWhenBaked) ? ELevelObjectPlacementOrigin.PAINTED : ELevelObjectPlacementOrigin.GENERATED);
        }
Пример #9
0
        public void transformSelection()
        {
            byte b;
            byte b2;

            if (Regions.tryGetCoordinate(base.transform.position, out b, out b2) && (this.x != b || this.y != b2))
            {
                LevelObjects.moveDevkitObject(this.levelObject, this.x, this.y, b, b2);
                this.x = b;
                this.y = b2;
            }
        }
Пример #10
0
    public void Selectlevel(int lvlno)
    {
        LevelObjects levelObjects = GameObject.Find("AllLevelObjects").GetComponent <LevelObjects>();

        levelObjects.m_player.SetActive(true);
        levelObjects.m_levelScreenPage.SetActive(false);
        if (!levelObjects.m_gameView.activeSelf)
        {
            levelObjects.m_gameView.SetActive(true);
        }

        level = null;
        GameObject.Find("GameView").transform.position = new Vector3(0, 0, 0);

        switch (lvlno)
        {
        case 1:
            levelObjects.m_levelsObjArr[0].SetActive(true);
            level = levelObjects.m_levelsObjArr[0].GetComponent <Level1Script>();

            break;

        case 2:
            levelObjects.m_levelsObjArr[1].SetActive(true);
            level = levelObjects.m_levelsObjArr[1].GetComponent <Level2Script>();


            break;

        case 3:
            levelObjects.m_levelsObjArr[2].SetActive(true);
            level = levelObjects.m_levelsObjArr[2].GetComponent <Level3Scipt>();


            break;

        case 4:
            levelObjects.m_levelsObjArr[3].SetActive(true);
            level = levelObjects.m_levelsObjArr[3].GetComponent <Level4Script>();

            break;

        case 5:
            levelObjects.m_levelsObjArr[4].SetActive(true);
            level = levelObjects.m_levelsObjArr[4].GetComponent <Level5Script>();

            break;
        }
        Globals.m_currentLvl = level;

        // level.Start();
        //  GameObject.Find("LevelController").GetComponent<SelectLevelScript>().enabled = true;
    }
Пример #11
0
    public static void level1Objects()
    {
        string path   = @"Assets/Resources/Level1/Level1Objects.asset";
        string folder = Path.GetDirectoryName(path);

        if (!File.Exists(path))
        {
            if (Directory.Exists(folder) == false)
            {
                Directory.CreateDirectory(folder);
            }
            LevelObjects A = (LevelObjects)ScriptableObject.CreateInstance <LevelObjects> ();
            AssetDatabase.CreateAsset(A, path);
        }
    }
 protected virtual void handleUpgradeButtonClicked(Sleek2ImageButton button)
 {
     for (byte b = 0; b < Regions.WORLD_SIZE; b += 1)
     {
         for (byte b2 = 0; b2 < Regions.WORLD_SIZE; b2 += 1)
         {
             foreach (LevelObject levelObject in LevelObjects.objects[(int)b, (int)b2])
             {
                 if (levelObject.placementOrigin == ELevelObjectPlacementOrigin.MANUAL)
                 {
                     LevelObjects.addDevkitObject(levelObject.GUID, levelObject.transform.position, levelObject.transform.rotation, levelObject.transform.localScale, levelObject.placementOrigin);
                 }
             }
         }
     }
 }
Пример #13
0
    public static void Level1Triggers()
    {
        string           Objectspath = @"Assets/Resources/Level1/Level1Objects.asset";
        string           Eventpath   = @"Assets/Resources/Level1/Level1CollideEventList.asset";
        LevelObjects     A           = (LevelObjects)AssetDatabase.LoadAssetAtPath(Objectspath, typeof(LevelObjects));
        CollideEventList D           = (CollideEventList)ScriptableObject.CreateInstance <CollideEventList> ();

        foreach (string drag in A.drag)
        {
            foreach (string hit in A.hit)
            {
                string e = drag + "," + hit;
                D.CollideName.Add(new CollideEvent(e));
            }
        }
        AssetDatabase.CreateAsset(D, Eventpath);
    }
        protected override bool isPositionValid(Vector3 position)
        {
            if (!FoliageVolumeUtility.isPointValid(position, false, true, false))
            {
                return(false);
            }
            int num = Physics.OverlapSphereNonAlloc(position, this.obstructionRadius, FoliageResourceInfoAsset.OBSTRUCTION_COLLIDERS, RayMasks.BLOCK_RESOURCE);

            for (int i = 0; i < num; i++)
            {
                ObjectAsset asset = LevelObjects.getAsset(FoliageResourceInfoAsset.OBSTRUCTION_COLLIDERS[i].transform);
                if (asset != null && !asset.isSnowshoe)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #15
0
        public static void instantiate(ObjectAsset asset, Vector3 position, Quaternion rotation, Vector3 scale)
        {
            if (asset == null)
            {
                return;
            }
            if (!Level.isEditor)
            {
                return;
            }
            TranslationReference newReference   = new TranslationReference("#SDG::Devkit.Transactions.Spawn");
            TranslatedText       translatedText = new TranslatedText(newReference);

            translatedText.format(asset.objectName);
            DevkitTransactionManager.beginTransaction(translatedText);
            DevkitHierarchyWorldObject devkitHierarchyWorldObject = LevelObjects.addDevkitObject(asset.GUID, position, rotation, scale, ELevelObjectPlacementOrigin.MANUAL);

            DevkitTransactionUtility.recordInstantiation(devkitHierarchyWorldObject.gameObject);
            DevkitTransactionManager.endTransaction();
        }
Пример #16
0
    private bool LoadObjects(int levelNum)
    {
        Debug.Log("Load Objects for level " + levelNum + " for leveltype " + Statics.levelType);
        var    sep        = "/";
        string folderPath = Statics.folderPath + Statics.levelType + sep;
        string filePath   = folderPath + "level" + levelNum + ".dat";

        Debug.Log("Load from " + filePath);
        if (File.Exists(filePath))
        {
            using (Stream stream = File.Open(filePath, FileMode.Open)) {
                var bformatter = new BinaryFormatter();
                levelObjects = (LevelObjects)bformatter.Deserialize(stream);
                var numDots = levelObjects.dotColors.Count;
                Debug.Log("Load Dots: " + numDots);
                for (int i = 0; i < numDots; i++)
                {
                    Color color;
                    ColorUtility.TryParseHtmlString(levelObjects.dotColors[i], out color);
                    myColors.Remove(color);
                    var dot = Instantiate(dotPrefab);
                    dot.transform.position = levelObjects.dotPositions[i];
                    dot.transform.forward  = levelObjects.dotForwards[i];
                    dot.GetComponent <SpriteRenderer> ().color = color;
                    dot.GetComponentInChildren <TrailRenderer> ().Clear();
                    dot.GetComponent <SpriteRenderer> ().sortingOrder = 10;
                    addDot(dot);
                }
                Debug.Log("Load Paths: " + levelObjects.paths.Count);
                for (int i = 0; i < levelObjects.paths.Count; i++)
                {
                    Debug.Log("Load Path " + i);
                    Color color;
                    ColorUtility.TryParseHtmlString(levelObjects.pathColors[i], out color);
                    myColors.Remove(color);
                    var dotNumber1 = levelObjects.dotsFrom[i];
                    var dotNumber2 = levelObjects.dotsTo[i];
                    var path       = NewPath(dots[dotNumber1], dots[dotNumber2]);
                    var loadedPath = levelObjects.paths[i];
                    for (int j = 0; j < loadedPath.Count; j++)
                    {
                        path.SetPosition(j, loadedPath[j]);
                    }
                    List <Vector3> list = new List <Vector3> ();
                    for (int i1 = 0; i1 < levelObjects.normals[i].Count; i1++)
                    {
                        myVector3 normal = levelObjects.normals[i][i1];
                        list.Add(normal);
                        // Debug.DrawLine (path.GetPosition (i1), path.GetPosition (i1) + normal, Color.red, 1000f);
                    }
                    path.SetNormals(list);
                    path.SetMesh();
                    addPath(path);
                }

                Debug.Log("Load Statics: " + levelObjects.statics.Count);
                for (int i = 0; i < levelObjects.statics.Count; i++)
                {
                    Debug.Log("Load Static " + i);
                    var        myStatic = levelObjects.statics[i];
                    GameObject gameObject;
                    if (myStatic.type == 0)
                    {
                        gameObject = GameObject.Instantiate(staticRectPrefab);
                    }
                    else if (myStatic.type == 1)
                    {
                        gameObject = GameObject.Instantiate(staticCirclePrefab);
                    }
                    else
                    {
                        gameObject = GameObject.Instantiate(staticRectPrefab);
                    }
                    gameObject.transform.position   = myStatic.position;
                    gameObject.transform.localScale = myStatic.size;
                    statics.Add(gameObject);

                    if (Statics.showingAlgebra)
                    {
                        AddStaticAlgebra(i, gameObject);
                    }
                }

                for (int i = 0; i < paths.Count; i++)
                {
                    for (int j = i + 1; j < paths.Count; j++)
                    {
                        CheckIfHomotopic(i, j);
                    }
                }
            }
        }
        return(true);
    }
Пример #17
0
    private bool LoadObjects(int levelNum)
    {
        Debug.Log("Load Objects for level " + levelNum);
        string filePath = Statics.folderPath + Statics.levelType + "/" + "level" + levelNum + ".dat";

        if (File.Exists(filePath))
        {
            using (Stream stream = File.Open(filePath, FileMode.Open)) {
                var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                levelObjects = (LevelObjects)bformatter.Deserialize(stream);
                Debug.Log("Load Dots");
                var numDots = levelObjects.dotColors.Count;
                for (int i = 0; i < numDots; i++)
                {
                    Color color;
                    ColorUtility.TryParseHtmlString(levelObjects.dotColors [i], out color);
                    myColors.Remove(color);
                    var dot = Instantiate(dotPrefab);
                    dot.transform.position = levelObjects.dotPositions [i];
                    dot.GetComponent <SpriteRenderer> ().color = color;
                    dot.GetComponentInChildren <TrailRenderer> ().Clear();
                    dot.GetComponent <SpriteRenderer> ().sortingOrder = 10;
                    addDot(dot);
                }
                Debug.Log("Load Paths");
                for (int i = 0; i < levelObjects.paths.Count; i++)
                {
                    Debug.Log("Load Path " + i);
                    Color color;
                    ColorUtility.TryParseHtmlString(levelObjects.pathColors [i], out color);
                    myColors.Remove(color);
                    var dotNumber1 = levelObjects.dotsFrom [i];
                    var dotNumber2 = levelObjects.dotsTo [i];
                    var path       = NewPath(color, dots [dotNumber1], dots [dotNumber2]);
                    var loadedPath = levelObjects.paths [i];
                    for (int j = 0; j < loadedPath.Count; j++)
                    {
                        path.line.SetPosition(j, loadedPath [j]);
                    }
                    addPath(path);
                }

                Debug.Log("Load Statics");
                for (int i = 0; i < levelObjects.statics.Count; i++)
                {
                    Debug.Log("Load Static " + i);
                    var        myStatic = levelObjects.statics [i];
                    GameObject gameObject;
                    if (myStatic.type == 0)
                    {
                        gameObject = GameObject.Instantiate(staticRectPrefab);
                    }
                    else if (myStatic.type == 1)
                    {
                        gameObject = GameObject.Instantiate(staticCirclePrefab);
                    }
                    else
                    {
                        gameObject = GameObject.Instantiate(staticRectPrefab);
                    }
                    gameObject.transform.position   = myStatic.position;
                    gameObject.transform.localScale = myStatic.size;
                    statics.Add(gameObject);

                    if (Statics.showingAlgebra)
                    {
                        AddStaticAlgebra(i, gameObject);
                    }
                }

                for (int i = 0; i < paths.Count; i++)
                {
                    for (int j = i + 1; j < paths.Count; j++)
                    {
                        CheckIfHomotopic(i, j);
                    }
                }
            }
        }
        return(true);
    }
Пример #18
0
 private void Start()
 {
     tileMap      = GetComponent <Tilemap>();
     levelObjects = FindObjectOfType <LevelObjects>();
 }
Пример #19
0
        public override void Execute(FreneticScript.CommandSystem.CommandQueue queue, CommandEntry entry)
        {
            try
            {
                TemplateObject spawned = null;
                LocationTag    loc     = LocationTag.For(entry.GetArgument(queue, 1));
                if (loc == null)
                {
                    queue.HandleError(entry, "Invalid location!");
                    return;
                }
                string     targetAssetType = entry.GetArgument(queue, 0).ToLowerFast();
                EntityType etype           = EntityType.ValueOf(targetAssetType);
                if (etype == null)
                {
                    queue.HandleError(entry, "Invalid entity type!");
                    return;
                }
                if (etype.Type == EntityAssetType.ZOMBIE)
                {
                    Vector3 vec3    = loc.ToVector3();
                    byte    reg     = 0; // TODO: Optionally specifiable
                    float   closest = float.MaxValue;
                    for (int r = 0; r < LevelZombies.zombies.Length; r++)
                    {
                        for (int i = 0; i < LevelZombies.zombies[r].Count; i++)
                        {
                            float dist = (LevelZombies.zombies[r][i].point - vec3).sqrMagnitude;
                            if (dist < closest)
                            {
                                closest = dist;
                                reg     = (byte)r;
                            }
                        }
                    }
                    ZombieManager.manager.addZombie(reg, 0, 0, 0, 0, 0, 0, 0, 0, vec3, 0, false);
                    Zombie zombie = ZombieManager.regions[reg].zombies[ZombieManager.regions[reg].zombies.Count - 1];
                    // TODO: Make this actually work! (See complaints file!)

                    /*
                     * foreach (SteamPlayer player in PlayerTool.getSteamPlayers())
                     * {
                     *  ZombieManager.manager.channel.openWrite();
                     *  ZombieManager.manager.channel.write(reg);
                     *  ZombieManager.manager.channel.write((ushort)1);
                     *  ZombieManager.manager.channel.write(new object[]
                     *      {
                     *          zombie.type,
                     *          (byte)zombie.speciality,
                     *          zombie.shirt,
                     *          zombie.pants,
                     *          zombie.hat,
                     *          zombie.gear,
                     *          zombie.move,
                     *          zombie.idle,
                     *          zombie.transform.position,
                     *          MeasurementTool.angleToByte(zombie.transform.rotation.eulerAngles.y),
                     *          zombie.isDead
                     *      });
                     *  ZombieManager.manager.channel.closeWrite("tellZombies", player.playerID.steamID, ESteamPacket.UPDATE_RELIABLE_CHUNK_BUFFER);
                     * }
                     */
                    if (entry.ShouldShowGood(queue))
                    {
                        entry.Good(queue, "Successfully spawned a zombie at " + TagParser.Escape(loc.ToString()) + "! (WARNING: IT WILL BE INVISIBLE CURRENTLY - SEE THE COMPLAINTS FILE)");
                    }
                    spawned = new ZombieTag(zombie);
                }
                else if (etype.Type == EntityAssetType.ANIMAL)
                {
                    AnimalAssetTag asset = AnimalAssetTag.For(targetAssetType);
                    if (asset == null)
                    {
                        queue.HandleError(entry, "Invalid animal type!");
                        return;
                    }
                    // TODO: Make this bit optional!
                    RaycastHit rch;
                    while (Physics.Raycast(loc.ToVector3(), new Vector3(0, 1, 0), out rch, 5))
                    {
                        loc.Y += 3;
                    }
                    // END TODO
                    AnimalManager.manager.addAnimal(asset.Internal.id, loc.ToVector3(), 0, false);
                    Animal animal = AnimalManager.animals[AnimalManager.animals.Count - 1];
                    foreach (SteamPlayer player in PlayerTool.getSteamPlayers())
                    {
                        AnimalManager.manager.channel.openWrite();
                        AnimalManager.manager.channel.write((ushort)1);
                        AnimalManager.manager.channel.write(new object[]
                        {
                            animal.id,
                            animal.transform.position,
                            MeasurementTool.angleToByte(animal.transform.rotation.eulerAngles.y),
                            animal.isDead
                        });
                        AnimalManager.manager.channel.closeWrite("tellAnimals", player.playerID.steamID, ESteamPacket.UPDATE_RELIABLE_CHUNK_BUFFER);
                    }
                    if (entry.ShouldShowGood(queue))
                    {
                        entry.Good(queue, "Successfully spawned a " + TagParser.Escape(asset.ToString()) + " at " + TagParser.Escape(loc.ToString()) + "! (" + animal.gameObject.GetInstanceID() + ")");
                    }
                    spawned = new AnimalTag(animal);
                }
                else if (etype.Type == EntityAssetType.VEHICLE)
                {
                    VehicleAssetTag asset = VehicleAssetTag.For(targetAssetType);
                    if (asset == null)
                    {
                        queue.HandleError(entry, "Invalid vehicle type!");
                        return;
                    }
                    // TODO: Make this bit optional!
                    RaycastHit rch;
                    while (Physics.Raycast(loc.ToVector3(), new Vector3(0, 1, 0), out rch, 5))
                    {
                        loc.Y += 3;
                    }
                    // END TODO
                    VehicleManager.spawnVehicle(asset.Internal.id, loc.ToVector3(), Quaternion.identity);
                    if (entry.ShouldShowGood(queue))
                    {
                        entry.Good(queue, "Successfully spawned a " + TagParser.Escape(asset.ToString()) + " at " + TagParser.Escape(loc.ToString()) + "!");
                    }
                    // TODO: Get the vehicle entity!
                }
                else if (etype.Type == EntityAssetType.WORLD_OBJECT)
                {
                    WorldObjectAssetTag asset = WorldObjectAssetTag.For(targetAssetType);
                    if (asset == null)
                    {
                        queue.HandleError(entry, "Invalid world object type!");
                        return;
                    }
                    LevelObjects.addObject(loc.ToVector3(), Quaternion.identity, Vector3.one, asset.Internal.id, asset.Internal.name, asset.Internal.GUID, ELevelObjectPlacementOrigin.MANUAL);
                    // TODO: Network!
                    entry.Good(queue, "Successfully spawned a " + TagParser.Escape(asset.ToString()) + " at " + TagParser.Escape(loc.ToString()) + "! (WARNING: IT WILL BE INVISIBLE CURRENTLY - SEE THE COMPLAINTS FILE)");
                    // TODO: Get the world entity!
                }
                else if (etype.Type == EntityAssetType.ITEM)
                {
                    ItemAssetTag asset = ItemAssetTag.For(targetAssetType);
                    if (asset == null)
                    {
                        queue.HandleError(entry, "Invalid item type!");
                        return;
                    }
                    byte x;
                    byte y;
                    if (Regions.tryGetCoordinate(loc.ToVector3(), out x, out y))
                    {
                        Item     item = new Item(asset.Internal.id, 1, asset.Internal.quality);
                        ItemData data = new ItemData(item, ++ItemManager.instanceCount, loc.ToVector3(), Dedicator.isDedicated);
                        ItemManager.regions[x, y].items.Add(data);
                        ItemModelTracker.Track(data, loc.ToVector3());
                        ItemManager.manager.channel.send("tellItem", ESteamCall.CLIENTS, x, y, ItemManager.ITEM_REGIONS, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
                        {
                            x,
                            y,
                            item.id,
                            item.amount,
                            item.quality,
                            item.state,
                            loc.ToVector3()
                        });
                        if (entry.ShouldShowGood(queue))
                        {
                            entry.Good(queue, "Successfully spawned a " + TagParser.Escape(asset.ToString()) + " at " + TagParser.Escape(loc.ToString()) + "!");
                        }
                        // TODO: Get the item entity!
                    }
                    else
                    {
                        queue.HandleError(entry, "Trying to spawn item outside any valid item regions!");
                    }
                }
                else if (etype.Type == EntityAssetType.BARRICADE)
                {
                    ItemAssetTag asset = ItemAssetTag.For(targetAssetType.Substring("barricade_".Length));
                    if (asset == null || !(asset.Internal is ItemBarricadeAsset))
                    {
                        queue.HandleError(entry, "Invalid item barricade type!");
                        return;
                    }
                    Barricade barric = new Barricade(asset.Internal.id);
                    BarricadeManager.dropBarricade(barric, null, loc.ToVector3(), 0f, 0f, 0f, CSteamID.Nil.m_SteamID, CSteamID.Nil.m_SteamID);
                    if (entry.ShouldShowGood(queue))
                    {
                        entry.Good(queue, "Successfully spawned a " + TagParser.Escape(asset.ToString()) + " at " + TagParser.Escape(loc.ToString()) + "!");
                    }
                    // TODO: Get the game object!
                }
                else if (etype.Type == EntityAssetType.STRUCTURE)
                {
                    ItemAssetTag asset = ItemAssetTag.For(targetAssetType.Substring("structure_".Length));
                    if (asset == null || !(asset.Internal is ItemStructureAsset))
                    {
                        queue.HandleError(entry, "Invalid item structure type!");
                        return;
                    }
                    StructureManager.dropStructure(new Structure(asset.Internal.id), loc.ToVector3(), 0f, 0f, 0f, CSteamID.Nil.m_SteamID, CSteamID.Nil.m_SteamID);
                    if (entry.ShouldShowGood(queue))
                    {
                        entry.Good(queue, "Successfully spawned a " + TagParser.Escape(asset.ToString()) + " at " + TagParser.Escape(loc.ToString()) + "!");
                    }
                    // TODO: Get the game object!
                }
                else
                {
                    queue.HandleError(entry, "Invalid or unspawnable entity type!");
                    return;
                }
                if (spawned != null)
                {
                    queue.SetVariable("spawned", spawned);
                }
            }
            catch (Exception ex) // TODO: Necessity?
            {
                queue.HandleError(entry, "Failed to spawn entity: " + ex.ToString());
            }
        }
Пример #20
0
 public void DeleteBlocks()
 {
     LevelObjects.Clear();
 }
Пример #21
0
        public void AnimationEvent(AnimationState state, int trackIndex, Event e)
        {
            float Amount = e.Float;

            if (Amount == 0) // so it can be the float or the int
            {
                Amount = (float)e.Int;
            }

            if (((Engine.instance.DebugView.Flags & Physics.DebugViewFlags.Game) == Physics.DebugViewFlags.Game))
            {
                Engine.instance.AddDebugText(e.Data.Name, Position, Color.White);
            }

            if (e.Data.Name.Contains("particle_"))
            {
                string  ParticleName = e.Data.Name.Replace("particle_", "");
                Vector2 Pos          = Position;
                if (!string.IsNullOrEmpty(e.String))
                {
                    Pos = SpineFunc.GetBonePosition(this, e.String.Replace("\n", ""));
                }
                Particles.GameParticles[ParticleName].Trigger(Pos, -1);

                if (ParticleName == "spark")
                {
                    Engine.instance.PlaySound("FX_M_Systems_Spark", this, Pos);
                }
                else if (ParticleName == "_new_explosion_rock")
                {
                    Engine.instance.PlaySound("FX_Hazard_Crusher_Impact", this, Pos);
                }
            }
            else if (e.Data.Name == "shake_fluid")
            {
                if (Engine.instance.FluidSimulation != null)
                {
                    Engine.instance.FluidSimulation.ShakeParticles(this, e.Int, e.Float);
                }
            }
            else if (e.Data.Name == "lunge")
            {
                Character.IsLunging = e.Int == 1;
            }
            else if (e.Data.Name == "push")
            {
                if (Character != null && !Character.Player && NoAirControlTime > Engine.instance.Time)
                {
                    return;
                }
                bool    WasIgnore  = Body.IgnoreForces;
                float   multiplier = Amount > 0 ? ForwardPushForceMult : BackwardPushForceMult;
                Vector2 dir        = FocusDistance;

                if (CustomPushDirection != Vector2.Zero)
                {
                    dir = CustomPushDirection;
                }

                Body.IgnoreForces = false;
                if (FocusDistance != Vector2.Zero)
                {
                    Body.ApplyForce(Amount * Body.Mass * 400 * Vector2.Normalize(dir) * multiplier);
                }
                Body.IgnoreForces   = WasIgnore;
                CustomPushDirection = Vector2.Zero;
            }
            else if (e.Data.Name == "melee")
            {
                if (ActiveMeleeWeapon != null)
                {
                    if (Amount > 0)
                    {
                        if (!ActiveMeleeWeapon.MeleeStrike)
                        {
                            if (!string.IsNullOrEmpty(ActiveMeleeWeapon.GameObjectClass.AttackSound))
                            {
                                Engine.instance.PlaySound(ActiveMeleeWeapon.GameObjectClass.AttackSound, this);
                            }
                        }

                        if (ActiveMeleeWeapon.MeleeHits != null)
                        {
                            ActiveMeleeWeapon.MeleeHits.Clear();
                        }

                        ActiveMeleeWeapon.MeleeStrike = true;
                        Body.IgnoreForces             = true;
                    }
                    else if (Amount < 0)
                    {
                        ActiveMeleeWeapon.MeleeStrike = false;
                        ActiveMeleeWeapon             = null;
                        Body.IgnoreForces             = false;
                    }
                }
                else
                {
                    Engine.instance.AddDevConsoleText("No active melee weapon for melee attack");
                }

                /*
                 * if (Amount > 0)
                 * {
                 *  ActiveMeleeWeapon.MeleeHits.Clear();
                 *  ActiveMeleeWeapon.MeleeStrike = true;
                 *  Body.IgnoreForces = true;
                 * }
                 * else
                 * {
                 *  ActiveMeleeWeapon.MeleeStrike = false;
                 *  ActiveMeleeWeapon = null;
                 *  Body.IgnoreForces = false;
                 * }*/
            }
            else if (e.Data.Name == "blow_left_door" && Amount > 0)
            {
                Vector2    force = new Vector2((float)Math.Cos(Rotation), (float)Math.Sin(Rotation)) * -30000f;
                GameObject gib   = LevelObjects.CreateGib(this, skeleton.FindSlot("door_l_box"), force, MiscFunc.RandomBetween(-0.5f, 0.5f), "Gibs\\gib", 3f);

                gib.Body.LinearDamping  = 4f;
                gib.Body.AngularDamping = 2f;
            }
            else if (e.Data.Name == "blow_right_door" && Amount > 0)
            {
                Vector2    force = new Vector2((float)Math.Cos(Rotation), (float)Math.Sin(Rotation)) * 30000f;
                GameObject gib   = LevelObjects.CreateGib(this, skeleton.FindSlot("door_r_box"), force, MiscFunc.RandomBetween(-0.5f, 0.5f), "Gibs\\gib", 3f);

                gib.Body.LinearDamping  = 4f;
                gib.Body.AngularDamping = 2f;
                //Stations.GetSupplyPodContents(LastInteractBy, GameObject);
            }
            else if (e.Data.Name == "getkey")
            {
                //Stations.GetTerminalContents(LastInteractBy, GameObject);
            }
            else if (skeleton.Data.Name == "core" && e.Data.Name == "fire")
            {
                Engine.instance.PlaySound("FX_M_Core_Shot", this);
                if (GameObject.CoreCanFire && SystemsFunc.SystemHasHealth(GameObject))
                {
                    foreach (string muzzleName in GameObject.CoreMuzzleNames)
                    {
                        if (GameObject.Class.SystemLevel == 1)
                        {
                            if (GameObject.CoreLevel1FireSwitch && (muzzleName == "muzzle01" || muzzleName == "muzzle03"))
                            {
                                continue;
                            }
                            if (!GameObject.CoreLevel1FireSwitch && (muzzleName == "muzzle02" || muzzleName == "muzzle04"))
                            {
                                continue;
                            }
                        }
                        Vector2    position   = SpineFunc.GetBonePosition(GameObject, muzzleName);
                        float      rotation   = SpineFunc.GetBoneRotation(GameObject, muzzleName);
                        Vector2    direction  = new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation));
                        GameObject projectile = WeaponsFunc.CreateProjectile(this, position, "EnemyWeapons\\core_p", direction);

                        projectile.Class.IgnoreSystemCollision            = true;
                        projectile.Class.IgnoreSystemHealthProxyCollision = true;
                    }
                    GameObject.CoreLevel1FireSwitch = !GameObject.CoreLevel1FireSwitch;
                }
            }
            else if (skeleton.Data.Name == "alarm")
            {
                if (e.Data.Name == "fire")
                {
                    GameObject.AlarmCanFire = true;
                }
                else if (e.Data.Name == "fire_stop")
                {
                    GameObject.AlarmCanFire = false;
                }
                else if (e.Data.Name == "vulnerable")
                {
                    foreach (GameObject child in GameObject.Children)
                    {
                        child.ImmuneToExplosions  = false;
                        child.ImmuneToProjectiles = false;
                    }
                }
                else if (e.Data.Name == "invulnerable")
                {
                    foreach (GameObject child in GameObject.Children)
                    {
                        child.ImmuneToExplosions  = true;
                        child.ImmuneToProjectiles = true;
                    }
                }
            }
            else if (skeleton.Data.Name == "sentry_new" || skeleton.Data.Name == "sentry_flakk")
            {
                if (e.Data.Name == "start_tracking")
                {
                    GameObject.SentryTrackingAllowed = true;
                    GameObject.SentryStartChargingAt = (float)Engine.instance.Time + 1f;
                }
                else if (e.Data.Name == "stop_tracking")
                {
                    GameObject.SentryTrackingAllowed = false;
                }
                else if (e.Data.Name == "fire")
                {
                    GameObject.SentryIsCharging   = false;
                    GameObject.SentryIsFiring     = true;
                    GameObject.SentryStopFiringAt = (float)Engine.instance.Time + 2f;
                }
                else if (e.Data.Name == "invulnerable")
                {
                    foreach (GameObject child in GameObject.Children)
                    {
                        child.ImmuneToExplosions  = true;
                        child.ImmuneToProjectiles = true;
                    }
                }
                else if (e.Data.Name == "vulnerable")
                {
                    foreach (GameObject child in GameObject.Children)
                    {
                        child.ImmuneToExplosions  = false;
                        child.ImmuneToProjectiles = false;
                    }
                }
            }
            else if (skeleton.Data.Name == "factory" || skeleton.Data.Name == "factory_advanced")
            {
                if (e.Data.Name == "invulnerable")
                {
                    if (!OffScreen)
                    {
                        Engine.instance.PlaySound("FX_M_DroneFactory_Close", this);
                    }

                    foreach (GameObject child in GameObject.Children)
                    {
                        child.ImmuneToExplosions  = true;
                        child.ImmuneToProjectiles = true;
                    }
                }
                else if (e.Data.Name == "vulnerable")
                {
                    if (!OffScreen)
                    {
                        Engine.instance.PlaySound("FX_M_DroneFactory_Open", this);
                    }

                    foreach (GameObject child in GameObject.Children)
                    {
                        child.ImmuneToExplosions  = false;
                        child.ImmuneToProjectiles = false;
                    }
                }
                else if (e.Data.Name == "fire")
                {
                    GameObject.FactoryCanFire = true;
                }
            }
            else if (skeleton.Data.Name == "repair_system")
            {
                if (e.Data.Name == "fire_01")
                {
                    GameObject.RepairCurrentMuzzleIndex = 0;
                    GameObject.RepairFireDrone          = true;
                }
                else if (e.Data.Name == "fire_02")
                {
                    GameObject.RepairCurrentMuzzleIndex = 1;
                    GameObject.RepairFireDrone          = true;
                }
                else if (e.Data.Name == "fire_03")
                {
                    GameObject.RepairCurrentMuzzleIndex = 2;
                    GameObject.RepairFireDrone          = true;
                }
                else if (e.Data.Name == "fire_04")
                {
                    GameObject.RepairCurrentMuzzleIndex = 3;
                    GameObject.RepairFireDrone          = true;
                }
                else if (e.Data.Name == "fire_05")
                {
                    GameObject.RepairCurrentMuzzleIndex = 4;
                    GameObject.RepairFireDrone          = true;
                }
                else if (e.Data.Name == "stop_regen")
                {
                    GameObject.Children[0].HealthRegenEnabled = false;
                }
                else if (e.Data.Name == "start_regen")
                {
                    if (GameObject.Class.SystemLevel >= 2 && GameObject.Class.Type != GameObjectType.SYSTEM_REPAIR)
                    {
                        GameObject.Children[0].HealthRegenEnabled = true;
                    }
                }
            }
            else if (skeleton.Data.Name == "flak_turret")
            {
                if (e.Data.Name == "fire_left")
                {
                    Character.FlakCurrentMuzzle = "left_muzzle";
                    WeaponsFunc.Fire(this, Inventory.Items[InventorySlot.WEAPON_1]);
                }
                else if (e.Data.Name == "fire_right")
                {
                    Character.FlakCurrentMuzzle = "right_muzzle";
                    WeaponsFunc.Fire(this, Inventory.Items[InventorySlot.WEAPON_1]);
                }
            }

            /*else if (skeleton.Data.Name == "tanker")
             * {
             *  if (e.Data.Name == "enable_fire")
             *  {
             *      if (Character.AIState == AIState.PATROL)
             *      {
             *          if (Character.Class.HazardType == HazardType.MINES)
             *          {
             *              GameObject mine = new GameObject();
             *
             *              mine.Classfile = "Hazards\\mine";
             *              mine.Position = SpineFunc.GetBonePosition(this, "muzzle");
             *              Engine.instance.AddEntity(mine);
             *              mine.Team = 1;
             *          }
             *      }
             *  }
             * }*/
            else if (skeleton.Data.Name == "heavy_sentinel")
            {
                if (e.Data.Name == "fire")
                {
                    WeaponsFunc.Fire(this, Inventory.Items[InventorySlot.WEAPON_1]);
                }
                else if (e.Data.Name == "activate_shield")
                {
                    WeaponsFunc.ActivateShield(Character, Inventory.Items[InventorySlot.WEAPON_2]);
                }
                else if (e.Data.Name == "deactivate_shield")
                {
                    WeaponsFunc.DeactivateShield(Inventory.Items[InventorySlot.WEAPON_2].ShieldObject);
                }
            }
            else if (skeleton.Data.Name == "tattletale")
            {
                //if (Character.CanAlarm && e.Data.Name == "alarm")
                //    CFunc.CharacterAlarm(Character, Character.FindCharacter, Position);
            }
            else if (skeleton.Data.Name == "seeker_launcher")
            {
                if (e.Data.Name == "close")
                {
                    Engine.instance.PlaySound("Combat_M_SeekerLauncher_Close", this);
                }
                else if (e.Data.Name == "open")
                {
                    Engine.instance.PlaySound("Combat_M_SeekerLauncher_Open", this);
                }
                else
                {
                    SwarmManager manager    = SwarmManager.Instance;
                    string       muzzleName = null;
                    Vector2      spawnPos;
                    Character    spawn;

                    if (e.Data.Name == "fire01")
                    {
                        muzzleName = "muzzle01";
                    }
                    else if (e.Data.Name == "fire02")
                    {
                        muzzleName = "muzzle02";
                    }
                    else if (e.Data.Name == "fire03")
                    {
                        muzzleName = "muzzle03";
                    }
                    else if (e.Data.Name == "fire04")
                    {
                        muzzleName = "muzzle04";
                    }

                    if (Character.OwnerSwarmGroup == null)
                    {
                        Character.OwnerSwarmGroup = manager.CreateGroup(50);
                    }

                    spawnPos        = SpineFunc.GetBonePosition(this, muzzleName);
                    spawn           = new Character();
                    spawn.Position  = spawnPos;
                    spawn.Classname = "Bee";
                    Engine.instance.AddEntity(spawn);
                    manager.AddEntityToGroup(Character.OwnerSwarmGroup, spawn);

                    Particles.GameParticles["_new_muzzle_enemyblaster"].Trigger(spawnPos);
                    Engine.instance.PlaySound("FX_M_RepairSystem_Drones_Eject", spawn, spawnPos);
                }
            }
            else if (skeleton.Data.Name == "bully")
            {
                if (e.Data.Name == "fire")
                {
                    WeaponsFunc.Fire(this, Inventory.Items[InventorySlot.WEAPON_1]);
                }
            }
            else if (skeleton.Data.Name == "stasis_gel_arm")
            {
                if (e.Data.Name == "start_fire")
                {
                    GameObject.IsSpraying = true;
                }
                else if (e.Data.Name == "stop_fire")
                {
                    GameObject.IsSpraying = false;
                }
            }
            else if (skeleton.Data.Name == "cage_generator")
            {
                if (e.Data.Name == "activate")
                {
                    GameObject.CageActive = true;
                }
                else if (e.Data.Name == "deactivate")
                {
                    GameObject.CageActive = false;
                }
            }
            else if (Type == EntityType.CHARACTER)
            {
                if (Character.Class.Type == CharacterType.Leviathan)
                {
                    int OnscreenSpawned = 0;
                    foreach (Character Spawned in Character.CharsSpawned)
                    {
                        if (!Spawned.OffScreen)
                        {
                            OnscreenSpawned++;
                        }
                    }
                    if (e.Data.Name == "enable_fire" && OnscreenSpawned < 3)
                    {
                        Character spawn = new Character();

                        spawn.Classname = Character.Class.CharToSpawn;
                        spawn.Position  = SpineFunc.GetBonePosition(this, "muzzle");
                        Engine.instance.AddEntity(spawn);
                        Character.CharsSpawned.Add(spawn);
                    }
                }
                else if (Character.Class.Type == CharacterType.Blacksuit)
                {
                    if (e.Data.Name == "start_fire")
                    {
                        Character.IsFiring = true;
                    }
                    else if (e.Data.Name == "stop_fire")
                    {
                        Character.IsFiring = false;
                    }
                    else if (e.Data.Name == "activate_shield" && Character.State != CharacterState.DEATH_ANIM)
                    {
                        ItemsFunc.Use(this, Inventory.Items[InventorySlot.ABILITY]);
                        Character.CurrentShield.ShieldObject.NextAbility = float.MaxValue;
                        Character.IsSecondaryFiring = true;
                    }
                    else if (e.Data.Name == "deactivate_shield" && Character.CurrentShield != null)
                    {
                        Character.CurrentShield.ShieldObject.NextAbility = 0.1f;
                        Character.IsSecondaryFiring = false;
                    }
                }
                else if (Character.Class.Type == CharacterType.Viper)
                {
                    if (e.Data.Name == "fire")
                    {
                        WeaponsFunc.Fire(this, Inventory.Items[InventorySlot.WEAPON_1]);
                    }
                }
            }
            else if (Type == EntityType.OBJECT)
            {
                if (GameObject.Class.Type == GameObjectType.CRUSHER_SINGLE)
                {
                    GameObject child = GameObject.Children[0];

                    if (e.Data.Name == "enable")
                    {
                        child.CrusherPistonEnabled = true;
                    }
                    else
                    {
                        child.CrusherPistonEnabled = false;
                    }
                }
                else if (GameObject.Class.Type == GameObjectType.CRUSHER_TRIPLE)
                {
                    GameObject child = GameObject.Children[1 + e.Int];

                    if (e.Data.Name == "enable")
                    {
                        child.CrusherPistonEnabled = true;
                    }
                    else
                    {
                        child.CrusherPistonEnabled = false;
                    }
                }
                else if (GameObject.Class.Type == GameObjectType.INCINERATOR_STATIONARY)
                {
                    if (e.Data.Name == "is_open")
                    {
                        GameObject.IsOpen = true;
                    }
                    else if (e.Data.Name == "is_closing")
                    {
                        GameObject.IsOpen = false;
                    }
                }
                else if (GameObject.Class.Type == GameObjectType.INCINERATOR_FORK ||
                         GameObject.Class.Type == GameObjectType.INCINERATOR_WHEEL)
                {
                    if (e.Data.Name == "fireSound")
                    {
                        Engine.instance.PlaySound("FX_Hazard_Incinerator_Fire", GameObject);
                    }
                    else if (e.Data.Name == "fire")
                    {
                        GameObject.IsSpraying = true;
                    }
                    else if (e.Data.Name == "fire_stop")
                    {
                        GameObject.IsSpraying = false;
                    }
                }
                else if (GameObject.Class.Type == GameObjectType.SAWBLADE_WALLARM)
                {
                    if (e.Data.Name == "fire")
                    {
                        Vector2    debrisPos   = SpineFunc.GetBonePosition(this, "muzzle");
                        float      debrisAngle = SpineFunc.GetBoneRotation(this, "muzzle");
                        GameObject debris;
                        float      debrisSpeed = MiscFunc.RandomBetween(6f, 9f);

                        debrisAngle += MiscFunc.RandomBetween(-0.4f, 0.4f);

                        //if (GameObject.FlippedHorizontal)
                        //    debrisAngle = -debrisAngle + MathHelper.Pi;
                        //if (GameObject.FlipVertical)
                        //    debrisAngle = -debrisAngle;

                        debris = SpineFunc.CreateDebris(this, skeleton.FindBone("muzzle"), MiscFunc.mRandom.Next(99999999), Vector2.Zero, 1f, 1f, false, "Hazards\\sawblade_debris");
                        debris.Body.LinearVelocity = new Vector2((float)Math.Cos(debrisAngle), (float)Math.Sin(debrisAngle)) * debrisSpeed;
                    }
                }
                else if (GameObject.Class.Type == GameObjectType.SYSTEM_SHUFFLE)
                {
                    if (e.Data.Name == "vulnerable")
                    {
                        GameObject weakObj = Children[0];

                        weakObj.ImmuneToExplosions     = false;
                        weakObj.ImmuneToFluid          = false;
                        weakObj.ImmuneToProjectiles    = false;
                        weakObj.ImmuneToSlowExplosions = false;
                    }
                    else if (e.Data.Name == "invulnerable")
                    {
                        GameObject weakObj = Children[0];

                        weakObj.ImmuneToExplosions     = true;
                        weakObj.ImmuneToFluid          = true;
                        weakObj.ImmuneToProjectiles    = true;
                        weakObj.ImmuneToSlowExplosions = true;
                    }
                }
                else if (GameObject.Class.Type == GameObjectType.PLAYERSHIP_PLAYER)
                {
                    if (e.Data.Name == "teleport_effect")
                    {
                        GameObject refraction = new GameObject();
                        GameObject light      = new GameObject();

                        refraction.Classfile = "Refractions\\shockwave_2";
                        refraction.Position  = Position;
                        Engine.instance.AddEntity(refraction);

                        light.Classfile = "Lights\\death_teleport_light";
                        light.Position  = Position;
                        Engine.instance.AddEntity(light);
                    }
                }
                else if (GameObject.Class.Type == GameObjectType.BEE_HIVE)
                {
                    if (e.Data.Name == "fire")
                    {
                        Vector2   basePos  = SpineFunc.GetBonePosition(this, "spawn");
                        Vector2   spawnPos = basePos + MiscFunc.RandomInUnitCircle() * 10f;
                        Character bee      = new Character();

                        if (GameObject.HiveCurrentGroup == null)
                        {
                            GameObject.HiveCurrentGroup = SwarmManager.Instance.CreateGroup(5);
                        }

                        bee.Classname = "Bee";
                        bee.Position  = spawnPos;
                        Engine.instance.AddEntity(bee);

                        SwarmManager.Instance.AddEntityToGroup(GameObject.HiveCurrentGroup, bee);
                    }
                }
            }
        }