コード例 #1
0
    public WallController GetWall(WallPoint point)
    {
        if (walls.ContainsKey(point.toInt()))
        {
            return(walls[point.toInt()]);
        }

        return(null);
    }
コード例 #2
0
    public void EditorRemoveWall(WallPoint point)
    {
        WallController w = null;

        if (walls.TryGetValue(point.toInt(), out w))
        {
            GameObject.DestroyImmediate(w.gameObject);
            walls.Remove(point.toInt());
        }
    }
コード例 #3
0
	void InstantiateIndicator(WallPoint p, bool isDoor)
	{
		if(indicators.ContainsKey(p.toInt()))
			return;

		Transform ph = Instantiate<Transform>(isDoor?DoorIndicator:PlaceIndicator);
		ph.parent = transform;
		ph.localPosition = new Vector3(p.X,p.Y,0);
		indicators.Add(p.toInt(),ph);
	}
コード例 #4
0
    void InstantiateIndicator(WallPoint p, bool isDoor)
    {
        if (indicators.ContainsKey(p.toInt()))
        {
            return;
        }

        Transform ph = Instantiate <Transform>(isDoor?DoorIndicator:PlaceIndicator);

        ph.parent        = transform;
        ph.localPosition = new Vector3(p.X, p.Y, 0);
        indicators.Add(p.toInt(), ph);
    }
コード例 #5
0
	public bool Process (Segmentator s, ILogicObject o)
	{
		bool res = false;
	
		if(o.ObjectType == CellObjects.Heater || 
		   o.ObjectType == CellObjects.HeatingPipe || 
		   o.ObjectType == CellObjects.Sink ||
		   o.ObjectType == CellObjects.Toilet)
			return false;

		o.ObjectRect.Foreach((MapPoint p) => {

			WallPoint wp;

			wp = new WallPoint(p.X,p.Y);
			if(s.Doors.ContainsKey(wp.toInt()))
				res = true;

			wp = new WallPoint(p.X+1,p.Y);
			if(s.Doors.ContainsKey(wp.toInt()))
				res = true;

			wp = new WallPoint(p.X,p.Y+1);
			if(s.Doors.ContainsKey(wp.toInt()))
				res = true;

			wp = new WallPoint(p.X+1,p.Y+1);
			if(s.Doors.ContainsKey(wp.toInt()))
				res = true;

		});
		return res;
	}
コード例 #6
0
    public void PlaceIndicators(Dictionary <int, CellController> cells,
                                Dictionary <int, WallController> walls,
                                WallController wallPrefab)
    {
        bool isDoor = wallPrefab.PrefabIsDoor();

        foreach (CellController c in cells.Values)
        {
            if (c.IsMultiCell)
            {
                MapRect rect = c.GetCurCellIndexes();
                rect.Foreach((MapPoint p) => {
                    WallPoint wp = new WallPoint(p.X, p.Y);
                    if ((isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M, wp))
                    {
                        InstantiateIndicator(wp, isDoor);
                    }
                });
            }
            else
            {
                WallPoint wp = new WallPoint(c.Position.X, c.Position.Y);
                if ((isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M, wp))
                {
                    InstantiateIndicator(wp, isDoor);
                }
            }
        }
    }
コード例 #7
0
    public bool IsInsideBuilding(WallPoint wallPoint)
    {
        bool res =
            cells.ContainsKey(wallPoint.toInt()) &&
            cells.ContainsKey(new WallPoint(wallPoint.X - 1, wallPoint.Y).toInt()) &&
            cells.ContainsKey(new WallPoint(wallPoint.X, wallPoint.Y - 1).toInt()) &&
            cells.ContainsKey(new WallPoint(wallPoint.X - 1, wallPoint.Y - 1).toInt());

        return(res);
    }
コード例 #8
0
    private void DeleteWall(WallPoint wp)
    {
        WallController wall = GetWall(wp);

        if (wall != null)
        {
            Destroy(wall.gameObject);
            walls.Remove(wp.toInt());
            UpdateWallsAround(wp);
        }
    }
コード例 #9
0
    public void ForEachWall(MapPoint point, Action <WallPoint, WallController, Corner> action)
    {
        WallController wc = null;
        WallPoint      wp;

        for (int i = 0; i < 4; i++)
        {
            wp = new WallPoint(point.X + i % 2, point.Y + (i > 1?1:0));

            if (wp.X < 0 || wp.Y < 0)
            {
                continue;
            }
            walls.TryGetValue(wp.toInt(), out wc);
            action(wp, wc, cornersTable[i]);
            wc = null;
        }
    }
コード例 #10
0
    public WallController ReplaceWall(WallPoint point, WallController prefab)
    {
        if (point.X < 0 || point.Y < 0 || point.X > 0xffff || point.Y > 0xffff)
        {
            return(null);
        }

        WallController res = null;
        int            key = point.toInt();

        if (walls.ContainsKey(key))
        {
            GameObject.Destroy(walls[key].gameObject);
            walls.Remove(key);
        }

        res = SetWall(point, prefab);

        return(res);
    }
コード例 #11
0
    public bool Process(Segmentator s, ILogicObject o)
    {
        bool res = false;

        if (o.ObjectType == CellObjects.Heater ||
            o.ObjectType == CellObjects.HeatingPipe ||
            o.ObjectType == CellObjects.Sink ||
            o.ObjectType == CellObjects.Toilet)
        {
            return(false);
        }

        o.ObjectRect.Foreach((MapPoint p) => {
            WallPoint wp;

            wp = new WallPoint(p.X, p.Y);
            if (s.Doors.ContainsKey(wp.toInt()))
            {
                res = true;
            }

            wp = new WallPoint(p.X + 1, p.Y);
            if (s.Doors.ContainsKey(wp.toInt()))
            {
                res = true;
            }

            wp = new WallPoint(p.X, p.Y + 1);
            if (s.Doors.ContainsKey(wp.toInt()))
            {
                res = true;
            }

            wp = new WallPoint(p.X + 1, p.Y + 1);
            if (s.Doors.ContainsKey(wp.toInt()))
            {
                res = true;
            }
        });
        return(res);
    }
コード例 #12
0
    public WallController SetWall(WallPoint point, WallController prefab)
    {
        if (point.X < 0 || point.Y < 0 || point.X > 0xffff || point.Y > 0xffff)
        {
            return(null);
        }

        WallController res = null;
        int            key = point.toInt();

        if (!walls.ContainsKey(key))
        {
            WallController newWall = Instantiate <WallController>(prefab);
            newWall.transform.parent = transform;
            newWall.Position         = point;
            walls.Add(key, newWall);
            res = newWall;
        }
        else
        {
            res = walls[key];
        }
        return(res);
    }
コード例 #13
0
	public void EditorRemoveWall(WallPoint point)
	{
		WallController w = null;
		if(walls.TryGetValue(point.toInt(),out w))
		{
			GameObject.DestroyImmediate(w.gameObject);
			walls.Remove(point.toInt());
		}
	}
コード例 #14
0
	private void DeleteWall(WallPoint wp)
	{
		WallController wall = GetWall(wp);
		if(wall!=null)
		{
			Destroy(wall.gameObject);
			walls.Remove(wp.toInt());
			UpdateWallsAround(wp);
		}
	}
コード例 #15
0
	public WallController GetWall(WallPoint point)
	{

		if(walls.ContainsKey(point.toInt()))
			return walls[point.toInt()];

		return null;
	}
コード例 #16
0
	public WallController SetWall(WallPoint point, WallController prefab)
	{
		if(point.X<0 || point.Y<0 || point.X>0xffff || point.Y>0xffff)
			return null;

		WallController res = null;
		int key = point.toInt();
		if(!walls.ContainsKey(key))
		{
			WallController newWall = Instantiate<WallController>(prefab);
			newWall.transform.parent = transform;
			newWall.Position = point;
			walls.Add(key,newWall);
			res = newWall;
		}
		else
			res = walls[key];
		return res;
	}
コード例 #17
0
	public WallController ReplaceWall(WallPoint point, WallController prefab)
	{
		if(point.X<0 || point.Y<0 || point.X>0xffff || point.Y>0xffff)
			return null;

		WallController res = null;
		int key = point.toInt();

		if(walls.ContainsKey(key))
		{
			GameObject.Destroy(walls[key].gameObject);
			walls.Remove(key);
		}

		res = SetWall(point, prefab);

		return res;
	}
コード例 #18
0
	public bool IsInsideBuilding(WallPoint wallPoint)
	{
		bool res =
				cells.ContainsKey(wallPoint.toInt()) 
			&& cells.ContainsKey(new WallPoint(wallPoint.X-1,wallPoint.Y).toInt()) 
			&& cells.ContainsKey(new WallPoint(wallPoint.X,wallPoint.Y-1).toInt()) 
			&& cells.ContainsKey(new WallPoint(wallPoint.X-1,wallPoint.Y-1).toInt()) ;
		return res;
	}
コード例 #19
0
	public void ForEachWall(MapPoint point, Action<WallPoint,WallController,Corner> action)
	{
		WallController wc = null;
		WallPoint wp;

		for(int i=0;i<4;i++)
		{
			wp = new WallPoint(point.X+i%2,point.Y+(i>1?1:0));

			if(wp.X<0 || wp.Y<0)
				continue;
			walls.TryGetValue(wp.toInt(),out wc);
			action(wp,wc,cornersTable[i]);
			wc = null;
		}



	}
コード例 #20
0
	public void PlaceIndicators(Dictionary<int, CellController> cells, 
	                            Dictionary<int, WallController> walls, 
	                            WallController wallPrefab)
	{
		bool isDoor =  wallPrefab.PrefabIsDoor();
		foreach(CellController c in cells.Values)
		{
			if(c.IsMultiCell)
			{
				MapRect rect = c.GetCurCellIndexes();
				rect.Foreach((MapPoint p) => {
					WallPoint wp = new WallPoint(p.X,p.Y);
					if(  (isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M,wp))
						InstantiateIndicator(wp, isDoor);
				});
			}
			else
			{
				WallPoint wp = new WallPoint(c.Position.X,c.Position.Y);
				if(  (isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M,wp))
					InstantiateIndicator(wp, isDoor);
			}
		}
	}