Esempio n. 1
0
    void        AttachItem(int itemID)
    {
        Body body = UToolS.SelectBody();

        if (body != null)
        {
            var       partlist = Creation.ReadShipObject(body.gameObject); OpShip.OSIDE seldir;
            var       selpart = OpShip.GetInsertParent(partlist, itemID, out seldir);
            TablePart newpart = OpShip.NewInsertItem(selpart, seldir, itemID);

            Item item = Creation.MakeItemObject(newpart, body.transform);
            item.renderer.material = MainRenderer.GetMeterial(item.gameObject, body.tone);

            if (newpart.posx != 0)
            {
                TablePart newpair = newpart;
                newpair.posx = -newpart.posx;
                newpair.flip = (byte)(newpart.flip == 1 ? 0 : 1);
                if (newpart.angle == 90 || newpart.angle == -90 || newpart.angle == 270)
                {
                    newpair.angle = IMath.GetCenterDegree(newpart.angle + 180);
                }

                Item itemPair = Creation.MakeItemObject(newpair, body.transform);
                itemPair.renderer.material = MainRenderer.GetMeterial(itemPair.gameObject, body.tone);
            }

            Creation.DepthSort(body.transform);
        }
    }
Esempio n. 2
0
        private void Update_Movement(Beatmap.Stage linkedStage, Beatmap.Track trackData)
        {
            var(zoneMin, zoneMax, zoneSize, _) = ZoneMinMax;
            float trackWidth  = GetTrackWidth(trackData);
            float stageWidth  = Stage.GetStageWidth(linkedStage);
            float stageHeight = Stage.GetStageHeight(linkedStage);
            float stagePivotY = Stage.GetStagePivotY(linkedStage);
            float stageRotZ   = Stage.GetStageWorldRotationZ(linkedStage);
            var   stagePos    = Stage.GetStagePosition(linkedStage, trackData.StageIndex);
            float rotX        = GetTrackAngle(trackData);
            float trackX      = GetTrackX(trackData);
            var   pos         = Stage.LocalToZone(trackX, 0f, 0f, stagePos, stageWidth, stageHeight, stagePivotY, stageRotZ);

            // Movement
            transform.position      = Util.Vector3Lerp3(zoneMin, zoneMax, pos.x, pos.y);
            transform.localRotation = Quaternion.Euler(0f, 0f, stageRotZ) * Quaternion.Euler(rotX, 0, 0);
            ColSize = MainRenderer.transform.localScale = m_TrackTintRenderer.transform.localScale = new Vector3(
                zoneSize * trackWidth * stageWidth,
                zoneSize * stageHeight,
                1f
                );

            // Tray
            if (trackData.HasTray)
            {
                var traySize      = GetRectSize(SkinType.Tray, trackData.ItemType, false, false);
                var judgeLineSize = GetRectSize(SkinType.JudgeLine, trackData.ItemType);
                var trayPos       = LocalToZone(
                    TrayX, judgeLineSize.y / 2f / stageHeight, 0f,
                    stagePos, stageWidth, stageHeight, stagePivotY, stageRotZ,
                    trackX, trackWidth, rotX
                    );
                m_TrayRenderer.transform.position   = Util.Vector3Lerp3(zoneMin, zoneMax, trayPos.x, trayPos.y);
                m_TrayRenderer.transform.localScale = new Vector3(traySize.x, traySize.y, 1f);
                m_TrayRenderer.Scale = traySize;
            }

            // Renderer
            MainRenderer.RendererEnable        = true;
            m_TrackTintRenderer.RendererEnable = true;
            m_TrackTintRenderer.ItemType       = trackData.ItemType;
            MainRenderer.ItemType         = trackData.ItemType;
            m_TrayRenderer.RendererEnable = trackData.HasTray;
            m_TrayRenderer.ItemType       = trackData.ItemType;
            MainRenderer.Duration         = m_TrayRenderer.Duration = m_TrackTintRenderer.Duration = Duration;
            MainRenderer.Scale            = m_TrackTintRenderer.Scale = new Vector2(stageWidth * trackWidth, stageHeight);
            m_TrackTintRenderer.Tint      = trackData.c_Tint = GetTrackColor(trackData);
            MainRenderer.Alpha            = m_TrayRenderer.Alpha = Stage.GetStageAlpha(linkedStage) * GetTrackAlpha(trackData);
            m_TrackTintRenderer.Alpha    *= MainRenderer.Alpha;
            MainRenderer.SetSortingLayer(SortingLayerID_Track, GetSortingOrder());
            m_TrackTintRenderer.SetSortingLayer(SortingLayerID_TrackTint, GetSortingOrder());
            m_TrayRenderer.SetSortingLayer(SortingLayerID_Tray, GetSortingOrder());
        }
Esempio n. 3
0
        internal WorldRenderer(MainRenderer mainRenderer)
        {
            MainRenderer = mainRenderer;

            Sun           = new Sunlight();
            Sun.Color     = new Vector4(0.78f, 0.88f, 1.0f, 1.0f);
            Sun.Direction = new Vector3(-0.013f, -0.125f, -0.111f);

            Sun.Strength = 1.6f;

            Sun.Ambient  = new Vector3(0.3f, 0.3f, 0.3f);
            Sun.Diffuse  = new Vector3(0.5f, 0.5f, 0.5f);
            Sun.Specular = new Vector3(0.1f, 0.1f, 0.1f);
        }
Esempio n. 4
0
        private void Update_Movement(Beatmap.Stage stageData, int stageIndex)
        {
            var(zoneMin, zoneMax, zoneSize, ratio) = ZoneMinMax;
            float width            = GetStageWidth(stageData);
            float height           = GetStageHeight(stageData);
            float pivotY           = GetStagePivotY(stageData);
            var   stagePos         = GetStagePosition(stageData, stageIndex);
            var   judgeLineSize    = GetRectSize(SkinType.JudgeLine, stageData.ItemType);
            var   stageColor       = GetStageColor(stageData);
            float stageAlpha       = GetStageAlpha(stageData) * stageColor.a;
            var   stagePosition    = Util.Vector3Lerp3(zoneMin, zoneMax, stagePos.x, stagePos.y);
            var   stageRotation    = Quaternion.Euler(0f, 0f, GetStageWorldRotationZ(stageData));
            var   rendererPosition = new Vector3(0f, -height * pivotY * zoneSize, 0f);
            float judgeWidth       = InfiniteJudgeLine ? Util.GetMaxDistanceBetweenLineAndRect(
                stagePosition, stagePosition + stageRotation * Vector3.right,
                zoneMin, new Vector2(zoneMax.x, zoneMin.y + zoneSize / ratio)
                ) * 2f : zoneSize * width;

            // Movement
            transform.position      = stagePosition;
            transform.localRotation = stageRotation;
            ColSize = MainRenderer.transform.localScale = new Vector3(zoneSize * width, Mathf.Max(zoneSize * height, 0.00001f), 1f);
            MainRenderer.transform.localPosition        = rendererPosition;
            m_JudgelineRenderer.transform.localPosition = rendererPosition;
            m_JudgelineRenderer.transform.localScale    = new Vector3(judgeWidth, Mathf.Max(zoneSize * judgeLineSize.y, 0.00001f), 1f);
            ColPivotY = pivotY;

            // Renderer
            MainRenderer.RendererEnable = true;
            MainRenderer.ItemType       = stageData.ItemType;
            MainRenderer.Scale          = new Vector2(width, height);
            MainRenderer.Duration       = Duration;
            MainRenderer.Tint           = stageColor;
            MainRenderer.Alpha          = stageAlpha;
            MainRenderer.SetSortingLayer(SortingLayerID_Stage, GetSortingOrder());

            m_JudgelineRenderer.RendererEnable = true;
            m_JudgelineRenderer.ItemType       = stageData.ItemType;
            m_JudgelineRenderer.Tint           = stageColor;
            m_JudgelineRenderer.Alpha          = stageAlpha;
            m_JudgelineRenderer.Duration       = Duration;
            m_JudgelineRenderer.Scale          = new Vector2(judgeWidth, judgeLineSize.y);
            m_JudgelineRenderer.SetSortingLayer(SortingLayerID_Judge, GetSortingOrder());
        }
Esempio n. 5
0
        protected override void OnDelete()
        {
            MainRenderer?.Delete();
            MainRenderer = null;

            SkyWobjet?.Delete();
            SkyWobjet = null;

            SunWobject?.Delete();
            SunWobject = null;

            MoonWobject?.Delete();
            MoonWobject = null;

            Camera?.Delete();
            Camera = null;

            Instance = null;

            base.OnDelete();
        }
Esempio n. 6
0
        public void Initialize(MainRenderer mainRenderer, PlayerRenderer player1Renderer, PlayerRenderer player2Renderer, IPlayer player1, IPlayer player2)
        {
            this.StopGame();

            this.mainRenderer    = mainRenderer;
            this.player1Renderer = player1Renderer;
            this.player2Renderer = player2Renderer;

            var gameContext = new GameContext()
            {
                CurrentPlayer = (new Random()).Next(2),
                Players       = new IPlayer[2] {
                    player1, player2
                },
                Score          = new int[2],
                ExceptionCount = new int[2],
                ChickenCount   = new int[2],
                WinFlag        = new bool[2],
                OriginField    = MapHelper.SetNumbers(MapHelper.SetMines(MapHelper.CreateFields())),
                PlayField      = MapHelper.CreateFields()
            };

            this.startGame(gameContext);
        }
Esempio n. 7
0
 internal GUIRenderer(MainRenderer mainRenderer)
 {
     MainRenderer = mainRenderer;
 }
Esempio n. 8
0
        private void Update_Movement(Beatmap.Note noteData, bool tap, SkinType lumType)
        {
            // Life Time
            float noteEndTime = Time + noteData.Duration;

            MainRenderer.Duration       = Duration;
            MainRenderer.LifeTime       = MusicTime < noteEndTime ? MusicTime - noteData.Time : MusicTime - noteEndTime;
            MainRenderer.RendererEnable = true;

            // Get/Check Linked Track/Stage
            MainRenderer.RendererEnable = false;
            var linkedTrack = Beatmap.Tracks[noteData.TrackIndex];

            if (linkedTrack is null || !linkedTrack._Active)
            {
                return;
            }
            var linkedStage = Beatmap.Stages[linkedTrack.StageIndex];

            if (linkedStage is null || !linkedStage._Active)
            {
                return;
            }

            Time = noteData.Time;
            var   judgeLineSize = GetRectSize(SkinType.JudgeLine, 0);
            var   stagePos      = Stage.GetStagePosition(linkedStage, linkedTrack.StageIndex);
            float stageWidth    = Stage.GetStageWidth(linkedStage);
            float stagePivotY   = Stage.GetStagePivotY(linkedStage);
            float stageHeight   = Stage.GetStageHeight(linkedStage);
            float stageRotZ     = Stage.GetStageWorldRotationZ(linkedStage);
            float trackX        = Track.GetTrackX(linkedTrack);
            float trackWidth    = Track.GetTrackWidth(linkedTrack);
            float trackRotX     = Track.GetTrackAngle(linkedTrack);

            var(zoneMin, zoneMax, zoneSize, _) = ZoneMinMax;
            var pos = Track.LocalToZone(
                noteData.X, stageHeight > 0f ? judgeLineSize.y / 2f / stageHeight : 0f, Note.GetNoteZ(noteData),
                stagePos, stageWidth, stageHeight, stagePivotY, stageRotZ,
                trackX, trackWidth, trackRotX
                );
            var noteWorldPos = Util.Vector3Lerp3(zoneMin, zoneMax, pos.x, pos.y, pos.z);

            // Movement
            var   noteSize = GetRectSize(SkinType.Note, noteData.ItemType);
            var   lumSize = GetRectSize(lumType, 0, true, true);
            float scaleX, scaleY;

            if (lumSize.x < 0f)
            {
                // Scaled
                scaleX = (noteSize.x < 0f ? stageWidth * trackWidth * noteData.Width : noteSize.x) + LuminousAppend.x;
            }
            else
            {
                // Fixed
                scaleX = lumSize.x + LuminousAppend.x;
            }
            if (lumSize.y < 0f)
            {
                // Scaled
                scaleY = (tap ? LumHeight_Tap : LumHeight_Hold) + LuminousAppend.y;
            }
            else
            {
                // Fixed
                scaleY = lumSize.y + LuminousAppend.y;
            }

            transform.position = noteWorldPos;
            MainRenderer.transform.rotation   = Quaternion.Euler(0f, 0f, stageRotZ);
            MainRenderer.transform.localScale = new Vector3(
                zoneSize * scaleX,
                zoneSize * scaleY,
                1f
                );

            // Renderer
            MainRenderer.RendererEnable = true;
            MainRenderer.Loop           = lumType == SkinType.NoteLuminous ? 1 : 2;
            MainRenderer.Scale          = new Vector2(scaleX, scaleY);
            MainRenderer.SetSortingLayer(SortingLayerID_Lum, GetSortingOrder());
        }
Esempio n. 9
0
        public void SetHolographicSpace(HolographicSpace holographicSpace)
        {
            this.holographicSpace = holographicSpace;

            //
            // TODO: Add code here to initialize your content.
            //

#if DRAW_SAMPLE_CONTENT
            // Initialize the sample hologram.
            spinningCubeRenderer = new SpinningCubeRenderer(deviceResources);
            physicalCamera       = new PhysicalCamera(deviceResources.D3DDevice, false);
            physicalCamera.Initialize();
            // cameraTestRenderer = new CameraTestRenderer(deviceResources, physicalCamera);
            // meshTestRenderer = new MeshTestRenderer(deviceResources, physicalCamera);
            meshCollectionTexturer = new MainRenderer(deviceResources, physicalCamera);

            spatialInputHandler = new SpatialInputHandler();
#endif

            // Use the default SpatialLocator to track the motion of the device.
            locator = SpatialLocator.GetDefault();

            // Be able to respond to changes in the positional tracking state.
            locator.LocatabilityChanged += OnLocatabilityChanged;

            // Respond to camera added events by creating any resources that are specific
            // to that camera, such as the back buffer render target view.
            // When we add an event handler for CameraAdded, the API layer will avoid putting
            // the new camera in new HolographicFrames until we complete the deferral we created
            // for that handler, or return from the handler without creating a deferral. This
            // allows the app to take more than one frame to finish creating resources and
            // loading assets for the new holographic camera.
            // This function should be registered before the app creates any HolographicFrames.
            holographicSpace.CameraAdded += OnCameraAdded;

            // Respond to camera removed events by releasing resources that were created for that
            // camera.
            // When the app receives a CameraRemoved event, it releases all references to the back
            // buffer right away. This includes render target views, Direct2D target bitmaps, and so on.
            // The app must also ensure that the back buffer is not attached as a render target, as
            // shown in DeviceResources.ReleaseResourcesForBackBuffer.
            holographicSpace.CameraRemoved += OnCameraRemoved;

            // The simplest way to render world-locked holograms is to create a stationary reference frame
            // when the app is launched. This is roughly analogous to creating a "world" coordinate system
            // with the origin placed at the device's position as the app is launched.
            referenceFrame = locator.CreateStationaryFrameOfReferenceAtCurrentLocation();

            //meshTestRenderer.Initialize(referenceFrame.CoordinateSystem);
            meshCollectionTexturer.Initialize(referenceFrame.CoordinateSystem);

            // Notes on spatial tracking APIs:
            // * Stationary reference frames are designed to provide a best-fit position relative to the
            //   overall space. Individual positions within that reference frame are allowed to drift slightly
            //   as the device learns more about the environment.
            // * When precise placement of individual holograms is required, a SpatialAnchor should be used to
            //   anchor the individual hologram to a position in the real world - for example, a point the user
            //   indicates to be of special interest. Anchor positions do not drift, but can be corrected; the
            //   anchor will use the corrected position starting in the next frame after the correction has
            //   occurred.
        }
Esempio n. 10
0
 public GameManager(MainRenderer renderer)
 {
     this.renderer = renderer;
     this.playFlag = false;
 }
Esempio n. 11
0
        protected override void OnLoad()
        {
            Directory.CreateDirectory("fantasia");
            Logger.Init();
            Bind.KeyboardState = KeyboardState;
            VSync = VSyncMode.Off;

            _renderer       = new MainRenderer(Size.X, Size.Y);
            RenderFrequency = _framesPerSec;
            UpdateFrequency = _ticksPerSec;

            try
            {
                //Steamworks.SteamClient.Init(1363820);
            }
            catch (Exception e)
            {
                Logger.LogError(e);
                _quit = true;
            }

            Block.RegisterBlocks();

            AddonSystem.Init();
            AddonSystem.LoadAddonBlocks();

            _renderer.State = RendererState.InGame;

            Panel pan = new Panel(.5, .5);

            pan.Width  = .1;
            pan.Height = .1;

            _renderer.GUIRenderer.GUIElements.Add(pan);

            //List<string> files = Directory.GetFiles("fantasia/textures/", "*.png", SearchOption.AllDirectories).ToList();
            //files.AddRange(Directory.GetFiles("fantasia/addons/Minecraft/textures/", "*.png", SearchOption.AllDirectories).ToList());
            //AtlasCreator.GenAtlas(files.ToList());

            AtlasCreator.GetTexturesAndGenAtlas();
            _renderer.WorldRenderer.BlockAtlas = Texture.LoadAtlas();

            GL.Enable(EnableCap.CullFace);
            GL.CullFace(CullFaceMode.Back);
            GL.Enable(EnableCap.DepthTest);
            GL.ClearColor(.702f, .827f, .871f, 1.0f);

            LocalPlayer = new LocalPlayer();

            //Test Server
            _server = new IntegratedServer(1, LocalPlayer);
            //Set Active World
            _renderer.WorldRenderer.ActiveWorld = _server.World;

            Bind.TryBindKey(Keys.W, "forward");
            Bind.TryBindKey(Keys.S, "backward");
            Bind.TryBindKey(Keys.A, "left");
            Bind.TryBindKey(Keys.D, "right");
            Bind.TryBindKey(Keys.Space, "jump");

            CursorGrabbed = true;

            base.OnLoad();
        }
Esempio n. 12
0
        private void Update_Movement(Beatmap.Stage linkedStage, Beatmap.Track linkedTrack, Beatmap.Note noteData, Beatmap.Note linkedNote)
        {
            var   stagePos    = Stage.GetStagePosition(linkedStage, linkedTrack.StageIndex);
            float stageWidth  = Stage.GetStageWidth(linkedStage);
            float stagePivotY = Stage.GetStagePivotY(linkedStage);
            float stageHeight = Stage.GetStageHeight(linkedStage);
            float stageRotZ   = Stage.GetStageWorldRotationZ(linkedStage);
            float trackX      = Track.GetTrackX(linkedTrack);
            float trackWidth  = Track.GetTrackWidth(linkedTrack);
            float trackAngle  = Track.GetTrackAngle(linkedTrack);
            float gameOffset  = GetGameDropOffset(noteData.TimingID, noteData._SpeedMuti);
            float noteY01     = MusicTime < Time ? (noteData._NoteDropStart - gameOffset) : 0f;
            float noteSizeY   = noteData._NoteDropEnd - gameOffset - noteY01;

            var(zoneMin, zoneMax, zoneSize, _) = ZoneMinMax;
            bool  isLink      = linkedNote != null;
            bool  activeSelf  = GetNoteActive(noteData, null, noteData._AppearTime);
            float alpha       = Stage.GetStageAlpha(linkedStage) * Track.GetTrackAlpha(linkedTrack) * Mathf.Clamp01(16f - noteY01 * 16f);
            bool  highlighing = MusicTime > Time && MusicTime < Time + Duration;
            float noteZ       = GetNoteZ(noteData);
            var   tint        = highlighing ? HighlightTints[(int)SkinType.Note] : WHITE_32;

            if (TintNote)
            {
                tint *= linkedTrack.c_Tint;
            }

            // Movement
            var noteZonePos = Track.LocalToZone(
                noteData.X, noteY01, noteZ,
                stagePos, stageWidth, stageHeight, stagePivotY, stageRotZ,
                trackX, trackWidth, trackAngle
                );
            var noteRot      = Quaternion.Euler(0f, 0f, stageRotZ) * Quaternion.Euler(trackAngle, 0f, 0f);
            var noteWorldPos = Util.Vector3Lerp3(zoneMin, zoneMax, noteZonePos.x, noteZonePos.y, noteZonePos.z);

            // Size
            var     noteSize          = GetRectSize(SkinType.Note, noteData.ItemType);
            float   minHeight         = GetMinHeight(SkinType.Note, noteData.ItemType);
            float   noteScaleX        = noteSize.x < 0f ? stageWidth * trackWidth * noteData.Width : noteSize.x;
            float   noteScaleY_scaler = Mathf.Max(noteSizeY * stageHeight, minHeight);
            float   noteScaleY        = Mathf.Max(noteSizeY * stageHeight + minHeight, 0f);
            Vector3 zoneNoteScale     = new Vector3(
                zoneSize * noteScaleX,
                zoneSize * noteScaleY,
                1f
                );
            Vector3 zoneNoteScale_scaler = new Vector3(
                zoneSize * noteScaleX,
                zoneSize * noteScaleY_scaler,
                1f
                );

            // Transform
            transform.position  = Late_NoteWorldPos = noteWorldPos;
            ColRot              = MainRenderer.transform.rotation = noteRot;
            ColSize             = MainRenderer.transform.localScale = zoneNoteScale;
            m_Scaler.localScale = zoneNoteScale_scaler;
            m_Scaler.rotation   = noteRot;

            // Renderer
            MainRenderer.RendererEnable = !isLink || activeSelf;
            MainRenderer.ItemType       = noteData.ItemType;
            MainRenderer.Tint           = tint;
            MainRenderer.Alpha          = alpha;
            MainRenderer.Duration       = Duration;
            MainRenderer.Scale          = new Vector2(noteScaleX, noteScaleY);
            MainRenderer.SetSortingLayer(
                Duration <= FLOAT_GAP ? SortingLayerID_Note : SortingLayerID_Note_Hold,
                GetSortingOrder()
                );
        }