예제 #1
0
    public override void GridUpdate()
    {
        HashSet <PipeCoreLogic> OriginalFriends = Friends;

        Friends = new HashSet <PipeCoreLogic>();

        PhysicsDirectSpaceState State = GetWorld().DirectSpaceState;

        Godot.Collections.Dictionary Results;
        Results = State.IntersectRay(Translation, Position1.GlobalTransform.origin, new Godot.Collections.Array()
        {
            this, OpenEnd, Game.PossessedPlayer
        }, 2 | 4);
        if (Results.Count > 0 && Results["collider"] is OpenEnd)
        {
            OpenEndMesh.Show();
            OpenEndCollision.Disabled = false;
            System.Consume(((OpenEnd)Results["collider"]).Parent.System);
            Friends.Add(((OpenEnd)Results["collider"]).Parent);
        }
        else
        {
            OpenEndMesh.Hide();
            OpenEndCollision.Disabled = true;
        }

        if (InitiallyFilledFriends && !Friends.SetEquals(OriginalFriends))
        {
            System = new PipeSystem(this);
            RecursiveAddFriendsToSystem();
        }
        InitiallyFilledFriends = true;
    }
예제 #2
0
        public override void UbmUpdate(float deltaTime)
        {
            // valve rotation sound for Pipes
            if (pipes.State == GameState.Running)
            {
                bool playTurningSound = false;
                foreach (Valve valve in pipes.Valves())
                {
                    PipeSystem pipeSystem = valve.PipeSystem;
                    if (pipeSystem.RunningFansCount >= pipeSystem.FanCount)
                    {
                        continue;
                    }
                    if (Ets.Room.Physical.IsValveRotating(valve.Row, valve.PositionInRow))
                    {
                        playTurningSound = true;
                        break;
                    }
                }

                bool playing = audio.IsSoundPlaying(11);
                if (playTurningSound && !playing)
                {
                    audio.PlaySound(11, true, TurningValveVolume);
                    //print ("activate valve turning sound");
                }
                else if (!playTurningSound && playing)
                {
                    audio.StopSound(11);
                    //print ("deactivate valve turning sound");
                }
            }
        }
예제 #3
0
    /*
     * Private methods
     */

    private void Start()
    {
        PipeSystem_ = mediator.PipeSystem_;
        World       = PipeSystem_.transform.parent;
        Rotater.gameObject.SetActive(false);
        beamEffect         = shipCollider.gameObject.GetComponent <LineRenderer>();
        beamEffect.enabled = false;
    }
        //
        // GET: /PipeSystem/Details/5

        public ActionResult Details(int id = 0)
        {
            PipeSystem pipesystem = db.PipeSystems.Find(id);

            if (pipesystem == null)
            {
                return(HttpNotFound());
            }
            return(View(pipesystem));
        }
예제 #5
0
    public override void _Ready()
    {
        System  = new PipeSystem(this);
        Friends = new HashSet <PipeCoreLogic>();

        Position1        = GetNode <Spatial>("Positions/Position1");
        OpenEndMesh      = GetNode <MeshInstance>("OpenEndMesh");
        OpenEndCollision = GetNode <CollisionShape>("OpenEndCollision");
        OpenEnd          = GetNode <StaticBody>("OpenEnd");

        CallDeferred(nameof(GridUpdate));
    }
        public ActionResult DeleteConfirmed(int id)
        {
            PipeSystem pipesystem = db.PipeSystems.Find(id);

            db.PipeSystems.Remove(pipesystem);
            db.SaveChanges();
            if (Insert_CodeLookUp_Audit("Station Location", "Delete", pipesystem.PipeSystemItem, ""))
            {
                //nothing to do at this point.
            }
            return(RedirectToAction("Index"));
        }
예제 #7
0
        public override void Run()
        {
            Console.WriteLine("Day 12");
            var input = GetInput();

            var pipeSystem = PipeSystem.Parse(input);
            var programs   = pipeSystem.FindProgramsInGroup(0);

            Console.WriteLine($"Number of programs: {programs.Length}");
            var count = pipeSystem.FindTotalNumberOfGroups();

            Console.WriteLine($"Number of groups: {count}");
        }
 public ActionResult Edit(PipeSystem pipesystem)
 {
     if (ModelState.IsValid)
     {
         db.Entry(pipesystem).State = EntityState.Modified;
         db.SaveChanges();
         if (Insert_CodeLookUp_Audit("Station Location", "Edit", Session["CodeLookUpAduit_Oldvalue"].ToString(), pipesystem.PipeSystemItem))
         {
             //nothing to do at this point.
         }
         return(RedirectToAction("Index"));
     }
     return(View(pipesystem));
 }
        public void Because_of()
        {
            var input = @"
            0 <-> 2
            1 <-> 1
            2 <-> 0, 3, 4
            3 <-> 2, 4
            4 <-> 2, 3, 6
            5 <-> 6
            6 <-> 4, 5";

            subject = PipeSystem.Parse(input);
            result  = subject.FindProgramsInGroup(0);
        }
        public ActionResult Create(PipeSystem pipesystem)
        {
            if (ModelState.IsValid)
            {
                db.PipeSystems.Add(pipesystem);
                db.SaveChanges();
                if (Insert_CodeLookUp_Audit("Station Location", "Create", "", pipesystem.PipeSystemItem))
                {
                    //nothing to do at this point.
                }
                return(RedirectToAction("Index"));
            }

            return(View(pipesystem));
        }
예제 #11
0
    public void Consume(PipeSystem Other)
    {
        if (this == Other)
        {
            return;
        }

        List <PipeCoreLogic> NewPipes = new List <PipeCoreLogic>(Pipes.Count + Other.Pipes.Count);

        NewPipes.AddRange(Pipes);
        NewPipes.AddRange(Other.Pipes);
        Pipes = NewPipes;

        foreach (PipeCoreLogic CurrentPipe in Other.Pipes)
        {
            CurrentPipe.System = this;
        }
    }
예제 #12
0
    private void Init()
    {
        if (pipeSystem != null)
        {
            Destroy(pipeSystem.gameObject);
        }
        GameObject dawr = Instantiate(pipeSystemPrefab);

        pipeSystem = dawr.GetComponent <PipeSystem>();

        SetPosition(0);
        positive = true;
        pHealth.OnInit();
        score = 0;
        pUI.SetPositive(positive);
        switchCooldownCounter = switchCooldown;
        pipeSpeed             = minPipeSpeed;
    }
예제 #13
0
    public override void OnRemove()
    {
        List <PipeSystem> JustCreated = new List <PipeSystem>();

        foreach (PipeCoreLogic Friend in Friends)
        {
            Friend.Friends.Remove(this);

            if (JustCreated.Contains(Friend.System))
            {
                continue;
            }

            PipeSystem NewSystem = new PipeSystem(Friend);
            JustCreated.Add(NewSystem);
            Friend.System = NewSystem;
            Friend.RecursiveAddFriendsToSystem();
        }
    }
예제 #14
0
    public void Position(Pipe pipe, float curveRotation, float pipeRotation)
    {
        noteColorValues = cubeColors[(int)pipeRotation];

        mesh.material.color = noteColorValues.colorValue;
        mesh.material.SetColor("_EmissionColor", noteColorValues.emissionValue);


        transform.SetParent(pipe.transform, false);
        transform.localRotation = Quaternion.Euler(0f, 0f, -curveRotation);

        // Pipe system is an only child of root which is the "world" game object
        pipeSystem = transform.root.GetChild(0).GetComponent(typeof(PipeSystem)) as PipeSystem;
        // Futher rotation based on absolute world rotation to avoid color shift when entering next pipe
        pipeRotation -= pipeSystem.WorldAbsoluteRotation;

        rotater.localPosition = new Vector3(0f, pipe.CurveRadius);
        rotater.localRotation = Quaternion.Euler(pipeRotation, 0f, 0f);
    }
예제 #15
0
    public override void _Ready()
    {
        System  = new PipeSystem(this);
        Friends = new HashSet <PipeCoreLogic>();

        Position1 = GetNode <Spatial>("Positions/Position1");
        Position2 = GetNode <Spatial>("Positions/Position2");
        Position3 = GetNode <Spatial>("Positions/Position3");
        Position4 = GetNode <Spatial>("Positions/Position4");
        Position5 = GetNode <Spatial>("Positions/Position5");
        Position6 = GetNode <Spatial>("Positions/Position6");

        FirstEndMesh      = GetNode <MeshInstance>("FirstEndMesh");
        FirstEndCollision = GetNode <CollisionShape>("FirstEndCollision");
        FirstOpenEnd      = GetNode <StaticBody>("FirstOpenEnd");

        SecondEndMesh      = GetNode <MeshInstance>("SecondEndMesh");
        SecondEndCollision = GetNode <CollisionShape>("SecondEndCollision");
        SecondOpenEnd      = GetNode <StaticBody>("SecondOpenEnd");

        ThirdEndMesh      = GetNode <MeshInstance>("ThirdEndMesh");
        ThirdEndCollision = GetNode <CollisionShape>("ThirdEndCollision");
        ThirdOpenEnd      = GetNode <StaticBody>("ThirdOpenEnd");

        ForthEndMesh      = GetNode <MeshInstance>("ForthEndMesh");
        ForthEndCollision = GetNode <CollisionShape>("ForthEndCollision");
        ForthOpenEnd      = GetNode <StaticBody>("ForthOpenEnd");

        FifthEndMesh      = GetNode <MeshInstance>("FifthEndMesh");
        FifthEndCollision = GetNode <CollisionShape>("FifthEndCollision");
        FifthOpenEnd      = GetNode <StaticBody>("FifthOpenEnd");

        SixthEndMesh      = GetNode <MeshInstance>("SixthEndMesh");
        SixthEndCollision = GetNode <CollisionShape>("SixthEndCollision");
        SixthOpenEnd      = GetNode <StaticBody>("SixthOpenEnd");

        CallDeferred(nameof(GridUpdate));

        base._Ready();
    }
        //
        // GET: /PipeSystem/Edit/5

        public ActionResult Edit(int id = 0)
        {
            PipeSystem pipesystem = db.PipeSystems.Find(id);
            var        psfeatures = (from vf in db.ValveSection
                                     where vf.PipeSystemID == pipesystem.PipeSystemID
                                     select new
            {
                vf
            }).ToList();


            if (psfeatures.Count > 0)
            {
                ModelState.AddModelError("PipeSystemItem", "Warning! This Station Location is assigned to Circuit(s).");
                ViewBag.HasError = "True";
            }
            if (pipesystem == null)
            {
                return(HttpNotFound());
            }
            Session["CodeLookUpAduit_Oldvalue"] = pipesystem.PipeSystemItem;
            return(View(pipesystem));
        }
        //
        // GET: /PipeSystem/Delete/5

        public ActionResult Delete(int id = 0)
        {
            PipeSystem pipesystem = db.PipeSystems.Find(id);
            var        psfeatures = (from vf in db.ValveSection
                                     where vf.PipeSystemID == pipesystem.PipeSystemID
                                     select new
            {
                vf
            }).ToList();


            if (psfeatures.Count > 0)
            {
                ModelState.AddModelError("PipeSystemItem", "This Station Location is assigned to Circuit(s) and cannot be deleted.");
                ViewBag.HasError = "True";
            }

            if (pipesystem == null)
            {
                return(HttpNotFound());
            }
            return(View(pipesystem));
        }
예제 #18
0
    public override void GridUpdate()
    {
        HashSet <PipeCoreLogic> OriginalFriends = Friends;

        Friends = new HashSet <PipeCoreLogic>();

        PhysicsDirectSpaceState State = GetWorld().DirectSpaceState;

        Godot.Collections.Dictionary Results = State.IntersectRay(
            Translation,
            Position1.GlobalTransform.origin,
            new Godot.Collections.Array {
            this,
            FirstOpenEnd,
            Game.PossessedPlayer.ValueOr(() => null)
        },
            2 | 4
            );
        if (Results.Count > 0 && Results["collider"] is OpenEnd)
        {
            FirstEndMesh.Show();
            FirstEndCollision.Disabled = false;
            System.Consume(((OpenEnd)Results["collider"]).Parent.System);
            Friends.Add(((OpenEnd)Results["collider"]).Parent);
        }
        else
        {
            FirstEndMesh.Hide();
            FirstEndCollision.Disabled = true;
        }

        Results = State.IntersectRay(
            Translation,
            Position2.GlobalTransform.origin,
            new Godot.Collections.Array {
            this,
            SecondOpenEnd,
            Game.PossessedPlayer.ValueOr(() => null)
        },
            2 | 4
            );
        if (Results.Count > 0 && Results["collider"] is OpenEnd)
        {
            SecondEndMesh.Show();
            SecondEndCollision.Disabled = false;
            System.Consume(((OpenEnd)Results["collider"]).Parent.System);
            Friends.Add(((OpenEnd)Results["collider"]).Parent);
        }
        else
        {
            SecondEndMesh.Hide();
            SecondEndCollision.Disabled = true;
        }

        Results = State.IntersectRay(
            Translation,
            Position3.GlobalTransform.origin,
            new Godot.Collections.Array {
            this,
            ThirdOpenEnd,
            Game.PossessedPlayer.ValueOr(() => null)
        },
            2 | 4
            );
        if (Results.Count > 0 && Results["collider"] is OpenEnd)
        {
            ThirdEndMesh.Show();
            ThirdEndCollision.Disabled = false;
            System.Consume(((OpenEnd)Results["collider"]).Parent.System);
            Friends.Add(((OpenEnd)Results["collider"]).Parent);
        }
        else
        {
            ThirdEndMesh.Hide();
            ThirdEndCollision.Disabled = true;
        }

        Results = State.IntersectRay(
            Translation,
            Position4.GlobalTransform.origin,
            new Godot.Collections.Array {
            this,
            ForthOpenEnd,
            Game.PossessedPlayer.ValueOr(() => null)
        },
            2 | 4
            );
        if (Results.Count > 0 && Results["collider"] is OpenEnd)
        {
            ForthEndMesh.Show();
            ForthEndCollision.Disabled = false;
            System.Consume(((OpenEnd)Results["collider"]).Parent.System);
            Friends.Add(((OpenEnd)Results["collider"]).Parent);
        }
        else
        {
            ForthEndMesh.Hide();
            ForthEndCollision.Disabled = true;
        }

        Results = State.IntersectRay(
            Translation,
            Position5.GlobalTransform.origin,
            new Godot.Collections.Array {
            this,
            FifthOpenEnd,
            Game.PossessedPlayer.ValueOr(() => null)
        },
            2 | 4
            );
        if (Results.Count > 0 && Results["collider"] is OpenEnd)
        {
            FifthEndMesh.Show();
            FifthEndCollision.Disabled = false;
            System.Consume(((OpenEnd)Results["collider"]).Parent.System);
            Friends.Add(((OpenEnd)Results["collider"]).Parent);
        }
        else
        {
            FifthEndMesh.Hide();
            FifthEndCollision.Disabled = true;
        }

        Results = State.IntersectRay(
            Translation,
            Position6.GlobalTransform.origin,
            new Godot.Collections.Array {
            this,
            SixthOpenEnd,
            Game.PossessedPlayer.ValueOr(() => null)
        },
            2 | 4
            );
        if (Results.Count > 0 && Results["collider"] is OpenEnd)
        {
            SixthEndMesh.Show();
            SixthEndCollision.Disabled = false;
            System.Consume(((OpenEnd)Results["collider"]).Parent.System);
            Friends.Add(((OpenEnd)Results["collider"]).Parent);
        }
        else
        {
            SixthEndMesh.Hide();
            SixthEndCollision.Disabled = true;
        }

        if (InitiallyFilledFriends && !Friends.SetEquals(OriginalFriends))
        {
            System = new PipeSystem(this);
            RecursiveAddFriendsToSystem();
        }
        InitiallyFilledFriends = true;
    }