//マス到達イベント実行 public void runStopEvent(PlayerStatus aTurnPlayer, Action aCallback) { GameMass tMass = mMaster.mFeild.mMassList[aTurnPlayer.mCurrentMassNumber]; switch (tMass) { case LandMass tLand: stopLand(aTurnPlayer, aCallback); return; case EventMass tEvent: switch (tEvent.mEventType) { case "heart": runHeartEvent(aTurnPlayer, aCallback); return; case "bat": runBatEvent(aTurnPlayer, aCallback); return; case "god": runGodEvent(aTurnPlayer, aCallback); return; } break; case StartMass tStart: getOrbitBounus(aTurnPlayer, aCallback); return; } aCallback(); }
public override void soldLand(PlayerStatus aMyStatus, GameMaster mMaster, Action <LandMass> aCallback) { mMaster.mCamera.mTarget = null; Subject.addObserver(new Observer("playerAi", (aMessage) => { switch (aMessage.name) { case "gamePadDragged": Vector2 tVec = aMessage.getParameter <Vector2>("vector") / -10; mMaster.mCamera.move(tVec); break; case "gamePadClicked": GameMass tMass = aMessage.getParameter <GameMass>("mass"); if (!(tMass is LandMass)) { break; } LandMass tLand = (LandMass)tMass; if (tLand.mOwner != aMyStatus.mPlayerNumber) { break; } Subject.removeObserver("playerAi"); aCallback(tLand); return; } })); }
//マス通過イベント実行 public void runPassEvent(PlayerStatus aTurnPlayer, Action aCallback) { GameMass tMass = mMaster.mFeild.mMassList[aTurnPlayer.mCurrentMassNumber]; switch (tMass) { case StartMass tStart: getOrbitBounus(aTurnPlayer, aCallback); return; } aCallback(); }
//2つのマスを結ぶ線を生成 static public MyBehaviour createRoute(GameMass aMass1, GameMass aMass2) { MyBehaviour tRoute = MyBehaviour.create <MyBehaviour>(); SpriteRenderer tRenderer = tRoute.gameObject.AddComponent <SpriteRenderer>(); tRoute.name = "route"; tRenderer.sprite = Resources.Load <Sprite>("sprites/squareMask"); tRenderer.material = Resources.Load <Material>("material/My_Translucent"); tRenderer.color = new Color(0.9f, 0.9f, 0.9f, 0.8f); tRoute.position = (aMass1.worldPosition + aMass2.worldPosition) / 2f; tRoute.positionY = -0.1f; tRoute.scale = new Vector3(Vector3.Distance(aMass1.worldPosition, aMass2.worldPosition), 0.5f, 1); tRoute.rotateX = 90; tRoute.rotateY = VectorCalculator.corner(new Vector2(1, 0), new Vector2(aMass1.positionX - aMass2.positionX, aMass1.positionZ - aMass2.positionZ)); return(tRoute); }
static public GameFeild create(Arg aStageData) { GameFeild tFeild = MyBehaviour.create <GameFeild>(); tFeild.name = "gameFeild"; //マス作成 foreach (Arg tData in aStageData.get <List <Arg> >("mass")) { GameMass tMass = GameMassFactory.create(tData); tFeild.mMassList.Add(tMass); tMass.transform.SetParent(tFeild.mMassContainer.transform, true); } //ルート作成 for (int i = 0; i < tFeild.mMassList.Count - 1; i++) { MyBehaviour tRoute = createRoute(tFeild.mMassList[i], tFeild.mMassList[i + 1]); tRoute.transform.SetParent(tFeild.mRouteContainer.transform, true); } MyBehaviour tRouteLast = createRoute(tFeild.mMassList[tFeild.mMassList.Count - 1], tFeild.mMassList[0]); tRouteLast.transform.SetParent(tFeild.mRouteContainer.transform, true); //東西南北 foreach (GameMass tMass in tFeild.mMassList) { if (tFeild.mNorth < tMass.worldPosition.z) { tFeild.mNorth = tMass.worldPosition.z; } if (tFeild.mEast < tMass.worldPosition.x) { tFeild.mEast = tMass.worldPosition.x; } if (tFeild.mSouth > tMass.worldPosition.z) { tFeild.mSouth = tMass.worldPosition.z; } if (tFeild.mWest > tMass.worldPosition.x) { tFeild.mWest = tMass.worldPosition.x; } } tFeild.mNorth += 10; tFeild.mEast += 10; tFeild.mSouth -= 15; tFeild.mWest -= 10; tFeild.mHeight = 10; //壁 float tFloorOffset = -0.5f; //床 MyBehaviour tWall = MyBehaviour.create <MyBehaviour>(); tWall.name = "floor"; tWall.transform.SetParent(tFeild.mWallContainer.transform); tWall.gameObject.AddComponent <Canvas>(); Image tImage = tWall.gameObject.AddComponent <Image>(); tImage.sprite = Resources.Load <Sprite>("sprites/wall/" + aStageData.get <string>("floor")); tImage.type = Image.Type.Tiled; tImage.pixelsPerUnitMultiplier = Mathf.Max(tFeild.mEast - tFeild.mWest, tFeild.mNorth - tFeild.mSouth); tWall.rotateX = 90; tWall.position = new Vector3((tFeild.mWest + tFeild.mEast) / 2, tFloorOffset, (tFeild.mNorth + tFeild.mSouth) / 2); tWall.GetComponent <RectTransform>().sizeDelta = new Vector2(tFeild.mEast - tFeild.mWest, tFeild.mNorth - tFeild.mSouth); //北の壁 tWall = MyBehaviour.create <MyBehaviour>(); tWall.name = "north"; tWall.transform.SetParent(tFeild.mWallContainer.transform); tWall.gameObject.AddComponent <Canvas>(); tImage = tWall.gameObject.AddComponent <Image>(); tImage.sprite = Resources.Load <Sprite>("sprites/wall/" + aStageData.get <string>("wall")); tImage.type = Image.Type.Tiled; tImage.pixelsPerUnitMultiplier = Mathf.Max(tFeild.mEast - tFeild.mWest, tFeild.mHeight + tFloorOffset); tWall.position = new Vector3((tFeild.mWest + tFeild.mEast) / 2, (tFeild.mHeight + tFloorOffset) / 2, tFeild.mNorth); tWall.GetComponent <RectTransform>().sizeDelta = new Vector2(tFeild.mEast - tFeild.mWest, tFeild.mHeight - tFloorOffset); //東の壁 tWall = MyBehaviour.create <MyBehaviour>(); tWall.name = "east"; tWall.transform.SetParent(tFeild.mWallContainer.transform); tWall.gameObject.AddComponent <Canvas>(); tImage = tWall.gameObject.AddComponent <Image>(); tImage.sprite = Resources.Load <Sprite>("sprites/wall/" + aStageData.get <string>("wall")); tImage.type = Image.Type.Tiled; tImage.pixelsPerUnitMultiplier = Mathf.Max(tFeild.mNorth - tFeild.mSouth, tFeild.mHeight + tFloorOffset); tWall.rotateY = -90; tWall.position = new Vector3(tFeild.mEast, (tFeild.mHeight + tFloorOffset) / 2, (tFeild.mNorth + tFeild.mSouth) / 2); tWall.GetComponent <RectTransform>().sizeDelta = new Vector2(tFeild.mNorth - tFeild.mSouth, tFeild.mHeight - tFloorOffset); //西の壁 tWall = MyBehaviour.create <MyBehaviour>(); tWall.name = "west"; tWall.transform.SetParent(tFeild.mWallContainer.transform); tWall.gameObject.AddComponent <Canvas>(); tImage = tWall.gameObject.AddComponent <Image>(); tImage.sprite = Resources.Load <Sprite>("sprites/wall/" + aStageData.get <string>("wall")); tImage.type = Image.Type.Tiled; tImage.pixelsPerUnitMultiplier = Mathf.Max(tFeild.mNorth - tFeild.mSouth, tFeild.mHeight + tFloorOffset); tWall.rotateY = 90; tWall.position = new Vector3(tFeild.mWest, (tFeild.mHeight + tFloorOffset) / 2, (tFeild.mNorth + tFeild.mSouth) / 2); tWall.GetComponent <RectTransform>().sizeDelta = new Vector2(tFeild.mNorth - tFeild.mSouth, tFeild.mHeight - tFloorOffset); return(tFeild); }